This project provides utilities to detect system-provided packages and generate the YAML configurations for Spack.
git clone https://github.com/mdorier/spack-detect.git
cd spack-detect
python setup.py install
To generate packages.yaml in the current directory, use the following command.
spack-detect -o packages.yaml -v
If you want to contribute a package, you can create a package file in
spackdetect/packages. The python file should have the package name following
spack's naming conventions. For instance, for the zlib package, we want to
have a Zlib.py file (first letter capitalized). For the pkg-config package,
we want the name to be PkgConfig.py (first letter of each word capitalized).
If your package can be detected by searching for a header file in a standard
location, make your package class inherite from HeaderPackage and define
the header_file and version_macro variables. For example here is the Zlib
package:
from ..PackageTypes import HeaderPackage
class Zlib(HeaderPackage):
header_file = 'zlib.h'
version_macro = 'ZLIB_VERSION'Note that if you don't provide these variables, they will default to x.h
and X_VERSION, where x is your package name (e.g. zlib for the Zlib package)
and X is the capitalized name.
If your package can be detected by executing a command with some arguments
and parsing the output (e.g. bison --version), you can make it inherite from
ExecutablePackage and define the executable, version_args, and version_regex
variables. executable is the name of the executable to call, version_args is
the array of argument to pass to get the version, and version_regex is the regular
expression to run on the output to figure out the version. Here is an example
witgh the Bison package.
from ..PackageTypes import ExecutablePackage
class Bison(ExecutablePackage):
executable = 'bison'
version_args = ['--version']
version_regex = '[0-9]+\.[0-9]+(\.[0-9]+)?'Note that if you don't provide these variables, they will default to 'x'
(where x is the name of the package, e.g., bison for the Bison package),
['--version'], and '[0-9]+\.[0-9]+(\.[0-9]+)?', respectively.