From 1b115e200b52b4c2d37d981b0dec488bc9cbe654 Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Tue, 13 Oct 2020 16:19:58 +0200 Subject: concretizer: handle version preferences from packages.yaml --- lib/spack/spack/solver/asp.py | 15 ++++++++++++++- lib/spack/spack/solver/concretize.lp | 9 ++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'lib') 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), -- cgit v1.2.3-70-g09d2