externals: Model as concrete specs and add dependency definitions#51118
externals: Model as concrete specs and add dependency definitions#51118tgamblin merged 42 commits intospack:developfrom
Conversation
aed154c to
aeb5538
Compare
aeb5538 to
3042e18
Compare
4ff2359 to
3d0a7e7
Compare
|
Concerns: 1. controlling compiler mixing in matricesFor a matrix environment that combines 2. 1:many behavior was useful sometimes1:many behavior was useful for externals in the past because it gave the user some discretion to effectively mark many details of an external as unimportant: anything that a dependent requires could be "enforced"; if
|
This shouldn't be an issue, since the PR is designed so that
I'd start from the claim that 1:many behavior is objectively wrong, since most specs cannot be both On top of that, this PR adds the ability to model dependencies for external specs. With the previous model the many in the "1:many" behavior grows in a combinatorial way, which makes things even worse. Finally, after this PR, people can inspect their externals and know them up to their hash - so potentially externals can be also referenced by hash.
I don't get your example of #49697 (comment). If anything it seems a claim that the PR goes in the correct direction. The use case as I understand it:
I don't get the question, sorry. I wonder if that would be answered by #49697, in particular by the "Complete missing information on an external node" subsection. |
Thanks, that sounds good.
The proposals for unspecified variants were
[2] is most likely to be useful (I predict that externals autocompleted with [1] would be frustrating to use). [2] still might be pessimistic: I think there was some convenience to a user effectively being able to say "this thing I installed is good, use it"; I'm a bit worried if they have to fight Spack about it; other alternatives that might help are
|
b67e5db to
e2277c8
Compare
c470033 to
d21839e
Compare
Signed-off-by: Massimiliano Culpo <[email protected]>
Signed-off-by: Massimiliano Culpo <[email protected]>
Signed-off-by: Massimiliano Culpo <[email protected]>
8c0a8f9 to
a70504a
Compare
tgamblin
left a comment
There was a problem hiding this comment.
Assuming the coverage is there, I think this is great! Thanks for the iteration and for addressing most of the points.
I think the error messages and upgrade paths need work before the release but we have time to improve those. See comment above but don't let I hold up merging.
With spack/spack#51118 external specs are treated in a slightly different way. In particular. An external package will be mapped 1:1 with a specific spec, which implies that an external entry will not anymore act as a jolly in terms of unspecified variants, but it will just represent the spec with the set of variants as they result from the configuration file (explicitly or implicitly). Moreover, it will be possible (required?) to specify also dependencies for the external packages. This PR aims at anticipating potential problems that might arise with this change. - `xpmem` by default has `+kernel-module`, but this would require also specifying the `gcc` dependency. since no one seems to care about this variant, the proposed solution is to explicitly disable this variant `~kernel-module`
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals."
…pecs (#99) * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals." * We can longer specify only the compiler name. If we specify the compiler name, then we must include a compiler version.
…#99) * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals." * We can no longer specify only the compiler name. If we specify the compiler name, then we must include a compiler version.
…#99) * As of spack/spack#51118 we need to accommodate: "To be backward compatible with external specs specifying a compiler, for instance mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals." * We can no longer specify only the compiler name. If we specify the compiler name, then we must include a compiler version.
refers to #49697
closes #36179
closes #38638
closes #41682
fixes #26034
fixes #28827
fixes #6420 see #6420 (comment)
In this PR externals are treated as concrete specs so there is a 1:1 mapping between an entry in
packages.yamland any installed external spec, for a fixed repository.Their YAML specification has been extended, following #49697, to allow modeling dependencies of external specs. This might be quite useful to better capture e.g. ROCm installations that are already installed on a given system, or in similar cases.
To be backward compatible with external specs specifying a compiler, for instance
mpich %gcc@9, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or leads to no match.