concretizer: handle version preferences from packages.yaml

This commit is contained in:
Massimiliano Culpo 2020-10-13 16:19:58 +02:00 committed by Todd Gamblin
parent 9c23ed6484
commit 1b115e200b
2 changed files with 22 additions and 2 deletions

View File

@ -1031,6 +1031,17 @@ def preferred_targets(self, pkg_name):
str(preferred.architecture.target), pkg_name, -10 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): def flag_defaults(self):
self.gen.h2("Compiler flag defaults") self.gen.h2("Compiler flag defaults")
@ -1404,10 +1415,12 @@ def setup(self, driver, specs):
self.gen.h1('Package Constraints') self.gen.h1('Package Constraints')
for pkg in sorted(pkgs): for pkg in sorted(pkgs):
self.gen.h2('Package: %s' % pkg) self.gen.h2('Package rules: %s' % pkg)
self.pkg_rules(pkg) self.pkg_rules(pkg)
self.gen.h2('Package preferences: %s' % pkg)
self.preferred_variants(pkg) self.preferred_variants(pkg)
self.preferred_targets(pkg) self.preferred_targets(pkg)
self.preferred_versions(pkg)
self.gen.h1('Spec Constraints') self.gen.h1('Spec Constraints')
for spec in sorted(specs): for spec in sorted(specs):

View File

@ -15,9 +15,14 @@ version_declared(Package, Version) :- version_declared(Package, Version, _).
:- node(Package). :- node(Package).
version_weight(Package, Weight) 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 version_conflict/2.
#defined preferred_version_declared/3.
%----------------------------------------------------------------------------- %-----------------------------------------------------------------------------
% Dependency semantics % Dependency semantics
@ -243,6 +248,8 @@ target_weight(Target, Package, Weight)
not derive_target_from_parent(_, Package), not derive_target_from_parent(_, Package),
not package_target_weight(Target, 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) target_weight(Target, Dependency, Weight)
:- depends_on(Package, Dependency), :- depends_on(Package, Dependency),
derive_target_from_parent(Package, Dependency), derive_target_from_parent(Package, Dependency),