Fix a couple of minor bugs with ASP weights (#36522)
Reorder versions so that deprecated ones are last. Account for default not used when the variant exists.
This commit is contained in:
parent
516a023173
commit
16404034dc
@ -1579,7 +1579,12 @@ def key_fn(item):
|
||||
# When COMPARING VERSIONS, the '@develop' version is always
|
||||
# larger than other versions. BUT when CONCRETIZING, the largest
|
||||
# NON-develop version is selected by default.
|
||||
return info.get("preferred", False), not version.isdevelop(), version
|
||||
return (
|
||||
info.get("preferred", False),
|
||||
not info.get("deprecated", False),
|
||||
not version.isdevelop(),
|
||||
version,
|
||||
)
|
||||
|
||||
for idx, item in enumerate(sorted(pkg_cls.versions.items(), key=key_fn, reverse=True)):
|
||||
v, version_info = item
|
||||
@ -2282,10 +2287,8 @@ def variant_value(self, pkg, name, value):
|
||||
def version(self, pkg, version):
|
||||
self._specs[pkg].versions = spack.version.ver([version])
|
||||
|
||||
def node_compiler(self, pkg, compiler):
|
||||
self._specs[pkg].compiler = spack.spec.CompilerSpec(compiler)
|
||||
|
||||
def node_compiler_version(self, pkg, compiler, version):
|
||||
self._specs[pkg].compiler = spack.spec.CompilerSpec(compiler)
|
||||
self._specs[pkg].compiler.versions = spack.version.VersionList([version])
|
||||
|
||||
def node_flag_compiler_default(self, pkg):
|
||||
@ -2390,7 +2393,6 @@ def sort_fn(function_tuple):
|
||||
|
||||
hash attributes are handled first, since they imply entire concrete specs
|
||||
node attributes are handled next, since they instantiate nodes
|
||||
node_compiler attributes are handled next to ensure they come before node_compiler_version
|
||||
external_spec_selected attributes are handled last, so that external extensions can find
|
||||
the concrete specs on which they depend because all nodes are fully constructed before we
|
||||
consider which ones are external.
|
||||
@ -2400,8 +2402,6 @@ def sort_fn(function_tuple):
|
||||
return (-5, 0)
|
||||
elif name == "node":
|
||||
return (-4, 0)
|
||||
elif name == "node_compiler":
|
||||
return (-3, 0)
|
||||
elif name == "node_flag":
|
||||
return (-2, 0)
|
||||
elif name == "external_spec_selected":
|
||||
|
@ -303,8 +303,8 @@ attr("virtual_node", Virtual)
|
||||
:- attr("virtual_node", Virtual).
|
||||
error(2, "Cannot find valid provider for virtual {0}", Virtual)
|
||||
:- attr("virtual_node", Virtual),
|
||||
P = #count{ Package : provider(Package, Virtual)},
|
||||
P < 1.
|
||||
not provider(_, Virtual).
|
||||
|
||||
error(2, "Spec cannot include multiple providers for virtual '{0}'\n Requested '{1}' and '{2}'", Virtual, P1, P2)
|
||||
:- attr("virtual_node", Virtual),
|
||||
provider(P1, Virtual),
|
||||
@ -566,8 +566,7 @@ error(2, "No valid value for variant '{1}' of package '{0}'", Package, Variant)
|
||||
:- attr("node", Package),
|
||||
variant(Package, Variant),
|
||||
build(Package),
|
||||
C = #count{ Value : attr("variant_value", Package, Variant, Value) },
|
||||
C < 1.
|
||||
not attr("variant_value", Package, Variant, _).
|
||||
|
||||
% if a variant is set to anything, it is considered 'set'.
|
||||
attr("variant_set", Package, Variant) :- attr("variant_set", Package, Variant, _).
|
||||
@ -618,6 +617,7 @@ variant_not_default(Package, Variant, Value)
|
||||
% A default variant value that is not used
|
||||
variant_default_not_used(Package, Variant, Value)
|
||||
:- variant_default_value(Package, Variant, Value),
|
||||
variant(Package, Variant),
|
||||
not attr("variant_value", Package, Variant, Value),
|
||||
attr("node", Package).
|
||||
|
||||
@ -701,8 +701,7 @@ attr("node_platform_set", Package) :- attr("node_platform_set", Package, _).
|
||||
% each node must have a single platform
|
||||
error(2, "No valid platform found for {0}", Package)
|
||||
:- attr("node", Package),
|
||||
C = #count{ Platform : attr("node_platform", Package, Platform)},
|
||||
C < 1.
|
||||
not attr("node_platform", Package, _).
|
||||
|
||||
error(2, "Cannot concretize {0} with multiple platforms\n Requested 'platform={1}' and 'platform={2}'", Package, Platform1, Platform2)
|
||||
:- attr("node", Package),
|
||||
@ -721,8 +720,7 @@ os(OS) :- os(OS, _).
|
||||
|
||||
error(2, "Cannot find valid operating system for '{0}'", Package)
|
||||
:- attr("node", Package),
|
||||
C = #count{ OS : attr("node_os", Package, OS)},
|
||||
C < 1.
|
||||
not attr("node_os", Package, _).
|
||||
|
||||
error(2, "Cannot concretize {0} with multiple operating systems\n Requested 'os={1}' and 'os={2}'", Package, OS1, OS2)
|
||||
:- attr("node", Package),
|
||||
@ -783,8 +781,7 @@ attr("node_os", Package, OS) :- attr("node_os_set", Package, OS), attr("node", P
|
||||
|
||||
error(2, "Cannot find valid target for '{0}'", Package)
|
||||
:- attr("node", Package),
|
||||
C = #count{Target : attr("node_target", Package, Target)},
|
||||
C < 1.
|
||||
not attr("node_target", Package, _).
|
||||
|
||||
error(2, "Cannot concretize '{0}' with multiple targets\n Requested 'target={1}' and 'target={2}'", Package, Target1, Target2)
|
||||
:- attr("node", Package),
|
||||
@ -885,12 +882,6 @@ error(2, "No valid compiler version found for '{0}'", Package)
|
||||
:- attr("node", Package),
|
||||
not node_compiler(Package, _).
|
||||
|
||||
error(2, "Cannot concretize {0} with two compilers {1}@{2} and {3}@{4}", Package, C1, V1, C2, V2)
|
||||
:- attr("node", Package),
|
||||
attr("node_compiler_version", Package, C1, V1),
|
||||
attr("node_compiler_version", Package, C2, V2),
|
||||
(C1, V1) < (C2, V2). % see[1]
|
||||
|
||||
% We can't have a compiler be enforced and select the version from another compiler
|
||||
error(2, "Cannot concretize {0} with two compilers {1}@{2} and {3}@{4}", Package, C1, V1, C2, V2)
|
||||
:- attr("node_compiler_version", Package, C1, V1),
|
||||
|
Loading…
Reference in New Issue
Block a user