Simplify the detection protocol for packages

Packages can implement “detect_version” to support detection
of external instances of a package. This is generally easier
than implementing “determine_spec_details”. The API for
determine_version is similar: for example you can return
“None” to indicate that an executable is not an instance
of a package.

Users may implement a “determine_variants” method for a package.
When doing external detection, executables are grouped by version
and each group results in a single invocation of “determine_variants”
for the associated spec. The method returns a string specifying
the variants for the package. The method may additionally return
a dictionary representing extra attributes for the package.

These will be stored in the spec yaml and can be retrieved
from self.spec.extra_attributes

The Spack GCC package has been updated with an implementation
of “determine_variants” which adds the following extra
attributes to the package: c, cxx, fortran
This commit is contained in:
Massimiliano Culpo
2020-07-31 13:07:48 +02:00
committed by Peter Scheibel
parent 193e8333fa
commit c0d490ffbe
11 changed files with 576 additions and 126 deletions

View File

@@ -853,7 +853,7 @@ _spack_external() {
then
SPACK_COMPREPLY="-h --help"
else
SPACK_COMPREPLY="find"
SPACK_COMPREPLY="find list"
fi
}
@@ -866,6 +866,10 @@ _spack_external_find() {
fi
}
_spack_external_list() {
SPACK_COMPREPLY="-h --help"
}
_spack_fetch() {
if $list_options
then