spack package
- spack.get_spack_commit() str | None [source]
Get the Spack git commit sha.
- Returns:
(str or None) the commit sha if available, otherwise None
- spack.get_version() str [source]
Get a descriptive version of this instance of Spack.
Outputs ‘<PEP440 version> (<git commit sha>)’.
The commit sha is only added when available.
- spack.min_package_api_version = (1, 0)
The minimum Package API version that this version of Spack is compatible with. This should always be a tuple of the form
(major, 0)
, since compatibility with vX.Y implies compatibility with vX.0.
- spack.package_api_version = (1, 0)
The current Package API version implemented by this version of Spack. The Package API defines the Python interface for packages as well as the layout of package repositories. The minor version is incremented when the package API is extended in a backwards-compatible way. The major version is incremented upon breaking changes. This version is changed independently from the Spack version.
- spack.spack_version_info = (1, 0, 0, 'dev0')
(major, minor, micro, dev release) tuple
Subpackages
- spack.bootstrap package
BootstrapEnvironment
all_core_root_specs()
ensure_bootstrap_configuration()
ensure_clingo_importable_or_raise()
ensure_core_dependencies()
ensure_environment_dependencies()
ensure_gpg_in_path_or_raise()
ensure_patchelf_in_path_or_raise()
is_bootstrapping()
status_message()
store_path()
- Submodules
- spack.bootstrap.clingo module
- spack.bootstrap.config module
- spack.bootstrap.core module
Bootstrapper
BuildcacheBootstrapper
IS_WINDOWS
METADATA_YAML_FILENAME
SourceBootstrapper
all_core_root_specs()
bootstrapper()
bootstrapping_sources()
clingo_root_spec()
create_bootstrapper()
ensure_clingo_importable_or_raise()
ensure_core_dependencies()
ensure_executables_in_path_or_raise()
ensure_gpg_in_path_or_raise()
ensure_module_importable_or_raise()
ensure_patchelf_in_path_or_raise()
ensure_winsdk_external_or_raise()
gnupg_root_spec()
patchelf_root_spec()
source_is_enabled()
verify_patchelf()
- spack.bootstrap.environment module
- spack.bootstrap.status module
- spack.build_systems package
- Submodules
- spack.build_systems.aspell_dict module
AspellBuilder
AspellDictPackage
AspellDictPackage.AutotoolsBuilder
AspellDictPackage.conflicts
AspellDictPackage.dependencies
AspellDictPackage.disable_redistribute
AspellDictPackage.languages
AspellDictPackage.licenses
AspellDictPackage.patch()
AspellDictPackage.patches
AspellDictPackage.provided
AspellDictPackage.provided_together
AspellDictPackage.requirements
AspellDictPackage.resources
AspellDictPackage.run_after_callbacks
AspellDictPackage.run_before_callbacks
AspellDictPackage.spec
AspellDictPackage.splice_specs
AspellDictPackage.variants
AspellDictPackage.versions
- spack.build_systems.autotools module
AutotoolsBuilder
AutotoolsBuilder.archive_files
AutotoolsBuilder.autoreconf()
AutotoolsBuilder.autoreconf_extra_args
AutotoolsBuilder.autoreconf_search_path_args
AutotoolsBuilder.build()
AutotoolsBuilder.build_directory
AutotoolsBuilder.build_system
AutotoolsBuilder.build_targets
AutotoolsBuilder.build_time_test_callbacks
AutotoolsBuilder.check()
AutotoolsBuilder.configure()
AutotoolsBuilder.configure_abs_path
AutotoolsBuilder.configure_args()
AutotoolsBuilder.configure_directory
AutotoolsBuilder.enable_or_disable()
AutotoolsBuilder.force_autoreconf
AutotoolsBuilder.install()
AutotoolsBuilder.install_libtool_archives
AutotoolsBuilder.install_targets
AutotoolsBuilder.install_time_test_callbacks
AutotoolsBuilder.installcheck()
AutotoolsBuilder.legacy_attributes
AutotoolsBuilder.legacy_methods
AutotoolsBuilder.patch_config_files
AutotoolsBuilder.patch_libtool
AutotoolsBuilder.phases
AutotoolsBuilder.run_after_callbacks
AutotoolsBuilder.run_before_callbacks
AutotoolsBuilder.setup_build_environment()
AutotoolsBuilder.with_or_without()
AutotoolsPackage
AutotoolsPackage.build_system_class
AutotoolsPackage.conflicts
AutotoolsPackage.dependencies
AutotoolsPackage.disable_redistribute
AutotoolsPackage.enable_or_disable()
AutotoolsPackage.flags_to_build_system_args()
AutotoolsPackage.languages
AutotoolsPackage.legacy_buildsystem
AutotoolsPackage.licenses
AutotoolsPackage.patches
AutotoolsPackage.provided
AutotoolsPackage.provided_together
AutotoolsPackage.requirements
AutotoolsPackage.resources
AutotoolsPackage.run_after_callbacks
AutotoolsPackage.run_before_callbacks
AutotoolsPackage.spec
AutotoolsPackage.splice_specs
AutotoolsPackage.variants
AutotoolsPackage.versions
AutotoolsPackage.with_or_without()
- spack.build_systems.bundle module
BundleBuilder
BundlePackage
BundlePackage.build_system_class
BundlePackage.conflicts
BundlePackage.dependencies
BundlePackage.disable_redistribute
BundlePackage.has_code
BundlePackage.languages
BundlePackage.legacy_buildsystem
BundlePackage.licenses
BundlePackage.patches
BundlePackage.provided
BundlePackage.provided_together
BundlePackage.requirements
BundlePackage.resources
BundlePackage.run_after_callbacks
BundlePackage.run_before_callbacks
BundlePackage.spec
BundlePackage.splice_specs
BundlePackage.variants
BundlePackage.versions
- spack.build_systems.cached_cmake module
CachedCMakeBuilder
CachedCMakeBuilder.cache_name
CachedCMakeBuilder.cache_path
CachedCMakeBuilder.define_cmake_cache_from_variant()
CachedCMakeBuilder.initconfig()
CachedCMakeBuilder.initconfig_compiler_entries()
CachedCMakeBuilder.initconfig_hardware_entries()
CachedCMakeBuilder.initconfig_mpi_entries()
CachedCMakeBuilder.initconfig_package_entries()
CachedCMakeBuilder.install_cmake_cache()
CachedCMakeBuilder.legacy_attributes
CachedCMakeBuilder.legacy_methods
CachedCMakeBuilder.phases
CachedCMakeBuilder.run_after_callbacks
CachedCMakeBuilder.run_before_callbacks
CachedCMakeBuilder.std_cmake_args
CachedCMakeBuilder.std_initconfig_entries()
CachedCMakePackage
CachedCMakePackage.CMakeBuilder
CachedCMakePackage.conflicts
CachedCMakePackage.dependencies
CachedCMakePackage.disable_redistribute
CachedCMakePackage.flag_handler()
CachedCMakePackage.languages
CachedCMakePackage.licenses
CachedCMakePackage.patches
CachedCMakePackage.provided
CachedCMakePackage.provided_together
CachedCMakePackage.requirements
CachedCMakePackage.resources
CachedCMakePackage.run_after_callbacks
CachedCMakePackage.run_before_callbacks
CachedCMakePackage.spec
CachedCMakePackage.splice_specs
CachedCMakePackage.variants
CachedCMakePackage.versions
cmake_cache_filepath()
cmake_cache_option()
cmake_cache_path()
cmake_cache_string()
spec_uses_toolchain()
- spack.build_systems.cargo module
CargoBuilder
CargoBuilder.build()
CargoBuilder.build_args
CargoBuilder.build_directory
CargoBuilder.build_system
CargoBuilder.build_time_test_callbacks
CargoBuilder.check()
CargoBuilder.check_args
CargoBuilder.install()
CargoBuilder.install_time_test_callbacks
CargoBuilder.legacy_attributes
CargoBuilder.legacy_methods
CargoBuilder.phases
CargoBuilder.run_after_callbacks
CargoBuilder.run_before_callbacks
CargoBuilder.setup_build_environment()
CargoBuilder.std_build_args
CargoPackage
CargoPackage.build_system_class
CargoPackage.conflicts
CargoPackage.dependencies
CargoPackage.disable_redistribute
CargoPackage.languages
CargoPackage.licenses
CargoPackage.patches
CargoPackage.provided
CargoPackage.provided_together
CargoPackage.requirements
CargoPackage.resources
CargoPackage.run_after_callbacks
CargoPackage.run_before_callbacks
CargoPackage.spec
CargoPackage.splice_specs
CargoPackage.variants
CargoPackage.versions
- spack.build_systems.cmake module
CMakeBuilder
CMakeBuilder.archive_files
CMakeBuilder.build()
CMakeBuilder.build_directory
CMakeBuilder.build_dirname
CMakeBuilder.build_system
CMakeBuilder.build_targets
CMakeBuilder.build_time_test_callbacks
CMakeBuilder.check()
CMakeBuilder.cmake()
CMakeBuilder.cmake_args()
CMakeBuilder.define()
CMakeBuilder.define_cuda_architectures()
CMakeBuilder.define_from_variant()
CMakeBuilder.define_hip_architectures()
CMakeBuilder.generator
CMakeBuilder.install()
CMakeBuilder.install_targets
CMakeBuilder.legacy_attributes
CMakeBuilder.legacy_methods
CMakeBuilder.phases
CMakeBuilder.root_cmakelists_dir
CMakeBuilder.run_after_callbacks
CMakeBuilder.run_before_callbacks
CMakeBuilder.std_args()
CMakeBuilder.std_cmake_args
CMakePackage
CMakePackage.build_system_class
CMakePackage.conflicts
CMakePackage.define()
CMakePackage.define_from_variant()
CMakePackage.dependencies
CMakePackage.disable_redistribute
CMakePackage.find_python_hints
CMakePackage.flags_to_build_system_args()
CMakePackage.languages
CMakePackage.legacy_buildsystem
CMakePackage.licenses
CMakePackage.patches
CMakePackage.provided
CMakePackage.provided_together
CMakePackage.requirements
CMakePackage.resources
CMakePackage.run_after_callbacks
CMakePackage.run_before_callbacks
CMakePackage.spec
CMakePackage.splice_specs
CMakePackage.variants
CMakePackage.versions
define()
define_cuda_architectures()
define_from_variant()
define_hip_architectures()
generator()
get_cmake_prefix_path()
- spack.build_systems.compiler module
CompilerPackage
CompilerPackage.compiler_bindir()
CompilerPackage.compiler_languages
CompilerPackage.compiler_names
CompilerPackage.compiler_prefixes
CompilerPackage.compiler_suffixes
CompilerPackage.compiler_version_argument
CompilerPackage.compiler_version_regex
CompilerPackage.determine_compiler_paths()
CompilerPackage.determine_variants()
CompilerPackage.determine_version()
CompilerPackage.executables
CompilerPackage.run_after_callbacks
CompilerPackage.run_before_callbacks
CompilerPackage.supported_languages
CompilerPackage.tags
- spack.build_systems.cuda module
CudaPackage
CudaPackage.compute_capabilities()
CudaPackage.conflicts
CudaPackage.cuda_arch_values
CudaPackage.cuda_flags()
CudaPackage.dependencies
CudaPackage.disable_redistribute
CudaPackage.languages
CudaPackage.licenses
CudaPackage.patches
CudaPackage.provided
CudaPackage.provided_together
CudaPackage.requirements
CudaPackage.resources
CudaPackage.run_after_callbacks
CudaPackage.run_before_callbacks
CudaPackage.spec
CudaPackage.splice_specs
CudaPackage.variants
CudaPackage.versions
- spack.build_systems.generic module
GenericBuilder
Package
Package.build_system_class
Package.conflicts
Package.dependencies
Package.disable_redistribute
Package.languages
Package.legacy_buildsystem
Package.licenses
Package.patches
Package.provided
Package.provided_together
Package.requirements
Package.resources
Package.run_after_callbacks
Package.run_before_callbacks
Package.spec
Package.splice_specs
Package.variants
Package.versions
- spack.build_systems.gnu module
- spack.build_systems.go module
GoBuilder
GoBuilder.build()
GoBuilder.build_args
GoBuilder.build_directory
GoBuilder.build_system
GoBuilder.build_time_test_callbacks
GoBuilder.check()
GoBuilder.check_args
GoBuilder.install()
GoBuilder.install_time_test_callbacks
GoBuilder.legacy_attributes
GoBuilder.legacy_methods
GoBuilder.phases
GoBuilder.run_after_callbacks
GoBuilder.run_before_callbacks
GoBuilder.setup_build_environment()
GoPackage
GoPackage.build_system_class
GoPackage.conflicts
GoPackage.dependencies
GoPackage.disable_redistribute
GoPackage.languages
GoPackage.legacy_buildsystem
GoPackage.licenses
GoPackage.patches
GoPackage.provided
GoPackage.provided_together
GoPackage.requirements
GoPackage.resources
GoPackage.run_after_callbacks
GoPackage.run_before_callbacks
GoPackage.spec
GoPackage.splice_specs
GoPackage.variants
GoPackage.versions
- spack.build_systems.intel module
IntelPackage
IntelPackage.auto_dispatch_options
IntelPackage.base_lib_dir
IntelPackage.blas_libs
IntelPackage.build_system_class
IntelPackage.component_bin_dir()
IntelPackage.component_include_dir()
IntelPackage.component_lib_dir()
IntelPackage.configure()
IntelPackage.configure_auto_dispatch()
IntelPackage.configure_rpath()
IntelPackage.conflicts
IntelPackage.dependencies
IntelPackage.disable_redistribute
IntelPackage.file_to_source
IntelPackage.filter_compiler_wrappers()
IntelPackage.global_license_file
IntelPackage.headers
IntelPackage.install()
IntelPackage.intel64_int_suffix
IntelPackage.languages
IntelPackage.lapack_libs
IntelPackage.libs
IntelPackage.license_comment
IntelPackage.license_files
IntelPackage.license_required
IntelPackage.license_url
IntelPackage.license_vars
IntelPackage.licenses
IntelPackage.modify_LLVMgold_rpath()
IntelPackage.mpi_compiler_wrappers
IntelPackage.mpi_setup_dependent_build_environment()
IntelPackage.normalize_path()
IntelPackage.normalize_suite_dir()
IntelPackage.openmp_libs
IntelPackage.patches
IntelPackage.provided
IntelPackage.provided_together
IntelPackage.pset_components
IntelPackage.requirements
IntelPackage.resources
IntelPackage.run_after_callbacks
IntelPackage.run_before_callbacks
IntelPackage.scalapack_libs
IntelPackage.setup_dependent_build_environment()
IntelPackage.setup_dependent_package()
IntelPackage.setup_run_environment()
IntelPackage.spec
IntelPackage.splice_specs
IntelPackage.tbb_headers
IntelPackage.tbb_libs
IntelPackage.uninstall_ism()
IntelPackage.validate_install()
IntelPackage.variants
IntelPackage.version_yearlike
IntelPackage.version_years
IntelPackage.versions
debug_print()
raise_lib_error()
- spack.build_systems.lua module
LuaBuilder
LuaBuilder.build_system
LuaBuilder.build_time_test_callbacks
LuaBuilder.generate_luarocks_config()
LuaBuilder.install()
LuaBuilder.install_time_test_callbacks
LuaBuilder.legacy_attributes
LuaBuilder.legacy_methods
LuaBuilder.luarocks_args()
LuaBuilder.phases
LuaBuilder.preprocess()
LuaBuilder.run_after_callbacks
LuaBuilder.run_before_callbacks
LuaBuilder.setup_build_environment()
LuaBuilder.unpack()
LuaPackage
LuaPackage.build_system_class
LuaPackage.conflicts
LuaPackage.dependencies
LuaPackage.disable_redistribute
LuaPackage.languages
LuaPackage.legacy_buildsystem
LuaPackage.licenses
LuaPackage.list_depth
LuaPackage.lua
LuaPackage.luarocks
LuaPackage.patches
LuaPackage.provided
LuaPackage.provided_together
LuaPackage.requirements
LuaPackage.resources
LuaPackage.run_after_callbacks
LuaPackage.run_before_callbacks
LuaPackage.spec
LuaPackage.splice_specs
LuaPackage.variants
LuaPackage.versions
- spack.build_systems.makefile module
MakefileBuilder
MakefileBuilder.build()
MakefileBuilder.build_directory
MakefileBuilder.build_system
MakefileBuilder.build_targets
MakefileBuilder.build_time_test_callbacks
MakefileBuilder.check()
MakefileBuilder.edit()
MakefileBuilder.install()
MakefileBuilder.install_targets
MakefileBuilder.install_time_test_callbacks
MakefileBuilder.installcheck()
MakefileBuilder.legacy_attributes
MakefileBuilder.legacy_methods
MakefileBuilder.phases
MakefileBuilder.run_after_callbacks
MakefileBuilder.run_before_callbacks
MakefilePackage
MakefilePackage.build_system_class
MakefilePackage.conflicts
MakefilePackage.dependencies
MakefilePackage.disable_redistribute
MakefilePackage.languages
MakefilePackage.legacy_buildsystem
MakefilePackage.licenses
MakefilePackage.patches
MakefilePackage.provided
MakefilePackage.provided_together
MakefilePackage.requirements
MakefilePackage.resources
MakefilePackage.run_after_callbacks
MakefilePackage.run_before_callbacks
MakefilePackage.spec
MakefilePackage.splice_specs
MakefilePackage.variants
MakefilePackage.versions
- spack.build_systems.maven module
MavenBuilder
MavenBuilder.build()
MavenBuilder.build_args()
MavenBuilder.build_directory
MavenBuilder.build_system
MavenBuilder.build_time_test_callbacks
MavenBuilder.install()
MavenBuilder.install_time_test_callbacks
MavenBuilder.legacy_attributes
MavenBuilder.legacy_methods
MavenBuilder.phases
MavenBuilder.run_after_callbacks
MavenBuilder.run_before_callbacks
MavenPackage
MavenPackage.build_system_class
MavenPackage.conflicts
MavenPackage.dependencies
MavenPackage.disable_redistribute
MavenPackage.languages
MavenPackage.legacy_buildsystem
MavenPackage.licenses
MavenPackage.patches
MavenPackage.provided
MavenPackage.provided_together
MavenPackage.requirements
MavenPackage.resources
MavenPackage.run_after_callbacks
MavenPackage.run_before_callbacks
MavenPackage.spec
MavenPackage.splice_specs
MavenPackage.variants
MavenPackage.versions
- spack.build_systems.meson module
MesonBuilder
MesonBuilder.archive_files
MesonBuilder.build()
MesonBuilder.build_directory
MesonBuilder.build_dirname
MesonBuilder.build_system
MesonBuilder.build_targets
MesonBuilder.build_time_test_callbacks
MesonBuilder.check()
MesonBuilder.install()
MesonBuilder.install_targets
MesonBuilder.legacy_attributes
MesonBuilder.legacy_methods
MesonBuilder.meson()
MesonBuilder.meson_args()
MesonBuilder.phases
MesonBuilder.root_mesonlists_dir
MesonBuilder.run_after_callbacks
MesonBuilder.run_before_callbacks
MesonBuilder.std_args()
MesonBuilder.std_meson_args
MesonPackage
MesonPackage.build_system_class
MesonPackage.conflicts
MesonPackage.dependencies
MesonPackage.disable_redistribute
MesonPackage.flags_to_build_system_args()
MesonPackage.languages
MesonPackage.legacy_buildsystem
MesonPackage.licenses
MesonPackage.patches
MesonPackage.provided
MesonPackage.provided_together
MesonPackage.requirements
MesonPackage.resources
MesonPackage.run_after_callbacks
MesonPackage.run_before_callbacks
MesonPackage.spec
MesonPackage.splice_specs
MesonPackage.variants
MesonPackage.versions
- spack.build_systems.msbuild module
MSBuildBuilder
MSBuildBuilder.build()
MSBuildBuilder.build_directory
MSBuildBuilder.build_system
MSBuildBuilder.build_targets
MSBuildBuilder.define()
MSBuildBuilder.define_targets()
MSBuildBuilder.install()
MSBuildBuilder.install_targets
MSBuildBuilder.msbuild_args()
MSBuildBuilder.msbuild_install_args()
MSBuildBuilder.phases
MSBuildBuilder.run_after_callbacks
MSBuildBuilder.run_before_callbacks
MSBuildBuilder.std_msbuild_args
MSBuildBuilder.toolchain_version
MSBuildPackage
MSBuildPackage.build_system_class
MSBuildPackage.conflicts
MSBuildPackage.dependencies
MSBuildPackage.disable_redistribute
MSBuildPackage.languages
MSBuildPackage.licenses
MSBuildPackage.patches
MSBuildPackage.provided
MSBuildPackage.provided_together
MSBuildPackage.requirements
MSBuildPackage.resources
MSBuildPackage.run_after_callbacks
MSBuildPackage.run_before_callbacks
MSBuildPackage.spec
MSBuildPackage.splice_specs
MSBuildPackage.variants
MSBuildPackage.versions
- spack.build_systems.nmake module
NMakeBuilder
NMakeBuilder.build()
NMakeBuilder.build_directory
NMakeBuilder.build_system
NMakeBuilder.build_targets
NMakeBuilder.define()
NMakeBuilder.ignore_quotes
NMakeBuilder.install()
NMakeBuilder.install_targets
NMakeBuilder.makefile_name
NMakeBuilder.makefile_root
NMakeBuilder.nmake_args()
NMakeBuilder.nmake_install_args()
NMakeBuilder.override_env()
NMakeBuilder.phases
NMakeBuilder.run_after_callbacks
NMakeBuilder.run_before_callbacks
NMakeBuilder.std_nmake_args
NMakePackage
NMakePackage.build_system_class
NMakePackage.conflicts
NMakePackage.dependencies
NMakePackage.disable_redistribute
NMakePackage.languages
NMakePackage.licenses
NMakePackage.patches
NMakePackage.provided
NMakePackage.provided_together
NMakePackage.requirements
NMakePackage.resources
NMakePackage.run_after_callbacks
NMakePackage.run_before_callbacks
NMakePackage.spec
NMakePackage.splice_specs
NMakePackage.variants
NMakePackage.versions
- spack.build_systems.octave module
OctaveBuilder
OctaveBuilder.build_system
OctaveBuilder.build_time_test_callbacks
OctaveBuilder.install()
OctaveBuilder.install_time_test_callbacks
OctaveBuilder.legacy_attributes
OctaveBuilder.legacy_methods
OctaveBuilder.phases
OctaveBuilder.run_after_callbacks
OctaveBuilder.run_before_callbacks
OctaveBuilder.setup_build_environment()
OctavePackage
OctavePackage.build_system_class
OctavePackage.conflicts
OctavePackage.dependencies
OctavePackage.disable_redistribute
OctavePackage.languages
OctavePackage.legacy_buildsystem
OctavePackage.licenses
OctavePackage.patches
OctavePackage.provided
OctavePackage.provided_together
OctavePackage.requirements
OctavePackage.resources
OctavePackage.run_after_callbacks
OctavePackage.run_before_callbacks
OctavePackage.spec
OctavePackage.splice_specs
OctavePackage.variants
OctavePackage.versions
- spack.build_systems.oneapi module
INTEL_MATH_LIBRARIES
IntelOneApiLibraryPackage
IntelOneApiLibraryPackage.conflicts
IntelOneApiLibraryPackage.dependencies
IntelOneApiLibraryPackage.disable_redistribute
IntelOneApiLibraryPackage.header_directories()
IntelOneApiLibraryPackage.headers
IntelOneApiLibraryPackage.languages
IntelOneApiLibraryPackage.libs
IntelOneApiLibraryPackage.licenses
IntelOneApiLibraryPackage.openmp_libs()
IntelOneApiLibraryPackage.patches
IntelOneApiLibraryPackage.provided
IntelOneApiLibraryPackage.provided_together
IntelOneApiLibraryPackage.requirements
IntelOneApiLibraryPackage.resources
IntelOneApiLibraryPackage.run_after_callbacks
IntelOneApiLibraryPackage.run_before_callbacks
IntelOneApiLibraryPackage.spec
IntelOneApiLibraryPackage.splice_specs
IntelOneApiLibraryPackage.variants
IntelOneApiLibraryPackage.versions
IntelOneApiLibraryPackageWithSdk
IntelOneApiLibraryPackageWithSdk.conflicts
IntelOneApiLibraryPackageWithSdk.dependencies
IntelOneApiLibraryPackageWithSdk.disable_redistribute
IntelOneApiLibraryPackageWithSdk.headers
IntelOneApiLibraryPackageWithSdk.languages
IntelOneApiLibraryPackageWithSdk.libs
IntelOneApiLibraryPackageWithSdk.licenses
IntelOneApiLibraryPackageWithSdk.patches
IntelOneApiLibraryPackageWithSdk.provided
IntelOneApiLibraryPackageWithSdk.provided_together
IntelOneApiLibraryPackageWithSdk.requirements
IntelOneApiLibraryPackageWithSdk.resources
IntelOneApiLibraryPackageWithSdk.run_after_callbacks
IntelOneApiLibraryPackageWithSdk.run_before_callbacks
IntelOneApiLibraryPackageWithSdk.spec
IntelOneApiLibraryPackageWithSdk.splice_specs
IntelOneApiLibraryPackageWithSdk.variants
IntelOneApiLibraryPackageWithSdk.versions
IntelOneApiPackage
IntelOneApiPackage.c
IntelOneApiPackage.component_dir
IntelOneApiPackage.component_prefix
IntelOneApiPackage.conflicts
IntelOneApiPackage.dependencies
IntelOneApiPackage.disable_redistribute
IntelOneApiPackage.env_script_args
IntelOneApiPackage.homepage
IntelOneApiPackage.install()
IntelOneApiPackage.install_component()
IntelOneApiPackage.languages
IntelOneApiPackage.licenses
IntelOneApiPackage.patches
IntelOneApiPackage.provided
IntelOneApiPackage.provided_together
IntelOneApiPackage.requirements
IntelOneApiPackage.resources
IntelOneApiPackage.run_after_callbacks
IntelOneApiPackage.run_before_callbacks
IntelOneApiPackage.setup_run_environment()
IntelOneApiPackage.spec
IntelOneApiPackage.splice_specs
IntelOneApiPackage.symlink_dir()
IntelOneApiPackage.unresolved_libraries
IntelOneApiPackage.update_description()
IntelOneApiPackage.v2_layout
IntelOneApiPackage.v2_layout_versions
IntelOneApiPackage.variants
IntelOneApiPackage.versions
IntelOneApiStaticLibraryList
- spack.build_systems.perl module
PerlBuilder
PerlBuilder.build()
PerlBuilder.build_executable
PerlBuilder.build_method
PerlBuilder.build_system
PerlBuilder.build_time_test_callbacks
PerlBuilder.check()
PerlBuilder.configure()
PerlBuilder.configure_args()
PerlBuilder.fix_shebang()
PerlBuilder.install()
PerlBuilder.install_time_test_callbacks
PerlBuilder.legacy_attributes
PerlBuilder.legacy_methods
PerlBuilder.phases
PerlBuilder.run_after_callbacks
PerlBuilder.run_before_callbacks
PerlPackage
PerlPackage.build_system_class
PerlPackage.conflicts
PerlPackage.dependencies
PerlPackage.disable_redistribute
PerlPackage.languages
PerlPackage.legacy_buildsystem
PerlPackage.licenses
PerlPackage.patches
PerlPackage.provided
PerlPackage.provided_together
PerlPackage.requirements
PerlPackage.resources
PerlPackage.run_after_callbacks
PerlPackage.run_before_callbacks
PerlPackage.skip_modules
PerlPackage.spec
PerlPackage.splice_specs
PerlPackage.test_use()
PerlPackage.use_modules
PerlPackage.variants
PerlPackage.versions
- spack.build_systems.python module
PythonExtension
PythonExtension.add_files_to_view()
PythonExtension.bindir
PythonExtension.conflicts
PythonExtension.dependencies
PythonExtension.disable_redistribute
PythonExtension.get_external_python_for_prefix()
PythonExtension.import_modules
PythonExtension.languages
PythonExtension.licenses
PythonExtension.patches
PythonExtension.provided
PythonExtension.provided_together
PythonExtension.remove_files_from_view()
PythonExtension.requirements
PythonExtension.resources
PythonExtension.run_after_callbacks
PythonExtension.run_before_callbacks
PythonExtension.skip_modules
PythonExtension.spec
PythonExtension.splice_specs
PythonExtension.test_imports()
PythonExtension.update_external_dependencies()
PythonExtension.variants
PythonExtension.versions
PythonExtension.view_file_conflicts()
PythonPackage
PythonPackage.build_system_class
PythonPackage.headers
PythonPackage.homepage
PythonPackage.install_time_test_callbacks
PythonPackage.legacy_buildsystem
PythonPackage.libs
PythonPackage.list_url
PythonPackage.py_namespace
PythonPackage.pypi
PythonPackage.python_spec
PythonPackage.run_after_callbacks
PythonPackage.run_before_callbacks
PythonPackage.url
PythonPipBuilder
PythonPipBuilder.build_directory
PythonPipBuilder.build_system
PythonPipBuilder.build_time_test_callbacks
PythonPipBuilder.config_settings()
PythonPipBuilder.global_options()
PythonPipBuilder.install()
PythonPipBuilder.install_options()
PythonPipBuilder.install_time_test_callbacks
PythonPipBuilder.legacy_attributes
PythonPipBuilder.legacy_long_methods
PythonPipBuilder.legacy_methods
PythonPipBuilder.phases
PythonPipBuilder.run_after_callbacks
PythonPipBuilder.run_before_callbacks
PythonPipBuilder.std_args()
- spack.build_systems.qmake module
QMakeBuilder
QMakeBuilder.build()
QMakeBuilder.build_directory
QMakeBuilder.build_system
QMakeBuilder.build_time_test_callbacks
QMakeBuilder.check()
QMakeBuilder.install()
QMakeBuilder.install_time_test_callbacks
QMakeBuilder.legacy_attributes
QMakeBuilder.legacy_methods
QMakeBuilder.phases
QMakeBuilder.qmake()
QMakeBuilder.qmake_args()
QMakeBuilder.run_after_callbacks
QMakeBuilder.run_before_callbacks
QMakePackage
QMakePackage.build_system_class
QMakePackage.conflicts
QMakePackage.dependencies
QMakePackage.disable_redistribute
QMakePackage.languages
QMakePackage.legacy_buildsystem
QMakePackage.licenses
QMakePackage.patches
QMakePackage.provided
QMakePackage.provided_together
QMakePackage.requirements
QMakePackage.resources
QMakePackage.run_after_callbacks
QMakePackage.run_before_callbacks
QMakePackage.spec
QMakePackage.splice_specs
QMakePackage.variants
QMakePackage.versions
- spack.build_systems.r module
- spack.build_systems.racket module
RacketBuilder
RacketBuilder.build_directory
RacketBuilder.build_system
RacketBuilder.build_time_test_callbacks
RacketBuilder.install()
RacketBuilder.legacy_attributes
RacketBuilder.legacy_methods
RacketBuilder.phases
RacketBuilder.racket_name
RacketBuilder.run_after_callbacks
RacketBuilder.run_before_callbacks
RacketBuilder.subdirectory
RacketPackage
- spack.build_systems.rocm module
ROCmPackage
ROCmPackage.amdgpu_targets
ROCmPackage.asan_on()
ROCmPackage.conflicts
ROCmPackage.dependencies
ROCmPackage.disable_redistribute
ROCmPackage.hip_flags()
ROCmPackage.languages
ROCmPackage.licenses
ROCmPackage.patches
ROCmPackage.provided
ROCmPackage.provided_together
ROCmPackage.requirements
ROCmPackage.resources
ROCmPackage.run_after_callbacks
ROCmPackage.run_before_callbacks
ROCmPackage.spec
ROCmPackage.splice_specs
ROCmPackage.variants
ROCmPackage.versions
- spack.build_systems.ruby module
RubyBuilder
RubyPackage
RubyPackage.build_system_class
RubyPackage.conflicts
RubyPackage.dependencies
RubyPackage.disable_redistribute
RubyPackage.languages
RubyPackage.legacy_buildsystem
RubyPackage.licenses
RubyPackage.patches
RubyPackage.provided
RubyPackage.provided_together
RubyPackage.requirements
RubyPackage.resources
RubyPackage.run_after_callbacks
RubyPackage.run_before_callbacks
RubyPackage.spec
RubyPackage.splice_specs
RubyPackage.variants
RubyPackage.versions
- spack.build_systems.scons module
SConsBuilder
SConsBuilder.build()
SConsBuilder.build_args()
SConsBuilder.build_system
SConsBuilder.build_test()
SConsBuilder.build_time_test_callbacks
SConsBuilder.install()
SConsBuilder.install_args()
SConsBuilder.install_time_test_callbacks
SConsBuilder.legacy_attributes
SConsBuilder.legacy_long_methods
SConsBuilder.legacy_methods
SConsBuilder.phases
SConsBuilder.run_after_callbacks
SConsBuilder.run_before_callbacks
SConsPackage
SConsPackage.build_system_class
SConsPackage.conflicts
SConsPackage.dependencies
SConsPackage.disable_redistribute
SConsPackage.languages
SConsPackage.legacy_buildsystem
SConsPackage.licenses
SConsPackage.patches
SConsPackage.provided
SConsPackage.provided_together
SConsPackage.requirements
SConsPackage.resources
SConsPackage.run_after_callbacks
SConsPackage.run_before_callbacks
SConsPackage.spec
SConsPackage.splice_specs
SConsPackage.variants
SConsPackage.versions
- spack.build_systems.sip module
SIPBuilder
SIPBuilder.build()
SIPBuilder.build_args()
SIPBuilder.build_directory
SIPBuilder.build_system
SIPBuilder.build_time_test_callbacks
SIPBuilder.configure()
SIPBuilder.configure_args()
SIPBuilder.install()
SIPBuilder.install_args()
SIPBuilder.install_time_test_callbacks
SIPBuilder.legacy_attributes
SIPBuilder.legacy_methods
SIPBuilder.phases
SIPBuilder.run_after_callbacks
SIPBuilder.run_before_callbacks
SIPPackage
SIPPackage.build_system_class
SIPPackage.conflicts
SIPPackage.dependencies
SIPPackage.disable_redistribute
SIPPackage.import_modules
SIPPackage.install_time_test_callbacks
SIPPackage.languages
SIPPackage.legacy_buildsystem
SIPPackage.licenses
SIPPackage.patches
SIPPackage.provided
SIPPackage.provided_together
SIPPackage.python()
SIPPackage.requirements
SIPPackage.resources
SIPPackage.run_after_callbacks
SIPPackage.run_before_callbacks
SIPPackage.sip_module
SIPPackage.spec
SIPPackage.splice_specs
SIPPackage.test_imports()
SIPPackage.variants
SIPPackage.versions
- spack.build_systems.sourceforge module
- spack.build_systems.sourceware module
- spack.build_systems.waf module
WafBuilder
WafBuilder.build()
WafBuilder.build_args()
WafBuilder.build_directory
WafBuilder.build_system
WafBuilder.build_test()
WafBuilder.build_time_test_callbacks
WafBuilder.configure()
WafBuilder.configure_args()
WafBuilder.install()
WafBuilder.install_args()
WafBuilder.install_test()
WafBuilder.install_time_test_callbacks
WafBuilder.legacy_attributes
WafBuilder.legacy_methods
WafBuilder.phases
WafBuilder.python()
WafBuilder.run_after_callbacks
WafBuilder.run_before_callbacks
WafBuilder.waf()
WafPackage
WafPackage.build_system_class
WafPackage.conflicts
WafPackage.dependencies
WafPackage.disable_redistribute
WafPackage.languages
WafPackage.legacy_buildsystem
WafPackage.licenses
WafPackage.patches
WafPackage.provided
WafPackage.provided_together
WafPackage.requirements
WafPackage.resources
WafPackage.run_after_callbacks
WafPackage.run_before_callbacks
WafPackage.spec
WafPackage.splice_specs
WafPackage.variants
WafPackage.versions
- spack.build_systems.xorg module
- spack.ci package
PushResult
RebuildDecision
can_sign_binaries()
can_verify_binaries()
check_for_broken_specs()
collect_pipeline_options()
compute_affected_packages()
copy_stage_logs_to_artifacts()
copy_test_logs_to_artifacts()
create_already_built_pruner()
create_buildcache()
create_external_pruner()
create_unaffected_pruner()
display_broken_spec_messages()
download_and_extract_artifacts()
generate_pipeline()
get_added_versions()
get_change_revisions()
get_spack_info()
get_spec_filter_list()
get_stack_changed()
import_signing_key()
process_command()
prune_pipeline()
push_to_build_cache()
read_broken_spec()
reproduce_ci_job()
run_standalone_tests()
setup_spack_repro_version()
write_broken_spec()
- Submodules
- spack.ci.common module
- spack.ci.generator_registry module
- spack.ci.gitlab module
- spack.cmd package
CommandNameError
CommandNotFoundError
MultipleSpecsMatch
NoSpecMatches
PythonNameError
all_commands()
cmd_name()
disambiguate_spec()
disambiguate_spec_from_hashes()
display_specs()
display_specs_as_json()
ensure_single_spec_or_die()
extant_file()
filter_loaded_specs()
find_environment()
first_line()
get_command()
get_module()
gray_hash()
is_git_repo()
iter_groups()
matching_spec_from_env()
matching_specs_from_env()
parse_specs()
print_how_many_pkgs()
python_name()
quote_kvp()
remove_options()
require_active_env()
require_cmd_name()
require_python_name()
spack_is_git_repo()
- Subpackages
- Submodules
- spack.cmd.add module
- spack.cmd.arch module
- spack.cmd.audit module
- spack.cmd.blame module
- spack.cmd.bootstrap module
- spack.cmd.build_env module
- spack.cmd.buildcache module
- spack.cmd.cd module
- spack.cmd.change module
- spack.cmd.checksum module
- spack.cmd.ci module
- spack.cmd.clean module
- spack.cmd.clone module
- spack.cmd.commands module
- spack.cmd.compiler module
- spack.cmd.compilers module
- spack.cmd.concretize module
- spack.cmd.config module
- spack.cmd.containerize module
- spack.cmd.create module
AutoreconfPackageTemplate
AutotoolsPackageTemplate
BazelPackageTemplate
BuildSystemAndLanguageGuesser
BundlePackageTemplate
CMakePackageTemplate
CXX_EXT
C_EXT
CargoPackageTemplate
FORTRAN_EXT
GoPackageTemplate
IntelPackageTemplate
LuaPackageTemplate
MakefilePackageTemplate
MavenPackageTemplate
MesonPackageTemplate
OctavePackageTemplate
PackageTemplate
PerlbuildPackageTemplate
PerlmakePackageTemplate
PythonPackageTemplate
QMakePackageTemplate
RPackageTemplate
RacketPackageTemplate
RubyPackageTemplate
SIPPackageTemplate
SconsPackageTemplate
WafPackageTemplate
create()
get_build_system()
get_name()
get_repository()
get_url()
get_versions()
setup_parser()
- spack.cmd.debug module
- spack.cmd.deconcretize module
- spack.cmd.dependencies module
- spack.cmd.dependents module
- spack.cmd.deprecate module
- spack.cmd.dev_build module
- spack.cmd.develop module
- spack.cmd.diff module
- spack.cmd.docs module
- spack.cmd.edit module
- spack.cmd.env module
ViewAction
create_temp_env_directory()
env()
env_activate()
env_activate_setup_parser()
env_create()
env_create_setup_parser()
env_deactivate()
env_deactivate_setup_parser()
env_depfile()
env_depfile_setup_parser()
env_list()
env_list_setup_parser()
env_loads()
env_loads_setup_parser()
env_remove()
env_remove_setup_parser()
env_rename()
env_rename_setup_parser()
env_revert()
env_revert_setup_parser()
env_status()
env_status_setup_parser()
env_track()
env_track_setup_parser()
env_untrack()
env_untrack_setup_parser()
env_update()
env_update_setup_parser()
env_view()
env_view_setup_parser()
filter_managed_env_names()
get_valid_envs()
setup_parser()
subcommand_functions
subcommands
- spack.cmd.extensions module
- spack.cmd.external module
- spack.cmd.fetch module
- spack.cmd.find module
- spack.cmd.gc module
- spack.cmd.gpg module
- spack.cmd.graph module
- spack.cmd.help module
- spack.cmd.info module
VariantFormatter
info()
license()
padder()
print_dependencies()
print_detectable()
print_licenses()
print_maintainers()
print_namespace()
print_phases()
print_tags()
print_tests()
print_variants()
print_variants_by_name()
print_variants_grouped_by_when()
print_versions()
print_virtuals()
section_title()
setup_parser()
variant()
version()
- spack.cmd.install module
- spack.cmd.license module
- spack.cmd.list module
- spack.cmd.load module
- spack.cmd.location module
- spack.cmd.log_parse module
- spack.cmd.logs module
- spack.cmd.maintainers module
- spack.cmd.make_installer module
- spack.cmd.mark module
- spack.cmd.mirror module
IncludeFilter
all_specs_with_all_versions()
concrete_specs_from_cli_or_file()
concrete_specs_from_environment()
concrete_specs_from_user()
create_mirror_for_all_specs()
create_mirror_for_individual_specs()
extend_with_additional_versions()
extend_with_dependencies()
filter_externals()
mirror()
mirror_add()
mirror_create()
mirror_destroy()
mirror_list()
mirror_remove()
mirror_set()
mirror_set_url()
process_mirror_stats()
setup_parser()
specs_from_text_file()
versions_per_spec()
- spack.cmd.module module
- spack.cmd.patch module
- spack.cmd.pkg module
- spack.cmd.providers module
- spack.cmd.pydoc module
- spack.cmd.python module
- spack.cmd.reindex module
- spack.cmd.remove module
- spack.cmd.repo module
- spack.cmd.resource module
- spack.cmd.restage module
- spack.cmd.solve module
- spack.cmd.spec module
- spack.cmd.stage module
- spack.cmd.style module
changed_files()
cwd_relative()
exclude_directories
grouper()
is_package()
missing_tools()
mypy_ignores
print_style_header()
print_tool_header()
print_tool_result()
rewrite_and_print_output()
run_black()
run_flake8()
run_import_check()
run_isort()
run_mypy()
setup_parser()
style()
tool
tool_names
tools
validate_toolset()
- spack.cmd.tags module
- spack.cmd.test module
- spack.cmd.test_env module
- spack.cmd.tutorial module
- spack.cmd.undevelop module
- spack.cmd.uninstall module
- spack.cmd.unit_test module
- spack.cmd.unload module
- spack.cmd.url module
- spack.cmd.verify module
- spack.cmd.versions module
- spack.cmd.view module
- spack.compilers package
COMPILER_TAG
CacheReference
CompilerConfigFactory
InvalidCompilerConfigurationError
NoCompilerForSpecError
UnknownCompilerError
add_compilers_to_config()
all_compiler_module_names()
all_compiler_names()
all_compiler_specs()
all_compiler_types()
all_compilers()
all_compilers_config()
all_compilers_from()
class_for_compiler_name()
compiler_config_files()
compiler_for_spec()
compiler_from_dict()
compiler_specs_for_arch()
compilers_for_arch()
compilers_for_spec()
find()
find_compilers()
find_specs_by_arch()
get_compiler_config()
get_compiler_config_from_packages()
get_compilers()
is_mixed_toolchain()
pkg_spec_for_compiler()
remove_compiler_from_config()
select_new_compilers()
supported()
supported_compilers()
supported_compilers_for_host_platform()
supported_compilers_for_platform()
- Submodules
- spack.compilers.aocc module
Aocc
Aocc.c11_flag
Aocc.c99_flag
Aocc.cc_pic_flag
Aocc.cflags
Aocc.cxx11_flag
Aocc.cxx14_flag
Aocc.cxx17_flag
Aocc.cxx_pic_flag
Aocc.cxxflags
Aocc.debug_flags
Aocc.extract_version_from_output()
Aocc.f77_pic_flag
Aocc.fc_pic_flag
Aocc.fflags
Aocc.link_paths
Aocc.openmp_flag
Aocc.opt_flags
Aocc.required_libs
Aocc.stdcxx_libs
Aocc.verbose_flag
Aocc.version_argument
- spack.compilers.apple_clang module
- spack.compilers.arm module
- spack.compilers.cce module
- spack.compilers.clang module
Clang
Clang.c11_flag
Clang.c17_flag
Clang.c23_flag
Clang.c99_flag
Clang.cc_pic_flag
Clang.cxx11_flag
Clang.cxx14_flag
Clang.cxx17_flag
Clang.cxx20_flag
Clang.cxx23_flag
Clang.cxx_pic_flag
Clang.debug_flags
Clang.extract_version_from_output()
Clang.f77_pic_flag
Clang.fc_pic_flag
Clang.link_paths
Clang.openmp_flag
Clang.opt_flags
Clang.required_libs
Clang.verbose_flag
Clang.version_argument
f77_mapping
fc_mapping
- spack.compilers.fj module
- spack.compilers.gcc module
Gcc
Gcc.c11_flag
Gcc.c99_flag
Gcc.cc_pic_flag
Gcc.cxx11_flag
Gcc.cxx14_flag
Gcc.cxx17_flag
Gcc.cxx20_flag
Gcc.cxx23_flag
Gcc.cxx98_flag
Gcc.cxx_pic_flag
Gcc.debug_flags
Gcc.default_version()
Gcc.f77_pic_flag
Gcc.fc_pic_flag
Gcc.link_paths
Gcc.openmp_flag
Gcc.opt_flags
Gcc.prefix
Gcc.required_libs
Gcc.stdcxx_libs
Gcc.suffixes
Gcc.verbose_flag
- spack.compilers.intel module
Intel
Intel.c11_flag
Intel.c18_flag
Intel.c99_flag
Intel.cc_pic_flag
Intel.cxx11_flag
Intel.cxx14_flag
Intel.cxx17_flag
Intel.cxx_pic_flag
Intel.debug_flags
Intel.f77_pic_flag
Intel.fc_pic_flag
Intel.link_paths
Intel.openmp_flag
Intel.opt_flags
Intel.required_libs
Intel.setup_custom_environment()
Intel.stdcxx_libs
Intel.verbose_flag
Intel.version_argument
Intel.version_regex
- spack.compilers.msvc module
CmdCall
Msvc
Msvc.c11_flag
Msvc.c17_flag
Msvc.cl_version
Msvc.cxx11_flag
Msvc.cxx14_flag
Msvc.cxx17_flag
Msvc.cxx20_flag
Msvc.fc_version()
Msvc.ifx_version
Msvc.ignore_version_errors
Msvc.is_supported_on_platform()
Msvc.link_paths
Msvc.msvc_version
Msvc.platform_toolset_ver
Msvc.setup_custom_environment()
Msvc.short_msvc_version
Msvc.suffixes
Msvc.vc_toolset_ver
Msvc.version_argument
Msvc.version_regex
Msvc.visual_studio_version
Msvc.vs_root
VCVarsInvocation
VarsInvocation
get_valid_fortran_pth()
- spack.compilers.nag module
- spack.compilers.nvhpc module
Nvhpc
Nvhpc.c11_flag
Nvhpc.c99_flag
Nvhpc.cc_pic_flag
Nvhpc.cxx11_flag
Nvhpc.cxx14_flag
Nvhpc.cxx17_flag
Nvhpc.cxx_pic_flag
Nvhpc.debug_flags
Nvhpc.f77_pic_flag
Nvhpc.fc_pic_flag
Nvhpc.link_paths
Nvhpc.openmp_flag
Nvhpc.opt_flags
Nvhpc.required_libs
Nvhpc.stdcxx_libs
Nvhpc.verbose_flag
Nvhpc.version_argument
Nvhpc.version_regex
- spack.compilers.oneapi module
Oneapi
Oneapi.c11_flag
Oneapi.c99_flag
Oneapi.cc_pic_flag
Oneapi.cxx11_flag
Oneapi.cxx14_flag
Oneapi.cxx17_flag
Oneapi.cxx20_flag
Oneapi.cxx_pic_flag
Oneapi.debug_flags
Oneapi.f77_pic_flag
Oneapi.fc_pic_flag
Oneapi.link_paths
Oneapi.openmp_flag
Oneapi.opt_flags
Oneapi.prefix
Oneapi.required_libs
Oneapi.setup_custom_environment()
Oneapi.stdcxx_libs
Oneapi.verbose_flag
Oneapi.version_argument
Oneapi.version_regex
- spack.compilers.rocmcc module
- spack.compilers.xl module
- spack.compilers.xl_r module
- spack.container package
recipe()
validate()
- Submodules
- spack.container.images module
- spack.container.writers module
DockerContext
PathContext
PathContext.bootstrap
PathContext.build
PathContext.context_properties
PathContext.depfile
PathContext.labels
PathContext.manifest
PathContext.os_package_update
PathContext.os_packages_build
PathContext.os_packages_final
PathContext.paths
PathContext.render_phase
PathContext.run
PathContext.strip
PathContext.template_name
SingularityContext
create()
recipe()
writer()
- spack.detection package
by_path()
detection_tests()
executable_prefix()
executables_in_path()
set_virtuals_nonbuildable()
update_configuration()
- Submodules
- spack.detection.common module
WindowsCompilerExternalPaths
WindowsKitExternalPaths
WindowsKitExternalPaths.find_windows_driver_development_kit_paths()
WindowsKitExternalPaths.find_windows_kit_bin_paths()
WindowsKitExternalPaths.find_windows_kit_lib_paths()
WindowsKitExternalPaths.find_windows_kit_reg_installed_roots_paths()
WindowsKitExternalPaths.find_windows_kit_reg_sdk_paths()
WindowsKitExternalPaths.find_windows_kit_roots()
compute_windows_program_path_for_package()
compute_windows_user_path_for_package()
executable_prefix()
find_win32_additional_install_paths()
is_executable()
library_prefix()
path_to_dict()
set_virtuals_nonbuildable()
update_configuration()
- spack.detection.path module
- spack.detection.test module
- spack.environment package
- spack.lock format
Environment
Environment.active
Environment.add()
Environment.add_view_to_env()
Environment.added_specs()
Environment.all_concretized_orders()
Environment.all_concretized_user_specs()
Environment.all_hashes()
Environment.all_matching_specs()
Environment.all_specs()
Environment.all_specs_generator()
Environment.change_existing_spec()
Environment.check_views()
Environment.clear()
Environment.concrete_roots()
Environment.concretize()
Environment.concretized_order
Environment.concretized_specs()
Environment.concretized_user_specs
Environment.deconcretize()
Environment.default_view
Environment.delete_default_view()
Environment.destroy()
Environment.dev_specs
Environment.ensure_env_directory_exists()
Environment.filter_specs()
Environment.get_by_hash()
Environment.get_one_by_hash()
Environment.has_view()
Environment.include_concrete_envs()
Environment.included_concrete_envs
Environment.included_concrete_spec_data
Environment.included_concretized_order
Environment.included_concretized_user_specs
Environment.included_specs_by_hash
Environment.included_user_specs
Environment.install_all()
Environment.install_specs()
Environment.invalidate_repository_cache()
Environment.is_develop()
Environment.lock_path
Environment.manifest_path
Environment.manifest_uptodate_or_warn()
Environment.matching_spec()
Environment.regenerate_views()
Environment.remove()
Environment.removed_specs()
Environment.repo
Environment.repos_path
Environment.rm_view_from_env()
Environment.roots()
Environment.scope_name
Environment.set_included_concretized_user_specs()
Environment.spec_lists
Environment.specs_by_hash
Environment.unify
Environment.uninstalled_specs()
Environment.update_default_view()
Environment.update_environment_repository()
Environment.update_lockfile()
Environment.update_stale_references()
Environment.user_specs
Environment.view_path_default
Environment.write()
Environment.write_transaction()
SpackEnvironmentConfigError
SpackEnvironmentError
SpackEnvironmentViewError
activate()
active()
active_environment()
all_environment_names()
all_environments()
as_env_dir()
create()
create_in_dir()
deactivate()
default_manifest_yaml()
display_specs()
environment_dir_from_name()
environment_from_name_or_dir()
environment_path_scopes()
exists()
initialize_environment_dir()
installed_specs()
is_env_dir()
is_latest_format()
manifest_file()
no_active_environment()
read()
root()
update_yaml()
- Submodules
- spack.environment.depfile module
- spack.environment.environment module
Environment
Environment.active
Environment.add()
Environment.add_view_to_env()
Environment.added_specs()
Environment.all_concretized_orders()
Environment.all_concretized_user_specs()
Environment.all_hashes()
Environment.all_matching_specs()
Environment.all_specs()
Environment.all_specs_generator()
Environment.change_existing_spec()
Environment.check_views()
Environment.clear()
Environment.concrete_roots()
Environment.concretize()
Environment.concretized_order
Environment.concretized_specs()
Environment.concretized_user_specs
Environment.deconcretize()
Environment.default_view
Environment.delete_default_view()
Environment.destroy()
Environment.dev_specs
Environment.ensure_env_directory_exists()
Environment.filter_specs()
Environment.get_by_hash()
Environment.get_one_by_hash()
Environment.has_view()
Environment.include_concrete_envs()
Environment.included_concrete_envs
Environment.included_concrete_spec_data
Environment.included_concretized_order
Environment.included_concretized_user_specs
Environment.included_specs_by_hash
Environment.included_user_specs
Environment.install_all()
Environment.install_specs()
Environment.invalidate_repository_cache()
Environment.is_develop()
Environment.lock_path
Environment.manifest_path
Environment.manifest_uptodate_or_warn()
Environment.matching_spec()
Environment.new_specs
Environment.regenerate_views()
Environment.remove()
Environment.removed_specs()
Environment.repo
Environment.repos_path
Environment.rm_view_from_env()
Environment.roots()
Environment.scope_name
Environment.set_included_concretized_user_specs()
Environment.spec_lists
Environment.specs_by_hash
Environment.unify
Environment.uninstalled_specs()
Environment.update_default_view()
Environment.update_environment_repository()
Environment.update_lockfile()
Environment.update_stale_references()
Environment.user_specs
Environment.view_path_default
Environment.views
Environment.write()
Environment.write_transaction()
EnvironmentManifestFile
EnvironmentManifestFile.add_definition()
EnvironmentManifestFile.add_user_spec()
EnvironmentManifestFile.clear()
EnvironmentManifestFile.configuration
EnvironmentManifestFile.deactivate_config_scope()
EnvironmentManifestFile.env_config_scopes
EnvironmentManifestFile.flush()
EnvironmentManifestFile.from_lockfile()
EnvironmentManifestFile.override_definition()
EnvironmentManifestFile.override_user_spec()
EnvironmentManifestFile.prepare_config_scope()
EnvironmentManifestFile.remove_default_view()
EnvironmentManifestFile.remove_definition()
EnvironmentManifestFile.remove_user_spec()
EnvironmentManifestFile.set_default_view()
EnvironmentManifestFile.set_include_concrete()
EnvironmentManifestFile.use_config()
SpackEnvironmentConfigError
SpackEnvironmentError
SpackEnvironmentViewError
ViewDescriptor
activate()
active()
active_environment()
all_environment_names()
all_environments()
as_env_dir()
create()
create_in_dir()
deactivate()
default_env_path
default_manifest_yaml()
display_specs()
ensure_env_root_path_exists()
ensure_no_disallowed_env_config_mods()
env_root_path()
env_subdir_name
env_subdir_path()
environment_dir_from_name()
environment_from_name_or_dir()
environment_name()
environment_path_scopes()
exists()
initialize_environment_dir()
installed_specs()
is_env_dir()
is_latest_format()
lockfile_format_version
lockfile_name
make_repo_path()
manifest_file()
manifest_name
no_active_environment()
read()
root()
set_included_envs_to_env_paths()
spack_env_var
spack_env_view_var
update_yaml()
valid_env_name()
valid_environment_name_re
validate_env_name()
validate_included_envs_concrete()
validate_included_envs_exists()
yaml_equivalent()
- spack.environment.shell module
- spack.hooks package
- Submodules
- spack.hooks.absolutify_elf_sonames module
- spack.hooks.autopush module
- spack.hooks.drop_redundant_rpaths module
- spack.hooks.licensing module
- spack.hooks.module_file_generation module
- spack.hooks.permissions_setters module
- spack.hooks.resolve_shared_libraries module
- spack.hooks.sbang module
- spack.hooks.windows_runtime_linkage module
- spack.hooks.write_install_manifest module
- spack.mirrors package
- Submodules
- spack.mirrors.layout module
- spack.mirrors.mirror module
Mirror
Mirror.autopush
Mirror.binary
Mirror.display()
Mirror.ensure_mirror_usable()
Mirror.fetch_url
Mirror.from_json()
Mirror.from_local_path()
Mirror.from_url()
Mirror.from_yaml()
Mirror.get_access_pair()
Mirror.get_access_token()
Mirror.get_credentials()
Mirror.get_endpoint_url()
Mirror.get_profile()
Mirror.get_url()
Mirror.name
Mirror.push_url
Mirror.signed
Mirror.source
Mirror.to_dict()
Mirror.to_json()
Mirror.to_yaml()
Mirror.update()
MirrorCollection
supported_url_schemes
- spack.mirrors.utils module
- spack.modules package
LmodModulefileWriter
TclModulefileWriter
disable_modules()
- Submodules
- spack.modules.common module
BaseConfiguration
BaseConfiguration.conflicts
BaseConfiguration.context
BaseConfiguration.default_projections
BaseConfiguration.defaults
BaseConfiguration.env
BaseConfiguration.exclude_env_vars
BaseConfiguration.excluded
BaseConfiguration.hash
BaseConfiguration.hidden
BaseConfiguration.literals_to_load
BaseConfiguration.module
BaseConfiguration.projections
BaseConfiguration.specs_to_load
BaseConfiguration.specs_to_prereq
BaseConfiguration.suffixes
BaseConfiguration.template
BaseConfiguration.verbose
BaseContext
BaseContext.autoload
BaseContext.category
BaseContext.configure_options
BaseContext.conflicts
BaseContext.context_properties
BaseContext.environment_modifications
BaseContext.has_manpath_modifications
BaseContext.long_description
BaseContext.modification_needs_formatting()
BaseContext.short_description
BaseContext.spec
BaseContext.tags
BaseContext.timestamp
BaseContext.verbose
BaseFileLayout
BaseModuleFileWriter
BaseModuleFileWriter.default_template
BaseModuleFileWriter.hide_cmd_format
BaseModuleFileWriter.module
BaseModuleFileWriter.modulerc_header
BaseModuleFileWriter.remove()
BaseModuleFileWriter.remove_module_defaults()
BaseModuleFileWriter.update_module_defaults()
BaseModuleFileWriter.update_module_hiddenness()
BaseModuleFileWriter.write()
DefaultTemplateNotDefined
HideCmdFormatNotDefined
ModuleIndexEntry
ModuleNotFoundError
ModulercHeaderNotDefined
ModulesError
ModulesTemplateNotFoundError
UpstreamModuleIndex
configuration()
dependencies()
disable_modules()
generate_module_index()
merge_config_rules()
read_module_index()
read_module_indices()
root_path()
update_dictionary_extending_lists()
- spack.modules.lmod module
CoreCompilersNotFoundError
LmodConfiguration
LmodConfiguration.available
LmodConfiguration.core_compilers
LmodConfiguration.core_specs
LmodConfiguration.default_projections
LmodConfiguration.filter_hierarchy_specs
LmodConfiguration.hidden
LmodConfiguration.hierarchy_tokens
LmodConfiguration.missing
LmodConfiguration.provides
LmodConfiguration.requires
LmodContext
LmodFileLayout
LmodModulefileWriter
NonVirtualInHierarchyError
configuration()
guess_core_compilers()
make_configuration()
make_context()
make_layout()
- spack.modules.tcl module
- spack.oci package
- Submodules
- spack.oci.image module
Digest
ImageReference
ImageReference.blob_url()
ImageReference.digest
ImageReference.domain
ImageReference.endpoint()
ImageReference.from_string()
ImageReference.manifest_url()
ImageReference.name
ImageReference.tag
ImageReference.tags_url()
ImageReference.uploads_url()
ImageReference.with_digest()
ImageReference.with_tag()
default_config()
default_manifest()
ensure_sha256_checksum()
ensure_valid_tag()
- spack.oci.oci module
Blob
all_content_type
blob_exists()
copy_missing_layers()
copy_missing_layers_with_retry()
get_manifest_and_config()
get_manifest_and_config_with_retry()
image_from_mirror()
index_content_type
list_tags()
make_stage()
manifest_content_type
upload_blob()
upload_blob_with_retry()
upload_manifest()
upload_manifest_with_retry()
with_query_param()
- spack.oci.opener module
- spack.operating_systems package
- spack.platforms package
Darwin
FreeBSD
Linux
Platform
Platform.add_operating_system()
Platform.add_target()
Platform.binary_formats
Platform.default
Platform.default_operating_system()
Platform.default_os
Platform.default_target()
Platform.deprecated_names
Platform.detect()
Platform.operating_system()
Platform.priority
Platform.reserved_oss
Platform.reserved_targets
Platform.setup_platform_environment()
Platform.target()
Test
Windows
by_name()
host()
reset()
- Submodules
- spack.platforms.cray module
- spack.platforms.darwin module
- spack.platforms.freebsd module
- spack.platforms.linux module
- spack.platforms.test module
- spack.platforms.windows module
- spack.reporters package
CDash
CDash.build_report()
CDash.build_report_for_package()
CDash.concretization_report()
CDash.extract_standalone_test_data()
CDash.finalize_report()
CDash.initialize_report()
CDash.report_build_name()
CDash.report_test_data()
CDash.success
CDash.test_report()
CDash.test_report_for_package()
CDash.test_skipped_report()
CDash.upload()
CDashConfiguration
JUnit
Reporter
- Submodules
- spack.reporters.base module
- spack.reporters.cdash module
CDash
CDash.buildIds
CDash.build_report()
CDash.build_report_for_package()
CDash.concretization_report()
CDash.extract_standalone_test_data()
CDash.finalize_report()
CDash.initialize_report()
CDash.report_build_name()
CDash.report_test_data()
CDash.success
CDash.test_report()
CDash.test_report_for_package()
CDash.test_skipped_report()
CDash.upload()
CDashConfiguration
build_stamp()
- spack.reporters.extract module
- spack.reporters.junit module
- spack.schema package
DeprecationMessage
merge_yaml()
override()
- Submodules
- spack.schema.bootstrap module
- spack.schema.buildcache_spec module
- spack.schema.cdash module
- spack.schema.ci module
- spack.schema.compilers module
- spack.schema.concretizer module
- spack.schema.config module
- spack.schema.container module
- spack.schema.cray_manifest module
- spack.schema.database_index module
- spack.schema.definitions module
- spack.schema.develop module
- spack.schema.env module
- spack.schema.env_vars module
- spack.schema.environment module
- spack.schema.include module
- spack.schema.merged module
- spack.schema.mirrors module
- spack.schema.modules module
- spack.schema.packages module
- spack.schema.projections module
- spack.schema.repos module
- spack.schema.spec module
- spack.schema.spec_list module
- spack.schema.upstreams module
- spack.schema.view module
- spack.solver package
- Submodules
- spack.solver.asp module
CompilerParser
ConcreteSpecsByHash
ConcretizationCache
ConditionContext
ConditionIdContext
ConstraintOrigin
DEFAULT_OUTPUT_CONFIGURATION
DeclaredVersion
ErrorHandler
InternalConcretizerError
InvalidSpliceError
KnownCompiler
OutputConfiguration
ProblemInstanceBuilder
Provenance
PyclingoDriver
Result
ReusableSpecsSelector
ReuseStrategy
RuntimePropertyRecorder
Solver
SolverError
SourceContext
SpackSolverSetup
SpackSolverSetup.collect_virtual_constraints()
SpackSolverSetup.compiler_facts()
SpackSolverSetup.concrete_specs()
SpackSolverSetup.condition()
SpackSolverSetup.config_compatible_os()
SpackSolverSetup.conflict_rules()
SpackSolverSetup.define_ad_hoc_versions_from_specs()
SpackSolverSetup.define_auto_variant()
SpackSolverSetup.define_compiler_version_constraints()
SpackSolverSetup.define_concrete_input_specs()
SpackSolverSetup.define_package_versions_and_validate_preferences()
SpackSolverSetup.define_runtime_constraints()
SpackSolverSetup.define_target_constraints()
SpackSolverSetup.define_variant()
SpackSolverSetup.define_variant_values()
SpackSolverSetup.define_version_constraints()
SpackSolverSetup.effect_rules()
SpackSolverSetup.emit_facts_from_requirement_rules()
SpackSolverSetup.external_packages()
SpackSolverSetup.impose()
SpackSolverSetup.internal_errors()
SpackSolverSetup.literal_specs()
SpackSolverSetup.os_defaults()
SpackSolverSetup.package_dependencies_rules()
SpackSolverSetup.package_languages()
SpackSolverSetup.package_provider_rules()
SpackSolverSetup.package_requirement_rules()
SpackSolverSetup.package_splice_rules()
SpackSolverSetup.pkg_class()
SpackSolverSetup.pkg_rules()
SpackSolverSetup.pkg_version_rules()
SpackSolverSetup.platform_defaults()
SpackSolverSetup.preferred_variants()
SpackSolverSetup.provider_defaults()
SpackSolverSetup.provider_requirements()
SpackSolverSetup.register_concrete_spec()
SpackSolverSetup.setup()
SpackSolverSetup.spec_clauses()
SpackSolverSetup.spec_versions()
SpackSolverSetup.target_defaults()
SpackSolverSetup.target_preferences()
SpackSolverSetup.target_ranges()
SpackSolverSetup.trigger_rules()
SpackSolverSetup.validate_and_define_versions_from_requirements()
SpackSolverSetup.variant_rules()
SpackSolverSetup.virtual_preferences()
SpackSolverSetup.virtual_providers()
SpecBuilder
SpecBuilder.build_specs()
SpecBuilder.depends_on()
SpecBuilder.deprecated()
SpecBuilder.execute_explicit_splices()
SpecBuilder.external_spec_selected()
SpecBuilder.hash()
SpecBuilder.ignored_attributes
SpecBuilder.make_node()
SpecBuilder.namespace()
SpecBuilder.node()
SpecBuilder.node_compiler_version()
SpecBuilder.node_flag()
SpecBuilder.node_os()
SpecBuilder.node_platform()
SpecBuilder.node_target()
SpecBuilder.reorder_flags()
SpecBuilder.sort_fn()
SpecBuilder.splice_at_hash()
SpecBuilder.variant_selected()
SpecBuilder.version()
SpecBuilder.virtual_on_edge()
SpecFilter
UnsatisfiableSpecError
WITH_RUNTIME
all_libcs()
build_criteria_names()
build_priority_offset
c_compiler_runs()
check_packages_exist()
default_clingo_control()
extend_flag_list()
fixed_priority_offset
high_fixed_priority_offset
issequence()
libc_is_compatible()
listify()
named_spec()
packagize()
remove_node()
specify()
using_libc_compatibility()
- spack.solver.core module
- spack.solver.input_analysis module
- spack.solver.requirements module
- spack.solver.splicing module
- spack.solver.version_order module
- spack.util package
- Subpackages
- Submodules
- spack.util.archive module
ChecksumWriter
ChecksumWriter.close()
ChecksumWriter.closed
ChecksumWriter.fileno()
ChecksumWriter.flush()
ChecksumWriter.hexdigest()
ChecksumWriter.myfileobj
ChecksumWriter.peek()
ChecksumWriter.read()
ChecksumWriter.read1()
ChecksumWriter.readable()
ChecksumWriter.readline()
ChecksumWriter.rewind()
ChecksumWriter.seek()
ChecksumWriter.seekable()
ChecksumWriter.tell()
ChecksumWriter.writable()
ChecksumWriter.write()
default_add_file()
default_add_link()
default_path_to_name()
gzip_compressed_tarfile()
reproducible_tarfile_from_prefix()
- spack.util.compression module
BZipFileType
CompressedFileTypeInterface
FileTypeInterface
GZipFileType
LzmaFileType
MAX_BYTES_ARCHIVE_HEADER
SUPPORTED_FILETYPES
TarFileType
ZCompressedFileType
ZipFleType
decompressor_for()
decompressor_for_nix()
decompressor_for_win()
extension_from_magic_numbers()
extension_from_magic_numbers_by_stream()
- spack.util.cpus module
- spack.util.crypto module
- spack.util.debug module
- spack.util.editor module
- spack.util.elf module
CStringType
ELF_CONSTANTS
ELF_CONSTANTS.CLASS32
ELF_CONSTANTS.CLASS64
ELF_CONSTANTS.DATA2LSB
ELF_CONSTANTS.DATA2MSB
ELF_CONSTANTS.DT_NEEDED
ELF_CONSTANTS.DT_NULL
ELF_CONSTANTS.DT_RPATH
ELF_CONSTANTS.DT_RUNPATH
ELF_CONSTANTS.DT_SONAME
ELF_CONSTANTS.DT_STRTAB
ELF_CONSTANTS.ET_DYN
ELF_CONSTANTS.ET_EXEC
ELF_CONSTANTS.MAGIC
ELF_CONSTANTS.PT_DYNAMIC
ELF_CONSTANTS.PT_INTERP
ELF_CONSTANTS.PT_LOAD
ELF_CONSTANTS.SHT_STRTAB
ElfCStringUpdatesFailed
ElfFile
ElfFile.byte_order
ElfFile.dt_needed_strs
ElfFile.dt_needed_strtab_offsets
ElfFile.dt_rpath_offset
ElfFile.dt_rpath_str
ElfFile.dt_soname_str
ElfFile.dt_soname_strtab_offset
ElfFile.elf_hdr
ElfFile.has_needed
ElfFile.has_pt_dynamic
ElfFile.has_pt_interp
ElfFile.has_rpath
ElfFile.has_soname
ElfFile.is_64_bit
ElfFile.is_little_endian
ElfFile.is_runpath
ElfFile.pt_dynamic_p_filesz
ElfFile.pt_dynamic_p_offset
ElfFile.pt_dynamic_strtab_offset
ElfFile.pt_interp_p_filesz
ElfFile.pt_interp_p_offset
ElfFile.pt_interp_str
ElfFile.pt_load
ElfFile.rpath_strtab_offset
ElfHeader
ElfParsingError
ProgramHeader32
ProgramHeader64
SectionHeader
UpdateCStringAction
delete_needed_from_elf()
delete_rpath()
find_strtab_size_at_offset()
get_elf_compat()
get_interpreter()
get_rpaths()
parse_c_string()
parse_elf()
parse_header()
parse_program_headers()
parse_pt_dynamic()
parse_pt_interp()
pt_interp()
read_exactly()
retrieve_strtab()
substitute_rpath_and_pt_interp_in_place_or_raise()
vaddr_to_offset()
- spack.util.environment module
AppendFlagsEnv
AppendPath
DeprioritizeSystemPaths
EnvironmentModifications
EnvironmentModifications.append_flags()
EnvironmentModifications.append_path()
EnvironmentModifications.apply_modifications()
EnvironmentModifications.clear()
EnvironmentModifications.deprioritize_system_paths()
EnvironmentModifications.drop()
EnvironmentModifications.extend()
EnvironmentModifications.from_environment_diff()
EnvironmentModifications.from_sourcing_file()
EnvironmentModifications.group_by_name()
EnvironmentModifications.is_unset()
EnvironmentModifications.prepend_path()
EnvironmentModifications.prune_duplicate_paths()
EnvironmentModifications.remove_flags()
EnvironmentModifications.remove_path()
EnvironmentModifications.reversed()
EnvironmentModifications.set()
EnvironmentModifications.set_path()
EnvironmentModifications.shell_modifications()
EnvironmentModifications.unset()
NameModifier
NameValueModifier
PrependPath
PruneDuplicatePaths
RemoveFlagsEnv
RemovePath
SYSTEM_DIR_CASE_ENTRY
SetEnv
SetPath
Trace
UnsetEnv
deprioritize_system_paths()
dump_environment()
env_flag()
environment_after_sourcing_files()
filter_system_paths()
get_path()
inspect_path()
is_system_path()
path_put_first()
path_set()
pickle_environment()
preserve_environment()
prune_duplicate_paths()
sanitize()
set_env()
system_env_normalize()
validate()
- spack.util.executable module
- spack.util.file_cache module
- spack.util.file_permissions module
- spack.util.filesystem module
- spack.util.format module
- spack.util.gcs module
- spack.util.git module
- spack.util.gpg module
- spack.util.hash module
- spack.util.ld_so_conf module
- spack.util.libc module
- spack.util.lock module
- spack.util.log_parse module
- spack.util.module_cmd module
- spack.util.naming module
- spack.util.package_hash module
- spack.util.parallel module
- spack.util.path module
- spack.util.pattern module
- spack.util.prefix module
- spack.util.remote_file_cache module
- spack.util.s3 module
- spack.util.spack_json module
- spack.util.spack_yaml module
- spack.util.timer module
- spack.util.typing module
- spack.util.url module
- spack.util.web module
DetailedHTTPError
ExtractMetadataParser
HTMLParseError
LinkParser
NoNetworkConnectionError
SPACK_USER_AGENT
SpackHTTPDefaultErrorHandler
SpackWebError
base_curl_fetch_args()
check_curl_code()
custom_ssl_certs()
fetch_url_text()
get_header()
list_url()
parse_etag()
push_to_url()
read_from_url()
remove_url()
require_curl()
set_curl_env_for_ssl_certs()
spider()
ssl_create_default_context()
url_exists()
urlopen
- spack.util.windows_registry module
HKEY
InvalidKeyError
InvalidRegistryOperation
RegistryError
RegistryKey
RegistryValue
WindowsRegistryView
WindowsRegistryView.KeyMatchConditions
WindowsRegistryView.find_matching_subkey()
WindowsRegistryView.find_subkey()
WindowsRegistryView.find_subkeys()
WindowsRegistryView.find_value()
WindowsRegistryView.get_matching_subkeys()
WindowsRegistryView.get_subkey()
WindowsRegistryView.get_subkeys()
WindowsRegistryView.get_value()
WindowsRegistryView.get_values()
WindowsRegistryView.invalid_reg_ref_error_handler()
WindowsRegistryView.reg
- spack.version package
ClosedOpenRange
ConcreteVersion
EmptyRangeError
GitVersion
GitVersion.attach_lookup()
GitVersion.dashed
GitVersion.dotted
GitVersion.has_git_prefix
GitVersion.intersection()
GitVersion.intersects()
GitVersion.is_commit
GitVersion.is_prerelease()
GitVersion.isdevelop()
GitVersion.joined
GitVersion.ref
GitVersion.ref_lookup
GitVersion.ref_version
GitVersion.satisfies()
GitVersion.underscored
GitVersion.up_to()
StandardVersion
StandardVersion.dashed
StandardVersion.dotted
StandardVersion.dotted_numeric_string
StandardVersion.from_string()
StandardVersion.intersection()
StandardVersion.intersects()
StandardVersion.is_prerelease()
StandardVersion.isdevelop()
StandardVersion.joined
StandardVersion.satisfies()
StandardVersion.separators
StandardVersion.string
StandardVersion.typemax()
StandardVersion.typemin()
StandardVersion.underscored
StandardVersion.union()
StandardVersion.up_to()
StandardVersion.up_to_1
StandardVersion.up_to_2
StandardVersion.up_to_3
StandardVersion.version
Version()
VersionChecksumError
VersionError
VersionList
VersionList.add()
VersionList.concrete
VersionList.concrete_range_as_version
VersionList.copy()
VersionList.from_dict()
VersionList.highest()
VersionList.highest_numeric()
VersionList.intersect()
VersionList.intersection()
VersionList.intersects()
VersionList.lowest()
VersionList.preferred()
VersionList.satisfies()
VersionList.to_dict()
VersionList.union()
VersionList.update()
VersionList.versions
VersionLookupError
VersionRange()
VersionType
any_version
from_string()
is_git_version()
ver()
- Submodules
- spack.version.common module
- spack.version.git_ref_lookup module
- spack.version.lookup module
- spack.version.version_types module
ClosedOpenRange
ConcreteVersion
GitVersion
GitVersion.attach_lookup()
GitVersion.dashed
GitVersion.dotted
GitVersion.has_git_prefix
GitVersion.intersection()
GitVersion.intersects()
GitVersion.is_commit
GitVersion.is_prerelease()
GitVersion.isdevelop()
GitVersion.joined
GitVersion.ref
GitVersion.ref_lookup
GitVersion.ref_version
GitVersion.satisfies()
GitVersion.underscored
GitVersion.up_to()
PrereleaseTuple
SeparatorTuple
StandardVersion
StandardVersion.dashed
StandardVersion.dotted
StandardVersion.dotted_numeric_string
StandardVersion.from_string()
StandardVersion.intersection()
StandardVersion.intersects()
StandardVersion.is_prerelease()
StandardVersion.isdevelop()
StandardVersion.joined
StandardVersion.satisfies()
StandardVersion.separators
StandardVersion.string
StandardVersion.typemax()
StandardVersion.typemin()
StandardVersion.underscored
StandardVersion.union()
StandardVersion.up_to()
StandardVersion.up_to_1
StandardVersion.up_to_2
StandardVersion.up_to_3
StandardVersion.version
Version()
VersionComponentTuple
VersionList
VersionList.add()
VersionList.concrete
VersionList.concrete_range_as_version
VersionList.copy()
VersionList.from_dict()
VersionList.highest()
VersionList.highest_numeric()
VersionList.intersect()
VersionList.intersection()
VersionList.intersects()
VersionList.lowest()
VersionList.preferred()
VersionList.satisfies()
VersionList.to_dict()
VersionList.union()
VersionList.update()
VersionList.versions
VersionRange()
VersionStrComponent
VersionTuple
VersionType
from_string()
parse_string_components()
ver()
Submodules
spack.audit module
Classes and functions to register audit checks for various parts of Spack and run them on-demand.
To register a new class of sanity checks (e.g. sanity checks for compilers.yaml), the first action required is to create a new AuditClass object:
audit_cfgcmp = AuditClass(
tag='CFG-COMPILER',
description='Sanity checks on compilers.yaml',
kwargs=()
)
This object is to be used as a decorator to register functions that will perform each a single check:
@audit_cfgcmp
def _search_duplicate_compilers(error_cls):
pass
These functions need to take as argument the keywords declared when
creating the decorator object plus an error_cls
argument at the
end, acting as a factory to create Error objects. It should return a
(possibly empty) list of errors.
Calls to each of these functions are triggered by the run
method of
the decorator object, that will forward the keyword arguments passed
as input.
- spack.audit.CALLBACKS = {'CFG-COMPILER': <spack.audit.AuditClass object>, 'CFG-PACKAGES': <spack.audit.AuditClass object>, 'CFG-REPOS': <spack.audit.AuditClass object>, 'GENERIC': <spack.audit.AuditClass object>, 'PKG-ATTRIBUTES': <spack.audit.AuditClass object>, 'PKG-DEPRECATED-ATTRIBUTES': <spack.audit.AuditClass object>, 'PKG-DIRECTIVES': <spack.audit.AuditClass object>, 'PKG-EXTERNALS': <spack.audit.AuditClass object>, 'PKG-HTTPS-DIRECTIVES': <spack.audit.AuditClass object>, 'PKG-PROPERTIES': <spack.audit.AuditClass object>}
Map an audit tag to a list of callables implementing checks
- class spack.audit.DeprecatedMagicGlobals(magic_globals: Iterable[str])[source]
Bases:
NodeVisitor
- class spack.audit.Error(summary, details)[source]
Bases:
object
Information on an error reported in a test.
- spack.audit.GROUPS = {'configs': ['CFG-COMPILER', 'CFG-PACKAGES', 'CFG-REPOS'], 'externals': ['PKG-EXTERNALS'], 'generic': ['GENERIC'], 'packages': ['PKG-DIRECTIVES', 'PKG-ATTRIBUTES', 'PKG-DEPRECATED-ATTRIBUTES', 'PKG-PROPERTIES'], 'packages-https': ['PKG-HTTPS-DIRECTIVES']}
Map a group of checks to the list of related audit tags
- spack.audit.config_compiler = <spack.audit.AuditClass object>
Sanity checks on compilers.yaml
- spack.audit.config_packages = <spack.audit.AuditClass object>
Sanity checks on packages.yaml
- spack.audit.config_repos = <spack.audit.AuditClass object>
Sanity checks on packages.yaml
- spack.audit.external_detection = <spack.audit.AuditClass object>
Sanity checks on package directives
- spack.audit.generic = <spack.audit.AuditClass object>
Generic checks relying on global state
- spack.audit.package_directives = <spack.audit.AuditClass object>
Sanity checks on package directives
- spack.audit.packages_with_detection_tests()[source]
Return the list of packages with a corresponding detection_test.yaml file.
spack.binary_distribution module
- spack.binary_distribution.BINARY_INDEX: BinaryCacheIndex = <spack.binary_distribution.BinaryCacheIndex object>
Default binary cache index instance
- class spack.binary_distribution.BinaryCacheIndex(cache_root: str | None = None)[source]
Bases:
object
The BinaryCacheIndex tracks what specs are available on (usually remote) binary caches.
This index is “best effort”, in the sense that whenever we don’t find what we’re looking for here, we will attempt to fetch it directly from configured mirrors anyway. Thus, it has the potential to speed things up, but cache misses shouldn’t break any spack functionality.
At the moment, everything in this class is initialized as lazily as possible, so that it avoids slowing anything in spack down until absolutely necessary.
TODO: What’s the cost if, e.g., we realize in the middle of a spack install that the cache is out of date, and we fetch directly? Does it mean we should have paid the price to update the cache earlier?
- clear()[source]
For testing purposes we need to be able to empty the cache and clear associated data structures.
- find_built_spec(spec, mirrors_to_check=None)[source]
Look in our cache for the built spec corresponding to
spec
.If the spec can be found among the configured binary mirrors, a list is returned that contains the concrete spec and the mirror url of each mirror where it can be found. Otherwise,
None
is returned.This method does not trigger reading anything from remote mirrors, but rather just checks if the concrete spec is found within the cache.
The cache can be updated by calling
update()
on the cache.- Parameters:
spec (spack.spec.Spec) – Concrete spec to find
mirrors_to_check – Optional mapping containing mirrors to check. If None, just assumes all configured mirrors.
- Returns:
- An list of objects containing the found specs and mirror url where
each can be found, e.g.:
[ { "spec": <concrete-spec>, "mirror_url": <mirror-root-url> } ]
- find_by_hash(find_hash, mirrors_to_check=None)[source]
Same as find_built_spec but uses the hash of a spec.
- Parameters:
find_hash (str) – hash of the spec to search
mirrors_to_check – Optional mapping containing mirrors to check. If None, just assumes all configured mirrors.
- regenerate_spec_cache(clear_existing=False)[source]
Populate the local cache of concrete specs (
_mirrors_for_spec
) from the locally cached buildcache index files. This is essentially a no-op if it has already been done, as we keep track of the index hashes for which we have already associated the built specs.
- update(with_cooldown=False)[source]
Make sure local cache of buildcache index files is up to date. If the same mirrors are configured as the last time this was called and none of the remote buildcache indices have changed, calling this method will only result in fetching the index hash from each mirror to confirm it is the same as what is stored locally. Otherwise, the buildcache
index.json
andindex.json.hash
files are retrieved from each configured mirror and stored locally (both in memory and on disk under_index_cache_root
).
- class spack.binary_distribution.BinaryCacheQuery(all_architectures)[source]
Bases:
object
Callable object to query if a spec is in a binary cache
- class spack.binary_distribution.BuildCacheDatabase(root)[source]
Bases:
Database
A database for binary buildcaches.
A database supports writing buildcache index files, in which case certain fields are not needed in each install record, and no locking is required. To use this feature, it provides
lock_cfg=NO_LOCK
, and override the list ofrecord_fields
.
- class spack.binary_distribution.BuildcacheFiles(spec: Spec, local: str, remote: str)[source]
Bases:
object
- exception spack.binary_distribution.BuildcacheIndexError(message, long_message=None)[source]
Bases:
SpackError
Raised when a buildcache cannot be read for any reason
- spack.binary_distribution.CURRENT_BUILD_CACHE_LAYOUT_VERSION = 2
The build cache layout version that this version of Spack creates. Version 2: includes parent directories of the package prefix in the tarball
- exception spack.binary_distribution.CannotListKeys(message, long_message=None)[source]
Bases:
GenerateIndexError
Raised when unable to list keys when generating key index
- class spack.binary_distribution.DefaultIndexFetcher(url, local_hash, urlopen=<function _urlopen.<locals>.dispatch_open>)[source]
Bases:
object
Fetcher for index.json, using separate index.json.hash as cache invalidation strategy
- conditional_fetch() FetchIndexResult [source]
- class spack.binary_distribution.EtagIndexFetcher(url, etag, urlopen=<function _urlopen.<locals>.dispatch_open>)[source]
Bases:
object
Fetcher for index.json, using ETags headers as cache invalidation strategy
- conditional_fetch() FetchIndexResult [source]
- class spack.binary_distribution.ExistsInBuildcache(signed, unsigned, tarball)[source]
Bases:
NamedTuple
- exception spack.binary_distribution.FetchCacheError(errors)[source]
Bases:
Exception
Error thrown when fetching the cache failed, usually a composite error list.
- class spack.binary_distribution.FetchIndexResult(etag, hash, data, fresh)
Bases:
tuple
- data
Alias for field number 2
- etag
Alias for field number 0
- fresh
Alias for field number 3
- hash
Alias for field number 1
- exception spack.binary_distribution.GenerateIndexError(message, long_message=None)[source]
Bases:
SpackError
Raised when unable to generate key or package index for mirror
- exception spack.binary_distribution.InvalidMetadataFile(message, long_message=None)[source]
Bases:
SpackError
- exception spack.binary_distribution.ListMirrorSpecsError(message, long_message=None)[source]
Bases:
SpackError
Raised when unable to retrieve list of specs from the mirror
- exception spack.binary_distribution.NewLayoutException(msg)[source]
Bases:
SpackError
Raised if directory layout is different from buildcache.
- exception spack.binary_distribution.NoChecksumException(path, size, contents, algorithm, expected, computed)[source]
Bases:
SpackError
Raised if file fails checksum verification.
- exception spack.binary_distribution.NoGpgException(msg)[source]
Bases:
SpackError
Raised when gpg2 is not in PATH
- exception spack.binary_distribution.NoKeyException(msg)[source]
Bases:
SpackError
Raised when gpg has no default key added.
- exception spack.binary_distribution.NoOverwriteException(file_path)[source]
Bases:
SpackError
Raised when a file would be overwritten
- exception spack.binary_distribution.NoVerifyException(message, long_message=None)[source]
Bases:
SpackError
Raised if file fails signature verification.
- class spack.binary_distribution.OCIIndexFetcher(url: str, local_hash, urlopen=None)[source]
Bases:
object
- conditional_fetch() FetchIndexResult [source]
Download an index from an OCI registry type mirror.
- class spack.binary_distribution.OCIUploader(mirror: Mirror, force: bool, update_index: bool, base_image: str | None)[source]
Bases:
Uploader
- exception spack.binary_distribution.PickKeyException(keys)[source]
Bases:
SpackError
Raised when multiple keys can be used to sign.
- exception spack.binary_distribution.PushToBuildCacheError(message, long_message=None)[source]
Bases:
SpackError
Raised when unable to push objects to binary mirror
- class spack.binary_distribution.URLUploader(mirror: Mirror, force: bool, update_index: bool, signing_key: str | None)[source]
Bases:
Uploader
- exception spack.binary_distribution.UnsignedPackageException(message, long_message=None)[source]
Bases:
SpackError
Raised if installation of unsigned package is attempted without the use of
--no-check-signature
.
- class spack.binary_distribution.Uploader(mirror: Mirror, force: bool, update_index: bool)[source]
Bases:
object
- spack.binary_distribution.binary_index_location()[source]
Set up a BinaryCacheIndex for remote buildcache dbs in the user’s homedir.
- spack.binary_distribution.buildinfo_file_name(prefix)[source]
Filename of the binary package meta-data file
- spack.binary_distribution.check_specs_against_mirrors(mirrors, specs, output_file=None)[source]
Check all the given specs against buildcaches on the given mirrors and determine if any of the specs need to be rebuilt. Specs need to be rebuilt when their hash doesn’t exist in the mirror.
- Parameters:
Returns: 1 if any spec was out-of-date on any mirror, 0 otherwise.
- spack.binary_distribution.create_tarball(spec: Spec, tarfile_path: str) Tuple[str, str] [source]
Create a tarball of a spec and return the checksums of the compressed tarfile and the uncompressed tarfile.
- spack.binary_distribution.dedupe_hardlinks_if_necessary(root, buildinfo)[source]
Updates a buildinfo dict for old archives that did not dedupe hardlinks. De-duping hardlinks is necessary when relocating files in parallel and in-place. This means we must preserve inodes when relocating.
- spack.binary_distribution.default_index_tag = 'index.spack'
Default OCI index tag
- spack.binary_distribution.download_single_spec(concrete_spec, destination, mirror_url=None)[source]
Download the buildcache files for a single concrete spec.
- spack.binary_distribution.download_tarball(spec, unsigned: bool | None = False, mirrors_for_spec=None)[source]
Download binary tarball for given package into stage area, returning path to downloaded tarball if successful, None otherwise.
- Parameters:
spec (spack.spec.Spec) – Concrete spec
unsigned – if
True
orFalse
override the mirror signature verification defaultsmirrors_for_spec (list) – Optional list of concrete specs and mirrors obtained by calling binary_distribution.get_mirrors_for_spec(). These will be checked in order first before looking in other configured mirrors.
- Returns:
None
if the tarball could not be downloaded (maybe also verified, depending on whether new-style signed binary packages were found). Otherwise, return an object indicating the path to the downloaded tarball, the path to the downloaded specfile (in the case of new-style buildcache), and whether or not the tarball is already verified.
{ "tarball_path": "path-to-locally-saved-tarfile", "specfile_path": "none-or-path-to-locally-saved-specfile", "signature_verified": "true-if-binary-pkg-was-already-verified" }
- spack.binary_distribution.extract_buildcache_tarball(tarfile_path: str, destination: str) None [source]
- spack.binary_distribution.extract_tarball(spec, download_result, force=False, timer=<spack.util.timer.NullTimer object>)[source]
extract binary tarball for given package into install area
- spack.binary_distribution.generate_key_index(key_prefix: str, tmpdir: str) None [source]
Create the key index page.
Creates (or replaces) the “index.json” page at the location given in key_prefix. This page contains an entry for each key (.pub) under key_prefix.
- spack.binary_distribution.get_keys(install=False, trust=False, force=False, mirrors=None)[source]
Get pgp public keys available on mirror with suffix .pub
- spack.binary_distribution.get_mirrors_for_spec(spec=None, mirrors_to_check=None, index_only=False)[source]
Check if concrete spec exists on mirrors and return a list indicating the mirrors on which it can be found
- Parameters:
spec (spack.spec.Spec) – The spec to look for in binary mirrors
mirrors_to_check (dict) – Optionally override the configured mirrors with the mirrors in this dictionary.
index_only (bool) – When
index_only
is set toTrue
, only the local cache is checked, no requests are made.
- Returns:
- A list of objects, each containing a
mirror_url
andspec
key indicating all mirrors where the spec can be found.
- A list of objects, each containing a
- spack.binary_distribution.install_root_node(spec: Spec, unsigned=False, force: bool = False, sha256: str | None = None, allow_missing: bool = False) None [source]
Install the root node of a concrete spec from a buildcache.
Checking the sha256 sum of a node before installation is usually needed only for software installed during Spack’s bootstrapping (since we might not have a proper signature verification mechanism available).
- Parameters:
spec – spec to be installed (note that only the root node will be installed)
unsigned – if True allows installing unsigned binaries
force – force installation if the spec is already present in the local store
sha256 – optional sha256 of the binary package, to be checked before installation
allow_missing – when true, allows installing a node with missing dependencies
- spack.binary_distribution.install_single_spec(spec, unsigned=False, force=False)[source]
Install a single concrete spec from a buildcache.
- Parameters:
spec (spack.spec.Spec) – spec to be installed
unsigned (bool) – if True allows installing unsigned binaries
force (bool) – force installation if the spec is already present in the local store
- spack.binary_distribution.make_uploader(mirror: Mirror, force: bool = False, update_index: bool = False, signing_key: str | None = None, base_image: str | None = None) Uploader [source]
Builder for the appropriate uploader based on the mirror type
- spack.binary_distribution.relocate_package(spec: Spec) None [source]
Relocate binaries and text files in the given spec prefix, based on its buildinfo file.
- spack.binary_distribution.sign_specfile(key: str, specfile_path: str) str [source]
sign and return the path to the signed specfile
- spack.binary_distribution.specs_to_relocate(spec: Spec) List[Spec] [source]
Return the set of specs that may be referenced in the install prefix of the provided spec. We currently include non-external transitive link and direct run dependencies.
- spack.binary_distribution.tarball_directory_name(spec)[source]
Return name of the tarball directory according to the convention <os>-<architecture>/<compiler>/<package>-<version>/
- spack.binary_distribution.tarball_name(spec, ext)[source]
Return the name of the tarfile according to the convention <os>-<architecture>-<package>-<dag_hash><ext>
- spack.binary_distribution.tarball_path_name(spec, ext)[source]
Return the full path+name for a given spec according to the convention <tarball_directory_name>/<tarball_name>
- spack.binary_distribution.tarfile_of_spec_prefix(tar: TarFile, prefix: str, prefixes_to_relocate: List[str]) dict [source]
Create a tarfile of an install prefix of a spec. Skips existing buildinfo file.
- Parameters:
tar – tarfile object to add files to
prefix – absolute install prefix of spec
- spack.binary_distribution.try_direct_fetch(spec, mirrors=None)[source]
Try to find the spec directly on the configured mirrors
- spack.binary_distribution.try_fetch(url_to_fetch)[source]
Utility function to try and fetch a file from a url, stage it locally, and return the path to the staged file.
- Parameters:
url_to_fetch (str) – Url pointing to remote resource to fetch
- Returns:
Path to locally staged resource or
None
if it could not be fetched.
- spack.binary_distribution.try_verify(specfile_path)[source]
Utility function to attempt to verify a local file. Assumes the file is a clearsigned signature file.
- Parameters:
specfile_path (str) – Path to file to be verified.
- Returns:
True
if the signature could be verified,False
otherwise.
- spack.binary_distribution.update_cache_and_get_specs()[source]
Get all concrete specs for build caches available on configured mirrors. Initialization of internal cache data structures is done as lazily as possible, so this method will also attempt to initialize and update the local index cache (essentially a no-op if it has been done already and nothing has changed on the configured mirrors.)
- Throws:
FetchCacheError
spack.build_environment module
This module contains all routines related to setting up the package build environment. All of this is set up by package.py just before install() is called.
There are two parts to the build environment:
Python build environment (i.e. install() method)
This is how things are set up when install() is called. Spack takes advantage of each package being in its own module by adding a bunch of command-like functions (like configure(), make(), etc.) in the package’s module scope. Ths allows package writers to call them all directly in Package.install() without writing ‘self.’ everywhere. No, this isn’t Pythonic. Yes, it makes the code more readable and more like the shell script from which someone is likely porting.
Build execution environment
This is the set of environment variables, like PATH, CC, CXX, etc. that control the build. There are also a number of environment variables used to pass information (like RPATHs and other information about dependencies) to Spack’s compiler wrappers. All of these env vars are also set up here.
Skimming this module is a nice way to get acquainted with the types of calls you can make from within the install() function.
- exception spack.build_environment.ChildError(msg, module, classname, traceback_string, log_name, log_type, context)[source]
Bases:
InstallError
- Special exception class for wrapping exceptions from child processes
in Spack’s build environment.
The main features of a ChildError are:
They’re serializable, so when a child build fails, we can send one of these to the parent and let the parent report what happened.
They have a
traceback
field containing a traceback generated on the child immediately after failure. Spack will print this on failure in lieu of trying to run sys.excepthook on the parent process, so users will see the correct stack trace from a child.They also contain context, which shows context in the Package implementation where the error happened. This helps people debug Python code in their packages. To get it, Spack searches the stack trace for the deepest frame where
self
is in scope and is an instance of PackageBase. This will generally find a useful spot in thepackage.py
file.
The long_message of a ChildError displays one of two things:
If the original error was a ProcessError, indicating a command died during the build, we’ll show context from the build log.
If the original error was any other type of error, we’ll show context from the Python code.
SpackError handles displaying the special traceback if we’re in debug mode with spack -d.
- build_errors = [('spack.util.executable', 'ProcessError')]
- property long_message
- class spack.build_environment.DeprecatedExecutable(pkg: str, exe: str, exe_pkg: str)[source]
Bases:
object
- class spack.build_environment.EnvironmentVisitor(*roots: Spec, context: Context)[source]
Bases:
object
- class spack.build_environment.FilterDefaultDynamicLinkerSearchPaths(dynamic_linker: str | None)[source]
Bases:
object
Remove rpaths to directories that are default search paths of the dynamic linker.
- class spack.build_environment.MakeExecutable(name: str, *, jobs: int, supports_jobserver: bool = True)[source]
Bases:
Executable
Special callable executable object for make so the user can specify parallelism options on a per-invocation basis.
- class spack.build_environment.ModuleChangePropagator(package: PackageBase)[source]
Bases:
object
Wrapper class to accept changes to a package.py Python module, and propagate them in the MRO of the package.
It is mainly used as a substitute of the
package.py
module, when calling the “setup_dependent_package” function during build environment setup.
- class spack.build_environment.SetupContext(*specs: Spec, context: Context)[source]
Bases:
object
This class encapsulates the logic to determine environment modifications, and is used as well to set globals in modules of package.py.
- get_env_modifications() EnvironmentModifications [source]
Returns the environment variable modifications for the given input specs and context. Environment modifications include: - Updating PATH for packages that are required at runtime - Updating CMAKE_PREFIX_PATH and PKG_CONFIG_PATH so that their respective tools can find Spack-built dependencies (when context=build) - Running custom package environment modifications: setup_run_environment, setup_dependent_run_environment, setup_build_environment, setup_dependent_build_environment.
The (partial) order imposed on the specs is externals first, then topological from leaf to root. That way externals cannot contribute search paths that would shadow Spack’s prefixes, and dependents override variables set by dependencies.
- exception spack.build_environment.UndeclaredDependencyError(message, long_message=None)[source]
Bases:
SpackError
Raised if a dependency is invoking an executable through a module global, without declaring a dependency on it.
- class spack.build_environment.UseMode(value)[source]
Bases:
Flag
- ADDED = 32
Flag is set when the (node, mode) is finalized
- BUILDTIME = 16
A spec that should be visible in search paths in a build env.
- BUILDTIME_DIRECT = 8
A spec that’s a direct build or test dep
- ROOT = 1
Entrypoint spec (a spec to be built; an env root, etc)
- RUNTIME = 2
A spec used at runtime, but no executables in PATH
- RUNTIME_EXECUTABLE = 4
A spec used at runtime, with executables in PATH
- spack.build_environment.effective_deptypes(*specs: Spec, context: Context = Context.BUILD) List[Tuple[Spec, UseMode]] [source]
Given a list of input specs and a context, return a list of tuples of all specs that contribute to (environment) modifications, together with a flag specifying in what way they do so. The list is ordered topologically from root to leaf, meaning that environment modifications should be applied in reverse so that dependents override dependencies, not the other way around.
- spack.build_environment.get_effective_jobs(jobs, parallel=True, supports_jobserver=False)[source]
Return the number of jobs, or None if supports_jobserver and a jobserver is detected.
- spack.build_environment.get_package_context(traceback, context=3)[source]
Return some context for an error message when the build fails.
- Parameters:
traceback – A traceback from some exception raised during install
context (int) – Lines of context to show before and after the line where the error happened
This function inspects the stack to find where we failed in the package file, and it adds detailed context to the long_message from there.
- spack.build_environment.get_rpath_deps(pkg: PackageBase) List[Spec] [source]
Return immediate or transitive dependencies (depending on the package) that need to be rpath’ed. If a package occurs multiple times, the newest version is kept.
- spack.build_environment.jobserver_enabled()[source]
Returns true if a posix jobserver (make) is detected.
- spack.build_environment.load_external_modules(context: SetupContext) None [source]
Traverse a package’s spec DAG and load any external modules.
Traverse a package’s dependencies and load any external modules associated with them.
- Parameters:
context – A populated SetupContext object
- spack.build_environment.set_package_py_globals(pkg, context: Context = Context.BUILD)[source]
Populate the Python module of a package with some useful global names. This makes things easier for package writers.
- spack.build_environment.set_wrapper_variables(pkg, env)[source]
Set environment variables used by the Spack compiler wrapper (which have the prefix SPACK_) and also add the compiler wrappers to PATH.
This determines the injected -L/-I/-rpath options; each of these specifies a search order and this function computes these options in a manner that is intended to match the DAG traversal order in SetupContext. TODO: this is not the case yet, we’re using post order, SetupContext is using topo order.
- spack.build_environment.setup_package(pkg, dirty, context: Context = Context.BUILD)[source]
Execute all environment setup routines.
- spack.build_environment.start_build_process(pkg, function, kwargs)[source]
Create a child process to do part of a spack build.
- Parameters:
pkg (spack.package_base.PackageBase) – package whose environment we should set up the child process for.
function (Callable) – argless function to run in the child process.
Usage:
def child_fun(): # do stuff build_env.start_build_process(pkg, child_fun)
The child process is run with the build environment set up by spack.build_environment. This allows package authors to have full control over the environment, etc. without affecting other builds that might be executed in the same spack call.
If something goes wrong, the child process catches the error and passes it to the parent wrapped in a ChildError. The parent is expected to handle (or re-raise) the ChildError.
spack.builder module
- spack.builder.BUILDER_CLS: Dict[str, Type[Builder]] = {'cmake': <class 'spack.build_systems.cmake.CMakeBuilder'>, 'meson': <class 'spack.build_systems.meson.MesonBuilder'>, 'python_pip': <class 'spack.build_systems.python.PythonPipBuilder'>}
Builder classes, as registered by the “builder” decorator
- class spack.builder.BaseBuilder(pkg: PackageBase)[source]
Bases:
object
An interface for builders, without any phases defined. This class is exposed in the package API, so that packagers can create a single class to define
setup_build_environment
and@run_before
and@run_after
callbacks that can be shared among different builders.Example:
class AnyBuilder(BaseBuilder): @run_after("install") def fixup_install(self): # do something after the package is installed pass def setup_build_environment(self, env): env.set("MY_ENV_VAR", "my_value") class CMakeBuilder(cmake.CMakeBuilder, AnyBuilder): pass class AutotoolsBuilder(autotools.AutotoolsBuilder, AnyBuilder): pass
- property prefix
- run_after_callbacks = []
- run_before_callbacks = []
- setup_build_environment(env: EnvironmentModifications) None [source]
Sets up the build environment for a package.
This method will be called before the current package prefix exists in Spack’s store.
- Parameters:
env – environment modifications to be applied when the package is built. Package authors can call methods on it to alter the build environment.
- setup_dependent_build_environment(env: EnvironmentModifications, dependent_spec: Spec) None [source]
Sets up the build environment of a package that depends on this one.
This is similar to
setup_build_environment
, but it is used to modify the build environment of a package that depends on this one.This gives packages the ability to set environment variables for the build of the dependent, which can be useful to provide search hints for headers or libraries if they are not in standard locations.
This method will be called before the dependent package prefix exists in Spack’s store.
- Parameters:
env – environment modifications to be applied when the dependent package is built. Package authors can call methods on it to alter the build environment.
dependent_spec – the spec of the dependent package about to be built. This allows the extendee (self) to query the dependent’s state. Note that this package’s spec is available as
self.spec
- property stage
- class spack.builder.Builder(pkg: PackageBase)[source]
Bases:
BaseBuilder
,Sequence
A builder is a class that, given a package object (i.e. associated with concrete spec), knows how to install it.
The builder behaves like a sequence, and when iterated over return the “phases” of the installation in the correct order.
- run_after_callbacks = []
- run_before_callbacks = []
- class spack.builder.BuilderMeta(name, bases, attr_dict)[source]
Bases:
PhaseCallbacksMeta
,MultiMethodMeta
,ABCMeta
- class spack.builder.InstallationPhase(name, builder)[source]
Bases:
object
Manages a single phase of the installation.
This descriptor stores at creation time the name of the method it should search for execution. The method is retrieved at __get__ time, so that it can be overridden by subclasses of whatever class declared the phases.
It also provides hooks to execute arbitrary callbacks before and after the phase.
- spack.builder.builder(build_system_name: str)[source]
Class decorator used to register the default builder for a given build-system.
- Parameters:
build_system_name – name of the build-system
- spack.builder.buildsystem_name(pkg: PackageBase) str [source]
Given a package object with an associated concrete spec, return the name of its build system.
- spack.builder.create(pkg: PackageBase) Builder [source]
Given a package object with an associated concrete spec, return the builder object that can install it.
spack.caches module
Caches used by Spack to store data
- spack.caches.FETCH_CACHE: FsCache = <spack.fetch_strategy.FsCache object>
Spack’s local cache for downloaded source archives
- spack.caches.MISC_CACHE: FileCache = <spack.util.file_cache.FileCache object>
Spack’s cache for small data
spack.compiler module
- class spack.compiler.Compiler(cspec, operating_system, target, paths, modules: List[str] | None = None, alias=None, environment=None, extra_rpaths=None, enable_implicit_rpaths=None, **kwargs)[source]
Bases:
object
This class encapsulates a Spack “compiler”, which includes C, C++, and Fortran compilers. Subclasses should implement support for specific compilers, their possible names, arguments, and how to identify the particular type of compiler.
- property c11_flag
- property c99_flag
- property cc_pic_flag
Returns the flag used by the C compiler to produce Position Independent Code (PIC).
- property cc_rpath_arg
- property compiler_verbose_output: str | None
Verbose output from compiling a dummy C source file. Output is cached.
- property cxx11_flag
- property cxx14_flag
- property cxx17_flag
- property cxx98_flag
- property cxx_pic_flag
Returns the flag used by the C++ compiler to produce Position Independent Code (PIC).
- property cxx_rpath_arg
- property debug_flags
- property default_dynamic_linker: str | None
Determine default dynamic linker from compiler link line
- classmethod default_version(cc)[source]
Override just this to override all compiler version functions.
- property disable_new_dtags
- property enable_new_dtags
- classmethod extract_version_from_output(output: str) str [source]
Extracts the version from compiler’s output.
- property f77_pic_flag
Returns the flag used by the F77 compiler to produce Position Independent Code (PIC).
- property f77_rpath_arg
- property fc_pic_flag
Returns the flag used by the FC compiler to produce Position Independent Code (PIC).
- property fc_rpath_arg
- get_real_version() str [source]
Query the compiler for its version.
This is the “real” compiler version, regardless of what is in the compilers.yaml file, which the user can change to name their compiler.
Use the runtime environment of the compiler (modules and environment modifications) to enable the compiler to run properly on any platform.
- ignore_version_errors: Sequence[int] = ()
Return values to ignore when invoking the compiler to get its version
- is_supported_on_platform()
Platform matcher for Platform objects supported by compiler
- property linker_arg
Flag that need to be used to pass an argument to the linker.
- property openmp_flag
- property opt_flags
- property prefix
Query the compiler for its install prefix. This is the install path as reported by the compiler. Note that paths for cc, cxx, etc are not enough to find the install prefix of the compiler, since the can be symlinks, wrappers, or filenames instead of absolute paths.
- property real_version
Executable reported compiler version used for API-determinations
E.g. C++11 flag checks.
- property required_libs
For executables created with this compiler, the compiler libraries that would be generally required to run it.
- setup_custom_environment(pkg, env)[source]
Set any environment variables necessary to use the compiler.
- suffixes = ['-.*']
- property verbose_flag: str | None
This property should be overridden in the compiler subclass if a verbose flag is available.
If it is not overridden, it is assumed to not be supported.
- verify_executables()[source]
Raise an error if any of the compiler executables is not valid.
This method confirms that for all of the compilers (cc, cxx, f77, fc) that have paths, those paths exist and are executable by the current user. Raises a CompilerAccessError if any of the non-null paths for the compiler are not accessible.
- property version
- version_argument = '-dumpversion'
Compiler argument that produces version information
- version_regex = '(.*)'
Regex used to extract version from compiler’s output
spack.concretize module
High-level functions to concretize list of specs
Bases:
SpackError
Raised when there is no available compiler that satisfies a compiler spec.
- spack.concretize.concretize_one(spec: str | Spec, tests: bool | Iterable[str] = False) Spec [source]
Return a concretized copy of the given spec.
- Parameters:
tests – if False disregard ‘test’ dependencies, if a list of names activate them for the packages in the list, if True activate ‘test’ dependencies for all packages.
- spack.concretize.concretize_separately(spec_list: Sequence[Tuple[Spec, Spec | None]], tests: bool | Iterable[str] = False) List[Tuple[Spec, Spec]] [source]
Concretizes the input specs separately from each other.
- Parameters:
spec_list – list of tuples to concretize. First entry is abstract spec, second entry is already concrete spec or None if not yet concretized
tests – list of package names for which to consider tests dependencies. If True, all nodes will have test dependencies. If False, test dependencies will be disregarded.
- spack.concretize.concretize_together(spec_list: Sequence[Tuple[Spec, Spec | None]], tests: bool | Iterable[str] = False) List[Tuple[Spec, Spec]] [source]
Given a number of specs as input, tries to concretize them together.
- Parameters:
spec_list – list of tuples to concretize. First entry is abstract spec, second entry is already concrete spec or None if not yet concretized
tests – list of package names for which to consider tests dependencies. If True, all nodes will have test dependencies. If False, test dependencies will be disregarded.
- spack.concretize.concretize_together_when_possible(spec_list: Sequence[Tuple[Spec, Spec | None]], tests: bool | Iterable[str] = False) List[Tuple[Spec, Spec]] [source]
Given a number of specs as input, tries to concretize them together to the extent possible.
See documentation for
unify: when_possible
concretization for the precise definition of “to the extent possible”.- Parameters:
spec_list – list of tuples to concretize. First entry is abstract spec, second entry is already concrete spec or None if not yet concretized
tests – list of package names for which to consider tests dependencies. If True, all nodes will have test dependencies. If False, test dependencies will be disregarded.
spack.config module
This module implements Spack’s configuration file handling.
This implements Spack’s configuration system, which handles merging multiple scopes with different levels of precedence. See the documentation on Configuration Scopes for details on how Spack’s configuration system behaves. The scopes are:
default
system
site
user
And corresponding per-platform scopes. Important functions in this module are:
get_config
reads in YAML data for a particular scope and returns
it. Callers can then modify the data and write it back with
update_config
.
When read in, Spack validates configurations with jsonschemas. The
schemas are in submodules of spack.schema
.
- spack.config.CONFIG: Configuration = <spack.config.Configuration object>
This is the singleton configuration instance for Spack.
- spack.config.CONFIGURATION_DEFAULTS_PATH = ('defaults', '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/etc/spack/defaults')
Path to the default configuration
- spack.config.CONFIG_DEFAULTS = {'config': {'build_jobs': 2, 'build_stage': '$tempdir/spack-stage', 'checksum': True, 'connect_timeout': 10, 'debug': False, 'dirty': False, 'license_dir': '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/etc/spack/licenses', 'verify_ssl': True}}
Hard-coded default values for some key configuration options. This ensures that Spack will still work even if config.yaml in the defaults scope is removed.
- exception spack.config.ConfigFileError(message, long_message=None)[source]
Bases:
ConfigError
Issue reading or accessing a configuration file.
- exception spack.config.ConfigFormatError(validation_error, data: Dict[str, Any], filename: str | None = None, line: int | None = None)[source]
Bases:
ConfigError
Raised when a configuration format does not match its schema.
- class spack.config.ConfigPath[source]
Bases:
object
- element = '(?:(?:(?:"[^"]+")|(?:\'[^\']+\'))|(?:[^:\'"]+))'
- next_key_pattern = '((?:(?:(?:"[^"]+")|(?:\'[^\']+\'))|(?:[^:\'"]+))[+-]?)(?:\\:|$)'
- quoted_string = '(?:"[^"]+")|(?:\'[^\']+\')'
- unquoted_string = '[^:\'"]+'
- class spack.config.ConfigScope(name: str)[source]
Bases:
object
- property included_scopes: List[ConfigScope]
Memoized list of included scopes, in the order they appear in this scope.
- exception spack.config.ConfigSectionError(message, long_message=None)[source]
Bases:
ConfigError
Error for referring to a bad config section name in a configuration.
- class spack.config.Configuration[source]
Bases:
object
A hierarchical configuration, merging a number of scopes at different priorities.
- clear_caches() None [source]
Clears the caches for configuration files,
This will cause files to be re-read upon the next request.
- ensure_unwrapped() Configuration [source]
Ensure we unwrap this object from any dynamic wrapper (like Singleton)
- get(path: str, default: Any | None = None, scope: str | None = None) Any [source]
Get a config section or a single value from one.
Accepts a path syntax that allows us to grab nested config map entries. Getting the ‘config’ section would look like:
spack.config.get('config')
and the
dirty
section in theconfig
scope would be:spack.config.get('config:dirty')
We use
:
as the separator, like YAML objects.
- get_config(section: str, scope: str | None = None) Dict[str, Any] [source]
Get configuration settings for a section.
If
scope
isNone
or not provided, return the merged contents of all of Spack’s configuration scopes. Ifscope
is provided, return only the configuration as specified in that scope.This off the top-level name from the YAML section. That is, for a YAML config file that looks like this:
config: install_tree: root: $spack/opt/spack build_stage: - $tmpdir/$user/spack-stage
get_config('config')
will return:{ 'install_tree': { 'root': '$spack/opt/spack', } 'build_stage': ['$tmpdir/$user/spack-stage'] }
- get_config_filename(scope: str, section: str) str [source]
For some scope and section, get the name of the configuration file.
- highest() ConfigScope [source]
Scope with the highest precedence
- highest_precedence_non_platform_scope() ConfigScope [source]
Writable non-platform scope with the highest precedence
- highest_precedence_scope() ConfigScope [source]
Writable scope with the highest precedence.
- matching_scopes(reg_expr) List[ConfigScope] [source]
List of all scopes whose names match the provided regular expression.
For example, matching_scopes(r’^command’) will return all scopes whose names begin with command.
- print_section(section: str, blame: bool = False, *, scope=None) None [source]
Print a configuration to stdout.
- push_scope(scope: ConfigScope, priority: int | None = None, _depth: int = 0) None [source]
Adds a scope to the Configuration, at a given priority.
If a priority is not given, it is assumed to be the current highest priority.
- Parameters:
scope – scope to be added
priority – priority of the scope
- remove_scope(scope_name: str) ConfigScope | None [source]
Removes a scope by name, and returns it. If the scope does not exist, returns None.
- scopes: PriorityOrderedMapping[str, ConfigScope]
- set(path: str, value: Any, scope: str | None = None) None [source]
Convenience function for setting single values in config files.
Accepts the path syntax described in
get()
.
- update_config(section: str, update_data: Dict, scope: str | None = None, force: bool = False) None [source]
Update the configuration file for a particular scope.
Overwrites contents of a section in a scope with update_data, then writes out the config file.
update_data should have the top-level section name stripped off (it will be re-added). Data itself can be a list, dict, or any other yaml-ish structure.
Configuration scopes that are still written in an old schema format will fail to update unless
force
is True.- Parameters:
section – section of the configuration to be updated
update_data – data to be used for the update
scope – scope to be updated
force – force the update
- property writable_scopes: Generator[ConfigScope, None, None]
Generator of writable scopes with an associated file.
- class spack.config.DirectoryConfigScope(name: str, path: str, *, writable: bool = True)[source]
Bases:
ConfigScope
Config scope backed by a directory containing one file per section.
- get_section(section: str) Dict[str, Any] | None [source]
Returns the data associated with a given section
- spack.config.INCLUDE_SCOPE_PREFIX = 'include'
prefix for name of included configuration scopes
- class spack.config.IncludePath(path, when, sha256, optional)[source]
Bases:
NamedTuple
- class spack.config.InternalConfigScope(name: str, data: Dict[str, Any] | None = None)[source]
Bases:
ConfigScope
An internal configuration scope that is not persisted to a file.
This is for spack internal use so that command-line options and config file settings are accessed the same way, and Spack can easily override settings from files.
- spack.config.MAX_RECURSIVE_INCLUDES = 100
safeguard for recursive includes – maximum include depth
- exception spack.config.RecursiveIncludeError(message, long_message=None)[source]
Bases:
SpackError
Too many levels of recursive includes.
- spack.config.SCOPES_METAVAR = '{defaults,system,site,user,command_line}[/PLATFORM] or env:ENVIRONMENT'
metavar to use for commands that accept scopes this is shorter and more readable than listing all choices
- spack.config.SECTION_SCHEMAS: Dict[str, Any] = {'bootstrap': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'bootstrap': {'properties': {'enable': {'type': 'boolean'}, 'root': {'type': 'string'}, 'sources': {'items': {'additionalProperties': False, 'properties': {'metadata': {'type': 'string'}, 'name': {'type': 'string'}}, 'required': ['name', 'metadata'], 'type': 'object'}, 'type': 'array'}, 'trusted': {'patternProperties': {'\\w[\\w-]*': {'type': 'boolean'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack bootstrap configuration file schema', 'type': 'object'}, 'cdash': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'cdash': {'additionalProperties': False, 'patternProperties': {'build-group': {'type': 'string'}, 'project': {'type': 'string'}, 'site': {'type': 'string'}, 'url': {'type': 'string'}}, 'required': ['build-group'], 'type': 'object'}}, 'title': 'Spack cdash configuration file schema', 'type': 'object'}, 'ci': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'ci': {'broken-specs-url': {'type': 'string'}, 'broken-tests-packages': {'items': {'type': 'string'}, 'type': 'array'}, 'pipeline-gen': {'items': {'oneOf': [{'additionalProperties': False, 'properties': {'match_behavior': {'default': 'first', 'enum': ['first', 'merge'], 'type': 'string'}, 'submapping': {'items': {'additionalProperties': False, 'properties': {'build-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'build-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'match': {'items': {'type': 'string'}, 'type': 'array'}}, 'required': ['match'], 'type': 'object'}, 'type': 'array'}}, 'required': ['submapping'], 'type': 'object'}, {'additionalProperties': False, 'properties': {'dynamic-mapping': {'properties': {'allow': {'items': {'type': 'string'}, 'type': 'array'}, 'endpoint': {'type': 'string'}, 'header': {'additionalProperties': False, 'type': 'object'}, 'ignore': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}, 'require': {'items': {'type': 'string'}, 'type': 'array'}, 'timeout': {'minimum': 0, 'type': 'integer'}, 'verify_ssl': {'default': False, 'type': 'boolean'}}, 'required': ['endpoint'], 'type': 'object'}}, 'required': ['dynamic-mapping'], 'type': 'object'}, {'additionalProperties': False, 'properties': {'any-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'any-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'build-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'build-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'cleanup-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'cleanup-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'copy-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'copy-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'noop-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'noop-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'reindex-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'reindex-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}, {'additionalProperties': False, 'properties': {'signing-job': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}, 'signing-job-remove': {'additionalProperties': True, 'properties': {'after_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'before_script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'image': {'oneOf': [{'type': 'string'}, {'properties': {'entrypoint': {'items': {'type': 'string'}, 'type': 'array'}, 'name': {'type': 'string'}}, 'type': 'object'}]}, 'script': {'items': {'anyOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'type': 'array'}, 'tags': {'items': {'type': 'string'}, 'type': 'array'}, 'variables': {'patternProperties': {'[\\w\\d\\-_\\.]+': {'type': ['string', 'number']}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}]}, 'type': 'array'}, 'rebuild-index': {'type': 'boolean'}, 'target': {'default': 'gitlab', 'enum': ['gitlab'], 'type': 'string'}}}, 'title': 'Spack CI configuration file schema', 'type': 'object'}, 'compilers': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'compilers': {'items': {'additionalProperties': False, 'properties': {'compiler': {'additionalProperties': False, 'properties': {'alias': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'extra_rpaths': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'flags': {'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'type': 'object'}, 'implicit_rpaths': {'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'boolean'}]}, 'modules': {'anyOf': [{'type': 'null'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'operating_system': {'type': 'string'}, 'paths': {'additionalProperties': False, 'properties': {'cc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxx': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'f77': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fc': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'required': ['cc', 'cxx', 'f77', 'fc'], 'type': 'object'}, 'spec': {'type': 'string'}, 'target': {'type': 'string'}}, 'required': ['paths', 'spec', 'modules', 'operating_system'], 'type': 'object'}}, 'type': 'object'}, 'type': 'array'}}, 'title': 'Spack compiler configuration file schema', 'type': 'object'}, 'concretizer': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'concretizer': {'additionalProperties': False, 'properties': {'duplicates': {'properties': {'max_dupes': {'additional_properties': {'minimum': 1, 'type': 'integer'}, 'type': 'object'}, 'strategy': {'enum': ['none', 'minimal', 'full'], 'type': 'string'}}, 'type': 'object'}, 'enable_node_namespace': {'type': 'boolean'}, 'error_on_timeout': {'type': 'boolean'}, 'os_compatible': {'additionalProperties': {'type': 'array'}, 'type': 'object'}, 'reuse': {'oneOf': [{'type': 'boolean'}, {'enum': ['dependencies'], 'type': 'string'}, {'properties': {'exclude': {'items': {'type': 'string'}, 'type': 'array'}, 'from': {'items': {'properties': {'exclude': {'items': {'type': 'string'}, 'type': 'array'}, 'include': {'items': {'type': 'string'}, 'type': 'array'}, 'path': {'type': 'string'}, 'type': {'enum': ['local', 'buildcache', 'external', 'environment'], 'type': 'string'}}, 'type': 'object'}, 'type': 'array'}, 'include': {'items': {'type': 'string'}, 'type': 'array'}, 'roots': {'type': 'boolean'}}, 'type': 'object'}]}, 'splice': {'additionalProperties': False, 'properties': {'automatic': {'type': 'boolean'}, 'explicit': {'default': [], 'items': {'additionalProperties': False, 'properties': {'replacement': {'type': 'string'}, 'target': {'type': 'string'}, 'transitive': {'default': False, 'type': 'boolean'}}, 'required': ['target', 'replacement'], 'type': 'object'}, 'type': 'array'}}, 'type': 'object'}, 'static_analysis': {'type': 'boolean'}, 'targets': {'properties': {'granularity': {'enum': ['generic', 'microarchitectures'], 'type': 'string'}, 'host_compatible': {'type': 'boolean'}}, 'type': 'object'}, 'timeout': {'minimum': 0, 'type': 'integer'}, 'unify': {'oneOf': [{'type': 'boolean'}, {'enum': ['when_possible'], 'type': 'string'}]}}, 'type': 'object'}}, 'title': 'Spack concretizer configuration file schema', 'type': 'object'}, 'config': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'config': {'default': {}, 'deprecatedProperties': [{'error': False, 'message': 'Spack supports only clingo as a concretizer from v0.23. The config:concretizer config option is ignored.', 'names': ['concretizer']}, {'error': False, 'message': 'The config:install_missing_compilers option has been deprecated in Spack v0.23, and is currently ignored. It will be removed from config in Spack v1.0.', 'names': ['install_missing_compilers']}, {'error': False, 'message': 'The config:install_path_scheme option was deprecated in Spack v0.16 in favor of config:install_tree:projections:all. It will be removed in Spack v1.0.', 'names': ['install_path_scheme']}], 'properties': {'additional_external_search_paths': {'items': {'type': 'string'}, 'type': 'array'}, 'aliases': {'patternProperties': {'\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'allow_sgid': {'type': 'boolean'}, 'binary_index_root': {'type': 'string'}, 'binary_index_ttl': {'minimum': 0, 'type': 'integer'}, 'build_jobs': {'minimum': 1, 'type': 'integer'}, 'build_language': {'type': 'string'}, 'build_stage': {'oneOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'ccache': {'type': 'boolean'}, 'checksum': {'type': 'boolean'}, 'concretization_cache': {'properties': {'enable': {'type': 'boolean'}, 'entry_limit': {'minimum': 0, 'type': 'integer'}, 'size_limit': {'minimum': 0, 'type': 'integer'}, 'url': {'type': 'string'}}, 'type': 'object'}, 'connect_timeout': {'minimum': 0, 'type': 'integer'}, 'db_lock_timeout': {'minimum': 1, 'type': 'integer'}, 'debug': {'type': 'boolean'}, 'deprecated': {'type': 'boolean'}, 'develop_stage_link': {'type': 'string'}, 'dirty': {'type': 'boolean'}, 'environments_root': {'type': 'string'}, 'extensions': {'items': {'type': 'string'}, 'type': 'array'}, 'flags': {'properties': {'keep_werror': {'enum': ['all', 'specific', 'none'], 'type': 'string'}}, 'type': 'object'}, 'install_hash_length': {'minimum': 1, 'type': 'integer'}, 'install_path_scheme': {'type': 'string'}, 'install_status': {'type': 'boolean'}, 'install_tree': {'anyOf': [{'properties': {'padded_length': {'oneOf': [{'minimum': 0, 'type': 'integer'}, {'type': 'boolean'}]}, 'projections': {'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'root': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'license_dir': {'type': 'string'}, 'locks': {'type': 'boolean'}, 'misc_cache': {'type': 'string'}, 'package_lock_timeout': {'anyOf': [{'minimum': 1, 'type': 'integer'}, {'type': 'null'}]}, 'shared_linking': {'anyOf': [{'enum': ['rpath', 'runpath'], 'type': 'string'}, {'properties': {'bind': {'type': 'boolean'}, 'missing_library_policy': {'enum': ['error', 'warn', 'ignore']}, 'type': {'enum': ['rpath', 'runpath'], 'type': 'string'}}, 'type': 'object'}]}, 'source_cache': {'type': 'string'}, 'ssl_certs': {'type': 'string'}, 'stage_name': {'type': 'string'}, 'suppress_gpg_warnings': {'type': 'boolean'}, 'template_dirs': {'items': {'type': 'string'}, 'type': 'array'}, 'test_stage': {'type': 'string'}, 'url_fetch_method': {'enum': ['urllib', 'curl'], 'type': 'string'}, 'verify_ssl': {'type': 'boolean'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}, 'definitions': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'definitions': {'default': [], 'items': {'additionalProperties': {'default': [], 'items': {'anyOf': [{'additionalProperties': False, 'properties': {'exclude': {'items': {'type': 'string'}, 'type': 'array'}, 'matrix': {'items': {'items': {'type': 'string'}, 'type': 'array'}, 'type': 'array'}}, 'type': 'object'}, {'type': 'string'}, {'type': 'null'}]}, 'type': 'array'}, 'properties': {'when': {'type': 'string'}}, 'type': 'object'}, 'type': 'array'}}, 'title': 'Spack definitions configuration file schema', 'type': 'object'}, 'develop': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'develop': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'properties': {'path': {'type': 'string'}, 'spec': {'type': 'string'}}, 'required': ['spec'], 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack repository configuration file schema', 'type': 'object'}, 'env_vars': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'env_vars': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}}, 'title': 'Spack env_vars configuration file schema', 'type': 'object'}, 'include': {'$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'include': {'additionalProperties': False, 'default': [], 'items': {'anyOf': [{'additionalProperties': False, 'properties': {'optional': {'type': 'boolean'}, 'path': {'type': 'string'}, 'sha256': {'type': 'string'}, 'when': {'type': 'string'}}, 'required': ['path'], 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}}, 'title': 'Spack include configuration file schema'}, 'mirrors': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'mirrors': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'additionalProperties': False, 'anyOf': [{'required': ['url']}, {'required': ['fetch']}, {'required': ['pull']}], 'deprecatedProperties': [{'error': False, 'message': 'Use of plain text `access_token` in mirror config is deprecated, use environment variables instead (access_token_variable)', 'names': ['access_token']}], 'properties': {'access_pair': {'oneOf': [{'items': {'maxItems': 2, 'minItems': 2, 'type': ['string', 'null']}, 'type': 'array'}, {'oneOf': [{'required': ['id']}, {'required': ['id_variable']}], 'properties': {'id': {'type': 'string'}, 'id_variable': {'type': 'string'}, 'secret_variable': {'type': 'string'}}, 'required': ['secret_variable'], 'type': 'object'}]}, 'access_token': {'type': ['string', 'null']}, 'access_token_variable': {'type': ['string', 'null']}, 'autopush': {'type': 'boolean'}, 'binary': {'type': 'boolean'}, 'endpoint_url': {'type': ['string', 'null']}, 'fetch': {'anyOf': [{'type': 'string'}, {'additionalProperties': False, 'deprecatedProperties': [{'error': False, 'message': 'Use of plain text `access_token` in mirror config is deprecated, use environment variables instead (access_token_variable)', 'names': ['access_token']}], 'properties': {'access_pair': {'oneOf': [{'items': {'maxItems': 2, 'minItems': 2, 'type': ['string', 'null']}, 'type': 'array'}, {'oneOf': [{'required': ['id']}, {'required': ['id_variable']}], 'properties': {'id': {'type': 'string'}, 'id_variable': {'type': 'string'}, 'secret_variable': {'type': 'string'}}, 'required': ['secret_variable'], 'type': 'object'}]}, 'access_token': {'type': ['string', 'null']}, 'access_token_variable': {'type': ['string', 'null']}, 'endpoint_url': {'type': ['string', 'null']}, 'profile': {'type': ['string', 'null']}, 'url': {'type': 'string'}}, 'type': 'object'}]}, 'profile': {'type': ['string', 'null']}, 'push': {'anyOf': [{'type': 'string'}, {'additionalProperties': False, 'deprecatedProperties': [{'error': False, 'message': 'Use of plain text `access_token` in mirror config is deprecated, use environment variables instead (access_token_variable)', 'names': ['access_token']}], 'properties': {'access_pair': {'oneOf': [{'items': {'maxItems': 2, 'minItems': 2, 'type': ['string', 'null']}, 'type': 'array'}, {'oneOf': [{'required': ['id']}, {'required': ['id_variable']}], 'properties': {'id': {'type': 'string'}, 'id_variable': {'type': 'string'}, 'secret_variable': {'type': 'string'}}, 'required': ['secret_variable'], 'type': 'object'}]}, 'access_token': {'type': ['string', 'null']}, 'access_token_variable': {'type': ['string', 'null']}, 'endpoint_url': {'type': ['string', 'null']}, 'profile': {'type': ['string', 'null']}, 'url': {'type': 'string'}}, 'type': 'object'}]}, 'signed': {'type': 'boolean'}, 'source': {'type': 'boolean'}, 'url': {'type': 'string'}}, 'type': 'object'}]}}, 'type': 'object'}}, 'title': 'Spack mirror configuration file schema', 'type': 'object'}, 'modules': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'modules': {'additionalProperties': {'additionalProperties': False, 'default': {}, 'properties': {'arch_folder': {'type': 'boolean'}, 'enable': {'default': [], 'items': {'enum': ['tcl', 'lmod'], 'type': 'string'}, 'type': 'array'}, 'lmod': {'additionalKeysAreSpecs': True, 'additionalProperties': {'additionalProperties': False, 'default': {}, 'properties': {'autoload': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'conflict': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'filter': {'additionalProperties': False, 'default': {}, 'properties': {'exclude_env_vars': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'load': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'prerequisites': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'suffixes': {'additionalKeysAreSpecs': True, 'additionalProperties': {'type': 'string'}, 'type': 'object'}, 'template': {'type': 'string'}}, 'type': 'object'}, 'default': {}, 'properties': {'all': {'additionalProperties': False, 'default': {}, 'properties': {'autoload': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'conflict': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'filter': {'additionalProperties': False, 'default': {}, 'properties': {'exclude_env_vars': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'load': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'prerequisites': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'suffixes': {'additionalKeysAreSpecs': True, 'additionalProperties': {'type': 'string'}, 'type': 'object'}, 'template': {'type': 'string'}}, 'type': 'object'}, 'core_compilers': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'core_specs': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'defaults': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'exclude': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'exclude_implicits': {'default': False, 'type': 'boolean'}, 'filter_hierarchy_specs': {'additionalKeysAreSpecs': True, 'additionalProperties': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'type': 'object'}, 'hash_length': {'default': 7, 'minimum': 0, 'type': 'integer'}, 'hide_implicits': {'default': False, 'type': 'boolean'}, 'hierarchy': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'include': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'naming_scheme': {'type': 'string'}, 'projections': {'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'verbose': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, 'prefix_inspections': {'additionalProperties': False, 'patternProperties': {'^[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'roots': {'properties': {'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}, 'tcl': {'additionalKeysAreSpecs': True, 'additionalProperties': {'additionalProperties': False, 'default': {}, 'properties': {'autoload': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'conflict': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'filter': {'additionalProperties': False, 'default': {}, 'properties': {'exclude_env_vars': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'load': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'prerequisites': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'suffixes': {'additionalKeysAreSpecs': True, 'additionalProperties': {'type': 'string'}, 'type': 'object'}, 'template': {'type': 'string'}}, 'type': 'object'}, 'default': {}, 'properties': {'all': {'additionalProperties': False, 'default': {}, 'properties': {'autoload': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'conflict': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'filter': {'additionalProperties': False, 'default': {}, 'properties': {'exclude_env_vars': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'load': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'prerequisites': {'enum': ['none', 'run', 'direct', 'all'], 'type': 'string'}, 'suffixes': {'additionalKeysAreSpecs': True, 'additionalProperties': {'type': 'string'}, 'type': 'object'}, 'template': {'type': 'string'}}, 'type': 'object'}, 'defaults': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'exclude': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'exclude_implicits': {'default': False, 'type': 'boolean'}, 'hash_length': {'default': 7, 'minimum': 0, 'type': 'integer'}, 'hide_implicits': {'default': False, 'type': 'boolean'}, 'include': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'naming_scheme': {'type': 'string'}, 'projections': {'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'verbose': {'default': False, 'type': 'boolean'}}, 'type': 'object'}, 'use_view': {'anyOf': [{'type': 'string'}, {'type': 'boolean'}]}}, 'type': 'object'}, 'properties': {'prefix_inspections': {'additionalProperties': False, 'patternProperties': {'^[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack module file configuration file schema', 'type': 'object'}, 'packages': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'packages': {'additionalProperties': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'conflict': {'items': {'oneOf': [{'additionalProperties': False, 'properties': {'message': {'type': 'string'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, 'externals': {'items': {'additionalProperties': True, 'properties': {'extra_attributes': {'additionalProperties': {'type': 'string'}, 'properties': {'compilers': {'patternProperties': {'(^\\w[\\w-]*)': {'type': 'string'}}, 'type': 'object'}, 'environment': {'additionalProperties': False, 'default': {}, 'properties': {'append_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'prepend_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'remove_path': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'set': {'patternProperties': {'\\w[\\w-]*': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}}, 'type': 'object'}, 'unset': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'extra_rpaths': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'flags': {'additionalProperties': False, 'properties': {'cflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cppflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'cxxflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldflags': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ldlibs': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'type': 'object'}, 'implicit_rpaths': {'anyOf': [{'items': {'type': 'string'}, 'type': 'array'}, {'type': 'boolean'}]}}, 'type': 'object'}, 'modules': {'items': {'type': 'string'}, 'type': 'array'}, 'prefix': {'type': 'string'}, 'spec': {'type': 'string'}}, 'required': ['spec'], 'type': 'object'}, 'type': 'array'}, 'package_attributes': {'additionalProperties': False, 'patternProperties': {'\\w+': {}}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'prefer': {'items': {'oneOf': [{'additionalProperties': False, 'properties': {'message': {'type': 'string'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, 'require': {'oneOf': [{'items': {'oneOf': [{'additionalProperties': False, 'properties': {'any_of': {'items': {'type': 'string'}, 'type': 'array'}, 'message': {'type': 'string'}, 'one_of': {'items': {'type': 'string'}, 'type': 'array'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, {'type': 'string'}]}, 'variants': {'oneOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}, 'version': {'default': [], 'items': {'anyOf': [{'type': 'string'}, {'type': 'number'}]}, 'type': 'array'}}, 'type': 'object'}, 'default': {}, 'properties': {'all': {'additionalProperties': False, 'default': {}, 'properties': {'buildable': {'default': True, 'type': 'boolean'}, 'compiler': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'conflict': {'items': {'oneOf': [{'additionalProperties': False, 'properties': {'message': {'type': 'string'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, 'package_attributes': {'additionalProperties': False, 'patternProperties': {'\\w+': {}}, 'type': 'object'}, 'permissions': {'additionalProperties': False, 'properties': {'group': {'type': 'string'}, 'read': {'enum': ['user', 'group', 'world'], 'type': 'string'}, 'write': {'enum': ['user', 'group', 'world'], 'type': 'string'}}, 'type': 'object'}, 'prefer': {'items': {'oneOf': [{'additionalProperties': False, 'properties': {'message': {'type': 'string'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, 'providers': {'additionalProperties': False, 'default': {}, 'patternProperties': {'\\w[\\w-]*': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'type': 'object'}, 'require': {'oneOf': [{'items': {'oneOf': [{'additionalProperties': False, 'properties': {'any_of': {'items': {'type': 'string'}, 'type': 'array'}, 'message': {'type': 'string'}, 'one_of': {'items': {'type': 'string'}, 'type': 'array'}, 'spec': {'type': 'string'}, 'when': {'type': 'string'}}, 'type': 'object'}, {'type': 'string'}]}, 'type': 'array'}, {'type': 'string'}]}, 'target': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}, 'variants': {'oneOf': [{'type': 'string'}, {'items': {'type': 'string'}, 'type': 'array'}]}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack package configuration file schema', 'type': 'object'}, 'repos': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'repos': {'default': [], 'items': {'type': 'string'}, 'type': 'array'}}, 'title': 'Spack repository configuration file schema', 'type': 'object'}, 'upstreams': {'$schema': 'http://json-schema.org/draft-07/schema#', 'additionalProperties': False, 'properties': {'upstreams': {'default': {}, 'patternProperties': {'\\w[\\w-]*': {'additionalProperties': False, 'default': {}, 'properties': {'install_tree': {'type': 'string'}, 'modules': {'properties': {'lmod': {'type': 'string'}, 'tcl': {'type': 'string'}}, 'type': 'object'}}, 'type': 'object'}}, 'type': 'object'}}, 'title': 'Spack core configuration file schema', 'type': 'object'}, 'view': {'$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'view': {'anyOf': [{'type': 'boolean'}, {'type': 'string'}, {'patternProperties': {'\\w+': {'additionalProperties': False, 'properties': {'exclude': {'items': {'type': 'string'}, 'type': 'array'}, 'link': {'pattern': '(roots|all|run)', 'type': 'string'}, 'link_type': {'type': 'string'}, 'projections': {'patternProperties': {'all|\\w[\\w-]*': {'type': 'string'}}, 'type': 'object'}, 'root': {'type': 'string'}, 'select': {'items': {'type': 'string'}, 'type': 'array'}}, 'required': ['root']}}, 'type': 'object'}]}}, 'title': 'Spack view configuration file schema'}}
Dict from section names -> schema for that section
- class spack.config.SingleFileScope(name: str, path: str, schema: Dict[str, Any], *, yaml_path: List[str] | None = None, writable: bool = True)[source]
Bases:
ConfigScope
This class represents a configuration scope in a single YAML file.
- spack.config.add(fullpath: str, scope: str | None = None) None [source]
Add the given configuration to the specified config scope. Add accepts a path. If you want to add from a filename, use add_from_file
- spack.config.add_from_file(filename: str, scope: str | None = None) None [source]
Add updates to a config from a filename
- spack.config.change_or_add(section_name: str, find_fn: Callable[[str], bool], update_fn: Callable[[str], None]) None [source]
Change or add a subsection of config, with additional logic to select a reasonable scope where the change is applied.
Search through config scopes starting with the highest priority: the first matching a criteria (determined by
find_fn
) is updated; if no such config exists, find the first config scope that defines any config for the named section; if no scopes define any related config, then update the highest-priority config scope.
- spack.config.config_paths_from_entry_points() List[Tuple[str, str]] [source]
Load configuration paths from entry points
A python package can register entry point metadata so that Spack can find its configuration by adding the following to the project’s pyproject.toml:
[project.entry-points."spack.config"] baz = "baz:get_spack_config_path"
The function
get_spack_config_path
returns the path to the package’s spack configuration scope
- spack.config.create() Configuration [source]
Create a configuration using create_incremental(), return the last yielded result.
- spack.config.create_from(*scopes_or_paths: ConfigScope | Tuple[int, ConfigScope] | str) Configuration [source]
Creates a configuration object from the scopes passed in input.
- Parameters:
*scopes_or_paths – either a tuple of (priority, ConfigScope), or a ConfigScope, or a string If priority is not given, it is assumed to be ConfigScopePriority.CONFIG_FILES. If a string is given, a DirectoryConfigScope is created from it.
Examples
>>> builtin_scope = InternalConfigScope("_builtin", {"config": {"build_jobs": 1}}) >>> cl_scope = InternalConfigScope("command_line", {"config": {"build_jobs": 10}}) >>> cfg = create_from( ... (ConfigScopePriority.COMMAND_LINE, cl_scope), ... (ConfigScopePriority.BUILTIN, builtin_scope) ... )
- spack.config.create_incremental() Generator[Configuration, None, None] [source]
Singleton Configuration instance.
This constructs one instance associated with this module and returns it. It is bundled inside a function so that configuration can be initialized lazily.
- spack.config.default_modify_scope(section: str = 'config') str [source]
Return the config scope that commands should modify by default.
Commands that modify configuration by default modify the highest priority scope.
- Parameters:
section (bool) – Section for which to get the default scope. If this is not ‘compilers’, a general (non-platform) scope is used.
- spack.config.determine_number_of_jobs(*, parallel: bool = False, max_cpus: int = 2, config: Configuration | None = None) int [source]
Packages that require sequential builds need 1 job. Otherwise we use the number of jobs set on the command line. If not set, then we use the config defaults (which is usually set through the builtin config scope), but we cap to the number of CPUs available to avoid oversubscription.
- Parameters:
parallel – true when package supports parallel builds
max_cpus – maximum number of CPUs to use (defaults to cpus_available())
config – configuration object (defaults to global config)
- spack.config.ensure_latest_format_fn(section: str) Callable[[Dict[str, Any]], bool] [source]
Return a function that takes as input a dictionary read from a configuration file and update it to the latest format.
The function returns True if there was any update, False otherwise.
- Parameters:
section – section of the configuration e.g. “packages”, “config”, etc.
- spack.config.get(path: str, default: Any | None = None, scope: str | None = None) Any [source]
Module-level wrapper for
Configuration.get()
.
- spack.config.get_valid_type(path)[source]
Returns an instance of a type that will pass validation for path.
The instance is created by calling the constructor with no arguments. If multiple types will satisfy validation for data at the configuration path given, the priority order is
list
,dict
,str
,bool
,int
,float
.
- spack.config.include_path_scope(include: IncludePath) ConfigScope | None [source]
Instantiate an appropriate configuration scope for the given path.
- Parameters:
include – optional include path
Returns: configuration scope
- Raises:
ValueError – included path has an unsupported URL scheme, is required but does not exist; configuration stage directory argument is missing
ConfigFileError – unable to access remote configuration file(s)
- spack.config.included_path(entry: str | dict) IncludePath [source]
Convert the included path entry into an IncludePath.
- Parameters:
entry – include configuration entry
- Returns: converted entry, where an empty
when
means the path is not conditionally included
- spack.config.override(path_or_scope: ConfigScope | str, value: Any | None = None) Generator[Configuration, None, None] [source]
Simple way to override config settings within a context.
- Parameters:
path_or_scope (ConfigScope or str) – scope or single option to override
value (object or None) – value for the single option
Temporarily push a scope on the current configuration, then remove it after the context completes. If a single option is provided, create an internal config scope for it and push/pop that scope.
- spack.config.process_config_path(path: str) List[str] [source]
Process a path argument to config.set() that may contain overrides (‘::’ or trailing ‘:’)
Colons will be treated as static strings if inside of quotes, e.g. this:is:a:path:’value:with:colon’ will yield:
[this, is, a, path, value:with:colon]
The path may consist only of keys (e.g. for a get) or may end in a value. Keys are always strings: if a user encloses a key in quotes, the quotes should be removed. Values with quotes should be treated as strings, but without quotes, may be parsed as a different yaml object (e.g. ‘{}’ is a dict, but ‘”{}”’ is a string).
This function does not know whether the final element of the path is a key or value, so:
It must strip the quotes, in case it is a key (so we look for “key” and not ‘“key”’))
It must indicate somehow that the quotes were stripped, in case it is a value (so that we don’t process ‘”{}”’ as a YAML dict)
Therefore, all elements with quotes are stripped, and then also converted to
syaml_str
(if treating the final element as a value, the caller should not parse it in this case).
- spack.config.read_config_file(path: str, schema: Dict[str, Any] | None = None) Dict[str, Any] | None [source]
Read a YAML configuration file.
User can provide a schema for validation. If no schema is provided, we will infer the schema from the top-level key.
- spack.config.remove_yaml(dest, source)[source]
UnMerges source from dest; entries in source take precedence over dest.
This routine may modify dest and should be assigned to dest, in case dest was None to begin with, e.g.:
dest = remove_yaml(dest, source)
In the result, elements from lists from
source
will not appear as elements of lists fromdest
. Likewise, when iterating over keys or items in mergedOrderedDict
objects, keys fromsource
will not appear as keys indest
.Config file authors can optionally end any attribute in a dict with :: instead of :, and the key will remove the entire section from
dest
- spack.config.scopes() PriorityOrderedMapping[str, ConfigScope] [source]
Convenience function to get list of configuration scopes.
- spack.config.set(path: str, value: Any, scope: str | None = None) None [source]
Convenience function for setting single values in config files.
Accepts the path syntax described in
get()
.
- spack.config.update_all(section_name: str, change_fn: Callable[[str], bool]) None [source]
Change a config section, which may have details duplicated across multiple scopes.
- spack.config.use_configuration(*scopes_or_paths: ConfigScope | Tuple[int, ConfigScope] | str) Generator[Configuration, None, None] [source]
Use the configuration scopes passed as arguments within the context manager.
This function invalidates caches, and is therefore very slow.
- Parameters:
*scopes_or_paths – scope objects or paths to be used
- Returns:
Configuration object associated with the scopes passed as arguments
- spack.config.validate(data: Dict[str, Any], schema: Dict[str, Any], filename: str | None = None) Dict[str, Any] [source]
Validate data read in from a Spack YAML file.
- Parameters:
data – data read from a Spack YAML file
schema – jsonschema to validate data
This leverages the line information (start_mark, end_mark) stored on Spack YAML structures.
- spack.config.writable_scopes() List[ConfigScope] [source]
Return list of writable scopes. Higher-priority scopes come first in the list.
spack.context module
This module provides classes used in user and build environment
spack.cray_manifest module
- exception spack.cray_manifest.ManifestValidationError(msg, long_msg=None)[source]
Bases:
SpackError
- spack.cray_manifest.default_path = '/opt/cray/pe/cpe-descriptive-manifest/'
Cray systems can store a Spack-compatible description of system packages here.
- spack.cray_manifest.translated_compiler_name(manifest_compiler_name)[source]
When creating a Compiler object, Spack expects a name matching one of the classes in spack.compilers. Names in the Cray manifest may differ; for cases where we know the name refers to a compiler in Spack, this function translates it automatically.
This function will raise an error if there is no recorded translation and the name doesn’t match a known compiler name.
spack.database module
Spack’s installation tracking database.
The database serves two purposes:
It implements a cache on top of a potentially very large Spack directory hierarchy, speeding up many operations that would otherwise require filesystem access.
It will allow us to track external installations as well as lost packages and their dependencies.
Prior to the implementation of this store, a directory layout served as the authoritative database of packages in Spack. This module provides a cache and a sanity checking mechanism for what is in the filesystem.
- exception spack.database.CorruptDatabaseError(message, long_message=None)[source]
Bases:
SpackError
Raised when errors are found while reading the database.
- spack.database.DEFAULT_INSTALL_RECORD_FIELDS = ('spec', 'ref_count', 'path', 'installed', 'explicit', 'installation_time', 'deprecated_for')
Default list of fields written for each install record
- spack.database.DEFAULT_LOCK_CFG: LockConfiguration = (True, 120, None)
Default configuration for database locks
- class spack.database.Database(root: str, *, upstream_dbs: List[Database] | None = None, is_upstream: bool = False, lock_cfg: LockConfiguration = (True, 120, None), layout: DirectoryLayout | None = None)[source]
Bases:
object
- deprecator(spec: Spec) Spec | None [source]
Return the spec that the given spec is deprecated for, or None
- get_by_hash(dag_hash: str, default: ~typing.List[~spack.spec.Spec] | None = None, installed: bool | ~spack.enums.InstallRecordStatus = <InstallRecordStatus.ANY: 7>) List[Spec] | None [source]
Look up a spec by DAG hash, or by a DAG hash prefix.
- Parameters:
dag_hash – hash (or hash prefix) to look up
default – default value to return if dag_hash is not in the DB
installed – if
True
, includes only installed specs in the search; ifFalse
only missing specs. Otherwise, a InstallRecordStatus flag.
installed
defaults toInstallRecordStatus.ANY
so we can refer to any known hash.query()
andquery_one()
differ in that they only return installed specs by default.
- get_by_hash_local(dag_hash: str, default: ~typing.List[~spack.spec.Spec] | None = None, installed: bool | ~spack.enums.InstallRecordStatus = <InstallRecordStatus.ANY: 7>) List[Spec] | None [source]
Look up a spec in this DB by DAG hash, or by a DAG hash prefix.
- Parameters:
dag_hash – hash (or hash prefix) to look up
default – default value to return if dag_hash is not in the DB
installed – if
True
, includes only installed specs in the search; ifFalse
only missing specs. Otherwise, a InstallRecordStatus flag.
installed
defaults toInstallRecordStatus.ANY
so we can refer to any known hash.query()
andquery_one()
differ in that they only return installed specs by default.
- query(query_spec: str | Spec | None = None, *, predicate_fn: Callable[[InstallRecord], bool] | None = None, installed: bool | InstallRecordStatus = True, explicit: bool | None = None, start_date: datetime | None = None, end_date: datetime | None = None, in_buildcache: bool | None = None, hashes: List[str] | None = None, origin: str | None = None, install_tree: str = 'all') List[Spec] [source]
Queries the Spack database including all upstream databases.
- Parameters:
query_spec – if query_spec is
None
, match all specs in the database. If it is a spec, return all specs matchingspec.satisfies(query_spec)
.predicate_fn – optional predicate taking an InstallRecord as argument, and returning whether that record is selected for the query. It can be used to craft criteria that need some data for selection not provided by the Database itself.
installed – if
True
, includes only installed specs in the search. IfFalse
only missing specs, and ifany
, all specs in database. If an InstallStatus or iterable of InstallStatus, returns specs whose install status matches at least one of the InstallStatus.explicit – a spec that was installed following a specific user request is marked as explicit. If instead it was pulled-in as a dependency of a user requested spec it’s considered implicit.
start_date – if set considers only specs installed from the starting date.
end_date – if set considers only specs installed until the ending date.
in_buildcache – specs that are marked in this database as part of an associated binary cache are
in_buildcache
. All other specs are not. This field is used for querying mirror indices. By default, it does not check this status.hashes – list of hashes used to restrict the search
install_tree – query ‘all’ (default), ‘local’, ‘upstream’, or upstream path
origin – origin of the spec
- query_by_spec_hash(hash_key: str, data: Dict[str, InstallRecord] | None = None) Tuple[bool, InstallRecord | None] [source]
Get a spec for hash, and whether it’s installed upstream.
- Returns:
- (bool, optional InstallRecord): bool tells us whether
the spec is installed upstream. Its InstallRecord is also returned if it’s installed at all; otherwise None.
- Return type:
(tuple)
- query_local(query_spec: str | Spec | None = None, *, predicate_fn: Callable[[InstallRecord], bool] | None = None, installed: bool | InstallRecordStatus = True, explicit: bool | None = None, start_date: datetime | None = None, end_date: datetime | None = None, hashes: List[str] | None = None, in_buildcache: bool | None = None, origin: str | None = None) List[Spec] [source]
Queries the local Spack database.
This function doesn’t guarantee any sorting of the returned data for performance reason, since comparing specs for __lt__ may be an expensive operation.
- Parameters:
query_spec – if query_spec is
None
, match all specs in the database. If it is a spec, return all specs matchingspec.satisfies(query_spec)
.predicate_fn – optional predicate taking an InstallRecord as argument, and returning whether that record is selected for the query. It can be used to craft criteria that need some data for selection not provided by the Database itself.
installed – if
True
, includes only installed specs in the search. IfFalse
only missing specs, and ifany
, all specs in database. If an InstallStatus or iterable of InstallStatus, returns specs whose install status matches at least one of the InstallStatus.explicit – a spec that was installed following a specific user request is marked as explicit. If instead it was pulled-in as a dependency of a user requested spec it’s considered implicit.
start_date – if set considers only specs installed from the starting date.
end_date – if set considers only specs installed until the ending date.
in_buildcache – specs that are marked in this database as part of an associated binary cache are
in_buildcache
. All other specs are not. This field is used for querying mirror indices. By default, it does not check this status.hashes – list of hashes used to restrict the search
origin – origin of the spec
- query_local_by_spec_hash(hash_key)[source]
Get a spec by hash in the local database
- Returns:
- InstallRecord when installed
locally, otherwise None.
- Return type:
(InstallRecord or None)
- query_one(query_spec: str | Spec | None, predicate_fn: Callable[[InstallRecord], bool] | None = None, installed: bool | InstallRecordStatus = True) Spec | None [source]
Query for exactly one spec that matches the query spec.
Returns None if no installed package matches.
- Raises:
AssertionError – if more than one spec matches the query.
- record_fields: Tuple[str, ...] = ('spec', 'ref_count', 'path', 'installed', 'explicit', 'installation_time', 'deprecated_for')
Fields written for each install record
- reindex()[source]
Build database index from scratch based on a directory layout.
Locks the DB if it isn’t locked already.
- specs_deprecated_by(spec: Spec) List[Spec] [source]
Return all specs deprecated in favor of the given spec
- unused_specs(root_hashes: Container[str] | None = None, deptype: int | str | List[str] | Tuple[str, ...] = 3) List[Spec] [source]
Return all specs that are currently installed but not needed by root specs.
By default, roots are all explicit specs in the database. If a set of root hashes are passed in, they are instead used as the roots.
- Parameters:
root_hashes – optional list of roots to consider when evaluating needed installations.
deptype – if a spec is reachable from a root via these dependency types, it is considered needed. By default only link and run dependency types are considered.
- class spack.database.FailureTracker(root_dir: str | Path, default_timeout: float | None)[source]
Bases:
object
Tracks installation failures.
Prefix failure marking takes the form of a byte range lock on the nth byte of a file for coordinating between concurrent parallel build processes and a persistent file, named with the full hash and containing the spec, in a subdirectory of the database to enable persistence across overlapping but separate related build processes.
The failure lock file lives alongside the install DB.
n
is the sys.maxsize-bit prefix of the associated DAG hash to make the likelihood of collision very low with no cleanup required.- clear(spec: Spec, force: bool = False) None [source]
Removes any persistent and cached failure tracking for the spec.
see mark().
- Parameters:
spec – the spec whose failure indicators are being removed
force – True if the failure information should be cleared when a failure lock exists for the file, or False if the failure should not be cleared (e.g., it may be associated with a concurrent build)
- dir: Path
Ensure a persistent location for dealing with parallel installation failures (e.g., across near-concurrent processes).
- lock_taken(spec: Spec) bool [source]
Return True if another process has a failure lock on the spec.
- locker: SpecLocker
File for locking particular concrete spec hashes
- exception spack.database.ForbiddenLockError(message, long_message=None)[source]
Bases:
SpackError
Raised when an upstream DB attempts to acquire a lock
- spack.database.INDEX_JSON_FILE = 'index.json'
File where the database is written
- class spack.database.InstallRecord(spec: Spec, path: str | None, installed: bool, ref_count: int = 0, explicit: bool = False, installation_time: float | None = None, deprecated_for: str | None = None, in_buildcache: bool = False, origin: str | None = None)[source]
Bases:
object
A record represents one installation in the DB.
The record keeps track of the spec for the installation, its install path, AND whether or not it is installed. We need the installed flag in case a user either:
blew away a directory, or
used spack uninstall -f to get rid of it
If, in either case, the package was removed but others still depend on it, we still need to track its spec, so we don’t actually remove from the database until a spec has no installed dependents left.
- Parameters:
spec – spec tracked by the install record
path – path where the spec has been installed
installed – whether or not the spec is currently installed
ref_count (int) – number of specs that depend on this one
explicit (bool or None) – whether or not this spec was explicitly installed, or pulled-in as a dependency of something else
installation_time (datetime.datetime or None) – time of the installation
- install_type_matches(installed: InstallRecordStatus) bool [source]
- exception spack.database.InvalidDatabaseVersionError(database, expected, found)[source]
Bases:
SpackError
Exception raised when the database metadata is newer than current Spack.
- property database_version_message
- class spack.database.LockConfiguration(enable: bool, database_timeout: int | None, package_timeout: int | None)[source]
Bases:
NamedTuple
Data class to configure locks in Database objects
- Parameters:
enable – whether to enable locks or not.
database_timeout – timeout for the database lock
package_timeout – timeout for the package lock
- exception spack.database.MissingDependenciesError(message, long_message=None)[source]
Bases:
SpackError
Raised when DB cannot find records for dependencies
- spack.database.NO_LOCK: LockConfiguration = (False, None, None)
Configure a database to avoid using locks
- spack.database.NO_TIMEOUT: LockConfiguration = (True, None, None)
Configure the database to use locks without a timeout
- exception spack.database.NoSuchSpecError(spec)[source]
Bases:
KeyError
Raised when a spec is not found in the database.
- class spack.database.NoUpstreamVisitor(upstream_hashes: Set[str], on_visit: Callable[[DependencySpec, bool], None])[source]
Bases:
object
Gives edges to upstream specs, but does follow edges from upstream specs.
- exception spack.database.NonConcreteSpecAddError(message, long_message=None)[source]
Bases:
SpackError
Raised when attempting to add non-concrete spec to DB.
- class spack.database.SpecLocker(lock_path: str | Path, default_timeout: float | None)[source]
Bases:
object
Manages acquiring and releasing read or write locks on concrete specs.
- lock(spec: Spec, timeout: float | None = None) Lock [source]
Returns a lock on a concrete spec.
The lock is a byte range lock on the nth byte of a file.
The lock file is
self.lock_path
.n is the sys.maxsize-bit prefix of the DAG hash. This makes likelihood of collision is very low AND it gives us readers-writer lock semantics with just a single lockfile, so no cleanup required.
- exception spack.database.UpstreamDatabaseLockingError(message, long_message=None)[source]
Bases:
SpackError
Raised when an operation would need to lock an upstream database
- spack.database.failures_lock_path(root_dir: str | Path) Path [source]
Returns the path of the failures lock file, given the root directory.
- Parameters:
root_dir – root directory containing the database directory
- spack.database.lock_configuration(configuration)[source]
Return a LockConfiguration from a spack.config.Configuration object.
- spack.database.normalize_query(installed: bool | InstallRecordStatus) InstallRecordStatus [source]
- spack.database.prefix_lock_path(root_dir: str | Path) Path [source]
Returns the path of the prefix lock file, given the root directory.
- Parameters:
root_dir – root directory containing the database directory
- spack.database.reader(version: StandardVersion) Type[SpecfileReaderBase] [source]
spack.dependency module
Data structures that represent Spack’s dependency relationships.
- class spack.dependency.Dependency(pkg: Type[PackageBase], spec: Spec, depflag: int = 5)[source]
Bases:
object
Class representing metadata for a dependency on a package.
This class differs from
spack.spec.DependencySpec
because it represents metadata at thePackage
level.spack.spec.DependencySpec
is a descriptor for an actual package configuration, whileDependency
is a descriptor for a package’s dependency requirements.A dependency is a requirement for a configuration of another package that satisfies a particular spec. The dependency can have types, which determine how that package configuration is required, e.g. whether it is required for building the package, whether it needs to be linked to, or whether it is needed at runtime so that Spack can call commands from it.
A package can also depend on another package with patches. This is for cases where the maintainers of one package also maintain special patches for their dependencies. If one package depends on another with patches, a special version of that dependency with patches applied will be built for use by the dependent package. The patches are included in the new version’s spec hash to differentiate it from unpatched versions of the same package, so that unpatched versions of the dependency package can coexist with the patched version.
- merge(other: Dependency)[source]
Merge constraints, deptypes, and patches of other into self.
spack.deptypes module
Data structures that represent Spack’s edge types.
- spack.deptypes.ALL_FLAGS: Tuple[int, int, int, int] = (4, 1, 2, 8)
An iterator of all flag components
- spack.deptypes.ALL_TYPES: Tuple[Literal['build', 'link', 'run', 'test'], ...] = ('build', 'link', 'run', 'test')
The types of dependency relationships that Spack understands.
- spack.deptypes.DEFAULT_TYPES: Tuple[Literal['build', 'link', 'run', 'test'], ...] = ('build', 'link')
Default dependency type if none is specified
- spack.deptypes.DepFlag
Type hint for the low-level dependency input (enum.Flag is too slow)
- spack.deptypes.DepType
Individual dependency types
alias of
Literal
[‘build’, ‘link’, ‘run’, ‘test’]
- spack.deptypes.DepTypes
Type hint for the high-level dependency input
- spack.deptypes.canonicalize(deptype: str | List[str] | Tuple[str, ...]) int [source]
Convert deptype user input to a DepFlag, or raise ValueError.
- Parameters:
deptype – string representing dependency type, or a list/tuple of such strings. Can also be the builtin function
all
or the string ‘all’, which result in a tuple of all dependency types known to Spack.
- spack.deptypes.compatible(flag1: int, flag2: int) bool [source]
Returns True if two depflags can be dependencies from a Spec to deps of the same name.
The only allowable separated dependencies are a build-only dependency, combined with a non-build dependency. This separates our two process spaces, build time and run time.
- These dependency combinations are allowed:
single dep on name: [b], [l], [r], [bl], [br], [blr] two deps on name: [b, l], [b, r], [b, lr]
- but none of these make any sense:
two build deps: [b, b], [b, br], [b, bl], [b, blr] any two deps that both have an l or an r, i.e. [l, l], [r, r], [l, r], [bl, l], [bl, r]
- spack.deptypes.flag_from_strings(deptype: Iterable[str]) int [source]
Transform an iterable of deptype strings into a flag.
- spack.deptypes.flag_to_chars(depflag: int) str [source]
Create a string representing deptypes for many dependencies.
The string will be some subset of ‘blrt’, like ‘bl ‘, ‘b t’, or ‘ lr ‘ where each letter in ‘blrt’ stands for ‘build’, ‘link’, ‘run’, and ‘test’ (the dependency types).
For a single dependency, this just indicates that the dependency has the indicated deptypes. For a list of dependnecies, this shows whether ANY dpeendency in the list has the deptypes (so the deptypes are merged).
spack.directives module
This package contains directives that can be used within a package.
Directives are functions that can be called inside a package definition to modify the package, for example:
- class OpenMpi(Package):
depends_on(“hwloc”) provides(“mpi”) …
provides
and depends_on
are spack directives.
The available directives are:
build_system
conflicts
depends_on
extends
license
patch
provides
resource
variant
version
requires
redistribute
- exception spack.directives.DirectiveError(message, long_message=None)[source]
Bases:
SpackError
This is raised when something is wrong with a package directive.
- spack.directives.can_splice(target: str, *, when: str, match_variants: None | str | List[str] = None)[source]
Packages can declare whether they are ABI-compatible with another package and thus can be spliced into concrete versions of that package.
- Parameters:
target – The spec that the current package is ABI-compatible with.
when – An anonymous spec constraining current package for when it is ABI-compatible with target.
match_variants – A list of variants that must match between target spec and current package, with special value ‘*’ which matches all variants. Example: a variant is defined on both packages called json, and they are ABI-compatible whenever they agree on the json variant (regardless of whether it is turned on or off). Note that this cannot be applied to multi-valued variants and multi-valued variants will be skipped by ‘*’.
- spack.directives.conditional(*values: List[Any], when: Spec | str | bool | None = None)[source]
Conditional values that can be used in variant declarations.
- spack.directives.conflicts(conflict_spec: str, when: Spec | str | bool | None = None, msg: str | None = None)[source]
Allows a package to define a conflict.
Currently, a “conflict” is a concretized configuration that is known to be non-valid. For example, a package that is known not to be buildable with intel compilers can declare:
conflicts('%intel')
To express the same constraint only when the ‘foo’ variant is activated:
conflicts('%intel', when='+foo')
- Parameters:
conflict_spec (spack.spec.Spec) – constraint defining the known conflict
when (spack.spec.Spec) – optional constraint that triggers the conflict
msg (str) – optional user defined message
- spack.directives.depends_on(spec: str, when: Spec | str | bool | None = None, type: Tuple[str, ...] | str = ('build', 'link'), patches: Callable[[Type[PackageBase] | Dependency], None] | str | List[Callable[[Type[PackageBase] | Dependency], None] | str] | None = None)[source]
Creates a dict of deps with specs defining when they apply.
- Parameters:
spec – the package and constraints depended on
when – when the dependent satisfies this, it has the dependency represented by
spec
type – str or tuple of legal Spack deptypes
patches – single result of
patch()
directive, astr
to be passed topatch
, or a list of these
This directive is to be used inside a Package definition to declare that the package requires other packages to be built first. @see The section “Dependency specs” in the Spack Packaging Guide.
- spack.directives.extends(spec, when=None, type=('build', 'run'), patches=None)[source]
Same as depends_on, but also adds this package to the extendee list. In case of Python, also adds a dependency on python-venv.
keyword arguments can be passed to extends() so that extension packages can pass parameters to the extendee’s extension mechanism.
- spack.directives.license(license_identifier: str, checked_by: str | List[str] | None = None, when: str | bool | None = None)[source]
Add a new license directive, to specify the SPDX identifier the software is distributed under.
- Parameters:
license_identifiers – SPDX identifier specifying the license(s) the software is distributed under.
checked_by – string or list of strings indicating which github user checked the license (if any).
when – A spec specifying when the license applies.
- spack.directives.maintainers(*names: str)[source]
Add a new maintainer directive, to specify maintainers in a declarative way.
- Parameters:
names – GitHub username for the maintainer
- spack.directives.patch(url_or_filename: str, level: int = 1, when: Spec | str | bool | None = None, working_dir: str = '.', reverse: bool = False, sha256: str | None = None, archive_sha256: str | None = None) Callable[[Type[PackageBase] | Dependency], None] [source]
Packages can declare patches to apply to source. You can optionally provide a when spec to indicate that a particular patch should only be applied when the package’s spec meets certain conditions (e.g. a particular version).
- Parameters:
url_or_filename – url or relative filename of the patch
level – patch level (as in the patch shell command)
when – optional anonymous spec that specifies when to apply the patch
working_dir – dir to change to before applying
reverse – reverse the patch
sha256 – sha256 sum of the patch, used to verify the patch (only required for URL patches)
archive_sha256 – sha256 sum of the archive, if the patch is compressed (only required for compressed URL patches)
- spack.directives.provides(*specs: str, when: Spec | str | bool | None = None)[source]
Allows packages to provide a virtual dependency.
If a package provides “mpi”, other packages can declare that they depend on “mpi”, and spack can use the providing package to satisfy the dependency.
- Parameters:
*specs – virtual specs provided by this package
when – condition when this provides clause needs to be considered
- spack.directives.redistribute(source: bool | None = None, binary: bool | None = None, when: Spec | str | bool | None = None)[source]
Can be used inside a Package definition to declare that the package source and/or compiled binaries should not be redistributed.
By default, Packages allow source/binary distribution (i.e. in mirrors). Because of this, and because overlapping enable/ disable specs are not allowed, this directive only allows users to explicitly disable redistribution for specs.
- spack.directives.requires(*requirement_specs: str, policy='one_of', when=None, msg=None)[source]
Allows a package to request a configuration to be present in all valid solutions.
For instance, a package that is known to compile only with GCC can declare:
requires(“%gcc”)
A package that requires Apple-Clang on Darwin can declare instead:
requires(“%apple-clang”, when=”platform=darwin”, msg=”Apple Clang is required on Darwin”)
- Parameters:
requirement_specs – spec expressing the requirement
when – optional constraint that triggers the requirement. If None the requirement is applied unconditionally.
msg – optional user defined message
- spack.directives.resource(*, name: str | None = None, destination: str = '', placement: str | None = None, when: Spec | str | bool | None = None, **kwargs)[source]
Define an external resource to be fetched and staged when building the package. Based on the keywords present in the dictionary the appropriate FetchStrategy will be used for the resource. Resources are fetched and staged in their own folder inside spack stage area, and then moved into the stage area of the package that needs them.
- Keyword Arguments:
name – name for the resource
when – condition defining when the resource is needed
destination – path, relative to the package stage area, to which resource should be moved
placement – optionally rename the expanded resource inside the destination directory
- spack.directives.variant(name: str, default: Any | None = None, description: str = '', values: Sequence | Callable[[Any], bool] | None = None, multi: bool | None = None, validator: Callable[[str, str, Tuple[Any, ...]], None] | None = None, when: str | bool | None = None, sticky: bool = False)[source]
Define a variant for the package.
Packager can specify a default value as well as a text description.
- Parameters:
name – Name of the variant
default – Default value for the variant, if not specified otherwise the default will be False for a boolean variant and ‘nothing’ for a multi-valued variant
description – Description of the purpose of the variant
values – Either a tuple of strings containing the allowed values, or a callable accepting one value and returning True if it is valid
multi – If False only one value per spec is allowed for this variant
validator – Optional group validator to enforce additional logic. It receives the package name, the variant name and a tuple of values and should raise an instance of SpackError if the group doesn’t meet the additional constraints
when – Optional condition on which the variant applies
sticky – The variant should not be changed by the concretizer to find a valid concrete spec
- Raises:
DirectiveError – If arguments passed to the directive are invalid
- spack.directives.version(ver: str | int, checksum: str | None = None, *, preferred: bool | None = None, deprecated: bool | None = None, no_cache: bool | None = None, url: str | None = None, extension: str | None = None, expand: bool | None = None, fetch_options: dict | None = None, md5: str | None = None, sha1: str | None = None, sha224: str | None = None, sha256: str | None = None, sha384: str | None = None, sha512: str | None = None, git: str | None = None, commit: str | None = None, tag: str | None = None, branch: str | None = None, get_full_repo: bool | None = None, submodules: Callable[[PackageBase], str | List[str] | bool] | bool | None = None, submodules_delete: bool | None = None, svn: str | None = None, hg: str | None = None, cvs: str | None = None, revision: str | None = None, date: str | None = None)[source]
Adds a version and, if appropriate, metadata for fetching its code.
The
version
directives are aggregated into aversions
dictionary attribute withVersion
keys and metadata values, where the metadata is stored as a dictionary ofkwargs
.The (keyword) arguments are turned into a valid fetch strategy for code packages later. See
spack.fetch_strategy.for_package_version()
.
spack.directives_meta module
- exception spack.directives_meta.DirectiveError(message, long_message=None)[source]
Bases:
SpackError
This is raised when something is wrong with a package directive.
- class spack.directives_meta.DirectiveMeta(name: str, bases: tuple, attr_dict: dict)[source]
Bases:
type
Flushes the directives that were temporarily stored in the staging area into the package.
- static directive(dicts: Sequence[str] | str | None = None) Callable [source]
Decorator for Spack directives.
Spack directives allow you to modify a package while it is being defined, e.g. to add version or dependency information. Directives are one of the key pieces of Spack’s package “language”, which is embedded in python.
Here’s an example directive:
@directive(dicts='versions') version(pkg, ...): ...
This directive allows you write:
class Foo(Package): version(...)
The
@directive
decorator handles a couple things for you:Adds the class scope (pkg) as an initial parameter when called, like a class method would. This allows you to modify a package from within a directive, while the package is still being defined.
It automatically adds a dictionary called “versions” to the package so that you can refer to pkg.versions.
The
(dicts='versions')
part ensures that ALL packages in Spack will have aversions
attribute after they’re constructed, and that if no directive actually modified it, it will just be an empty dict.This is just a modular way to add storage attributes to the Package class, and it’s how Spack gets information from the packages to the core.
- spack.directives_meta.directive_names = ['build_system', 'version', 'conflicts', 'depends_on', 'redistribute', 'extends', 'provides', 'can_splice', 'patch', 'variant', 'resource', 'maintainers', 'license', 'requires', '_language']
Names of possible directives. This list is mostly populated using the @directive decorator. Some directives leverage others and in that case are not automatically added.
spack.directory_layout module
- class spack.directory_layout.DirectoryLayout(root: str, *, projections: Dict[str, str] | None = None, hash_length: int | None = None)[source]
Bases:
object
A directory layout is used to associate unique paths with specs. Different installations are going to want different layouts for their install, and they can use this to customize the nesting structure of spack installs. The default layout is:
<install root>/
<platform-os-target>/
<compiler>-<compiler version>/
<name>-<version>-<hash>
The installation directory projections can be modified with the projections argument.
- all_specs() List[Spec] [source]
Returns a list of all specs detected in self.root, detected by .spack directories. Their prefix is set to the directory containing the .spack directory. Note that these specs may follow a different layout than the current layout if it was changed after installation.
- deprecated_file_path(deprecated_spec: Spec, deprecator_spec: Spec | None = None) str [source]
Gets full path to spec file for deprecated spec
If the deprecator_spec is provided, use that. Otherwise, assume deprecated_spec is already deprecated and its prefix links to the prefix of its deprecator.
- deprecated_for(specs: List[Spec]) List[Tuple[Spec, Spec]] [source]
Returns a list of tuples of specs (new, old) where new is deprecated for old
- ensure_installed(spec: Spec) None [source]
Throws InconsistentInstallDirectoryError if: 1. spec prefix does not exist 2. spec prefix does not contain a spec file, or 3. We read a spec with the wrong DAG hash out of an existing install directory.
- path_for_spec(spec: Spec) str [source]
Return absolute path from the root to a directory for the spec.
- remove_install_directory(spec: Spec, deprecated: bool = False) None [source]
Removes a prefix and any empty parent directories from the root. Raised RemoveFailedError if something goes wrong.
- exception spack.directory_layout.DirectoryLayoutError(message, long_msg=None)[source]
Bases:
SpackError
Superclass for directory layout errors.
- exception spack.directory_layout.ExtensionAlreadyInstalledError(spec, ext_spec)[source]
Bases:
DirectoryLayoutError
Raised when an extension is added to a package that already has it.
- exception spack.directory_layout.ExtensionConflictError(spec, ext_spec, conflict)[source]
Bases:
DirectoryLayoutError
Raised when an extension is added to a package that already has it.
- exception spack.directory_layout.InconsistentInstallDirectoryError(message, long_msg=None)[source]
Bases:
DirectoryLayoutError
Raised when a package seems to be installed to the wrong place.
- exception spack.directory_layout.InvalidDirectoryLayoutParametersError(message, long_msg=None)[source]
Bases:
DirectoryLayoutError
Raised when a invalid directory layout parameters are supplied
- exception spack.directory_layout.InvalidExtensionSpecError(message, long_msg=None)[source]
Bases:
DirectoryLayoutError
Raised when an extension file has a bad spec in it.
- exception spack.directory_layout.RemoveFailedError(installed_spec, prefix, error)[source]
Bases:
DirectoryLayoutError
Raised when a DirectoryLayout cannot remove an install prefix.
- exception spack.directory_layout.SpecReadError(message, long_msg=None)[source]
Bases:
DirectoryLayoutError
Raised when directory layout can’t read a spec.
spack.enums module
Enumerations used throughout Spack
spack.error module
- exception spack.error.ConfigError(message, long_message=None)[source]
Bases:
SpackError
Superclass for all Spack config related errors.
- exception spack.error.FetchError(message, long_message=None)[source]
Bases:
SpackError
Superclass for fetch-related errors.
- exception spack.error.InstallError(message, long_msg=None, pkg=None)[source]
Bases:
SpackError
Raised when something goes wrong during install or uninstall.
The error can be annotated with a
pkg
attribute to allow the caller to get the package for which the exception was raised.
- exception spack.error.MirrorError(msg, long_msg=None)[source]
Bases:
SpackError
Superclass of all mirror-creation related errors.
- exception spack.error.NoHeadersError(message, long_message=None)[source]
Bases:
SpackError
Raised when package headers are requested but cannot be found
- exception spack.error.NoLibrariesError(message_or_name, prefix=None)[source]
Bases:
SpackError
Raised when package libraries are requested but cannot be found
- exception spack.error.NoSuchPatchError(message, long_message=None)[source]
Bases:
SpackError
Raised when a patch file doesn’t exist.
- exception spack.error.NoURLError(cls)[source]
Bases:
PackageError
Raised when someone tries to build a URL for a package with no URLs.
- exception spack.error.PackageError(message, long_msg=None)[source]
Bases:
SpackError
Raised when something is wrong with a package definition.
- exception spack.error.PatchDirectiveError(message, long_message=None)[source]
Bases:
SpackError
Raised when the wrong arguments are suppled to the patch directive.
- exception spack.error.PatchLookupError(message, long_message=None)[source]
Bases:
NoSuchPatchError
Raised when a patch file cannot be located from sha256.
- spack.error.SHOW_BACKTRACE = False
whether to show a backtrace when an error is printed, enabled with –backtrace.
- exception spack.error.SpackAPIWarning[source]
Bases:
UserWarning
Warning that formats with file and line number.
- exception spack.error.SpackError(message, long_message=None)[source]
Bases:
Exception
This is the superclass for all Spack errors. Subclasses can be found in the modules they have to do with.
- property long_message
- print_context()[source]
Print extended debug information about this exception.
This is usually printed when the top-level Spack error handler calls
die()
, but it can be called separately beforehand if a lower-level error handler needs to print error context and continue without raising the exception to the top level.
- exception spack.error.SpecError(message, long_message=None)[source]
Bases:
SpackError
Superclass for all errors that occur while constructing specs.
- exception spack.error.StopPhase(message, long_message=None)[source]
Bases:
SpackError
Pickle-able exception to control stopped builds.
- exception spack.error.UnsatisfiableSpecError(provided, required, constraint_type)[source]
Bases:
SpecError
Raised when a spec conflicts with package constraints.
For original concretizer, provide the requirement that was violated when raising.
- exception spack.error.UnsupportedPlatformError(message)[source]
Bases:
SpackError
Raised by packages when a platform is not supported
- spack.error.debug = 0
at what level we should write stack traces or short error messages this is module-scoped because it needs to be set very early
spack.extensions module
Service functions and classes to implement the hooks for Spack’s command extensions.
- exception spack.extensions.ExtensionNamingError(path)[source]
Bases:
SpackError
Exception class thrown when a configured extension does not follow the expected naming convention.
- spack.extensions.extension_name(path)[source]
Returns the name of the extension in the path passed as argument.
- Parameters:
path (str) – path where the extension resides
- Returns:
The extension name.
- Raises:
ExtensionNamingError – if path does not match the expected format for a Spack command extension.
- spack.extensions.extension_paths_from_entry_points() List[str] [source]
Load extensions from a Python package’s entry points.
A python package can register entry point metadata so that Spack can find its extensions by adding the following to the project’s pyproject.toml:
[project.entry-points."spack.extensions"] baz = "baz:get_spack_extensions"
The function
get_spack_extensions
returns paths to the package’s spack extensions
- spack.extensions.get_command_paths()[source]
Return the list of paths where to search for command files.
- spack.extensions.get_extension_paths()[source]
Return the list of canonicalized extension paths from config:extensions.
- spack.extensions.get_module(cmd_name)[source]
Imports the extension module for a particular command name and returns it.
- Parameters:
cmd_name (str) – name of the command for which to get a module (contains
-
, not_
).
- spack.extensions.get_template_dirs()[source]
Returns the list of directories where to search for templates in extensions.
- spack.extensions.load_command_extension(command, path)[source]
Loads a command extension from the path passed as argument.
- Parameters:
- Returns:
A valid module if found and loadable; None if not found. Module
loading exceptions are passed through.
spack.fetch_strategy module
Fetch strategies are used to download source code into a staging area in order to build it. They need to define the following methods:
- fetch()
This should attempt to download/check out source from somewhere.
- check()
Apply a checksum to the downloaded source code, e.g. for an archive. May not do anything if the fetch method was safe to begin with.
- expand()
Expand (e.g., an archive) downloaded file to source, with the standard stage source path as the destination directory.
- reset()
Restore original state of downloaded code. Used by clean commands. This may just remove the expanded source and re-expand an archive, or it may run something like git reset –hard.
- archive()
Archive a source directory, e.g. for creating a mirror.
- class spack.fetch_strategy.BundleFetchStrategy(**kwargs)[source]
Bases:
FetchStrategy
Fetch strategy associated with bundle, or no-code, packages.
Having a basic fetch strategy is a requirement for executing post-install hooks. Consequently, this class provides the API but does little more than log messages.
TODO: Remove this class by refactoring resource handling and the link between composite stages and composite fetch strategies (see #11981).
- property cachable
Report False as there is no code to cache.
- class spack.fetch_strategy.CacheURLFetchStrategy(*, url: str, checksum: str | None = None, **kwargs)[source]
Bases:
URLFetchStrategy
The resource associated with a cache URL may be out of date.
- exception spack.fetch_strategy.ChecksumError(message, long_message=None)[source]
Bases:
FetchError
Raised when archive fails to checksum.
- class spack.fetch_strategy.CvsFetchStrategy(**kwargs)[source]
Bases:
VCSFetchStrategy
- Fetch strategy that gets source code from a CVS repository.
Use like this in a package:
- version(‘name’,
cvs=’:pserver:anonymous@www.example.com:/cvsroot%module=modulename’)
Optionally, you can provide a branch and/or a date for the URL:
- version(‘name’,
cvs=’:pserver:anonymous@www.example.com:/cvsroot%module=modulename’, branch=’branchname’, date=’date’)
Repositories are checked out into the standard stage source path directory.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- property cvs
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- reset()[source]
Revert to freshly downloaded state.
For archive files, this may just re-expand the archive.
- exception spack.fetch_strategy.ExtrapolationError(message, long_message=None)[source]
Bases:
FetchError
Raised when we can’t extrapolate a version for a package.
- exception spack.fetch_strategy.FailedDownloadError(*exceptions: Exception)[source]
Bases:
FetchError
Raised when a download fails.
- class spack.fetch_strategy.FetchAndVerifyExpandedFile(url, archive_sha256: str, expanded_sha256: str)[source]
Bases:
URLFetchStrategy
Fetch strategy that verifies the content digest during fetching, as well as after expanding it.
- class spack.fetch_strategy.FetchStrategy(**kwargs)[source]
Bases:
object
Superclass of all fetch strategies.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- classmethod matches(args)[source]
Predicate that matches fetch strategies to arguments of the version directive.
- Parameters:
args – arguments of the version directive
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- reset()[source]
Revert to freshly downloaded state.
For archive files, this may just re-expand the archive.
- exception spack.fetch_strategy.FetcherConflict(message, long_message=None)[source]
Bases:
FetchError
Raised for packages with invalid fetch attributes.
- class spack.fetch_strategy.GCSFetchStrategy(*, url: str, checksum: str | None = None, **kwargs)[source]
Bases:
URLFetchStrategy
FetchStrategy that pulls from a GCS bucket.
- class spack.fetch_strategy.GitFetchStrategy(**kwargs)[source]
Bases:
VCSFetchStrategy
Fetch strategy that gets source code from a git repository. Use like this in a package:
version(‘name’, git=’https://github.com/project/repo.git’)
Optionally, you can provide a branch, or commit to check out, e.g.:
version(‘1.1’, git=’https://github.com/project/repo.git’, tag=’v1.1’)
You can use these three optional attributes in addition to
git
:branch
: Particular branch to build from (default is therepository’s default branch)
tag
: Particular tag to check outcommit
: Particular commit hash in the repo
Repositories are cloned into the standard stage source path directory.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- bare_clone(dest: str) None [source]
Execute a bare clone for metadata only
Requires a destination since bare cloning does not provide source and shouldn’t be used for staging.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- property git
- property git_version
- git_version_re = 'git version (\\S+)'
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- optional_attrs: List[str] = ['tag', 'branch', 'commit', 'submodules', 'get_full_repo', 'submodules_delete', 'git_sparse_paths']
- protocol_supports_shallow_clone()[source]
Shallow clone operations (–depth #) are not supported by the basic HTTP protocol or by no-protocol file specifications. Use (e.g.) https:// or file:// instead.
- reset()[source]
Revert to freshly downloaded state.
For archive files, this may just re-expand the archive.
- source_id()[source]
A unique ID for the source.
It is intended that a human could easily generate this themselves using the information available to them in the Spack package.
The returned value is added to the content which determines the full hash for a package using str().
- class spack.fetch_strategy.GoFetchStrategy(**kwargs)[source]
Bases:
VCSFetchStrategy
Fetch strategy that employs the go get infrastructure.
Use like this in a package:
- version(‘name’,
go=’github.com/monochromegane/the_platinum_searcher/…’)
Go get does not natively support versions, they can be faked with git.
The fetched source will be moved to the standard stage sourcepath directory during the expand step.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- property go
- property go_version
- class spack.fetch_strategy.HgFetchStrategy(**kwargs)[source]
Bases:
VCSFetchStrategy
Fetch strategy that gets source code from a Mercurial repository. Use like this in a package:
version(‘name’, hg=’https://jay.grs.rwth-aachen.de/hg/lwm2’)
Optionally, you can provide a branch, or revision to check out, e.g.:
- version(‘torus’,
hg=’https://jay.grs.rwth-aachen.de/hg/lwm2’, branch=’torus’)
You can use the optional ‘revision’ attribute to check out a branch, tag, or particular revision in hg. To prevent non-reproducible builds, using a moving target like a branch is discouraged.
revision
: Particular revision, branch, or tag.
Repositories are cloned into the standard stage source path directory.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- property hg
Returns: Executable: the hg executable
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- reset()[source]
Revert to freshly downloaded state.
For archive files, this may just re-expand the archive.
- exception spack.fetch_strategy.InvalidArgsError(pkg=None, version=None, **args)[source]
Bases:
FetchError
Raised when a version can’t be deduced from a set of arguments.
- exception spack.fetch_strategy.NoArchiveFileError(message, long_message=None)[source]
Bases:
FetchError
Raised when an archive file is expected but none exists.
- exception spack.fetch_strategy.NoCacheError(message, long_message=None)[source]
Bases:
FetchError
Raised when there is no cached archive for a package.
- exception spack.fetch_strategy.NoDigestError(message, long_message=None)[source]
Bases:
FetchError
Raised after attempt to checksum when URL has no digest.
- exception spack.fetch_strategy.NoStageError(method)[source]
Bases:
FetchError
Raised when fetch operations are called before set_stage().
- class spack.fetch_strategy.OCIRegistryFetchStrategy(*, url: str, checksum: str | None = None, **kwargs)[source]
Bases:
URLFetchStrategy
- class spack.fetch_strategy.S3FetchStrategy(*, url: str, checksum: str | None = None, **kwargs)[source]
Bases:
URLFetchStrategy
FetchStrategy that pulls from an S3 bucket.
- class spack.fetch_strategy.SvnFetchStrategy(**kwargs)[source]
Bases:
VCSFetchStrategy
- Fetch strategy that gets source code from a subversion repository.
Use like this in a package:
version(‘name’, svn=’http://www.example.com/svn/trunk’)
Optionally, you can provide a revision for the URL:
- version(‘name’, svn=’http://www.example.com/svn/trunk’,
revision=’1641’)
Repositories are checked out into the standard stage source path directory.
- archive(destination)[source]
Create an archive of the downloaded data for a mirror.
For downloaded files, this should preserve the checksum of the original file. For repositories, it should just create an expandable tarball out of the downloaded repository.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- reset()[source]
Revert to freshly downloaded state.
For archive files, this may just re-expand the archive.
- source_id()[source]
A unique ID for the source.
It is intended that a human could easily generate this themselves using the information available to them in the Spack package.
The returned value is added to the content which determines the full hash for a package using str().
- property svn
- class spack.fetch_strategy.URLFetchStrategy(*, url: str, checksum: str | None = None, **kwargs)[source]
Bases:
FetchStrategy
URLFetchStrategy pulls source code from a URL for an archive, check the archive against a checksum, and decompresses the archive.
The destination for the resulting file(s) is the standard stage path.
- property archive_file
Path to the source archive within this stage directory.
- property cachable
Whether fetcher is capable of caching the resource it retrieves.
This generally is determined by whether the resource is identifiably associated with a specific package version.
- Returns:
True if can cache, False otherwise.
- Return type:
- property candidate_urls
- check()[source]
Check the downloaded archive against a checksum digest. No-op if this stage checks code out of a repository.
- property curl: Executable
- fetch()[source]
Fetch source code archive or repo.
- Returns:
True on success, False on failure.
- Return type:
- mirror_id()[source]
This is a unique ID for a source that is intended to help identify reuse of resources across packages.
It is unique like source-id, but it does not include the package name and is not necessarily easy for a human to create themselves.
- class spack.fetch_strategy.VCSFetchStrategy(**kwargs)[source]
Bases:
FetchStrategy
Superclass for version control system fetch strategies.
Like all fetchers, VCS fetchers are identified by the attributes passed to the
version
directive. The optional_attrs for a VCS fetch strategy represent types of revisions, e.g. tags, branches, commits, etc.The required attributes (git, svn, etc.) are used to specify the URL and to distinguish a VCS fetch strategy from a URL fetch strategy.
- spack.fetch_strategy.all_strategies = [<class 'spack.fetch_strategy.BundleFetchStrategy'>, <class 'spack.fetch_strategy.URLFetchStrategy'>, <class 'spack.fetch_strategy.CacheURLFetchStrategy'>, <class 'spack.fetch_strategy.GoFetchStrategy'>, <class 'spack.fetch_strategy.GitFetchStrategy'>, <class 'spack.fetch_strategy.CvsFetchStrategy'>, <class 'spack.fetch_strategy.SvnFetchStrategy'>, <class 'spack.fetch_strategy.HgFetchStrategy'>, <class 'spack.fetch_strategy.S3FetchStrategy'>, <class 'spack.fetch_strategy.GCSFetchStrategy'>, <class 'spack.fetch_strategy.FetchAndVerifyExpandedFile'>]
List of all fetch strategies, created by FetchStrategy metaclass.
- spack.fetch_strategy.check_pkg_attributes(pkg)[source]
Find ambiguous top-level fetch attributes in a package.
Currently this only ensures that two or more VCS fetch strategies are not specified at once.
- spack.fetch_strategy.for_package_version(pkg, version=None)[source]
Determine a fetch strategy based on the arguments supplied to version() in the package description.
- spack.fetch_strategy.from_kwargs(**kwargs)[source]
Construct an appropriate FetchStrategy from the given keyword arguments.
- Parameters:
**kwargs – dictionary of keyword arguments, e.g. from a
version()
directive in a package.- Returns:
- The fetch strategy that matches the args, based
on attribute names (e.g.,
git
,hg
, etc.)
- Return type:
- Raises:
spack.error.FetchError – If no
fetch_strategy
matches the args.
- spack.fetch_strategy.from_list_url(pkg)[source]
If a package provides a URL which lists URLs for resources by version, this can can create a fetcher for a URL discovered for the specified package’s version.
- spack.fetch_strategy.from_url(url: str) URLFetchStrategy [source]
Given a URL, find an appropriate fetch strategy for it. Currently just gives you a URLFetchStrategy that uses curl.
- TODO: make this return appropriate fetch strategies for other
types of URLs.
- spack.fetch_strategy.from_url_scheme(url: str, **kwargs) FetchStrategy [source]
Finds a suitable FetchStrategy by matching its url_attr with the scheme in the given url.
spack.filesystem_view module
- class spack.filesystem_view.FilesystemView(root: str, layout: DirectoryLayout, *, projections: Dict | None = None, ignore_conflicts: bool = False, verbose: bool = False, link_type: Literal['hardlink', 'hard', 'copy', 'relocate', 'add', 'symlink', 'soft'] = 'symlink')[source]
Bases:
object
Governs a filesystem view that is located at certain root-directory.
Packages are linked from their install directories into a common file hierachy.
In distributed filesystems, loading each installed package seperately can lead to slow-downs due to too many directories being traversed. This can be circumvented by loading all needed modules into a common directory structure.
- add_specs(*specs: Spec, **kwargs) None [source]
Add given specs to view.
Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be activated as well.
Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.
This method should make use of activate_standalone.
- get_spec(spec: Spec) Spec | None [source]
Return the actual spec linked in this view (i.e. do not look it up in the database by name).
spec can be a name or a spec from which the name is extracted.
As there can only be a single version active for any spec the name is enough to identify the spec in the view.
If no spec is present, returns None.
- print_status(*specs: Spec, **kwargs) None [source]
- Print a short summary about the given specs, detailing whether..
..they are active in the view.
..they are active but the activated version differs.
..they are not activte in the view.
Takes with_dependencies keyword argument so that the status of dependencies is printed as well.
- remove_specs(*specs: Spec, **kwargs) None [source]
Removes given specs from view.
Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be deactivated as well.
Should accept with_dependents as keyword argument (default True) to indicate wether or not dependents on the deactivated specs should be removed as well.
Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.
This method should make use of deactivate_standalone.
- class spack.filesystem_view.YamlFilesystemView(root: str, layout: DirectoryLayout, *, projections: Dict | None = None, ignore_conflicts: bool = False, verbose: bool = False, link_type: Literal['hardlink', 'hard', 'copy', 'relocate', 'add', 'symlink', 'soft'] = 'symlink')[source]
Bases:
FilesystemView
Filesystem view to work with a yaml based directory layout.
- add_specs(*specs, **kwargs)[source]
Add given specs to view.
Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be activated as well.
Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.
This method should make use of activate_standalone.
- get_conflicts(*specs)[source]
Return list of tuples (<spec>, <spec in view>) where the spec active in the view differs from the one to be activated.
- get_projection_for_spec(spec)[source]
Return the projection for a spec in this view.
Relies on the ordering of projections to avoid ambiguity.
- get_spec(spec)[source]
Return the actual spec linked in this view (i.e. do not look it up in the database by name).
spec can be a name or a spec from which the name is extracted.
As there can only be a single version active for any spec the name is enough to identify the spec in the view.
If no spec is present, returns None.
- print_conflict(spec_active, spec_specified, level='error')[source]
Singular print function for spec conflicts.
- print_status(*specs, **kwargs)[source]
- Print a short summary about the given specs, detailing whether..
..they are active in the view.
..they are active but the activated version differs.
..they are not activte in the view.
Takes with_dependencies keyword argument so that the status of dependencies is printed as well.
- remove_specs(*specs, **kwargs)[source]
Removes given specs from view.
Should accept with_dependencies as keyword argument (default True) to indicate wether or not dependencies should be deactivated as well.
Should accept with_dependents as keyword argument (default True) to indicate wether or not dependents on the deactivated specs should be removed as well.
Should except an exclude keyword argument containing a list of regexps that filter out matching spec names.
This method should make use of deactivate_standalone.
spack.graph module
Functions for graphing DAGs of dependencies.
This file contains code for graphing DAGs of software packages (i.e. Spack specs). There are two main functions you probably care about:
graph_ascii() will output a colored graph of a spec in ascii format, kind of like the graph git shows with “git log –graph”, e.g.:
o mpileaks
|\
| |\
| o | callpath
|/| |
| |\|
| |\ \
| | |\ \
| | | | o adept-utils
| |_|_|/|
|/| | | |
o | | | | mpi
/ / / /
| | o | dyninst
| |/| |
|/|/| |
| | |/
| o | libdwarf
|/ /
o | libelf
/
o boost
graph_dot() will output a graph of a spec (or multiple specs) in dot format.
- class spack.graph.AsciiGraph[source]
Bases:
object
- write(spec, color=None, out=None)[source]
Write out an ascii graph of the provided spec.
Arguments: spec – spec to graph. This only handles one spec at a time.
Optional arguments:
out – file object to write out to (default is sys.stdout)
- color – whether to write in color. Default is to autodetect
based on output file.
- class spack.graph.DAGWithDependencyTypes[source]
Bases:
DotGraphBuilder
DOT graph with link,run nodes grouped together and edges colored according to the dependency types.
- class spack.graph.DotGraphBuilder[source]
Bases:
object
Visit edges of a graph a build DOT options for nodes and edges
- class spack.graph.SimpleDAG[source]
Bases:
DotGraphBuilder
Simple DOT graph, with nodes colored uniformly and edges without properties
- class spack.graph.StaticDag[source]
Bases:
DotGraphBuilder
DOT graph for possible dependencies
- spack.graph.find(seq, predicate)[source]
Find index in seq for which predicate is True.
Searches the sequence and returns the index of the element for which the predicate evaluates to True. Returns -1 if the predicate does not evaluate to True for any element in seq.
- spack.graph.graph_ascii(spec, node='o', out=None, debug=False, indent=0, color=None, depflag: int = 15)[source]
- spack.graph.graph_dot(specs: List[Spec], builder: DotGraphBuilder | None = None, depflag: int = 15, out: TextIO | None = None)[source]
DOT graph of the concrete specs passed as input.
- Parameters:
specs – specs to be represented
builder – builder to use to render the graph
depflag – dependency types to consider
out – optional output stream. If None sys.stdout is used
- spack.graph.static_graph_dot(specs: List[Spec], depflag: int = 15, out: TextIO | None = None)[source]
Static DOT graph with edges to all possible dependencies.
- Parameters:
specs – abstract specs to be represented
depflag – dependency types to consider
out – optional output stream. If None sys.stdout is used
spack.hash_types module
Definitions that control how Spack creates Spec hashes.
- class spack.hash_types.SpecHashDescriptor(depflag: int, package_hash, name, override=None)[source]
Bases:
object
This class defines how hashes are generated on Spec objects.
Spec hashes in Spack are generated from a serialized (e.g., with YAML) representation of the Spec graph. The representation may only include certain dependency types, and it may optionally include a canonicalized hash of the package.py for each node in the graph.
We currently use different hashes for different use cases.
- property attr
Private attribute stored on spec
- spack.hash_types.dag_hash = SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None)
The DAG hash includes all inputs that can affect how a package is built.
- spack.hash_types.package_hash = SpecHashDescriptor(depflag=0, package_hash=True, name='package_hash', override=<function _content_hash_override>)
Package hash used as part of dag hash
spack.install_test module
- class spack.install_test.PackageTest(pkg: Pb)[source]
Bases:
object
The class that manages stand-alone (post-install) package tests.
- phase_tests(builder, phase_name: str, method_names: List[str])[source]
Execute the builder’s package phase-time tests.
- Parameters:
builder – builder for package being tested
phase_name – the name of the build-time phase (e.g.,
build
,install
)method_names – phase-specific callback method names
- stand_alone_tests(kwargs)[source]
Run the package’s stand-alone tests.
- Parameters:
kwargs (dict) – arguments to be used by the test process
- status(name: str, status: TestStatus, msg: str | None = None)[source]
Track and print the test status for the test part name.
- exception spack.install_test.SkipTest[source]
Bases:
Exception
Raised when a test (part) is being skipped.
- exception spack.install_test.TestFailure(failures: List[Tuple[BaseException, str]])[source]
Bases:
SpackError
Raised when package tests have failed for an installation.
- spack.install_test.TestFailureType
Stand-alone test failure info type
alias of
Tuple
[BaseException
,str
]
- class spack.install_test.TestStatus(value)[source]
Bases:
Enum
Names of different stand-alone test states.
- FAILED = 1
- NO_TESTS = -1
- PASSED = 2
- SKIPPED = 0
- class spack.install_test.TestSuite(specs, alias=None)[source]
Bases:
object
The class that manages specs for
spack test run
execution.- property content_hash
The hash used to uniquely identify the test suite.
- property current_test_cache_dir
Path to the test stage directory where the current spec’s cached build-time files were automatically copied.
- Returns:
path to the current spec’s staged, cached build-time files.
- Return type:
- Raises:
TestSuiteSpecError – If there is no spec being tested
- property current_test_data_dir
Path to the test stage directory where the current spec’s custom package (data) files were automatically copied.
- Returns:
path to the current spec’s staged, custom package (data) files
- Return type:
- Raises:
TestSuiteSpecError – If there is no spec being tested
- static from_dict(d)[source]
Instantiates a TestSuite based on a dictionary specs and an optional alias:
specs: list of the test suite’s specs in dictionary form alias: the test suite alias
- Returns:
Instance created from the specs
- Return type:
- static from_file(filename)[source]
Instantiate a TestSuite using the specs and optional alias provided in the given file.
- Parameters:
filename (str) – The path to the JSON file containing the test suite specs and optional alias.
- Raises:
BaseException – sjson.SpackJSONError if problem parsing the file
- log_file_for_spec(spec)[source]
The test log file path for the provided spec.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
- Returns:
the path to the spec’s log file
- Return type:
- property name
The name (alias or, if none, hash) of the test suite.
- property results_file
The path to the results summary file.
- property stage
The root test suite stage directory.
- Returns:
the spec’s test stage directory path
- Return type:
- test_dir_for_spec(spec)[source]
The path to the test stage directory for the provided spec.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
- Returns:
the spec’s test stage directory path
- Return type:
- classmethod test_log_name(spec)[source]
The standard log filename for a spec.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
- Returns:
the spec’s log filename
- Return type:
- classmethod test_pkg_id(spec)[source]
The standard install test package identifier.
- Parameters:
spec – instance of the spec under test
- Returns:
the install test package identifier
- Return type:
- test_status(spec: Spec, externals: bool) TestStatus | None [source]
Determine the overall test results status for the spec.
- Parameters:
spec – instance of the spec under test
externals –
True
if externals are to be tested, elseFalse
- Returns:
the spec’s test status if available or
None
- tested_file_for_spec(spec)[source]
The test status file path for the spec.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
- Returns:
the spec’s test status file path
- Return type:
- classmethod tested_file_name(spec)[source]
The standard test status filename for the spec.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
- Returns:
the spec’s test status filename
- Return type:
- to_dict()[source]
Build a dictionary for the test suite.
- Returns:
The dictionary contains entries for up to two keys:
specs: list of the test suite’s specs in dictionary form alias: the alias, or name, given to the test suite if provided
- Return type:
- write_test_result(spec, result)[source]
Write the spec’s test result to the test suite results file.
- Parameters:
spec (spack.spec.Spec) – instance of the spec under test
result (str) – result from the spec’s test execution (e.g, PASSED)
- exception spack.install_test.TestSuiteError(message, long_message=None)[source]
Bases:
SpackError
Raised when there is an error with the test suite.
- exception spack.install_test.TestSuiteFailure(num_failures)[source]
Bases:
SpackError
Raised when one or more tests in a suite have failed.
- exception spack.install_test.TestSuiteNameError(message, long_message=None)[source]
Bases:
SpackError
Raised when there is an issue with the naming of the test suite.
- exception spack.install_test.TestSuiteSpecError(message, long_message=None)[source]
Bases:
SpackError
Raised when there is an issue associated with the spec being tested.
- spack.install_test.cache_extra_test_sources(pkg: Pb, srcs: str | List[str])[source]
Copy relative source paths to the corresponding install test subdir
This routine is intended as an optional install test setup helper for grabbing source files/directories during the installation process and copying them to the installation test subdirectory for subsequent use during install testing.
- Parameters:
pkg – package being tested
srcs – relative path for file(s) and or subdirectory(ies) located in the staged source path that are to be copied to the corresponding location(s) under the install testing directory.
- Raises:
spack.error.InstallError – if any of the source paths are absolute or do not exist under the build stage
- spack.install_test.check_outputs(expected: list | set | str, actual: str)[source]
Ensure the expected outputs are contained in the actual outputs.
- Parameters:
expected – expected raw output string(s)
actual – actual output string
- Raises:
RuntimeError – the expected output is not found in the actual output
- spack.install_test.copy_test_files(pkg: Pb, test_spec: Spec)[source]
Copy the spec’s cached and custom test files to the test stage directory.
- Parameters:
pkg – package being tested
test_spec – spec being tested, where the spec may be virtual
- Raises:
TestSuiteError – package must be part of an active test suite
- spack.install_test.find_required_file(root: str, filename: str, expected: int = 1, recursive: bool = True) str | List[str] [source]
Find the required file(s) under the root directory.
- Parameters:
root – root directory for the search
filename – name of the file being located
expected – expected number of files to be found under the directory (default is 1)
recursive –
True
if subdirectories are to be recursively searched, elseFalse
(default isTrue
)
Returns: the path(s), relative to root, to the required file(s)
- Raises:
Exception – SkipTest when number of files detected does not match expected
- spack.install_test.get_all_test_suites()[source]
Retrieves all validly staged TestSuites
- Returns:
a list of TestSuite objects, which may be empty if there are none
- Return type:
- spack.install_test.get_escaped_text_output(filename: str) List[str] [source]
Retrieve and escape the expected text output from the file
- Parameters:
filename – path to the file
- Returns:
escaped text lines read from the file
- spack.install_test.get_named_test_suites(name)[source]
Retrieves test suites with the provided name.
- spack.install_test.get_test_stage_dir()[source]
Retrieves the
config:test_stage
path to the configured test stage root directory- Returns:
- absolute path to the configured test stage root or, if none,
the default test stage path
- Return type:
- spack.install_test.get_test_suite(name: str) TestSuite | None [source]
Ensure there is only one matching test suite with the provided name.
- Returns:
the name if one matching test suite, else None
- Raises:
TestSuiteNameError – If there are more than one matching TestSuites
- spack.install_test.install_test_root(pkg: Pb)[source]
The install test root directory.
- Parameters:
pkg – package being tested
- spack.install_test.overall_status(current_status: TestStatus, substatuses: List[TestStatus]) TestStatus [source]
Determine the overall status based on the current and associated sub status values.
- Parameters:
current_status – current overall status, assumed to default to PASSED
substatuses – status of each test part or overall status of each test spec
- Returns:
test status encompassing the main test and all subtests
- spack.install_test.print_message(logger: nixlog | winlog, msg: str, verbose: bool = False)[source]
Print the message to the log, optionally echoing.
- Parameters:
logger – instance of the output logger (e.g. nixlog or winlog)
msg – message being output
verbose –
True
displays verbose output,False
suppresses it (False
is default)
- spack.install_test.process_test_parts(pkg: Pb, test_specs: List[Spec], verbose: bool = False)[source]
Process test parts associated with the package.
- Parameters:
pkg – package being tested
test_specs – list of test specs
verbose – Display verbose output (suppress by default)
- Raises:
TestSuiteError – package must be part of an active test suite
- spack.install_test.results_filename = 'results.txt'
Name of the test suite results (summary) file
- spack.install_test.spack_install_test_log = 'install-time-test-log.txt'
Name of the Spack install phase-time test log file
- spack.install_test.test_function_names(pkg: Pb | Type[Pb], add_virtuals: bool = False) List[str] [source]
Grab the names of all non-empty test functions.
- Parameters:
pkg – package or package class of interest
add_virtuals –
True
adds test methods of provided package virtual,False
only returns test functions of the package
- Returns:
names of non-empty test functions
- Raises:
ValueError – occurs if pkg is not a package class
- spack.install_test.test_functions(pkg: Pb | Type[Pb], add_virtuals: bool = False) List[Tuple[str, Callable]] [source]
Grab all non-empty test functions.
- Parameters:
pkg – package or package class of interest
add_virtuals –
True
adds test methods of provided package virtual,False
only returns test functions of the package
- Returns:
list of non-empty test functions’ (name, function)
- Raises:
ValueError – occurs if pkg is not a package class
- spack.install_test.test_part(pkg: Pb, test_name: str, purpose: str, work_dir: str = '.', verbose: bool = False)[source]
- spack.install_test.test_suite_filename = 'test_suite.lock'
Name of the test suite’s (JSON) lock file
- spack.install_test.virtuals(pkg)[source]
Return a list of unique virtuals for the package.
- Parameters:
pkg – package of interest
Returns: names of unique virtual packages
spack.installer module
This module encapsulates package installation functionality.
The PackageInstaller coordinates concurrent builds of packages for the same Spack instance by leveraging the dependency DAG and file system locks. It also proceeds with the installation of non-dependent packages of failed dependencies in order to install as many dependencies of a package as possible.
Bottom-up traversal of the dependency DAG while prioritizing packages with no uninstalled dependencies allows multiple processes to perform concurrent builds of separate packages associated with a spec.
File system locks enable coordination such that no two processes attempt to build the same or a failed dependency package.
If a dependency package fails to install, its dependents’ tasks will be removed from the installing process’s queue. A failure file is also written and locked. Other processes use this file to detect the failure and dequeue its dependents.
This module supports the coordination of local and distributed concurrent installations of packages in a Spack instance.
- exception spack.installer.BadInstallPhase(pkg_name, phase)[source]
Bases:
InstallError
Raised for an install phase option is not allowed for a package.
- class spack.installer.BuildProcessInstaller(pkg: PackageBase, install_args: dict)[source]
Bases:
object
This class implements the part installation that happens in the child process.
- class spack.installer.BuildRequest(pkg: PackageBase, install_args: dict)[source]
Bases:
object
Class for representing an installation request.
- get_depflags(pkg: PackageBase) int [source]
Determine the required dependency types for the associated package.
- Parameters:
pkg – explicit or implicit package being installed
- Returns:
required dependency type(s) for the package
- Return type:
- has_dependency(dep_id) bool [source]
Returns
True
if the package id represents a known dependency of the requested package,False
otherwise.
- run_tests(pkg: PackageBase) bool [source]
Determine if the tests should be run for the provided packages
- Parameters:
pkg – explicit or implicit package being installed
- Returns:
True
if they should be run;False
otherwise- Return type:
- class spack.installer.BuildStatus(value)[source]
Bases:
Enum
Different build (task) states.
- DEQUEUED = 5
Build status indicating the task has been popped from the queue
- FAILED = 2
Build status indicating the spec failed to install
- INSTALLED = 4
Build status indicating the spec was sucessfully installed
- INSTALLING = 3
Build status indicating the spec is being installed (possibly by another process)
- QUEUED = 1
Build status indicating task has been added/queued.
- REMOVED = 6
Build status indicating task has been removed (to maintain priority queue invariants).
- class spack.installer.BuildTask(pkg: PackageBase, request: BuildRequest, *, compiler: bool = False, start: float = 0.0, attempts: int = 0, status: BuildStatus = BuildStatus.QUEUED, installed: Set[str] = {})[source]
Bases:
Task
Class for representing a build task for a package.
- class spack.installer.ExecuteResult(value)[source]
Bases:
Enum
- FAILED = 2
- MISSING_BUILD_SPEC = 3
- SUCCESS = 1
- exception spack.installer.ExternalPackageError(message, long_msg=None, pkg=None)[source]
Bases:
InstallError
Raised by install() when a package is only for external use.
- class spack.installer.InstallAction(value)[source]
Bases:
Enum
- INSTALL = 2
Do a standard install
- NONE = 1
Don’t perform an install
- OVERWRITE = 3
Do an overwrite install
- exception spack.installer.InstallLockError(message, long_msg=None, pkg=None)[source]
Bases:
InstallError
Raised during install when something goes wrong with package locking.
- class spack.installer.InstallStatus(pkg_count: int)[source]
Bases:
object
- next_pkg(pkg: PackageBase)[source]
- class spack.installer.OverwriteInstall(installer: PackageInstaller, database: Database, task: Task, install_status: InstallStatus)[source]
Bases:
object
- class spack.installer.PackageInstaller(packages: List[PackageBase], *, cache_only: bool = False, dependencies_cache_only: bool = False, dependencies_use_cache: bool = True, dirty: bool = False, explicit: Set[str] | bool = False, overwrite: List[str] | Set[str] | None = None, fail_fast: bool = False, fake: bool = False, include_build_deps: bool = False, install_deps: bool = True, install_package: bool = True, install_source: bool = False, keep_prefix: bool = False, keep_stage: bool = False, package_cache_only: bool = False, package_use_cache: bool = True, restage: bool = False, skip_patch: bool = False, stop_at: str | None = None, stop_before: str | None = None, tests: bool | List[str] | Set[str] = False, unsigned: bool | None = None, use_cache: bool = False, verbose: bool = False)[source]
Bases:
object
Class for managing the install process for a Spack instance based on a bottom-up DAG approach.
This installer can coordinate concurrent batch and interactive, local and distributed (on a shared file system) builds for the same Spack instance.
- class spack.installer.RewireTask(pkg: PackageBase, request: BuildRequest, *, compiler: bool = False, start: float = 0.0, attempts: int = 0, status: BuildStatus = BuildStatus.QUEUED, installed: Set[str] = {})[source]
Bases:
Task
Class for representing a rewire task for a package.
- execute(install_status)[source]
Execute rewire task
Rewire tasks are executed by either rewiring self.package.spec.build_spec that is already installed or downloading and rewiring a binary for the it.
If not available installed or as binary, return ExecuteResult.MISSING_BUILD_SPEC. This will prompt the Installer to requeue the task with a dependency on the BuildTask to install self.pkg.spec.build_spec
- class spack.installer.Task(pkg: PackageBase, request: BuildRequest, *, compiler: bool = False, start: float = 0.0, attempts: int = 0, status: BuildStatus = BuildStatus.QUEUED, installed: Set[str] = {})[source]
Bases:
object
Base class for representing a task for a package.
- add_dependency(pkg_id, installed=False)[source]
Ensure the package is in this task’s
dependencies
list.
- add_dependent(pkg_id: str) None [source]
Ensure the package is in this task’s
dependents
list.- Parameters:
pkg_id – package identifier of the dependent package
- execute(install_status: InstallStatus) ExecuteResult [source]
Execute the work of this task.
The
install_status
is anInstallStatus
object used to format progress reporting for this task in the context of the fullBuildRequest
.
- flag_installed(installed: List[str]) None [source]
Ensure the dependency is not considered to still be uninstalled.
- Parameters:
installed – the identifiers of packages that have been installed so far
- next_attempt(installed) Task [source]
Create a new, updated task for the next installation attempt.
- property priority
The priority is based on the remaining uninstalled dependencies.
- class spack.installer.TermStatusLine(enabled: bool)[source]
Bases:
object
This class is used in distributed builds to inform the user that other packages are being installed by another process.
- exception spack.installer.UpstreamPackageError(message, long_msg=None, pkg=None)[source]
Bases:
InstallError
Raised during install when something goes wrong with an upstream package.
- spack.installer.archive_install_logs(pkg: PackageBase, phase_log_dir: str) None [source]
Copy install logs to their destination directory(ies) :param pkg: the package that was built and installed :param phase_log_dir: path to the archive directory
- spack.installer.build_process(pkg: PackageBase, install_args: dict) bool [source]
Perform the installation/build of the package.
This runs in a separate child process, and has its own process and python module space set up by build_environment.start_build_process().
This essentially wraps an instance of
BuildProcessInstaller
so that we can more easily create one in a subprocess.This function’s return value is returned to the parent process.
- Parameters:
pkg – the package being installed.
install_args – arguments to installer from parent process.
- spack.installer.combine_phase_logs(phase_log_files: List[str], log_path: str) None [source]
Read set or list of logs and combine them into one file.
Each phase will produce it’s own log, so this function aims to cat all the separate phase log output files into the pkg.log_path. It is written generally to accept some list of files, and a log path to combine them to.
- Parameters:
phase_log_files – a list or iterator of logs to combine
log_path – the path to combine them to
- spack.installer.deprecate(spec: Spec, deprecator: Spec, link_fn) None [source]
Deprecate this package in favor of deprecator spec
- spack.installer.dump_packages(spec: Spec, path: str) None [source]
Dump all package information for a spec and its dependencies.
This creates a package repository within path for every namespace in the spec DAG, and fills the repos with package files and patch files for every node in the DAG.
- Parameters:
spec – the Spack spec whose package information is to be dumped
path – the path to the build packages directory
- spack.installer.get_dependent_ids(spec: Spec) List[str] [source]
Return a list of package ids for the spec’s dependents
- Parameters:
spec – Concretized spec
Returns: list of package ids
- spack.installer.install_msg(name: str, pid: int, install_status: InstallStatus) str [source]
Colorize the name/id of the package being installed
- Parameters:
name – Name/id of the package being installed
pid – id of the installer process
Return: Colorized installing message
- spack.installer.log(pkg: PackageBase) None [source]
Copy provenance into the install directory on success
- Parameters:
pkg – the package that was built and installed
- spack.installer.package_id(spec: Spec) str [source]
A “unique” package identifier for installation purposes
The identifier is used to track tasks, locks, install, and failure statuses.
The identifier needs to distinguish between combinations of compilers and packages for combinatorial environments.
- Parameters:
pkg – the package from which the identifier is derived
- spack.installer.print_install_test_log(pkg: PackageBase) None [source]
Output install test log file path but only if have test failures.
- Parameters:
pkg – instance of the package under test
spack.main module
This is the implementation of the Spack command line executable.
In a normal Spack installation, this is invoked from the bin/spack script after the system path is set up.
- class spack.main.SpackArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], formatter_class=<class 'argparse.HelpFormatter'>, prefix_chars='-', fromfile_prefix_chars=None, argument_default=None, conflict_handler='error', add_help=True, allow_abbrev=True, exit_on_error=True)[source]
Bases:
ArgumentParser
- class spack.main.SpackCommand(command_name, subprocess=False)[source]
Bases:
object
Callable object that invokes a spack command (for testing).
Example usage:
install = SpackCommand('install') install('-v', 'mpich')
Use this to invoke Spack commands directly from Python and check their output.
- exception spack.main.SpackCommandError[source]
Bases:
Exception
Raised when SpackCommand execution fails.
- class spack.main.SpackHelpFormatter(prog, indent_increment=2, max_help_position=24, width=None)[source]
Bases:
RawTextHelpFormatter
- spack.main.add_command_line_scopes(cfg: Configuration, command_line_scopes: List[str]) None [source]
Add additional scopes from the –config-scope argument, either envs or dirs.
- Parameters:
cfg – configuration instance
command_line_scopes – list of configuration scope paths
- Raises:
spack.error.ConfigError – if the path is an invalid configuration scope
- spack.main.allows_unknown_args(command)[source]
Implements really simple argument injection for unknown arguments.
Commands may add an optional argument called “unknown args” to indicate they can handle unknonwn args, and we’ll pass the unknown args in.
- spack.main.finish_parse_and_run(parser, cmd_name, main_args, env_format_error)[source]
Finish parsing after we know the command to run.
- spack.main.intro_by_level = {'long': 'Complete list of spack commands:', 'short': 'These are common spack commands:'}
intro text for help at different levels
- spack.main.levels = ['short', 'long']
help levels in order of detail (i.e., number of commands shown)
- spack.main.main(argv=None)[source]
This is the entry point for the Spack command.
main()
itself is just an error handler – it handles errors for everything in Spack that makes it to the top level.The logic is all in
_main()
.- Parameters:
argv (list or None) – command line arguments, NOT including the executable name. If None, parses from sys.argv.
- spack.main.make_argument_parser(**kwargs)[source]
Create an basic argument parser without any subcommands added.
- spack.main.options_by_level = {'long': 'all', 'short': ['h', 'k', 'V', 'color']}
control top-level spack options shown in basic vs. advanced help
- spack.main.print_setup_info(*info)[source]
Print basic information needed by setup-env.[c]sh.
- Parameters:
info (list) – list of things to print: comma-separated list of ‘csh’, ‘sh’, or ‘modules’
This is in
main.py
to make it fast; the setup scripts need to invoke spack in login scripts, and it needs to be quick.
- spack.main.required_command_properties = ['level', 'section', 'description']
Properties that commands are required to set.
- spack.main.resolve_alias(cmd_name: str, cmd: List[str]) Tuple[str, List[str]] [source]
Resolves aliases in the given command.
- Parameters:
cmd_name – command name.
cmd – command line arguments.
- Returns:
new command name and arguments.
- spack.main.restore_macos_dyld_vars()[source]
Spack mutates DYLD_* variables in spack load and spack env activate. Unlike Linux, macOS SIP clears these variables in new processes, meaning that os.environ[“DYLD_*”] in our Python process is not the same as the user’s shell. Therefore, we store the user’s DYLD_* variables in SPACK_DYLD_* and restore them here.
- spack.main.section_descriptions = {'admin': 'administration', 'basic': 'query packages', 'build': 'build packages', 'config': 'configuration', 'developer': 'developer', 'environment': 'environment', 'extensions': 'extensions', 'help': 'more help', 'packaging': 'create packages', 'system': 'system'}
Longer text for each section, to show in help
- spack.main.section_order = {'basic': ['list', 'info', 'find'], 'build': ['fetch', 'stage', 'patch', 'configure', 'build', 'restage', 'install', 'uninstall', 'clean'], 'packaging': ['create', 'edit']}
preferential command order for some sections (e.g., build pipeline is in execution order, not alphabetical)
- spack.main.showwarning(message, category, filename, lineno, file=None, line=None)[source]
Redirects messages to tty.warn.
- spack.main.stat_names = {'calls': (((1, -1),), 'call count'), 'cumtime': (((3, -1),), 'cumulative time'), 'cumulative': (((3, -1),), 'cumulative time'), 'filename': (((4, 1),), 'file name'), 'line': (((5, 1),), 'line number'), 'module': (((4, 1),), 'file name'), 'name': (((6, 1),), 'function name'), 'ncalls': (((1, -1),), 'call count'), 'nfl': (((6, 1), (4, 1), (5, 1)), 'name/file/line'), 'pcalls': (((0, -1),), 'primitive call count'), 'stdname': (((7, 1),), 'standard name'), 'time': (((2, -1),), 'internal time'), 'tottime': (((2, -1),), 'internal time')}
names of profile statistics
spack.mixins module
This module contains additional behavior that can be attached to any given package.
- spack.mixins.filter_compiler_wrappers(*files, **kwargs)[source]
Substitutes any path referring to a Spack compiler wrapper with the path of the underlying compiler that has been used.
If this isn’t done, the files will have CC, CXX, F77, and FC set to Spack’s generic cc, c++, f77, and f90. We want them to be bound to whatever compiler they were built with.
- Parameters:
*files – files to be filtered relative to the search root (which is, by default, the installation prefix)
**kwargs –
allowed keyword arguments
- after
specifies after which phase the files should be filtered (defaults to ‘install’)
- relative_root
path relative to prefix where to start searching for the files to be filtered. If not set the install prefix wil be used as the search root. It is highly recommended to set this, as searching from the installation prefix may affect performance severely in some cases.
- ignore_absent, backup
these two keyword arguments, if present, will be forwarded to
filter_file
(see its documentation for more information on their behavior)- recursive
this keyword argument, if present, will be forwarded to
find
(see its documentation for more information on the behavior)
spack.multimethod module
This module contains utilities for using multi-methods in spack. You can think of multi-methods like overloaded methods – they’re methods with the same name, and we need to select a version of the method based on some criteria. e.g., for overloaded methods, you would select a version of the method to call based on the types of its arguments.
In spack, multi-methods are used to ease the life of package authors. They allow methods like install() (or other methods called by install()) to declare multiple versions to be called when the package is instantiated with different specs. e.g., if the package is built with OpenMPI on x86_64,, you might want to call a different install method than if it was built for mpich2 on BlueGene/Q. Likewise, you might want to do a different type of install for different versions of the package.
Multi-methods provide a simple decorator-based syntax for this that avoids overly complicated rat nests of if statements. Obviously, depending on the scenario, regular old conditionals might be clearer, so package authors should use their judgement.
- exception spack.multimethod.MultiMethodError(message)[source]
Bases:
SpackError
Superclass for multimethod dispatch errors
- class spack.multimethod.MultiMethodMeta(name, bases, attr_dict)[source]
Bases:
type
This allows us to track the class’s dict during instantiation.
- exception spack.multimethod.NoSuchMethodError(cls, method_name, spec, possible_specs)[source]
Bases:
SpackError
Raised when we can’t find a version of a multi-method.
- class spack.multimethod.SpecMultiMethod(default=None)[source]
Bases:
object
This implements a multi-method for Spack specs. Packages are instantiated with a particular spec, and you may want to execute different versions of methods based on what the spec looks like. For example, you might want to call a different version of install() for one platform than you call on another.
The SpecMultiMethod class implements a callable object that handles method dispatch. When it is called, it looks through registered methods and their associated specs, and it tries to find one that matches the package’s spec. If it finds one (and only one), it will call that method.
This is intended for use with decorators (see below). The decorator (see docs below) creates SpecMultiMethods and registers method versions with them.
- To register a method, you can do something like this:
mm = SpecMultiMethod() mm.register(“^chaos_5_x86_64_ib”, some_method)
The object registered needs to be a Spec or some string that will parse to be a valid spec.
When the mm is actually called, it selects a version of the method to call based on the sys_type of the object it is called on.
See the docs for decorators below for more details.
spack.package module
spack.package defines the public API for Spack packages, by re-exporting useful symbols from other modules. Packages should import this module, instead of importing from spack.* directly to ensure forward compatibility with future versions of Spack.
- spack.package.configure: Executable
- spack.package.make: MakeExecutable
- spack.package.ninja: MakeExecutable
- spack.package.python: Executable
spack.package_base module
This is where most of the action happens in Spack.
The spack package class structure is based strongly on Homebrew (http://brew.sh/), mainly because Homebrew makes it very easy to create packages.
- exception spack.package_base.ActivationError(msg, long_msg=None)[source]
Bases:
ExtensionError
Raised when there are problems activating an extension.
- exception spack.package_base.DependencyConflictError(conflict)[source]
Bases:
SpackError
Raised when the dependencies cannot be flattened as asked for.
- class spack.package_base.DetectablePackageMeta(name, bases, attr_dict)[source]
Bases:
type
Check if a package is detectable and add default implementations for the detection function.
- TAG = 'detectable'
- exception spack.package_base.ExtensionError(message, long_msg=None)[source]
Bases:
PackageError
Superclass for all errors having to do with extension packages.
- exception spack.package_base.InvalidPackageOpError(message, long_msg=None)[source]
Bases:
PackageError
Raised when someone tries perform an invalid operation on a package.
- exception spack.package_base.ManualDownloadRequiredError(message, long_msg=None)[source]
Bases:
InvalidPackageOpError
Raised when attempting an invalid operation on a package that requires a manual download.
- class spack.package_base.PackageBase(spec)[source]
Bases:
WindowsRPath
,PackageViewMixin
This is the superclass for all spack packages.
*The Package class*
At its core, a package consists of a set of software to be installed. A package may focus on a piece of software and its associated software dependencies or it may simply be a set, or bundle, of software. The former requires defining how to fetch, verify (via, e.g., sha256), build, and install that software and the packages it depends on, so that dependencies can be installed along with the package itself. The latter, sometimes referred to as a
no-source
package, requires only defining the packages to be built.Packages are written in pure Python.
There are two main parts of a Spack package:
The package class. Classes contain
directives
, which are special functions, that add metadata (versions, patches, dependencies, and other information) to packages (seedirectives.py
). Directives provide the constraints that are used as input to the concretizer.Package instances. Once instantiated, a package can be passed to the PackageInstaller. It calls methods like
do_stage()
on thePackage
object, and it uses those to drive user-implemented methods likepatch()
,install()
, and other build steps. To install software, an instantiated package needs a concrete spec, which guides the behavior of the various install methods.
Packages are imported from repos (see
repo.py
).Package DSL
Look in
lib/spack/docs
or check https://spack.readthedocs.io for the full documentation of the package domain-specific language. That used to be partially documented here, but as it grew, the docs here became increasingly out of date.Package Lifecycle
A package’s lifecycle over a run of Spack looks something like this:
p = Package() # Done for you by spack p.do_fetch() # downloads tarball from a URL (or VCS) p.do_stage() # expands tarball in a temp directory p.do_patch() # applies patches to expanded source p.do_uninstall() # removes install directory
although packages that do not have code have nothing to fetch so omit
p.do_fetch()
.There are also some other commands that clean the build area:
p.do_clean() # removes the stage directory entirely p.do_restage() # removes the build directory and # re-expands the archive.
The convention used here is that a
do_*
function is intended to be called internally by Spack commands (inspack.cmd
). These aren’t for package writers to override, and doing so may break the functionality of the Package class.Package creators have a lot of freedom, and they could technically override anything in this class. That is not usually required.
For most use cases. Package creators typically just add attributes like
homepage
and, for a code-based package,url
, or functions such asinstall()
. There are many customPackage
subclasses in thespack.build_systems
package that make things even easier for specific build systems.- classmethod all_patches()[source]
Retrieve all patches associated with the package.
Retrieves patches on the package itself as well as patches on the dependencies of the package.
- property all_urls: List[str]
A list of all URLs in a package.
Check both class-level and version-specific URLs.
Returns a list of URLs
- all_urls_for_version(version: StandardVersion) List[str] [source]
Return all URLs derived from version_urls(), url, urls, and list_url (if it contains a version) in a package in that order.
- Parameters:
version – the version for which a URL is sought
- classmethod build_system_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None] [source]
flag_handler that passes flags to the build system arguments. Any package using build_system_flags must also implement flags_to_build_system_args, or derive from a class that implements it. Currently, AutotoolsPackage and CMakePackage implement it.
- property cmake_prefix_paths
- property command: Executable
Returns the main executable for this package.
- property compiler
Get the spack.compiler.Compiler object used to build this package
- property configure_args_path
Return the configure args file path associated with staging.
- content_hash(content: bytes | None = None) str [source]
Create a hash based on the artifacts and patches used to build this package.
- This includes:
source artifacts (tarballs, repositories) used to build;
content hashes (
sha256
’s) of all patches applied by Spack; andcanonicalized contents the
package.py
recipe used to build.
This hash is only included in Spack’s DAG hash for concrete specs, but if it happens to be called on a package with an abstract spec, only applicable (i.e., determinable) portions of the hash will be included.
- classmethod dependencies_of_type(deptypes: int)[source]
Get names of dependencies that can possibly have these deptypes.
This analyzes the package and determines which dependencies can be a certain kind of dependency. Note that they may not always be this kind of dependency, since dependencies can be optional, so something may be a build dependency in one configuration and a run dependency in another.
- detect_dev_src_change() bool [source]
Method for checking for source code changes to trigger rebuild/reinstall
- disable_redistribute: Dict[Spec, DisableRedistribute]
Store whether a given Spec source/binary should not be redistributed.
- do_fetch(mirror_only=False)[source]
Creates a stage directory and downloads the tarball for this package. Working directory will be set to the stage directory.
- property download_instr
Defines the default manual download instructions. Packages can override the property to provide more information.
- Returns:
default manual download instructions
- Return type:
(str)
- classmethod env_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None] [source]
flag_handler that adds all flags to canonical environment variables.
- property env_mods_path
Return the build environment modifications file path associated with staging.
- property env_path
Return the build environment file path associated with staging.
- extendable = False
Most packages are NOT extendable. Set to True if you want extensions.
- property extendee_spec
Spec of the extendee of this package, or None if it is not an extension
- extends(spec)[source]
Returns True if this package extends the given spec.
If
self.spec
is concrete, this returns whether this package extends the given spec.If
self.spec
is not concrete, this returns whether this package may extend the given spec.
- fetch_remote_versions(concurrency: int | None = None) Dict[StandardVersion, str] [source]
Find remote versions of this package.
Uses
list_url
and any other URLs listed in the package file.- Returns:
a dictionary mapping versions to URLs
- Return type:
- property fetcher
- find_valid_url_for_version(version)[source]
Returns a URL from which the specified version of this package may be downloaded after testing whether the url is valid. Will try url, urls, and list_url before failing.
- version: class Version
The version for which a URL is sought.
See Class Version (version.py)
- property flag_handler: Callable[[str, Iterable[str]], Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None]]
- fullname = 'spack.package_base'
- fullnames = ['spack.package_base']
- get_variant(name: str) Variant [source]
Get the highest precedence variant definition matching this package’s spec.
- Parameters:
name – name of the variant definition to get
- global_license_dir = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/etc/spack/licenses'
- property global_license_file
Returns the path where a global license file for this particular package should be stored.
- has_code = True
Most Spack packages are used to install source or binary code while those that do not can be used to install a set of other Spack packages.
- property home
- homepage: str | None = None
Package homepage where users can find more information about the package
- classmethod inject_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None] [source]
flag_handler that injects all flags through the compiler wrapper.
- property install_configure_args_path
Return the configure args file path on successful installation.
- property install_env_path
Return the build environment file path on successful installation.
- property install_log_path
Return the (compressed) build log file path on successful installation
- property is_extension
- property keep_werror: Literal['all', 'specific', 'none'] | None
Keep
-Werror
flags, matchesconfig:flags:keep_werror
to override config.Valid return values are: *
"all"
: keep all-Werror
flags. *"specific"
: keep only-Werror=specific-warning
flags. *"none"
: filter out all-Werror*
flags. *None
: respect the user’s configuration ("none"
by default).
- license_comment = '#'
String. Contains the symbol used by the license manager to denote a comment. Defaults to
#
.
- license_files: List[str] = []
List of strings. These are files that the software searches for when looking for a license. All file paths must be relative to the installation directory. More complex packages like Intel may require multiple licenses for individual components. Defaults to the empty list.
- license_required = False
Boolean. If set to
True
, this software requires a license. If set toFalse
, all of thelicense_*
attributes will be ignored. Defaults toFalse
.
- license_url = ''
String. A URL pointing to license setup instructions for the software. Defaults to the empty string.
- license_vars: List[str] = []
List of strings. Environment variables that can be set to tell the software where to look for a license if it is not in the usual location. Defaults to the empty list.
- list_depth = 0
Link depth to which list_url should be searched for new versions
- property log_path
Return the build log file path associated with staging.
- maintainers: List[str] = []
List of strings which contains GitHub usernames of package maintainers. Do not include @ here in order not to unnecessarily ping the users.
- manual_download = False
Boolean. Set to
True
for packages that require a manual download. This is currently used by package sanity tests and generation of a more meaningful fetch failure error.
- property metadata_dir
Return the install metadata directory.
- module = <module 'spack.package_base' from '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/lib/spack/spack/package_base.py'>
- name = 'package_base'
- namespace = 'spack'
- nearest_url(version)[source]
Finds the URL with the “closest” version to
version
.This uses the following precedence order:
Find the next lowest or equal version with a URL.
If no lower URL, return the next higher URL.
If no higher URL, return None.
List of shared objects that should be replaced with a different library at runtime. Typically includes stub libraries like libcuda.so. When linking against a library listed here, the dependent will only record its soname or filename, not its absolute path, so that the dynamic linker will search for it. Note: accepts both file names and directory names, for example
["libcuda.so", "stubs"]
will ensure libcuda.so and all libraries in the stubs directory are not bound by path.”””
- classmethod num_variant_definitions() int [source]
Total number of variant definitions in this class so far.
- package_dir = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/lib/spack/spack'
- parallel = True
By default we build in parallel. Subclasses can override this.
- property phase_log_files
Find sorted phase log files written to the staging directory
- property prefix
Get the prefix into which this package should be installed.
- classmethod provided_virtual_names()[source]
Return sorted list of names of virtuals that can be provided by this package.
- provides(vpkg_name)[source]
True if this package provides a virtual package with the specified name
- property redistribute_binary
Whether it should be possible to create a binary out of an installed instance of this package.
- classmethod redistribute_source(spec)[source]
Whether it should be possible to add the source of this package to a Spack mirror.
- property rpath
Get the rpath this package links with, as a list of paths.
- property rpath_args
Get the rpath args as a string, with -Wl,-rpath, for each element
- run_after_callbacks = []
- run_before_callbacks = []
- run_tests = False
By default do not run tests within package’s install()
- sanity_check_is_dir: List[str] = []
List of prefix-relative directory paths (or a single path). If these do not exist after install, or if they exist but are not directories, sanity checks will fail.
- sanity_check_is_file: List[str] = []
List of prefix-relative file paths (or a single path). If these do not exist after install, or if they exist but are not files, sanity checks fail.
- setup_dependent_package(module, dependent_spec: Spec) None [source]
Set up module-scope global variables for dependent packages.
This function is called when setting up the build and run environments of a DAG.
Examples:
Extensions often need to invoke the
python
interpreter from the Python installation being extended. This routine can put apython
Executable as a global in the module scope for the extension package to simplify extension installs.MPI compilers could set some variables in the dependent’s scope that point to
mpicc
,mpicxx
, etc., allowing them to be called by common name regardless of which MPI is used.
- Parameters:
module – The Python
module
object of the dependent package. Packages can use this to set module-scope variables for the dependent to use.dependent_spec – The spec of the dependent package about to be built. This allows the extendee (self) to query the dependent’s state. Note that this package’s spec is available as
self.spec
.
- setup_dependent_run_environment(env: EnvironmentModifications, dependent_spec: Spec) None [source]
Sets up the run environment of packages that depend on this one.
This is similar to
setup_run_environment
, but it is used to modify the run environment of a package that depends on this one.This gives packages like Python and others that follow the extension model a way to implement common environment or run-time settings for dependencies.
- Parameters:
env – environment modifications to be applied when the dependent package is run. Package authors can call methods on it to alter the build environment.
dependent_spec – The spec of the dependent package about to be run. This allows the extendee (self) to query the dependent’s state. Note that this package’s spec is available as
self.spec
- setup_run_environment(env: EnvironmentModifications) None [source]
Sets up the run environment for a package.
- Parameters:
env – environment modifications to be applied when the package is run. Package authors can call methods on it to alter the run environment.
- property stage
Get the build staging area for this package.
This automatically instantiates a
Stage
object if the package doesn’t have one yet, but it does not create the Stage directory on the filesystem.
- test_requires_compiler: bool = False
Set to
True
to indicate the stand-alone test requires a compiler. It is used to ensure a compiler and build dependencies like ‘cmake’ are available to build a custom test code.
- property tester
- property times_log_path
Return the times log json file.
- transitive_rpaths = True
When True, add RPATHs for the entire DAG. When False, add RPATHs only for immediate dependencies.
- unit_test_check()[source]
Hook for unit tests to assert things about package internals.
Unit tests can override this function to perform checks after
Package.install
and all post-install hooks run, but before the database is updated.The overridden function may indicate that the install procedure should terminate early (before updating the database) by returning
False
(or any value such thatbool(result)
isFalse
).- Returns:
True
to continue,False
to skipinstall()
- Return type:
(bool)
- unresolved_libraries: List[str] = []
List of fnmatch patterns of library file names (specifically DT_NEEDED entries) that are not expected to be locatable in RPATHs. Generally this is a problem, and Spack install with config:shared_linking:strict will cause install failures if such libraries are found. However, in certain cases it can be hard if not impossible to avoid accidental linking against system libraries; until that is resolved, this attribute can be used to suppress errors.
- update_external_dependencies(extendee_spec=None)[source]
Method to override in package classes to handle external dependencies
- url_for_version(version)[source]
Returns a URL from which the specified version of this package may be downloaded.
- version: class Version
The version for which a URL is sought.
See Class Version (version.py)
- url_version(version)[source]
Given a version, this returns a string that should be substituted into the package’s URL to download that version.
By default, this just returns the version string. Subclasses may need to override this, e.g. for boost versions where you need to ensure that there are _’s in the download URL.
- classmethod variant_definitions(name: str) List[Tuple[Spec, Variant]] [source]
Iterator over (when_spec, Variant) for all variant definitions for a particular name.
- classmethod variant_items() Iterable[Tuple[Spec, Dict[str, Variant]]] [source]
Iterate over
cls.variants.items()
with overridden definitions removed.
- property version
- classmethod version_urls() Dict[StandardVersion, str] [source]
Dict of explicitly defined URLs for versions of this package.
- Returns:
An dict mapping version to url, ordered by version.
A version’s URL only appears in the result if it has an an explicitly defined
url
argument. So, this list may be empty if a package only definesurl
at the top level.
- view()[source]
Create a view with the prefix of this package as the root. Extensions added to this view will modify the installation prefix of this package.
- virtual = False
By default, packages are not virtual Virtual packages override this attribute
- property virtuals_provided
virtual packages provided by this package with its spec
- class spack.package_base.PackageMeta(name, bases, attr_dict)[source]
Bases:
PhaseCallbacksMeta
,DetectablePackageMeta
,DirectiveMeta
,MultiMethodMeta
Package metaclass for supporting directives (e.g., depends_on) and phases
- exception spack.package_base.PackageStillNeededError(spec, dependents)[source]
Bases:
InstallError
Raised when package is still needed by another on uninstall.
- class spack.package_base.PackageViewMixin[source]
Bases:
object
This collects all functionality related to adding installed Spack package to views. Packages can customize how they are added to views by overriding these functions.
- add_files_to_view(view, merge_map, skip_if_exists=True)[source]
Given a map of package files to destination paths in the view, add the files to the view. By default this adds all files. Alternative implementations may skip some files, for example if other packages linked into the view already include the file.
- Parameters:
view (spack.filesystem_view.FilesystemView) – the view that’s updated
merge_map (dict) – maps absolute source paths to absolute dest paths for all files in from this package.
skip_if_exists (bool) – when True, don’t link files in view when they already exist. When False, always link files, without checking if they already exist.
- remove_files_from_view(view, merge_map)[source]
Given a map of package files to files currently linked in the view, remove the files from the view. The default implementation removes all files. Alternative implementations may not remove all files. For example if two packages include the same file, it should only be removed when both packages are removed.
- view_destination(view)[source]
The target root directory: each file is added relative to this directory.
- view_file_conflicts(view, merge_map)[source]
Report any files which prevent adding this package to the view. The default implementation looks for any files which already exist. Alternative implementations may allow some of the files to exist in the view (in this case they would be omitted from the results).
- class spack.package_base.WindowsRPath[source]
Bases:
object
Collection of functionality surrounding Windows RPATH specific features
This is essentially meaningless for all other platforms due to their use of RPATH. All methods within this class are no-ops on non Windows. Packages can customize and manipulate this class as they would a genuine RPATH, i.e. adding directories that contain runtime library dependencies
- win_add_library_dependent()[source]
Return extra set of directories that require linking for package
This method should be overridden by packages that produce binaries/libraries/python extension modules/etc that are installed into directories outside a package’s bin, lib, and lib64 directories, but still require linking against one of the packages dependencies, or other components of the package itself. No-op otherwise.
- Returns:
List of additional directories that require linking
- spack.package_base.build_system_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None]
flag_handler that passes flags to the build system arguments. Any package using build_system_flags must also implement flags_to_build_system_args, or derive from a class that implements it. Currently, AutotoolsPackage and CMakePackage implement it.
- spack.package_base.deprecated_version(pkg: PackageBase, version: str | StandardVersion) bool [source]
Return True iff the version is deprecated.
- Parameters:
pkg – The package whose version is to be checked.
version – The version being checked
- spack.package_base.detectable_packages = {}
Registers which are the detectable packages, by repo and package name Need a pass of package repositories to be filled.
- spack.package_base.env_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None]
flag_handler that adds all flags to canonical environment variables.
- spack.package_base.inject_flags(name: str, flags: Iterable[str]) Tuple[Iterable[str] | None, Iterable[str] | None, Iterable[str] | None]
flag_handler that injects all flags through the compiler wrapper.
- spack.package_base.on_package_attributes(**attr_dict)[source]
Decorator: executes instance function only if object has attr valuses.
Executes the decorated method only if at the moment of calling the instance has attributes that are equal to certain values.
- Parameters:
attr_dict (dict) – dictionary mapping attribute names to their required values
- spack.package_base.preferred_version(pkg: PackageBase)[source]
Returns a sorted list of the preferred versions of the package.
- Parameters:
pkg – The package whose versions are to be assessed.
- spack.package_base.spack_times_log = 'install_times.json'
Filename of json with total build and phase times (seconds)
spack.package_completions module
- spack.package_completions.bash_completion_path(root: str | Path) Path [source]
Return standard path for bash completion scripts under root.
- Parameters:
root – The prefix root under which to generate the path.
- Returns:
Standard path for bash completion scripts under root.
spack.package_prefs module
- class spack.package_prefs.PackagePrefs(pkgname, component, vpkg=None, all=True)[source]
Bases:
object
Defines the sort order for a set of specs.
Spack’s package preference implementation uses PackagePrefss to define sort order. The PackagePrefs class looks at Spack’s packages.yaml configuration and, when called on a spec, returns a key that can be used to sort that spec in order of the user’s preferences.
You can use it like this:
# key function sorts CompilerSpecs for mpich in order of preference kf = PackagePrefs(‘mpich’, ‘compiler’) compiler_list.sort(key=kf)
Or like this:
# key function to sort VersionLists for OpenMPI in order of preference. kf = PackagePrefs(‘openmpi’, ‘version’) version_list.sort(key=kf)
Optionally, you can sort in order of preferred virtual dependency providers. To do that, provide ‘providers’ and a third argument denoting the virtual package (e.g.,
mpi
):kf = PackagePrefs(‘trilinos’, ‘providers’, ‘mpi’) provider_spec_list.sort(key=kf)
- classmethod has_preferred_providers(pkgname, vpkg)[source]
Whether specific package has a preferred vpkg providers.
- classmethod has_preferred_targets(pkg_name)[source]
Whether specific package has a preferred vpkg providers.
- exception spack.package_prefs.VirtualInPackagesYAMLError(message, long_message=None)[source]
Bases:
SpackError
Raised when a disallowed virtual is found in packages.yaml
- spack.package_prefs.get_package_dir_permissions(spec)[source]
Return the permissions configured for the spec.
Include the GID bit if group permissions are on. This makes the group attribute sticky for the directory. Package-specific settings take precedent over settings for
all
- spack.package_prefs.get_package_group(spec)[source]
Return the unix group associated with the spec.
Package-specific settings take precedence over settings for
all
spack.package_test module
- spack.package_test.compare_output(current_output, blessed_output)[source]
Compare blessed and current output of executables.
spack.patch module
- class spack.patch.FilePatch(pkg: PackageBase | Type[PackageBase], relative_path: str, level: int, working_dir: str, reverse: bool = False, ordering_key: Tuple[str, int] | None = None)[source]
Bases:
Patch
Describes a patch that is retrieved from a file in the repository.
- class spack.patch.Patch(pkg: PackageBase | Type[PackageBase], path_or_url: str, level: int, working_dir: str, reverse: bool = False, ordering_key: Tuple[str, int] | None = None)[source]
Bases:
object
Base class for patches.
The owning package is not necessarily the package to apply the patch to – in the case where a dependent package patches its dependency, it is the dependent’s fullname.
- class spack.patch.PatchCache(repository: RepoPath, data: Dict[str, Any] | None = None)[source]
Bases:
object
Index of patches used in a repository, by sha256 hash.
This allows us to look up patches without loading all packages. It’s also needed to properly implement dependency patching, as need a way to look up patches that come from packages not in the Spec sub-DAG.
The patch index is structured like this in a file (this is YAML, but we write JSON):
patches: sha256: namespace1.package1: <patch json> namespace2.package2: <patch json> ... etc. ...
- classmethod from_json(stream: Any, repository: RepoPath) PatchCache [source]
Initialize a new PatchCache instance from JSON.
- Parameters:
stream – stream of data
repository – repository containing package
- Returns:
A new PatchCache instance.
- patch_for_package(sha256: str, pkg: PackageBase) Patch [source]
Look up a patch in the index and build a patch object for it.
We build patch objects lazily because building them requires that we have information about the package’s location in its repo.
- Parameters:
sha256 – sha256 hash to look up
pkg – Package object to get patch for.
- Returns:
The patch object.
- to_json(stream: Any) None [source]
Dump a JSON representation to a stream.
- Parameters:
stream – stream of data
- update(other: PatchCache) None [source]
Update this cache with the contents of another.
- Parameters:
other – another patch cache to merge
- class spack.patch.UrlPatch(pkg: PackageBase | Type[PackageBase], url: str, level: int = 1, *, working_dir: str = '.', reverse: bool = False, sha256: str, ordering_key: Tuple[str, int] | None = None, archive_sha256: str | None = None)[source]
Bases:
Patch
Describes a patch that is retrieved from a URL.
- apply(stage: Stage) None [source]
Apply a patch to source in a stage.
- Parameters:
stage – stage where source code lives
- spack.patch.apply_patch(stage: Stage, patch_path: str, level: int = 1, working_dir: str = '.', reverse: bool = False) None [source]
Apply the patch at patch_path to code in the stage.
- Parameters:
stage – stage with code that will be patched
patch_path – filesystem location for the patch to apply
level – patch level
working_dir – relative path within the stage to change to
reverse – reverse the patch
- spack.patch.from_dict(dictionary: Dict[str, Any], repository: RepoPath | None = None) Patch [source]
Create a patch from json dictionary.
- Parameters:
dictionary – dictionary representation of a patch
repository – repository containing package
- Returns:
A patch object.
- Raises:
ValueError – If owner or url/relative_path are missing in the dictionary.
spack.paths module
Defines paths that are part of Spack’s directory structure.
Do not import other spack
modules here. This module is used
throughout Spack and should bring in a minimal number of external
dependencies.
- spack.paths.bin_path = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/bin'
bin directory in the spack prefix
- spack.paths.default_conc_cache_path = '/home/docs/.spack/cache/concretization'
concretization cache for Spack concretizations
- spack.paths.default_misc_cache_path = '/home/docs/.spack/cache'
transient caches for Spack data (virtual cache, patch sha256 lookup, etc.)
- spack.paths.default_monitor_path = '/home/docs/.spack/reports/monitor'
spack monitor analysis directories
- spack.paths.default_test_path = '/home/docs/.spack/test'
installation test (spack test) output
- spack.paths.default_user_bootstrap_path = '/home/docs/.spack/bootstrap'
bootstrap store for bootstrapping clingo and other tools
- spack.paths.prefix = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root'
This file lives in $prefix/lib/spack/spack/__file__
- spack.paths.reports_path = '/home/docs/.spack/reports'
junit, cdash, etc. reports about builds
- spack.paths.sbang_script = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/bin/sbang'
The sbang script in the spack installation
- spack.paths.set_working_dir()[source]
Change the working directory to getcwd, or spack prefix if no cwd.
- spack.paths.spack_root = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root'
synonym for prefix
- spack.paths.spack_script = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/bin/spack'
The spack script itself
- spack.paths.spack_working_dir = None
Recorded directory where spack command was originally invoked
- spack.paths.system_config_path = '/etc/spack'
System configuration location
- spack.paths.user_config_path = '/home/docs/.spack'
User configuration location
- spack.paths.user_repos_cache_path = '/home/docs/.spack/git_repos'
git repositories fetched to compare commits to versions
spack.phase_callbacks module
- class spack.phase_callbacks.CallbackTemporaryStage(attribute_name, callbacks)
Bases:
tuple
An object of this kind is a shared global state used to collect callbacks during class definition time, and is flushed when the class object is created at the end of the class definition
- Parameters:
- attribute_name
Alias for field number 0
- callbacks
Alias for field number 1
- class spack.phase_callbacks.PhaseCallbacksMeta(name, bases, attr_dict)[source]
Bases:
type
Permit to register arbitrary functions during class definition and run them later, before or after a given install phase.
Each method decorated with
run_before
orrun_after
gets temporarily stored in a global shared state when a class being defined is parsed by the Python interpreter. At class definition time that temporary storage gets flushed and a list of callbacks is attached to the class being defined.
- spack.phase_callbacks.run_after(phase, when=None)
Decorator to register a function for running after a given phase.
spack.projections module
spack.provider_index module
Classes and functions to manage providers of virtual dependencies
- class spack.provider_index.ProviderIndex(repository: Repo | RepoPath, specs: List[Spec] | None = None, restrict: bool = False)[source]
Bases:
_IndexBase
- static from_json(stream, repository)[source]
Construct a provider index from its JSON representation.
- Parameters:
stream – stream where to read from the JSON data
- merge(other)[source]
Merge another provider index into this one.
- Parameters:
other (ProviderIndex) – provider index to be merged
- exception spack.provider_index.ProviderIndexError(message, long_message=None)[source]
Bases:
SpackError
Raised when there is a problem with a ProviderIndex.
spack.relocate module
- spack.relocate.fixup_macos_rpath(root, filename)[source]
Apply rpath fixups to the given file.
- Parameters:
root – absolute path to the parent directory
filename – relative path to the library or binary
- Returns:
True if fixups were applied, else False
- spack.relocate.fixup_macos_rpaths(spec)[source]
Remove duplicate and nonexistent rpaths.
Some autotools packages write their own
-rpath
entries in addition to those implicitly added by the Spack compiler wrappers. On Linux these duplicate rpaths are eliminated, but on macOS they result in multiple entries which makes it harder to adjust withinstall_name_tool -delete_rpath
.
- spack.relocate.relocate_elf_binaries(binaries: Iterable[str], prefix_to_prefix: Dict[str, str]) None [source]
Take a list of binaries, and an ordered prefix to prefix mapping, and update the rpaths accordingly.
- spack.relocate.relocate_links(links: Iterable[str], prefix_to_prefix: Dict[str, str]) None [source]
Relocate links to a new install prefix.
- spack.relocate.relocate_macho_binaries(path_names, prefix_to_prefix)[source]
Use macholib python package to get the rpaths, depedent libraries and library identity for libraries from the MachO object. Modify them with the replacement paths queried from the dictionary mapping old layout prefixes to hashes and the dictionary mapping hashes to the new layout prefixes.
- spack.relocate.relocate_text(files: Iterable[str], prefix_to_prefix: Dict[str, str] | Dict[bytes, bytes]) None [source]
Relocate text file from the original installation prefix to the new prefix.
Relocation also affects the the path in Spack’s sbang script.
- Parameters:
files – Text files to be relocated
prefix_to_prefix – ordered prefix to prefix mapping
- spack.relocate.relocate_text_bin(binaries: Iterable[str], prefix_to_prefix: Dict[str, str] | Dict[bytes, bytes]) List[str] [source]
Replace null terminated path strings hard-coded into binaries.
The new install prefix must be shorter than the original one.
- Parameters:
binaries – paths to binaries to be relocated
prefix_to_prefix – ordered prefix to prefix mapping
- Raises:
spack.relocate_text.BinaryTextReplaceError – when the new path is longer than the old path
spack.relocate_text module
This module contains pure-Python classes and functions for replacing paths inside text files and binaries.
- class spack.relocate_text.BinaryFilePrefixReplacer(prefix_to_prefix: Dict[bytes, bytes], suffix_safety_size: int = 7)[source]
Bases:
PrefixReplacer
- classmethod binary_text_regex(binary_prefixes: Iterable[bytes], suffix_safety_size: int = 7) Pattern[bytes] [source]
Create a regex that looks for exact matches of prefixes, and also tries to match a C-string type null terminator in a small lookahead window.
- Parameters:
binary_prefixes – Iterable of byte strings of prefixes to match
suffix_safety_size – Sizeof the lookahed for null-terminated string.
- classmethod from_strings_or_bytes(prefix_to_prefix: Dict[str, str] | Dict[bytes, bytes], suffix_safety_size: int = 7) BinaryFilePrefixReplacer [source]
Create a BinaryFilePrefixReplacer from an ordered prefix to prefix map.
- Parameters:
prefix_to_prefix – Ordered mapping of prefix to prefix.
suffix_safety_size – Number of bytes to retain at the end of a C-string to avoid binary string-aliasing issues.
- exception spack.relocate_text.BinaryTextReplaceError(msg)[source]
Bases:
SpackError
- exception spack.relocate_text.CannotGrowString(old, new)[source]
Bases:
BinaryTextReplaceError
- exception spack.relocate_text.CannotShrinkCString(old, new, full_old_string)[source]
Bases:
BinaryTextReplaceError
- class spack.relocate_text.PrefixReplacer(prefix_to_prefix: Dict[bytes, bytes])[source]
Bases:
object
Base class for applying a prefix to prefix map to a list of binaries or text files. Derived classes implement _apply_to_file to do the actual work, which is different when it comes to binaries and text files.
- class spack.relocate_text.TextFilePrefixReplacer(prefix_to_prefix: Dict[bytes, bytes])[source]
Bases:
PrefixReplacer
This class applies prefix to prefix mappings for relocation on text files.
Note that UTF-8 encoding is assumed.
- spack.relocate_text.filter_identity_mappings(prefix_to_prefix: Dict[bytes, bytes]) Dict[bytes, bytes] [source]
Drop mappings that are not changed.
spack.repo module
- exception spack.repo.BadRepoError(message, long_message=None)[source]
Bases:
RepoError
Raised when repo layout is invalid.
- exception spack.repo.FailedConstructorError(name, exc_type, exc_obj, exc_tb)[source]
Bases:
RepoError
Raised when a package’s class constructor fails.
- class spack.repo.FastPackageChecker(packages_path)[source]
Bases:
Mapping
Cache that maps package names to the stats obtained on the ‘package.py’ files associated with them.
For each repository a cache is maintained at class level, and shared among all instances referring to it. Update of the global cache is done lazily during instance initialization.
- class spack.repo.Indexer(repository)[source]
Bases:
object
Adaptor for indexes that need to be generated when repos are updated.
- needs_update(pkg)[source]
Whether an update is needed when the package file hasn’t changed.
- Returns:
True
if this package needs its indexupdated,
False
otherwise.
- Return type:
(bool)
We already automatically update indexes when package files change, but other files (like patches) may change underneath the package file. This method can be used to check additional package-specific files whenever they’re loaded, to tell the RepoIndex to update the index just for that package.
- exception spack.repo.InvalidNamespaceError(message, long_message=None)[source]
Bases:
RepoError
Raised when an invalid namespace is encountered.
- class spack.repo.MockRepositoryBuilder(root_directory, namespace=None)[source]
Bases:
object
Build a mock repository in a directory
- spack.repo.NOT_PROVIDED = <object object>
Guaranteed unused default value for some functions.
- exception spack.repo.NoRepoConfiguredError(message, long_message=None)[source]
Bases:
RepoError
Raised when there are no repositories configured.
- class spack.repo.PatchIndexer(repository)[source]
Bases:
Indexer
Lifecycle methods for patch cache.
- needs_update()[source]
Whether an update is needed when the package file hasn’t changed.
- Returns:
True
if this package needs its indexupdated,
False
otherwise.
- Return type:
(bool)
We already automatically update indexes when package files change, but other files (like patches) may change underneath the package file. This method can be used to check additional package-specific files whenever they’re loaded, to tell the RepoIndex to update the index just for that package.
- class spack.repo.ProviderIndexer(repository)[source]
Bases:
Indexer
Lifecycle methods for virtual package providers.
- spack.repo.ROOT_PYTHON_NAMESPACE = 'spack.pkg'
Package modules are imported as spack.pkg.<repo-namespace>.<pkg-name>
- class spack.repo.Repo(root: str, *, cache: FileCache, overrides: Dict[str, Any] | None = None)[source]
Bases:
object
Class representing a package repository in the filesystem.
Each package repository must have a top-level configuration file called repo.yaml.
It contains the following keys:
- namespace:
A Python namespace where the repository’s packages should live.
- subdirectory:
An optional subdirectory name where packages are placed
- api:
A string of the form vX.Y that indicates the Package API version. The default is “v1.0”. For the repo to be compatible with the current version of Spack, the version must be greater than or equal to
spack.min_package_api_version
and less than or equal tospack.package_api_version
.
- all_package_classes() Generator[Type[PackageBase], None, None] [source]
Iterator over all package classes in the repository.
Use this with care, because loading packages is slow.
- all_package_names(include_virtuals: bool = False) List[str] [source]
Returns a sorted list of all package names in the Repo.
- dirname_for_package_name(pkg_name: str) str [source]
Given a package name, get the directory containing its package.py file.
- dump_provenance(spec: Spec, path: str) None [source]
Dump provenance information for a spec to a particular path.
This dumps the package file and any associated patch files. Raises UnknownPackageError if not found.
- extensions_for(extendee_spec: Spec) List[PackageBase] [source]
- filename_for_package_name(pkg_name: str) str [source]
Get the filename for the module we should load for a particular package. Packages for a Repo live in
$root/<package_name>/package.py
This will return a proper package.py path even if the package doesn’t exist yet, so callers will need to ensure the package exists before importing.
- get(spec: Spec) PackageBase [source]
Returns the package associated with the supplied spec.
- get_pkg_class(pkg_name: str) Type[PackageBase] [source]
Get the class for the package out of its module.
First loads (or fetches from cache) a module for the package. Then extracts the package class from the module according to Spack’s naming convention.
- is_virtual(pkg_name: str) bool [source]
Return True if the package with this name is virtual, False otherwise.
This function use the provider index. If calling from a code block that is used to construct the provider index use the
is_virtual_safe
function.
- is_virtual_safe(pkg_name: str) bool [source]
Return True if the package with this name is virtual, False otherwise.
This function doesn’t use the provider index.
- property patch_index: PatchCache
Index of patches and packages they’re defined on.
- property provider_index: ProviderIndex
A provider index with names specific to this repo.
- real_name(import_name: str) str | None [source]
Allow users to import Spack packages using Python identifiers.
A python identifier might map to many different Spack package names due to hyphen/underscore ambiguity.
- Easy example:
num3proxy -> 3proxy
- Ambiguous:
foo_bar -> foo_bar, foo-bar
- More ambiguous:
foo_bar_baz -> foo_bar_baz, foo-bar-baz, foo_bar-baz, foo-bar_baz
- exception spack.repo.RepoError(message, long_message=None)[source]
Bases:
SpackError
Superclass for repository-related errors.
- class spack.repo.RepoIndex(package_checker: FastPackageChecker, namespace: str, cache: FileCache)[source]
Bases:
object
Container class that manages a set of Indexers for a Repo.
This class is responsible for checking packages in a repository for updates (using
FastPackageChecker
) and for regenerating indexes when they’re needed.Indexers
should be added to theRepoIndex
usingadd_indexer(name, indexer)
, and they should support the interface defined byIndexer
, so that theRepoIndex
can read, generate, and update stored indices.Generated indexes are accessed by name via
__getitem__()
.
- class spack.repo.RepoPath(*repos: str | Repo, cache: FileCache | None, overrides: Dict[str, Any] | None = None)[source]
Bases:
object
A RepoPath is a list of repos that function as one.
It functions exactly like a Repo, but it operates on the combined results of the Repos in its list instead of on a single package repository.
- Parameters:
repos – list Repo objects or paths to put in this RepoPath
cache – file cache associated with this repository
overrides – dict mapping package name to class attribute overrides for that package
- dump_provenance(spec, path)[source]
Dump provenance information for a spec to a particular path.
This dumps the package file and any associated patch files. Raises UnknownPackageError if not found.
- ensure_unwrapped() RepoPath [source]
Ensure we unwrap this object from any dynamic wrapper (like Singleton)
- exists(pkg_name: str) bool [source]
Whether package with the give name exists in the path’s repos.
Note that virtual packages do not “exist”.
- extensions_for(extendee_spec: Spec) List[PackageBase] [source]
- get(spec: Spec) PackageBase [source]
Returns the package associated with the supplied spec.
- get_pkg_class(pkg_name: str) Type[PackageBase] [source]
Find a class for the spec’s package and return the class object.
- is_virtual(pkg_name: str) bool [source]
Return True if the package with this name is virtual, False otherwise.
This function use the provider index. If calling from a code block that is used to construct the provider index use the
is_virtual_safe
function.- Parameters:
pkg_name (str) – name of the package we want to check
- is_virtual_safe(pkg_name: str) bool [source]
Return True if the package with this name is virtual, False otherwise.
This function doesn’t use the provider index.
- Parameters:
pkg_name (str) – name of the package we want to check
- packages_with_tags(*tags: str, full: bool = False) Set[str] [source]
Returns a set of packages matching any of the tags in input.
- Parameters:
full – if True the package names in the output are fully-qualified
- property patch_index: PatchCache
Merged PatchIndex from all Repos in the RepoPath.
- property provider_index: ProviderIndex
Merged ProviderIndex from all Repos in the RepoPath.
- class spack.repo.ReposFinder[source]
Bases:
object
MetaPathFinder class that loads a Python module corresponding to a Spack package.
Returns a loader based on the inspection of the current repository list.
- property current_repository
- class spack.repo.SpackNamespace(namespace)[source]
Bases:
ModuleType
Allow lazy loading of modules.
- class spack.repo.TagIndexer(repository)[source]
Bases:
Indexer
Lifecycle methods for a TagIndex on a Repo.
- exception spack.repo.UnknownEntityError(message, long_message=None)[source]
Bases:
RepoError
Raised when we encounter a package spack doesn’t have.
- exception spack.repo.UnknownNamespaceError(namespace, name=None)[source]
Bases:
UnknownEntityError
Raised when we encounter an unknown namespace
- exception spack.repo.UnknownPackageError(name, repo=None)[source]
Bases:
UnknownEntityError
Raised when we encounter a package spack doesn’t have.
- spack.repo.all_package_names(include_virtuals=False)[source]
Convenience wrapper around
spack.repo.all_package_names()
.
- spack.repo.autospec(function)[source]
Decorator that automatically converts the first argument of a function to a Spec.
- spack.repo.create(configuration: Configuration) RepoPath [source]
Create a RepoPath from a configuration object.
- Parameters:
configuration (spack.config.Configuration) – configuration object
- spack.repo.create_or_construct(path, namespace=None)[source]
Create a repository, or just return a Repo if it already exists.
- spack.repo.create_repo(root, namespace=None, subdir='packages')[source]
Create a new repository in root with the specified namespace.
If the namespace is not provided, use basename of root. Return the canonicalized path and namespace of the created repository.
- spack.repo.diff_packages(rev1, rev2)[source]
Compute packages lists for the two revisions and return a tuple containing all the packages in rev1 but not in rev2 and all the packages in rev2 but not in rev1.
- spack.repo.from_path(path: str) Repo [source]
Returns a repository from the path passed as input. Injects the global misc cache.
- spack.repo.get_all_package_diffs(type, rev1='HEAD^1', rev2='HEAD')[source]
- Show packages changed, added, or removed (or any combination of those)
since a commit.
- spack.repo.is_package_file(filename)[source]
Determine whether we are in a package file from a repo.
- spack.repo.namespace_from_fullname(fullname)[source]
Return the repository namespace only for the full module name.
For instance:
namespace_from_fullname(‘spack.pkg.builtin.hdf5’) == ‘builtin’
- Parameters:
fullname (str) – full name for the Python module
- spack.repo.partition_package_name(pkg_name: str) Tuple[str, str] [source]
Given a package name that might be fully-qualified, returns the namespace part, if present and the unqualified package name.
If the package name is unqualified, the namespace is an empty string.
- Parameters:
pkg_name – a package name, either unqualified like “llvl”, or fully-qualified, like “builtin.llvm”
- spack.repo.python_package_for_repo(namespace)[source]
Returns the full namespace of a repository, given its relative one
For instance:
python_package_for_repo(‘builtin’) == ‘spack.pkg.builtin’
- Parameters:
namespace (str) – repo namespace
- spack.repo.use_repositories(*paths_and_repos: str | Repo, override: bool = True) Generator[RepoPath, None, None] [source]
Use the repositories passed as arguments within the context manager.
- Parameters:
*paths_and_repos – paths to the repositories to be used, or already constructed Repo objects
override – if True use only the repositories passed as input, if False add them to the top of the list of current repositories.
- Returns:
Corresponding RepoPath object
spack.report module
Tools to produce reports of spec installations
- class spack.report.BuildInfoCollector(specs: List[Spec])[source]
Bases:
InfoCollector
Collect information for the PackageInstaller._install_task method.
- Parameters:
specs – specs whose install information will be recorded
- extract_package_from_signature(instance, *args, **kwargs)[source]
Return the package instance, given the signature of the wrapped function.
- fetch_log(pkg)[source]
Return the stdout log associated with the function being monitored
- Parameters:
pkg – package under consideration
- class spack.report.InfoCollector(wrap_class: Type, do_fn: str, specs: List[Spec])[source]
Bases:
object
Base class for context manager objects that collect information during the execution of certain package functions.
The data collected is available through the
specs
attribute once exited, and it’s organized as a list where each item represents the installation of one spec.- extract_package_from_signature(instance, *args, **kwargs)[source]
Return the package instance, given the signature of the wrapped function.
- fetch_log(pkg: PackageBase) str [source]
Return the stdout log associated with the function being monitored
- Parameters:
pkg – package under consideration
- init_spec_record(input_spec: Spec, record)[source]
Add additional entries to a spec record when entering the collection context.
- on_success(pkg: PackageBase, kwargs, package_record)[source]
Add additional properties on function call success.
- class spack.report.TestInfoCollector(specs: List[Spec], record_directory: str)[source]
Bases:
InfoCollector
Collect information for the PackageBase.do_test method.
- Parameters:
specs – specs whose install information will be recorded
record_directory – record directory for test log paths
- extract_package_from_signature(instance, *args, **kwargs)[source]
Return the package instance, given the signature of the wrapped function.
- fetch_log(pkg: PackageBase)[source]
Return the stdout log associated with the function being monitored
- Parameters:
pkg – package under consideration
- spack.report.build_context_manager(reporter: Reporter, filename: str, specs: List[Spec])[source]
Decorate a package to generate a report after the installation function is executed.
- Parameters:
reporter – object that generates the report
filename – filename for the report
specs – specs that need reporting
- spack.report.test_context_manager(reporter: Reporter, filename: str, specs: List[Spec], raw_logs_dir: str)[source]
Decorate a package to generate a report after the test function is executed.
- Parameters:
reporter – object that generates the report
filename – filename for the report
specs – specs that need reporting
raw_logs_dir – record directory for test log paths
spack.resource module
Describes an optional resource needed for a build.
Typically a bunch of sources that can be built in-tree within another package to enable optional features.
- class spack.resource.Resource(name, fetcher, destination, placement)[source]
Bases:
object
Represents any resource to be fetched by a package.
This includes the main tarball or source archive, as well as extra archives defined by the resource() directive.
Aggregates a name, a fetcher, a destination and a placement.
spack.rewiring module
- exception spack.rewiring.PackageNotInstalledError(spliced_spec, build_spec, dep)[source]
Bases:
RewireError
Raised when the build_spec for a splice was not installed.
- exception spack.rewiring.RewireError(message, long_msg=None)[source]
Bases:
SpackError
Raised when something goes wrong with rewiring.
spack.spec module
Spack allows very fine-grained control over how packages are installed and over how they are built and configured. To make this easy, it has its own syntax for declaring a dependence. We call a descriptor of a particular package configuration a “spec”.
The syntax looks like this:
$ spack install mpileaks ^openmpi @1.2:1.4 +debug %intel @12.1 target=zen
0 1 2 3 4 5 6
The first part of this is the command, ‘spack install’. The rest of the line is a spec for a particular installation of the mpileaks package.
The package to install
A dependency of the package, prefixed by ^
A version descriptor for the package. This can either be a specific version, like “1.2”, or it can be a range of versions, e.g. “1.2:1.4”. If multiple specific versions or multiple ranges are acceptable, they can be separated by commas, e.g. if a package will only build with versions 1.0, 1.2-1.4, and 1.6-1.8 of mvapich, you could say:
depends_on(”mvapich@1.0,1.2:1.4,1.6:1.8”)
A compile-time variant of the package. If you need openmpi to be built in debug mode for your package to work, you can require it by adding +debug to the openmpi spec when you depend on it. If you do NOT want the debug option to be enabled, then replace this with -debug. If you would like for the variant to be propagated through all your package’s dependencies use “++” for enabling and “–” or “~~” for disabling.
The name of the compiler to build with.
The versions of the compiler to build with. Note that the identifier for a compiler version is the same ‘@’ that is used for a package version. A version list denoted by ‘@’ is associated with the compiler only if if it comes immediately after the compiler name. Otherwise it will be associated with the current package spec.
The architecture to build with. This is needed on machines where cross-compilation is required
- class spack.spec.CompilerSpec(*args)[source]
Bases:
object
The CompilerSpec field represents the compiler or range of compiler versions that a package should be built with. CompilerSpecs have a name and a version list.
- property concrete
A CompilerSpec is concrete if its versions are concrete and there is an available compiler with the right version.
- constrain(other: CompilerSpec) bool [source]
Intersect self’s versions with other.
Return whether the CompilerSpec changed.
- property display_str
Equivalent to {compiler.name}{@compiler.version} for Specs, without extra @= for readability.
- intersects(other: CompilerSpec) bool [source]
Return True if all concrete specs matching self also match other, otherwise False.
For compiler specs this means that the name of the compiler must be the same for self and other, and that the versions ranges should intersect.
- Parameters:
other – spec to be satisfied
- name
- satisfies(other: CompilerSpec) bool [source]
Return True if all concrete specs matching self also match other, otherwise False.
For compiler specs this means that the name of the compiler must be the same for self and other, and that the version range of self is a subset of that of other.
- Parameters:
other – spec to be satisfied
- property version
- versions
- exception spack.spec.DuplicateArchitectureError(message, long_message=None)[source]
Bases:
SpecError
Raised when the same architecture occurs in a spec twice.
- exception spack.spec.DuplicateCompilerSpecError(message, long_message=None)[source]
Bases:
SpecError
Raised when the same compiler occurs in a spec twice.
- exception spack.spec.DuplicateDependencyError(message, long_message=None)[source]
Bases:
SpecError
Raised when the same dependency occurs in a spec twice.
- exception spack.spec.InconsistentSpecError(message, long_message=None)[source]
Bases:
SpecError
Raised when two nodes in the same spec DAG have inconsistent constraints.
- exception spack.spec.InvalidDependencyError(pkg, deps)[source]
Bases:
SpecError
Raised when a dependency in a spec is not actually a dependency of the package.
- exception spack.spec.MultipleProviderError(vpkg, providers)[source]
Bases:
SpecError
Raised when there is no package that provides a particular virtual dependency.
- exception spack.spec.NoProviderError(vpkg)[source]
Bases:
SpecError
Raised when there is no package that provides a particular virtual dependency.
- class spack.spec.Spec(spec_like=None, *, external_path=None, external_modules=None)[source]
Bases:
object
- add_dependency_edge(dependency_spec: Spec, *, depflag: int, virtuals: Tuple[str, ...])[source]
Add a dependency edge to this spec.
- Parameters:
dependency_spec – spec of the dependency
deptypes – dependency types for this edge
virtuals – virtuals provided by this edge
- property anonymous
- property build_spec
- clear_caches(ignore: Tuple[str, ...] = ()) None [source]
Clears all cached hashes in a Spec, while preserving other properties.
- property colored_str
- property concrete
A spec is concrete if it describes a single build of a package.
More formally, a spec is concrete if concretize() has been called on it and it has been marked _concrete.
Concrete specs either can be or have been built. All constraints have been resolved, optional dependencies have been added or removed, a compiler has been chosen, and all variants have values.
- constrain(other, deps=True)[source]
Intersect self with other in-place. Return True if self changed, False otherwise.
- Parameters:
other – constraint to be added to self
deps – if False, constrain only the root node, otherwise constrain dependencies as well.
- Raises:
spack.error.UnsatisfiableSpecError – when self cannot be constrained
- copy(deps: bool | str | List[str] | Tuple[str, ...] | int = True, **kwargs)[source]
Make a copy of this spec.
- Parameters:
deps – Defaults to True. If boolean, controls whether dependencies are copied (copied if True). If a DepTypes or DepFlag is provided, only matching dependencies are copied.
kwargs – additional arguments for internal use (passed to
_dup
).
- Returns:
A copy of this spec.
Examples
Deep copy with dependencies:
spec.copy() spec.copy(deps=True)
Shallow copy (no dependencies):
spec.copy(deps=False)
Only build and run dependencies:
deps=('build', 'run'):
- property cshort_spec
Returns an auto-colorized version of
self.short_spec
.
- dag_hash(length=None)[source]
This is Spack’s default hash, used to identify installations.
NOTE: Versions of Spack prior to 0.18 only included link and run deps. NOTE: Versions of Spack prior to 1.0 only did not include test deps.
- dependencies(name=None, deptype: str | List[str] | Tuple[str, ...] | int = 15, *, virtuals: List[str] | None = None) List[Spec] [source]
Returns a list of direct dependencies (nodes in the DAG)
- Parameters:
name – filter dependencies by package name
deptype – allowed dependency types
virtuals – allowed virtuals
- dependents(name=None, deptype: str | List[str] | Tuple[str, ...] | int = 15) List[Spec] [source]
Return a list of direct dependents (nodes in the DAG).
- Parameters:
name (str) – filter dependents by package name
deptype – allowed dependency types
- edges_from_dependents(name=None, depflag: int = 15, *, virtuals: List[str] | None = None) List[DependencySpec] [source]
Return a list of edges connecting this node in the DAG to parents.
- Parameters:
name (str) – filter dependents by package name
depflag – allowed dependency types
virtuals – allowed virtuals
- edges_to_dependencies(name=None, depflag: int = 15, *, virtuals: List[str] | None = None) List[DependencySpec] [source]
Returns a list of edges connecting this node in the DAG to children.
- Parameters:
name (str) – filter dependencies by package name
depflag – allowed dependency types
virtuals – allowed virtuals
- static ensure_no_deprecated(root)[source]
Raise if a deprecated spec is in the dag.
- Parameters:
root (Spec) – root spec to be analyzed
- Raises:
SpecDeprecatedError – if any deprecated spec is found
- static ensure_valid_variants(spec)[source]
Ensures that the variant attached to a spec are valid.
- Parameters:
spec (Spec) – spec to be analyzed
- Raises:
spack.variant.UnknownVariantError – on the first unknown variant found
- eq_dag(other, deptypes=True, vs=None, vo=None)[source]
True if the full dependency DAGs of specs are equal.
- property external
- property external_path
- format(format_string: str = '{name}{@versions}{compiler_flags}{variants}{ namespace=namespace_if_anonymous}{ arch=architecture}{/abstract_hash} {%compiler.name}{@compiler.versions}', color: bool | None = False) str [source]
Prints out attributes of a spec according to a format string.
Using an
{attribute}
format specifier, any field of the spec can be selected. Those attributes can be recursive. For example,s.format({compiler.version})
will print the version of the compiler.If the attribute in a format specifier evaluates to
None
, then the format specifier will evaluate to the empty string,""
.Commonly used attributes of the Spec for format strings include:
name version compiler compiler.name compiler.version compiler_flags variants architecture architecture.platform architecture.os architecture.target prefix namespace
Some additional special-case properties can be added:
hash[:len] The DAG hash with optional length argument spack_root The spack root directory spack_install The spack install directory
The
^
sigil can be used to access dependencies by name.s.format({^mpi.name})
will print the name of the MPI implementation in the spec.The
@
,%
, and/
sigils can be used to include the sigil with the printed string. These sigils may only be used with the appropriate attributes, listed below:@ ``{@version}``, ``{@compiler.version}`` % ``{%compiler}``, ``{%compiler.name}`` / ``{/hash}``, ``{/hash:7}``, etc
The
@
sigil may also be used for any other property namedversion
. Sigils printed with the attribute string are only printed if the attribute string is non-empty, and are colored according to the color of the attribute.Variants listed by name naturally print with their sigil. For example,
spec.format('{variants.debug}')
prints either+debug
or~debug
depending on the name of the variant. Non-boolean variants print asname=value
. To print variant names or values independently, usespec.format('{variants.<name>.name}')
orspec.format('{variants.<name>.value}')
.There are a few attributes on specs that can be specified as key-value pairs that are not variants, e.g.:
os
,arch
,architecture
,target
,namespace
, etc. You can format these with an optionalkey=
prefix, e.g.{namespace=namespace}
or{arch=architecture}
, etc. Thekey=
prefix will be colorized along with the value.When formatting specs, key-value pairs are separated from preceding parts of the spec by whitespace. To avoid printing extra whitespace when the formatted attribute is not set, you can add whitespace to the key inside the braces of the format string, e.g.:
{ namespace=namespace}
This evaluates to `` namespace=builtin`` if
namespace
is set tobuiltin
, and to""
ifnamespace
isNone
.Spec format strings use
\
as the escape character. Use\{
and\}
for literal braces, and\\
for the literal\
character.- Parameters:
format_string – string containing the format to be expanded
color – True for colorized result; False for no color; None for auto color.
- format_path(format_string: str, _path_ctor: Callable[[Any], PurePath] | None = None) str [source]
Given a format_string that is intended as a path, generate a string like from Spec.format, but eliminate extra path separators introduced by formatting of Spec properties.
Path separators explicitly added to the string are preserved, so for example “{name}/{version}” would generate a directory based on the Spec’s name, and a subdirectory based on its version; this function guarantees though that the resulting string would only have two directories (i.e. that if under normal circumstances that str(Spec.version) would contain a path separator, it would not in this case).
- static from_detection(spec_str: str, *, external_path: str, external_modules: List[str] | None = None, extra_attributes: Dict | None = None) Spec [source]
Construct a spec from a spec string determined during external detection and attach extra attributes to it.
- Parameters:
spec_str – spec string
external_path – prefix of the external spec
external_modules – optional module files to be loaded when the external spec is used
extra_attributes – dictionary containing extra attributes
- static from_dict(data) Spec [source]
Construct a spec from JSON/YAML.
- Parameters:
data – a nested dict/list data structure read from YAML or JSON.
- static from_json(stream) Spec [source]
Construct a spec from JSON.
- Parameters:
stream – string or file object to read from.
- static from_literal(spec_dict, normal=True)[source]
Builds a Spec from a dictionary containing the spec literal.
The dictionary must have a single top level key, representing the root, and as many secondary level keys as needed in the spec.
The keys can be either a string or a Spec or a tuple containing the Spec and the dependency types.
- Parameters:
Examples
A simple spec
foo
with no dependencies:{'foo': None}
A spec
foo
with a(build, link)
dependencybar
:{'foo': {'bar:build,link': None}}
A spec with a diamond dependency and various build types:
{'dt-diamond': { 'dt-diamond-left:build,link': { 'dt-diamond-bottom:build': None }, 'dt-diamond-right:build,link': { 'dt-diamond-bottom:build,link,run': None } }}
The same spec with a double copy of
dt-diamond-bottom
and no diamond structure:{'dt-diamond': { 'dt-diamond-left:build,link': { 'dt-diamond-bottom:build': None }, 'dt-diamond-right:build,link': { 'dt-diamond-bottom:build,link,run': None } }, normal=False}
Constructing a spec using a Spec object as key:
mpich = Spec('mpich') libelf = Spec('libelf@1.8.11') expected_normalized = Spec.from_literal({ 'mpileaks': { 'callpath': { 'dyninst': { 'libdwarf': {libelf: None}, libelf: None }, mpich: None }, mpich: None }, })
- static from_signed_json(stream)[source]
Construct a spec from clearsigned json spec file.
- Parameters:
stream – string or file object to read from.
- static from_yaml(stream) Spec [source]
Construct a spec from YAML.
- Parameters:
stream – string or file object to read from.
- property fullname
- property installed
Installation status of a package.
- Returns:
True if the package has been installed, False otherwise.
- property installed_upstream
Whether the spec is installed in an upstream repository.
- Returns:
True if the package is installed in an upstream, False otherwise.
- intersects(other: str | Spec, deps: bool = True) bool [source]
Return True if there exists at least one concrete spec that matches both self and other, otherwise False.
This operation is commutative, and if two specs intersect it means that one can constrain the other.
- Parameters:
other – spec to be checked for compatibility
deps – if True check compatibility of dependency nodes too, if False only check root
- property is_develop
Return whether the Spec represents a user-developed package in a Spack
Environment
(i.e. using spack develop).
- property long_spec
Returns a string of the spec with the dependencies completely enumerated.
- lookup_hash()[source]
Given a spec with an abstract hash, return a copy of the spec with all properties and dependencies by looking up the hash in the environment, store, or finally, binary caches. This is non-destructive.
- property namespace_if_anonymous
- node_dict_with_hashes(hash=SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None))[source]
Returns a node_dict of this spec with the dag hash added. If this spec is concrete, the full hash is added as well. If ‘build’ is in the hash_type, the build hash is also added.
- property os
- property package
- property package_class
Internal package call gets only the class object for a package. Use this to just get package metadata.
- property patches
Return patch objects for any patch sha256 sums on this Spec.
This is for use after concretization to iterate over any patches associated with this spec.
TODO: this only checks in the package; it doesn’t resurrect old patches from install directories, but it probably should.
- property platform
- replace_hash()[source]
Given a spec with an abstract hash, attempt to populate all properties and dependencies by looking up the hash in the environment, store, or finally, binary caches. This is destructive.
- property root
Follow dependent links and find the root of this spec’s DAG.
Spack specs have a single root (the package being installed).
- satisfies(other: str | Spec, deps: bool = True) bool [source]
Return True if all concrete specs matching self also match other, otherwise False.
- Parameters:
other – spec to be satisfied
deps – if True descend to dependencies, otherwise only check root node
- property short_spec
Returns a version of the spec with the dependencies hashed instead of completely enumerated.
- property spack_install
Special field for using
{spack_install}
in Spec.format().
- property spack_root
Special field for using
{spack_root}
in Spec.format().
- spec_hash(hash)[source]
Utility method for computing different types of Spec hashes.
- Parameters:
hash (spack.hash_types.SpecHashDescriptor) – type of hash to generate.
- splice(other: Spec, transitive: bool = True) Spec [source]
Returns a new, spliced concrete Spec with the “other” dependency and, optionally, its dependencies.
- Parameters:
other – alternate dependency
transitive – include other’s dependencies
Returns: a concrete, spliced version of the current Spec
When transitive is “True”, use the dependencies from “other” to reconcile conflicting dependencies. When transitive is “False”, use dependencies from self.
For example, suppose we have the following dependency graph:
T | Z<-H
Spec T depends on H and Z, and H also depends on Z. Now we want to use a different H, called H’. This function can be used to splice in H’ to create a new spec, called T*. If H’ was built with Z’, then transitive “True” will ensure H’ and T* both depend on Z’:
T* | Z’<-H’
If transitive is “False”, then H’ and T* will both depend on the original Z, resulting in a new H’*
T* | Z<-H’*
Provenance of the build is tracked through the “build_spec” property of the spliced spec and any correspondingly modified dependency specs. The build specs are set to that of the original spec, so the original spec’s provenance is preserved unchanged.
- property spliced
Returns whether or not this Spec is being deployed as built i.e. whether or not this Spec has ever been spliced.
- property target
- to_dict(hash=SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None))[source]
Create a dictionary suitable for writing this spec to YAML or JSON.
This dictionaries like the one that is ultimately written to a
spec.json
file in each Spack installation directory. For example, for sqlite:{ "spec": { "_meta": { "version": 2 }, "nodes": [ { "name": "sqlite", "version": "3.34.0", "arch": { "platform": "darwin", "platform_os": "catalina", "target": "x86_64" }, "compiler": { "name": "apple-clang", "version": "11.0.0" }, "namespace": "builtin", "parameters": { "column_metadata": true, "fts": true, "functions": false, "rtree": false, "cflags": [], "cppflags": [], "cxxflags": [], "fflags": [], "ldflags": [], "ldlibs": [] }, "dependencies": [ { "name": "readline", "hash": "4f47cggum7p4qmp3xna4hi547o66unva", "type": [ "build", "link" ] }, { "name": "zlib", "hash": "uvgh6p7rhll4kexqnr47bvqxb3t33jtq", "type": [ "build", "link" ] } ], "hash": "tve45xfqkfgmzwcyfetze2z6syrg7eaf", }, # ... more node dicts for readline and its dependencies ... ] }
Note that this dictionary starts with the ‘spec’ key, and what follows is a list starting with the root spec, followed by its dependencies in preorder. Each node in the list also has a ‘hash’ key that contains the hash of the node without the hash field included.
In the example, the package content hash is not included in the spec, but if
package_hash
were true there would be an additional field on each node calledpackage_hash
.from_dict()
can be used to read back in a spec that has been converted to a dictionary, serialized, and read back in.
- to_json(stream=None, hash=SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None))[source]
- to_node_dict(hash=SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None))[source]
Create a dictionary representing the state of this Spec.
to_node_dict
creates the content that is eventually hashed by Spack to create identifiers like the DAG hash (seedag_hash()
). Example result ofto_node_dict
for thesqlite
package:{ 'sqlite': { 'version': '3.28.0', 'arch': { 'platform': 'darwin', 'platform_os': 'mojave', 'target': 'x86_64', }, 'compiler': { 'name': 'apple-clang', 'version': '10.0.0', }, 'namespace': 'builtin', 'parameters': { 'fts': 'true', 'functions': 'false', 'cflags': [], 'cppflags': [], 'cxxflags': [], 'fflags': [], 'ldflags': [], 'ldlibs': [], }, 'dependencies': { 'readline': { 'hash': 'zvaa4lhlhilypw5quj3akyd3apbq5gap', 'type': ['build', 'link'], } }, } }
Note that the dictionary returned does not include the hash of the root of the spec, though it does include hashes for each dependency, and (optionally) the package file corresponding to each node.
See
to_dict()
for a “complete” spec hash, with hashes for each node and nodes for each dependency (instead of just their hashes).- Parameters:
- to_yaml(stream=None, hash=SpecHashDescriptor(depflag=15, package_hash=True, name='hash', override=None))[source]
- traverse(*, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[False] = False, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Spec] [source]
- traverse(*, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[True], key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Tuple[int, Spec]]
Shorthand for
traverse_nodes()
- traverse_edges(*, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[False] = False, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[DependencySpec] [source]
- traverse_edges(*, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[True], key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Tuple[int, DependencySpec]]
Shorthand for
traverse_edges()
- tree(*, color: bool | None = None, depth: bool = False, hashes: bool = False, hashlen: int | None = None, cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', indent: int = 0, format: str = '{name}{@versions}{compiler_flags}{variants}{ namespace=namespace_if_anonymous}{ arch=architecture}{/abstract_hash} {%compiler.name}{@compiler.versions}', deptypes: str | ~typing.List[str] | ~typing.Tuple[str, ...] | int = 15, show_types: bool = False, depth_first: bool = False, recurse_dependencies: bool = True, status_fn: ~typing.Callable[[~spack.spec.Spec], ~spack.spec.InstallStatus] | None = None, prefix: ~typing.Callable[[~spack.spec.Spec], str] | None = None, key=<built-in function id>) str [source]
Prints out this spec and its dependencies, tree-formatted with indentation.
See multi-spec
spack.spec.tree()
function for details.- Parameters:
specs – List of specs to format.
color – if True, always colorize the tree. If False, don’t colorize the tree. If None, use the default from llnl.tty.color
depth – print the depth from the root
hashes – if True, print the hash of each node
hashlen – length of the hash to be printed
cover – either “nodes” or “edges”
indent – extra indentation for the tree being printed
format – format to be used to print each node
deptypes – dependency types to be represented in the tree
show_types – if True, show the (merged) dependency type of a node
depth_first – if True, traverse the DAG depth first when representing it as a tree
recurse_dependencies – if True, recurse on dependencies
status_fn – optional callable that takes a node as an argument and return its installation status
prefix – optional callable that takes a node as an argument and return its installation prefix
- trim(dep_name)[source]
Remove any package that is or provides dep_name transitively from this tree. This can also remove other dependencies if they are only present because of dep_name.
- validate_or_raise()[source]
Checks that names and values in this spec are real. If they’re not, it will raise an appropriate exception.
- property version
- property virtual
- exception spack.spec.SpecDeprecatedError(message, long_message=None)[source]
Bases:
SpecError
Raised when a spec concretizes to a deprecated spec or dependency.
- exception spack.spec.SpecParseError(parse_error)[source]
Bases:
SpecError
Wrapper for ParseError for when we’re parsing specs.
- property long_message
- exception spack.spec.UnsatisfiableArchitectureSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a spec architecture conflicts with package constraints.
- exception spack.spec.UnsatisfiableCompilerFlagSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a spec variant conflicts with package constraints.
- exception spack.spec.UnsatisfiableCompilerSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a spec compiler conflicts with package constraints.
- exception spack.spec.UnsatisfiableDependencySpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when some dependency of constrained specs are incompatible
- exception spack.spec.UnsatisfiableProviderSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a provider is supplied but constraints don’t match a vpkg requirement
- exception spack.spec.UnsatisfiableSpecNameError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when two specs aren’t even for the same package.
- exception spack.spec.UnsatisfiableVersionSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a spec version conflicts with package constraints.
spack.spec_list module
- exception spack.spec_list.InvalidSpecConstraintError(message, long_message=None)[source]
Bases:
SpecListError
Error class for invalid spec constraints at concretize time.
- class spack.spec_list.SpecList(name='specs', yaml_list=None, reference=None)[source]
Bases:
object
- property is_matrix
- replace(idx: int, spec: str)[source]
Replace the existing spec at the index with the new one.
- Parameters:
idx – index of the spec to replace in the speclist
spec – new spec
- property specs_as_constraints
- property specs_as_yaml_list
- exception spack.spec_list.SpecListError(message, long_message=None)[source]
Bases:
SpackError
Error class for all errors related to SpecList objects.
- exception spack.spec_list.UndefinedReferenceError(message, long_message=None)[source]
Bases:
SpecListError
Error class for undefined references in Spack stacks.
spack.spec_parser module
Parser for spec literals
Here is the EBNF grammar for a spec:
spec = [name] [node_options] { ^[edge_properties] node } |
[name] [node_options] hash |
filename
node = name [node_options] |
[name] [node_options] hash |
filename
node_options = [@(version_list|version_pair)] [%compiler] { variant }
edge_properties = [ { bool_variant | key_value } ]
hash = / id
filename = (.|/|[a-zA-Z0-9-_]*/)([a-zA-Z0-9-_./]*)(.json|.yaml)
name = id | namespace id
namespace = { id . }
variant = bool_variant | key_value | propagated_bv | propagated_kv
bool_variant = +id | ~id | -id
propagated_bv = ++id | ~~id | --id
key_value = id=id | id=quoted_id
propagated_kv = id==id | id==quoted_id
compiler = id [@version_list]
version_pair = git_version=vid
version_list = (version|version_range) [ { , (version|version_range)} ]
version_range = vid:vid | vid: | :vid | :
version = vid
git_version = git.(vid) | git_hash
git_hash = [A-Fa-f0-9]{40}
quoted_id = " id_with_ws " | ' id_with_ws '
id_with_ws = [a-zA-Z0-9_][a-zA-Z_0-9-.\s]*
vid = [a-zA-Z0-9_][a-zA-Z_0-9-.]*
id = [a-zA-Z0-9_][a-zA-Z_0-9-]*
Identifiers using the <name>=<value> command, such as architectures and compiler flags, require a space before the name.
There is one context-sensitive part: ids in versions may contain ‘.’, while other ids may not.
There is one ambiguity: since ‘-’ is allowed in an id, you need to put whitespace space before -variant for it to be tokenized properly. You can either use whitespace, or you can just use ~variant since it means the same thing. Spack uses ~variant in directory names and in the canonical form of specs to avoid ambiguity. Both are provided because ~ can cause shell expansion when it is the first character in an id typed on the command line.
- class spack.spec_parser.EdgeAttributeParser(ctx, literal_str)[source]
Bases:
object
- ctx
- literal_str
- class spack.spec_parser.FileParser(ctx)[source]
Bases:
object
Parse a single spec from a JSON or YAML file
- ctx
- spack.spec_parser.GIT_REF = '(?:[a-zA-Z_0-9][a-zA-Z_0-9./\\-]*)'
Git refs include branch names, and can contain “.” and “/”
- spack.spec_parser.IDENTIFIER = '(?:[a-zA-Z_0-9][a-zA-Z_0-9\\-]*)'
Valid name for specs and variants. Here we are not using the previous “w[w.-]*” since that would match most characters that can be part of a word in any language
- spack.spec_parser.NO_QUOTES_NEEDED = re.compile('^[a-zA-Z0-9,/_.-]+$')
Values that match this (e.g., variants, flags) can be left unquoted in Spack output
- spack.spec_parser.QUOTED_VALUE = '(?:\'(?:[^\']|(?<=\\\\)\')*\'|\\"(?:[^\\"]|(?<=\\\\)\\")*\\")'
Quoted values can be anything in between quotes, including escaped quotes.
- spack.spec_parser.SPEC_TOKENIZER = <spack.tokenize.Tokenizer object>
Tokenizer that includes all the regexes in the SpecTokens enum
- spack.spec_parser.SPLIT_KVP = re.compile('^([a-zA-Z_0-9][a-zA-Z_0-9\\-.]*)(==?)(.*)$')
Regex with groups to use for splitting (optionally propagated) key-value pairs
- spack.spec_parser.STRIP_QUOTES = re.compile('^([\'\\"])(.*)\\1$')
Regex to strip quotes. Group 2 will be the unquoted string.
- class spack.spec_parser.SpecNodeParser(ctx, literal_str)[source]
Bases:
object
Parse a single spec node from a stream of tokens
- ctx
- has_compiler
- has_version
- literal_str
- class spack.spec_parser.SpecParser(literal_str: str)[source]
Bases:
object
Parse text into specs
- ctx
- literal_str
- exception spack.spec_parser.SpecParsingError(message, token, text)[source]
Bases:
SpecSyntaxError
Error when parsing tokens
- exception spack.spec_parser.SpecTokenizationError(tokens: List[Token], text: str)[source]
Bases:
SpecSyntaxError
Syntax error in a spec string
- class spack.spec_parser.SpecTokens(value)[source]
Bases:
TokenBase
Enumeration of the different token kinds in the spec grammar. Order of declaration is extremely important, since text containing specs is parsed with a single regex obtained by
"|".join(...)
of all the regex in the order of declaration.- BOOL_VARIANT = 8
- COMPILER = 12
- COMPILER_AND_VERSION = 11
- DAG_HASH = 16
- DEPENDENCY = 3
- END_EDGE_PROPERTIES = 2
- FILENAME = 13
- FULLY_QUALIFIED_PACKAGE_NAME = 14
- GIT_VERSION = 5
- KEY_VALUE_PAIR = 10
- PROPAGATED_BOOL_VARIANT = 7
- PROPAGATED_KEY_VALUE_PAIR = 9
- START_EDGE_PROPERTIES = 1
- UNEXPECTED = 18
- UNQUALIFIED_PACKAGE_NAME = 15
- VERSION = 6
- VERSION_HASH_PAIR = 4
- WS = 17
- class spack.spec_parser.TokenContext(token_stream: Iterator[Token])[source]
Bases:
object
Token context passed around by parsers
- accept(kind: SpecTokens)[source]
If the next token is of the specified kind, advance the stream and return True. Otherwise return False.
- current_token
- expect(*kinds: SpecTokens)[source]
- next_token
- token_stream
- spack.spec_parser.VALUE = '(?:[a-zA-Z_0-9\\-+\\*.,:=\\~\\/\\\\]+)'
These are legal values that can be parsed bare, without quotes on the command line.
- spack.spec_parser.WINDOWS_FILENAME = '(?:\\.|[a-zA-Z0-9-_]*\\\\|[a-zA-Z]:\\\\)(?:[a-zA-Z0-9-_\\.\\\\]*)(?:\\.json|\\.yaml)'
A filename starts either with a “.” or a “/” or a “{name}/, or on Windows, a drive letter followed by a colon and “" or “.” or {name}
- spack.spec_parser.parse(text: str) List[Spec] [source]
Parse text into a list of strings
- Parameters:
text (str) – text to be parsed
- Returns:
List of specs
- spack.spec_parser.parse_one_or_raise(text: str, initial_spec: Spec | None = None) Spec [source]
Parse exactly one spec from text and return it, or raise
- Parameters:
text (str) – text to be parsed
initial_spec – buffer where to parse the spec. If None a new one will be created.
- spack.spec_parser.quote_if_needed(value: str) str [source]
Add quotes around the value if it requires quotes.
This will add quotes around the value unless it matches
NO_QUOTES_NEEDED
.This adds: * single quotes by default * double quotes around any value that contains single quotes
If double quotes are used, we json-escape the string. That is, we escape
\
,"
, and control codes.
spack.stage module
- class spack.stage.DevelopStage(name, dev_path, reference_link)[source]
Bases:
LockableStagingDir
- property archive_file
- property expanded
Returns True since the source_path must exist.
- requires_patch_success = False
- class spack.stage.LockableStagingDir(name, path, keep, lock)[source]
Bases:
object
A directory whose lifetime can be managed with a context manager (but persists if the user requests it). Instances can have a specified name and if they do, then for all instances that have the same name, only one can enter the context manager at a time.
- class spack.stage.ResourceStage(fetch_strategy: FetchStrategy, root: Stage, resource: Resource, **kwargs)[source]
Bases:
Stage
- exception spack.stage.RestageError(message, long_message=None)[source]
Bases:
StageError
“Error encountered during restaging.
- class spack.stage.Stage(url_or_fetch_strategy, *, name=None, mirror_paths: MirrorLayout | None = None, mirrors: Iterable[Mirror] | None = None, keep=False, path=None, lock=True, search_fn=None)[source]
Bases:
LockableStagingDir
Manages a temporary stage directory for building.
A Stage object is a context manager that handles a directory where some source code is downloaded and built before being installed. It handles fetching the source code, either as an archive to be expanded or by checking it out of a repository. A stage’s lifecycle looks like this:
with Stage() as stage: # Context manager creates and destroys the # stage directory stage.fetch() # Fetch a source archive into the stage. stage.expand_archive() # Expand the archive into source_path. <install> # Build and install the archive. # (handled by user of Stage)
When used as a context manager, the stage is automatically destroyed if no exception is raised by the context. If an excpetion is raised, the stage is left in the filesystem and NOT destroyed, for potential reuse later.
You can also use the stage’s create/destroy functions manually, like this:
stage = Stage() try: stage.create() # Explicitly create the stage directory. stage.fetch() # Fetch a source archive into the stage. stage.expand_archive() # Expand the archive into source_path. <install> # Build and install the archive. # (handled by user of Stage) finally: stage.destroy() # Explicitly destroy the stage directory.
There are two kinds of stages: named and unnamed. Named stages can persist between runs of spack, e.g. if you fetched a tarball but didn’t finish building it, you won’t have to fetch it again.
Unnamed stages are created using standard mkdtemp mechanisms or similar, and are intended to persist for only one run of spack.
- property archive_file
Path to the source archive within this stage directory.
- cache_mirror(mirror: MirrorCache, stats: MirrorStats) None [source]
Perform a fetch if the resource is not already cached
- Parameters:
mirror – the mirror to cache this Stage’s resource in
stats – this is updated depending on whether the caching operation succeeded or failed
- expand_archive()[source]
Changes to the stage directory and attempt to expand the downloaded archive. Fail if the stage is not set up or if the archive is not yet downloaded.
- property expanded
Returns True if source path expanded; else False.
- property expected_archive_files
Possible archive file paths.
- fetch(mirror_only: bool = False, err_msg: str | None = None) None [source]
Retrieves the code or archive
- Parameters:
mirror_only – only fetch from a mirror
err_msg – the error message to display if all fetchers fail or
None
for the default fetch failure message
- requires_patch_success = True
- property save_filename
- property source_path
Returns the well-known source directory path.
- class spack.stage.StageComposite[source]
Bases:
Composite
Composite for Stage type objects. The first item in this composite is considered to be the root package, and operations that return a value are forwarded to it.
- property archive_file
- property expanded
- classmethod from_iterable(iterable: Iterable[Stage]) StageComposite [source]
Create a new composite from an iterable of stages.
- property keep
- property path
- property requires_patch_success
- property source_path
- exception spack.stage.StageError(message, long_message=None)[source]
Bases:
SpackError
“Superclass for all errors encountered during staging.
- exception spack.stage.StagePathError(message, long_message=None)[source]
Bases:
StageError
“Error encountered with stage path.
- exception spack.stage.VersionFetchError(message, long_message=None)[source]
Bases:
StageError
Raised when we can’t determine a URL to fetch a package.
- spack.stage.create_stage_root(path: str) None [source]
Create the stage root directory and ensure appropriate access perms.
- spack.stage.ensure_access(file)[source]
Ensure we can access a directory and die with an error if we can’t.
- spack.stage.get_checksums_for_versions(url_by_version: Dict[StandardVersion, str], package_name: str, *, first_stage_function: Callable[[Stage, str], None] | None = None, keep_stage: bool = False, concurrency: int | None = None, fetch_options: Dict[str, str] | None = None) Dict[StandardVersion, str] [source]
Computes the checksums for each version passed in input, and returns the results.
Archives are fetched according to the usl dictionary passed as input.
The
first_stage_function
argument allows the caller to inspect the first downloaded archive, e.g., to determine the build system.- Parameters:
url_by_version – URL keyed by version
package_name – name of the package
first_stage_function – function that takes a Stage and a URL; this is run on the stage of the first URL downloaded
keep_stage – whether to keep staging area when command completes
batch – whether to ask user how many versions to fetch (false) or fetch all versions (true)
fetch_options – options used for the fetcher (such as timeout or cookies)
concurrency – maximum number of workers to use for retrieving archives
- Returns:
A dictionary mapping each version to the corresponding checksum
- spack.stage.interactive_version_filter(url_dict: ~typing.Dict[~spack.version.version_types.StandardVersion, str], known_versions: ~typing.Iterable[~spack.version.version_types.StandardVersion] = (), *, initial_verion_filter: ~spack.version.version_types.VersionList | None = None, url_changes: ~typing.Set[~spack.version.version_types.StandardVersion] = {}, input: ~typing.Callable[[...], str] = <built-in function input>) Dict[StandardVersion, str] | None [source]
Interactively filter the list of spidered versions.
- Parameters:
url_dict – Dictionary of versions to URLs
known_versions – Versions that can be skipped because they are already known
- Returns:
Filtered dictionary of versions to URLs or None if the user wants to quit
spack.store module
Components that manage Spack’s installation tree.
An install tree, or “build store” consists of two parts:
A package database that tracks what is installed.
A directory layout that determines how the installations are laid out.
The store contains all the install prefixes for packages installed by Spack. The simplest store could just contain prefixes named by DAG hash, but we use a fancier directory layout to make browsing the store and debugging easier.
- spack.store.DEFAULT_INSTALL_TREE_ROOT = '/home/docs/checkouts/readthedocs.org/user_builds/spack/checkouts/latest/lib/spack/docs/_spack_root/opt/spack'
default installation root, relative to the Spack install path
- exception spack.store.MatchError(message, long_message=None)[source]
Bases:
SpackError
Error occurring when trying to match specs in store against a constraint
- class spack.store.Store(root: str, unpadded_root: str | None = None, projections: Dict[str, str] | None = None, hash_length: int | None = None, upstreams: List[Database] | None = None, lock_cfg: LockConfiguration = (False, None, None))[source]
Bases:
object
A store is a path full of installed Spack packages.
Stores consist of packages installed according to a
DirectoryLayout
, along with a database of their contents.The directory layout controls what paths look like and how Spack ensures that each unique spec gets its own unique directory (or not, though we don’t recommend that).
The database is a single file that caches metadata for the entire Spack installation. It prevents us from having to spider the install tree to figure out what’s there.
The store is also able to lock installation prefixes, and to mark installation failures.
- Parameters:
root – path to the root of the install tree
unpadded_root – path to the root of the install tree without padding. The sbang script has to be installed here to work with padded roots
projections – expression according to guidelines that describes how to construct a path to a package prefix in this store
hash_length – length of the hashes used in the directory layout. Spec hash suffixes will be truncated to this length
upstreams – optional list of upstream databases
lock_cfg – lock configuration for the database
- spack.store.create(configuration: Configuration) Store [source]
Create a store from the configuration passed as input.
- Parameters:
configuration – configuration to create a store.
- spack.store.ensure_singleton_created() None [source]
Ensures the lazily evaluated singleton is created
- spack.store.find(constraints: str | List[str] | List[Spec], multiple: bool = False, query_fn: Callable[[Any], List[Spec]] | None = None, **kwargs) List[Spec] [source]
Returns a list of specs matching the constraints passed as inputs.
At least one spec per constraint must match, otherwise the function will error with an appropriate message.
By default, this function queries the current store, but a custom query function can be passed to hit any other source of concretized specs (e.g. a binary cache).
The query function must accept a spec as its first argument.
- Parameters:
constraints – spec(s) to be matched against installed packages
multiple – if True multiple matches per constraint are admitted
query_fn (Callable) – query function to get matching specs. By default,
spack.store.STORE.db.query
**kwargs – keyword arguments forwarded to the query function
- spack.store.parse_install_tree(config_dict)[source]
Parse config settings and return values relevant to the store object.
- Parameters:
config_dict (dict) – dictionary of config values, as returned from spack.config.get(‘config’)
- Returns:
- triple of the install tree root, the unpadded install tree
root (before padding was applied), and the projections for the install tree
- Return type:
(tuple)
Encapsulate backwards compatibility capabilities for install_tree and deprecated values that are now parsed as part of install_tree.
- spack.store.reinitialize()[source]
Restore globals to the same state they would have at start-up. Return a token containing the state of the store before reinitialization.
- spack.store.specfile_matches(filename: str, **kwargs) List[Spec] [source]
Same as find but reads the query from a spec file.
- Parameters:
filename – YAML or JSON file from which to read the query.
**kwargs – keyword arguments forwarded to “find”
- spack.store.use_store(path: str | Path, extra_data: Dict[str, Any] | None = None) Generator[Store, None, None] [source]
Use the store passed as argument within the context manager.
- Parameters:
path – path to the store.
extra_data – extra configuration under “config:install_tree” to be taken into account.
- Yields:
Store object associated with the context manager’s store
spack.subprocess_context module
This module handles transmission of Spack state to child processes started using the ‘spawn’ start method. Notably, installations are performed in a subprocess and require transmitting the Package object (in such a way that the repository is available for importing when it is deserialized); installations performed in Spack unit tests may include additional modifications to global state in memory that must be replicated in the child process.
- class spack.subprocess_context.GlobalStateMarshaler[source]
Bases:
object
Class to serialize and restore global state for child processes.
Spack may modify state that is normally read from disk or command line in memory; this object is responsible for properly serializing that state to be applied to a subprocess.
- class spack.subprocess_context.PackageInstallContext(pkg, *, ctx=None)[source]
Bases:
object
Captures the in-memory process state of a package installation that needs to be transmitted to a child process.
spack.tag module
Classes and functions to manage package tags
- class spack.tag.TagIndex(repository)[source]
Bases:
Mapping
Maps tags to list of packages.
- merge(other)[source]
Merge another tag index into this one.
- Parameters:
other (TagIndex) – tag index to be merged
- property tags
- exception spack.tag.TagIndexError(message, long_message=None)[source]
Bases:
SpackError
Raised when there is a problem with a TagIndex.
- spack.tag.packages_with_tags(tags, installed, skip_empty)[source]
Returns a dict, indexed by tag, containing lists of names of packages containing the tag or, if no tags, for all available tags.
- Parameters:
tags (list or None) – list of tags of interest or None for all
installed (bool) – True if want names of packages that are installed; otherwise, False if want all packages with the tag
skip_empty (bool) – True if exclude tags with no associated packages; otherwise, False if want entries for all tags even when no such tagged packages
spack.tengine module
- class spack.tengine.Context[source]
Bases:
object
Base class for context classes that are used with the template engine.
- context_properties = []
- class spack.tengine.ContextMeta(name, bases, attr_dict)[source]
Bases:
type
Meta class for Context. It helps reducing the boilerplate in client code.
- spack.tengine.context_property(func)
A saner way to use the decorator
spack.tokenize module
This module provides building blocks for tokenizing strings. Users can define tokens by inheriting from TokenBase and defining tokens as ordered enum members. The Tokenizer class can then be used to iterate over tokens in a string.
- class spack.tokenize.Token(kind: TokenBase, value: str, start: int = 0, end: int = 0)[source]
Bases:
object
Represents tokens; generated from input by lexer and fed to parse().
- end
- kind
- start
- value
spack.traverse module
- spack.traverse.traverse_edges(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[False] = False, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[DependencySpec] [source]
- spack.traverse.traverse_edges(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[True], key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Tuple[int, DependencySpec]]
- spack.traverse.traverse_edges(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: bool, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[DependencySpec | Tuple[int, DependencySpec]]
Iterable of edges from the DAG, starting from a list of root specs.
- Parameters:
specs – List of root specs (considered to be depth 0)
root – Yield the root nodes themselves
order – What order of traversal to use in the DAG. For depth-first search this can be
pre
orpost
. For BFS this should bebreadth
. For topological order usetopo
cover – Determines how extensively to cover the dag. Possible values:
nodes
– Visit each unique node in the dag only once.edges
– If a node has been visited once but is reached along a new path, it’s accepted, but not recurisvely followed. This traverses each ‘edge’ in the DAG once.paths
– Explore every unique path reachable from the root. This descends into visited subtrees and will accept nodes multiple times if they’re reachable by multiple paths.direction –
children
orparents
. Ifchildren
, does a traversal of this spec’s children. Ifparents
, traverses upwards in the DAG towards the root.deptype – allowed dependency types
depth – When
False
, yield just edges. WhenTrue
yield the tuple (depth, edge), where depth corresponds to the depth at which edge.spec was discovered.key – function that takes a spec and outputs a key for uniqueness test.
visited – a set of nodes not to follow
- Returns:
An iterable of
DependencySpec
if depth isFalse
or a tuple of(depth, DependencySpec)
if depth isTrue
.
- spack.traverse.traverse_nodes(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[False] = False, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Spec] [source]
- spack.traverse.traverse_nodes(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: ~typing.Literal[True], key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Tuple[int, Spec]]
- spack.traverse.traverse_nodes(specs: ~typing.Sequence[~spack.spec.Spec], *, root: bool = True, order: ~typing.Literal['pre', 'post', 'breadth', 'topo'] = 'pre', cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', direction: ~typing.Literal['children', 'parents'] = 'children', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', depth: bool, key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, visited: ~typing.Set[~typing.Any] | None = None) Iterable[Spec | Tuple[int, Spec]]
Iterable of specs from the DAG, starting from a list of root specs.
- Parameters:
specs – List of root specs (considered to be depth 0)
root – Yield the root nodes themselves
order – What order of traversal to use in the DAG. For depth-first search this can be
pre
orpost
. For BFS this should bebreadth
.cover – Determines how extensively to cover the dag. Possible values:
nodes
– Visit each unique node in the dag only once.edges
– If a node has been visited once but is reached along a new path, it’s accepted, but not recurisvely followed. This traverses each ‘edge’ in the DAG once.paths
– Explore every unique path reachable from the root. This descends into visited subtrees and will accept nodes multiple times if they’re reachable by multiple paths.direction –
children
orparents
. Ifchildren
, does a traversal of this spec’s children. Ifparents
, traverses upwards in the DAG towards the root.deptype – allowed dependency types
depth – When
False
, yield just edges. WhenTrue
yield the tuple(depth, edge)
, where depth corresponds to the depth at whichedge.spec
was discovered.key – function that takes a spec and outputs a key for uniqueness test.
visited – a set of nodes not to follow
- Yields:
By default
Spec
, or a tuple(depth, Spec)
if depth is set toTrue
.
- spack.traverse.traverse_tree(specs: ~typing.Sequence[~spack.spec.Spec], cover: ~typing.Literal['nodes', 'edges', 'paths'] = 'nodes', deptype: int | str | ~typing.List[str] | ~typing.Tuple[str, ...] = 'all', key: ~typing.Callable[[~spack.spec.Spec], ~typing.Any] = <built-in function id>, depth_first: bool = True) Iterable[Tuple[int, DependencySpec]] [source]
Generator that yields
(depth, DependencySpec)
tuples in the depth-first pre-order, so that a tree can be printed from it.- Parameters:
specs – List of root specs (considered to be depth 0)
cover – Determines how extensively to cover the dag. Possible values:
nodes
– Visit each unique node in the dag only once.edges
– If a node has been visited once but is reached along a new path, it’s accepted, but not recurisvely followed. This traverses each ‘edge’ in the DAG once.paths
– Explore every unique path reachable from the root. This descends into visited subtrees and will accept nodes multiple times if they’re reachable by multiple paths.deptype – allowed dependency types
key – function that takes a spec and outputs a key for uniqueness test.
depth_first – Explore the tree in depth-first or breadth-first order. When setting
depth_first=True
andcover=nodes
, each spec only occurs once at the shallowest level, which is useful when rendering the tree in a terminal.
- Returns:
A generator that yields
(depth, DependencySpec)
tuples in such an order that a tree can be printed.
spack.url module
This module has methods for parsing names and versions of packages from URLs. The idea is to allow package creators to supply nothing more than the download location of the package, and figure out version and name information from there.
Example: when spack is given the following URL:
It can figure out that the package name is hdf
, and that it is at version
4.2.12
. This is useful for making the creation of packages simple: a user
just supplies a URL and skeleton code is generated automatically.
Spack can also figure out that it can most likely download 4.2.6 at this URL:
This is useful if a user asks for a package at a particular version number; spack doesn’t need anyone to tell it where to get the tarball even though it’s never been told about that version before.
- exception spack.url.UndetectableNameError(path)[source]
Bases:
UrlParseError
Raised when we can’t parse a package name from a string.
- exception spack.url.UndetectableVersionError(path)[source]
Bases:
UrlParseError
Raised when we can’t parse a version from a string.
- exception spack.url.UrlParseError(msg, path)[source]
Bases:
SpackError
Raised when the URL module can’t parse something correctly.
- spack.url.color_url(path, **kwargs)[source]
Color the parts of the url according to Spack’s parsing.
- Colors are:
- Cyan: The version found by
parse_version_offset()
.Red: The name found byparse_name_offset()
.Green: Instances of version string fromsubstitute_version()
.Magenta: Instances of the name (protected from substitution).
- spack.url.find_all(substring, string)[source]
Returns a list containing the indices of every occurrence of substring in string.
- spack.url.find_versions_of_archive(archive_urls: str | Sequence[str], list_url: str | None = None, list_depth: int = 0, concurrency: int | None = 32, reference_package: Any | None = None) Dict[StandardVersion, str] [source]
Scrape web pages for new versions of a tarball. This function prefers URLs in the following order: links found on the scraped page that match a url generated by the reference package, found and in the archive_urls list, found and derived from those in the archive_urls list, and if none are found for a version then the item in the archive_urls list is included for the version.
- Parameters:
archive_urls – URL or sequence of URLs for different versions of a package. Typically these are just the tarballs from the package file itself. By default, this searches the parent directories of archives.
list_url – URL for a listing of archives. Spack will scrape these pages for download links that look like the archive URL.
list_depth – max depth to follow links on list_url pages. Defaults to 0.
concurrency – maximum number of concurrent requests
reference_package – a spack package used as a reference for url detection. Uses the url_for_version method on the package to produce reference urls which, if found, are preferred.
- spack.url.parse_name(path, ver=None)[source]
Try to determine the name of a package from its filename or URL.
- Parameters:
- Returns:
The name of the package
- Return type:
- Raises:
UndetectableNameError – If the URL does not match any regexes
- spack.url.parse_name_and_version(path)[source]
Try to determine the name of a package and extract its version from its filename or URL.
- Parameters:
path (str) – The filename or URL for the package
- Returns:
a tuple containing the package (name, version)
- Return type:
- Raises:
UndetectableVersionError – If the URL does not match any regexes
UndetectableNameError – If the URL does not match any regexes
- spack.url.parse_name_offset(path, v=None)[source]
Try to determine the name of a package from its filename or URL.
- Parameters:
- Returns:
- A tuple containing:
name of the package, first index of name, length of name, the index of the matching regex, the matching regex
- Return type:
- Raises:
UndetectableNameError – If the URL does not match any regexes
- spack.url.parse_version(path: str) StandardVersion [source]
Try to extract a version string from a filename or URL.
- Parameters:
path – The filename or URL for the package
Returns: The version of the package
- Raises:
UndetectableVersionError – If the URL does not match any regexes
- spack.url.parse_version_offset(path)[source]
Try to extract a version string from a filename or URL.
- Parameters:
path (str) – The filename or URL for the package
- Returns:
- A tuple containing:
version of the package, first index of version, length of version string, the index of the matching regex, the matching regex
- Return type:
- Raises:
UndetectableVersionError – If the URL does not match any regexes
- spack.url.strip_name_suffixes(path, version)[source]
Most tarballs contain a package name followed by a version number. However, some also contain extraneous information in-between the name and version:
rgb-1.0.6
converge_install_2.3.16
jpegsrc.v9b
These strings are not part of the package name and should be ignored. This function strips the version number and any extraneous suffixes off and returns the remaining string. The goal is that the name is always the last thing in
path
:rgb
converge
jpeg
- spack.url.substitute_version(path, new_version)[source]
Given a URL or archive name, find the version in the path and substitute the new version for it. Replace all occurrences of the version if they don’t overlap with the package name.
Simple example:
substitute_version('http://www.mr511.de/software/libelf-0.8.13.tar.gz', '2.9.3') >>> 'http://www.mr511.de/software/libelf-2.9.3.tar.gz'
Complex example:
substitute_version('https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.12/src/hdf-4.2.12.tar.gz', '2.3') >>> 'https://www.hdfgroup.org/ftp/HDF/releases/HDF2.3/src/hdf-2.3.tar.gz'
- spack.url.substitution_offsets(path)[source]
This returns offsets for substituting versions and names in the provided path. It is a helper for
substitute_version()
.
spack.user_environment module
- spack.user_environment.environment_modifications_for_specs(*specs: Spec, view=None, set_package_py_globals: bool = True)[source]
List of environment (shell) modifications to be processed for spec.
This list is specific to the location of the spec or its projection in the view.
- Parameters:
specs – spec(s) for which to list the environment modifications
view – view associated with the spec passed as first argument
set_package_py_globals – whether or not to set the global variables in the package.py files (this may be problematic when using buildcaches that have been built on a different but compatible OS)
- spack.user_environment.prefix_inspections(platform)[source]
Get list of prefix inspections for platform
- Parameters:
platform (str) – the name of the platform to consider. The platform determines what environment variables Spack will use for some inspections.
- Returns:
- A dictionary mapping subdirectory names to lists of environment
variables to modify with that directory if it exists.
- spack.user_environment.project_env_mods(*specs: Spec, view, env: EnvironmentModifications) None [source]
Given a list of environment modifications, project paths changes to the view.
- spack.user_environment.spack_loaded_hashes_var = 'SPACK_LOADED_HASHES'
Environment variable name Spack uses to track individually loaded packages
spack.variant module
The variant module contains data structures that are needed to manage variants both in packages and in specs.
- class spack.variant.AbstractVariant(name: str, value: Any, propagate: bool = False)[source]
Bases:
object
A variant that has not yet decided who it wants to be. It behaves like a multi valued variant which could do things.
This kind of variant is generated during parsing of expressions like
foo=bar
and differs from multi valued variants because it will satisfy any other variant with the same name. This is because it could do it if it grows up to be a multi valued variant with the right set of values.- compatible(other: AbstractVariant) bool [source]
Returns True if self and other are compatible, False otherwise.
As there is no semantic check, two VariantSpec are compatible if either they contain the same value or they are both multi-valued.
- Parameters:
other – instance against which we test compatibility
- Returns:
True or False
- Return type:
- constrain(other: AbstractVariant) bool [source]
Modify self to match all the constraints for other if both instances are multi-valued. Returns True if self changed, False otherwise.
- Parameters:
other – instance against which we constrain self
- Returns:
True or False
- Return type:
- copy() AbstractVariant [source]
Returns an instance of a variant equivalent to self
- Returns:
a copy of self
- Return type:
>>> a = MultiValuedVariant('foo', True) >>> b = a.copy() >>> assert a == b >>> assert a is not b
- static from_node_dict(name: str, value: str | List[str], *, propagate: bool = False) AbstractVariant [source]
Reconstruct a variant from a node dict.
- intersects(other: AbstractVariant) bool [source]
Returns True if there are variant matching both self and other, False otherwise.
- satisfies(other: AbstractVariant) bool [source]
Returns true if
other.name == self.name
, because any value that other holds and is not in self yet could be added.- Parameters:
other – constraint to be met for the method to return True
- Returns:
True or False
- Return type:
- property value: str | bool | Tuple[str | bool, ...]
Returns a tuple of strings containing the values stored in the variant.
- Returns:
values stored in the variant
- Return type:
- class spack.variant.BoolValuedVariant(name: str, value: Any, propagate: bool = False)[source]
Bases:
SingleValuedVariant
A variant that can hold either True or False.
BoolValuedVariant can also hold the value ‘*’, for coerced comparisons between
foo=*
and+foo
or~foo
.
- class spack.variant.ConditionalValue(value: Any, when: Spec | None)[source]
Bases:
object
Conditional value for a variant.
- class spack.variant.ConditionalVariantValues(iterable)[source]
Bases:
TypedMutableSequence
A list, just with a different type
- class spack.variant.DisjointSetsOfValues(*sets)[source]
Bases:
Sequence
Allows combinations from one of many mutually exclusive sets.
The value
('none',)
is reserved to denote the empty set and therefore no other set can contain the item'none'
.- Parameters:
*sets (list) – mutually exclusive sets of values
- feature_values
Attribute used to track values which correspond to features which can be enabled or disabled as understood by the package’s build system.
- property validator
- exception spack.variant.DuplicateVariantError(message, long_message=None)[source]
Bases:
SpecError
Raised when the same variant occurs in a spec twice.
- exception spack.variant.InconsistentValidationError(vspec, variant)[source]
Bases:
SpecError
Raised if the wrong validator is used to validate a variant.
- exception spack.variant.InvalidVariantValueCombinationError(message, long_message=None)[source]
Bases:
SpecError
Raised when a variant has values ‘*’ or ‘none’ with other values.
- exception spack.variant.InvalidVariantValueError(message, long_message=None)[source]
Bases:
SpecError
Raised when variants have invalid values.
- class spack.variant.MultiValuedVariant(name: str, value: Any, propagate: bool = False)[source]
Bases:
AbstractVariant
A variant that can hold multiple values at once.
- satisfies(other: AbstractVariant) bool [source]
Returns true if
other.name == self.name
andother.value
is a strict subset of self. Does not try to validate.- Parameters:
other – constraint to be met for the method to return True
- Returns:
True or False
- Return type:
- exception spack.variant.MultipleValuesInExclusiveVariantError(variant: AbstractVariant, pkg_name: str | None = None)[source]
Bases:
SpecError
,ValueError
Raised when multiple values are present in a variant that wants only one.
- spack.variant.SerializedValueType
Type of variant value when output for JSON, YAML, etc.
- class spack.variant.SingleValuedVariant(name: str, value: Any, propagate: bool = False)[source]
Bases:
AbstractVariant
A variant that can hold multiple values, but one at a time.
- compatible(other: AbstractVariant) bool [source]
Returns True if self and other are compatible, False otherwise.
As there is no semantic check, two VariantSpec are compatible if either they contain the same value or they are both multi-valued.
- Parameters:
other – instance against which we test compatibility
- Returns:
True or False
- Return type:
- constrain(other: AbstractVariant) bool [source]
Modify self to match all the constraints for other if both instances are multi-valued. Returns True if self changed, False otherwise.
- Parameters:
other – instance against which we constrain self
- Returns:
True or False
- Return type:
- intersects(other: AbstractVariant) bool [source]
Returns True if there are variant matching both self and other, False otherwise.
- satisfies(other: AbstractVariant) bool [source]
Returns true if
other.name == self.name
, because any value that other holds and is not in self yet could be added.- Parameters:
other – constraint to be met for the method to return True
- Returns:
True or False
- Return type:
- exception spack.variant.UnknownVariantError(msg: str, unknown_variants: List[str])[source]
Bases:
SpecError
Raised when an unknown variant occurs in a spec.
- exception spack.variant.UnsatisfiableVariantSpecError(provided, required)[source]
Bases:
UnsatisfiableSpecError
Raised when a spec variant conflicts with package constraints.
- class spack.variant.Variant(name: str, *, default: Any, description: str, values: Collection | Callable = (True, False), multi: bool = False, validator: Callable | None = None, sticky: bool = False, precedence: int = 0)[source]
Bases:
object
Represents a variant definition, created by the
variant()
directive.There can be multiple definitions of the same variant, and they are given precedence by order of appearance in the package. Later definitions have higher precedence. Similarly, definitions in derived classes have higher precedence than those in their superclasses.
- property allowed_values
Returns a string representation of the allowed values for printing purposes
- Returns:
representation of the allowed values
- Return type:
- make_default()[source]
Factory that creates a variant holding the default value.
- Returns:
instance of the proper variant
- Return type:
MultiValuedVariant or SingleValuedVariant or BoolValuedVariant
- make_variant(value) AbstractVariant [source]
Factory that creates a variant holding the value passed as a parameter.
- Parameters:
value – value that will be hold by the variant
- Returns:
instance of the proper variant
- Return type:
MultiValuedVariant or SingleValuedVariant or BoolValuedVariant
- validate_or_raise(vspec: AbstractVariant, pkg_name: str)[source]
Validate a variant spec against this package variant. Raises an exception if any error is found.
- Parameters:
vspec – variant spec to be validated
pkg_name – the name of the package class that required this validation (for errors)
- Raises:
InconsistentValidationError – if
vspec.name != self.name
MultipleValuesInExclusiveVariantError – if
vspec
has multiple values butself.multi == False
InvalidVariantValueError – if
vspec.value
contains invalid values
- values: Collection | None
if None, valid values are defined only by validators
- property variant_type: VariantType
String representation of the type of this variant (single/multi/bool)
- class spack.variant.VariantType(value)[source]
Bases:
Enum
Enum representing the three concrete variant types.
- BOOL = 'bool'
- MULTI = 'multi'
- SINGLE = 'single'
- spack.variant.any_combination_of(*values)[source]
Multi-valued variant that allows any combination of the specified values, and also allows the user to specify ‘none’ (as a string) to choose none of them.
It is up to the package implementation to handle the value ‘none’ specially, if at all.
- Parameters:
*values – allowed variant values
- Returns:
a properly initialized instance of DisjointSetsOfValues
- spack.variant.auto_or_any_combination_of(*values)[source]
Multi-valued variant that allows any combination of a set of values (but not the empty set) or ‘auto’.
- Parameters:
*values – allowed variant values
- Returns:
a properly initialized instance of DisjointSetsOfValues
- spack.variant.disjoint_sets(*sets)[source]
Multi-valued variant that allows any combination picking from one of multiple disjoint sets of values, and also allows the user to specify ‘none’ (as a string) to choose none of them.
It is up to the package implementation to handle the value ‘none’ specially, if at all.
- Parameters:
*sets
- Returns:
a properly initialized instance of DisjointSetsOfValues
- spack.variant.implicit_variant_conversion(method)[source]
Converts other to type(self) and calls method(self, other)
- Parameters:
method – any predicate method that takes another variant as an argument
Returns: decorated method
- spack.variant.prevalidate_variant_value(pkg_cls: Type[PackageBase], variant: AbstractVariant, spec: Spec | None = None, strict: bool = False) List[Variant] [source]
Do as much validation of a variant value as is possible before concretization.
This checks that the variant value is valid for some definition of the variant, and it raises if we know before concretization that the value cannot occur. On success it returns the variant definitions for which the variant is valid.
- Parameters:
pkg_cls – package in which variant is (potentially multiply) defined
variant – variant spec with value to validate
spec – optionally restrict validation only to variants defined for this spec
strict – if True, raise an exception if no variant definition is valid for any constraint on the spec.
- Returns:
list of variant definitions that will accept the given value. List will be empty only if the variant is a reserved variant.
- spack.variant.reserved_names = ['arch', 'architecture', 'dev_path', 'namespace', 'operating_system', 'os', 'patches', 'platform', 'target']
These are variant names used by Spack internally; packages can’t use them
spack.verify module
spack.verify_libraries module
- spack.verify_libraries.ALLOW_UNRESOLVED = ['linux-vdso.so.*', 'libselinux.so.*', 'ld-musl-*.so.*', 'ld-linux*.so.*', 'ld64.so.*', 'libanl.so.*', 'libc.so.*', 'libdl.so.*', 'libm.so.*', 'libmemusage.so.*', 'libmvec.so.*', 'libnsl.so.*', 'libnss_compat.so.*', 'libnss_db.so.*', 'libnss_dns.so.*', 'libnss_files.so.*', 'libnss_hesiod.so.*', 'libpcprofile.so.*', 'libpthread.so.*', 'libresolv.so.*', 'librt.so.*', 'libSegFault.so.*', 'libthread_db.so.*', 'libutil.so.*', 'libasan.so.*', 'libatomic.so.*', 'libcc1.so.*', 'libgcc_s.so.*', 'libgfortran.so.*', 'libgomp.so.*', 'libitm.so.*', 'liblsan.so.*', 'libquadmath.so.*', 'libssp.so.*', 'libstdc++.so.*', 'libtsan.so.*', 'libubsan.so.*', 'libudev.so.*', 'libcuda.so.*', 'libur_loader.so.*']
Patterns for names of libraries that are allowed to be unresolved when just looking at RPATHs added by Spack. These are libraries outside of Spack’s control, and assumed to be located in default search paths of the dynamic linker.
- class spack.verify_libraries.Problem(resolved: Dict[bytes, bytes], unresolved: List[bytes], relative_rpaths: List[bytes])[source]
Bases:
object
Bases:
BaseDirectoryVisitor
Return True from this function to recurse into the directory at os.path.join(root, rel_path). Return False in order not to recurse further.
- Parameters:
root – root directory
rel_path – relative path to current directory from
root
depth – depth of current directory from the
root
directory
- Returns:
True
when the directory should be recursed into.False
when not- Return type:
Return
True
to recurse into the symlinked directory andFalse
in order not to. Note:rel_path
is the path to the symlink itself. Following symlinked directories blindly can cause infinite recursion due to cycles.- Parameters:
root – root directory
rel_path – relative path to current symlink from
root
depth – depth of current symlink from the
root
directory
- Returns:
True
when the directory should be recursed into.False
when not- Return type:
Handle the non-symlink file at
os.path.join(root, rel_path)
- Parameters:
root – root directory
rel_path – relative path to current file from
root
depth (int) – depth of current file from the
root
directory
Handle the symlink to a file at
os.path.join(root, rel_path)
. Note:rel_path
is the location of the symlink, not to what it is pointing to. The symlink may be dangling.- Parameters:
root – root directory
rel_path – relative path to current symlink from
root
depth – depth of current symlink from the
root
directory