concretizer: handle version preferences from packages.yaml
This commit is contained in:
parent
9c23ed6484
commit
1b115e200b
@ -1031,6 +1031,17 @@ def preferred_targets(self, pkg_name):
|
||||
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 @@ def setup(self, driver, specs):
|
||||
|
||||
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):
|
||||
|
@ -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),
|
||||
|
Loading…
Reference in New Issue
Block a user