summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMassimiliano Culpo <massimiliano.culpo@gmail.com>2020-10-13 16:19:58 +0200
committerTodd Gamblin <tgamblin@llnl.gov>2020-11-17 10:04:13 -0800
commit1b115e200b52b4c2d37d981b0dec488bc9cbe654 (patch)
treec241ccdfd36d788a4f4e94d146390029d5f15266 /lib
parent9c23ed6484abb0f31e408ae5bc91e56526a12742 (diff)
downloadspack-1b115e200b52b4c2d37d981b0dec488bc9cbe654.tar.gz
spack-1b115e200b52b4c2d37d981b0dec488bc9cbe654.tar.bz2
spack-1b115e200b52b4c2d37d981b0dec488bc9cbe654.tar.xz
spack-1b115e200b52b4c2d37d981b0dec488bc9cbe654.zip
concretizer: handle version preferences from packages.yaml
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/solver/asp.py15
-rw-r--r--lib/spack/spack/solver/concretize.lp9
2 files changed, 22 insertions, 2 deletions
diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py
index 6695dd7b18..9da2677c24 100644
--- a/lib/spack/spack/solver/asp.py
+++ b/lib/spack/spack/solver/asp.py
@@ -1031,6 +1031,17 @@ class SpackSolverSetup(object):
str(preferred.architecture.target), pkg_name, -10
))
+ def preferred_versions(self, pkg_name):
+ packages_yaml = spack.config.get('packages')
+ versions = packages_yaml.get(pkg_name, {}).get('version', [])
+ if not versions:
+ return
+
+ for idx, version in enumerate(reversed(versions)):
+ self.gen.fact(
+ fn.preferred_version_declared(pkg_name, version, -(idx + 1))
+ )
+
def flag_defaults(self):
self.gen.h2("Compiler flag defaults")
@@ -1404,10 +1415,12 @@ class SpackSolverSetup(object):
self.gen.h1('Package Constraints')
for pkg in sorted(pkgs):
- self.gen.h2('Package: %s' % pkg)
+ self.gen.h2('Package rules: %s' % pkg)
self.pkg_rules(pkg)
+ self.gen.h2('Package preferences: %s' % pkg)
self.preferred_variants(pkg)
self.preferred_targets(pkg)
+ self.preferred_versions(pkg)
self.gen.h1('Spec Constraints')
for spec in sorted(specs):
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index af168ce109..4688f51c20 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -15,9 +15,14 @@ version_declared(Package, Version) :- version_declared(Package, Version, _).
:- node(Package).
version_weight(Package, Weight)
- :- version(Package, Version), version_declared(Package, Version, Weight).
+ :- version(Package, Version), version_declared(Package, Version, Weight),
+ not preferred_version_declared(Package, Version, _).
+
+version_weight(Package, Weight)
+ :- version(Package, Version), preferred_version_declared(Package, Version, Weight).
#defined version_conflict/2.
+#defined preferred_version_declared/3.
%-----------------------------------------------------------------------------
% Dependency semantics
@@ -243,6 +248,8 @@ target_weight(Target, Package, Weight)
not derive_target_from_parent(_, Package),
not package_target_weight(Target, Package, _).
+% TODO: Need to account for the case of more than one parent
+% TODO: each of which sets different targets
target_weight(Target, Dependency, Weight)
:- depends_on(Package, Dependency),
derive_target_from_parent(Package, Dependency),