Copy disabled (too large)
Download .txt
Showing preview only (13,192K chars total). Download the full file to get everything.
Repository: LLNL/spack
Branch: develop
Commit: 7e864787bd15
Files: 1696
Total size: 12.2 MB
Directory structure:
gitextract_njnmw550/
├── .ci/
│ ├── gitlab/
│ │ └── forward_dotenv_variables.py
│ └── gitlab-ci.yml
├── .codecov.yml
├── .devcontainer/
│ ├── postCreateCommand.sh
│ ├── ubuntu20.04/
│ │ └── devcontainer.json
│ └── ubuntu22.04/
│ └── devcontainer.json
├── .dockerignore
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── dependabot.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── bin/
│ │ ├── canonicalize.py
│ │ ├── execute_installer.ps1
│ │ ├── format-rst.py
│ │ ├── generate_spack_yaml_containerize.sh
│ │ ├── setup_git.ps1
│ │ ├── setup_git.sh
│ │ └── system_shortcut_check.ps1
│ ├── bootstrap.yml
│ ├── build-containers.yml
│ ├── ci.yaml
│ ├── coverage.yml
│ ├── import-check.yaml
│ ├── prechecks.yml
│ ├── requirements/
│ │ ├── coverage/
│ │ │ └── requirements.txt
│ │ ├── style/
│ │ │ └── requirements.txt
│ │ └── unit_tests/
│ │ └── requirements.txt
│ ├── stale.yaml
│ ├── triage.yml
│ └── unit_tests.yaml
├── .gitignore
├── .mailmap
├── .readthedocs.yml
├── CHANGELOG.md
├── CITATION.cff
├── COPYRIGHT
├── LICENSE-APACHE
├── LICENSE-MIT
├── NEWS.md
├── NOTICE
├── README.md
├── SECURITY.md
├── bin/
│ ├── haspywin.py
│ ├── sbang
│ ├── spack
│ ├── spack-python
│ ├── spack-tmpconfig
│ ├── spack.bat
│ ├── spack.ps1
│ ├── spack_cmd.bat
│ └── spack_pwsh.ps1
├── etc/
│ └── spack/
│ └── defaults/
│ ├── base/
│ │ ├── concretizer.yaml
│ │ ├── config.yaml
│ │ ├── mirrors.yaml
│ │ ├── modules.yaml
│ │ ├── packages.yaml
│ │ └── repos.yaml
│ ├── bootstrap.yaml
│ ├── darwin/
│ │ ├── modules.yaml
│ │ └── packages.yaml
│ ├── include.yaml
│ ├── linux/
│ │ └── modules.yaml
│ └── windows/
│ ├── config.yaml
│ └── packages.yaml
├── lib/
│ └── spack/
│ ├── _vendoring/
│ │ └── __init__.py
│ ├── docs/
│ │ ├── .gitignore
│ │ ├── .spack/
│ │ │ └── repos.yaml
│ │ ├── Makefile
│ │ ├── _gh_pages_redirect/
│ │ │ ├── .nojekyll
│ │ │ └── index.html
│ │ ├── _static/
│ │ │ ├── css/
│ │ │ │ └── custom.css
│ │ │ └── js/
│ │ │ └── versions.js
│ │ ├── _templates/
│ │ │ ├── base.html
│ │ │ └── sidebar/
│ │ │ └── brand.html
│ │ ├── advanced_topics.rst
│ │ ├── binary_caches.rst
│ │ ├── bootstrapping.rst
│ │ ├── build_settings.rst
│ │ ├── build_systems/
│ │ │ ├── autotoolspackage.rst
│ │ │ ├── bundlepackage.rst
│ │ │ ├── cachedcmakepackage.rst
│ │ │ ├── cmakepackage.rst
│ │ │ ├── cudapackage.rst
│ │ │ ├── custompackage.rst
│ │ │ ├── inteloneapipackage.rst
│ │ │ ├── luapackage.rst
│ │ │ ├── makefilepackage.rst
│ │ │ ├── mavenpackage.rst
│ │ │ ├── mesonpackage.rst
│ │ │ ├── octavepackage.rst
│ │ │ ├── perlpackage.rst
│ │ │ ├── pythonpackage.rst
│ │ │ ├── qmakepackage.rst
│ │ │ ├── racketpackage.rst
│ │ │ ├── rocmpackage.rst
│ │ │ ├── rpackage.rst
│ │ │ ├── rubypackage.rst
│ │ │ ├── sconspackage.rst
│ │ │ ├── sippackage.rst
│ │ │ ├── sourceforgepackage.rst
│ │ │ └── wafpackage.rst
│ │ ├── build_systems.rst
│ │ ├── chain.rst
│ │ ├── command_index.in
│ │ ├── conf.py
│ │ ├── config_yaml.rst
│ │ ├── configuration.rst
│ │ ├── configuring_compilers.rst
│ │ ├── containers.rst
│ │ ├── contribution_guide.rst
│ │ ├── developer_guide.rst
│ │ ├── env_vars_yaml.rst
│ │ ├── environments.rst
│ │ ├── environments_basics.rst
│ │ ├── extensions.rst
│ │ ├── features.rst
│ │ ├── frequently_asked_questions.rst
│ │ ├── getting_help.rst
│ │ ├── getting_started.rst
│ │ ├── google5fda5f94b4ffb8de.html
│ │ ├── gpu_configuration.rst
│ │ ├── images/
│ │ │ └── packaging.excalidrawlib
│ │ ├── include_yaml.rst
│ │ ├── index.rst
│ │ ├── installing.rst
│ │ ├── installing_prerequisites.rst
│ │ ├── mirrors.rst
│ │ ├── module_file_support.rst
│ │ ├── package_api.rst
│ │ ├── package_fundamentals.rst
│ │ ├── package_review_guide.rst
│ │ ├── packages_yaml.rst
│ │ ├── packaging_guide_advanced.rst
│ │ ├── packaging_guide_build.rst
│ │ ├── packaging_guide_creation.rst
│ │ ├── packaging_guide_testing.rst
│ │ ├── pipelines.rst
│ │ ├── repositories.rst
│ │ ├── requirements.txt
│ │ ├── roles_and_responsibilities.rst
│ │ ├── signing.rst
│ │ ├── spack.yaml
│ │ ├── spec_syntax.rst
│ │ ├── toolchains_yaml.rst
│ │ └── windows.rst
│ ├── llnl/
│ │ └── __init__.py
│ └── spack/
│ ├── __init__.py
│ ├── aliases.py
│ ├── archspec.py
│ ├── audit.py
│ ├── binary_distribution.py
│ ├── bootstrap/
│ │ ├── __init__.py
│ │ ├── _common.py
│ │ ├── clingo.py
│ │ ├── config.py
│ │ ├── core.py
│ │ ├── environment.py
│ │ ├── prototypes/
│ │ │ ├── clingo-darwin-aarch64.json
│ │ │ ├── clingo-darwin-x86_64.json
│ │ │ ├── clingo-freebsd-amd64.json
│ │ │ ├── clingo-linux-aarch64.json
│ │ │ ├── clingo-linux-ppc64le.json
│ │ │ ├── clingo-linux-x86_64.json
│ │ │ └── clingo-windows-x86_64.json
│ │ └── status.py
│ ├── build_environment.py
│ ├── buildcache_migrate.py
│ ├── buildcache_prune.py
│ ├── builder.py
│ ├── caches.py
│ ├── ci/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── generator_registry.py
│ │ └── gitlab.py
│ ├── cmd/
│ │ ├── __init__.py
│ │ ├── add.py
│ │ ├── arch.py
│ │ ├── audit.py
│ │ ├── blame.py
│ │ ├── bootstrap.py
│ │ ├── build_env.py
│ │ ├── buildcache.py
│ │ ├── cd.py
│ │ ├── change.py
│ │ ├── checksum.py
│ │ ├── ci.py
│ │ ├── clean.py
│ │ ├── commands.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── arguments.py
│ │ │ ├── confirmation.py
│ │ │ ├── env_utility.py
│ │ │ └── spec_strings.py
│ │ ├── compiler.py
│ │ ├── compilers.py
│ │ ├── concretize.py
│ │ ├── config.py
│ │ ├── containerize.py
│ │ ├── create.py
│ │ ├── debug.py
│ │ ├── deconcretize.py
│ │ ├── dependencies.py
│ │ ├── dependents.py
│ │ ├── deprecate.py
│ │ ├── dev_build.py
│ │ ├── develop.py
│ │ ├── diff.py
│ │ ├── docs.py
│ │ ├── edit.py
│ │ ├── env.py
│ │ ├── extensions.py
│ │ ├── external.py
│ │ ├── fetch.py
│ │ ├── find.py
│ │ ├── gc.py
│ │ ├── gpg.py
│ │ ├── graph.py
│ │ ├── help.py
│ │ ├── info.py
│ │ ├── install.py
│ │ ├── installer/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── README.md
│ │ │ ├── bundle.wxs.in
│ │ │ ├── patch.xml
│ │ │ └── spack.wxs.in
│ │ ├── license.py
│ │ ├── list.py
│ │ ├── load.py
│ │ ├── location.py
│ │ ├── log_parse.py
│ │ ├── logs.py
│ │ ├── maintainers.py
│ │ ├── make_installer.py
│ │ ├── mark.py
│ │ ├── mirror.py
│ │ ├── module.py
│ │ ├── modules/
│ │ │ ├── __init__.py
│ │ │ ├── lmod.py
│ │ │ └── tcl.py
│ │ ├── patch.py
│ │ ├── pkg.py
│ │ ├── providers.py
│ │ ├── pydoc.py
│ │ ├── python.py
│ │ ├── reindex.py
│ │ ├── remove.py
│ │ ├── repo.py
│ │ ├── resource.py
│ │ ├── restage.py
│ │ ├── solve.py
│ │ ├── spec.py
│ │ ├── stage.py
│ │ ├── style.py
│ │ ├── tags.py
│ │ ├── test.py
│ │ ├── test_env.py
│ │ ├── tutorial.py
│ │ ├── undevelop.py
│ │ ├── uninstall.py
│ │ ├── unit_test.py
│ │ ├── unload.py
│ │ ├── url.py
│ │ ├── verify.py
│ │ ├── versions.py
│ │ └── view.py
│ ├── compilers/
│ │ ├── __init__.py
│ │ ├── adaptor.py
│ │ ├── config.py
│ │ ├── error.py
│ │ ├── flags.py
│ │ └── libraries.py
│ ├── concretize.py
│ ├── config.py
│ ├── container/
│ │ ├── __init__.py
│ │ ├── images.json
│ │ ├── images.py
│ │ └── writers.py
│ ├── context.py
│ ├── cray_manifest.py
│ ├── database.py
│ ├── dependency.py
│ ├── deptypes.py
│ ├── detection/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── path.py
│ │ └── test.py
│ ├── directives.py
│ ├── directives_meta.py
│ ├── directory_layout.py
│ ├── enums.py
│ ├── environment/
│ │ ├── __init__.py
│ │ ├── depfile.py
│ │ ├── environment.py
│ │ ├── list.py
│ │ └── shell.py
│ ├── error.py
│ ├── extensions.py
│ ├── externals.py
│ ├── fetch_strategy.py
│ ├── filesystem_view.py
│ ├── graph.py
│ ├── hash_types.py
│ ├── hooks/
│ │ ├── __init__.py
│ │ ├── absolutify_elf_sonames.py
│ │ ├── autopush.py
│ │ ├── drop_redundant_rpaths.py
│ │ ├── licensing.py
│ │ ├── module_file_generation.py
│ │ ├── permissions_setters.py
│ │ ├── resolve_shared_libraries.py
│ │ ├── sbang.py
│ │ ├── windows_runtime_linkage.py
│ │ └── write_install_manifest.py
│ ├── install_test.py
│ ├── installer.py
│ ├── installer_dispatch.py
│ ├── llnl/
│ │ ├── __init__.py
│ │ ├── path.py
│ │ ├── string.py
│ │ ├── url.py
│ │ └── util/
│ │ ├── __init__.py
│ │ ├── argparsewriter.py
│ │ ├── filesystem.py
│ │ ├── lang.py
│ │ ├── link_tree.py
│ │ ├── lock.py
│ │ ├── symlink.py
│ │ └── tty/
│ │ ├── __init__.py
│ │ ├── colify.py
│ │ ├── color.py
│ │ └── log.py
│ ├── main.py
│ ├── mirrors/
│ │ ├── __init__.py
│ │ ├── layout.py
│ │ ├── mirror.py
│ │ └── utils.py
│ ├── mixins.py
│ ├── modules/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── lmod.py
│ │ └── tcl.py
│ ├── multimethod.py
│ ├── new_installer.py
│ ├── oci/
│ │ ├── __init__.py
│ │ ├── image.py
│ │ ├── oci.py
│ │ └── opener.py
│ ├── operating_systems/
│ │ ├── __init__.py
│ │ ├── _operating_system.py
│ │ ├── freebsd.py
│ │ ├── linux_distro.py
│ │ ├── mac_os.py
│ │ └── windows_os.py
│ ├── package.py
│ ├── package_base.py
│ ├── package_completions.py
│ ├── package_prefs.py
│ ├── package_test.py
│ ├── patch.py
│ ├── paths.py
│ ├── phase_callbacks.py
│ ├── platforms/
│ │ ├── __init__.py
│ │ ├── _functions.py
│ │ ├── _platform.py
│ │ ├── cray.py
│ │ ├── darwin.py
│ │ ├── freebsd.py
│ │ ├── linux.py
│ │ ├── test.py
│ │ └── windows.py
│ ├── projections.py
│ ├── provider_index.py
│ ├── relocate.py
│ ├── relocate_text.py
│ ├── repo.py
│ ├── repo_migrate.py
│ ├── report.py
│ ├── reporters/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── cdash.py
│ │ ├── extract.py
│ │ └── junit.py
│ ├── resource.py
│ ├── rewiring.py
│ ├── schema/
│ │ ├── __init__.py
│ │ ├── bootstrap.py
│ │ ├── buildcache_spec.py
│ │ ├── cdash.py
│ │ ├── ci.py
│ │ ├── compilers.py
│ │ ├── concretizer.py
│ │ ├── config.py
│ │ ├── container.py
│ │ ├── cray_manifest.py
│ │ ├── database_index.py
│ │ ├── definitions.py
│ │ ├── develop.py
│ │ ├── env.py
│ │ ├── env_vars.py
│ │ ├── environment.py
│ │ ├── include.py
│ │ ├── merged.py
│ │ ├── mirrors.py
│ │ ├── modules.py
│ │ ├── packages.py
│ │ ├── projections.py
│ │ ├── repos.py
│ │ ├── spec.py
│ │ ├── spec_list.py
│ │ ├── toolchains.py
│ │ ├── upstreams.py
│ │ ├── url_buildcache_manifest.py
│ │ └── view.py
│ ├── solver/
│ │ ├── __init__.py
│ │ ├── asp.py
│ │ ├── concretize.lp
│ │ ├── core.py
│ │ ├── direct_dependency.lp
│ │ ├── display.lp
│ │ ├── error_messages.lp
│ │ ├── heuristic.lp
│ │ ├── input_analysis.py
│ │ ├── libc_compatibility.lp
│ │ ├── os_compatibility.lp
│ │ ├── requirements.py
│ │ ├── reuse.py
│ │ ├── runtimes.py
│ │ ├── splices.lp
│ │ ├── splicing.py
│ │ ├── versions.py
│ │ └── when_possible.lp
│ ├── spec.py
│ ├── spec_filter.py
│ ├── spec_parser.py
│ ├── stage.py
│ ├── store.py
│ ├── subprocess_context.py
│ ├── tag.py
│ ├── tengine.py
│ ├── test/
│ │ ├── __init__.py
│ │ ├── architecture.py
│ │ ├── audit.py
│ │ ├── binary_distribution.py
│ │ ├── bootstrap.py
│ │ ├── build_distribution.py
│ │ ├── build_environment.py
│ │ ├── build_system_guess.py
│ │ ├── builder.py
│ │ ├── buildrequest.py
│ │ ├── buildtask.py
│ │ ├── cache_fetch.py
│ │ ├── cc.py
│ │ ├── ci.py
│ │ ├── cmd/
│ │ │ ├── __init__.py
│ │ │ ├── arch.py
│ │ │ ├── audit.py
│ │ │ ├── blame.py
│ │ │ ├── bootstrap.py
│ │ │ ├── build_env.py
│ │ │ ├── buildcache.py
│ │ │ ├── cd.py
│ │ │ ├── checksum.py
│ │ │ ├── ci.py
│ │ │ ├── clean.py
│ │ │ ├── commands.py
│ │ │ ├── common/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── arguments.py
│ │ │ │ └── spec_strings.py
│ │ │ ├── compiler.py
│ │ │ ├── concretize.py
│ │ │ ├── config.py
│ │ │ ├── create.py
│ │ │ ├── debug.py
│ │ │ ├── deconcretize.py
│ │ │ ├── dependencies.py
│ │ │ ├── dependents.py
│ │ │ ├── deprecate.py
│ │ │ ├── dev_build.py
│ │ │ ├── develop.py
│ │ │ ├── diff.py
│ │ │ ├── edit.py
│ │ │ ├── env.py
│ │ │ ├── extensions.py
│ │ │ ├── external.py
│ │ │ ├── fetch.py
│ │ │ ├── find.py
│ │ │ ├── gc.py
│ │ │ ├── gpg.py
│ │ │ ├── graph.py
│ │ │ ├── help.py
│ │ │ ├── info.py
│ │ │ ├── init_py_functions.py
│ │ │ ├── install.py
│ │ │ ├── is_git_repo.py
│ │ │ ├── license.py
│ │ │ ├── list.py
│ │ │ ├── load.py
│ │ │ ├── location.py
│ │ │ ├── logs.py
│ │ │ ├── maintainers.py
│ │ │ ├── mark.py
│ │ │ ├── mirror.py
│ │ │ ├── module.py
│ │ │ ├── pkg.py
│ │ │ ├── print_shell_vars.py
│ │ │ ├── providers.py
│ │ │ ├── python.py
│ │ │ ├── reindex.py
│ │ │ ├── repo.py
│ │ │ ├── resource.py
│ │ │ ├── spec.py
│ │ │ ├── stage.py
│ │ │ ├── style.py
│ │ │ ├── tags.py
│ │ │ ├── test.py
│ │ │ ├── undevelop.py
│ │ │ ├── uninstall.py
│ │ │ ├── unit_test.py
│ │ │ ├── url.py
│ │ │ ├── verify.py
│ │ │ ├── versions.py
│ │ │ └── view.py
│ │ ├── cmd_extensions.py
│ │ ├── compilers/
│ │ │ ├── conversion.py
│ │ │ └── libraries.py
│ │ ├── concretization/
│ │ │ ├── compiler_runtimes.py
│ │ │ ├── conditional_dependencies.py
│ │ │ ├── core.py
│ │ │ ├── errors.py
│ │ │ ├── flag_mixing.py
│ │ │ ├── preferences.py
│ │ │ ├── requirements.py
│ │ │ └── splicing.py
│ │ ├── config.py
│ │ ├── config_values.py
│ │ ├── conftest.py
│ │ ├── container/
│ │ │ ├── cli.py
│ │ │ ├── conftest.py
│ │ │ ├── docker.py
│ │ │ ├── images.py
│ │ │ └── singularity.py
│ │ ├── cray_manifest.py
│ │ ├── cvs_fetch.py
│ │ ├── data/
│ │ │ ├── compiler_verbose_output/
│ │ │ │ ├── cce-8.6.5.txt
│ │ │ │ ├── clang-4.0.1.txt
│ │ │ │ ├── clang-9.0.0-apple-ld.txt
│ │ │ │ ├── collect2-6.3.0-gnu-ld.txt
│ │ │ │ ├── gcc-7.3.1.txt
│ │ │ │ ├── icc-16.0.3.txt
│ │ │ │ ├── nag-6.2-gcc-6.5.0.txt
│ │ │ │ ├── obscure-parsing-rules.txt
│ │ │ │ └── xl-13.1.5.txt
│ │ │ ├── compression/
│ │ │ │ ├── Foo
│ │ │ │ ├── Foo.Z
│ │ │ │ ├── Foo.bz2
│ │ │ │ ├── Foo.cxx
│ │ │ │ ├── Foo.tar.Z
│ │ │ │ ├── Foo.tar.bz2
│ │ │ │ ├── Foo.tar.xz
│ │ │ │ ├── Foo.tbz
│ │ │ │ ├── Foo.tbz2
│ │ │ │ ├── Foo.tgz
│ │ │ │ ├── Foo.txz
│ │ │ │ └── Foo.xz
│ │ │ ├── config/
│ │ │ │ ├── base/
│ │ │ │ │ └── config.yaml
│ │ │ │ ├── bootstrap.yaml
│ │ │ │ ├── concretizer.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── include.yaml
│ │ │ │ ├── modules.yaml
│ │ │ │ ├── packages.yaml
│ │ │ │ └── repos.yaml
│ │ │ ├── conftest/
│ │ │ │ └── diff-test/
│ │ │ │ ├── package-0.txt
│ │ │ │ ├── package-1.txt
│ │ │ │ ├── package-2.txt
│ │ │ │ └── package-3.txt
│ │ │ ├── directory_search/
│ │ │ │ ├── README.txt
│ │ │ │ ├── a/
│ │ │ │ │ ├── c.h
│ │ │ │ │ ├── foobar.txt
│ │ │ │ │ ├── libc.a
│ │ │ │ │ └── libc.lib
│ │ │ │ ├── b/
│ │ │ │ │ ├── b.h
│ │ │ │ │ ├── bar.txp
│ │ │ │ │ ├── d.h
│ │ │ │ │ ├── liba.a
│ │ │ │ │ ├── liba.lib
│ │ │ │ │ ├── libd.a
│ │ │ │ │ └── libd.lib
│ │ │ │ └── c/
│ │ │ │ ├── a.h
│ │ │ │ ├── bar.txt
│ │ │ │ ├── libb.a
│ │ │ │ └── libb.lib
│ │ │ ├── filter_file/
│ │ │ │ ├── selfextract.bsx
│ │ │ │ ├── start_stop.txt
│ │ │ │ └── x86_cpuid_info.c
│ │ │ ├── make/
│ │ │ │ ├── affirmative/
│ │ │ │ │ ├── capital_makefile/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── check_test/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── expansion/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── gnu_makefile/
│ │ │ │ │ │ └── GNUmakefile
│ │ │ │ │ ├── include/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ └── make.mk
│ │ │ │ │ ├── lowercase_makefile/
│ │ │ │ │ │ └── makefile
│ │ │ │ │ ├── prerequisites/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── spaces/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── test_check/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ └── three_targets/
│ │ │ │ │ └── Makefile
│ │ │ │ └── negative/
│ │ │ │ ├── no_makefile/
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── partial_match/
│ │ │ │ │ └── Makefile
│ │ │ │ └── variable/
│ │ │ │ └── Makefile
│ │ │ ├── microarchitectures/
│ │ │ │ └── microarchitectures.json
│ │ │ ├── mirrors/
│ │ │ │ ├── legacy_yaml/
│ │ │ │ │ └── build_cache/
│ │ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ │ └── gcc-4.5.0/
│ │ │ │ │ │ └── zlib-1.2.11/
│ │ │ │ │ │ └── test-debian6-core2-gcc-4.5.0-zlib-1.2.11-t5mczux3tfqpxwmg7egp7axy2jvyulqk.spack
│ │ │ │ │ └── test-debian6-core2-gcc-4.5.0-zlib-1.2.11-t5mczux3tfqpxwmg7egp7axy2jvyulqk.spec.yaml
│ │ │ │ ├── signed_json/
│ │ │ │ │ └── linux-ubuntu18.04-haswell-gcc-8.4.0-zlib-1.2.12-g7otk5dra3hifqxej36m5qzm7uyghqgb.spec.json.sig
│ │ │ │ └── v2_layout/
│ │ │ │ ├── signed/
│ │ │ │ │ └── build_cache/
│ │ │ │ │ ├── _pgp/
│ │ │ │ │ │ ├── CBAB2C1032C6FF5078049EC0FA61D50C12CAD37E.pub
│ │ │ │ │ │ └── index.json
│ │ │ │ │ ├── index.json
│ │ │ │ │ ├── index.json.hash
│ │ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ │ └── gcc-10.2.1/
│ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spack
│ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spack
│ │ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spec.json.sig
│ │ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1/
│ │ │ │ │ │ ├── gcc-10.2.1/
│ │ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spack
│ │ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spack
│ │ │ │ │ │ └── none-none/
│ │ │ │ │ │ ├── compiler-wrapper-1.0/
│ │ │ │ │ │ │ └── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spack
│ │ │ │ │ │ └── gcc-runtime-10.2.1/
│ │ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spack
│ │ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spec.json.sig
│ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spec.json.sig
│ │ │ │ └── unsigned/
│ │ │ │ └── build_cache/
│ │ │ │ ├── index.json
│ │ │ │ ├── index.json.hash
│ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ └── gcc-10.2.1/
│ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spack
│ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spack
│ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spec.json
│ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spec.json
│ │ │ │ ├── test-debian6-m1/
│ │ │ │ │ ├── gcc-10.2.1/
│ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spack
│ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spack
│ │ │ │ │ └── none-none/
│ │ │ │ │ ├── compiler-wrapper-1.0/
│ │ │ │ │ │ └── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spack
│ │ │ │ │ └── gcc-runtime-10.2.1/
│ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spack
│ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spec.json
│ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spec.json
│ │ │ │ ├── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spec.json
│ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spec.json
│ │ │ ├── modules/
│ │ │ │ ├── lmod/
│ │ │ │ │ ├── alter_environment.yaml
│ │ │ │ │ ├── autoload_all.yaml
│ │ │ │ │ ├── autoload_direct.yaml
│ │ │ │ │ ├── complex_hierarchy.yaml
│ │ │ │ │ ├── conflicts.yaml
│ │ │ │ │ ├── core_compilers.yaml
│ │ │ │ │ ├── core_compilers_at_equal.yaml
│ │ │ │ │ ├── core_compilers_empty.yaml
│ │ │ │ │ ├── exclude.yaml
│ │ │ │ │ ├── hide_implicits.yaml
│ │ │ │ │ ├── missing_core_compilers.yaml
│ │ │ │ │ ├── module_path_separator.yaml
│ │ │ │ │ ├── no_arch.yaml
│ │ │ │ │ ├── no_hash.yaml
│ │ │ │ │ ├── override_template.yaml
│ │ │ │ │ ├── projections.yaml
│ │ │ │ │ ├── with_view.yaml
│ │ │ │ │ └── wrong_conflicts.yaml
│ │ │ │ └── tcl/
│ │ │ │ ├── alter_environment.yaml
│ │ │ │ ├── autoload_all.yaml
│ │ │ │ ├── autoload_direct.yaml
│ │ │ │ ├── autoload_with_constraints.yaml
│ │ │ │ ├── conflicts.yaml
│ │ │ │ ├── exclude.yaml
│ │ │ │ ├── exclude_implicits.yaml
│ │ │ │ ├── hide_implicits.yaml
│ │ │ │ ├── invalid_naming_scheme.yaml
│ │ │ │ ├── invalid_token_in_env_var_name.yaml
│ │ │ │ ├── module_path_separator.yaml
│ │ │ │ ├── naming_scheme.yaml
│ │ │ │ ├── no_arch.yaml
│ │ │ │ ├── override_config.yaml
│ │ │ │ ├── override_template.yaml
│ │ │ │ ├── prerequisites_all.yaml
│ │ │ │ ├── prerequisites_direct.yaml
│ │ │ │ ├── projections.yaml
│ │ │ │ ├── suffix-format.yaml
│ │ │ │ ├── suffix.yaml
│ │ │ │ └── wrong_conflicts.yaml
│ │ │ ├── ninja/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── affirmative/
│ │ │ │ │ ├── check_test/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── include/
│ │ │ │ │ │ ├── build.ninja
│ │ │ │ │ │ └── include.ninja
│ │ │ │ │ ├── simple/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── spaces/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── subninja/
│ │ │ │ │ │ ├── build.ninja
│ │ │ │ │ │ └── subninja.ninja
│ │ │ │ │ ├── test_check/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ └── three_targets/
│ │ │ │ │ └── build.ninja
│ │ │ │ └── negative/
│ │ │ │ ├── no_ninja/
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── partial_match/
│ │ │ │ │ └── build.ninja
│ │ │ │ ├── rule/
│ │ │ │ │ └── build.ninja
│ │ │ │ └── variable/
│ │ │ │ └── build.ninja
│ │ │ ├── patch/
│ │ │ │ ├── foo.patch
│ │ │ │ └── foo.tgz
│ │ │ ├── sourceme_first.bat
│ │ │ ├── sourceme_first.sh
│ │ │ ├── sourceme_lmod.sh
│ │ │ ├── sourceme_modules.bat
│ │ │ ├── sourceme_modules.sh
│ │ │ ├── sourceme_parameters.bat
│ │ │ ├── sourceme_parameters.sh
│ │ │ ├── sourceme_second.bat
│ │ │ ├── sourceme_second.sh
│ │ │ ├── sourceme_unicode.bat
│ │ │ ├── sourceme_unicode.sh
│ │ │ ├── sourceme_unset.bat
│ │ │ ├── sourceme_unset.sh
│ │ │ ├── style/
│ │ │ │ ├── broken.dummy
│ │ │ │ └── fixed.py
│ │ │ ├── templates/
│ │ │ │ ├── a.txt
│ │ │ │ ├── extension.tcl
│ │ │ │ └── override.txt
│ │ │ ├── templates_again/
│ │ │ │ ├── b.txt
│ │ │ │ └── override_from_modules.txt
│ │ │ ├── test/
│ │ │ │ └── test_stage/
│ │ │ │ └── gavrxt67t7yaiwfek7dds7lgokmoaiin/
│ │ │ │ ├── printing-package-1.0-hzgcoow-test-out.txt
│ │ │ │ ├── printing-package-1.0-hzgcoow-tested.txt
│ │ │ │ └── results.txt
│ │ │ ├── unparse/
│ │ │ │ ├── README.md
│ │ │ │ ├── amdfftw.txt
│ │ │ │ ├── grads.txt
│ │ │ │ ├── legion.txt
│ │ │ │ ├── llvm.txt
│ │ │ │ ├── mfem.txt
│ │ │ │ ├── py-torch.txt
│ │ │ │ └── trilinos.txt
│ │ │ └── web/
│ │ │ ├── 1.html
│ │ │ ├── 2.html
│ │ │ ├── 3.html
│ │ │ ├── 4.html
│ │ │ ├── fragment.html
│ │ │ ├── index.html
│ │ │ ├── index_with_fragment.html
│ │ │ └── index_with_javascript.html
│ │ ├── database.py
│ │ ├── detection.py
│ │ ├── directives.py
│ │ ├── directory_layout.py
│ │ ├── entry_points.py
│ │ ├── env.py
│ │ ├── environment/
│ │ │ └── mutate.py
│ │ ├── environment_modifications.py
│ │ ├── error_messages.py
│ │ ├── externals.py
│ │ ├── fetch_strategy.py
│ │ ├── flag_handlers.py
│ │ ├── gcs_fetch.py
│ │ ├── git_fetch.py
│ │ ├── graph.py
│ │ ├── hg_fetch.py
│ │ ├── hooks/
│ │ │ └── absolutify_elf_sonames.py
│ │ ├── install.py
│ │ ├── installer.py
│ │ ├── installer_build_graph.py
│ │ ├── installer_tui.py
│ │ ├── jobserver.py
│ │ ├── link_paths.py
│ │ ├── llnl/
│ │ │ ├── llnl_string.py
│ │ │ ├── url.py
│ │ │ └── util/
│ │ │ ├── __init__.py
│ │ │ ├── argparsewriter.py
│ │ │ ├── file_list.py
│ │ │ ├── filesystem.py
│ │ │ ├── lang.py
│ │ │ ├── link_tree.py
│ │ │ ├── lock.py
│ │ │ ├── symlink.py
│ │ │ └── tty/
│ │ │ ├── __init__.py
│ │ │ ├── colify.py
│ │ │ ├── color.py
│ │ │ ├── log.py
│ │ │ └── tty.py
│ │ ├── main.py
│ │ ├── make_executable.py
│ │ ├── mirror.py
│ │ ├── module_parsing.py
│ │ ├── modules/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── conftest.py
│ │ │ ├── lmod.py
│ │ │ └── tcl.py
│ │ ├── multimethod.py
│ │ ├── namespace_trie.py
│ │ ├── new_installer.py
│ │ ├── oci/
│ │ │ ├── image.py
│ │ │ ├── integration_test.py
│ │ │ ├── mock_registry.py
│ │ │ └── urlopen.py
│ │ ├── optional_deps.py
│ │ ├── package_class.py
│ │ ├── packages.py
│ │ ├── packaging.py
│ │ ├── patch.py
│ │ ├── permissions.py
│ │ ├── projections.py
│ │ ├── provider_index.py
│ │ ├── relocate.py
│ │ ├── relocate_text.py
│ │ ├── repo.py
│ │ ├── reporters.py
│ │ ├── rewiring.py
│ │ ├── s3_fetch.py
│ │ ├── sbang.py
│ │ ├── schema.py
│ │ ├── spack_yaml.py
│ │ ├── spec_dag.py
│ │ ├── spec_list.py
│ │ ├── spec_semantics.py
│ │ ├── spec_syntax.py
│ │ ├── spec_yaml.py
│ │ ├── stage.py
│ │ ├── svn_fetch.py
│ │ ├── tag.py
│ │ ├── tengine.py
│ │ ├── test_suite.py
│ │ ├── traverse.py
│ │ ├── url_fetch.py
│ │ ├── url_parse.py
│ │ ├── url_substitution.py
│ │ ├── util/
│ │ │ ├── __init__.py
│ │ │ ├── archive.py
│ │ │ ├── compression.py
│ │ │ ├── editor.py
│ │ │ ├── elf.py
│ │ │ ├── environment.py
│ │ │ ├── executable.py
│ │ │ ├── file_cache.py
│ │ │ ├── git.py
│ │ │ ├── ld_so_conf.py
│ │ │ ├── log_parser.py
│ │ │ ├── module_cmd.py
│ │ │ ├── package_hash.py
│ │ │ ├── path.py
│ │ │ ├── prefix.py
│ │ │ ├── remote_file_cache.py
│ │ │ ├── spack_lock_wrapper.py
│ │ │ ├── spack_yaml.py
│ │ │ ├── timer.py
│ │ │ ├── unparse/
│ │ │ │ ├── __init__.py
│ │ │ │ └── unparse.py
│ │ │ ├── util_gpg.py
│ │ │ └── util_url.py
│ │ ├── utilities.py
│ │ ├── variant.py
│ │ ├── verification.py
│ │ ├── versions.py
│ │ ├── views.py
│ │ └── web.py
│ ├── tokenize.py
│ ├── traverse.py
│ ├── url.py
│ ├── url_buildcache.py
│ ├── user_environment.py
│ ├── util/
│ │ ├── __init__.py
│ │ ├── archive.py
│ │ ├── compression.py
│ │ ├── cpus.py
│ │ ├── crypto.py
│ │ ├── ctest_log_parser.py
│ │ ├── editor.py
│ │ ├── elf.py
│ │ ├── environment.py
│ │ ├── executable.py
│ │ ├── file_cache.py
│ │ ├── file_permissions.py
│ │ ├── filesystem.py
│ │ ├── format.py
│ │ ├── gcs.py
│ │ ├── git.py
│ │ ├── gpg.py
│ │ ├── hash.py
│ │ ├── ld_so_conf.py
│ │ ├── libc.py
│ │ ├── lock.py
│ │ ├── log_parse.py
│ │ ├── module_cmd.py
│ │ ├── naming.py
│ │ ├── package_hash.py
│ │ ├── parallel.py
│ │ ├── path.py
│ │ ├── pattern.py
│ │ ├── prefix.py
│ │ ├── remote_file_cache.py
│ │ ├── s3.py
│ │ ├── socket.py
│ │ ├── spack_json.py
│ │ ├── spack_yaml.py
│ │ ├── timer.py
│ │ ├── typing.py
│ │ ├── unparse/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ └── unparser.py
│ │ ├── url.py
│ │ ├── web.py
│ │ └── windows_registry.py
│ ├── variant.py
│ ├── vendor/
│ │ ├── __init__.py
│ │ ├── _pyrsistent_version.py
│ │ ├── altgraph/
│ │ │ ├── Dot.py
│ │ │ ├── Graph.py
│ │ │ ├── GraphAlgo.py
│ │ │ ├── GraphStat.py
│ │ │ ├── GraphUtil.py
│ │ │ ├── LICENSE
│ │ │ ├── ObjectGraph.py
│ │ │ └── __init__.py
│ │ ├── archspec/
│ │ │ ├── LICENSE
│ │ │ ├── LICENSE-APACHE
│ │ │ ├── LICENSE-MIT
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── cli.py
│ │ │ ├── cpu/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── alias.py
│ │ │ │ ├── detect.py
│ │ │ │ ├── microarchitecture.py
│ │ │ │ └── schema.py
│ │ │ ├── json/
│ │ │ │ ├── COPYRIGHT
│ │ │ │ ├── LICENSE-APACHE
│ │ │ │ ├── LICENSE-MIT
│ │ │ │ ├── NOTICE
│ │ │ │ ├── README.md
│ │ │ │ └── cpu/
│ │ │ │ ├── cpuid.json
│ │ │ │ ├── cpuid_schema.json
│ │ │ │ ├── microarchitectures.json
│ │ │ │ └── microarchitectures_schema.json
│ │ │ └── vendor/
│ │ │ └── cpuid/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── cpuid.py
│ │ │ └── example.py
│ │ ├── attr/
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyi
│ │ │ ├── _cmp.py
│ │ │ ├── _cmp.pyi
│ │ │ ├── _compat.py
│ │ │ ├── _config.py
│ │ │ ├── _funcs.py
│ │ │ ├── _make.py
│ │ │ ├── _next_gen.py
│ │ │ ├── _version_info.py
│ │ │ ├── _version_info.pyi
│ │ │ ├── converters.py
│ │ │ ├── converters.pyi
│ │ │ ├── exceptions.py
│ │ │ ├── exceptions.pyi
│ │ │ ├── filters.py
│ │ │ ├── filters.pyi
│ │ │ ├── py.typed
│ │ │ ├── setters.py
│ │ │ ├── setters.pyi
│ │ │ ├── validators.py
│ │ │ └── validators.pyi
│ │ ├── attrs/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyi
│ │ │ ├── converters.py
│ │ │ ├── exceptions.py
│ │ │ ├── filters.py
│ │ │ ├── py.typed
│ │ │ ├── setters.py
│ │ │ └── validators.py
│ │ ├── distro/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── distro.py
│ │ │ └── py.typed
│ │ ├── jinja2/
│ │ │ ├── LICENSE.rst
│ │ │ ├── __init__.py
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jsonschema/
│ │ │ ├── COPYING
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _format.py
│ │ │ ├── _legacy_validators.py
│ │ │ ├── _reflect.py
│ │ │ ├── _types.py
│ │ │ ├── _utils.py
│ │ │ ├── _validators.py
│ │ │ ├── benchmarks/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── issue232.py
│ │ │ │ └── json_schema_test_suite.py
│ │ │ ├── cli.py
│ │ │ ├── compat.py
│ │ │ ├── exceptions.py
│ │ │ ├── schemas/
│ │ │ │ ├── draft3.json
│ │ │ │ ├── draft4.json
│ │ │ │ ├── draft6.json
│ │ │ │ └── draft7.json
│ │ │ └── validators.py
│ │ ├── macholib/
│ │ │ ├── LICENSE
│ │ │ ├── MachO.py
│ │ │ ├── MachOGraph.py
│ │ │ ├── MachOStandalone.py
│ │ │ ├── SymbolTable.py
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cmdline.py
│ │ │ ├── dyld.py
│ │ │ ├── dylib.py
│ │ │ ├── framework.py
│ │ │ ├── itergraphreport.py
│ │ │ ├── mach_o.py
│ │ │ ├── macho_dump.py
│ │ │ ├── macho_find.py
│ │ │ ├── macho_standalone.py
│ │ │ ├── ptypes.py
│ │ │ └── util.py
│ │ ├── markupsafe/
│ │ │ ├── LICENSE.rst
│ │ │ ├── __init__.py
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── pyrsistent/
│ │ │ ├── LICENSE.mit
│ │ │ ├── __init__.py
│ │ │ ├── _checked_types.py
│ │ │ ├── _field_common.py
│ │ │ ├── _helpers.py
│ │ │ ├── _immutable.py
│ │ │ ├── _pbag.py
│ │ │ ├── _pclass.py
│ │ │ ├── _pdeque.py
│ │ │ ├── _plist.py
│ │ │ ├── _pmap.py
│ │ │ ├── _precord.py
│ │ │ ├── _pset.py
│ │ │ ├── _pvector.py
│ │ │ ├── _toolz.py
│ │ │ ├── _transformations.py
│ │ │ ├── py.typed
│ │ │ ├── typing.py
│ │ │ └── typing.pyi
│ │ ├── ruamel/
│ │ │ └── yaml/
│ │ │ ├── __init__.py
│ │ │ ├── anchor.py
│ │ │ ├── comments.py
│ │ │ ├── compat.py
│ │ │ ├── composer.py
│ │ │ ├── configobjwalker.py
│ │ │ ├── constructor.py
│ │ │ ├── cyaml.py
│ │ │ ├── dumper.py
│ │ │ ├── emitter.py
│ │ │ ├── error.py
│ │ │ ├── events.py
│ │ │ ├── loader.py
│ │ │ ├── main.py
│ │ │ ├── nodes.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── reader.py
│ │ │ ├── representer.py
│ │ │ ├── resolver.py
│ │ │ ├── scalarbool.py
│ │ │ ├── scalarfloat.py
│ │ │ ├── scalarint.py
│ │ │ ├── scalarstring.py
│ │ │ ├── scanner.py
│ │ │ ├── serializer.py
│ │ │ ├── timestamp.py
│ │ │ ├── tokens.py
│ │ │ └── util.py
│ │ ├── ruamel.yaml.LICENSE
│ │ ├── six.LICENSE
│ │ ├── six.py
│ │ ├── typing_extensions.LICENSE
│ │ ├── typing_extensions.py
│ │ └── typing_extensions.pyi
│ ├── verify.py
│ ├── verify_libraries.py
│ └── version/
│ ├── __init__.py
│ ├── common.py
│ ├── git_ref_lookup.py
│ ├── lookup.py
│ └── version_types.py
├── pyproject.toml
├── pytest.ini
├── share/
│ └── spack/
│ ├── bash/
│ │ └── spack-completion.bash
│ ├── bootstrap/
│ │ ├── github-actions-v0.6/
│ │ │ ├── clingo.json
│ │ │ ├── gnupg.json
│ │ │ ├── metadata.yaml
│ │ │ └── patchelf.json
│ │ ├── github-actions-v2/
│ │ │ ├── clingo.json
│ │ │ ├── gnupg.json
│ │ │ ├── metadata.yaml
│ │ │ └── patchelf.json
│ │ └── spack-install/
│ │ └── metadata.yaml
│ ├── csh/
│ │ ├── pathadd.csh
│ │ └── spack.csh
│ ├── docker/
│ │ ├── entrypoint.bash
│ │ └── modules.yaml
│ ├── docs/
│ │ └── docker/
│ │ └── module-file-tutorial/
│ │ ├── Dockerfile
│ │ ├── packages.yaml
│ │ └── spack.sh
│ ├── fish/
│ │ └── spack-completion.fish
│ ├── keys/
│ │ └── tutorial.pub
│ ├── qa/
│ │ ├── bashcov
│ │ ├── completion-test.sh
│ │ ├── config_state.py
│ │ ├── configuration/
│ │ │ ├── config.yaml
│ │ │ ├── packages.yaml
│ │ │ └── windows_config.yaml
│ │ ├── environment_activation.py
│ │ ├── flake8_formatter.py
│ │ ├── run-build-tests
│ │ ├── run-shell-tests
│ │ ├── run-style-tests
│ │ ├── run-unit-tests
│ │ ├── scopes/
│ │ │ ├── false/
│ │ │ │ └── concretizer.yaml
│ │ │ ├── true/
│ │ │ │ ├── .spack-env/
│ │ │ │ │ └── transaction_lock
│ │ │ │ └── spack.yaml
│ │ │ └── wp/
│ │ │ └── concretizer.yaml
│ │ ├── setup-env-test.csh
│ │ ├── setup-env-test.fish
│ │ ├── setup-env-test.sh
│ │ ├── setup.sh
│ │ ├── setup_spack_installer.ps1
│ │ ├── test-env-cfg.sh
│ │ ├── test-framework.sh
│ │ ├── validate_last_exit.ps1
│ │ ├── vcvarsall.ps1
│ │ └── windows_test_setup.ps1
│ ├── setup-env.bat
│ ├── setup-env.csh
│ ├── setup-env.fish
│ ├── setup-env.ps1
│ ├── setup-env.sh
│ ├── setup-tutorial-env.sh
│ ├── spack-completion.bash
│ ├── spack-completion.fish
│ └── templates/
│ ├── bootstrap/
│ │ └── spack.yaml
│ ├── container/
│ │ ├── Dockerfile
│ │ ├── almalinux_8.dockerfile
│ │ ├── almalinux_9.dockerfile
│ │ ├── alpine_3.dockerfile
│ │ ├── amazonlinux_2.dockerfile
│ │ ├── bootstrap-base.dockerfile
│ │ ├── centos_stream9.dockerfile
│ │ ├── fedora.dockerfile
│ │ ├── leap-15.dockerfile
│ │ ├── rockylinux_8.dockerfile
│ │ ├── rockylinux_9.dockerfile
│ │ ├── singularity.def
│ │ ├── ubuntu_2004.dockerfile
│ │ └── ubuntu_2404.dockerfile
│ ├── depfile/
│ │ └── Makefile
│ ├── misc/
│ │ ├── buildcache_index.html
│ │ └── graph.dot
│ ├── mock-repository/
│ │ ├── build_system.pyt
│ │ └── package.pyt
│ ├── modules/
│ │ ├── modulefile.lua
│ │ └── modulefile.tcl
│ └── reports/
│ ├── cdash/
│ │ ├── Build.xml
│ │ ├── Configure.xml
│ │ ├── Site.xml
│ │ ├── Test.xml
│ │ ├── Testing.xml
│ │ └── Update.xml
│ └── junit.xml
└── var/
└── spack/
├── gpg/
│ └── README.md
├── gpg.mock/
│ ├── README.md
│ ├── data/
│ │ ├── content.txt
│ │ └── content.txt.asc
│ └── keys/
│ ├── external.key
│ └── package-signing-key
├── test_repos/
│ └── spack_repo/
│ ├── builder_test/
│ │ ├── packages/
│ │ │ ├── builder_and_mixins/
│ │ │ │ └── package.py
│ │ │ ├── callbacks/
│ │ │ │ └── package.py
│ │ │ ├── custom_phases/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── gnuconfig/
│ │ │ │ └── package.py
│ │ │ ├── inheritance/
│ │ │ │ └── package.py
│ │ │ ├── inheritance_only_package/
│ │ │ │ └── package.py
│ │ │ ├── old_style_autotools/
│ │ │ │ └── package.py
│ │ │ ├── old_style_custom_phases/
│ │ │ │ └── package.py
│ │ │ └── old_style_derived/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── builtin_mock/
│ │ ├── build_systems/
│ │ │ ├── __init__.py
│ │ │ ├── _checks.py
│ │ │ ├── autotools.py
│ │ │ ├── bundle.py
│ │ │ ├── cmake.py
│ │ │ ├── compiler.py
│ │ │ ├── generic.py
│ │ │ ├── gnu.py
│ │ │ ├── makefile.py
│ │ │ ├── perl.py
│ │ │ ├── python.py
│ │ │ ├── sourceforge.py
│ │ │ └── sourceware.py
│ │ ├── packages/
│ │ │ ├── _7zip/
│ │ │ │ └── package.py
│ │ │ ├── _7zip_dependent/
│ │ │ │ └── package.py
│ │ │ ├── adios2/
│ │ │ │ └── package.py
│ │ │ ├── archive_files/
│ │ │ │ └── package.py
│ │ │ ├── ascent/
│ │ │ │ └── package.py
│ │ │ ├── attributes_foo/
│ │ │ │ └── package.py
│ │ │ ├── attributes_foo_app/
│ │ │ │ └── package.py
│ │ │ ├── autotools_conditional_variants_test/
│ │ │ │ └── package.py
│ │ │ ├── autotools_config_replacement/
│ │ │ │ └── package.py
│ │ │ ├── binutils_for_test/
│ │ │ │ └── package.py
│ │ │ ├── boost/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_a/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_b/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_c/
│ │ │ │ └── package.py
│ │ │ ├── bowtie/
│ │ │ │ └── package.py
│ │ │ ├── brillig/
│ │ │ │ └── package.py
│ │ │ ├── build_env_compiler_var_a/
│ │ │ │ └── package.py
│ │ │ ├── build_env_compiler_var_b/
│ │ │ │ └── package.py
│ │ │ ├── build_error/
│ │ │ │ └── package.py
│ │ │ ├── build_warnings/
│ │ │ │ └── package.py
│ │ │ ├── bzip2/
│ │ │ │ └── package.py
│ │ │ ├── callpath/
│ │ │ │ └── package.py
│ │ │ ├── canfail/
│ │ │ │ └── package.py
│ │ │ ├── client_not_foo/
│ │ │ │ └── package.py
│ │ │ ├── cmake/
│ │ │ │ └── package.py
│ │ │ ├── cmake_client/
│ │ │ │ └── package.py
│ │ │ ├── cmake_client_inheritor/
│ │ │ │ └── package.py
│ │ │ ├── cmake_conditional_variants_test/
│ │ │ │ └── package.py
│ │ │ ├── compiler_with_deps/
│ │ │ │ └── package.py
│ │ │ ├── compiler_wrapper/
│ │ │ │ ├── cc.sh
│ │ │ │ └── package.py
│ │ │ ├── conditional_constrained_dependencies/
│ │ │ │ └── package.py
│ │ │ ├── conditional_languages/
│ │ │ │ └── package.py
│ │ │ ├── conditional_provider/
│ │ │ │ └── package.py
│ │ │ ├── conditional_values_in_variant/
│ │ │ │ └── package.py
│ │ │ ├── conditional_variant_pkg/
│ │ │ │ └── package.py
│ │ │ ├── conditional_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_extends_direct_dep/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_extends_transitive_dep/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_patch_dependency/
│ │ │ │ ├── package.py
│ │ │ │ └── uuid.patch
│ │ │ ├── configure_warning/
│ │ │ │ └── package.py
│ │ │ ├── conflict/
│ │ │ │ └── package.py
│ │ │ ├── conflict_parent/
│ │ │ │ └── package.py
│ │ │ ├── conflict_virtual/
│ │ │ │ └── package.py
│ │ │ ├── conflicting_dependent/
│ │ │ │ └── package.py
│ │ │ ├── corge/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_bottom/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_middle/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_root/
│ │ │ │ └── package.py
│ │ │ ├── cvs_test/
│ │ │ │ └── package.py
│ │ │ ├── define_cmake_prefix_paths/
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_mid1/
│ │ │ │ ├── mid1.patch
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_mid2/
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_top/
│ │ │ │ ├── package.py
│ │ │ │ └── top.patch
│ │ │ ├── dep_with_variants/
│ │ │ │ └── package.py
│ │ │ ├── dep_with_variants_if_develop/
│ │ │ │ └── package.py
│ │ │ ├── dep_with_variants_if_develop_root/
│ │ │ │ └── package.py
│ │ │ ├── depb/
│ │ │ │ └── package.py
│ │ │ ├── dependency_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── dependency_install/
│ │ │ │ └── package.py
│ │ │ ├── dependency_mv/
│ │ │ │ └── package.py
│ │ │ ├── dependent_install/
│ │ │ │ └── package.py
│ │ │ ├── dependent_of_dev_build/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_define_cmake_prefix_paths/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_develop/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_manyvariants/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_openmpi/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_run_env/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_virtual_with_abi/
│ │ │ │ └── package.py
│ │ │ ├── deprecated_client/
│ │ │ │ └── package.py
│ │ │ ├── deprecated_versions/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_dependent/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_install/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_install_phases/
│ │ │ │ └── package.py
│ │ │ ├── develop_branch_version/
│ │ │ │ └── package.py
│ │ │ ├── develop_test/
│ │ │ │ └── package.py
│ │ │ ├── develop_test2/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_bottom/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_left/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_right/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_top/
│ │ │ │ └── package.py
│ │ │ ├── diff_test/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_virtuals_one/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_virtuals_two/
│ │ │ │ └── package.py
│ │ │ ├── direct_mpich/
│ │ │ │ └── package.py
│ │ │ ├── dla_future/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_bottom/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_left/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_right/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild1/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild2/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild3/
│ │ │ │ └── package.py
│ │ │ ├── dtlink1/
│ │ │ │ └── package.py
│ │ │ ├── dtlink2/
│ │ │ │ └── package.py
│ │ │ ├── dtlink3/
│ │ │ │ └── package.py
│ │ │ ├── dtlink4/
│ │ │ │ └── package.py
│ │ │ ├── dtlink5/
│ │ │ │ └── package.py
│ │ │ ├── dtrun1/
│ │ │ │ └── package.py
│ │ │ ├── dtrun2/
│ │ │ │ └── package.py
│ │ │ ├── dtrun3/
│ │ │ │ └── package.py
│ │ │ ├── dttop/
│ │ │ │ └── package.py
│ │ │ ├── dtuse/
│ │ │ │ └── package.py
│ │ │ ├── dual_cmake_autotools/
│ │ │ │ └── package.py
│ │ │ ├── dyninst/
│ │ │ │ └── package.py
│ │ │ ├── ecp_viz_sdk/
│ │ │ │ └── package.py
│ │ │ ├── emacs/
│ │ │ │ └── package.py
│ │ │ ├── extendee/
│ │ │ │ └── package.py
│ │ │ ├── extends_spec/
│ │ │ │ └── package.py
│ │ │ ├── extension1/
│ │ │ │ └── package.py
│ │ │ ├── extension2/
│ │ │ │ └── package.py
│ │ │ ├── external_buildable_with_variant/
│ │ │ │ └── package.py
│ │ │ ├── external_common_gdbm/
│ │ │ │ └── package.py
│ │ │ ├── external_common_openssl/
│ │ │ │ └── package.py
│ │ │ ├── external_common_perl/
│ │ │ │ └── package.py
│ │ │ ├── external_common_python/
│ │ │ │ └── package.py
│ │ │ ├── external_non_default_variant/
│ │ │ │ └── package.py
│ │ │ ├── externalmodule/
│ │ │ │ └── package.py
│ │ │ ├── externalprereq/
│ │ │ │ └── package.py
│ │ │ ├── externaltest/
│ │ │ │ └── package.py
│ │ │ ├── externaltool/
│ │ │ │ └── package.py
│ │ │ ├── externalvirtual/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit_docstring/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit_impl/
│ │ │ │ └── package.py
│ │ │ ├── failing_build/
│ │ │ │ └── package.py
│ │ │ ├── failing_empty_install/
│ │ │ │ └── package.py
│ │ │ ├── fake/
│ │ │ │ └── package.py
│ │ │ ├── fetch_options/
│ │ │ │ └── package.py
│ │ │ ├── fftw/
│ │ │ │ └── package.py
│ │ │ ├── find_externals1/
│ │ │ │ └── package.py
│ │ │ ├── forward_multi_value/
│ │ │ │ └── package.py
│ │ │ ├── garply/
│ │ │ │ └── package.py
│ │ │ ├── gcc/
│ │ │ │ └── package.py
│ │ │ ├── gcc_runtime/
│ │ │ │ └── package.py
│ │ │ ├── git_ref_commit_dep/
│ │ │ │ └── package.py
│ │ │ ├── git_ref_package/
│ │ │ │ └── package.py
│ │ │ ├── git_sparse_a/
│ │ │ │ └── package.py
│ │ │ ├── git_sparse_b/
│ │ │ │ └── package.py
│ │ │ ├── git_sparsepaths_pkg/
│ │ │ │ └── package.py
│ │ │ ├── git_sparsepaths_version/
│ │ │ │ └── package.py
│ │ │ ├── git_svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_test/
│ │ │ │ └── package.py
│ │ │ ├── git_test_commit/
│ │ │ │ └── package.py
│ │ │ ├── git_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_url_svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_url_top_level/
│ │ │ │ └── package.py
│ │ │ ├── glibc/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── gmt/
│ │ │ │ └── package.py
│ │ │ ├── gmt_concrete_mv_dependency/
│ │ │ │ └── package.py
│ │ │ ├── gnuconfig/
│ │ │ │ └── package.py
│ │ │ ├── hash_test1/
│ │ │ │ ├── package.py
│ │ │ │ ├── patch1.patch
│ │ │ │ └── patch2.patch
│ │ │ ├── hash_test2/
│ │ │ │ ├── package.py
│ │ │ │ └── patch1.patch
│ │ │ ├── hash_test3/
│ │ │ │ └── package.py
│ │ │ ├── hash_test4/
│ │ │ │ └── package.py
│ │ │ ├── hdf5/
│ │ │ │ └── package.py
│ │ │ ├── hg_test/
│ │ │ │ └── package.py
│ │ │ ├── hg_top_level/
│ │ │ │ └── package.py
│ │ │ ├── hpcviewer/
│ │ │ │ └── package.py
│ │ │ ├── hwloc/
│ │ │ │ └── package.py
│ │ │ ├── hypre/
│ │ │ │ └── package.py
│ │ │ ├── impossible_concretization/
│ │ │ │ └── package.py
│ │ │ ├── indirect_mpich/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_a/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_b/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_c/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_d/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_e/
│ │ │ │ └── package.py
│ │ │ ├── intel_oneapi_compilers/
│ │ │ │ └── package.py
│ │ │ ├── intel_parallel_studio/
│ │ │ │ └── package.py
│ │ │ ├── invalid_github_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_github_pull_commits_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_gitlab_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_selfhosted_gitlab_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── leaf_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── libceed/
│ │ │ │ └── package.py
│ │ │ ├── libdwarf/
│ │ │ │ └── package.py
│ │ │ ├── libelf/
│ │ │ │ ├── local.patch
│ │ │ │ └── package.py
│ │ │ ├── libtool_deletion/
│ │ │ │ └── package.py
│ │ │ ├── libtool_installation/
│ │ │ │ └── package.py
│ │ │ ├── libxsmm/
│ │ │ │ └── package.py
│ │ │ ├── licenses_1/
│ │ │ │ └── package.py
│ │ │ ├── llvm/
│ │ │ │ └── package.py
│ │ │ ├── llvm_client/
│ │ │ │ └── package.py
│ │ │ ├── long_boost_dependency/
│ │ │ │ └── package.py
│ │ │ ├── low_priority_provider/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_1/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_2/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_3/
│ │ │ │ └── package.py
│ │ │ ├── many_conditional_deps/
│ │ │ │ └── package.py
│ │ │ ├── many_virtual_consumer/
│ │ │ │ └── package.py
│ │ │ ├── manyvariants/
│ │ │ │ └── package.py
│ │ │ ├── mesa/
│ │ │ │ └── package.py
│ │ │ ├── middle_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── mirror_gnu/
│ │ │ │ └── package.py
│ │ │ ├── mirror_gnu_broken/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceforge/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceforge_broken/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceware/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceware_broken/
│ │ │ │ ├── mirror-gnu-broken/
│ │ │ │ │ └── package.py
│ │ │ │ └── package.py
│ │ │ ├── missing_dependency/
│ │ │ │ └── package.py
│ │ │ ├── mixedversions/
│ │ │ │ └── package.py
│ │ │ ├── mixing_parent/
│ │ │ │ └── package.py
│ │ │ ├── modifies_run_env/
│ │ │ │ └── package.py
│ │ │ ├── module_long_help/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_append/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_prepend/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_setenv/
│ │ │ │ └── package.py
│ │ │ ├── module_path_separator/
│ │ │ │ └── package.py
│ │ │ ├── module_setenv_raw/
│ │ │ │ └── package.py
│ │ │ ├── mpi/
│ │ │ │ └── package.py
│ │ │ ├── mpich/
│ │ │ │ └── package.py
│ │ │ ├── mpich2/
│ │ │ │ └── package.py
│ │ │ ├── mpileaks/
│ │ │ │ └── package.py
│ │ │ ├── multi_provider_mpi/
│ │ │ │ └── package.py
│ │ │ ├── multimethod/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_base/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_diamond/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_diamond_parent/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_inheritor/
│ │ │ │ └── package.py
│ │ │ ├── multimodule_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant_multi_defaults/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant_multi_defaults_dependent/
│ │ │ │ └── package.py
│ │ │ ├── mvapich2/
│ │ │ │ └── package.py
│ │ │ ├── mvdefaults/
│ │ │ │ └── package.py
│ │ │ ├── needs_relocation/
│ │ │ │ └── package.py
│ │ │ ├── needs_text_relocation/
│ │ │ │ └── package.py
│ │ │ ├── netlib_blas/
│ │ │ │ └── package.py
│ │ │ ├── netlib_lapack/
│ │ │ │ └── package.py
│ │ │ ├── netlib_scalapack/
│ │ │ │ └── package.py
│ │ │ ├── ninja/
│ │ │ │ └── package.py
│ │ │ ├── no_redistribute/
│ │ │ │ └── package.py
│ │ │ ├── no_redistribute_dependent/
│ │ │ │ └── package.py
│ │ │ ├── no_url_or_version/
│ │ │ │ └── package.py
│ │ │ ├── non_existing_conditional_dep/
│ │ │ │ └── package.py
│ │ │ ├── nosource/
│ │ │ │ └── package.py
│ │ │ ├── nosource_bundle/
│ │ │ │ └── package.py
│ │ │ ├── nosource_install/
│ │ │ │ └── package.py
│ │ │ ├── noversion/
│ │ │ │ └── package.py
│ │ │ ├── noversion_bundle/
│ │ │ │ └── package.py
│ │ │ ├── old_external/
│ │ │ │ └── package.py
│ │ │ ├── old_sbang/
│ │ │ │ └── package.py
│ │ │ ├── openblas/
│ │ │ │ └── package.py
│ │ │ ├── openblas_with_lapack/
│ │ │ │ └── package.py
│ │ │ ├── openmpi/
│ │ │ │ └── package.py
│ │ │ ├── openssl/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test_2/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test_3/
│ │ │ │ └── package.py
│ │ │ ├── othervirtual/
│ │ │ │ └── package.py
│ │ │ ├── override_context_templates/
│ │ │ │ └── package.py
│ │ │ ├── override_module_templates/
│ │ │ │ └── package.py
│ │ │ ├── package_base_extendee/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_a/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_b/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_c/
│ │ │ │ └── package.py
│ │ │ ├── paraview/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo_bar_fee/
│ │ │ │ └── package.py
│ │ │ ├── patch/
│ │ │ │ ├── bar.patch
│ │ │ │ ├── baz.patch
│ │ │ │ ├── biz.patch
│ │ │ │ ├── foo.patch
│ │ │ │ └── package.py
│ │ │ ├── patch_a_dependency/
│ │ │ │ ├── libelf.patch
│ │ │ │ └── package.py
│ │ │ ├── patch_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── patch_several_dependencies/
│ │ │ │ ├── bar.patch
│ │ │ │ ├── baz.patch
│ │ │ │ ├── foo.patch
│ │ │ │ └── package.py
│ │ │ ├── patchelf/
│ │ │ │ └── package.py
│ │ │ ├── perl/
│ │ │ │ └── package.py
│ │ │ ├── perl_extension/
│ │ │ │ └── package.py
│ │ │ ├── pkg_a/
│ │ │ │ └── package.py
│ │ │ ├── pkg_b/
│ │ │ │ └── package.py
│ │ │ ├── pkg_c/
│ │ │ │ └── package.py
│ │ │ ├── pkg_e/
│ │ │ │ └── package.py
│ │ │ ├── pkg_with_c_link_dep/
│ │ │ │ └── package.py
│ │ │ ├── pkg_with_zlib_dep/
│ │ │ │ └── package.py
│ │ │ ├── placeholder/
│ │ │ │ └── package.py
│ │ │ ├── preferred_test/
│ │ │ │ └── package.py
│ │ │ ├── printing_package/
│ │ │ │ └── package.py
│ │ │ ├── py_extension1/
│ │ │ │ └── package.py
│ │ │ ├── py_extension2/
│ │ │ │ └── package.py
│ │ │ ├── py_extension3/
│ │ │ │ └── package.py
│ │ │ ├── py_numpy/
│ │ │ │ └── package.py
│ │ │ ├── py_pip/
│ │ │ │ └── package.py
│ │ │ ├── py_test_callback/
│ │ │ │ └── package.py
│ │ │ ├── py_wheel/
│ │ │ │ └── package.py
│ │ │ ├── python/
│ │ │ │ └── package.py
│ │ │ ├── python_venv/
│ │ │ │ └── package.py
│ │ │ ├── quantum_espresso/
│ │ │ │ └── package.py
│ │ │ ├── quux/
│ │ │ │ └── package.py
│ │ │ ├── raiser/
│ │ │ │ └── package.py
│ │ │ ├── redistribute_x/
│ │ │ │ └── package.py
│ │ │ ├── redistribute_y/
│ │ │ │ └── package.py
│ │ │ ├── requires_clang/
│ │ │ │ └── package.py
│ │ │ ├── requires_clang_or_gcc/
│ │ │ │ └── package.py
│ │ │ ├── requires_virtual/
│ │ │ │ └── package.py
│ │ │ ├── root/
│ │ │ │ └── package.py
│ │ │ ├── root_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── ruff/
│ │ │ │ └── package.py
│ │ │ ├── second_dependency_foo_bar_fee/
│ │ │ │ └── package.py
│ │ │ ├── shell_a/
│ │ │ │ └── package.py
│ │ │ ├── shell_b/
│ │ │ │ └── package.py
│ │ │ ├── simple_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── simple_resource/
│ │ │ │ └── package.py
│ │ │ ├── simple_standalone_test/
│ │ │ │ └── package.py
│ │ │ ├── single_language_virtual/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant_dependent/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant_dependent_type/
│ │ │ │ └── package.py
│ │ │ ├── sombrero/
│ │ │ │ └── package.py
│ │ │ ├── some_virtual_mv/
│ │ │ │ └── package.py
│ │ │ ├── some_virtual_preferred/
│ │ │ │ └── package.py
│ │ │ ├── splice_a/
│ │ │ │ └── package.py
│ │ │ ├── splice_depends_on_t/
│ │ │ │ └── package.py
│ │ │ ├── splice_h/
│ │ │ │ └── package.py
│ │ │ ├── splice_t/
│ │ │ │ └── package.py
│ │ │ ├── splice_vh/
│ │ │ │ └── package.py
│ │ │ ├── splice_vt/
│ │ │ │ └── package.py
│ │ │ ├── splice_z/
│ │ │ │ └── package.py
│ │ │ ├── sticky_variant/
│ │ │ │ └── package.py
│ │ │ ├── sticky_variant_dependent/
│ │ │ │ └── package.py
│ │ │ ├── svn_test/
│ │ │ │ └── package.py
│ │ │ ├── svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── symly/
│ │ │ │ └── package.py
│ │ │ ├── test_build_callbacks/
│ │ │ │ └── package.py
│ │ │ ├── test_dep_with_imposed_conditions/
│ │ │ │ └── package.py
│ │ │ ├── test_dependency/
│ │ │ │ └── package.py
│ │ │ ├── test_error/
│ │ │ │ └── package.py
│ │ │ ├── test_fail/
│ │ │ │ └── package.py
│ │ │ ├── test_install_callbacks/
│ │ │ │ └── package.py
│ │ │ ├── transitive_conditional_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── trigger_and_effect_deps/
│ │ │ │ └── package.py
│ │ │ ├── trigger_external_non_default_variant/
│ │ │ │ └── package.py
│ │ │ ├── trilinos/
│ │ │ │ └── package.py
│ │ │ ├── trivial_install_test_dependent/
│ │ │ │ └── package.py
│ │ │ ├── trivial_install_test_package/
│ │ │ │ └── package.py
│ │ │ ├── trivial_pkg_with_valid_hash/
│ │ │ │ └── package.py
│ │ │ ├── trivial_smoke_test/
│ │ │ │ ├── package.py
│ │ │ │ └── test/
│ │ │ │ └── test_file.in
│ │ │ ├── unconstrainable_conflict/
│ │ │ │ └── package.py
│ │ │ ├── unsat_provider/
│ │ │ │ └── package.py
│ │ │ ├── unsat_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── url_list_test/
│ │ │ │ └── package.py
│ │ │ ├── url_only_override/
│ │ │ │ └── package.py
│ │ │ ├── url_only_override_with_gaps/
│ │ │ │ └── package.py
│ │ │ ├── url_override/
│ │ │ │ └── package.py
│ │ │ ├── url_test/
│ │ │ │ └── package.py
│ │ │ ├── v1_consumer/
│ │ │ │ └── package.py
│ │ │ ├── v1_provider/
│ │ │ │ └── package.py
│ │ │ ├── variant_function_validator/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_a/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_b/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_root/
│ │ │ │ └── package.py
│ │ │ ├── variant_values/
│ │ │ │ └── package.py
│ │ │ ├── variant_values_override/
│ │ │ │ └── package.py
│ │ │ ├── vdefault_or_external/
│ │ │ │ └── package.py
│ │ │ ├── vdefault_or_external_root/
│ │ │ │ └── package.py
│ │ │ ├── vendorsb/
│ │ │ │ └── package.py
│ │ │ ├── version_test_dependency_preferred/
│ │ │ │ └── package.py
│ │ │ ├── version_test_pkg/
│ │ │ │ └── package.py
│ │ │ ├── version_test_root/
│ │ │ │ └── package.py
│ │ │ ├── view_dir/
│ │ │ │ └── package.py
│ │ │ ├── view_file/
│ │ │ │ └── package.py
│ │ │ ├── view_ignore_conflict/
│ │ │ │ └── package.py
│ │ │ ├── view_not_ignored/
│ │ │ │ └── package.py
│ │ │ ├── view_resolve_conflict_middle/
│ │ │ │ └── package.py
│ │ │ ├── view_resolve_conflict_top/
│ │ │ │ └── package.py
│ │ │ ├── view_symlinked_dir/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_1/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_2/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_multi/
│ │ │ │ └── package.py
│ │ │ ├── virtual_with_abi/
│ │ │ │ └── package.py
│ │ │ ├── virtual_with_versions/
│ │ │ │ └── package.py
│ │ │ ├── vtk_m/
│ │ │ │ └── package.py
│ │ │ ├── when_directives_false/
│ │ │ │ └── package.py
│ │ │ ├── when_directives_true/
│ │ │ │ └── package.py
│ │ │ ├── with_constraint_met/
│ │ │ │ └── package.py
│ │ │ ├── wrong_variant_in_conflicts/
│ │ │ │ └── package.py
│ │ │ ├── wrong_variant_in_depends_on/
│ │ │ │ └── package.py
│ │ │ ├── zlib/
│ │ │ │ ├── package.py
│ │ │ │ └── w_patch.patch
│ │ │ └── zmpi/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── compiler_runtime_test/
│ │ ├── packages/
│ │ │ ├── pkg_a/
│ │ │ │ └── package.py
│ │ │ └── pkg_b/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── diff/
│ │ ├── packages/
│ │ │ ├── i1/
│ │ │ │ └── package.py
│ │ │ ├── i2/
│ │ │ │ └── package.py
│ │ │ ├── p1/
│ │ │ │ └── package.py
│ │ │ ├── p2/
│ │ │ │ └── package.py
│ │ │ ├── p3/
│ │ │ │ └── package.py
│ │ │ └── p4/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── duplicates_test/
│ │ ├── packages/
│ │ │ ├── cycle_a/
│ │ │ │ └── package.py
│ │ │ ├── cycle_b/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── hdf5/
│ │ │ │ └── package.py
│ │ │ ├── pinned_gmake/
│ │ │ │ └── package.py
│ │ │ ├── pkg_config/
│ │ │ │ └── package.py
│ │ │ ├── py_floating/
│ │ │ │ └── package.py
│ │ │ ├── py_numpy/
│ │ │ │ └── package.py
│ │ │ ├── py_setuptools/
│ │ │ │ └── package.py
│ │ │ ├── py_shapely/
│ │ │ │ └── package.py
│ │ │ ├── python/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_a/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_b/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_c/
│ │ │ │ └── package.py
│ │ │ └── virtual_build/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── edges_test/
│ │ ├── packages/
│ │ │ ├── blas_only_client/
│ │ │ │ └── package.py
│ │ │ ├── conditional_edge/
│ │ │ │ └── package.py
│ │ │ ├── openblas/
│ │ │ │ └── package.py
│ │ │ └── zlib/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── find/
│ │ ├── packages/
│ │ │ ├── a0/
│ │ │ │ └── package.py
│ │ │ ├── b0/
│ │ │ │ └── package.py
│ │ │ ├── c0/
│ │ │ │ └── package.py
│ │ │ ├── d0/
│ │ │ │ └── package.py
│ │ │ └── e0/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── flags_test/
│ │ ├── packages/
│ │ │ ├── t/
│ │ │ │ └── package.py
│ │ │ ├── u/
│ │ │ │ └── package.py
│ │ │ ├── v/
│ │ │ │ └── package.py
│ │ │ ├── w/
│ │ │ │ └── package.py
│ │ │ ├── x/
│ │ │ │ └── package.py
│ │ │ └── y/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── requirements_test/
│ │ ├── packages/
│ │ │ ├── t/
│ │ │ │ └── package.py
│ │ │ ├── u/
│ │ │ │ └── package.py
│ │ │ ├── v/
│ │ │ │ └── package.py
│ │ │ ├── x/
│ │ │ │ └── package.py
│ │ │ └── y/
│ │ │ └── package.py
│ │ └── repo.yaml
│ └── tutorial/
│ ├── packages/
│ │ ├── armadillo/
│ │ │ ├── package.py
│ │ │ └── undef_linux.patch
│ │ ├── elpa/
│ │ │ └── package.py
│ │ ├── hdf5/
│ │ │ ├── h5f90global-mult-obj-same-equivalence-same-common-block.patch
│ │ │ ├── h5public-skip-mpicxx.patch
│ │ │ ├── hdf5_1.8_gcc10.patch
│ │ │ ├── package.py
│ │ │ ├── pre-c99-comments.patch
│ │ │ └── test/
│ │ │ ├── dump.out
│ │ │ └── spack.h5
│ │ ├── mpich/
│ │ │ ├── mpich32_clang.patch
│ │ │ └── package.py
│ │ └── netlib_lapack/
│ │ ├── ibm-xl.patch
│ │ ├── package.py
│ │ ├── testing.patch
│ │ └── undefined_declarations.patch
│ └── repo.yaml
└── vendoring/
├── patches/
│ ├── altgraph-version.patch
│ ├── distro.patch
│ ├── jsonschema.attr.patch
│ ├── jsonschema.patch
│ ├── jsonschema.vendoring.patch
│ └── ruamelyaml.patch
└── vendor.txt
================================================
FILE CONTENTS
================================================
================================================
FILE: .ci/gitlab/forward_dotenv_variables.py
================================================
import sys
from typing import Dict
import yaml
def read_dotenv(file_name: str) -> Dict[str, str]:
result = []
with open(file_name, "r", encoding="utf-8") as fd:
for field in fd:
if field.strip()[0] == "#":
continue
data = field.strip("\n").split("=", 1)
try:
result.append((data[0], data[1]))
except IndexError:
print(f"Skipping bad value: {field}")
return dict(result)
if __name__ == "__main__":
dotenv = read_dotenv(sys.argv[1])
if not dotenv:
exit(0)
with open(sys.argv[2], "r", encoding="utf-8") as fd:
conf = yaml.load(fd, Loader=yaml.Loader)
if "variables" not in conf:
conf["variables"] = {}
conf["variables"].update(dotenv)
with open(sys.argv[2], "w", encoding="utf-8") as fd:
yaml.dump(conf, fd, Dumper=yaml.Dumper)
================================================
FILE: .ci/gitlab-ci.yml
================================================
# Gitlab configuraiton for spack/spack
stages:
- packages
variables:
SPACK_PACKAGES_CHECKOUT_VERSION: develop
.clone_packages: &clone_packages
- mkdir -p ${REPO_DESTINATION}
- cd ${REPO_DESTINATION}
- git init
- git remote add origin https://github.com/spack/spack-packages.git
- git fetch --depth 1 origin ${SPACK_PACKAGES_CHECKOUT_VERSION}
- git checkout FETCH_HEAD
- cd -
dotenv:
stage: .pre
image: ghcr.io/spack/e4s-ubuntu-18.04:v2021-10-18
tags: [ spack, service ]
script:
- export REPO_DESTINATION=etc/spack-packages
- *clone_packages
- repo_commit=$(git -C ${REPO_DESTINATION} rev-parse FETCH_HEAD)
- echo "SPACK_CHECKOUT_VERSION=${repo_commit}" >> ${CI_PROJECT_DIR}/env
- echo "SPACK_CHECKOUT_REPO=spack/spack-packages" >> ${CI_PROJECT_DIR}/env
- cat ${CI_PROJECT_DIR}/env
- python3 ${CI_PROJECT_DIR}/.ci/gitlab/forward_dotenv_variables.py
${CI_PROJECT_DIR}/env
${REPO_DESTINATION}/.ci/gitlab/.gitlab-ci.yml
artifacts:
paths:
- etc/spack-packages/.ci/gitlab/.gitlab-ci.yml
spack-packages:
stage: packages
trigger:
strategy: depend
include:
- artifact: etc/spack-packages/.ci/gitlab/.gitlab-ci.yml
job: dotenv
================================================
FILE: .codecov.yml
================================================
coverage:
precision: 2
round: nearest
range: 60...90
status:
project:
default:
threshold: 2.0%
ignore:
- lib/spack/spack/test/.*
- lib/spack/docs/.*
- lib/spack/spack/vendor/.*
- share/spack/qa/.*
comment: off
# Inline codecov annotations make the code hard to read, and they add
# annotations in files that seemingly have nothing to do with the PR.
github_checks:
annotations: false
# Attempt to fix "Missing base commit" messages in the codecov UI.
# Because we do not run full tests on package PRs, package PRs' merge
# commits on `develop` don't have coverage info. It appears that
# codecov will give you an error if the pseudo-base's coverage data
# doesn't all apply properly to the real PR base.
#
# See here for docs:
# https://docs.codecov.com/docs/comparing-commits#pseudo-comparison
# See here for another potential solution:
# https://community.codecov.com/t/2480/15
codecov:
allow_coverage_offsets: true
================================================
FILE: .devcontainer/postCreateCommand.sh
================================================
#!/bin/bash
# Load spack environment at terminal startup
cat <<EOF >> /root/.bashrc
. /workspaces/spack/share/spack/setup-env.sh
EOF
# Load spack environment in this script
. /workspaces/spack/share/spack/setup-env.sh
# Ensure generic targets for maximum matching with buildcaches
spack config --scope site add "packages:all:require:[target=x86_64_v3]"
spack config --scope site add "concretizer:targets:granularity:generic"
# Find compiler and install gcc-runtime
spack compiler find --scope site
# Setup buildcaches
spack mirror add --scope site develop https://binaries.spack.io/develop
spack buildcache keys --install --trust
================================================
FILE: .devcontainer/ubuntu20.04/devcontainer.json
================================================
{
"name": "Ubuntu 20.04",
"image": "ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4:2023.08.01",
"postCreateCommand": "./.devcontainer/postCreateCommand.sh"
}
================================================
FILE: .devcontainer/ubuntu22.04/devcontainer.json
================================================
{
"name": "Ubuntu 22.04",
"image": "ghcr.io/spack/ubuntu-22.04:v2024-05-07",
"postCreateCommand": "./.devcontainer/postCreateCommand.sh"
}
================================================
FILE: .dockerignore
================================================
.git/*
opt/spack/*
/etc/spack/*
!/etc/spack/defaults
share/spack/dotkit/*
share/spack/lmod/*
share/spack/modules/*
lib/spack/spack/test/*
var/spack/cache/*
================================================
FILE: .flake8
================================================
# -*- conf -*-
# flake8 settings for Spack.
#
# These exceptions are for Spack core files. We're slightly more lenient
# with packages. See .flake8_packages for that.
#
# This is the only flake8 rule Spack violates somewhat flagrantly
# - E731: do not assign a lambda expression, use a def
#
# This is the only flake8 exception needed when using Black.
# - E203: white space around slice operators can be required, ignore : warn
#
# We still allow these in packages (Would like to get rid of them or rely on mypy
# in the future)
# - F403: from/import * used; unable to detect undefined names
# - F405: undefined name or from *
# - F821: undefined name (needed with from/import *)
#
[flake8]
#ignore = E129,,W503,W504,F999,N801,N813,N814,F403,F405,E203
extend-ignore = E731,E203
max-line-length = 99
# F4: Import
# - F405: `name` may be undefined, or undefined from star imports: `module`
#
# F8: Name
# - F821: undefined name `name`
#
per-file-ignores =
var/spack/*/package.py:F403,F405,F821
*-ci-package.py:F403,F405,F821
# exclude things we usually do not want linting for.
# These still get linted when passed explicitly, as when spack flake8 passes
# them on the command line.
exclude =
.git
etc/
opt/
share/
var/spack/cache/
var/spack/gpg*/
var/spack/junit-report/
var/spack/mock-configs/
lib/spack/spack/vendor/
__pycache__
var
format = spack
[flake8:local-plugins]
report =
spack = flake8_formatter:SpackFormatter
paths =
./share/spack/qa/
================================================
FILE: .git-blame-ignore-revs
================================================
# .git-blame-ignore-revs
# Formatted entire codebase with black 23
603569e321013a1a63a637813c94c2834d0a0023
# Formatted entire codebase with black 22
f52f6e99dbf1131886a80112b8c79dfc414afb7c
# Formatted all rst files
1377d42c16c6912faa77259c0a1f665210ccfd85
================================================
FILE: .gitattributes
================================================
*.bat text eol=crlf
*.py diff=python
*.py text eol=lf
lib/spack/spack/vendor/* linguist-vendored
================================================
FILE: .github/CODE_OF_CONDUCT.md
================================================
# Spack Community Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the Spack project or its community. Examples of representing the project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of the project may be further defined and clarified by Spack maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at maintainers@spack.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: .github/CONTRIBUTING.md
================================================
# Contributing to Spack
All contributions to Spack must be made under both the Apache License,
Version 2.0 (Apache-2.0) and the MIT license (MIT).
Before contributing to Spack, you should read the
[Contribution Guide](https://spack.readthedocs.io/en/latest/contribution_guide.html),
which is maintained as part of Spack's documentation.
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "\U0001F41E Bug report"
description: Report a bug in the core of Spack (command not working as expected, etc.)
labels: [bug, triage]
body:
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
description: |
Explain, in a clear and concise way, the command you ran and the result you were trying to achieve.
Example: "I ran `spack find` to list all the installed packages and ..."
placeholder: |
```console
$ spack <command1> <spec>
$ spack <command2> <spec>
...
```
validations:
required: true
- type: textarea
id: error
attributes:
label: Error message
description: |
If Spack reported an error, provide the error message. If it did not report an error but the output appears incorrect, provide the incorrect output. If there was no error message and no output but the result is incorrect, describe how it does not match what you expect.
placeholder: |
```console
$ spack --debug --stacktrace <command>
```
- type: textarea
id: information
attributes:
label: Information on your system
description: Please include the output of `spack debug report`
validations:
required: true
- type: markdown
attributes:
value: |
If you have any relevant configuration detail (custom `packages.yaml` or `modules.yaml`, etc.) you can add that here as well.
- type: checkboxes
id: checks
attributes:
label: General information
options:
- label: I have run `spack debug report` and reported the version of Spack/Python/Platform
required: true
- label: I have searched the issues of this repo and believe this is not a duplicate
required: true
- label: I have run the failing commands in debug mode and reported the output
required: true
- type: markdown
attributes:
value: |
We encourage you to try, as much as possible, to reduce your problem to the minimal example that still reproduces the issue. That would help us a lot in fixing it quickly and effectively!
If you want to ask a question about the tool (how to use it, what it can currently do, etc.), try the `#general` channel on [our Slack](https://slack.spack.io/) first. We have a welcoming community and chances are you'll get your reply faster and without opening an issue.
Other than that, thanks for taking the time to contribute to Spack!
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: "\U0001F4A5 Package build error"
url: https://github.com/spack/spack-packages/issues/new?template=build_error.yml
about: Report installation issues in the spack/spack-packages repository
- name: "\U0001F4A5 Package test error"
url: https://github.com/spack/spack-packages/issues/new?template=test_error.yml
about: Report standalone package test issues in the spack/spack-packages repository
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: "\U0001F38A Feature request"
description: Suggest adding a feature that is not yet in Spack
labels: [feature]
body:
- type: textarea
id: summary
attributes:
label: Summary
description: Please add a concise summary of your suggestion here.
validations:
required: true
- type: textarea
id: rationale
attributes:
label: Rationale
description: Is your feature request related to a problem? Please describe it!
- type: textarea
id: description
attributes:
label: Description
description: Describe the solution you'd like and the alternatives you have considered.
- type: textarea
id: additional_information
attributes:
label: Additional information
description: Add any other context about the feature request here.
- type: checkboxes
id: checks
attributes:
label: General information
options:
- label: I have searched the issues of this repo and believe this is not a duplicate
required: true
- type: markdown
attributes:
value: |
If you want to ask a question about the tool (how to use it, what it can currently do, etc.), try the `#general` channel on [our Slack](https://slack.spack.io/) first. We have a welcoming community and chances are you'll get your reply faster and without opening an issue.
Other than that, thanks for taking the time to contribute to Spack!
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
- package-ecosystem: "pip"
directories:
- "/.github/workflows/requirements/coverage"
- "/.github/workflows/requirements/style"
- "/.github/workflows/requirements/unit_tests"
- "/lib/spack/docs"
schedule:
interval: "daily"
================================================
FILE: .github/labeler.yml
================================================
bootstrap:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/bootstrap/**
binary-caches:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/binary_distribution.py
- any-glob-to-any-file: lib/spack/spack/cmd/buildcache.py
ci:
- changed-files:
- any-glob-to-any-file: .ci/**
- any-glob-to-any-file: .github/**
- any-glob-to-any-file: lib/spack/spack/ci/**
commands:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/**
config:
- changed-files:
- any-glob-to-any-file: etc/spack/**
- any-glob-to-any-file: lib/spack/spack/cmd/config.py
- any-glob-to-any-file: lib/spack/spack/config.py
- any-glob-to-any-file: lib/spack/spack/schema/**
docs:
- changed-files:
- any-glob-to-any-file: .readthedocs.yml
- any-glob-to-any-file: lib/spack/docs/**
environments:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/env.py
- any-glob-to-any-file: lib/spack/spack/environment/**
mirrors:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/mirror.py
- any-glob-to-any-file: lib/spack/spack/mirrors/**
modules:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/module.py
- any-glob-to-any-file: lib/spack/spack/modules/**
solver:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/solver/**
style:
- changed-files:
- any-glob-to-any-file: .flake8
- any-glob-to-any-file: .github/workflows/prechecks.yml
- any-glob-to-any-file: .github/workflows/requirements/style/**
- any-glob-to-any-file: lib/spack/spack/cmd/style.py
- any-glob-to-any-file: pyproject.toml
unit-tests:
- changed-files:
- any-glob-to-any-file: .codecov.yml
- any-glob-to-any-file: lib/spack/spack/cmd/unit_test.py
- any-glob-to-any-file: lib/spack/spack/test/**
- any-glob-to-any-file: pyproject.toml
- any-glob-to-any-file: pytest.ini
- any-glob-to-any-file: var/spack/test_repos/**
vendor:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/vendor/**
versions:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/version/**
================================================
FILE: .github/pull_request_template.md
================================================
<!--
Remember that `spackbot` can help with your PR in multiple ways:
- `@spackbot help` shows all the commands that are currently available
- `@spackbot fix style` tries to push a commit to fix style issues in this PR
- `@spackbot re-run pipeline` runs the pipelines again, if you have write access to the repository
-->
================================================
FILE: .github/workflows/bin/canonicalize.py
================================================
#!/usr/bin/env python3
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import argparse
import ast
import os
import subprocess
import sys
from itertools import product
from typing import List
def run_git_command(*args: str, dir: str) -> None:
"""Run a git command in the output directory."""
subprocess.run(
[
"git",
"-c",
"user.email=example@example.com",
"-c",
"user.name=Example",
"-c",
"init.defaultBranch=main",
"-c",
"color.ui=always",
"-C",
dir,
*args,
],
check=True,
stdout=sys.stdout,
stderr=sys.stderr,
)
def run(root: str, output_dir: str) -> None:
"""Recurse over a directory and canonicalize all Python files."""
from spack.util.package_hash import RemoveDocstrings, unparse
count = 0
stack = [root]
while stack:
current = stack.pop()
for entry in os.scandir(current):
if entry.is_dir(follow_symlinks=False):
stack.append(entry.path)
elif entry.is_file(follow_symlinks=False) and entry.name.endswith(".py"):
try:
with open(entry.path, "r") as f:
src = f.read()
except OSError:
continue
canonical_dir = os.path.join(output_dir, os.path.relpath(current, root))
os.makedirs(canonical_dir, exist_ok=True)
with open(os.path.join(canonical_dir, entry.name), "w") as f:
f.write(
unparse(RemoveDocstrings().visit(ast.parse(src)), py_ver_consistent=True)
)
count += 1
assert count > 0, "No Python files found in the specified directory."
def compare(
input_dir: str, output_dir: str, python_versions: List[str], spack_versions: List[str]
) -> None:
"""Compare canonicalized files across different Python versions and error if they differ."""
# Create a git repo in output_dir to track changes
os.makedirs(output_dir, exist_ok=True)
run_git_command("init", dir=output_dir)
pairs = list(product(spack_versions, python_versions))
if len(pairs) < 2:
raise ValueError("At least two Python or two Spack versions must be given for comparison.")
changes_with_previous: List[int] = []
for i, (spack_dir, python_exe) in enumerate(pairs):
print(f"\033[1;97mCanonicalizing with {python_exe} and {spack_dir}...\033[0m", flush=True)
# Point PYTHONPATH to the given Spack library for the subprocess
if not os.path.isdir(spack_dir):
raise ValueError(f"Invalid Spack dir: {spack_dir}")
env = os.environ.copy()
spack_pythonpath = os.path.join(spack_dir, "lib", "spack")
if "PYTHONPATH" in env and env["PYTHONPATH"]:
env["PYTHONPATH"] = f"{spack_pythonpath}{os.pathsep}{env['PYTHONPATH']}"
else:
env["PYTHONPATH"] = spack_pythonpath
subprocess.run(
[python_exe, __file__, "--run", "--input-dir", input_dir, "--output-dir", output_dir],
check=True,
stdout=sys.stdout,
stderr=sys.stderr,
env=env,
)
if i > 0:
try:
run_git_command("diff", "--exit-code", "HEAD", dir=output_dir)
except subprocess.CalledProcessError:
changes_with_previous.append(i)
# The first run creates a commit for reference
run_git_command("add", ".", dir=output_dir)
run_git_command(
"commit",
"--quiet",
"--allow-empty", # makes this idempotent when running locally
"-m",
f"Canonicalized with {python_exe} and {spack_dir}",
dir=output_dir,
)
for i in changes_with_previous:
previous_spack, previous_python = pairs[i - 1]
current_spack, current_python = pairs[i]
print(
f"\033[1;31mChanges detected between {previous_python} ({previous_spack}) and "
f"{current_python} ({current_spack})\033[0m"
)
if changes_with_previous:
exit(1)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Canonicalize Spack package files.")
parser.add_argument("--run", action="store_true", help="Generate canonicalized sources.")
parser.add_argument("--spack", nargs="+", help="Specify one or more Spack versions.")
parser.add_argument("--python", nargs="+", help="Specify one or more Python versions.")
parser.add_argument("--input-dir", type=str, required=True, help="A repo's packages dir.")
parser.add_argument(
"--output-dir",
type=str,
required=True,
help="The output directory for canonicalized package files.",
)
args = parser.parse_args()
if args.run:
run(args.input_dir, args.output_dir)
else:
compare(args.input_dir, args.output_dir, args.python, args.spack)
================================================
FILE: .github/workflows/bin/execute_installer.ps1
================================================
$ proc = Start-Process ${{ env.spack_installer }}\spack.exe "/install /quiet" -Passthru
$handle = $proc.Handle # cache proc.Handle
$proc.WaitForExit();
if ($proc.ExitCode -ne 0) {
Write-Warning "$_ exited with status code $($proc.ExitCode)"
}
================================================
FILE: .github/workflows/bin/format-rst.py
================================================
#!/usr/bin/env python3
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
"""This script formats reStructuredText files to ensure one sentence per line and no trailing
whitespace. It exits with a non-zero status if any files were modified."""
import difflib
import importlib
import io
import json
import os
import re
import subprocess
import sys
from typing import List
import black
from docutils import nodes
from docutils.core import publish_doctree
from docutils.parsers.rst import Directive, directives
from ruamel.yaml import YAML
from spack.vendor import jsonschema
import spack.schema
#: Map Spack config sections to their corresponding JSON schema
SECTION_AND_SCHEMA = [
# The first property's key is the config section name
(next(iter(m.schema["properties"])), m.schema)
# Dynamically load all modules in spack.schema to be future-proof
for m in (
importlib.import_module(f"spack.schema.{f[:-3]}")
for f in os.listdir(os.path.dirname(spack.schema.__file__))
if f.endswith(".py") and f != "__init__.py"
)
if hasattr(m, "schema") and len(m.schema.get("properties", {})) == 1
]
assert SECTION_AND_SCHEMA, "no schemas found"
END_OF_SENTENCE = re.compile(
r"""
(
(?:
(?<!\b(?:e\.g|i\.e)) # e.g. and i.e. are not sentence endings
\.|\?|!|\?! # end of sentence punctuation
)
(?:\*{0,2}) # optionally match **bold.** and *italic.* at the end of sentence.
['")\]]? # optionally match closing quotes and parentheses
)
\s+ # at least one blank after punctuation
(?=[A-Z0-9:`*'"(\[]) # likely start of a new sentence
""",
re.VERBOSE,
)
DOCUTILS_SETTING = {"report_level": 5, "raw_enabled": False, "file_insertion_enabled": False}
DOUBLE_COLON_WARNING = re.compile(r"\-\s*([^: ]+)::.*\n\+\s*'\1:':")
def _warning(msg: str) -> str:
return f"\033[1;33mwarning:\033[0m {msg}"
class Warning:
def __init__(self, path: str, line: int, message: str) -> None:
self.path = path
self.line = line
self.message = message
def __str__(self) -> str:
return _warning(f"{self.path}:{self.line}: {self.message}")
class CodeBlockWarning(Warning):
def __init__(self, path: str, line: int, message: str, diff: str):
super().__init__(path, line, f"{message}\n{diff}")
def __str__(self) -> str:
return _warning(f"{self.path}:{self.line}: {self.message}")
class ValidationWarning(Warning):
pass
class SphinxCodeBlock(Directive):
"""Defines a code-block directive with the options Sphinx supports."""
has_content = True
optional_arguments = 1 # language
required_arguments = 0
option_spec = {
"force": directives.unchanged,
"linenos": directives.unchanged,
"dedent": directives.unchanged,
"lineno-start": directives.unchanged,
"emphasize-lines": directives.unchanged,
"caption": directives.unchanged,
"class": directives.unchanged,
"name": directives.unchanged,
}
def run(self) -> List[nodes.Node]:
# Produce a literal block with block.attributes["language"] set.
language = self.arguments[0] if self.arguments else "python"
literal = nodes.literal_block("\n".join(self.content), "\n".join(self.content))
literal["language"] = language
return [literal]
directives.register_directive("code-block", SphinxCodeBlock)
class ParagraphInfo:
lineno: int
end_lineno: int
src: str
lines: List[str]
def __init__(self, line: int, src: str) -> None:
self.lineno = line
self.src = src
self.lines = src.splitlines()
self.end_lineno = line + len(self.lines) - 1
def _is_node_in_table(node: nodes.Node) -> bool:
"""Check if a node is inside a table by walking up the parent chain."""
while node.parent:
node = node.parent
if isinstance(node, nodes.table):
return True
return False
def _validate_schema(data: object) -> None:
if not isinstance(data, dict):
return
for section, schema in SECTION_AND_SCHEMA:
if section in data:
jsonschema.validate(data, schema)
def _format_code_blocks(document: nodes.document, path: str) -> List[Warning]:
"""Try to parse and format Python, YAML, and JSON code blocks. This does *not* update the
sources, but collects issues for later reporting. Returns a list of warnings."""
issues: List[Warning] = []
for code_block in document.findall(nodes.literal_block):
language = code_block.attributes.get("language", "")
if language not in ("python", "yaml", "json"):
continue
original = code_block.astext()
line = code_block.line if code_block.line else 0
possible_config_data = None
try:
if language == "python":
formatted = black.format_str(original, mode=black.FileMode(line_length=99))
elif language == "yaml":
yaml = YAML(pure=True)
yaml.width = 10000 # do not wrap lines
yaml.preserve_quotes = True # do not force particular quotes
buf = io.BytesIO()
possible_config_data = yaml.load(original)
yaml.dump(possible_config_data, buf)
formatted = buf.getvalue().decode("utf-8")
elif language == "json":
formatted = json.dumps(json.loads(original), indent=2)
else:
assert False
except Exception as e:
issues.append(Warning(path, line, f"formatting failed: {e}: {original!r}"))
continue
try:
_validate_schema(possible_config_data)
except jsonschema.ValidationError as e:
issues.append(ValidationWarning(path, line, f"schema validation failed: {e.message}"))
if formatted == original:
continue
diff = "\n".join(
difflib.unified_diff(
original.splitlines(),
formatted.splitlines(),
lineterm="",
fromfile=f"{path}:{line} (original)",
tofile=f"{path}:{line} (suggested, NOT required)",
)
)
# ignore suggestions to quote double colons like this:
#
# - build_stage::
# + 'build_stage:':
#
if diff and not DOUBLE_COLON_WARNING.search(diff):
issues.append(CodeBlockWarning(path, line, "formatting suggested:", diff))
return issues
def _format_paragraphs(document: nodes.document, path: str, src_lines: List[str]) -> bool:
"""Format paragraphs in the document. Returns True if ``src_lines`` was modified."""
paragraphs = [
ParagraphInfo(line=p.line, src=p.rawsource)
for p in document.findall(nodes.paragraph)
if p.line is not None and p.rawsource and not _is_node_in_table(p)
]
# Work from bottom to top to avoid messing up line numbers
paragraphs.sort(key=lambda p: p.lineno, reverse=True)
modified = False
for p in paragraphs:
# docutils does not give us the column offset, so we'll find it ourselves.
col_offset = src_lines[p.lineno - 1].rfind(p.lines[0])
assert col_offset >= 0, f"{path}:{p.lineno}: rst parsing error."
prefix = lambda i: " " * col_offset if i > 0 else src_lines[p.lineno - 1][:col_offset]
# Defensive check to ensure the source paragraph matches the docutils paragraph
for i, line in enumerate(p.lines):
line_lhs = f"{prefix(i)}{line}"
line_rhs = src_lines[p.lineno - 1 + i].rstrip() # docutils trims trailing whitespace
assert line_lhs == line_rhs, f"{path}:{p.lineno + i}: rst parsing error."
# Replace current newlines with whitespace, and then split sentences.
new_paragraph_src = END_OF_SENTENCE.sub(r"\1\n", p.src.replace("\n", " "))
new_paragraph_lines = [
f"{prefix(i)}{line.lstrip()}" for i, line in enumerate(new_paragraph_src.splitlines())
]
if new_paragraph_lines != src_lines[p.lineno - 1 : p.end_lineno]:
modified = True
src_lines[p.lineno - 1 : p.end_lineno] = new_paragraph_lines
return modified
def reformat_rst_file(path: str, warnings: List[Warning]) -> bool:
"""Reformat a reStructuredText file "in-place". Returns True if modified, False otherwise."""
with open(path, "r", encoding="utf-8") as f:
src = f.read()
src_lines = src.splitlines()
document: nodes.document = publish_doctree(src, settings_overrides=DOCUTILS_SETTING)
warnings.extend(_format_code_blocks(document, path))
if not _format_paragraphs(document, path, src_lines):
return False
with open(f"{path}.tmp", "w", encoding="utf-8") as f:
f.write("\n".join(src_lines))
f.write("\n")
os.rename(f"{path}.tmp", path)
print(f"Fixed reStructuredText formatting: {path}", flush=True)
return True
def main(*files: str) -> None:
modified = False
warnings: List[Warning] = []
for f in files:
modified |= reformat_rst_file(f, warnings)
if modified:
subprocess.run(["git", "--no-pager", "diff", "--color=always", "--", *files])
for warning in sorted(warnings, key=lambda w: isinstance(w, ValidationWarning)):
print(warning, flush=True, file=sys.stderr)
if warnings:
print(
_warning(f"completed with {len(warnings)} potential issues"),
flush=True,
file=sys.stderr,
)
sys.exit(1 if modified else 0)
if __name__ == "__main__":
main(*sys.argv[1:])
================================================
FILE: .github/workflows/bin/generate_spack_yaml_containerize.sh
================================================
#!/bin/bash
(echo "spack:" \
&& echo " specs: []" \
&& echo " container:" \
&& echo " format: docker" \
&& echo " images:" \
&& echo " os: \"${SPACK_YAML_OS}\"" \
&& echo " spack:" \
&& echo " ref: ${GITHUB_REF}") > spack.yaml
================================================
FILE: .github/workflows/bin/setup_git.ps1
================================================
git config --global user.email "spack@example.com"
git config --global user.name "Test User"
git config --global core.longpaths true
if ($(git branch --show-current) -ne "develop")
{
git branch develop origin/develop
}
================================================
FILE: .github/workflows/bin/setup_git.sh
================================================
#!/bin/bash -e
git config --global user.email "spack@example.com"
git config --global user.name "Test User"
# create a local pr base branch
if [[ -n $GITHUB_BASE_REF ]]; then
git fetch origin "${GITHUB_BASE_REF}:${GITHUB_BASE_REF}"
fi
================================================
FILE: .github/workflows/bin/system_shortcut_check.ps1
================================================
param ($systemFolder, $shortcut)
$start = [System.Environment]::GetFolderPath("$systemFolder")
Invoke-Item "$start\Programs\Spack\$shortcut"
================================================
FILE: .github/workflows/bootstrap.yml
================================================
name: Bootstrapping
on:
# This Workflow can be triggered manually
workflow_dispatch:
workflow_call:
schedule:
# nightly at 2:16 AM
- cron: "16 2 * * *"
concurrency:
group: bootstrap-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
distros-clingo-sources:
if: github.repository == 'spack/spack'
runs-on: ubuntu-latest
container: ${{ matrix.image }}
strategy:
matrix:
image: ["fedora:latest", "opensuse/leap:latest"]
steps:
- name: Setup Fedora
if: ${{ matrix.image == 'fedora:latest' }}
run: |
dnf install -y \
bzip2 curl file gcc-c++ gcc gcc-gfortran git gzip \
make patch unzip which xz python3 python3-devel tree \
cmake bison bison-devel libstdc++-static gawk
- name: Setup OpenSUSE
if: ${{ matrix.image == 'opensuse/leap:latest' }}
run: |
# Harden CI by applying the workaround described here: https://www.suse.com/support/kb/doc/?id=000019505
zypper update -y || zypper update -y
zypper install -y \
bzip2 curl file gcc-c++ gcc gcc-fortran tar git gpg2 gzip \
make patch unzip which xz python3 python3-devel tree \
cmake bison
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Bootstrap clingo
run: |
. share/spack/setup-env.sh
spack config add config:installer:new
spack bootstrap disable github-actions-v2
spack bootstrap disable github-actions-v0.6
spack solve zlib
tree ~/.spack/bootstrap/store/
clingo-sources:
if: github.repository == 'spack/spack'
runs-on: ${{ matrix.runner }}
strategy:
matrix:
runner: ["macos-15-intel", "macos-latest", "ubuntu-latest"]
steps:
- name: Setup macOS
if: ${{ matrix.runner != 'ubuntu-latest' }}
run: brew install bison tree
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
- name: Bootstrap clingo
run: |
. share/spack/setup-env.sh
spack config add config:installer:new
spack bootstrap disable github-actions-v2
spack bootstrap disable github-actions-v0.6
export PATH="$(brew --prefix bison)/bin:$(brew --prefix cmake)/bin:$PATH"
spack solve zlib
tree ~/.spack/bootstrap/store/
gnupg-sources:
if: github.repository == 'spack/spack'
runs-on: ${{ matrix.runner }}
strategy:
matrix:
runner: ["macos-15-intel", "macos-latest", "ubuntu-latest"]
steps:
- name: Setup macOS
if: ${{ matrix.runner != 'ubuntu-latest' }}
run: brew install tree gawk
- name: Remove system executables
run: |
while [ -n "$(command -v gpg gpg2 patchelf)" ]; do
sudo rm $(command -v gpg gpg2 patchelf)
done
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- name: Bootstrap GnuPG
run: |
. share/spack/setup-env.sh
spack config add config:installer:new
spack solve zlib
spack bootstrap disable github-actions-v2
spack bootstrap disable github-actions-v0.6
spack gpg list
tree ~/.spack/bootstrap/store/
from-binaries:
if: github.repository == 'spack/spack'
runs-on: ${{ matrix.runner }}
strategy:
matrix:
runner: ["macos-15-intel", "macos-latest", "ubuntu-latest"]
steps:
- name: Setup macOS
if: ${{ matrix.runner != 'ubuntu-latest' }}
run: brew install tree
- name: Remove system executables
run: |
while [ -n "$(command -v gpg gpg2 patchelf)" ]; do
sudo rm $(command -v gpg gpg2 patchelf)
done
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: |
3.8
3.9
3.10
3.11
3.12
3.13
3.14
- name: Set bootstrap sources
run: |
. share/spack/setup-env.sh
spack bootstrap disable github-actions-v0.6
spack bootstrap disable spack-install
- name: Bootstrap clingo
run: |
. share/spack/setup-env.sh
for ver in 3.8 3.9 3.10 3.11 3.12 3.13 3.14; do
ver_dir="$(find "$RUNNER_TOOL_CACHE/Python" -wholename "*/${ver}.*/*/bin" | grep . || true)"
export SPACK_PYTHON="$ver_dir/python3"
if [ ! -d "$ver_dir" ] || ! "$SPACK_PYTHON" --version; then
echo "Python $ver not found"
exit 1
fi
spack solve zlib
done
tree ~/.spack/bootstrap/store
- name: Bootstrap GnuPG
run: |
. share/spack/setup-env.sh
spack config add config:installer:new
spack gpg list
tree ~/.spack/bootstrap/store/
windows:
if: github.repository == 'spack/spack'
runs-on: "windows-latest"
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: "3.12"
- name: Setup Windows
run: |
Remove-Item -Path (Get-Command gpg).Path
Remove-Item -Path (Get-Command file).Path
- name: Bootstrap clingo
run: |
./share/spack/setup-env.ps1
spack bootstrap disable github-actions-v2
spack bootstrap disable github-actions-v0.6
spack -d solve zlib
./share/spack/qa/validate_last_exit.ps1
tree $env:userprofile/.spack/bootstrap/store/
- name: Bootstrap GnuPG
run: |
./share/spack/setup-env.ps1
spack -d gpg list
./share/spack/qa/validate_last_exit.ps1
tree $env:userprofile/.spack/bootstrap/store/
dev-bootstrap:
runs-on: ubuntu-latest
container: registry.access.redhat.com/ubi8/ubi
steps:
- name: Install dependencies
run: |
dnf install -y \
bzip2 curl gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
make patch python3.11 tcl unzip which xz
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup repo and non-root user
run: |
git --version
git config --global --add safe.directory '*'
git fetch --unshallow
. .github/workflows/bin/setup_git.sh
- name: Setup a virtual environment with platform-python
run: |
python3.11 -m venv ~/platform-spack-311
source ~/platform-spack-311/bin/activate
pip install --upgrade pip clingo
- name: Bootstrap Spack development environment
run: |
source ~/platform-spack-311/bin/activate
source share/spack/setup-env.sh
spack debug report
spack -d bootstrap now --dev
================================================
FILE: .github/workflows/build-containers.yml
================================================
name: Containers
on:
# This Workflow can be triggered manually
workflow_dispatch:
# Build new Spack develop containers nightly.
schedule:
- cron: '34 0 * * *'
# Run on pull requests that modify this file
pull_request:
branches:
- develop
paths:
- '.github/workflows/build-containers.yml'
- 'share/spack/docker/*'
- 'share/spack/templates/container/*'
- 'lib/spack/spack/container/*'
# Let's also build & tag Spack containers on releases.
release:
types: [published]
concurrency:
group: build_containers-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
deploy-images:
runs-on: ubuntu-latest
permissions:
packages: write
strategy:
# Even if one container fails to build we still want the others
# to continue their builds.
fail-fast: false
# A matrix of Dockerfile paths, associated tags, and which architectures
# they support.
matrix:
# Meaning of the various items in the matrix list
# 0: Container name (e.g. ubuntu-bionic)
# 1: Platforms to build for
# 2: Base image (e.g. ubuntu:22.04)
dockerfile: [[amazon-linux, 'linux/amd64,linux/arm64', 'amazonlinux:2'],
[centos-stream9, 'linux/amd64,linux/arm64', 'centos:stream9'],
[leap15, 'linux/amd64,linux/arm64', 'opensuse/leap:15'],
[ubuntu-focal, 'linux/amd64,linux/arm64', 'ubuntu:20.04'],
[ubuntu-jammy, 'linux/amd64,linux/arm64', 'ubuntu:22.04'],
[ubuntu-noble, 'linux/amd64,linux/arm64', 'ubuntu:24.04'],
[almalinux8, 'linux/amd64,linux/arm64', 'almalinux:8'],
[almalinux9, 'linux/amd64,linux/arm64', 'almalinux:9'],
[rockylinux8, 'linux/amd64,linux/arm64', 'rockylinux:8'],
[rockylinux9, 'linux/amd64,linux/arm64', 'rockylinux:9'],
[fedora39, 'linux/amd64,linux/arm64', 'fedora:39'],
[fedora40, 'linux/amd64,linux/arm64', 'fedora:40']]
name: Build ${{ matrix.dockerfile[0] }}
if: github.repository == 'spack/spack'
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Determine latest release tag
id: latest
run: |
git fetch --quiet --tags
echo "tag=$(git tag --list --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" | tee -a $GITHUB_OUTPUT
- uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6.0.0
id: docker_meta
with:
images: |
ghcr.io/${{ github.repository_owner }}/${{ matrix.dockerfile[0] }}
${{ github.repository_owner }}/${{ matrix.dockerfile[0] }}
tags: |
type=schedule,pattern=nightly
type=schedule,pattern=develop
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=ref,event=branch
type=ref,event=pr
type=raw,value=latest,enable=${{ github.ref == format('refs/tags/{0}', steps.latest.outputs.tag) }}
- name: Generate the Dockerfile
env:
SPACK_YAML_OS: "${{ matrix.dockerfile[2] }}"
run: |
.github/workflows/bin/generate_spack_yaml_containerize.sh
. share/spack/setup-env.sh
mkdir -p dockerfiles/${{ matrix.dockerfile[0] }}
spack containerize --last-stage=bootstrap | tee dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile
printf "Preparing to build ${{ env.container }} from dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile"
if [ ! -f "dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile" ]; then
printf "dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile does not exist"
exit 1;
fi
- name: Upload Dockerfile
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: dockerfiles_${{ matrix.dockerfile[0] }}
path: dockerfiles
- name: Set up QEMU
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4.0.0
- name: Log in to GitHub Container Registry
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Log in to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build & Deploy ${{ matrix.dockerfile[0] }}
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
with:
context: dockerfiles/${{ matrix.dockerfile[0] }}
platforms: ${{ matrix.dockerfile[1] }}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.docker_meta.outputs.tags }}
labels: ${{ steps.docker_meta.outputs.labels }}
merge-dockerfiles:
runs-on: ubuntu-latest
needs: deploy-images
steps:
- name: Merge Artifacts
uses: actions/upload-artifact/merge@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: dockerfiles
pattern: dockerfiles_*
delete-merged: true
================================================
FILE: .github/workflows/ci.yaml
================================================
name: ci
on:
push:
branches:
- develop
- releases/**
pull_request:
branches:
- develop
- releases/**
merge_group:
concurrency:
group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
# Check which files have been updated by the PR
changes:
runs-on: ubuntu-latest
# Set job outputs to values from filter step
outputs:
bootstrap: ${{ steps.filter.outputs.bootstrap }}
core: ${{ steps.filter.outputs.core }}
packages: ${{ steps.filter.outputs.packages }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
if: ${{ github.event_name == 'push' || github.event_name == 'merge_group' }}
with:
fetch-depth: 0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter
with:
# For merge group events, compare against the target branch (main)
base: ${{ github.event_name == 'merge_group' && github.event.merge_group.base_ref || '' }}
# For merge group events, use the merge group head ref
ref: ${{ github.event_name == 'merge_group' && github.event.merge_group.head_sha || github.ref }}
# See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
# Don't run if we only modified packages in the
# built-in repository or documentation
filters: |
bootstrap:
- 'lib/spack/**'
- 'share/spack/**'
- '.github/workflows/bootstrap.yml'
- '.github/workflows/ci.yaml'
core:
- './!(var/**)/**'
- 'var/spack/test_repos/**'
packages:
- 'var/**'
# Some links for easier reference:
#
# "github" context: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context
# job outputs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs
# setting environment variables from earlier steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
#
bootstrap:
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.bootstrap == 'true' }}
needs: [ prechecks, changes ]
uses: ./.github/workflows/bootstrap.yml
secrets: inherit
unit-tests:
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.core == 'true' }}
needs: [ prechecks, changes ]
uses: ./.github/workflows/unit_tests.yaml
secrets: inherit
prechecks:
needs: [ changes ]
uses: ./.github/workflows/prechecks.yml
secrets: inherit
with:
with_coverage: ${{ needs.changes.outputs.core }}
with_packages: ${{ needs.changes.outputs.packages }}
import-check:
needs: [ changes ]
uses: ./.github/workflows/import-check.yaml
all-prechecks:
needs: [ prechecks ]
if: ${{ always() }}
runs-on: ubuntu-latest
steps:
- name: Success
run: |
[ "${{ needs.prechecks.result }}" = "success" ] && exit 0
[ "${{ needs.prechecks.result }}" = "skipped" ] && exit 0
echo "Unit tests failed."
exit 1
coverage:
needs: [ unit-tests, prechecks ]
if: ${{ needs.changes.outputs.core }}
uses: ./.github/workflows/coverage.yml
secrets: inherit
all:
needs: [ unit-tests, coverage, bootstrap ]
if: ${{ always() }}
runs-on: ubuntu-latest
# See https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs#needs-context
steps:
- name: Status summary
run: |
if [ "${{ needs.unit-tests.result }}" = "success" ] || [ "${{ needs.unit-tests.result }}" = "skipped" ]; then
if [ "${{ needs.bootstrap.result }}" = "success" ] || [ "${{ needs.bootstrap.result }}" = "skipped" ]; then
exit 0
else
echo "Bootstrap tests failed."
exit 1
fi
else
echo "Unit tests failed."
exit 1
fi
================================================
FILE: .github/workflows/coverage.yml
================================================
name: coverage
on:
workflow_call:
jobs:
# Upload coverage reports to codecov once as a single bundle
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.14'
- name: Install python dependencies
run: pip install -r .github/workflows/requirements/coverage/requirements.txt
- name: Download coverage artifact files
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
pattern: coverage-*
path: coverage
merge-multiple: true
- run: ls -la coverage
- run: coverage combine -a coverage/.coverage*
- run: coverage xml
- name: "Upload coverage report to CodeCov"
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2
with:
verbose: true
fail_ci_if_error: false
token: ${{ secrets.CODECOV_TOKEN }}
================================================
FILE: .github/workflows/import-check.yaml
================================================
name: import-check
on:
workflow_call:
jobs:
# Check we don't make the situation with circular imports worse
import-check:
continue-on-error: true
runs-on: ubuntu-latest
steps:
- uses: julia-actions/setup-julia@4a12c5f801ca5ef0458bba44687563ef276522dd # v3.0.0
with:
version: '1.10'
- uses: julia-actions/cache@9a93c5fb3e9c1c20b60fc80a478cae53e38618a4 # v3.0.2
# PR: use the base of the PR as the old commit
- name: Checkout PR base commit
if: github.event_name == 'pull_request'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.base.sha }}
path: old
# not a PR: use the previous commit as the old commit
- name: Checkout previous commit
if: github.event_name != 'pull_request'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 2
path: old
- name: Checkout previous commit
if: github.event_name != 'pull_request'
run: git -C old reset --hard HEAD^
- name: Checkout new commit
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: new
- name: Install circular import checker
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: haampie/circular-import-fighter
ref: f1c56367833f3c82f6a85dc58595b2cd7995ad48
path: circular-import-fighter
- name: Install dependencies
working-directory: circular-import-fighter
run: make -j dependencies
- name: Circular import check (without inline imports)
working-directory: circular-import-fighter
run: make -j compare "SPACK_ROOT=../old ../new"
- name: Circular import check (with inline imports)
working-directory: circular-import-fighter
run: make clean-graph && make -j compare "SPACK_ROOT=../old ../new" IMPORTS_FLAGS=--inline
================================================
FILE: .github/workflows/prechecks.yml
================================================
name: prechecks
on:
workflow_call:
inputs:
with_coverage:
required: true
type: string
with_packages:
required: true
type: string
concurrency:
group: style-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.13'
- name: Install Python Packages
run: |
pip install -r .github/workflows/requirements/style/requirements.txt
# Validate that the code can be run on all the Python versions supported by Spack
- name: vermin
run: |
vermin --backport importlib \
--backport argparse \
--violations \
--backport typing \
-t=3.6- \
-vvv \
--exclude-regex lib/spack/spack/vendor \
lib/spack/spack/ lib/spack/llnl/ bin/ var/spack/test_repos
# Check that __slots__ are used properly
- name: slotscheck
run: |
./bin/spack python -m slotscheck --exclude-modules="spack.test|spack.vendor" lib/spack/spack/
# Run style checks on the files that have been changed
style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 2
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.13'
- name: Install Python packages
run: |
pip install -r .github/workflows/requirements/style/requirements.txt
echo "PYTHONPATH=$PWD/lib/spack" >> $GITHUB_ENV
- name: Run style tests (code)
run: |
bin/spack style --base HEAD^1
bin/spack license verify
pylint -j $(nproc) --disable=all --enable=unspecified-encoding --ignore-paths=lib/spack/spack/vendor lib
- name: Run style tests (docs)
run: .github/workflows/bin/format-rst.py $(git ls-files 'lib/spack/docs/*.rst')
================================================
FILE: .github/workflows/requirements/coverage/requirements.txt
================================================
coverage==7.13.5
================================================
FILE: .github/workflows/requirements/style/requirements.txt
================================================
black==25.12.0
clingo==5.8.0
flake8==7.3.0
isort==7.0.0
mypy==1.20.1
vermin==1.8.0
pylint==4.0.5
docutils==0.22.4
ruamel.yaml==0.19.1
slotscheck==0.19.1
ruff==0.15.11
================================================
FILE: .github/workflows/requirements/unit_tests/requirements.txt
================================================
pytest==9.0.3
pytest-cov==7.1.0
pytest-xdist==3.8.0
coverage[toml]<=7.11.0
clingo==5.8.0
================================================
FILE: .github/workflows/stale.yaml
================================================
name: 'Close stale issues and PRs'
on:
schedule:
# Run every day at 1:14 UTC
- cron: '14 1 * * *'
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
permissions:
actions: write
issues: write
pull-requests: write
steps:
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
with:
# Issues configuration
stale-issue-message: >
This issue has been automatically marked as stale because it has not had any activity in the last 6 months.
It will be closed in 30 days if there is no further activity.
If the issue is waiting for a reply from maintainers, feel free to ping them as a reminder.
If it is waiting and has no comments yet, feel free to ping `@spack/spack-releasers` or simply leave a comment saying this should not be marked stale.
This will also reset the issue's stale state.
Thank you for your contributions!
close-issue-message: >
This issue was closed because it had no activity for 30 days after being marked stale.
If you feel this is in error, please feel free to reopen this issue.
stale-issue-label: 'stale'
any-of-issue-labels: 'build-error,unreproducible,question,documentation,environments'
exempt-issue-labels: 'pinned,triage,impact-low,impact-medium,impact-high'
# Pull requests configuration
stale-pr-message: >
This pull request has been automatically marked as stale because it has not had any activity in the last 6 months.
It will be closed in 30 days if there is no further activity.
If the pull request is waiting for a reply from reviewers, feel free to ping them as a reminder.
If it is waiting and has no assigned reviewer, feel free to ping `@spack/spack-releasers` or simply leave a comment saying this should not be marked stale.
This will reset the pull request's stale state.
To get more eyes on your pull request, you can post a link in the #pull-requests channel of the Spack Slack.
Thank you for your contributions!
close-pr-message: >
This pull request was closed because it had no activity for 30 days after being marked stale.
If you feel this is in error, please feel free to reopen this pull request.
stale-pr-label: 'stale'
any-of-pr-labels: 'new-package,update-package'
exempt-pr-labels: 'pinned'
# General configuration
ascending: true
operations-per-run: 1000
remove-stale-when-updated: true
enable-statistics: true
days-before-stale: 180
days-before-close: 30
================================================
FILE: .github/workflows/triage.yml
================================================
#-----------------------------------------------------------------------
# DO NOT modify unless you really know what you are doing.
#
# See https://stackoverflow.com/a/74959635 for more info.
# Talk to @alecbcs if you have questions/are not sure of a change's
# possible impact to security.
#-----------------------------------------------------------------------
name: triage
on:
pull_request_target:
branches:
- develop
jobs:
pr:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: write
steps:
- uses: actions/labeler@634933edcd8ababfe52f92936142cc22ac488b1b # v6.0.1
================================================
FILE: .github/workflows/unit_tests.yaml
================================================
name: unit tests
on:
workflow_dispatch:
workflow_call:
concurrency:
group: unit_tests-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
# Run unit tests with different configurations on linux
ubuntu:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.14']
on_develop:
- ${{ github.ref == 'refs/heads/develop' }}
include:
- python-version: '3.7'
os: ubuntu-22.04
on_develop: ${{ github.ref == 'refs/heads/develop' }}
exclude:
- python-version: '3.8'
os: ubuntu-latest
on_develop: false
- python-version: '3.9'
os: ubuntu-latest
on_develop: false
- python-version: '3.10'
os: ubuntu-latest
on_develop: false
- python-version: '3.11'
os: ubuntu-latest
on_develop: false
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install System packages
run: |
sudo apt-get -y update
# Needed for unit tests
sudo apt-get -y install \
coreutils cvs gfortran graphviz gnupg2 mercurial ninja-build \
cmake bison libbison-dev subversion
# On ubuntu 24.04, kcov was removed. It may come back in some future Ubuntu
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@40e9946c182a64b3db1bf51be0dcb915f7802aa9
- name: Install kcov with brew
run: "brew install kcov"
- name: Install Python packages
run: |
# See https://github.com/coveragepy/coveragepy/issues/2082
pip install --upgrade pip pytest pytest-xdist pytest-cov "coverage<=7.11.0"
pip install --upgrade "mypy>=0.900" "click" "ruff"
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/bin/setup_git.sh
- name: Bootstrap clingo
if: ${{ matrix.concretizer == 'clingo' }}
env:
SPACK_PYTHON: python
run: |
. share/spack/setup-env.sh
spack bootstrap disable spack-install
spack bootstrap now
spack -v solve zlib
- name: Run unit tests
env:
SPACK_PYTHON: python
SPACK_TEST_PARALLEL: 4
COVERAGE: true
COVERAGE_FILE: coverage/.coverage-${{ matrix.os }}-python${{ matrix.python-version }}
UNIT_TEST_COVERAGE: ${{ matrix.python-version == '3.14' }}
run: |
share/spack/qa/run-unit-tests
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-${{ matrix.os }}-python${{ matrix.python-version }}
path: coverage
include-hidden-files: true
# Test shell integration
shell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.11'
- name: Install System packages
run: |
sudo apt-get -y update
# Needed for shell tests
sudo apt-get install -y coreutils csh zsh tcsh fish dash bash subversion
# On ubuntu 24.04, kcov was removed. It may come back in some future Ubuntu
- name: Set up Homebrew
id: set-up-homebrew
uses: Homebrew/actions/setup-homebrew@40e9946c182a64b3db1bf51be0dcb915f7802aa9
- name: Install kcov with brew
run: "brew install kcov"
- name: Install Python packages
run: |
pip install --upgrade pip -r .github/workflows/requirements/unit_tests/requirements.txt
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/bin/setup_git.sh
- name: Run shell tests
env:
COVERAGE: true
run: |
share/spack/qa/run-shell-tests
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-shell
path: coverage
include-hidden-files: true
# Test RHEL8 UBI with platform Python. This job is run
# only on PRs modifying core Spack
rhel8-platform-python:
runs-on: ubuntu-latest
container: registry.access.redhat.com/ubi8/ubi
steps:
- name: Install dependencies
run: |
dnf install -y \
bzip2 curl gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
make patch tcl unzip which xz
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup repo and non-root user
run: |
git --version
git config --global --add safe.directory '*'
git fetch --unshallow
. .github/workflows/bin/setup_git.sh
- name: Setup a virtual environment with platform-python
run: |
/usr/libexec/platform-python -m venv ~/platform-spack
source ~/platform-spack/bin/activate
pip install --upgrade pip pytest coverage[toml] pytest-xdist
- name: Bootstrap Spack development environment and run unit tests
run: |
source ~/platform-spack/bin/activate
source share/spack/setup-env.sh
spack debug report
spack -d bootstrap now
pytest --verbose -x -n3 --dist loadfile -k 'not cvs and not svn and not hg'
# Test for the clingo based solver (using clingo-cffi)
clingo-cffi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.13'
- name: Install System packages
run: |
sudo apt-get -y update
sudo apt-get -y install coreutils gfortran graphviz gnupg2
- name: Install Python packages
run: |
pip install --upgrade pip -r .github/workflows/requirements/unit_tests/requirements.txt
pip install --upgrade -r .github/workflows/requirements/style/requirements.txt
- name: Run unit tests (full suite with coverage)
env:
COVERAGE: true
COVERAGE_FILE: coverage/.coverage-clingo-cffi
run: |
. share/spack/setup-env.sh
spack bootstrap disable spack-install
spack bootstrap disable github-actions-v0.6
spack bootstrap disable github-actions-v2
spack bootstrap status
spack solve zlib
pytest --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml -x -n3 lib/spack/spack/test/concretization/core.py
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-clingo-cffi
path: coverage
include-hidden-files: true
# Run unit tests on MacOS
macos:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macos-15-intel, macos-latest]
python-version: ["3.14"]
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packages
run: |
pip install --upgrade pip
# See https://github.com/coveragepy/coveragepy/issues/2082
pip install --upgrade -r .github/workflows/requirements/unit_tests/requirements.txt
- name: Setup Homebrew packages
run: |
brew install dash fish gcc gnupg kcov
- name: Run unit tests
env:
COVERAGE_FILE: coverage/.coverage-${{ matrix.os }}-python${{ matrix.python-version }}
run: |
git --version
. .github/workflows/bin/setup_git.sh
. share/spack/setup-env.sh
spack bootstrap disable spack-install
spack solve zlib
python3 -m pytest --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml --dist loadfile -x -n4
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-${{ matrix.os }}-python${{ matrix.python-version }}
path: coverage
include-hidden-files: true
# Run unit tests on Windows
windows:
defaults:
run:
shell:
powershell Invoke-Expression -Command "./share/spack/qa/windows_test_setup.ps1"; {0}
runs-on: windows-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.14'
- name: Install Python packages
run: |
python -m pip install --upgrade pip pywin32 -r .github/workflows/requirements/unit_tests/requirements.txt
python -m pip install --upgrade pip -r .github/workflows/requirements/style/requirements.txt
- name: Create local develop
run: |
./.github/workflows/bin/setup_git.ps1
- name: Unit Test
env:
COVERAGE_FILE: coverage/.coverage-windows
run: |
python -m pytest -x --verbose --cov --cov-config=pyproject.toml
./share/spack/qa/validate_last_exit.ps1
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-windows
path: coverage
include-hidden-files: true
canonicalization:
name: package.py canonicalization
runs-on: ubuntu-latest
container:
image: ghcr.io/spack/all-pythons:2025-10-10
steps:
- name: Checkout Spack (current)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: spack-current
- name: Checkout Spack (previous)
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: spack-previous
ref: ${{ github.event.pull_request.base.sha || github.event.before }}
- name: Checkout Spack Packages
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: spack/spack-packages
path: spack-packages
- name: Test package.py canonicalization
run: spack-current/.github/workflows/bin/canonicalize.py
--spack $PWD/spack-previous $PWD/spack-current
--python python3.6 python3.7 python3.8 python3.9 python3.10 python3.11 python3.12 python3.13 python3.14
--input-dir spack-packages/repos/spack_repo/builtin/packages/
--output-dir canonicalized
================================================
FILE: .gitignore
================================================
##########################
# Spack-specific ignores #
##########################
/var/spack/stage
/var/spack/cache
/var/spack/environments
/opt
/share/spack/modules
/share/spack/lmod
# Debug logs
spack-db.*
*.in.log
*.out.log
CLAUDE.md
# Configuration: Ignore everything in /etc/spack,
# except defaults and site scopes that ship with spack
/etc/spack/*
!/etc/spack/defaults
!/etc/spack/site/README.md
###########################
# Coding agent state
###########################
.claude/
.gemini/
.codex/
###########################
# Python-specific ignores #
###########################
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
#lib/
#lib64/
parts/
sdist/
#var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
!/lib/spack/env
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
########################
# Vim-specific ignores #
########################
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
*~
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
##########################
# Emacs-specific ignores #
##########################
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Org-mode
.org-id-locations
# flymake-mode
*_flymake.*
# eshell files
/eshell/history
/eshell/lastdir
# zsh byte-compiled files
*.zwc
# elpa packages
/elpa/
# reftex files
*.rel
# AUCTeX auto folder
/auto/
# cask packages
.cask/
dist/
# Flycheck
flycheck_*.el
# server auth directory
/server/
# projectiles files
.projectile
# directory configuration
.dir-locals.el
# network security
/network-security.data
############################
# Eclipse-specific ignores #
############################
.metadata
#bin/
tmp/
*.tmp
*.bak
*.swp
*~.nib
local.properties
.settings/
.loadpath
.recommenders
# External tool builders
.externalToolBuilders/
# Locally stored "Eclipse launch configurations"
*.launch
# PyDev specific (Python IDE for Eclipse)
*.pydevproject
# CDT-specific (C/C++ Development Tooling)
.cproject
# CDT- autotools
.autotools
# Java annotation processor (APT)
.factorypath
# PDT-specific (PHP Development Tools)
.buildpath
# sbteclipse plugin
.target
# Tern plugin
.tern-project
# TeXlipse plugin
.texlipse
# STS (Spring Tool Suite)
.springBeans
# Code Recommenders
.recommenders/
# Annotation Processing
.apt_generated/
.apt_generated_test/
# Scala IDE specific (Scala & Java development for Eclipse)
.cache-main
.scala_dependencies
.worksheet
# Uncomment this line if you wish to ignore the project description file.
# Typically, this file would be tracked if it contains build/dependency configurations:
#.project
##################################
# Visual Studio-specific ignores #
##################################
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
#################################
# Sublime Text-specific ignores #
#################################
# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# Workspace files are user-specific
*.sublime-workspace
# Project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using Sublime Text
# *.sublime-project
# SFTP configuration file
sftp-config.json
sftp-config-alt*.json
# Package control specific files
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache
# Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings
##############################
# JetBrains-specific ignores #
##############################
# Ignore the entire folder since it may conatin more files than
# just the ones listed below
.idea/
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
##########################
# macOS-specific ignores #
##########################
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
##########################
# Linux-specific ignores #
##########################
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
############################
# Windows-specific ignores #
############################
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
================================================
FILE: .mailmap
================================================
Abhinav Bhatele <bhatele@llnl.gov> Abhinav Bhatele <bhatele@gmail.com>
Adam Moody <moody20@llnl.gov> Adam T. Moody <moody20@llnl.gov>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Gimenez <alfredo.gimenez@gmail.com>
Alfredo Gimenez <gimenez1@llnl.gov> Alfredo Adolfo Gimenez <alfredo.gimenez@gmail.com>
Andrew Williams <williamsa89@cardiff.ac.uk> Andrew Williams <andrew@alshain.org.uk>
Axel Huebl <axelhuebl@lbl.gov> Axel Huebl <a.huebl@hzdr.de>
Axel Huebl <axelhuebl@lbl.gov> Axel Huebl <axel.huebl@plasma.ninja>
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@gmail.com>
Ben Boeckel <ben.boeckel@kitware.com> Ben Boeckel <mathstuf@users.noreply.github.com>
Benedikt Hegner <hegner@cern.ch> Benedikt Hegner <benedikt.hegner@cern.ch>
Brett Viren <bv@bnl.gov> Brett Viren <brett.viren@gmail.com>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra324.llnl.gov>
David Boehme <boehme3@llnl.gov> David Boehme <boehme3@sierra648.llnl.gov>
David Poliakoff <poliakoff1@llnl.gov> David Poliakoff <david.poliakoff@gmail.com>
Dhanannjay Deo <dhanannjay.deo@kitware.com> Dhanannjay 'Djay' Deo <dhanannjay.deo@kitware.com>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <elizabeth.fischer@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth F <rpf2116@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> Elizabeth Fischer <rpf2116@columbia.edu>
Elizabeth Fischer <elizabeth.fischer@columbia.edu> citibeth <rpf2116@columbia.edu>
Geoffrey Oxberry <oxberry1@llnl.gov> Geoffrey Oxberry <goxberry@gmail.com>
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <gjohnson@argon-ohpc.hpc.uiowa.edu>
Glenn Johnson <glenn-johnson@uiowa.edu> Glenn Johnson <glennpj@gmail.com>
Gregory Becker <becker33@llnl.gov> Gregory Becker <becker33.llnl.gov>
Gregory Becker <becker33@llnl.gov> Gregory Becker <becker33.llnl.gov>
Gregory Becker <becker33@llnl.gov> Gregory Becker <becker33@llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Greg Lee <lee218@llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab687.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@cab690.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@catalyst159.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory L. Lee <lee218@surface86.llnl.gov>
Gregory L. Lee <lee218@llnl.gov> Gregory Lee <lee218@llnl.gov>
Harmen Stoppels <me@harmenstoppels.nl> Harmen Stoppels <harmenstoppels@gmail.com>
Ian Lee <lee1001@llnl.gov> Ian Lee <IanLee1521@gmail.com>
James Wynne III <wynnejr@ornl.gov> James Riley Wynne III <wynnejr@ornl.gov>
James Wynne III <wynnejr@ornl.gov> James Wynne III <wynnejr@gpujake.com>
Joachim Protze <protze@rz.rwth-aachen.de> jprotze <protze@rz.rwth-aachen.de>
Kathleen Shea <shea9@llnl.gov> kshea21 <k_shea@coloradocollege.edu>
Kelly (KT) Thompson <kgt@lanl.gov> <kellyt@MENE.localdomain>
Kelly (KT) Thompson <kgt@lanl.gov> Kelly Thompson <KineticTheory@users.noreply.github.com>
Kevin Brandstatter <kjbrandstatter@gmail.com> Kevin Brandstatter <kbrandst@hawk.iit.edu>
Luc Jaulmes <luc.jaulmes@bsc.es> Luc Jaulmes <jaulmes1@llnl.gov>
Mario Melara <maamelara@gmail.com> Mario Melara <mamelara@genepool1.nersc.gov>
Mark Miller <miller86@llnl.gov> miller86 <miller86@llnl.gov>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> Massimiliano Culpo <massimiliano.culpo@googlemail.com>
Massimiliano Culpo <massimiliano.culpo@epfl.ch> alalazo <massimiliano.culpo@googlemail.com>
Mayeul d'Avezac <m.davezac@ucl.ac.uk> Mayeul d'Avezac <mdavezac@gmail.com>
Mitchell Devlin <mitchell.r.devlin@gmail.com> Mitchell Devlin <devlin@blogin4.lcrc.anl.gov>
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas <nrichart@users.noreply.github.com>
Nicolas Richart <nicolas.richart@epfl.ch> Nicolas Richart <nrichart@users.noreply.github.com>
Peter Scheibel <scheibel1@llnl.gov> scheibelp <scheibel1@llnl.gov>
Robert D. French <frenchrd@ornl.gov> Robert D. French <robert@robertdfrench.me>
Robert D. French <frenchrd@ornl.gov> Robert.French <frenchrd@ornl.gov>
Robert D. French <frenchrd@ornl.gov> robertdfrench <frenchrd@ornl.gov>
Saravan Pantham <saravan.pantham@gmail.com> Saravan Pantham <pantham1@surface86.llnl.gov>
Sergey Kosukhin <sergey.kosukhin@mpimet.mpg.de> Sergey Kosukhin <skosukhin@gmail.com>
Stephen Herbein <sherbein@udel.edu> Stephen Herbein <stephen272@gmail.com>
Todd Gamblin <tgamblin@llnl.gov> George Todd Gamblin <gamblin2@llnl.gov>
Todd Gamblin <tgamblin@llnl.gov> Todd Gamblin <gamblin2@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <scogland1@llnl.gov>
Tom Scogland <tscogland@llnl.gov> Tom Scogland <tom.scogland@gmail.com>
Tzanio Kolev <tzanio@llnl.gov> Tzanio <tzanio@llnl.gov>
================================================
FILE: .readthedocs.yml
================================================
version: 2
build:
os: "ubuntu-24.04"
apt_packages:
- graphviz
- inkscape
- xindy
tools:
python: "3.14"
jobs:
post_checkout:
- git fetch --unshallow || true # get accurate "Last updated on" info
sphinx:
configuration: lib/spack/docs/conf.py
fail_on_warning: true
formats:
- pdf
python:
install:
- requirements: lib/spack/docs/requirements.txt
search:
ranking:
_modules/*: -10
spack_repo.*.html: -10
spack_repo.html: -10
spack.*.html: -10
spack.html: -10
command_index.html: 4
advanced_topics.html: 5
binary_caches.html: 5
bootstrapping.html: 5
build_settings.html: 5
build_systems.html: 5
build_systems/*.html: 5
chain.html: 5
config_yaml.html: 5
configuring_compilers.html: 5
containers.html: 5
roles_and_responsibilities.html: 5
contribution_guide.html: 5
developer_guide.html: 5
package_review_guide.html: 5
env_vars_yaml.html: 5
environments.html: 5
extensions.html: 5
features.html: 5
getting_help.html: 5
getting_started.html: 5
gpu_configuration.html: 5
include_yaml.html: 5
installing_prerequisites.html: 5
mirrors.html: 5
module_file_support.html: 5
package_api.html: 5
package_fundamentals.html: 5
packages_yaml.html: 5
packaging_guide_advanced.html: 5
packaging_guide_build.html: 5
packaging_guide_creation.html: 5
packaging_guide_testing.html: 5
pipelines.html: 5
replace_conda_homebrew.html: 5
repositories.html: 5
signing.html: 5
spec_syntax.html: 5
windows.html: 5
frequently_asked_questions.html: 6
================================================
FILE: CHANGELOG.md
================================================
# v1.1.1 (2026-01-14)
## Usability and performance enhancements
* solver: do a precheck for non-existing and deprecated versions #51555
* improvements to solver performance (PRs 51591, 51605, 51612, 51625)
* python 3.14 support (PRs 51686, 51687, 51688, 51689, 51663)
* display when conditions with dependencies in spack info #51588
* spack repo remove: allow removing from unspecified scope #51563
* spack compiler info: show non-external compilers too #51718
## Improvements to the experimental new installer
* support forkserver #51788 (for python 3.14 support)
* support --dirty, --keep-stage, and `skip patch` arguments #51558
* implement --use-buildcache, --cache-only, --use-cache and --only arguments #51593
* implement overwrite, keep_prefix #51622
* implement --dont-restage #51623
* fix logging #51787
## Bugfixes
* repo.py: support rhel 7 #51617
* solver: match glibc constraints by hash #51559
* buildache list: list the component prefix not the root #51635
* solver: fix issue with conditional language dependencies #51692
* repo.py: fix checking out commits #51695
* spec parser: ensure toolchains are expanded to different objects #51731
* RHEL7 git 1.8.3.1 fix #51779
* RewireTask.complete: return value from \_process\_binary\_cache\_tarball #51825
## Documentation
* docs: fix default projections setting discrepancy #51640
# v1.1.0 (2025-11-14)
`v1.1.0` features major improvements to **compiler handling** and **configuration management**, a significant refactoring of **externals**, and exciting new **experimental features** like a console UI for parallel installations and concretization caching.
## Major new features
1. **Enhanced Compiler Control and Unmixing**
* Compiler unmixing (#51135)
* Propagated compiler preferences (#51383)
In Spack v1.0, support for compilers as nodes made it much easier to mix compilers for the same language on different packages in a Spec. This increased flexibility, but did not offer options to constrain compiler selection when needed.
* #51135 introduces the `concretizer:compiler_mixing` config option. When disabled, all specs in the "root unification set" (root specs and their transitive link/run deps) will be assigned a single compiler for each language. You can also specify a list of packages to be excepted from the restriction.
* #51383 introduces the `%%` sigil in the spec syntax. While `%` specifies a direct dependency for a single node, `%%` specifies a dependency for that node and a preference for its transitive link/run dependencies (at the same priority as the `prefer` key in `packages.yaml` config).
2. **Customizable configuration** (#51162)
All configuration now stems from `$spack/etc/spack` and `$spack/etc/spack/defaults`, so the owner of a Spack instance can have full control over what configuration scopes exist.
* Scopes included in configuration can be named, and the builtin `site`, `user`, `system`, etc. scopes are now defined in configuration rather than hard-coded.
* `$spack/etc/spack/defaults` is the lowest priority.
* `$spack/etc/spack` *includes* the other scopes at lower precedence than itself.
* You can override with any scopes *except* the defaults with `include::`. e.g., `include::[]` in an environment allows you to ignore everything but defaults entirely.
Here is `$spack/etc/spack/include.yaml`:
```yaml
include:
# user configuration scope
- name: "user"
path: "~/.spack"
optional: true
when: '"SPACK_DISABLE_LOCAL_CONFIG" not in env'
# site configuration scope
- name: "site"
path: "$spack/etc/spack/site"
optional: true
# system configuration scope
- name: "system"
path: "/etc/spack"
optional: true
when: '"SPACK_DISABLE_LOCAL_CONFIG" not in env'
```
NOTE: This change inverts the priority order of configuration in `$spack/etc/spack` and `~/.spack`.
See the [configuration docs](https://spack.readthedocs.io/en/latest/configuration.html) and
[include docs](https://spack.readthedocs.io/en/latest/include_yaml.html) for
more information.
3. **Git includes** (#51191)
Configuration files can now be included directly from a **remote Git repository**. This allows for easier sharing and versioning of complex configurations across teams or projects. These entries accept the same syntax as remote repository configuration, and can likewise be conditional with `when:`.
```yaml
include:
- git: https://github.com/spack/spack-configs
branch: main
when: os == "centos7"
paths:
- USC/config/config.yaml
- USC/config/packages.yaml
```
See [the docs](https://spack.readthedocs.io/en/latest/include_yaml.html#git-repository-files) for details.
4. **Externals Can Now Have Dependencies** (#51118)
Externals are treated as concrete specs, so there is a 1:1 mapping between an entry in `packages.yaml` and any installed external spec (for a fixed repository).
Their YAML specification has been extended to allow modeling dependencies of external specs. This might be quite useful to better capture e.g. ROCm installations that are already installed on a given system, or in similar cases.
To be backward compatible with external specs specifying a compiler, for instance `mpich %gcc@9`, Spack will match the compiler specification to an existing external. It will fail when the specification is ambiguous, or if it does not match any other externals.
## Experimental Features
5. **New installer UI** (experimental, see #51434)
New, experimental console UI for the Spack installer that allows:
* Spack to show progress on multiple parallel processes concurrently;
* Users to view logs for different installations independently; and
* Spack to share a jobserver among multiple parallel builds.
Demo: https://asciinema.org/a/755827
Usage:
* Run this to enable by default (and persist across runs):
```
spack config add config:installer:new
```
or use:
```
spack -c config:installer:new install ...
```
to try one run with the new UI.
* The `-j` flag in spack install `-j <N> ...` is all you need, it will build packages in parallel. There is no need to set `-p`; the installer spawns as many builds as it can and shares work by default.
* Use `n` for next logs and `p/N` for previous logs
* Use `v` to toggle between logs and overview
* Use `q` or `Esc` to go from logs back to overview.
* Use `/` to enter search mode: filters the overview as you type; press `Enter` to follow logs or `Esc` to exit search mode.
> [!WARNING]
> This feature is experimental because it is not feature-complete to match the existing installer. See the issue #51515 for a list of features that are not completed. Particularly note that the new installer locks the entire database, and other spack instances will not install concurrently while it is running.
6. **Concretization Caching** (experimental, see #50905, #51448)
Spack can cache concretization outputs for performance. With caching, Spack will still set up the concretization problem, but it can look up the solve result and avoid long solve times. This feature is currently off by default, but you can enable it with:
```
spack config add concretizer:concretization_cache:enable:true
```
> [!WARNING]
> Currently there is a bug that the cache will return results that do not properly reflect changes in the `package_hash` (that is, changes in the `package.py` source code). We will enable caching by default in a future release, when this bug is fixed.
## Potentially breaking changes
* Configurable configuration changes the precedence of the `site` scope.
* The `spack` scope (in `/etc/spack` within the Spack installation) is now the highest precedence scope
* The `site` scope is now *lower* precedence than `spack` and `user`.
* If you previously had configuration files in in `$spack/etc/spack`, they will take precedence over configuration in `~/.spack`. If you do not want that, move them to `$spack/etc/spack/site`.
* See #51162 for details.
* Fixed a bug with command-line and environment scope ordering. The environment scope could previously override custom command-line scopes. Now, the active environment is *always* lower precedence than any configuration scopes provided on the command line. (#51461)
## Other notable improvements
### Improved error messages
* solver: catch invalid dependencies during concretization (#51176)
* improved errors for requirements (#45800)
### Performance Improvements
* `spack mirror create --all` now runs in parallel (#50901)
* `spack develop`: fast automatic reconcretization (#51140)
* Don't spawn a process for `--fake` installs (#51491)
* Use `gethostname` instead of `getfqdn` (#51481)
* Check for `commit` variant only if not developing (#51507)
* Concretization performance improvements (#51160, #51152, #51416)
* spack diff: fix performance bug (#51270)
### Concretizer improvements
* concretizer: fix direct dep w/ virtuals issue (#51037)
* solver: reduce items in edge optimizations (#51503)
### UI and Commands
* Managed environments can now be organized into folders (#50994)
* `spack info` shows full info about conditional dependencies and can filter by spec. (#51137)
* `spack help` is now reorganized and has color sections (#51484)
* `spack clean --all` means all (no exception for bootstrap cache) (#50984)
* `--variants-by-name` no longer used (#51450)
* `spack env create`: allow creation from env or env dir (#51433)
## Notable Bugfixes
* mirror: clean up stage when retrying (#43519)
* Many smaller concretization fixes (#51361, #51355, #51341, #51347, #51282, #51190, #51226, #51065, #51064, #51074)
* Bugfix for failed multi-node parallel installations (#50933)
## Spack community stats
* 1,681 commits
* 8,611 packages in the 2025.11.0 release, 112 new since 2025.07.0
* 276 people contributed to this release
* 265 committers to packages
* 31 committers to core
See the [2025.11.0 release](https://github.com/spack/spack-packages/releases/tag/v2025.11.0) of [spack-packages](https://github.com/spack/spack-packages/) for more details.
# v1.0.4 (2026-02-23)
## Bug fixes
* Concretizer bugfixes:
* solver: remove a special case for provider weighting #51347
* solver: improve timeout handling and add Ctrl-C interrupt safety #51341
* solver: simplify interrupt/timeout logic #51349
* Repo management bugfixes:
* repo.py: support rhel 7 #51617
* repo.py: fix checking out commits #51695
* git: pull_checkout_branch RHEL7 git 1.8.3.1 fix #51779
* git: fix locking issue in pull_checkout_branch #51854
* spack repo remove: allow removing from unspecified scope #51563
* build_environment.py: Prevent deadlock on install process join #51429
* Fix typo in untrack_env #51554
* audit.py: fix re.sub(..., N) positional count arg #51735
## Enhancements
* Support Macos Tahoe (#51373, #51394, #51479)
* Support for Python 3.14, except for t-strings (#51686, #51687, #51688, #51697, #51663)
* spack info: show conditional dependencies and licenses; allow filtering #51137
* Spack fetch less likely to fail due to AI download protections #51496
* config: relax concurrent_packages to minimum 0 #51840
* This avoids forward-incompatibility with Spack v1.2
* Documentation improvements (#51315, #51640)
# v1.0.3 (2026-02-20)
Skipped due to a failure in the release process.
# v1.0.2 (2025-09-11)
## Bug Fixes
* `spack config edit` can now open malformed YAML files. (#51088)
* `spack edit -b` supports specifying the repository path or its namespace. (#51084)
* `spack repo list` escapes the color code for paths that contain `@g`. (#51178)
* Fixed various issues on the solver:
* Improved the error message when an invalid dependency is specified in the input. (#51176)
* Build the preferred compiler with itself by default. (#51201)
* Fixed a performance regression when using `unify:when_possible`. (#51226)
* Fixed an issue with strong preferences, when provider details are given. (#51263)
* Fixed an issue when specifying flags on a package that appears multiple times in the DAG. (#51218)
* Fixed a regression for `zsh` in `spack env activate --prompt`. (#51258)
* Fix a few cases where the `when` context manager was not dealing with direct dependencies correctly. (#51259)
* Various fixes to string representations of specs. (#51207)
## Enhancements
* Various improvements to the documentation (#51145, #51151, #51147, #51181, #51172, #51188, #51195)
* Greatly improve the performance of `spack diff`. (#51270)
* `spack solve` highlights optimization weights in a more intuitive way. (#51198)
# v1.0.1 (2025-08-11)
## Bug Fixes
* Ensure forward compatibility of package hashing with the upcoming Python 3.14 release. (#51042)
* The `spack diff` command now shows differences in runtime dependencies (e.g., `gcc-runtime`, `glibc`), which were previously hidden. (#51076)
* Fix a regression where the solver would mishandle a compiler that was required as both a build and a link dependency. (#51074)
* Resolved issues with selecting external packages that have a specific compiler specified. (#51064)
* Fix a bug where the concretizer would compute solution scores incorrectly when the package does not depend on a compiler. (#51037)
* The solver now correctly evaluates and respects package requirements that specify a hash. (#51065)
* Fix an issue where sparse checkouts for different packages could overwrite each other in a source cache or mirror. (#51080)
* Prevent `spack repo add` from overwriting the default branch when initially cloning a repository. (#51105)
* Add exception handling for bad URLs when fetching git provenance information. (#51022)
* Spack no longer conflates git warning messages with command output. (#51045)
* Fix an issue with non-path-based package repositories in environments. (#51055)
* Spack now validates the terminal size and will fall back to `LINES` and `COLUMNS` environment variables if detection fails. (#51090)
* Fix an issue where the package's fetcher was not being set correctly. (#51108)
* Ensure `spack tutorial` clones Spack v1.0 instead of v0.23. (#51091)
## Enhancements
* Various improvements to the documentation (#51014, #51033, #51039, #51049, #51066, #51073, #51079, #51082, #51083, #51086, #51126, #51131, #51132, #51025)
# v1.0.0 (2025-07-20)
`v1.0.0` is a major feature release and a significant milestone. It introduces compiler
dependencies, a foundational change that has been in development for almost seven years,
and the project's first stable package API.
If you are interested in more information, you can find more details on the road to
v1.0, as well as its features, in talks from the 2025 Spack User Meeting. For example:
* [State of the Spack Community](https://www.youtube.com/watch?v=4rInmUfuiZQ&list=PLRKq_yxxHw29-JcpG2CZ-xKK2U8Hw8O1t&index=2)
* [Spack v1.0 overview](https://www.youtube.com/watch?v=nFksqSDNwQA&list=PLRKq_yxxHw29-JcpG2CZ-xKK2U8Hw8O1t&index=4)
Introducing some of these features required us to make breaking changes. In most cases,
we've also provided tools (in the form of Spack commands) that you can use to
automatically migrate your packages and configuration.
## Overview
- [Overview](#overview)
- [Stable Package API](#stable-package-api)
- [Separate Package Repository](#separate-package-repository)
- [Updating and Pinning Packages](#updating-and-pinning-packages)
- [Breaking changes related to package repositories](#breaking-changes-related-to-package-repositories)
- [Migrating to the new package API](#migrating-to-the-new-package-api)
- [Compiler dependencies](#compiler-dependencies)
- [Compiler configuration](#compiler-configuration)
- [Languages are virtual dependencies](#languages-are-virtual-dependencies)
- [The meaning of % has changed](#the-meaning-of-%25-has-changed)
- [Virtual assignment syntax](#virtual-assignment-syntax)
- [Toolchains](#toolchains)
- [Ordering of variants and compilers now matters](#ordering-of-variants-and-compilers-now-matters)
- [Additional Major Features](#additional-major-features)
- [Concurrent Package Builds](#concurrent-package-builds)
- [Content-addressed build caches](#content-addressed-build-caches)
- [Better provenance and mirroring for git](#better-provenance-and-mirroring-for-git)
- [Environment variables in environments](#environment-variables-in-environments)
- [Better include functionality](#better-include-functionality)
- [New commands and options](#new-commands-and-options)
- [Notable refactors](#notable-refactors)
- [Documentation](#documentation)
- [Notable Bugfixes](#notable-bugfixes)
- [Additional deprecations, removals, and breaking changes](#additional-deprecations-removals-and-breaking-changes)
- [Spack community stats](#spack-community-stats)
## Stable Package API
In Spack `v1.0`, the package repository is separate from the Spack tool, giving you more
control over the versioning of package recipes. There is also a stable
[Package API](https://spack.readthedocs.io/en/latest/package_api.html) that is versioned
separately from Spack.
This release of Spack supports package API from `v1.0` up to `v2.2`. The older `v1.0`
package API is deprecated and may be removed in a future release, but we are
guaranteeing that any Spack `v1.x` release will be backward compatible with Package API
`v.2.x` -- i.e., it can execute code from the packages in *this* Spack release.
See the
[Package API Documentation](https://spack.readthedocs.io/en/latest/package_api.html) for
full details on package versioning and compatibility. The high level details are:
1. The `spack.package` Python module defines the Package API;
2. The Package API *minor version* is incremented when new functions or classes are exported from `spack.package`; and
3. The major version is incremented when functions or classes are removed or have breaking changes to their signatures (a rare occurrence).
This independent versioning allows package authors to utilize new Spack features without
waiting for a new Spack release. Older Spack packages (API `v1.0`) may import code from
outside of `spack.package`, e.g., from `spack.*` or `llnl.util.*`. This is deprecated
and *not* included in the API guarantee. We will remove support for these packages in a
future Spack release.
### Separate Package Repository
The Spack `builtin` package repository no longer lives in the Spack git repository. You
can find it here:
* https://github.com/spack/spack-packages
Spack clones the package repository automatically when you first run, so you do not have
to manage this manually. By default, Spack version `v1.0` uses the `v2025.07` release of
`spack-packages`. You can find out more about it by looking at the
[package releases](https://github.com/spack/spack-packages/releases).
Downloaded package repos are stored by default within `~/.spack`, but the fetch
destination can be configured. (#50650). If you want your package repository to live
somewhere else, run, e.g.:
```
spack repo set --destination ~/spack-packages builtin
```
You can also configure your *own* package repositories to be fetched automatically from
git urls, just as you can with `builtin`. See the
[repository configuration docs](https://spack.readthedocs.io/en/latest/repositories.html)
for details.
### Updating and Pinning Packages
You can tell Spack to update the core package repository from a branch. For example, on
`develop` or on a release, you can run commands like:
```shell
# pull the latest packages
spack repo update
```
or
```shell
# check out a specific commit of the spack-packages repo
spack repo update --commit 2bf4ab9585c8d483cc8581d65912703d3f020393 builtin
```
which will set up your configuration like this:
```yaml
repos:
builtin:
git: "https://github.com/spack/spack-packages.git"
commit: 2bf4ab9585c8d483cc8581d65912703d3f020393
```
You can use this within an environment to pin a specific version of its package files.
See the
[repository configuration docs](https://spack.readthedocs.io/en/latest/repositories.html)
for more details (#50868, #50997, #51021).
### Breaking changes related to package repositories
1. The builtin repo now lives in `var/spack/repos/spack_repo/builtin` instead of
`var/spack/repos/builtin`, and it has a new layout, which you can learn about in the
[repo docs](https://spack.readthedocs.io/en/latest/repositories.html).
2. The module `spack.package` no longer exports the following symbols, mostly related to
build systems: `AspellDictPackage`, `AutotoolsPackage`, `BundlePackage`,
`CachedCMakePackage`, `cmake_cache_filepath`, `cmake_cache_option`,
`cmake_cache_path`, `cmake_cache_string`, `CargoPackage`, `CMakePackage`,
`generator`, `CompilerPackage`, `CudaPackage`, `Package`, `GNUMirrorPackage`,
`GoPackage`, `IntelPackage`, `IntelOneApiLibraryPackageWithSdk`,
`IntelOneApiLibraryPackage`, `IntelOneApiStaticLibraryList`, `IntelOneApiPackage`,
`INTEL_MATH_LIBRARIES`, `LuaPackage`, `MakefilePackage`, `MavenPackage`,
`MesonPackage`, `MSBuildPackage`, `NMakePackage`, `OctavePackage`, `PerlPackage`,
`PythonExtension`, `PythonPackage`, `QMakePackage`, `RacketPackage`, `RPackage`,
`ROCmPackage`, `RubyPackage`, `SConsPackage`, `SIPPackage`, `SourceforgePackage`,
`SourcewarePackage`, `WafPackage`, `XorgPackage`
These are now part of the `builtin` package repository, not part of core spack or its
package API. When using repositories with package API `v2.0` and higher, *you must
explicitly import these package classes* from the appropriate module in
`spack_repo.builtin.build_systems` (see #50452 for more).
e.g., for `CMakePackage`, you would write:
```python
from spack_repo.builtin.build_systems.cmake import CMakePackage
```
Note that `GenericBuilder` and `Package` *are* part of the core package API. They are
currently re-exported from `spack_repo.builtin.build_systems.generic` for backward
compatibility but may be removed from the package repo. You should prefer to import
them from `spack.package`.
The original names will still work for old-style (`v1.0`) package repositories but
*not* in `v2.0` package repositories. Note that this means that the API stability
promise does *not* include old-style package repositories. They are deprecated and
will be removed in a future version. So, you should update as soon as you can.
3. Package directory names within `v2.0` repositories are now valid Python modules
| Old | New | Description |
|-----------------------|-----------------------|-------------------------------------|
| `py-numpy/package.py` | `py_numpy/package.py` | hyphen is replaced by underscore. |
| `7zip/package.py` | `_7zip/package.py` | leading digits now preceded by _ |
| `pass/package.py` | `_pass/package.py` | Python reserved words preceded by _ |
4. Spack has historically injected `import` statements into package recipes, so there
was no need to use `from spack.package import *` (though we have included it in
`builtin` packages for years. `from spack.package import *` (or more specific
imports) will be necessary in packages. The magic we added in the early days of Spack
was causing IDEs, code editors, and other tools not to be able to understand Spack
packages. Now they use standard Python import semantics and should be compatible with
modern Python tooling. This change was also necessary to support Python 3.13. (see
#47947 for more details).
### Migrating to the new package API
Support will remain in place for the old repository layout for *at least a year*, so
that you can continue to use old-style repos in conjunction with earlier versions. If
you have custom repositories that need to migrate to the new layout, you can upgrade
them to package API `v2.x` by running:
```
spack repo migrate
```
This will make the following changes to your repository:
1. If you used to import from `spack.pkg.builtin` in Python, you now need to import
from `spack_repo.builtin` instead:
```python
# OLD: no longer supported
from spack.pkg.builtin.my_pkg import MyPackage
# NEW: spack_repo is a Python namespace package
from spack_repo.builtin.packages.my_pkg.package import MyPackage
```
2. Normalized directory names for packages
3. New-style `spack.package` imports
See #50507, #50579, and #50594 for more.
## Compiler dependencies
Prior to `v1.0`, compilers in Spack were attributes on nodes in the spec graph, with a
name and a version (e.g., `gcc@12.0.0`). In `v1.0` compilers are packages like any other
package in Spack (see #45189). This means that they can have variants, targets, and
other attributes that regular nodes have.
Here, we list the major changes that users should be aware of for this new model.
### Compiler configuration
In Spack `v1.0`, `compilers.yaml` is deprecated. `compilers.yaml` is still read by
Spack, if present. We will continue to support this for at least a year, but we may
remove it after that. Users are encouraged to migrate their configuration to use
`packages.yaml` instead.
Old style `compilers.yaml` specification:
```yaml
compilers:
- compiler:
spec: gcc@12.3.1
paths:
c: /usr/bin/gcc
cxx: /usr/bin/g++
fc: /usr/bin/gfortran
modules: [...]
```
New style `packages.yaml` compiler specification:
```yaml
packages:
gcc:
externals:
- spec: gcc@12.3.1+binutils
prefix: /usr
extra_attributes:
compilers:
c: /usr/bin/gcc
cxx: /usr/bin/g++
fc: /usr/bin/gfortran
modules: [...]
```
See
[Configuring Compilers](https://spack.readthedocs.io/en/latest/configuring_compilers.html)
for more details.
### Languages are virtual dependencies
Packages that need a C, C++, or Fortran compiler now **must** depend on `c`, `cxx`, or
`fortran` as a build dependency, e.g.:
```python
class MyPackage(Package):
depends_on("c", type="build")
depends_on("cxx", type="build")
depends_on("fortran", type="build")
```
Historically, Spack assumed that *every* package was compiled with C, C++, and Fortran.
In Spack `v1.0`, we allow packages to simply not have a compiler if they do not need
one. For example, pure Python packages would not depend on any of these, and you should
not add these dependencies to packages that do not need them.
[Spack `v0.23`](https://github.com/spack/spack/releases/tag/v0.23.0) introduced language
virtual dependencies, and we have back-ported them to `0.21.3` and `v0.22.2`. In pre-1.0
Spack releases, these are a no-op. They are present so that language dependencies do not
cause an error. This allows you to more easily use older Spack versions together with
`v1.0`.
See #45217 for more details.
### The meaning of `%` has changed
In Spack `v0.x`, `%` specified a compiler with a name and an optional version. In Spack
`v1.0`, it simply means "direct dependency". It is similar to the caret `^`, which means
"direct *or* transitive dependency".
Unlike `^`, which specifies a dependency that needs to be unified for the whole graph,
`%` can specify direct dependencies of particular nodes. This means you can use it to
mix and match compilers, or `cmake` versions, or any other package for which *multiple*
versions of the same build dependency are needed in the same graph. For example, in this
spec:
```
foo ^hdf5 %cmake@3.1.2 ^zlib-ng %cmake@3.2.4
```
`hdf5` and `zlib-ng` are both transitive dependencies of `foo`, but `hdf5` will be built
with `cmake@3.1.2` and `zlib-ng` will be built with `%cmake@3.2.4`. This is similar to
mixing compilers, but you can now use `%` with other types of build dependencies, as
well. You can have multiple versions of packages in the same graph, as long as they are
purely build dependencies.
### Virtual assignment syntax
You can still specify compilers with `foo %gcc`, in which case `gcc` will be used to
satisfy any `c`, `cxx`, and `fortran` dependencies of `foo`, but you can also be
specific about the compiler that should be used for each language. To mix, e.g., `clang`
and `gfortran`, you can now use *virtual assignment* like so:
```console
spack install foo %c,cxx=gcc %fortran=gfortran
```
This says to use `gcc` for `c` and `cxx`, and `gfortran` for `fortran`.
It is functionally equivalent to the already supported edge attribute syntax:
```
spack install foo %[virtuals=c,cxx] gcc %[virtuals=fortran] gfortran
```
But, virtual assignment is more legible. We use it as the default formatting for virtual
edge attributes, and we print it in the output of `spack spec`, `spack find`, etc. For
example:
```console
> spack spec zlib
- zlib@1.3.1+optimize+pic+shared build_system=makefile arch=darwin-sequoia-m1 %c,cxx=apple-clang@16.0.0
[e] ^apple-clang@16.0.0 build_system=bundle arch=darwin-sequoia-m1
- ^compiler-wrapper@1.0 build_system=generic arch=darwin-sequoia-m1
[+] ^gmake@4.4.1~guile build_system=generic arch=darwin-sequoia-m1 %c=apple-clang@16.0.0
[+] ^compiler-wrapper@1.0 build_system=generic arch=darwin-sequoia-m1
```
You can see above that only `zlib` and `gmake` are compiled, and `gmake` uses only `c`.
The other nodes are either external, and we cannot detect the compiler (`apple-clang`)
or they are not compiled (`compiler-wrapper` is a shell script).
### Toolchains
Spack now has a concept of a "toolchain", which can be configured in `toolchains.yaml`.
A toolchain is an alias for common dependencies, flags, and other spec properties that
you can attach to a node in a graph with `%`.
Toolchains are versatile and composable as they are simply aliases for regular specs.
You can use them to represent mixed compiler combinations, compiler/MPI/numerical
library groups, particular runtime libraries, and flags -- all to be applied together.
This allows you to do with compiler dependencies what we used to do with
`compilers.yaml`, and more.
Example mixed clang/gfortran toolchain:
```yaml
toolchains:
clang_gfortran:
- spec: %c=clang
when: %c
- spec: %cxx=clang
when: %cxx
- spec: %fortran=gcc
when: %fortran
- spec: cflags="-O3 -g"
- spec: cxxflags="-O3 -g"
- spec: fflags="-O3 -g"
```
This enables you to write `spack install foo %clang_gfortran`, and Spack will resolve
the `%clang_gfortran` toolchain to include the dependencies and flags listed in
`toolchains.yaml`.
You could also couple the intel compilers with `mvapich2` like so:
```yaml
toolchains:
intel_mvapich2:
- spec: %c=intel-oneapi-compilers @2025.1.1
when: %c
- spec: %cxx=intel-oneapi-compilers @2025.1.1
when: %cxx
- spec: %fortran=intel-oneapi-compilers @2025.1.1
when: %fortran
- spec: %mpi=mvapich2 @2.3.7-1 +cuda
when: %mpi
```
The `when:` conditions here ensure that toolchain constraints are only applied when
needed. See the
[toolchains documentation](https://spack.readthedocs.io/en/latest/advanced_topics.html#defining-and-using-toolchains)
or #50481 for details.
### Ordering of variants and compilers now matters
In Spack `v0.x`, these two specs parse the same:
```
pkg %gcc +foo
pkg +foo %gcc
```
The `+foo` variant applies to `pkg` in either case. In Spack `v1.0`, there is a breaking
change, and `+foo` in `pkg %gcc +foo` now applies to `gcc`, since `gcc` is a normal
package. This ensures we have the following symmetry:
```
pkg +foo %dep +bar # `pkg +foo` depends on `dep +bar` directly
pkg +foo ^dep +bar # `pkg +foo` depends on `dep +bar` directly or transitively
```
In Spack `v1.0` you may get errors at concretization time if `+foo` is not a variant of
`gcc` in specs like`%pkg %gcc +foo`.
You can use the `spack style --spec-strings` command to update `package.py` files,
`spack.yaml` files:
```shell
# dry run
spack style --spec-strings $(git ls-files) # if you have a git repo
spack style --spec-strings spack.yaml # environments
```
```shell
# use --fix to perform the changes listed by the dry run
spack style --fix --spec-strings $(git ls-files)
spack style --fix --spec-strings spack.yaml
```
See #49808, #49438, #49439 for details.
## Additional Major Features
### Concurrent Package Builds
This release has completely reworked Spack's build scheduler, and it adds a `-p`/
`--concurrent-packages` argument to `spack install`, which can greatly accelerate builds
with many packages. You can use it in combination with `spack install -j`. For example,
this command:
```
spack install -p 4 -j 16
```
runs up to 4 package builds at once, each with up to 16 make jobs. The default for
`--concurrent-packages` is currently 1, so you must enable this feature yourself, either
on the command line or by setting `config:concurrent_packages` (#50856):
```yaml
config:
concurrent_packages: 1
```
As before, you can run `spack install` on multiple nodes in a cluster, if the filesystem
where Spack's `install_tree` is located supports locking.
We will make concurrent package builds the default in `1.1`, when we plan to include
support for `gmake`'s jobserver protocol and for line-synced output. Currently, setting
`-p` higher than 1 can make Spack's output difficult to read.
### Content-addressed build caches
Spack `v1.0` changes the format of build caches to address a number of scaling and
consistency issues with our old (aging) buildcache layout. The new buildcache format is
content-addressed and enables us to make many operations atomic (and therefore safer).
It is also more extensible than the old buildcache format and can enable features like
split debug info and different signing methods in the future. See #48713 for more
details.
Spack `v1.0` can still read, but not write to, the old build caches. The new build cache
format is *not* backward compatible with the old format, *but* you can have a new build
cache and an old build cache coexist beside each other. If you push to an old build
cache, new binaries will start to show up in the new format.
You can migrate an old buildcache to the new format using the `spack buildcache migrate`
command. It is nondestructive and can migrate an old build cache to a new one in-place.
That is, it creates the new buildcache within the same directory, alongside the old
buildcache.
As with other major changes, the old buildcache format is deprecated in `v1.0`, but will
not be removed for at least a year.
### Better provenance and mirroring for git
Spack now resolves and preserves the commit of any git-based version at concretization
time, storing the precise commit built on the Spec in a reserved `commit` variant. This
allows us to better reproduce git builds. See #48702 for details.
Historically, Spack has only stored the ref name, e.g. the branch or tag, for git
versions that did not already contain full commits. Now we can know exactly what was
built regardless of how it was fetched.
As a consequence of this change, mirroring git repositories is also more robust. See
#50604, #50906 for details.
### Environment variables in environments
You can now specify environment variables in your environment that should be set on
activation (and unset on deactivation):
```yaml
spack:
specs:
- cmake%gcc
env_vars:
set:
MY_FAVORITE_VARIABLE: "TRUE"
```
The syntax allows the same modifications that are allowed for modules: `set:`, `unset:`,
`prepend_path:`, `append_path:`, etc.
See [the docs](https://spack.readthedocs.io/en/latest/env_vars_yaml.html or #47587 for more.
### Better include functionality
Spack allows you to include local or remote configuration files through `include.yaml`,
and includes can be optional (i.e. include them only if they exist) or conditional (only
include them under certain conditions:
```yaml
spack:
include:
- /path/to/a/required/config.yaml
- path: /path/to/$os/$target/config
optional: true
- path: /path/to/os-specific/config-dir
when: os == "ventura"
```
You can use this in an environment, or in an `include.yaml` in an existing configuration
scope. Included configuration files are required *unless* they are explicitly optional
or the entry's condition evaluates to `false`. Optional includes are specified with the
`optional` clause and conditional ones with the ``when`` clause.
Conditionals use the same syntax as
[spec list references](https://spack.readthedocs.io/en/latest/environments.html#spec-list-references)
The [docs on `include.yaml`](https://spack.readthedocs.io/en/latest/include_yaml.html)
have more information. You can also look at #48784.
## New commands and options
* `spack repo update` will pull the latest packages (#50868, #50997)
* `spack style --spec-strings` fixes old configuration file and packages (#49485)
* `spack repo migrate`: migrates old repositories to the new layout (#50507)
* `spack ci` no longer has a `--keep-stage` flag (#49467)
* The new `spack config scopes` subcommand will list active configuration scopes (#41455, #50703)
* `spack cd --repo <namespace>` (#50845)
* `spack location --repo <namespace>` (#50845)
* `--force` is now a common argument for all commands that do concretization (#48838)
## Notable refactors
* All of Spack is now in one top-level `spack` Python package
* The `spack_installable` package is gone as it's no longer needed (#50996)
* The top-level `llnl` package has been moved to `spack.llnl` and will likely be
refactored more later (#50989)
* Vendored dependencies that were previously in `_vendoring` are now in `spack.vendor` (#51005)
* Increased determinism when generating inputs for the ASP solver, leading to more
consistent concretization results (#49471)
* Added fast, stable spec comparison, which also increases determinism of concretizer
inputs, and more consistent results (#50625)
* Test deps are now part of the DAG hash, so builds with tests enabled will (correctly)
have different hashes from builds without tests enabled (#48936)
* `spack spec` in an environment or on the command line will show unified output with
the specs provided as roots (#47574)
* users can now set a timeout in `concretizer.yaml` in case they frequently hit long
solves (#47661)
* GoPackage: respect `-j`` concurrency (#48421)
* We are using static analysis to speed up concretization (#48729)
## Documentation
We have overhauled a number of sections of the documentation.
* The basics section of the documentation has been reorganized and updated (#50932)
* The [packaging guide](https://spack.readthedocs.io/en/latest/packaging_guide_creation.html)
has been rewritten and broken into four separate, logically ordered sections (#50884).
* As mentioned above the entire
[`spack.package` API](https://spack.readthedocs.io/en/latest/package_api.html) has
been documented and consolidated to one package (#51010)
## Notable Bugfixes
* A race that would cause timeouts in certain parallel builds has been fixed. Every
build now stages its own patches and cannot fight over them (causing a timeout) with
other builds (#50697)
* The `command_line` scope is now *always* the top level. Previously environments could
override command line settings (#48255)
* `setup-env.csh` is now hardened to avoid conflicts with user aliases (#49670)
## Additional deprecations, removals, and breaking changes
1. `spec["pkg"]` searches only direct dependencies and transitive link/run dependencies,
ordered by depth. This avoids situations where we pick up unwanted deps of build/test
deps. To reach those, you need to do `spec["build_dep"]["pkg"]` explicitly (#49016).
2. `spec["mpi"]` no longer works to refer to `spec` itself on specs like `openmpi` and
`mpich` that could provide `mpi`. We only find `"mpi"` if it is provided by some
dependency (see #48984).
3. We have removed some long-standing internal API methods on `spack.spec.Spec` so that
we can decouple internal modules in the Spack code. `spack.spec` was including too
many different parts of Spack.
* `Spec.concretize()` and `Spec.concretized()` have been removed. Use
`spack.concretize.concretize_one(spec)` instead (#47971, #47978)
* `Spec.is_virtual`` is now spack.repo.PATH.is_virtual (#48986)
* `Spec.virtual_dependencies` has been removed (#49079)
4. #50603: Platform config scopes are now opt-in. If you want to use subdirectories like
`darwin` or `linux` in your scopes, you'll need to include them explicitly in an
`include.yaml` or in your `spack.yaml` file, like so:
```yaml
include:
- include: "${platform}"
optional: true
```
5. #48488, #48502: buildcache entries created with Spack 0.19 and older using `spack
buildcache create --rel` will no longer be relocated upon install. These old binaries
should continue to work, except when they are installed with different
`config:install_tree:projections` compared to what they were built with. Similarly,
buildcache entries created with Spack 0.15 and older that contain long shebang lines
wrapped with sbang will no longer be relocated.
6. #50462: the `package.py` globals `std_cmake_args`, `std_pip_args`, `std_meson_args`
were removed. They were deprecated in Spack 0.23. Use `CMakeBuilder.std_args(pkg)`,
`PythonPipBuilder.std_args(pkg)` and `MesonBuilder.std_args(pkg)` instead.
7. #50605, #50616: If you were using `update_external_dependencies()` in your private
packages, note that it is going away in 1.0 to get it out of the package API. It is
instead being moved into the concretizer, where it can change in the future, when we
have a better way to deal with dependencies of externals, without breaking the
package API. We suspect that nobody was doing this, but it's technically a breaking
change.
8. #48838: Two breaking command changes:
* `spack install` no longer has a `-f` / `--file` option --
write `spack install ./path/to/spec.json` instead.
* `spack mirror create` no longer has a short `-f` option --
use `spack mirror create --file` instead.
9. We no longer support the PGI compilers. They have been replaced by `nvhpc` (#47195)
10. Python 3.8 is deprecated in the Python package, as it is EOL (#46913)
11. The `target=fe` / `target=frontend` and `target=be` / `target=backend` targets from
Spack's orignal compilation model for cross-compiled Cray and BlueGene systems are
now deprecated (#47756)
## Spack community stats
* 2,276 commits updated package recipes
* 8,499 total packages, 214 new since v0.23.0
* 372 people contributed to this release
* 363 committers to packages
* 63 committers to core
# v0.23.1 (2025-02-19)
## Bugfixes
- Fix a correctness issue of `ArchSpec.intersects` (#48741)
- Make `extra_attributes` order independent in Spec hashing (#48615, #48854)
- Fix issue where system proxy settings were not respected in OCI build caches (#48783)
- Fix an issue where the `--test` concretizer flag was not forwarded correctly (#48417)
- Fix an issue where `codesign` and `install_name_tool` would not preserve hardlinks on
Darwin (#47808)
- Fix an issue on Darwin where codesign would run on unmodified binaries (#48568)
- Patch configure scripts generated with libtool < 2.5.4, to avoid redundant flags when
creating shared libraries on Darwin (#48671)
- Fix issue related to mirror URL paths on Windows (#47898)
- Esnure proper UTF-8 encoding/decoding in logging (#48005)
- Fix issues related to `filter_file` (#48038, #48108)
- Fix issue related to creating bootstrap source mirrors (#48235)
- Fix issue where command line config arguments were not always top level (#48255)
- Fix an incorrect typehint of `concretized()` (#48504)
- Improve mention of next Spack version in warning (#47887)
- Tests: fix forward compatibility with Python 3.13 (#48209)
- Docs: encourage use of `--oci-username-variable` and `--oci-password-variable` (#48189)
- Docs: ensure Getting Started has bootstrap list output in correct place (#48281)
- CI: allow GitHub actions to run on forks of Spack with different project name (#48041)
- CI: make unit tests work on Ubuntu 24.04 (#48151)
- CI: re-enable cray pipelines (#47697)
## Package updates
- `qt-base`: fix rpath for dependents (#47424)
- `gdk-pixbuf`: fix outdated URL (#47825)
# v0.23.0 (2024-11-13)
`v0.23.0` is a major feature release.
We are planning to make this the last major release before Spack `v1.0`
in June 2025. Alongside `v0.23`, we will be making pre-releases (alpha,
beta, etc.) of `v1.0`, and we encourage users to try them and send us
feedback, either on GitHub or on Slack. You can track the road to
`v1.0` here:
* https://github.com/spack/spack/releases
* https://github.com/spack/spack/discussions/30634
## Features in this Release
1. **Language virtuals**
Your packages can now explicitly depend on the languages they require.
Historically, Spack has considered C, C++, and Fortran compiler
dependencies to be implicit. In `v0.23`, you should ensure that
new packages add relevant C, C++, and Fortran dependencies like this:
```python
depends_on("c", type="build")
depends_on("cxx", type="build")
depends_on("fortran", type="build")
```
We encourage you to add these annotations to your packages now, to prepare
for Spack `v1.0.0`. In `v1.0.0`, these annotations will be necessary for
your package to use C, C++, and Fortran compilers. Note that you should
*not* add language dependencies to packages that don't need them, e.g.,
pure python packages.
We have already auto-generated these dependencies for packages in the
`builtin` repository (see #45217), based on the types of source files
present in each package's source code. We *may* have added too many or too
few language dependencies, so please submit pull requests to correct
packages if you find that the language dependencies are incorrect.
Note that we have also backported support for these dependencies to
`v0.21.3` and `v0.22.2`, to make all of them forward-compatible with
`v0.23`. This should allow you to move easily between older and newer Spack
releases without breaking your packages.
2. **Spec splicing**
We are working to make binary installation more seamless in Spack. `v0.23`
introduces "splicing", which allows users to deploy binaries using local,
optimized versions of a binary interface, even if they were not built with
that interface. For example, this would allow you to build binaries in the
cloud using `mpich` and install them on a system using a local, optimized
version of `mvapich2` *without rebuilding*. Spack preserves full provenance
for the installed packages and knows that they were built one way but
deployed another.
Our intent is to leverage this across many key HPC binary packages,
e.g. MPI, CUDA, ROCm, and libfabric.
Fundamentally, splicing allows Spack to redeploy an existing spec with
different dependencies than how it was built. There are two interfaces to
splicing.
a. Explicit Splicing
#39136 introduced the explicit splicing interface. In the
concretizer config, you can specify a target spec and a replacement
by hash.
```yaml
concretizer:
splice:
explicit:
- target: mpi
replacement: mpich/abcdef
```
Here, every installation that would normally use the target spec will
instead use its replacement. Above, any spec using *any* `mpi` will be
spliced to depend on the specific `mpich` installation requested. This
*can* go wrong if you try to replace something built with, e.g.,
`openmpi` with `mpich`, and it is on the user to ensure ABI
compatibility between target and replacement specs. This currently
requires some expertise to use, but it will allow users to reuse the
binaries they create across more machines and environments.
b. Automatic Splicing (experimental)
#46729 introduced automatic splicing. In the concretizer config, enable
automatic splicing:
```yaml
concretizer:
splice:
automatic: true
```
or run:
```console
spack config add concretizer:splice:automatic:true
```
The concretizer will select splices for ABI compatibility to maximize
package reuse. Packages can denote ABI compatibility using the
`can_splice` directive. No packages in Spack yet use this directive, so
if you want to use this feature you will need to add `can_splice`
annotations to your packages. We are working on ways to add more ABI
compatibility information to the Spack package repository, and this
directive may change in the future.
See the documentation for more details:
* https://spack.readthedocs.io/en/latest/build_settings.html#splicing
* https://spack.readthedocs.io/en/latest/packaging_guide.html#specifying-abi-compatibility
3. Broader variant propagation
Since #42931, you can specify propagated variants like `hdf5
build_type==RelWithDebInfo` or `trilinos ++openmp` to propagate a variant
to all dependencies for which it is relevant. This is valid *even* if the
variant does not exist on the package or its dependencies.
See https://spack.readthedocs.io/en/latest/basic_usage.html#variants.
4. Query specs by namespace
#45416 allows a package's namespace (indicating the repository it came from)
to be treated like a variant. You can request packages from particular repos
like this:
```console
spack find zlib namespace=builtin
spack find zlib namespace=myrepo
```
Previously, the spec syntax only allowed namespaces to be prefixes of spec
names, e.g. `builtin.zlib`. The previous syntax still works.
5. `spack spec` respects environment settings and `unify:true`
`spack spec` did not previously respect environment lockfiles or
unification settings, which made it difficult to see exactly how a spec
would concretize within an environment. Now it does, so the output you get
with `spack spec` will be *the same* as what your environment will
concretize to when you run `spack concretize`. Similarly, if you provide
multiple specs on the command line with `spack spec`, it will concretize
them together if `unify:true` is set.
See #47556 and #44843.
6. Less noisy `spack spec` output
`spack spec` previously showed output like this:
```console
> spack spec /v5fn6xo
Input spec
--------------------------------
- /v5fn6xo
Concretized
--------------------------------
[+] openssl@3.3.1%apple-clang@16.0.0~docs+shared arch=darwin-sequoia-m1
...
```
But the input spec is redundant, and we know we run `spack spec` to concretize
the input spec. `spack spec` now *only* shows the concretized spec. See #47574.
7. Better output for `spack find -c`
In an environmnet, `spack find -c` lets you search the concretized, but not
yet installed, specs, just as you would the installed ones. As with `spack
spec`, this should make it easier for you to see what *will* be built
before building and installing it. See #44713.
8. `spack -C <env>`: use an environment's configuration without activation
Spack environments allow you to associate:
1. a set of (possibly concretized) specs, and
2. configuration
When you activate an environment, you're using both of these. Previously, we
supported:
* `spack -e <env>` to run spack in the context of a specific environment, and
* `spack -C <directory>` to run spack using a directory with configuration files.
You can now also pass an environment to `spack -C` to use *only* the environment's
configuration, but not the specs or lockfile. See #45046.
## New commands, options, and directives
* The new `spack env track` command (#41897) takes a non-managed Spack
environment and adds a symlink to Spack's `$environments_root` directory, so
that it will be included for reference counting for commands like `spack
uninstall` and `spack gc`. If you use free-standing directory environments,
this is useful for preventing Spack from removing things required by your
environments. You can undo this tracking with the `spack env untrack`
command.
* Add `-t` short option for `spack --backtrace` (#47227)
`spack -d / --debug` enables backtraces on error, but it can be very
verbose, and sometimes you just want the backtrace. `spack -t / --backtrace`
provides that option.
* `gc`: restrict to specific specs (#46790)
If you only want to garbage-collect specific packages, you can now provide
them on the command line. This gives users finer-grained control over what
is uninstalled.
* oci buildcaches now support `--only=package`. You can now push *just* a
package and not its dependencies to an OCI registry. This allows dependents
of non-redistributable specs to be stored in OCI registries without an
error. See #45775.
## Notable refactors
* Variants are now fully conditional
The `variants` dictionary on packages was previously keyed by variant name,
and allowed only one definition of any given variant. Spack is now smart
enough to understand that variants may have different values and defaults
for different versions. For example, `warpx` prior to `23.06` only supported
builds for one dimensionality, and newer `warpx` versions could be built
with support for many different dimensions:
```python
variant(
"dims",
default="3",
values=("1", "2", "3", "rz"),
multi=False,
description="Number of spatial dimensions",
when="@:23.05",
)
variant(
"dims",
default="1,2,rz,3",
values=("1", "2", "3", "rz"),
multi=True,
description="Number of spatial dimensions",
when="@23.06:",
)
```
Previously, the default for the old version of `warpx` was not respected and
had to be specified manually. Now, Spack will select the right variant
definition for each version at concretization time. This allows variants to
evolve more smoothly over time. See #44425 for details.
## Highlighted bugfixes
1. Externals no longer override the preferred provider (#45025).
External definitions could interfere with package preferences. Now, if
`openmpi` is the preferred `mpi`, and an external `mpich` is defined, a new
`openmpi` *will* be built if building it is possible. Previously we would
prefer `mpich` despite the preference.
2. Composable `cflags` (#41049).
This release fixes a longstanding bug that concretization would fail if
there were different `cflags` specified in `packages.yaml`,
`compilers.yaml`, or on `the` CLI. Flags and their ordering are now tracked
in the concretizer and flags from multiple sources will be merged.
3. Fix concretizer Unification for included environments (#45139).
## Deprecations, removals, and syntax changes
1. The old concretizer has been removed from Spack, along with the
`config:concretizer` config option. Spack will emit a warning if the option
is present in user configuration, since it now has no effect. Spack now
uses a simpler bootstrapping mechanism, where a JSON prototype is tweaked
slightly to get an initial concrete spec to download. See #45215.
2. Best-effort expansion of spec matrices has been removed. This feature did
not work with the "new" ASP-based concretizer, and did not work with
`unify: True` or `unify: when_possible`. Use the
[exclude key](https://spack.readthedocs.io/en/latest/environments.html#spec-matrices)
for the environment to exclude invalid components, or use multiple spec
matrices to combine the list of specs for which the constraint is valid and
the list of specs for which it is not. See #40792.
3. The old Cray `platform` (based on Cray PE modules) has been removed, and
`platform=cray` is no longer supported. Since `v0.19`, Spack has handled
Cray machines like Linux clusters with extra packages, and we have
encouraged using this option to support Cray. The new approach allows us to
correctly handle Cray machines with non-SLES operating systems, and it is
much more reliable than making assumptions about Cray modules. See the
`v0.19` release notes and #43796 for more details.
4. The `config:install_missing_compilers` config option has been deprecated,
and it is a no-op when set in `v0.23`. Our new compiler dependency model
will replace it with a much more reliable and robust mechanism in `v1.0`.
See #46237.
5. Config options that deprecated in `v0.21` have been removed in `v0.23`. You
can now only specify preferences for `compilers`, `targets`, and
`providers` globally via the `packages:all:` section. Similarly, you can
only specify `versions:` locally for a specific package. See #44061 and
#31261 for details.
6. Spack's old test interface has been removed (#45752), having been
deprecated in `v0.22.0` (#34236). All `builtin` packages have been updated
to use the new interface. See the [stand-alone test documentation](
https://spack.readthedocs.io/en/latest/packaging_guide.html#stand-alone-tests)
7. The `spack versions --safe-only` option, deprecated since `v0.21.0`, has
been removed. See #45765.
* The `--dependencies` and `--optimize` arguments to `spack ci` have been
deprecated. See #45005.
## Binary caches
1. Public binary caches now include an ML stack for Linux/aarch64 (#39666)We
now build an ML stack for Linux/aarch64 for all pull requests and on
develop. The ML stack includes both CPU-only and CUDA builds for Horovod,
Hugging Face, JAX, Keras, PyTorch,scikit-learn, TensorBoard, and
TensorFlow, and related packages. The CPU-only stack also includes XGBoost.
See https://cache.spack.io/tag/develop/?stack=ml-linux-aarch64-cuda.
2. There is also now an stack of developer tools for macOS (#46910), which is
analogous to the Linux devtools stack. You can use this to avoid building
many common build dependencies. See
https://cache.spack.io/tag/develop/?stack=developer-tools-darwin.
## Architecture support
* archspec has been updated to `v0.2.5`, with support for `zen5`
* Spack's CUDA package now supports the Grace Hopper `9.0a` compute capability (#45540)
## Windows
* Windows bootstrapping: `file` and `gpg` (#41810)
* `scripts` directory added to PATH on Windows for python extensions (#45427)
* Fix `spack load --list` and `spack unload` on Windows (#35720)
## Other notable changes
* Bugfix: `spack find -x` in environments (#46798)
* Spec splices are now robust to duplicate nodes with the same name in a spec (#46382)
* Cache per-compiler libc calculations for performance (#47213)
* Fixed a bug in external detection for openmpi (#47541)
* Mirror configuration allows username/password as environment variables (#46549)
* Default library search caps maximum depth (#41945)
* Unify interface for `spack spec` and `spack solve` commands (#47182)
* Spack no longer RPATHs directories in the default library search path (#44686)
* Improved performance of Spack database (#46554)
* Enable package reuse for packages with versions from git refs (#43859)
* Improved handling for `uuid` virtual on macos (#43002)
* Improved tracking of task queueing/requeueing in the installer (#46293)
## Spack community stats
* Over 2,000 pull requests updated package recipes
* 8,307 total packages, 329 new since `v0.22.0`
* 140 new Python packages
* 14 new R packages
* 373 people contributed to this release
* 357 committers to packages
* 60 committers to core
# v0.22.2 (2024-09-21)
## Bugfixes
- Forward compatibility with Spack 0.23 packages with language dependencies (#45205, #45191)
- Forward compatibility with `urllib` from Python 3.12.6+ (#46453, #46483)
- Bump vendored `archspec` for better aarch64 support (#45721, #46445)
- Support macOS Sequoia (#45018, #45127)
- Fix regression in `{variants.X}` and `{variants.X.value}` format strings (#46206)
- Ensure shell escaping of environment variable values in load and activate commands (#42780)
- Fix an issue where `spec[pkg]` considers specs outside the current DAG (#45090)
- Do not halt concretization on unknown variants in externals (#45326)
- Improve validation of `develop` config section (#46485)
- Explicitly disable `ccache` if turned off in config, to avoid cache pollution (#45275)
- Improve backwards compatibility in `include_concrete` (#45766)
- Fix issue where package tags were sometimes repeated (#45160)
- Make `setup-env.sh` "sourced only" by dropping execution bits (#45641)
- Make certain source/binary fetch errors recoverable instead of a hard error (#45683)
- Remove debug statements in package hash computation (#45235)
- Remove redundant clingo warnings (#45269)
- Remove hard-coded layout version (#45645)
- Do not initialize previous store state in `use_store` (#45268)
- Docs improvements (#46475)
## Package updates
- `chapel` major update (#42197, #44931, #45304)
# v0.22.1 (2024-07-04)
## Bugfixes
- Fix reuse of externals on Linux (#44316)
- Ensure parent gcc-runtime version >= child (#44834, #44870)
- Ensure the latest gcc-runtime is rpath'ed when multiple exist among link deps (#44219)
- Improve version detection of glibc (#44154)
- Improve heuristics for solver (#44893, #44976, #45023)
- Make strong preferences override reuse (#44373)
- Reduce verbosity when C compiler is missing (#44182)
- Make missing ccache executable an error when required (#44740)
- Make every environment view containing `python` a `venv` (#44382)
- Fix external detection for compilers with os but no target (#44156)
- Fix version optimization for roots (#44272)
- Handle common implementations of pagination of tags in OCI build caches (#43136)
- Apply fetched patches to develop specs (#44950)
- Avoid Windows wrappers for filesystem utilities on non-Windows (#44126)
- Fix issue with long filenames in build caches on Windows (#43851)
- Fix formatting issue in `spack audit` (#45045)
- CI fixes (#44582, #43965, #43967, #44279, #44213)
## Package updates
- protobuf: fix 3.4:3.21 patch checksum (#44443)
- protobuf: update hash for patch needed when="@3.4:3.21" (#44210)
- git: bump v2.39 to 2.45; deprecate unsafe versions (#44248)
- gcc: use -rpath {rpath_dir} not -rpath={rpath dir} (#44315)
- Remove mesa18 and libosmesa (#44264)
- Enforce consistency of `gl` providers (#44307)
- Require libiconv for iconv (#44335, #45026).
Notice that glibc/musl also provide iconv, but are not guaranteed to be
complete. Set `packages:iconv:require:[glibc]` to restore the old behavior.
- py-matplotlib: qualify when to do a post install (#44191)
- rust: fix v1.78.0 instructions (#44127)
- suite-sparse: improve setting of the `libs` property (#44214)
- netlib-lapack: provide blas and lapack together (#44981)
# v0.22.0 (2024-05-12)
`v0.22.0` is a major feature release.
## Features in this release
1. **Compiler dependencies**
We are in the process of making compilers proper dependencies in Spack, and a number
of changes in `v0.22` support that effort. You may notice nodes in your dependency
graphs for compiler runtime libraries like `gcc-runtime` or `libgfortran`, and you
may notice that Spack graphs now include `libc`. We've also begun moving compiler
configuration from `compilers.yaml` to `packages.yaml` to make it consistent with
other externals. We are trying to do this with the least disruption possible, so
your existing `compilers.yaml` files should still work. We expect to be done with
this transition by the `v0.23` release in November.
* #41104: Packages compiled with `%gcc` on Linux, macOS and FreeBSD now depend on a
new package `gcc-runtime`, which contains a copy of the shared compiler runtime
libraries. This enables gcc runtime libraries to be installed and relocated when
using a build cache. When building minimal Spack-generated container images it is
no longer necessary to install libgfortran, libgomp etc. using the system package
manager.
* #42062: Packages compiled with `%oneapi` now depend on a new package
`intel-oneapi-runtime`. This is similar to `gcc-runtime`, and the runtimes can
provide virtuals and compilers can inject dependencies on virtuals into compiled
packages. This allows us to model library soname compatibility and allows
compilers like `%oneapi` to provide virtuals like `sycl` (which can also be
provided by standalone libraries). Note that until we have an agreement in place
with intel, Intel packages are marked `redistribute(source=False, binary=False)`
and must be downloaded outside of Spack.
* #43272: changes to the optimization criteria of the solver improve the hit-rate of
buildcaches by a fair amount. The solver more relaxed compatibility rules and will
not try to strictly match compilers or targets of reused specs. Users can still
enforce the previous strict behavior with `require:` sections in `packages.yaml`.
Note that to enforce correct linking, Spack will *not* reuse old `%gcc` and
`%oneapi` specs that do not have the runtime libraries as a dependency.
* #43539: Spack will reuse specs built with compilers that are *not* explicitly
configured in `compilers.yaml`. Because we can now keep runtime libraries in build
cache, we do not require you to also have a local configured compiler to *use* the
runtime libraries. This improves reuse in buildcaches and avoids conflicts with OS
updates that happen underneath Spack.
* #43190: binary compatibility on `linux` is now based on the `libc` version,
instead of on the `os` tag. Spack builds now detect the host `libc` (`glibc` or
`musl`) and add it as an implicit external node in the dependency graph. Binaries
with a `libc` with the same name and a version less than or equal to that of the
detected `libc` can be reused. This is only on `linux`, not `macos` or `Windows`.
* #43464: each package that can provide a compiler is now detectable using `spack
external find`. External packages defining compiler paths are effectively used as
compilers, and `spack external find -t compiler` can be used as a substitute for
`spack compiler find`. More details on this transition are in
[the docs](https://spack.readthedocs.io/en/latest/getting_started.html#manual-compiler-configuration)
2. **Improved `spack find` UI for Environments**
If you're working in an environment, you likely care about:
* What are the roots
* Which ones are installed / not installed
* What's been added that still needs to be concretized
We've tweaked `spack find` in environments to show this information much more
clearly. Installation status is shown next to each root, so you can see what is
installed. Roots are also shown in bold in the list of installed packages. There is
also a new option for `spack find -r` / `--only-roots` that will only show env
roots, if you don't want to look at all the installed specs.
More details in #42334.
3. **Improved command-line string quoting**
We are making some breaking changes to how Spack parses specs on the CLI in order to
respect shell quoting instead of trying to fight it. If you (sadly) had to write
something like this on the command line:
```
spack install zlib cflags=\"-O2 -g\"
```
That will now result in an error, but you can now write what you probably expected
to work in the first place:
```
spack install zlib cflags="-O2 -g"
```
Quoted can also now include special characters, so you can supply flags like:
```
spack install zlib ldflags='-Wl,-rpath=$ORIGIN/_libs'
```
To reduce ambiguity in parsing, we now require that you *not* put spaces around `=`
and `==` when for flags or variants. This would not have broken before but will now
result in an error:
```
spack install zlib cflags = "-O2 -g"
```
More details and discussion in #30634.
4. **Revert default `spack install` behavior to `--reuse`**
We changed the default concretizer behavior from `--reuse` to `--reuse-deps` in
#30990 (in `v0.20`), which meant that *every* `spack install` invocation would
attempt to build a new version of the requested package / any environment roots.
While this is a common ask for *upgrading* and for *developer* workflows, we don't
think it should be the default for a package manager.
We are going to try to stick to this policy:
1. Prioritize reuse and build as little as possible by default.
2. Only upgrade or install duplicates if they are explicitly asked for, or if there
is a known security issue that necessitates an upgrade.
With the install command you now have three options:
* `--reuse` (default): reuse as many existing installations as possible.
* `--reuse-deps` / `--fresh-roots`: upgrade (freshen) roots but reuse dependencies if possible.
* `--fresh`: install fresh versions of requested packages (roots) and their dependencies.
We've also introduced `--fresh-roots` as an alias for `--reuse-deps` to make it more clear
that it may give you fresh versions. More details in #41302 and #43988.
5. **More control over reused specs**
You can now control which packages to reuse and how. There is a new
`concretizer:reuse` config option, which accepts the following properties:
- `roots`: `true` to reuse roots, `false` to reuse just dependencies
- `exclude`: list of constraints used to select which specs *not* to reuse
- `include`: list of constraints used to select which specs *to* reuse
- `from`: list of sources for reused specs (some combination of `local`,
`buildcache`, or `external`)
For example, to reuse only specs compiled with GCC, you could write:
```yaml
concretizer:
reuse:
roots: true
include:
- "%gcc"
```
Or, if `openmpi` must be used from externals, and it must be the only external used:
```yaml
concretizer:
reuse:
roots: true
from:
- type: local
exclude: ["openmpi"]
- type: buildcache
exclude: ["openmpi"]
- type: external
include: ["openmpi"]
```
6. **New `redistribute()` directive**
Some packages can't be redistributed in source or binary form. We need an explicit
way to say that in a package.
Now there is a `redistribute()` directive so that package authors can write:
```python
class MyPackage(Package):
redistribute(source=False, binary=False)
```
Like other directives, this works with `when=`:
```python
class MyPackage(Package):
# 12.0 and higher are proprietary
redistribute(source=False, binary=False, when="@12.0:")
# can't redistribute when we depend on some proprietary dependency
redistribute(source=False, binary=False, when="^proprietary-dependency")
```
More in #20185.
7. **New `conflict:` and `prefer:` syntax for package preferences**
Previously, you could express conflicts and preferences in `packages.yaml` through
some contortions with `require:`:
```yaml
packages:
zlib-ng:
require:
- one_of: ["%clang", "@:"] # conflict on %clang
- any_of: ["+shared", "@:"] # strong preference for +shared
```
You can now use `require:` and `prefer:` for a much more readable configuration:
```yaml
packages:
zlib-ng:
conflict:
- "%clang"
prefer:
- "+shared"
```
See [the documentation](https://spack.readthedocs.io/en/latest/packages_yaml.html#conflicts-and-strong-preferences)
and #41832 for more details.
8. **`include_concrete` in environments**
You may want to build on the *concrete* contents of another environment without
changing that environment. You can now include the concrete specs from another
environment's `spack.lock` with `include_concrete`:
```yaml
spack:
specs: []
concretizer:
unify: true
include_concrete:
- /path/to/environment1
- /path/to/environment2
```
Now, when *this* environment is concretized, it will bring in the already concrete
specs from `environment1` and `environment2`, and build on top of them without
changing them. This is useful if you have phased deployments, where old deployments
should not be modified but you want to use as many of them as possible. More details
in #33768.
9. **`python-venv` isolation**
Spack has unique requirements for Python because it:
1. installs every package in its own independent directory, and
2. allows users to register *external* python installations.
External installations may contain their own installed packages that can interfere
with Spack installations, and some distributions (Debian and Ubuntu) even change the
`sysconfig` in ways that alter the installation layout of installed Python packages
(e.g., with the addition of a `/local` prefix on Debian or Ubuntu). To isolate Spack
from these and other issues, we now insert a small `python-venv` package in between
`python` and packages that need to install Python code. This isolates Spack's build
environment, isolates Spack from any issues with an external python, and resolves a
large number of issues we've had with Python installations.
See #40773 for further details.
## New commands, options, and directives
* Allow packages to be pushed to build cache after install from source (#42423)
* `spack develop`: stage build artifacts in same root as non-dev builds #41373
* Don't delete `spack develop` build artifacts after install (#43424)
* `spack find`: add options for local/upstream only (#42999)
* `spack logs`: print log files for packages (either partially built or installed) (#42202)
* `patch`: support reversing patches (#43040)
* `develop`: Add -b/--build-directory option to set build_directory package attribute (#39606)
* `spack list`: add `--namespace` / `--repo` option (#41948)
* directives: add `checked_by` field to `license()`, add some license checks
* `spack gc`: add options for environments and build dependencies (#41731)
* Add `--create` to `spack env activate` (#40896)
## Performance improvements
* environment.py: fix excessive re-reads (#43746)
* ruamel yaml: fix quadratic complexity bug (#43745)
* Refactor to improve `spec format` speed (#43712)
* Do not acquire a write lock on the env post install if no views (#43505)
* asp.py: fewer calls to `spec.copy()` (#43715)
* spec.py: early return in `__str__`
* avoid `jinja2` import at startup unless needed (#43237)
## Other new features of note
* `archspec`: update to `v0.2.4`: support for Windows, bugfixes for `neoverse-v1` and
`neoverse-v2` detection.
* `spack config get`/`blame`: with no args, show entire config
* `spack env create <env>`: dir if dir-like (#44024)
* ASP-based solver: update os compatibility for macOS (#43862)
* Add handling of custom ssl certs in urllib ops (#42953)
* Add ability to rename environments (#43296)
* Add config option and compiler support to reuse across OS's (#42693)
* Support for prereleases (#43140)
* Only reuse externals when configured (#41707)
* Environments: Add support for including views (#42250)
## Binary caches
* Build cache: make signed/unsigned a mirror property (#41507)
* tools stack
## Removals, deprecations, and syntax changes
* remove `dpcpp` compiler and package (#43418)
* spack load: remove --only argument (#42120)
## Notable Bugfixes
* repo.py: drop deleted packages from provider cache (#43779)
* Allow `+` in module file names (#41999)
* `cmd/python`: use runpy to allow multiprocessing in scripts (#41789)
* Show extension commands with spack -h (#41726)
* Support environment variable expansion inside module projections (#42917)
* Alert user to failed concretizations (#42655)
* shell: fix zsh color formatting for PS1 in environments (#39497)
* spack mirror create --all: include patches (#41579)
## Spack community stats
* 7,994 total packages; 525 since `v0.21.0`
* 178 new Python packages, 5 new R packages
* 358 people contributed to this release
* 344 committers to packages
* 45 committers to core
# v0.21.3 (2024-10-02)
## Bugfixes
- Forward compatibility with Spack 0.23 packages with language dependencies (#45205, #45191)
- Forward compatibility with `urllib` from Python 3.12.6+ (#46453, #46483)
- Bump `archspec` to 0.2.5-dev for better aarch64 and Windows support (#42854, #44005,
#45721, #46445)
- Support macOS Sequoia (#45018, #45127, #43862)
- CI and test maintenance (#42909, #42728, #46711, #41943, #43363)
# v0.21.2 (2024-03-01)
## Bugfixes
- Containerize: accommodate nested or pre-existing spack-env paths (#41558)
- Fix setup-env script, when going back and forth between instances (#40924)
- Fix using fully-qualified namespaces from root specs (#41957)
- Fix a bug when a required provider is requested for multiple virtuals (#42088)
- OCI buildcaches:
- only push in parallel when forking (#42143)
- use pickleable errors (#42160)
- Fix using sticky variants in externals (#42253)
- Fix a rare issue with conditional requirements and multi-valued variants (#42566)
## Package updates
- rust: add v1.75, rework a few variants (#41161,#41903)
- py-transformers: add v4.35.2 (#41266)
- mgard: fix OpenMP on AppleClang (#42933)
# v0.21.1 (2024-01-11)
## New features
- Add support for reading buildcaches created by Spack v0.22 (#41773)
## Bugfixes
- spack graph: fix coloring with environments (#41240)
- spack info: sort variants in --variants-by-name (#41389)
- Spec.format: error on old style format strings (#41934)
- ASP-based solver:
- fix infinite recursion when computing concretization errors (#41061)
- don't error for type mismatch on preferences (#41138)
- don't emit spurious debug output (#41218)
- Improve the error message for deprecated preferences (#41075)
- Fix MSVC preview version breaking clingo build on Windows (#41185)
- Fix multi-word aliases (#41126)
- Add a warning for unconfigured compiler (#41213)
- environment: fix an issue with deconcretization/reconcretization of specs (#41294)
- buildcache: don't error if a patch is missing, when installing from binaries (#41986)
- Multiple improvements to unit-tests (#41215,#41369,#41495,#41359,#41361,#41345,#41342,#41308,#41226)
## Package updates
- root: add a webgui patch to address security issue (#41404)
- BerkeleyGW: update source urls (#38218)
# v0.21.0 (2023-11-11)
`v0.21.0` is a major feature release.
## Features in this release
1. **Better error messages with condition chaining**
In v0.18, we added better error messages that could tell you what problem happened,
but they couldn't tell you *why* it happened. `0.21` adds *condition chaining* to the
solver, and Spack can now trace back through the conditions that led to an error and
build a tree of causes potential causes and where they came from. For example:
```console
$ spack solve hdf5 ^cmake@3.0.1
==> Error: concretization failed for the following reasons:
1. Cannot satisfy 'cmake@3.0.1'
2. Cannot satisfy 'cmake@3.0.1'
required because hdf5 ^cmake@3.0.1 requested from CLI
3. Cannot satisfy 'cmake@3.18:' and 'cmake@3.0.1
required because hdf5 ^cmake@3.0.1 requested from CLI
required because hdf5 depends on cmake@3.18: when @1.13:
required because hdf5 ^cmake@3.0.1 requested from CLI
4. Cannot satisfy 'cmake@3.12:' and 'cmake@3.0.1
required because hdf5 depends on cmake@3.12:
required because hdf5 ^cmake@3.0.1 requested from CLI
required because hdf5 ^cmake@3.0.1 requested from CLI
```
More details in #40173.
2. **OCI build caches**
You can now use an arbitrary [OCI](https://opencontainers.org) registry as a build
cache:
```console
$ spack mirror add my_registry oci://user/image # Dockerhub
$ spack mirror add my_registry oci://ghcr.io/haampie/spack-test # GHCR
$ spack mirror set --push --oci-username ... --oci-password ... my_registry # set login creds
$ spack buildcache push my_registry [specs...]
```
And you can optionally add a base image to get *runnable* images:
```console
$ spack buildcache push --base-image ubuntu:23.04 my_registry python
Pushed ... as [image]:python-3.11.2-65txfcpqbmpawclvtasuog4yzmxwaoia.spack
$ docker run --rm -it [image]:python-3.11.2-65txfcpqbmpawclvtasuog4yzmxwaoia.spack
```
This creates a container image from the Spack installations on the host system,
without the need to run `spack install` from a `Dockerfile` or `sif` file. It also
addresses the inconvenience of losing binaries of dependencies when `RUN spack
install` fails inside `docker build`.
Further, the container image layers and build cache tarballs are the same files. This
means that `spack install` and `docker pull` use the exact same underlying binaries.
If you previously used `spack install` inside of `docker build`, this feature helps
you save storage by a factor two.
More details in #38358.
3. **Multiple versions of build dependencies**
Increasingly, complex package builds require multiple versions of some build
dependencies. For example, Python packages frequently require very specific versions
of `setuptools`, `cython`, and sometimes different physics packages require different
versions of Python to build. The concretizer enforced that every solve was *unified*,
i.e., that there only be one version of every package. The concretizer now supports
"duplicate" nodes for *build dependencies*, but enforces unification through
transitive link and run dependencies. This will allow it to better resolve complex
dependency graphs in ecosystems like Python, and it also gets us very close to
modeling compilers as proper dependencies.
This change required a major overhaul of the concretizer, as well as a number of
performance optimizations. See #38447, #39621.
4. **Cherry-picking virtual dependencies**
You can now select only a subset of virtual dependencies from a spec that may provide
more. For example, if you want `mpich` to be your `mpi` provider, you can be explicit
by writing:
```
hdf5 ^[virtuals=mpi] mpich
```
Or, if you want to use, e.g., `intel-parallel-studio` for `blas` along with an external
`lapack` like `openblas`, you could write:
```
strumpack ^[virtuals=mpi] intel-parallel-studio+mkl ^[virtuals=lapack] openblas
```
The `virtuals=mpi` is an edge attribute, and dependency edges in Spack graphs now
track which virtuals they satisfied. More details in #17229 and #35322.
Note for packaging: in Spack 0.21 `spec.satisfies("^virtual")` is true if and only if
the package specifies `depends_on("virtual")`. This is different from Spack 0.20,
where depending on a provider implied depending on the virtual provided. See #41002
for an example where `^mkl` was being used to test for several `mkl` providers in a
package that did not depend on `mkl`.
5. **License directive**
Spack packages can now have license metadata, with the new `license()` directive:
```python
license("Apache-2.0")
```
Licenses use [SPDX identifiers](https://spdx.org/licenses), and you can use SPDX
expressions to combine them:
```python
license("Apache-2.0 OR MIT")
```
Like other directives in Spack, it's conditional, so you can handle complex cases like
Spack itself:
```python
license("LGPL-2.1", when="@:0.11")
license("Apache-2.0 OR MIT", when="@0.12:")
```
More details in #39346, #40598.
6. **`spack deconcretize` command**
We are getting close to having a `spack update` command for environments, but we're
not quite there yet. This is the next best thing. `spack deconcretize` gives you
control over what you want to update in an already concrete environment. If you have
an environment built with, say, `meson`, and you want to update your `meson` version,
you can run:
```console
spack deconcretize meson
```
and have everything that depends on `meson` rebuilt the next time you run `spack
concretize`. In a future Spack version, we'll handle all of this in a single command,
but for now you can use this to drop bits of your lockfile and resolve your
dependencies again. More in #38803.
7. **UI Improvements**
The venerable `spack info` command was looking shabby compared to the rest of Spack's
UI, so we reworked it to have a bit more flair. `spack info` now makes much better
use of terminal space and shows variants, their values, and their descriptions much
more clearly. Conditional variants are grouped separately so you can more easily
understand how packages are structured. More in #40998.
`spack checksum` now allows you to filter versions from your editor, or by version
range. It also notifies you about potential download URL changes. See #40403.
8. **Environments can include definitions**
Spack did not previously support using `include:` with The
[definitions](https://spack.readthedocs.io/en/latest/environments.html#spec-list-references)
section of an environment, but now it does. You can use this to curate lists of specs
and more easily reuse them across environments. See #33960.
9. **Aliases**
You can now add aliases to Spack commands in `config.yaml`, e.g. this might enshrine
your favorite args to `spack find` as `spack f`:
```yaml
config:
aliases:
f: find -lv
```
See #17229.
10. **Improved autoloading of modules**
Spack 0.20 was the first release to enable autoloading of direct dependencies in
module files.
The downside of this was that `module avail` and `module load` tab completion would
show users too many modules to choose from, and many users disabled generating
modules for dependencies through `exclude_implicits: true`. Further, it was
necessary to keep hashes in module names to avoid file name clashes.
In this release, you can start using `hide_implicits: true` instead, which exposes
only explicitly installed packages to the user, while still autoloading
dependencies. On top of that, you can safely use `hash_length: 0`, as this config
now only applies to the modules exposed to the user -- you don't have to worry about
file name clashes for hidden dependencies.
Note: for `tcl` this feature requires Modules 4.7 or higher
11. **Updated container labeling**
Nightly Docker images from the `develop` branch will now be tagged as `:develop` and
`:nightly`. The `:latest` tag is no longer associated with `:develop`, but with the
latest stable release. Releases will be tagged with `:{major}`, `:{major}.{minor}`
and `:{major}.{minor}.{patch}`. `ubuntu:18.04` has also been removed from the list of
generated Docker images, as it is no longer supported. See #40593.
## Other new commands and directives
* `spack env activate` without arguments now loads a `default` environment that you do
not have to create (#40756).
* `spack find -H` / `--hashes`: a new shortcut for piping `spack find` output to
other commands (#38663)
* Add `spack checksum --verify`, fix `--add` (#38458)
* New `default_args` context manager factors out common args for directives (#39964)
* `spack compiler find --[no]-mixed-toolchain` lets you easily mix `clang` and
`gfortran` on Linux (#40902)
## Performance improvements
* `spack external find` execution is now much faster (#39843)
* `spack location -i` now much faster on success (#40898)
* Drop redundant rpaths post install (#38976)
* ASP-based solver: avoid cycles in clingo using hidden directive (#40720)
* Fix multiple quadratic complexity issues in environments (#38771)
## Other new features of note
* archspec: update to v0.2.2, support for Sapphire Rapids, Power10, Neoverse V2 (#40917)
* Propagate variants across nodes that don't have that variant (#38512)
* Implement fish completion (#29549)
* Can now distinguish between source/binary mirror; don't ping mirror.spack.io as much (#34523)
* Improve status reporting on install (add [n/total] display) (#37903)
## Windows
This release has the best Windows support of any Spack release yet, with numerous
improvements and much larger swaths of tests passing:
* MSVC and SDK improvements (#37711, #37930, #38500, #39823, #39180)
* Windows external finding: update default paths; treat .bat as executable on Windows (#39850)
* Windows decompression: fix removal of intermediate file (#38958)
* Windows: executable/path handling (#37762)
* Windows build systems: use ninja and enable tests (#33589)
* Windows testing (#36970, #36972, #36973, #36840, #36977, #36792, #36834, #34696, #36971)
* Windows PowerShell support (#39118, #37951)
* Windows symlinking and libraries (#39933, #38599, #34701, #38578, #34701)
## Notable refactors
* User-specified flags take precedence over others in Spack compiler wrappers (#37376)
* Improve setup of build, run, and test environments (#35737, #40916)
* `make` is no longer a required system dependency of Spack (#40380)
* Support Python 3.12 (#40404, #40155, #40153)
* docs: Replace package list with packages.spack.io (#40251)
* Drop Python 2 constructs in Spack (#38720, #38718, #38703)
## Binary cache and stack updates
* e4s arm stack: duplicate and target neoverse v1 (#40369)
* Add macOS ML CI stacks (#36586)
* E4S Cray CI Stack (#37837)
* e4s cray: expand spec list (#38947)
* e4s cray sles ci: expand spec list (#39081)
## Removals, deprecations, and syntax changes
* ASP: targets, compilers and providers soft-preferences are only global (#31261)
* Parser: fix ambiguity with whitespace in version ranges (#40344)
* Module file generation is disabled by default; you'll need to enable it to use it (#37258)
* Remove deprecated "extra_instructions" option for containers (#40365)
* Stand-alone test feature deprecation postponed to v0.22 (#40600)
* buildcache push: make `--allow-root` the default and deprecate the option (#38878)
## Notable Bugfixes
* Bugfix: propagation of multivalued variants (#39833)
* Allow `/` in git versions (#39398)
* Fetch & patch: actually acquire stage lock, and many more issues (#38903)
* Environment/depfile: better escaping of targets with Git versions (#37560)
* Prevent "spack external find" to error out on wrong permissions (#38755)
* lmod: allow core compiler to be specified with a version range (#37789)
## Spack community stats
* 7,469 total packages, 303 new since `v0.20.0`
* 150 new Python packages
* 34 new R packages
* 353 people contributed to this release
* 336 committers to packages
* 65 committers to core
# v0.20.3 (2023-10-31)
## Bugfixes
- Fix a bug where `spack mirror set-url` would drop configured connection info (reverts #34210)
- Fix a minor issue with package hash computation for Python 3.12 (#40328)
# v0.20.2 (2023-10-03)
## Features in this release
Spack now supports Python 3.12 (#40155)
## Bugfixes
- Improve escaping in Tcl module files (#38375)
- Make repo cache work on repositories with zero mtime (#39214)
- Ignore errors for newer, incompatible buildcache version (#40279)
- Print an error when git is required, but missing (#40254)
- Ensure missing build dependencies get installed when using `spack install --overwrite` (#40252)
- Fix an issue where Spack freezes when the build process unexpectedly exits (#39015)
- Fix a bug where installation failures cause an unrelated `NameError` to be thrown (#39017)
- Fix an issue where Spack package versions would be incorrectly derived from git tags (#39414)
- Fix a bug triggered when file locking fails internally (#39188)
- Prevent "spack external find" to error out when a directory cannot be accessed (#38755)
- Fix multiple performance regressions in environments (#38771)
- Add more ignored modules to `pyproject.toml` for `mypy` (#38769)
# v0.20.1 (2023-07-10)
## Spack Bugfixes
- Spec removed from an environment where not actually removed if `--force` was not given (#37877)
- Speed-up module file generation (#37739)
- Hotfix for a few recipes that treat CMake as a link dependency (#35816)
- Fix re-running stand-alone test a second time, which was getting a trailing spurious failure (#37840)
- Fixed reading JSON manifest on Cray, reporting non-concrete specs (#37909)
- Fixed a few bugs when generating Dockerfiles from Spack (#37766,#37769)
- Fixed a few long-standing bugs when generating module files (#36678,#38347,#38465,#38455)
- Fixed issues with building Python extensions using an external Python (#38186)
- Fixed compiler removal from command line (#38057)
- Show external status as [e] (#33792)
- Backported `archspec` fixes (#37793)
- Improved a few error messages (#37791)
# v0.20.0 (2023-05-21)
`v0.20.0` is a major feature release.
## Features in this release
1. **`requires()` directive and enhanced package requirements**
We've added some more enhancements to requirements in Spack (#36286).
There is a new `requires()` directive for packages. `requires()` is the opposite of
`conflicts()`. You can use it to impose constraints on this package when certain
conditions are met:
```python
requires(
"%apple-clang",
when="platform=darwin",
msg="This package builds only with clang on macOS"
)
```
More on this in [the docs](
https://spack.rtfd.io/en/latest/packaging_guide.html#conflicts-and-requirements).
You can also now add a `when:` clause to `requires:` in your `packages.yaml`
configuration or in an environment:
```yaml
packages:
openmpi:
require:
- any_of: ["%gcc"]
when: "@:4.1.4"
message: "Only OpenMPI 4.1.5 and up can build with fancy compilers"
```
More details can be found [here](
https://spack.readthedocs.io/en/latest/build_settings.html#package-requirements)
2. **Exact versions**
Spack did not previously have a way to distinguish a version if it was a prefix of
some other version. For example, `@3.2` would match `3.2`, `3.2.1`, `3.2.2`, etc. You
can now match *exactly* `3.2` with `@=3.2`. This is useful, for example, if you need
to patch *only* the `3.2` version of a package. The new syntax is described in [the docs](
https://spack.readthedocs.io/en/latest/basic_usage.html#version-specifier).
Generally, when writing packages, you should prefer to use ranges like `@3.2` over
the specific versions, as this allows the concretizer more leeway when selecting
versions of dependencies. More details and recommendations are in the [packaging guide](
https://spack.readthedocs.io/en/latest/packaging_guide.html#ranges-versus-specific-versions).
See #36273 for full details on the version refactor.
3. **New testing interface**
Writing package tests is now much simpler with a new [test interface](
https://spack.readthedocs.io/en/latest/packaging_guide.html#stand-alone-tests).
Writing a test is now as easy as adding a method that starts with `test_`:
```python
class MyPackage(Package):
...
def test_always_fails(self):
"""use assert to always fail"""
assert False
def test_example(self):
"""run installed example"""
example = which(self.prefix.bin.example)
example()
```
You can use Python's native `assert` statement to implement your checks -- no more
need to fiddle with `run_test` or other test framework methods. Spack will
introspect the class and run `test_*` methods when you run `spack test`,
4. **More stable concretization**
* Now, `spack concretize` will *only* concretize the new portions of the environment
and will not change existing parts of an environment unless you specify `--force`.
This has always been true for `unify:false`, but not for `unify:true` and
`unify:when_possible` environments. Now it is true for all of them (#37438, #37681).
* The concretizer has a new `--reuse-deps` argument that *only* reuses dependencies.
That is, it will always treat the *roots* of your environment as it would with
`--fresh`. This allows you to upgrade just the roots of your environment while
keeping everything else stable (#30990).
5. **Weekly develop snapshot releases**
Since last year, we have maintained a buildcache of `develop` at
https://binaries.spack.io/develop, but the cache can grow to contain so many builds
as to be unwieldy. When we get a stable `develop` build, we snapshot the release and
add a corresponding tag the Spack repository. So, you can use a stack from a specific
day. There are now tags in the spack repository like:
* `develop-2023-05-14`
* `develop-2023-05-18`
that correspond to build caches like:
* https://binaries.spack.io/develop-2023-05-14/e4s
* https://binaries.spack.io/develop-2023-05-18/e4s
We plan to store these snapshot releases weekly.
6. **Specs in buildcaches can be referenced by hash.**
* Previously, you could run `spack buildcache list` and see the hashes in
buildcaches, but referring to them by hash would fail.
* You can now run commands like `spack spec` and `spack install` and refer to
buildcache hashes directly, e.g. `spack install /abc123` (#35042)
7. **New package and buildcache index websites**
Our public websites for searching packages have been completely revamped and updated.
You can check them out here:
* *Package Index*: https://packages.spack.io
* *Buildcache Index*: https://cache.spack.io
Both are searchable and more interactive than before. Currently major releases are
shown; UI for browsing `develop` snapshots is coming soon.
8. **Default CMake and Meson build types are now Release**
Spack has historically defaulted to building with optimization and debugging, but
packages like `llvm` can be enormous with debug turned on. Our default build type for
all Spack packages is now `Release` (#36679, #37436). This has a number of benefits:
* much smaller binaries;
* higher default optimization level; and
* defining `NDEBUG` disables assertions, which may lead to further speedups.
You can still get the old behavior back through requirements and package preferences.
## Other new commands and directives
* `spack checksum` can automatically add new versions to package (#24532)
* new command: `spack pkg grep` to easily search package files (#34388)
* New `maintainers` directive (#35083)
* Add `spack buildcache push` (alias to `buildcache create`) (#34861)
* Allow using `-j` to control the parallelism of concretization (#37608)
* Add `--exclude` option to 'spack external find' (#35013)
## Other new features of note
* editing: add higher-precedence `SPACK_EDITOR` environment variable
* Many YAML formatting improvements from updating `ruamel.yaml` to the latest version
supporting Python 3.6. (#31091, #24885, #37008).
* Requirements and preferences should not define (non-git) versions (#37687, #37747)
* Environments now store spack version/commit in `spack.lock` (#32801)
* User can specify the name of the `packages` subdirectory in repositories (#36643)
* Add container images supporting RHEL alternatives (#36713)
* make version(...) kwargs explicit (#36998)
## Notable refactors
* buildcache create: reproducible tarballs (#35623)
* Bootstrap most of Spack dependencies using environments (#34029)
* Split `satisfies(..., strict=True/False)` into two functions (#35681)
* spack install: simplify behavior when inside environments (#35206)
## Binary cache and stack updates
* Major simplification of CI boilerplate in stacks (#34272, #36045)
* Many improvements to our CI pipeline's reliability
## Removals, Deprecations, and disablements
* Module file generation is disabled by default; you'll need to enable it to use it (#37258)
* Support for Python 2 was deprecated in `v0.19.0` and has been removed. `v0.20.0` only
supports Python 3.6 and higher.
* Deprecated target names are no longer recognized by Spack. Use generic names instead:
* `graviton` is now `cortex_a72`
* `graviton2` is now `neoverse_n1`
* `graviton3` is now `neoverse_v1`
* `blacklist` and `whitelist` in module configuration were deprecated in `v0.19.0` and are
removed in this release. Use `exclude` and `include` instead.
* The `ignore=` parameter of the `extends()` directive has been removed. It was not used by
any builtin packages and is no longer needed to avoid conflicts in environment views (#35588).
* Support for the old YAML buildcache format has been removed. It was deprecated in `v0.19.0` (#34347).
* `spack find --bootstrap` has been removed. It was deprecated in `v0.19.0`. Use `spack
--bootstrap find` instead (#33964).
* `spack bootstrap trust` and `spack bootstrap untrust` are now removed, having been
deprecated in `v0.19.0`. Use `spack bootstrap enable` and `spack bootstrap disable`.
* The `--mirror-name`, `--mirror-url`, and `--directory` options to buildcache and
mirror commands were deprecated in `v0.19.0` and have now been removed. They have been
replaced by positional arguments (#37457).
* Deprecate `env:` as top level environment key (#37424)
* deprecate buildcache create --rel, buildcache install --allow-root (#37285)
* Support for very old perl-like spec format strings (e.g., `$_$@$%@+$+$=`) has been
removed (#37425). This was deprecated in in `v0.15` (#10556).
## Notable Bugfixes
* bugfix: don't fetch package metadata for unknown concrete specs (#36990)
* Improve package source code context display on error (#37655)
* Relax environment manifest filename requirements and lockfile identification criteria (#37413)
* `installer.py`: drop build edges of installed packages by default (#36707)
* Bugfix: package requirements with git commits (#35057, #36347)
* Package requirements: allow single specs in requirement lists (#36258)
* conditional variant values: allow boolean (#33939)
* spack uninstall: follow run/link edges on --dependents (#34058)
## Spack community stats
* 7,179 total packages, 499 new since `v0.19.0`
* 329 new Python packages
* 31 new R packages
* 336 people contributed to this release
* 317 committers to packages
* 62 committers to core
# v0.19.1 (2023-02-07)
### Spack Bugfixes
* `buildcache create`: make "file exists" less verbose (#35019)
* `spack mirror create`: don't change paths to urls (#34992)
* Improve error message for requirements (#33988)
* uninstall: fix accidental cubic complexity (#34005)
* scons: fix signature for `install_args` (#34481)
* Fix `combine_phase_logs` text encoding issues (#34657)
* Use a module-like object to propagate changes in the MRO, when setting build env (#34059)
* PackageBase should not define builder legacy attributes (#33942)
* Forward lookup of the "run_tests" attribute (#34531)
* Bugfix for timers (#33917, #33900)
* Fix path handling in prefix inspections (#35318)
* Fix libtool filter for Fujitsu compilers (#34916)
* Bug fix for duplicate rpath errors on macOS when creating build caches (#34375)
* FileCache: delete the new cache file on exception (#34623)
* Propagate exceptions from Spack python console (#34547)
* Tests: Fix a bug/typo in a `config_values.py` fixture (#33886)
* Various CI fixes (#33953, #34560, #34560, #34828)
* Docs: remove monitors and analyzers, typos (#34358, #33926)
* bump release version for tutorial command (#33859)
# v0.19.0 (2022-11-11)
`v0.19.0` is a major feature release.
## Major features in this release
1. **Package requirements**
Spack's traditional [package preferences](
https://spack.readthedocs.io/en/latest/build_settings.html#package-preferences)
are soft, but we've added hard requirements to `packages.yaml` and `spack.yaml`
(#32528, #32369). Package requirements use the same syntax as specs:
```yaml
packages:
libfabric:
require: "@1.13.2"
mpich:
require:
- one_of: ["+cuda", "+rocm"]
```
More details in [the docs](
https://spack.readthedocs.io/en/latest/build_settings.html#package-requirements).
2. **Environment UI Improvements**
* Fewer surprising modifications to `spack.yaml` (#33711):
* `spack install` in an environment will no longer add to the `specs:` list; you'll
need to either use `spack add <spec>` or `spack install --add <spec>`.
* Similarly, `spack uninstall` will not remove from your environment's `specs:`
list; you'll need to use `spack remove` or `spack uninstall --remove`.
This will make it easier to manage an environment, as there is clear separation
between the stack to be installed (`spack.yaml`/`spack.lock`) and which parts of
it should be installed (`spack install` / `spack uninstall`).
* `concretizer:unify:true` is now the default mode for new environments (#31787)
We see more users creating `unify:true` environments now. Users who need
`unify:false` can add it to their environment to get the old behavior. This will
concretize every spec in the environment independently.
* Include environment configuration from URLs (#29026, [docs](
https://spack.readthedocs.io/en/latest/environments.html#included-configurations))
You can now include configuration in your environment directly from a URL:
```yaml
spack:
include:
- https://github.com/path/to/raw/config/compilers.yaml
```
4. **Multiple Build Systems**
An increasing number of packages in the ecosystem need the ability to support
multiple build systems (#30738, [docs](
https://spack.readthedocs.io/en/latest/packaging_guide.html#multiple-build-systems)),
either across versions, across platforms, or within the same version of the software.
This has been hard to support through multiple inheritance, as methods from different
build system superclasses would conflict. `package.py` files can now define separate
builder classes with installation logic for different build systems, e.g.:
```python
class ArpackNg(CMakePackage, AutotoolsPackage):
build_system(
conditional("cmake", when="@0.64:"),
con
gitextract_njnmw550/
├── .ci/
│ ├── gitlab/
│ │ └── forward_dotenv_variables.py
│ └── gitlab-ci.yml
├── .codecov.yml
├── .devcontainer/
│ ├── postCreateCommand.sh
│ ├── ubuntu20.04/
│ │ └── devcontainer.json
│ └── ubuntu22.04/
│ └── devcontainer.json
├── .dockerignore
├── .flake8
├── .git-blame-ignore-revs
├── .gitattributes
├── .github/
│ ├── CODE_OF_CONDUCT.md
│ ├── CONTRIBUTING.md
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ ├── config.yml
│ │ └── feature_request.yml
│ ├── dependabot.yml
│ ├── labeler.yml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── bin/
│ │ ├── canonicalize.py
│ │ ├── execute_installer.ps1
│ │ ├── format-rst.py
│ │ ├── generate_spack_yaml_containerize.sh
│ │ ├── setup_git.ps1
│ │ ├── setup_git.sh
│ │ └── system_shortcut_check.ps1
│ ├── bootstrap.yml
│ ├── build-containers.yml
│ ├── ci.yaml
│ ├── coverage.yml
│ ├── import-check.yaml
│ ├── prechecks.yml
│ ├── requirements/
│ │ ├── coverage/
│ │ │ └── requirements.txt
│ │ ├── style/
│ │ │ └── requirements.txt
│ │ └── unit_tests/
│ │ └── requirements.txt
│ ├── stale.yaml
│ ├── triage.yml
│ └── unit_tests.yaml
├── .gitignore
├── .mailmap
├── .readthedocs.yml
├── CHANGELOG.md
├── CITATION.cff
├── COPYRIGHT
├── LICENSE-APACHE
├── LICENSE-MIT
├── NEWS.md
├── NOTICE
├── README.md
├── SECURITY.md
├── bin/
│ ├── haspywin.py
│ ├── sbang
│ ├── spack
│ ├── spack-python
│ ├── spack-tmpconfig
│ ├── spack.bat
│ ├── spack.ps1
│ ├── spack_cmd.bat
│ └── spack_pwsh.ps1
├── etc/
│ └── spack/
│ └── defaults/
│ ├── base/
│ │ ├── concretizer.yaml
│ │ ├── config.yaml
│ │ ├── mirrors.yaml
│ │ ├── modules.yaml
│ │ ├── packages.yaml
│ │ └── repos.yaml
│ ├── bootstrap.yaml
│ ├── darwin/
│ │ ├── modules.yaml
│ │ └── packages.yaml
│ ├── include.yaml
│ ├── linux/
│ │ └── modules.yaml
│ └── windows/
│ ├── config.yaml
│ └── packages.yaml
├── lib/
│ └── spack/
│ ├── _vendoring/
│ │ └── __init__.py
│ ├── docs/
│ │ ├── .gitignore
│ │ ├── .spack/
│ │ │ └── repos.yaml
│ │ ├── Makefile
│ │ ├── _gh_pages_redirect/
│ │ │ ├── .nojekyll
│ │ │ └── index.html
│ │ ├── _static/
│ │ │ ├── css/
│ │ │ │ └── custom.css
│ │ │ └── js/
│ │ │ └── versions.js
│ │ ├── _templates/
│ │ │ ├── base.html
│ │ │ └── sidebar/
│ │ │ └── brand.html
│ │ ├── advanced_topics.rst
│ │ ├── binary_caches.rst
│ │ ├── bootstrapping.rst
│ │ ├── build_settings.rst
│ │ ├── build_systems/
│ │ │ ├── autotoolspackage.rst
│ │ │ ├── bundlepackage.rst
│ │ │ ├── cachedcmakepackage.rst
│ │ │ ├── cmakepackage.rst
│ │ │ ├── cudapackage.rst
│ │ │ ├── custompackage.rst
│ │ │ ├── inteloneapipackage.rst
│ │ │ ├── luapackage.rst
│ │ │ ├── makefilepackage.rst
│ │ │ ├── mavenpackage.rst
│ │ │ ├── mesonpackage.rst
│ │ │ ├── octavepackage.rst
│ │ │ ├── perlpackage.rst
│ │ │ ├── pythonpackage.rst
│ │ │ ├── qmakepackage.rst
│ │ │ ├── racketpackage.rst
│ │ │ ├── rocmpackage.rst
│ │ │ ├── rpackage.rst
│ │ │ ├── rubypackage.rst
│ │ │ ├── sconspackage.rst
│ │ │ ├── sippackage.rst
│ │ │ ├── sourceforgepackage.rst
│ │ │ └── wafpackage.rst
│ │ ├── build_systems.rst
│ │ ├── chain.rst
│ │ ├── command_index.in
│ │ ├── conf.py
│ │ ├── config_yaml.rst
│ │ ├── configuration.rst
│ │ ├── configuring_compilers.rst
│ │ ├── containers.rst
│ │ ├── contribution_guide.rst
│ │ ├── developer_guide.rst
│ │ ├── env_vars_yaml.rst
│ │ ├── environments.rst
│ │ ├── environments_basics.rst
│ │ ├── extensions.rst
│ │ ├── features.rst
│ │ ├── frequently_asked_questions.rst
│ │ ├── getting_help.rst
│ │ ├── getting_started.rst
│ │ ├── google5fda5f94b4ffb8de.html
│ │ ├── gpu_configuration.rst
│ │ ├── images/
│ │ │ └── packaging.excalidrawlib
│ │ ├── include_yaml.rst
│ │ ├── index.rst
│ │ ├── installing.rst
│ │ ├── installing_prerequisites.rst
│ │ ├── mirrors.rst
│ │ ├── module_file_support.rst
│ │ ├── package_api.rst
│ │ ├── package_fundamentals.rst
│ │ ├── package_review_guide.rst
│ │ ├── packages_yaml.rst
│ │ ├── packaging_guide_advanced.rst
│ │ ├── packaging_guide_build.rst
│ │ ├── packaging_guide_creation.rst
│ │ ├── packaging_guide_testing.rst
│ │ ├── pipelines.rst
│ │ ├── repositories.rst
│ │ ├── requirements.txt
│ │ ├── roles_and_responsibilities.rst
│ │ ├── signing.rst
│ │ ├── spack.yaml
│ │ ├── spec_syntax.rst
│ │ ├── toolchains_yaml.rst
│ │ └── windows.rst
│ ├── llnl/
│ │ └── __init__.py
│ └── spack/
│ ├── __init__.py
│ ├── aliases.py
│ ├── archspec.py
│ ├── audit.py
│ ├── binary_distribution.py
│ ├── bootstrap/
│ │ ├── __init__.py
│ │ ├── _common.py
│ │ ├── clingo.py
│ │ ├── config.py
│ │ ├── core.py
│ │ ├── environment.py
│ │ ├── prototypes/
│ │ │ ├── clingo-darwin-aarch64.json
│ │ │ ├── clingo-darwin-x86_64.json
│ │ │ ├── clingo-freebsd-amd64.json
│ │ │ ├── clingo-linux-aarch64.json
│ │ │ ├── clingo-linux-ppc64le.json
│ │ │ ├── clingo-linux-x86_64.json
│ │ │ └── clingo-windows-x86_64.json
│ │ └── status.py
│ ├── build_environment.py
│ ├── buildcache_migrate.py
│ ├── buildcache_prune.py
│ ├── builder.py
│ ├── caches.py
│ ├── ci/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── generator_registry.py
│ │ └── gitlab.py
│ ├── cmd/
│ │ ├── __init__.py
│ │ ├── add.py
│ │ ├── arch.py
│ │ ├── audit.py
│ │ ├── blame.py
│ │ ├── bootstrap.py
│ │ ├── build_env.py
│ │ ├── buildcache.py
│ │ ├── cd.py
│ │ ├── change.py
│ │ ├── checksum.py
│ │ ├── ci.py
│ │ ├── clean.py
│ │ ├── commands.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── arguments.py
│ │ │ ├── confirmation.py
│ │ │ ├── env_utility.py
│ │ │ └── spec_strings.py
│ │ ├── compiler.py
│ │ ├── compilers.py
│ │ ├── concretize.py
│ │ ├── config.py
│ │ ├── containerize.py
│ │ ├── create.py
│ │ ├── debug.py
│ │ ├── deconcretize.py
│ │ ├── dependencies.py
│ │ ├── dependents.py
│ │ ├── deprecate.py
│ │ ├── dev_build.py
│ │ ├── develop.py
│ │ ├── diff.py
│ │ ├── docs.py
│ │ ├── edit.py
│ │ ├── env.py
│ │ ├── extensions.py
│ │ ├── external.py
│ │ ├── fetch.py
│ │ ├── find.py
│ │ ├── gc.py
│ │ ├── gpg.py
│ │ ├── graph.py
│ │ ├── help.py
│ │ ├── info.py
│ │ ├── install.py
│ │ ├── installer/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── README.md
│ │ │ ├── bundle.wxs.in
│ │ │ ├── patch.xml
│ │ │ └── spack.wxs.in
│ │ ├── license.py
│ │ ├── list.py
│ │ ├── load.py
│ │ ├── location.py
│ │ ├── log_parse.py
│ │ ├── logs.py
│ │ ├── maintainers.py
│ │ ├── make_installer.py
│ │ ├── mark.py
│ │ ├── mirror.py
│ │ ├── module.py
│ │ ├── modules/
│ │ │ ├── __init__.py
│ │ │ ├── lmod.py
│ │ │ └── tcl.py
│ │ ├── patch.py
│ │ ├── pkg.py
│ │ ├── providers.py
│ │ ├── pydoc.py
│ │ ├── python.py
│ │ ├── reindex.py
│ │ ├── remove.py
│ │ ├── repo.py
│ │ ├── resource.py
│ │ ├── restage.py
│ │ ├── solve.py
│ │ ├── spec.py
│ │ ├── stage.py
│ │ ├── style.py
│ │ ├── tags.py
│ │ ├── test.py
│ │ ├── test_env.py
│ │ ├── tutorial.py
│ │ ├── undevelop.py
│ │ ├── uninstall.py
│ │ ├── unit_test.py
│ │ ├── unload.py
│ │ ├── url.py
│ │ ├── verify.py
│ │ ├── versions.py
│ │ └── view.py
│ ├── compilers/
│ │ ├── __init__.py
│ │ ├── adaptor.py
│ │ ├── config.py
│ │ ├── error.py
│ │ ├── flags.py
│ │ └── libraries.py
│ ├── concretize.py
│ ├── config.py
│ ├── container/
│ │ ├── __init__.py
│ │ ├── images.json
│ │ ├── images.py
│ │ └── writers.py
│ ├── context.py
│ ├── cray_manifest.py
│ ├── database.py
│ ├── dependency.py
│ ├── deptypes.py
│ ├── detection/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── path.py
│ │ └── test.py
│ ├── directives.py
│ ├── directives_meta.py
│ ├── directory_layout.py
│ ├── enums.py
│ ├── environment/
│ │ ├── __init__.py
│ │ ├── depfile.py
│ │ ├── environment.py
│ │ ├── list.py
│ │ └── shell.py
│ ├── error.py
│ ├── extensions.py
│ ├── externals.py
│ ├── fetch_strategy.py
│ ├── filesystem_view.py
│ ├── graph.py
│ ├── hash_types.py
│ ├── hooks/
│ │ ├── __init__.py
│ │ ├── absolutify_elf_sonames.py
│ │ ├── autopush.py
│ │ ├── drop_redundant_rpaths.py
│ │ ├── licensing.py
│ │ ├── module_file_generation.py
│ │ ├── permissions_setters.py
│ │ ├── resolve_shared_libraries.py
│ │ ├── sbang.py
│ │ ├── windows_runtime_linkage.py
│ │ └── write_install_manifest.py
│ ├── install_test.py
│ ├── installer.py
│ ├── installer_dispatch.py
│ ├── llnl/
│ │ ├── __init__.py
│ │ ├── path.py
│ │ ├── string.py
│ │ ├── url.py
│ │ └── util/
│ │ ├── __init__.py
│ │ ├── argparsewriter.py
│ │ ├── filesystem.py
│ │ ├── lang.py
│ │ ├── link_tree.py
│ │ ├── lock.py
│ │ ├── symlink.py
│ │ └── tty/
│ │ ├── __init__.py
│ │ ├── colify.py
│ │ ├── color.py
│ │ └── log.py
│ ├── main.py
│ ├── mirrors/
│ │ ├── __init__.py
│ │ ├── layout.py
│ │ ├── mirror.py
│ │ └── utils.py
│ ├── mixins.py
│ ├── modules/
│ │ ├── __init__.py
│ │ ├── common.py
│ │ ├── lmod.py
│ │ └── tcl.py
│ ├── multimethod.py
│ ├── new_installer.py
│ ├── oci/
│ │ ├── __init__.py
│ │ ├── image.py
│ │ ├── oci.py
│ │ └── opener.py
│ ├── operating_systems/
│ │ ├── __init__.py
│ │ ├── _operating_system.py
│ │ ├── freebsd.py
│ │ ├── linux_distro.py
│ │ ├── mac_os.py
│ │ └── windows_os.py
│ ├── package.py
│ ├── package_base.py
│ ├── package_completions.py
│ ├── package_prefs.py
│ ├── package_test.py
│ ├── patch.py
│ ├── paths.py
│ ├── phase_callbacks.py
│ ├── platforms/
│ │ ├── __init__.py
│ │ ├── _functions.py
│ │ ├── _platform.py
│ │ ├── cray.py
│ │ ├── darwin.py
│ │ ├── freebsd.py
│ │ ├── linux.py
│ │ ├── test.py
│ │ └── windows.py
│ ├── projections.py
│ ├── provider_index.py
│ ├── relocate.py
│ ├── relocate_text.py
│ ├── repo.py
│ ├── repo_migrate.py
│ ├── report.py
│ ├── reporters/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── cdash.py
│ │ ├── extract.py
│ │ └── junit.py
│ ├── resource.py
│ ├── rewiring.py
│ ├── schema/
│ │ ├── __init__.py
│ │ ├── bootstrap.py
│ │ ├── buildcache_spec.py
│ │ ├── cdash.py
│ │ ├── ci.py
│ │ ├── compilers.py
│ │ ├── concretizer.py
│ │ ├── config.py
│ │ ├── container.py
│ │ ├── cray_manifest.py
│ │ ├── database_index.py
│ │ ├── definitions.py
│ │ ├── develop.py
│ │ ├── env.py
│ │ ├── env_vars.py
│ │ ├── environment.py
│ │ ├── include.py
│ │ ├── merged.py
│ │ ├── mirrors.py
│ │ ├── modules.py
│ │ ├── packages.py
│ │ ├── projections.py
│ │ ├── repos.py
│ │ ├── spec.py
│ │ ├── spec_list.py
│ │ ├── toolchains.py
│ │ ├── upstreams.py
│ │ ├── url_buildcache_manifest.py
│ │ └── view.py
│ ├── solver/
│ │ ├── __init__.py
│ │ ├── asp.py
│ │ ├── concretize.lp
│ │ ├── core.py
│ │ ├── direct_dependency.lp
│ │ ├── display.lp
│ │ ├── error_messages.lp
│ │ ├── heuristic.lp
│ │ ├── input_analysis.py
│ │ ├── libc_compatibility.lp
│ │ ├── os_compatibility.lp
│ │ ├── requirements.py
│ │ ├── reuse.py
│ │ ├── runtimes.py
│ │ ├── splices.lp
│ │ ├── splicing.py
│ │ ├── versions.py
│ │ └── when_possible.lp
│ ├── spec.py
│ ├── spec_filter.py
│ ├── spec_parser.py
│ ├── stage.py
│ ├── store.py
│ ├── subprocess_context.py
│ ├── tag.py
│ ├── tengine.py
│ ├── test/
│ │ ├── __init__.py
│ │ ├── architecture.py
│ │ ├── audit.py
│ │ ├── binary_distribution.py
│ │ ├── bootstrap.py
│ │ ├── build_distribution.py
│ │ ├── build_environment.py
│ │ ├── build_system_guess.py
│ │ ├── builder.py
│ │ ├── buildrequest.py
│ │ ├── buildtask.py
│ │ ├── cache_fetch.py
│ │ ├── cc.py
│ │ ├── ci.py
│ │ ├── cmd/
│ │ │ ├── __init__.py
│ │ │ ├── arch.py
│ │ │ ├── audit.py
│ │ │ ├── blame.py
│ │ │ ├── bootstrap.py
│ │ │ ├── build_env.py
│ │ │ ├── buildcache.py
│ │ │ ├── cd.py
│ │ │ ├── checksum.py
│ │ │ ├── ci.py
│ │ │ ├── clean.py
│ │ │ ├── commands.py
│ │ │ ├── common/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── arguments.py
│ │ │ │ └── spec_strings.py
│ │ │ ├── compiler.py
│ │ │ ├── concretize.py
│ │ │ ├── config.py
│ │ │ ├── create.py
│ │ │ ├── debug.py
│ │ │ ├── deconcretize.py
│ │ │ ├── dependencies.py
│ │ │ ├── dependents.py
│ │ │ ├── deprecate.py
│ │ │ ├── dev_build.py
│ │ │ ├── develop.py
│ │ │ ├── diff.py
│ │ │ ├── edit.py
│ │ │ ├── env.py
│ │ │ ├── extensions.py
│ │ │ ├── external.py
│ │ │ ├── fetch.py
│ │ │ ├── find.py
│ │ │ ├── gc.py
│ │ │ ├── gpg.py
│ │ │ ├── graph.py
│ │ │ ├── help.py
│ │ │ ├── info.py
│ │ │ ├── init_py_functions.py
│ │ │ ├── install.py
│ │ │ ├── is_git_repo.py
│ │ │ ├── license.py
│ │ │ ├── list.py
│ │ │ ├── load.py
│ │ │ ├── location.py
│ │ │ ├── logs.py
│ │ │ ├── maintainers.py
│ │ │ ├── mark.py
│ │ │ ├── mirror.py
│ │ │ ├── module.py
│ │ │ ├── pkg.py
│ │ │ ├── print_shell_vars.py
│ │ │ ├── providers.py
│ │ │ ├── python.py
│ │ │ ├── reindex.py
│ │ │ ├── repo.py
│ │ │ ├── resource.py
│ │ │ ├── spec.py
│ │ │ ├── stage.py
│ │ │ ├── style.py
│ │ │ ├── tags.py
│ │ │ ├── test.py
│ │ │ ├── undevelop.py
│ │ │ ├── uninstall.py
│ │ │ ├── unit_test.py
│ │ │ ├── url.py
│ │ │ ├── verify.py
│ │ │ ├── versions.py
│ │ │ └── view.py
│ │ ├── cmd_extensions.py
│ │ ├── compilers/
│ │ │ ├── conversion.py
│ │ │ └── libraries.py
│ │ ├── concretization/
│ │ │ ├── compiler_runtimes.py
│ │ │ ├── conditional_dependencies.py
│ │ │ ├── core.py
│ │ │ ├── errors.py
│ │ │ ├── flag_mixing.py
│ │ │ ├── preferences.py
│ │ │ ├── requirements.py
│ │ │ └── splicing.py
│ │ ├── config.py
│ │ ├── config_values.py
│ │ ├── conftest.py
│ │ ├── container/
│ │ │ ├── cli.py
│ │ │ ├── conftest.py
│ │ │ ├── docker.py
│ │ │ ├── images.py
│ │ │ └── singularity.py
│ │ ├── cray_manifest.py
│ │ ├── cvs_fetch.py
│ │ ├── data/
│ │ │ ├── compiler_verbose_output/
│ │ │ │ ├── cce-8.6.5.txt
│ │ │ │ ├── clang-4.0.1.txt
│ │ │ │ ├── clang-9.0.0-apple-ld.txt
│ │ │ │ ├── collect2-6.3.0-gnu-ld.txt
│ │ │ │ ├── gcc-7.3.1.txt
│ │ │ │ ├── icc-16.0.3.txt
│ │ │ │ ├── nag-6.2-gcc-6.5.0.txt
│ │ │ │ ├── obscure-parsing-rules.txt
│ │ │ │ └── xl-13.1.5.txt
│ │ │ ├── compression/
│ │ │ │ ├── Foo
│ │ │ │ ├── Foo.Z
│ │ │ │ ├── Foo.bz2
│ │ │ │ ├── Foo.cxx
│ │ │ │ ├── Foo.tar.Z
│ │ │ │ ├── Foo.tar.bz2
│ │ │ │ ├── Foo.tar.xz
│ │ │ │ ├── Foo.tbz
│ │ │ │ ├── Foo.tbz2
│ │ │ │ ├── Foo.tgz
│ │ │ │ ├── Foo.txz
│ │ │ │ └── Foo.xz
│ │ │ ├── config/
│ │ │ │ ├── base/
│ │ │ │ │ └── config.yaml
│ │ │ │ ├── bootstrap.yaml
│ │ │ │ ├── concretizer.yaml
│ │ │ │ ├── config.yaml
│ │ │ │ ├── include.yaml
│ │ │ │ ├── modules.yaml
│ │ │ │ ├── packages.yaml
│ │ │ │ └── repos.yaml
│ │ │ ├── conftest/
│ │ │ │ └── diff-test/
│ │ │ │ ├── package-0.txt
│ │ │ │ ├── package-1.txt
│ │ │ │ ├── package-2.txt
│ │ │ │ └── package-3.txt
│ │ │ ├── directory_search/
│ │ │ │ ├── README.txt
│ │ │ │ ├── a/
│ │ │ │ │ ├── c.h
│ │ │ │ │ ├── foobar.txt
│ │ │ │ │ ├── libc.a
│ │ │ │ │ └── libc.lib
│ │ │ │ ├── b/
│ │ │ │ │ ├── b.h
│ │ │ │ │ ├── bar.txp
│ │ │ │ │ ├── d.h
│ │ │ │ │ ├── liba.a
│ │ │ │ │ ├── liba.lib
│ │ │ │ │ ├── libd.a
│ │ │ │ │ └── libd.lib
│ │ │ │ └── c/
│ │ │ │ ├── a.h
│ │ │ │ ├── bar.txt
│ │ │ │ ├── libb.a
│ │ │ │ └── libb.lib
│ │ │ ├── filter_file/
│ │ │ │ ├── selfextract.bsx
│ │ │ │ ├── start_stop.txt
│ │ │ │ └── x86_cpuid_info.c
│ │ │ ├── make/
│ │ │ │ ├── affirmative/
│ │ │ │ │ ├── capital_makefile/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── check_test/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── expansion/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── gnu_makefile/
│ │ │ │ │ │ └── GNUmakefile
│ │ │ │ │ ├── include/
│ │ │ │ │ │ ├── Makefile
│ │ │ │ │ │ └── make.mk
│ │ │ │ │ ├── lowercase_makefile/
│ │ │ │ │ │ └── makefile
│ │ │ │ │ ├── prerequisites/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── spaces/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ ├── test_check/
│ │ │ │ │ │ └── Makefile
│ │ │ │ │ └── three_targets/
│ │ │ │ │ └── Makefile
│ │ │ │ └── negative/
│ │ │ │ ├── no_makefile/
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── partial_match/
│ │ │ │ │ └── Makefile
│ │ │ │ └── variable/
│ │ │ │ └── Makefile
│ │ │ ├── microarchitectures/
│ │ │ │ └── microarchitectures.json
│ │ │ ├── mirrors/
│ │ │ │ ├── legacy_yaml/
│ │ │ │ │ └── build_cache/
│ │ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ │ └── gcc-4.5.0/
│ │ │ │ │ │ └── zlib-1.2.11/
│ │ │ │ │ │ └── test-debian6-core2-gcc-4.5.0-zlib-1.2.11-t5mczux3tfqpxwmg7egp7axy2jvyulqk.spack
│ │ │ │ │ └── test-debian6-core2-gcc-4.5.0-zlib-1.2.11-t5mczux3tfqpxwmg7egp7axy2jvyulqk.spec.yaml
│ │ │ │ ├── signed_json/
│ │ │ │ │ └── linux-ubuntu18.04-haswell-gcc-8.4.0-zlib-1.2.12-g7otk5dra3hifqxej36m5qzm7uyghqgb.spec.json.sig
│ │ │ │ └── v2_layout/
│ │ │ │ ├── signed/
│ │ │ │ │ └── build_cache/
│ │ │ │ │ ├── _pgp/
│ │ │ │ │ │ ├── CBAB2C1032C6FF5078049EC0FA61D50C12CAD37E.pub
│ │ │ │ │ │ └── index.json
│ │ │ │ │ ├── index.json
│ │ │ │ │ ├── index.json.hash
│ │ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ │ └── gcc-10.2.1/
│ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spack
│ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spack
│ │ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spec.json.sig
│ │ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1/
│ │ │ │ │ │ ├── gcc-10.2.1/
│ │ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spack
│ │ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spack
│ │ │ │ │ │ └── none-none/
│ │ │ │ │ │ ├── compiler-wrapper-1.0/
│ │ │ │ │ │ │ └── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spack
│ │ │ │ │ │ └── gcc-runtime-10.2.1/
│ │ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spack
│ │ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spec.json.sig
│ │ │ │ │ ├── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spec.json.sig
│ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spec.json.sig
│ │ │ │ └── unsigned/
│ │ │ │ └── build_cache/
│ │ │ │ ├── index.json
│ │ │ │ ├── index.json.hash
│ │ │ │ ├── test-debian6-core2/
│ │ │ │ │ └── gcc-10.2.1/
│ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spack
│ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ └── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spack
│ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libdwarf-20130729-sk2gqqz4n5njmvktycnd25wq25jxiqkr.spec.json
│ │ │ │ ├── test-debian6-core2-gcc-10.2.1-libelf-0.8.13-rqh2vuf6fqwkmipzgi2wjx352mq7y7ez.spec.json
│ │ │ │ ├── test-debian6-m1/
│ │ │ │ │ ├── gcc-10.2.1/
│ │ │ │ │ │ ├── libdwarf-20130729/
│ │ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spack
│ │ │ │ │ │ └── libelf-0.8.13/
│ │ │ │ │ │ └── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spack
│ │ │ │ │ └── none-none/
│ │ │ │ │ ├── compiler-wrapper-1.0/
│ │ │ │ │ │ └── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spack
│ │ │ │ │ └── gcc-runtime-10.2.1/
│ │ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spack
│ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libdwarf-20130729-u5uz3dcch5if4eve4sef67o2rf2lbfgh.spec.json
│ │ │ │ ├── test-debian6-m1-gcc-10.2.1-libelf-0.8.13-jr3yipyxyjulcdvckwwwjrrumis7glpa.spec.json
│ │ │ │ ├── test-debian6-m1-none-none-compiler-wrapper-1.0-qeehcxyvluwnihsc2qxstmpomtxo3lrc.spec.json
│ │ │ │ └── test-debian6-m1-none-none-gcc-runtime-10.2.1-izgzpzeljwairalfjm3k6fntbb64nt6n.spec.json
│ │ │ ├── modules/
│ │ │ │ ├── lmod/
│ │ │ │ │ ├── alter_environment.yaml
│ │ │ │ │ ├── autoload_all.yaml
│ │ │ │ │ ├── autoload_direct.yaml
│ │ │ │ │ ├── complex_hierarchy.yaml
│ │ │ │ │ ├── conflicts.yaml
│ │ │ │ │ ├── core_compilers.yaml
│ │ │ │ │ ├── core_compilers_at_equal.yaml
│ │ │ │ │ ├── core_compilers_empty.yaml
│ │ │ │ │ ├── exclude.yaml
│ │ │ │ │ ├── hide_implicits.yaml
│ │ │ │ │ ├── missing_core_compilers.yaml
│ │ │ │ │ ├── module_path_separator.yaml
│ │ │ │ │ ├── no_arch.yaml
│ │ │ │ │ ├── no_hash.yaml
│ │ │ │ │ ├── override_template.yaml
│ │ │ │ │ ├── projections.yaml
│ │ │ │ │ ├── with_view.yaml
│ │ │ │ │ └── wrong_conflicts.yaml
│ │ │ │ └── tcl/
│ │ │ │ ├── alter_environment.yaml
│ │ │ │ ├── autoload_all.yaml
│ │ │ │ ├── autoload_direct.yaml
│ │ │ │ ├── autoload_with_constraints.yaml
│ │ │ │ ├── conflicts.yaml
│ │ │ │ ├── exclude.yaml
│ │ │ │ ├── exclude_implicits.yaml
│ │ │ │ ├── hide_implicits.yaml
│ │ │ │ ├── invalid_naming_scheme.yaml
│ │ │ │ ├── invalid_token_in_env_var_name.yaml
│ │ │ │ ├── module_path_separator.yaml
│ │ │ │ ├── naming_scheme.yaml
│ │ │ │ ├── no_arch.yaml
│ │ │ │ ├── override_config.yaml
│ │ │ │ ├── override_template.yaml
│ │ │ │ ├── prerequisites_all.yaml
│ │ │ │ ├── prerequisites_direct.yaml
│ │ │ │ ├── projections.yaml
│ │ │ │ ├── suffix-format.yaml
│ │ │ │ ├── suffix.yaml
│ │ │ │ └── wrong_conflicts.yaml
│ │ │ ├── ninja/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── affirmative/
│ │ │ │ │ ├── check_test/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── include/
│ │ │ │ │ │ ├── build.ninja
│ │ │ │ │ │ └── include.ninja
│ │ │ │ │ ├── simple/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── spaces/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ ├── subninja/
│ │ │ │ │ │ ├── build.ninja
│ │ │ │ │ │ └── subninja.ninja
│ │ │ │ │ ├── test_check/
│ │ │ │ │ │ └── build.ninja
│ │ │ │ │ └── three_targets/
│ │ │ │ │ └── build.ninja
│ │ │ │ └── negative/
│ │ │ │ ├── no_ninja/
│ │ │ │ │ └── readme.txt
│ │ │ │ ├── partial_match/
│ │ │ │ │ └── build.ninja
│ │ │ │ ├── rule/
│ │ │ │ │ └── build.ninja
│ │ │ │ └── variable/
│ │ │ │ └── build.ninja
│ │ │ ├── patch/
│ │ │ │ ├── foo.patch
│ │ │ │ └── foo.tgz
│ │ │ ├── sourceme_first.bat
│ │ │ ├── sourceme_first.sh
│ │ │ ├── sourceme_lmod.sh
│ │ │ ├── sourceme_modules.bat
│ │ │ ├── sourceme_modules.sh
│ │ │ ├── sourceme_parameters.bat
│ │ │ ├── sourceme_parameters.sh
│ │ │ ├── sourceme_second.bat
│ │ │ ├── sourceme_second.sh
│ │ │ ├── sourceme_unicode.bat
│ │ │ ├── sourceme_unicode.sh
│ │ │ ├── sourceme_unset.bat
│ │ │ ├── sourceme_unset.sh
│ │ │ ├── style/
│ │ │ │ ├── broken.dummy
│ │ │ │ └── fixed.py
│ │ │ ├── templates/
│ │ │ │ ├── a.txt
│ │ │ │ ├── extension.tcl
│ │ │ │ └── override.txt
│ │ │ ├── templates_again/
│ │ │ │ ├── b.txt
│ │ │ │ └── override_from_modules.txt
│ │ │ ├── test/
│ │ │ │ └── test_stage/
│ │ │ │ └── gavrxt67t7yaiwfek7dds7lgokmoaiin/
│ │ │ │ ├── printing-package-1.0-hzgcoow-test-out.txt
│ │ │ │ ├── printing-package-1.0-hzgcoow-tested.txt
│ │ │ │ └── results.txt
│ │ │ ├── unparse/
│ │ │ │ ├── README.md
│ │ │ │ ├── amdfftw.txt
│ │ │ │ ├── grads.txt
│ │ │ │ ├── legion.txt
│ │ │ │ ├── llvm.txt
│ │ │ │ ├── mfem.txt
│ │ │ │ ├── py-torch.txt
│ │ │ │ └── trilinos.txt
│ │ │ └── web/
│ │ │ ├── 1.html
│ │ │ ├── 2.html
│ │ │ ├── 3.html
│ │ │ ├── 4.html
│ │ │ ├── fragment.html
│ │ │ ├── index.html
│ │ │ ├── index_with_fragment.html
│ │ │ └── index_with_javascript.html
│ │ ├── database.py
│ │ ├── detection.py
│ │ ├── directives.py
│ │ ├── directory_layout.py
│ │ ├── entry_points.py
│ │ ├── env.py
│ │ ├── environment/
│ │ │ └── mutate.py
│ │ ├── environment_modifications.py
│ │ ├── error_messages.py
│ │ ├── externals.py
│ │ ├── fetch_strategy.py
│ │ ├── flag_handlers.py
│ │ ├── gcs_fetch.py
│ │ ├── git_fetch.py
│ │ ├── graph.py
│ │ ├── hg_fetch.py
│ │ ├── hooks/
│ │ │ └── absolutify_elf_sonames.py
│ │ ├── install.py
│ │ ├── installer.py
│ │ ├── installer_build_graph.py
│ │ ├── installer_tui.py
│ │ ├── jobserver.py
│ │ ├── link_paths.py
│ │ ├── llnl/
│ │ │ ├── llnl_string.py
│ │ │ ├── url.py
│ │ │ └── util/
│ │ │ ├── __init__.py
│ │ │ ├── argparsewriter.py
│ │ │ ├── file_list.py
│ │ │ ├── filesystem.py
│ │ │ ├── lang.py
│ │ │ ├── link_tree.py
│ │ │ ├── lock.py
│ │ │ ├── symlink.py
│ │ │ └── tty/
│ │ │ ├── __init__.py
│ │ │ ├── colify.py
│ │ │ ├── color.py
│ │ │ ├── log.py
│ │ │ └── tty.py
│ │ ├── main.py
│ │ ├── make_executable.py
│ │ ├── mirror.py
│ │ ├── module_parsing.py
│ │ ├── modules/
│ │ │ ├── __init__.py
│ │ │ ├── common.py
│ │ │ ├── conftest.py
│ │ │ ├── lmod.py
│ │ │ └── tcl.py
│ │ ├── multimethod.py
│ │ ├── namespace_trie.py
│ │ ├── new_installer.py
│ │ ├── oci/
│ │ │ ├── image.py
│ │ │ ├── integration_test.py
│ │ │ ├── mock_registry.py
│ │ │ └── urlopen.py
│ │ ├── optional_deps.py
│ │ ├── package_class.py
│ │ ├── packages.py
│ │ ├── packaging.py
│ │ ├── patch.py
│ │ ├── permissions.py
│ │ ├── projections.py
│ │ ├── provider_index.py
│ │ ├── relocate.py
│ │ ├── relocate_text.py
│ │ ├── repo.py
│ │ ├── reporters.py
│ │ ├── rewiring.py
│ │ ├── s3_fetch.py
│ │ ├── sbang.py
│ │ ├── schema.py
│ │ ├── spack_yaml.py
│ │ ├── spec_dag.py
│ │ ├── spec_list.py
│ │ ├── spec_semantics.py
│ │ ├── spec_syntax.py
│ │ ├── spec_yaml.py
│ │ ├── stage.py
│ │ ├── svn_fetch.py
│ │ ├── tag.py
│ │ ├── tengine.py
│ │ ├── test_suite.py
│ │ ├── traverse.py
│ │ ├── url_fetch.py
│ │ ├── url_parse.py
│ │ ├── url_substitution.py
│ │ ├── util/
│ │ │ ├── __init__.py
│ │ │ ├── archive.py
│ │ │ ├── compression.py
│ │ │ ├── editor.py
│ │ │ ├── elf.py
│ │ │ ├── environment.py
│ │ │ ├── executable.py
│ │ │ ├── file_cache.py
│ │ │ ├── git.py
│ │ │ ├── ld_so_conf.py
│ │ │ ├── log_parser.py
│ │ │ ├── module_cmd.py
│ │ │ ├── package_hash.py
│ │ │ ├── path.py
│ │ │ ├── prefix.py
│ │ │ ├── remote_file_cache.py
│ │ │ ├── spack_lock_wrapper.py
│ │ │ ├── spack_yaml.py
│ │ │ ├── timer.py
│ │ │ ├── unparse/
│ │ │ │ ├── __init__.py
│ │ │ │ └── unparse.py
│ │ │ ├── util_gpg.py
│ │ │ └── util_url.py
│ │ ├── utilities.py
│ │ ├── variant.py
│ │ ├── verification.py
│ │ ├── versions.py
│ │ ├── views.py
│ │ └── web.py
│ ├── tokenize.py
│ ├── traverse.py
│ ├── url.py
│ ├── url_buildcache.py
│ ├── user_environment.py
│ ├── util/
│ │ ├── __init__.py
│ │ ├── archive.py
│ │ ├── compression.py
│ │ ├── cpus.py
│ │ ├── crypto.py
│ │ ├── ctest_log_parser.py
│ │ ├── editor.py
│ │ ├── elf.py
│ │ ├── environment.py
│ │ ├── executable.py
│ │ ├── file_cache.py
│ │ ├── file_permissions.py
│ │ ├── filesystem.py
│ │ ├── format.py
│ │ ├── gcs.py
│ │ ├── git.py
│ │ ├── gpg.py
│ │ ├── hash.py
│ │ ├── ld_so_conf.py
│ │ ├── libc.py
│ │ ├── lock.py
│ │ ├── log_parse.py
│ │ ├── module_cmd.py
│ │ ├── naming.py
│ │ ├── package_hash.py
│ │ ├── parallel.py
│ │ ├── path.py
│ │ ├── pattern.py
│ │ ├── prefix.py
│ │ ├── remote_file_cache.py
│ │ ├── s3.py
│ │ ├── socket.py
│ │ ├── spack_json.py
│ │ ├── spack_yaml.py
│ │ ├── timer.py
│ │ ├── typing.py
│ │ ├── unparse/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ └── unparser.py
│ │ ├── url.py
│ │ ├── web.py
│ │ └── windows_registry.py
│ ├── variant.py
│ ├── vendor/
│ │ ├── __init__.py
│ │ ├── _pyrsistent_version.py
│ │ ├── altgraph/
│ │ │ ├── Dot.py
│ │ │ ├── Graph.py
│ │ │ ├── GraphAlgo.py
│ │ │ ├── GraphStat.py
│ │ │ ├── GraphUtil.py
│ │ │ ├── LICENSE
│ │ │ ├── ObjectGraph.py
│ │ │ └── __init__.py
│ │ ├── archspec/
│ │ │ ├── LICENSE
│ │ │ ├── LICENSE-APACHE
│ │ │ ├── LICENSE-MIT
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── cli.py
│ │ │ ├── cpu/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── alias.py
│ │ │ │ ├── detect.py
│ │ │ │ ├── microarchitecture.py
│ │ │ │ └── schema.py
│ │ │ ├── json/
│ │ │ │ ├── COPYRIGHT
│ │ │ │ ├── LICENSE-APACHE
│ │ │ │ ├── LICENSE-MIT
│ │ │ │ ├── NOTICE
│ │ │ │ ├── README.md
│ │ │ │ └── cpu/
│ │ │ │ ├── cpuid.json
│ │ │ │ ├── cpuid_schema.json
│ │ │ │ ├── microarchitectures.json
│ │ │ │ └── microarchitectures_schema.json
│ │ │ └── vendor/
│ │ │ └── cpuid/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── cpuid.py
│ │ │ └── example.py
│ │ ├── attr/
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyi
│ │ │ ├── _cmp.py
│ │ │ ├── _cmp.pyi
│ │ │ ├── _compat.py
│ │ │ ├── _config.py
│ │ │ ├── _funcs.py
│ │ │ ├── _make.py
│ │ │ ├── _next_gen.py
│ │ │ ├── _version_info.py
│ │ │ ├── _version_info.pyi
│ │ │ ├── converters.py
│ │ │ ├── converters.pyi
│ │ │ ├── exceptions.py
│ │ │ ├── exceptions.pyi
│ │ │ ├── filters.py
│ │ │ ├── filters.pyi
│ │ │ ├── py.typed
│ │ │ ├── setters.py
│ │ │ ├── setters.pyi
│ │ │ ├── validators.py
│ │ │ └── validators.pyi
│ │ ├── attrs/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ ├── __init__.pyi
│ │ │ ├── converters.py
│ │ │ ├── exceptions.py
│ │ │ ├── filters.py
│ │ │ ├── py.typed
│ │ │ ├── setters.py
│ │ │ └── validators.py
│ │ ├── distro/
│ │ │ ├── LICENSE
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── distro.py
│ │ │ └── py.typed
│ │ ├── jinja2/
│ │ │ ├── LICENSE.rst
│ │ │ ├── __init__.py
│ │ │ ├── _identifier.py
│ │ │ ├── async_utils.py
│ │ │ ├── bccache.py
│ │ │ ├── compiler.py
│ │ │ ├── constants.py
│ │ │ ├── debug.py
│ │ │ ├── defaults.py
│ │ │ ├── environment.py
│ │ │ ├── exceptions.py
│ │ │ ├── ext.py
│ │ │ ├── filters.py
│ │ │ ├── idtracking.py
│ │ │ ├── lexer.py
│ │ │ ├── loaders.py
│ │ │ ├── meta.py
│ │ │ ├── nativetypes.py
│ │ │ ├── nodes.py
│ │ │ ├── optimizer.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── runtime.py
│ │ │ ├── sandbox.py
│ │ │ ├── tests.py
│ │ │ ├── utils.py
│ │ │ └── visitor.py
│ │ ├── jsonschema/
│ │ │ ├── COPYING
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _format.py
│ │ │ ├── _legacy_validators.py
│ │ │ ├── _reflect.py
│ │ │ ├── _types.py
│ │ │ ├── _utils.py
│ │ │ ├── _validators.py
│ │ │ ├── benchmarks/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── issue232.py
│ │ │ │ └── json_schema_test_suite.py
│ │ │ ├── cli.py
│ │ │ ├── compat.py
│ │ │ ├── exceptions.py
│ │ │ ├── schemas/
│ │ │ │ ├── draft3.json
│ │ │ │ ├── draft4.json
│ │ │ │ ├── draft6.json
│ │ │ │ └── draft7.json
│ │ │ └── validators.py
│ │ ├── macholib/
│ │ │ ├── LICENSE
│ │ │ ├── MachO.py
│ │ │ ├── MachOGraph.py
│ │ │ ├── MachOStandalone.py
│ │ │ ├── SymbolTable.py
│ │ │ ├── __init__.py
│ │ │ ├── __main__.py
│ │ │ ├── _cmdline.py
│ │ │ ├── dyld.py
│ │ │ ├── dylib.py
│ │ │ ├── framework.py
│ │ │ ├── itergraphreport.py
│ │ │ ├── mach_o.py
│ │ │ ├── macho_dump.py
│ │ │ ├── macho_find.py
│ │ │ ├── macho_standalone.py
│ │ │ ├── ptypes.py
│ │ │ └── util.py
│ │ ├── markupsafe/
│ │ │ ├── LICENSE.rst
│ │ │ ├── __init__.py
│ │ │ ├── _native.py
│ │ │ ├── _speedups.c
│ │ │ ├── _speedups.pyi
│ │ │ └── py.typed
│ │ ├── pyrsistent/
│ │ │ ├── LICENSE.mit
│ │ │ ├── __init__.py
│ │ │ ├── _checked_types.py
│ │ │ ├── _field_common.py
│ │ │ ├── _helpers.py
│ │ │ ├── _immutable.py
│ │ │ ├── _pbag.py
│ │ │ ├── _pclass.py
│ │ │ ├── _pdeque.py
│ │ │ ├── _plist.py
│ │ │ ├── _pmap.py
│ │ │ ├── _precord.py
│ │ │ ├── _pset.py
│ │ │ ├── _pvector.py
│ │ │ ├── _toolz.py
│ │ │ ├── _transformations.py
│ │ │ ├── py.typed
│ │ │ ├── typing.py
│ │ │ └── typing.pyi
│ │ ├── ruamel/
│ │ │ └── yaml/
│ │ │ ├── __init__.py
│ │ │ ├── anchor.py
│ │ │ ├── comments.py
│ │ │ ├── compat.py
│ │ │ ├── composer.py
│ │ │ ├── configobjwalker.py
│ │ │ ├── constructor.py
│ │ │ ├── cyaml.py
│ │ │ ├── dumper.py
│ │ │ ├── emitter.py
│ │ │ ├── error.py
│ │ │ ├── events.py
│ │ │ ├── loader.py
│ │ │ ├── main.py
│ │ │ ├── nodes.py
│ │ │ ├── parser.py
│ │ │ ├── py.typed
│ │ │ ├── reader.py
│ │ │ ├── representer.py
│ │ │ ├── resolver.py
│ │ │ ├── scalarbool.py
│ │ │ ├── scalarfloat.py
│ │ │ ├── scalarint.py
│ │ │ ├── scalarstring.py
│ │ │ ├── scanner.py
│ │ │ ├── serializer.py
│ │ │ ├── timestamp.py
│ │ │ ├── tokens.py
│ │ │ └── util.py
│ │ ├── ruamel.yaml.LICENSE
│ │ ├── six.LICENSE
│ │ ├── six.py
│ │ ├── typing_extensions.LICENSE
│ │ ├── typing_extensions.py
│ │ └── typing_extensions.pyi
│ ├── verify.py
│ ├── verify_libraries.py
│ └── version/
│ ├── __init__.py
│ ├── common.py
│ ├── git_ref_lookup.py
│ ├── lookup.py
│ └── version_types.py
├── pyproject.toml
├── pytest.ini
├── share/
│ └── spack/
│ ├── bash/
│ │ └── spack-completion.bash
│ ├── bootstrap/
│ │ ├── github-actions-v0.6/
│ │ │ ├── clingo.json
│ │ │ ├── gnupg.json
│ │ │ ├── metadata.yaml
│ │ │ └── patchelf.json
│ │ ├── github-actions-v2/
│ │ │ ├── clingo.json
│ │ │ ├── gnupg.json
│ │ │ ├── metadata.yaml
│ │ │ └── patchelf.json
│ │ └── spack-install/
│ │ └── metadata.yaml
│ ├── csh/
│ │ ├── pathadd.csh
│ │ └── spack.csh
│ ├── docker/
│ │ ├── entrypoint.bash
│ │ └── modules.yaml
│ ├── docs/
│ │ └── docker/
│ │ └── module-file-tutorial/
│ │ ├── Dockerfile
│ │ ├── packages.yaml
│ │ └── spack.sh
│ ├── fish/
│ │ └── spack-completion.fish
│ ├── keys/
│ │ └── tutorial.pub
│ ├── qa/
│ │ ├── bashcov
│ │ ├── completion-test.sh
│ │ ├── config_state.py
│ │ ├── configuration/
│ │ │ ├── config.yaml
│ │ │ ├── packages.yaml
│ │ │ └── windows_config.yaml
│ │ ├── environment_activation.py
│ │ ├── flake8_formatter.py
│ │ ├── run-build-tests
│ │ ├── run-shell-tests
│ │ ├── run-style-tests
│ │ ├── run-unit-tests
│ │ ├── scopes/
│ │ │ ├── false/
│ │ │ │ └── concretizer.yaml
│ │ │ ├── true/
│ │ │ │ ├── .spack-env/
│ │ │ │ │ └── transaction_lock
│ │ │ │ └── spack.yaml
│ │ │ └── wp/
│ │ │ └── concretizer.yaml
│ │ ├── setup-env-test.csh
│ │ ├── setup-env-test.fish
│ │ ├── setup-env-test.sh
│ │ ├── setup.sh
│ │ ├── setup_spack_installer.ps1
│ │ ├── test-env-cfg.sh
│ │ ├── test-framework.sh
│ │ ├── validate_last_exit.ps1
│ │ ├── vcvarsall.ps1
│ │ └── windows_test_setup.ps1
│ ├── setup-env.bat
│ ├── setup-env.csh
│ ├── setup-env.fish
│ ├── setup-env.ps1
│ ├── setup-env.sh
│ ├── setup-tutorial-env.sh
│ ├── spack-completion.bash
│ ├── spack-completion.fish
│ └── templates/
│ ├── bootstrap/
│ │ └── spack.yaml
│ ├── container/
│ │ ├── Dockerfile
│ │ ├── almalinux_8.dockerfile
│ │ ├── almalinux_9.dockerfile
│ │ ├── alpine_3.dockerfile
│ │ ├── amazonlinux_2.dockerfile
│ │ ├── bootstrap-base.dockerfile
│ │ ├── centos_stream9.dockerfile
│ │ ├── fedora.dockerfile
│ │ ├── leap-15.dockerfile
│ │ ├── rockylinux_8.dockerfile
│ │ ├── rockylinux_9.dockerfile
│ │ ├── singularity.def
│ │ ├── ubuntu_2004.dockerfile
│ │ └── ubuntu_2404.dockerfile
│ ├── depfile/
│ │ └── Makefile
│ ├── misc/
│ │ ├── buildcache_index.html
│ │ └── graph.dot
│ ├── mock-repository/
│ │ ├── build_system.pyt
│ │ └── package.pyt
│ ├── modules/
│ │ ├── modulefile.lua
│ │ └── modulefile.tcl
│ └── reports/
│ ├── cdash/
│ │ ├── Build.xml
│ │ ├── Configure.xml
│ │ ├── Site.xml
│ │ ├── Test.xml
│ │ ├── Testing.xml
│ │ └── Update.xml
│ └── junit.xml
└── var/
└── spack/
├── gpg/
│ └── README.md
├── gpg.mock/
│ ├── README.md
│ ├── data/
│ │ ├── content.txt
│ │ └── content.txt.asc
│ └── keys/
│ ├── external.key
│ └── package-signing-key
├── test_repos/
│ └── spack_repo/
│ ├── builder_test/
│ │ ├── packages/
│ │ │ ├── builder_and_mixins/
│ │ │ │ └── package.py
│ │ │ ├── callbacks/
│ │ │ │ └── package.py
│ │ │ ├── custom_phases/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── gnuconfig/
│ │ │ │ └── package.py
│ │ │ ├── inheritance/
│ │ │ │ └── package.py
│ │ │ ├── inheritance_only_package/
│ │ │ │ └── package.py
│ │ │ ├── old_style_autotools/
│ │ │ │ └── package.py
│ │ │ ├── old_style_custom_phases/
│ │ │ │ └── package.py
│ │ │ └── old_style_derived/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── builtin_mock/
│ │ ├── build_systems/
│ │ │ ├── __init__.py
│ │ │ ├── _checks.py
│ │ │ ├── autotools.py
│ │ │ ├── bundle.py
│ │ │ ├── cmake.py
│ │ │ ├── compiler.py
│ │ │ ├── generic.py
│ │ │ ├── gnu.py
│ │ │ ├── makefile.py
│ │ │ ├── perl.py
│ │ │ ├── python.py
│ │ │ ├── sourceforge.py
│ │ │ └── sourceware.py
│ │ ├── packages/
│ │ │ ├── _7zip/
│ │ │ │ └── package.py
│ │ │ ├── _7zip_dependent/
│ │ │ │ └── package.py
│ │ │ ├── adios2/
│ │ │ │ └── package.py
│ │ │ ├── archive_files/
│ │ │ │ └── package.py
│ │ │ ├── ascent/
│ │ │ │ └── package.py
│ │ │ ├── attributes_foo/
│ │ │ │ └── package.py
│ │ │ ├── attributes_foo_app/
│ │ │ │ └── package.py
│ │ │ ├── autotools_conditional_variants_test/
│ │ │ │ └── package.py
│ │ │ ├── autotools_config_replacement/
│ │ │ │ └── package.py
│ │ │ ├── binutils_for_test/
│ │ │ │ └── package.py
│ │ │ ├── boost/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_a/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_b/
│ │ │ │ └── package.py
│ │ │ ├── both_link_and_build_dep_c/
│ │ │ │ └── package.py
│ │ │ ├── bowtie/
│ │ │ │ └── package.py
│ │ │ ├── brillig/
│ │ │ │ └── package.py
│ │ │ ├── build_env_compiler_var_a/
│ │ │ │ └── package.py
│ │ │ ├── build_env_compiler_var_b/
│ │ │ │ └── package.py
│ │ │ ├── build_error/
│ │ │ │ └── package.py
│ │ │ ├── build_warnings/
│ │ │ │ └── package.py
│ │ │ ├── bzip2/
│ │ │ │ └── package.py
│ │ │ ├── callpath/
│ │ │ │ └── package.py
│ │ │ ├── canfail/
│ │ │ │ └── package.py
│ │ │ ├── client_not_foo/
│ │ │ │ └── package.py
│ │ │ ├── cmake/
│ │ │ │ └── package.py
│ │ │ ├── cmake_client/
│ │ │ │ └── package.py
│ │ │ ├── cmake_client_inheritor/
│ │ │ │ └── package.py
│ │ │ ├── cmake_conditional_variants_test/
│ │ │ │ └── package.py
│ │ │ ├── compiler_with_deps/
│ │ │ │ └── package.py
│ │ │ ├── compiler_wrapper/
│ │ │ │ ├── cc.sh
│ │ │ │ └── package.py
│ │ │ ├── conditional_constrained_dependencies/
│ │ │ │ └── package.py
│ │ │ ├── conditional_languages/
│ │ │ │ └── package.py
│ │ │ ├── conditional_provider/
│ │ │ │ └── package.py
│ │ │ ├── conditional_values_in_variant/
│ │ │ │ └── package.py
│ │ │ ├── conditional_variant_pkg/
│ │ │ │ └── package.py
│ │ │ ├── conditional_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_extends_direct_dep/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_extends_transitive_dep/
│ │ │ │ └── package.py
│ │ │ ├── conditionally_patch_dependency/
│ │ │ │ ├── package.py
│ │ │ │ └── uuid.patch
│ │ │ ├── configure_warning/
│ │ │ │ └── package.py
│ │ │ ├── conflict/
│ │ │ │ └── package.py
│ │ │ ├── conflict_parent/
│ │ │ │ └── package.py
│ │ │ ├── conflict_virtual/
│ │ │ │ └── package.py
│ │ │ ├── conflicting_dependent/
│ │ │ │ └── package.py
│ │ │ ├── corge/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_bottom/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_middle/
│ │ │ │ └── package.py
│ │ │ ├── cumulative_vrange_root/
│ │ │ │ └── package.py
│ │ │ ├── cvs_test/
│ │ │ │ └── package.py
│ │ │ ├── define_cmake_prefix_paths/
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_mid1/
│ │ │ │ ├── mid1.patch
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_mid2/
│ │ │ │ └── package.py
│ │ │ ├── dep_diamond_patch_top/
│ │ │ │ ├── package.py
│ │ │ │ └── top.patch
│ │ │ ├── dep_with_variants/
│ │ │ │ └── package.py
│ │ │ ├── dep_with_variants_if_develop/
│ │ │ │ └── package.py
│ │ │ ├── dep_with_variants_if_develop_root/
│ │ │ │ └── package.py
│ │ │ ├── depb/
│ │ │ │ └── package.py
│ │ │ ├── dependency_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── dependency_install/
│ │ │ │ └── package.py
│ │ │ ├── dependency_mv/
│ │ │ │ └── package.py
│ │ │ ├── dependent_install/
│ │ │ │ └── package.py
│ │ │ ├── dependent_of_dev_build/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_define_cmake_prefix_paths/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_develop/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_manyvariants/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_openmpi/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_run_env/
│ │ │ │ └── package.py
│ │ │ ├── depends_on_virtual_with_abi/
│ │ │ │ └── package.py
│ │ │ ├── deprecated_client/
│ │ │ │ └── package.py
│ │ │ ├── deprecated_versions/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_dependent/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_install/
│ │ │ │ └── package.py
│ │ │ ├── dev_build_test_install_phases/
│ │ │ │ └── package.py
│ │ │ ├── develop_branch_version/
│ │ │ │ └── package.py
│ │ │ ├── develop_test/
│ │ │ │ └── package.py
│ │ │ ├── develop_test2/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_bottom/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_left/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_right/
│ │ │ │ └── package.py
│ │ │ ├── diamond_link_top/
│ │ │ │ └── package.py
│ │ │ ├── diff_test/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_virtuals_one/
│ │ │ │ └── package.py
│ │ │ ├── direct_dep_virtuals_two/
│ │ │ │ └── package.py
│ │ │ ├── direct_mpich/
│ │ │ │ └── package.py
│ │ │ ├── dla_future/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_bottom/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_left/
│ │ │ │ └── package.py
│ │ │ ├── dt_diamond_right/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild1/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild2/
│ │ │ │ └── package.py
│ │ │ ├── dtbuild3/
│ │ │ │ └── package.py
│ │ │ ├── dtlink1/
│ │ │ │ └── package.py
│ │ │ ├── dtlink2/
│ │ │ │ └── package.py
│ │ │ ├── dtlink3/
│ │ │ │ └── package.py
│ │ │ ├── dtlink4/
│ │ │ │ └── package.py
│ │ │ ├── dtlink5/
│ │ │ │ └── package.py
│ │ │ ├── dtrun1/
│ │ │ │ └── package.py
│ │ │ ├── dtrun2/
│ │ │ │ └── package.py
│ │ │ ├── dtrun3/
│ │ │ │ └── package.py
│ │ │ ├── dttop/
│ │ │ │ └── package.py
│ │ │ ├── dtuse/
│ │ │ │ └── package.py
│ │ │ ├── dual_cmake_autotools/
│ │ │ │ └── package.py
│ │ │ ├── dyninst/
│ │ │ │ └── package.py
│ │ │ ├── ecp_viz_sdk/
│ │ │ │ └── package.py
│ │ │ ├── emacs/
│ │ │ │ └── package.py
│ │ │ ├── extendee/
│ │ │ │ └── package.py
│ │ │ ├── extends_spec/
│ │ │ │ └── package.py
│ │ │ ├── extension1/
│ │ │ │ └── package.py
│ │ │ ├── extension2/
│ │ │ │ └── package.py
│ │ │ ├── external_buildable_with_variant/
│ │ │ │ └── package.py
│ │ │ ├── external_common_gdbm/
│ │ │ │ └── package.py
│ │ │ ├── external_common_openssl/
│ │ │ │ └── package.py
│ │ │ ├── external_common_perl/
│ │ │ │ └── package.py
│ │ │ ├── external_common_python/
│ │ │ │ └── package.py
│ │ │ ├── external_non_default_variant/
│ │ │ │ └── package.py
│ │ │ ├── externalmodule/
│ │ │ │ └── package.py
│ │ │ ├── externalprereq/
│ │ │ │ └── package.py
│ │ │ ├── externaltest/
│ │ │ │ └── package.py
│ │ │ ├── externaltool/
│ │ │ │ └── package.py
│ │ │ ├── externalvirtual/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit_docstring/
│ │ │ │ └── package.py
│ │ │ ├── fail_test_audit_impl/
│ │ │ │ └── package.py
│ │ │ ├── failing_build/
│ │ │ │ └── package.py
│ │ │ ├── failing_empty_install/
│ │ │ │ └── package.py
│ │ │ ├── fake/
│ │ │ │ └── package.py
│ │ │ ├── fetch_options/
│ │ │ │ └── package.py
│ │ │ ├── fftw/
│ │ │ │ └── package.py
│ │ │ ├── find_externals1/
│ │ │ │ └── package.py
│ │ │ ├── forward_multi_value/
│ │ │ │ └── package.py
│ │ │ ├── garply/
│ │ │ │ └── package.py
│ │ │ ├── gcc/
│ │ │ │ └── package.py
│ │ │ ├── gcc_runtime/
│ │ │ │ └── package.py
│ │ │ ├── git_ref_commit_dep/
│ │ │ │ └── package.py
│ │ │ ├── git_ref_package/
│ │ │ │ └── package.py
│ │ │ ├── git_sparse_a/
│ │ │ │ └── package.py
│ │ │ ├── git_sparse_b/
│ │ │ │ └── package.py
│ │ │ ├── git_sparsepaths_pkg/
│ │ │ │ └── package.py
│ │ │ ├── git_sparsepaths_version/
│ │ │ │ └── package.py
│ │ │ ├── git_svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_test/
│ │ │ │ └── package.py
│ │ │ ├── git_test_commit/
│ │ │ │ └── package.py
│ │ │ ├── git_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_url_svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── git_url_top_level/
│ │ │ │ └── package.py
│ │ │ ├── glibc/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── gmt/
│ │ │ │ └── package.py
│ │ │ ├── gmt_concrete_mv_dependency/
│ │ │ │ └── package.py
│ │ │ ├── gnuconfig/
│ │ │ │ └── package.py
│ │ │ ├── hash_test1/
│ │ │ │ ├── package.py
│ │ │ │ ├── patch1.patch
│ │ │ │ └── patch2.patch
│ │ │ ├── hash_test2/
│ │ │ │ ├── package.py
│ │ │ │ └── patch1.patch
│ │ │ ├── hash_test3/
│ │ │ │ └── package.py
│ │ │ ├── hash_test4/
│ │ │ │ └── package.py
│ │ │ ├── hdf5/
│ │ │ │ └── package.py
│ │ │ ├── hg_test/
│ │ │ │ └── package.py
│ │ │ ├── hg_top_level/
│ │ │ │ └── package.py
│ │ │ ├── hpcviewer/
│ │ │ │ └── package.py
│ │ │ ├── hwloc/
│ │ │ │ └── package.py
│ │ │ ├── hypre/
│ │ │ │ └── package.py
│ │ │ ├── impossible_concretization/
│ │ │ │ └── package.py
│ │ │ ├── indirect_mpich/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_a/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_b/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_c/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_d/
│ │ │ │ └── package.py
│ │ │ ├── installed_deps_e/
│ │ │ │ └── package.py
│ │ │ ├── intel_oneapi_compilers/
│ │ │ │ └── package.py
│ │ │ ├── intel_parallel_studio/
│ │ │ │ └── package.py
│ │ │ ├── invalid_github_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_github_pull_commits_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_gitlab_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── invalid_selfhosted_gitlab_patch_url/
│ │ │ │ └── package.py
│ │ │ ├── leaf_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── libceed/
│ │ │ │ └── package.py
│ │ │ ├── libdwarf/
│ │ │ │ └── package.py
│ │ │ ├── libelf/
│ │ │ │ ├── local.patch
│ │ │ │ └── package.py
│ │ │ ├── libtool_deletion/
│ │ │ │ └── package.py
│ │ │ ├── libtool_installation/
│ │ │ │ └── package.py
│ │ │ ├── libxsmm/
│ │ │ │ └── package.py
│ │ │ ├── licenses_1/
│ │ │ │ └── package.py
│ │ │ ├── llvm/
│ │ │ │ └── package.py
│ │ │ ├── llvm_client/
│ │ │ │ └── package.py
│ │ │ ├── long_boost_dependency/
│ │ │ │ └── package.py
│ │ │ ├── low_priority_provider/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_1/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_2/
│ │ │ │ └── package.py
│ │ │ ├── maintainers_3/
│ │ │ │ └── package.py
│ │ │ ├── many_conditional_deps/
│ │ │ │ └── package.py
│ │ │ ├── many_virtual_consumer/
│ │ │ │ └── package.py
│ │ │ ├── manyvariants/
│ │ │ │ └── package.py
│ │ │ ├── mesa/
│ │ │ │ └── package.py
│ │ │ ├── middle_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── mirror_gnu/
│ │ │ │ └── package.py
│ │ │ ├── mirror_gnu_broken/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceforge/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceforge_broken/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceware/
│ │ │ │ └── package.py
│ │ │ ├── mirror_sourceware_broken/
│ │ │ │ ├── mirror-gnu-broken/
│ │ │ │ │ └── package.py
│ │ │ │ └── package.py
│ │ │ ├── missing_dependency/
│ │ │ │ └── package.py
│ │ │ ├── mixedversions/
│ │ │ │ └── package.py
│ │ │ ├── mixing_parent/
│ │ │ │ └── package.py
│ │ │ ├── modifies_run_env/
│ │ │ │ └── package.py
│ │ │ ├── module_long_help/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_append/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_prepend/
│ │ │ │ └── package.py
│ │ │ ├── module_manpath_setenv/
│ │ │ │ └── package.py
│ │ │ ├── module_path_separator/
│ │ │ │ └── package.py
│ │ │ ├── module_setenv_raw/
│ │ │ │ └── package.py
│ │ │ ├── mpi/
│ │ │ │ └── package.py
│ │ │ ├── mpich/
│ │ │ │ └── package.py
│ │ │ ├── mpich2/
│ │ │ │ └── package.py
│ │ │ ├── mpileaks/
│ │ │ │ └── package.py
│ │ │ ├── multi_provider_mpi/
│ │ │ │ └── package.py
│ │ │ ├── multimethod/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_base/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_diamond/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_diamond_parent/
│ │ │ │ └── package.py
│ │ │ ├── multimethod_inheritor/
│ │ │ │ └── package.py
│ │ │ ├── multimodule_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant_multi_defaults/
│ │ │ │ └── package.py
│ │ │ ├── multivalue_variant_multi_defaults_dependent/
│ │ │ │ └── package.py
│ │ │ ├── mvapich2/
│ │ │ │ └── package.py
│ │ │ ├── mvdefaults/
│ │ │ │ └── package.py
│ │ │ ├── needs_relocation/
│ │ │ │ └── package.py
│ │ │ ├── needs_text_relocation/
│ │ │ │ └── package.py
│ │ │ ├── netlib_blas/
│ │ │ │ └── package.py
│ │ │ ├── netlib_lapack/
│ │ │ │ └── package.py
│ │ │ ├── netlib_scalapack/
│ │ │ │ └── package.py
│ │ │ ├── ninja/
│ │ │ │ └── package.py
│ │ │ ├── no_redistribute/
│ │ │ │ └── package.py
│ │ │ ├── no_redistribute_dependent/
│ │ │ │ └── package.py
│ │ │ ├── no_url_or_version/
│ │ │ │ └── package.py
│ │ │ ├── non_existing_conditional_dep/
│ │ │ │ └── package.py
│ │ │ ├── nosource/
│ │ │ │ └── package.py
│ │ │ ├── nosource_bundle/
│ │ │ │ └── package.py
│ │ │ ├── nosource_install/
│ │ │ │ └── package.py
│ │ │ ├── noversion/
│ │ │ │ └── package.py
│ │ │ ├── noversion_bundle/
│ │ │ │ └── package.py
│ │ │ ├── old_external/
│ │ │ │ └── package.py
│ │ │ ├── old_sbang/
│ │ │ │ └── package.py
│ │ │ ├── openblas/
│ │ │ │ └── package.py
│ │ │ ├── openblas_with_lapack/
│ │ │ │ └── package.py
│ │ │ ├── openmpi/
│ │ │ │ └── package.py
│ │ │ ├── openssl/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test_2/
│ │ │ │ └── package.py
│ │ │ ├── optional_dep_test_3/
│ │ │ │ └── package.py
│ │ │ ├── othervirtual/
│ │ │ │ └── package.py
│ │ │ ├── override_context_templates/
│ │ │ │ └── package.py
│ │ │ ├── override_module_templates/
│ │ │ │ └── package.py
│ │ │ ├── package_base_extendee/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_a/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_b/
│ │ │ │ └── package.py
│ │ │ ├── parallel_package_c/
│ │ │ │ └── package.py
│ │ │ ├── paraview/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo_bar/
│ │ │ │ └── package.py
│ │ │ ├── parent_foo_bar_fee/
│ │ │ │ └── package.py
│ │ │ ├── patch/
│ │ │ │ ├── bar.patch
│ │ │ │ ├── baz.patch
│ │ │ │ ├── biz.patch
│ │ │ │ ├── foo.patch
│ │ │ │ └── package.py
│ │ │ ├── patch_a_dependency/
│ │ │ │ ├── libelf.patch
│ │ │ │ └── package.py
│ │ │ ├── patch_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── patch_several_dependencies/
│ │ │ │ ├── bar.patch
│ │ │ │ ├── baz.patch
│ │ │ │ ├── foo.patch
│ │ │ │ └── package.py
│ │ │ ├── patchelf/
│ │ │ │ └── package.py
│ │ │ ├── perl/
│ │ │ │ └── package.py
│ │ │ ├── perl_extension/
│ │ │ │ └── package.py
│ │ │ ├── pkg_a/
│ │ │ │ └── package.py
│ │ │ ├── pkg_b/
│ │ │ │ └── package.py
│ │ │ ├── pkg_c/
│ │ │ │ └── package.py
│ │ │ ├── pkg_e/
│ │ │ │ └── package.py
│ │ │ ├── pkg_with_c_link_dep/
│ │ │ │ └── package.py
│ │ │ ├── pkg_with_zlib_dep/
│ │ │ │ └── package.py
│ │ │ ├── placeholder/
│ │ │ │ └── package.py
│ │ │ ├── preferred_test/
│ │ │ │ └── package.py
│ │ │ ├── printing_package/
│ │ │ │ └── package.py
│ │ │ ├── py_extension1/
│ │ │ │ └── package.py
│ │ │ ├── py_extension2/
│ │ │ │ └── package.py
│ │ │ ├── py_extension3/
│ │ │ │ └── package.py
│ │ │ ├── py_numpy/
│ │ │ │ └── package.py
│ │ │ ├── py_pip/
│ │ │ │ └── package.py
│ │ │ ├── py_test_callback/
│ │ │ │ └── package.py
│ │ │ ├── py_wheel/
│ │ │ │ └── package.py
│ │ │ ├── python/
│ │ │ │ └── package.py
│ │ │ ├── python_venv/
│ │ │ │ └── package.py
│ │ │ ├── quantum_espresso/
│ │ │ │ └── package.py
│ │ │ ├── quux/
│ │ │ │ └── package.py
│ │ │ ├── raiser/
│ │ │ │ └── package.py
│ │ │ ├── redistribute_x/
│ │ │ │ └── package.py
│ │ │ ├── redistribute_y/
│ │ │ │ └── package.py
│ │ │ ├── requires_clang/
│ │ │ │ └── package.py
│ │ │ ├── requires_clang_or_gcc/
│ │ │ │ └── package.py
│ │ │ ├── requires_virtual/
│ │ │ │ └── package.py
│ │ │ ├── root/
│ │ │ │ └── package.py
│ │ │ ├── root_adds_virtual/
│ │ │ │ └── package.py
│ │ │ ├── ruff/
│ │ │ │ └── package.py
│ │ │ ├── second_dependency_foo_bar_fee/
│ │ │ │ └── package.py
│ │ │ ├── shell_a/
│ │ │ │ └── package.py
│ │ │ ├── shell_b/
│ │ │ │ └── package.py
│ │ │ ├── simple_inheritance/
│ │ │ │ └── package.py
│ │ │ ├── simple_resource/
│ │ │ │ └── package.py
│ │ │ ├── simple_standalone_test/
│ │ │ │ └── package.py
│ │ │ ├── single_language_virtual/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant_dependent/
│ │ │ │ └── package.py
│ │ │ ├── singlevalue_variant_dependent_type/
│ │ │ │ └── package.py
│ │ │ ├── sombrero/
│ │ │ │ └── package.py
│ │ │ ├── some_virtual_mv/
│ │ │ │ └── package.py
│ │ │ ├── some_virtual_preferred/
│ │ │ │ └── package.py
│ │ │ ├── splice_a/
│ │ │ │ └── package.py
│ │ │ ├── splice_depends_on_t/
│ │ │ │ └── package.py
│ │ │ ├── splice_h/
│ │ │ │ └── package.py
│ │ │ ├── splice_t/
│ │ │ │ └── package.py
│ │ │ ├── splice_vh/
│ │ │ │ └── package.py
│ │ │ ├── splice_vt/
│ │ │ │ └── package.py
│ │ │ ├── splice_z/
│ │ │ │ └── package.py
│ │ │ ├── sticky_variant/
│ │ │ │ └── package.py
│ │ │ ├── sticky_variant_dependent/
│ │ │ │ └── package.py
│ │ │ ├── svn_test/
│ │ │ │ └── package.py
│ │ │ ├── svn_top_level/
│ │ │ │ └── package.py
│ │ │ ├── symly/
│ │ │ │ └── package.py
│ │ │ ├── test_build_callbacks/
│ │ │ │ └── package.py
│ │ │ ├── test_dep_with_imposed_conditions/
│ │ │ │ └── package.py
│ │ │ ├── test_dependency/
│ │ │ │ └── package.py
│ │ │ ├── test_error/
│ │ │ │ └── package.py
│ │ │ ├── test_fail/
│ │ │ │ └── package.py
│ │ │ ├── test_install_callbacks/
│ │ │ │ └── package.py
│ │ │ ├── transitive_conditional_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── trigger_and_effect_deps/
│ │ │ │ └── package.py
│ │ │ ├── trigger_external_non_default_variant/
│ │ │ │ └── package.py
│ │ │ ├── trilinos/
│ │ │ │ └── package.py
│ │ │ ├── trivial_install_test_dependent/
│ │ │ │ └── package.py
│ │ │ ├── trivial_install_test_package/
│ │ │ │ └── package.py
│ │ │ ├── trivial_pkg_with_valid_hash/
│ │ │ │ └── package.py
│ │ │ ├── trivial_smoke_test/
│ │ │ │ ├── package.py
│ │ │ │ └── test/
│ │ │ │ └── test_file.in
│ │ │ ├── unconstrainable_conflict/
│ │ │ │ └── package.py
│ │ │ ├── unsat_provider/
│ │ │ │ └── package.py
│ │ │ ├── unsat_virtual_dependency/
│ │ │ │ └── package.py
│ │ │ ├── url_list_test/
│ │ │ │ └── package.py
│ │ │ ├── url_only_override/
│ │ │ │ └── package.py
│ │ │ ├── url_only_override_with_gaps/
│ │ │ │ └── package.py
│ │ │ ├── url_override/
│ │ │ │ └── package.py
│ │ │ ├── url_test/
│ │ │ │ └── package.py
│ │ │ ├── v1_consumer/
│ │ │ │ └── package.py
│ │ │ ├── v1_provider/
│ │ │ │ └── package.py
│ │ │ ├── variant_function_validator/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_a/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_b/
│ │ │ │ └── package.py
│ │ │ ├── variant_on_dependency_condition_root/
│ │ │ │ └── package.py
│ │ │ ├── variant_values/
│ │ │ │ └── package.py
│ │ │ ├── variant_values_override/
│ │ │ │ └── package.py
│ │ │ ├── vdefault_or_external/
│ │ │ │ └── package.py
│ │ │ ├── vdefault_or_external_root/
│ │ │ │ └── package.py
│ │ │ ├── vendorsb/
│ │ │ │ └── package.py
│ │ │ ├── version_test_dependency_preferred/
│ │ │ │ └── package.py
│ │ │ ├── version_test_pkg/
│ │ │ │ └── package.py
│ │ │ ├── version_test_root/
│ │ │ │ └── package.py
│ │ │ ├── view_dir/
│ │ │ │ └── package.py
│ │ │ ├── view_file/
│ │ │ │ └── package.py
│ │ │ ├── view_ignore_conflict/
│ │ │ │ └── package.py
│ │ │ ├── view_not_ignored/
│ │ │ │ └── package.py
│ │ │ ├── view_resolve_conflict_middle/
│ │ │ │ └── package.py
│ │ │ ├── view_resolve_conflict_top/
│ │ │ │ └── package.py
│ │ │ ├── view_symlinked_dir/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_1/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_2/
│ │ │ │ └── package.py
│ │ │ ├── virtual_abi_multi/
│ │ │ │ └── package.py
│ │ │ ├── virtual_with_abi/
│ │ │ │ └── package.py
│ │ │ ├── virtual_with_versions/
│ │ │ │ └── package.py
│ │ │ ├── vtk_m/
│ │ │ │ └── package.py
│ │ │ ├── when_directives_false/
│ │ │ │ └── package.py
│ │ │ ├── when_directives_true/
│ │ │ │ └── package.py
│ │ │ ├── with_constraint_met/
│ │ │ │ └── package.py
│ │ │ ├── wrong_variant_in_conflicts/
│ │ │ │ └── package.py
│ │ │ ├── wrong_variant_in_depends_on/
│ │ │ │ └── package.py
│ │ │ ├── zlib/
│ │ │ │ ├── package.py
│ │ │ │ └── w_patch.patch
│ │ │ └── zmpi/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── compiler_runtime_test/
│ │ ├── packages/
│ │ │ ├── pkg_a/
│ │ │ │ └── package.py
│ │ │ └── pkg_b/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── diff/
│ │ ├── packages/
│ │ │ ├── i1/
│ │ │ │ └── package.py
│ │ │ ├── i2/
│ │ │ │ └── package.py
│ │ │ ├── p1/
│ │ │ │ └── package.py
│ │ │ ├── p2/
│ │ │ │ └── package.py
│ │ │ ├── p3/
│ │ │ │ └── package.py
│ │ │ └── p4/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── duplicates_test/
│ │ ├── packages/
│ │ │ ├── cycle_a/
│ │ │ │ └── package.py
│ │ │ ├── cycle_b/
│ │ │ │ └── package.py
│ │ │ ├── gmake/
│ │ │ │ └── package.py
│ │ │ ├── hdf5/
│ │ │ │ └── package.py
│ │ │ ├── pinned_gmake/
│ │ │ │ └── package.py
│ │ │ ├── pkg_config/
│ │ │ │ └── package.py
│ │ │ ├── py_floating/
│ │ │ │ └── package.py
│ │ │ ├── py_numpy/
│ │ │ │ └── package.py
│ │ │ ├── py_setuptools/
│ │ │ │ └── package.py
│ │ │ ├── py_shapely/
│ │ │ │ └── package.py
│ │ │ ├── python/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_a/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_b/
│ │ │ │ └── package.py
│ │ │ ├── unify_build_deps_c/
│ │ │ │ └── package.py
│ │ │ └── virtual_build/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── edges_test/
│ │ ├── packages/
│ │ │ ├── blas_only_client/
│ │ │ │ └── package.py
│ │ │ ├── conditional_edge/
│ │ │ │ └── package.py
│ │ │ ├── openblas/
│ │ │ │ └── package.py
│ │ │ └── zlib/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── find/
│ │ ├── packages/
│ │ │ ├── a0/
│ │ │ │ └── package.py
│ │ │ ├── b0/
│ │ │ │ └── package.py
│ │ │ ├── c0/
│ │ │ │ └── package.py
│ │ │ ├── d0/
│ │ │ │ └── package.py
│ │ │ └── e0/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── flags_test/
│ │ ├── packages/
│ │ │ ├── t/
│ │ │ │ └── package.py
│ │ │ ├── u/
│ │ │ │ └── package.py
│ │ │ ├── v/
│ │ │ │ └── package.py
│ │ │ ├── w/
│ │ │ │ └── package.py
│ │ │ ├── x/
│ │ │ │ └── package.py
│ │ │ └── y/
│ │ │ └── package.py
│ │ └── repo.yaml
│ ├── requirements_test/
│ │ ├── packages/
│ │ │ ├── t/
│ │ │ │ └── package.py
│ │ │ ├── u/
│ │ │ │ └── package.py
│ │ │ ├── v/
│ │ │ │ └── package.py
│ │ │ ├── x/
│ │ │ │ └── package.py
│ │ │ └── y/
│ │ │ └── package.py
│ │ └── repo.yaml
│ └── tutorial/
│ ├── packages/
│ │ ├── armadillo/
│ │ │ ├── package.py
│ │ │ └── undef_linux.patch
│ │ ├── elpa/
│ │ │ └── package.py
│ │ ├── hdf5/
│ │ │ ├── h5f90global-mult-obj-same-equivalence-same-common-block.patch
│ │ │ ├── h5public-skip-mpicxx.patch
│ │ │ ├── hdf5_1.8_gcc10.patch
│ │ │ ├── package.py
│ │ │ ├── pre-c99-comments.patch
│ │ │ └── test/
│ │ │ ├── dump.out
│ │ │ └── spack.h5
│ │ ├── mpich/
│ │ │ ├── mpich32_clang.patch
│ │ │ └── package.py
│ │ └── netlib_lapack/
│ │ ├── ibm-xl.patch
│ │ ├── package.py
│ │ ├── testing.patch
│ │ └── undefined_declarations.patch
│ └── repo.yaml
└── vendoring/
├── patches/
│ ├── altgraph-version.patch
│ ├── distro.patch
│ ├── jsonschema.attr.patch
│ ├── jsonschema.patch
│ ├── jsonschema.vendoring.patch
│ └── ruamelyaml.patch
└── vendor.txt
Showing preview only (1,308K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (14977 symbols across 1089 files)
FILE: .ci/gitlab/forward_dotenv_variables.py
function read_dotenv (line 7) | def read_dotenv(file_name: str) -> Dict[str, str]:
FILE: .github/workflows/bin/canonicalize.py
function run_git_command (line 14) | def run_git_command(*args: str, dir: str) -> None:
function run (line 37) | def run(root: str, output_dir: str) -> None:
function compare (line 67) | def compare(
FILE: .github/workflows/bin/format-rst.py
function _warning (line 65) | def _warning(msg: str) -> str:
class Warning (line 69) | class Warning:
method __init__ (line 70) | def __init__(self, path: str, line: int, message: str) -> None:
method __str__ (line 75) | def __str__(self) -> str:
class CodeBlockWarning (line 79) | class CodeBlockWarning(Warning):
method __init__ (line 80) | def __init__(self, path: str, line: int, message: str, diff: str):
method __str__ (line 83) | def __str__(self) -> str:
class ValidationWarning (line 87) | class ValidationWarning(Warning):
class SphinxCodeBlock (line 91) | class SphinxCodeBlock(Directive):
method run (line 108) | def run(self) -> List[nodes.Node]:
class ParagraphInfo (line 119) | class ParagraphInfo:
method __init__ (line 125) | def __init__(self, line: int, src: str) -> None:
function _is_node_in_table (line 132) | def _is_node_in_table(node: nodes.Node) -> bool:
function _validate_schema (line 141) | def _validate_schema(data: object) -> None:
function _format_code_blocks (line 149) | def _format_code_blocks(document: nodes.document, path: str) -> List[War...
function _format_paragraphs (line 207) | def _format_paragraphs(document: nodes.document, path: str, src_lines: L...
function reformat_rst_file (line 245) | def reformat_rst_file(path: str, warnings: List[Warning]) -> bool:
function main (line 266) | def main(*files: str) -> None:
FILE: bin/haspywin.py
function getpywin (line 8) | def getpywin():
FILE: lib/spack/docs/_static/js/versions.js
function onSelectorSwitch (line 3) | function onSelectorSwitch(event) {
function initVersionSelector (line 9) | function initVersionSelector(config) {
function initSearch (line 33) | function initSearch(currentVersion) {
FILE: lib/spack/docs/conf.py
class NoWhitespaceHtmlFormatter (line 112) | class NoWhitespaceHtmlFormatter(HtmlFormatter):
method _get_css_classes (line 115) | def _get_css_classes(self, ttype):
class CustomPygmentsBridge (line 121) | class CustomPygmentsBridge(PygmentsBridge):
method get_formatter (line 122) | def get_formatter(self, **options):
class SpecLexer (line 139) | class SpecLexer(RegexLexer):
class PatchedPythonDomain (line 213) | class PatchedPythonDomain(PythonDomain):
method resolve_xref (line 214) | def resolve_xref(self, env, fromdocname, builder, type, target, node, ...
class NoTabExpansionRSTParser (line 224) | class NoTabExpansionRSTParser(RSTParser):
method parse (line 225) | def parse(self, inputstring, document):
function add_package_api_version_line (line 232) | def add_package_api_version_line(app, what, name: str, obj, options, lin...
function skip_member (line 244) | def skip_member(app, what, name, obj, skip, options):
function setup (line 251) | def setup(sphinx):
FILE: lib/spack/spack/__init__.py
function __try_int (line 30) | def __try_int(v):
function get_spack_commit (line 42) | def get_spack_commit() -> Optional[str]:
function get_version (line 72) | def get_version() -> str:
function get_short_version (line 85) | def get_short_version() -> str:
FILE: lib/spack/spack/archspec.py
function microarchitecture_flags (line 11) | def microarchitecture_flags(spec: spack.spec.Spec, language: str) -> str:
function microarchitecture_flags_from_target (line 40) | def microarchitecture_flags_from_target(
FILE: lib/spack/spack/audit.py
class Error (line 73) | class Error:
method __init__ (line 76) | def __init__(self, summary, details):
method __str__ (line 80) | def __str__(self):
method __eq__ (line 85) | def __eq__(self, other):
method __hash__ (line 90) | def __hash__(self):
class AuditClass (line 95) | class AuditClass(collections.abc.Sequence):
method __init__ (line 96) | def __init__(self, group, tag, description, kwargs):
method __call__ (line 124) | def __call__(self, func):
method __getitem__ (line 127) | def __getitem__(self, item):
method __len__ (line 130) | def __len__(self):
method run (line 133) | def run(self, **kwargs):
function run_group (line 146) | def run_group(group, **kwargs):
function run_check (line 163) | def run_check(tag, **kwargs):
function _search_duplicate_compilers (line 195) | def _search_duplicate_compilers(error_cls):
function _search_duplicate_specs_in_externals (line 227) | def _search_duplicate_specs_in_externals(error_cls):
function _avoid_mismatched_variants (line 268) | def _avoid_mismatched_variants(error_cls):
function _wrongly_named_spec (line 309) | def _wrongly_named_spec(error_cls):
function _ensure_all_virtual_packages_have_default_providers (line 332) | def _ensure_all_virtual_packages_have_default_providers(error_cls):
function _ensure_no_folders_without_package_py (line 348) | def _ensure_no_folders_without_package_py(error_cls):
function _make_config_error (line 368) | def _make_config_error(config_data, summary, error_cls):
function _check_build_test_callbacks (line 409) | def _check_build_test_callbacks(pkgs, error_cls):
function _directives_can_be_evaluated (line 431) | def _directives_can_be_evaluated(pkgs, error_cls):
function _check_patch_urls (line 447) | def _check_patch_urls(pkgs, error_cls):
function _search_for_reserved_attributes_names_in_packages (line 507) | def _search_for_reserved_attributes_names_in_packages(pkgs, error_cls):
function _ensure_all_package_names_are_lowercase (line 539) | def _ensure_all_package_names_are_lowercase(pkgs, error_cls):
function _ensure_packages_are_pickeleable (line 555) | def _ensure_packages_are_pickeleable(pkgs, error_cls):
function _ensure_packages_are_unparseable (line 571) | def _ensure_packages_are_unparseable(pkgs, error_cls):
function _ensure_all_versions_can_produce_a_fetcher (line 596) | def _ensure_all_versions_can_produce_a_fetcher(pkgs, error_cls):
function _ensure_docstring_and_no_fixme (line 614) | def _ensure_docstring_and_no_fixme(pkgs, error_cls):
function _ensure_all_packages_use_sha256_checksums (line 646) | def _ensure_all_packages_use_sha256_checksums(pkgs, error_cls):
function _ensure_env_methods_are_ported_to_builders (line 683) | def _ensure_env_methods_are_ported_to_builders(pkgs, error_cls):
class DeprecatedMagicGlobals (line 714) | class DeprecatedMagicGlobals(ast.NodeVisitor):
method __init__ (line 715) | def __init__(self, magic_globals: Iterable[str]):
method descend_in_function_def (line 731) | def descend_in_function_def(self, node: ast.AST) -> None:
method generic_visit (line 743) | def generic_visit(self, node: ast.AST) -> None:
function _uses_deprecated_globals (line 768) | def _uses_deprecated_globals(pkgs, error_cls):
function _ensure_test_docstring (line 797) | def _ensure_test_docstring(pkgs, error_cls):
function _ensure_test_implemented (line 837) | def _ensure_test_implemented(pkgs, error_cls):
function _linting_package_file (line 880) | def _linting_package_file(pkgs, error_cls):
function _variant_issues_in_directives (line 906) | def _variant_issues_in_directives(pkgs, error_cls):
function _issues_in_depends_on_directive (line 998) | def _issues_in_depends_on_directive(pkgs, error_cls):
function _ensure_variant_defaults_are_parsable (line 1088) | def _ensure_variant_defaults_are_parsable(pkgs, error_cls):
function _ensure_variants_have_descriptions (line 1126) | def _ensure_variants_have_descriptions(pkgs, error_cls):
function _version_constraints_are_satisfiable_by_some_version_in_repo (line 1141) | def _version_constraints_are_satisfiable_by_some_version_in_repo(pkgs, e...
function _issues_in_directive_constraint (line 1191) | def _issues_in_directive_constraint(pkg, constraint, *, directive, error...
function _analyze_variants_in_directive (line 1216) | def _analyze_variants_in_directive(pkg, constraint, *, directive, error_...
function _analize_propagated_deps_in_directive (line 1248) | def _analize_propagated_deps_in_directive(
function _named_specs_in_when_arguments (line 1261) | def _named_specs_in_when_arguments(pkgs, error_cls):
function packages_with_detection_tests (line 1331) | def packages_with_detection_tests():
function _test_detection_by_executable (line 1350) | def _test_detection_by_executable(pkgs, debug_log, error_cls):
FILE: lib/spack/spack/binary_distribution.py
class BuildCacheDatabase (line 102) | class BuildCacheDatabase(spack.database.Database):
method __init__ (line 112) | def __init__(self, root):
method _handle_old_db_versions_read (line 117) | def _handle_old_db_versions_read(self, check, db, *, reindex: bool):
class FetchCacheError (line 125) | class FetchCacheError(Exception):
method __init__ (line 128) | def __init__(self, errors):
class BinaryCacheIndex (line 147) | class BinaryCacheIndex:
method __init__ (line 162) | def __init__(self, cache_root: Optional[str] = None):
method _init_local_index_cache (line 188) | def _init_local_index_cache(self):
method _write_local_index_cache (line 198) | def _write_local_index_cache(self):
method regenerate_spec_cache (line 204) | def regenerate_spec_cache(self, clear_existing=False):
method _associate_built_specs_with_mirror (line 226) | def _associate_built_specs_with_mirror(self, cache_key, mirror_metadat...
method get_all_built_specs (line 257) | def get_all_built_specs(self) -> List[spack.spec.Spec]:
method find_built_spec (line 261) | def find_built_spec(self, spec: spack.spec.Spec) -> List[MirrorMetadata]:
method find_by_hash (line 275) | def find_by_hash(self, dag_hash: str) -> List[MirrorMetadata]:
method update_spec (line 283) | def update_spec(self, spec: spack.spec.Spec, found_list: List[MirrorMe...
method update (line 295) | def update(self, with_cooldown: bool = False) -> None:
method _fetch_and_cache_index (line 442) | def _fetch_and_cache_index(self, mirror_metadata: MirrorMetadata, cach...
function binary_index_location (line 502) | def binary_index_location():
function compute_hash (line 512) | def compute_hash(data):
function buildinfo_file_name (line 518) | def buildinfo_file_name(prefix):
function read_buildinfo_file (line 523) | def read_buildinfo_file(prefix):
function file_matches (line 529) | def file_matches(f: IO[bytes], regex: spack.llnl.util.lang.PatternBytes)...
function specs_to_relocate (line 536) | def specs_to_relocate(spec: spack.spec.Spec) -> List[spack.spec.Spec]:
function get_buildinfo_dict (line 550) | def get_buildinfo_dict(spec):
function buildcache_relative_keys_path (line 565) | def buildcache_relative_keys_path(layout_version: int = CURRENT_BUILD_CA...
function buildcache_relative_keys_url (line 570) | def buildcache_relative_keys_url(layout_version: int = CURRENT_BUILD_CAC...
function buildcache_relative_specs_path (line 575) | def buildcache_relative_specs_path(layout_version: int = CURRENT_BUILD_C...
function buildcache_relative_specs_url (line 580) | def buildcache_relative_specs_url(layout_version: int = CURRENT_BUILD_CA...
function buildcache_relative_blobs_path (line 585) | def buildcache_relative_blobs_path(layout_version: int = CURRENT_BUILD_C...
function buildcache_relative_blobs_url (line 590) | def buildcache_relative_blobs_url(layout_version: int = CURRENT_BUILD_CA...
function buildcache_relative_index_path (line 595) | def buildcache_relative_index_path(layout_version: int = CURRENT_BUILD_C...
function buildcache_relative_index_url (line 600) | def buildcache_relative_index_url(layout_version: int = CURRENT_BUILD_CA...
function warn_v2_layout (line 606) | def warn_v2_layout(mirror_url: str, action: str) -> bool:
function select_signing_key (line 628) | def select_signing_key() -> str:
function _push_index (line 642) | def _push_index(db: BuildCacheDatabase, temp_dir: str, cache_prefix: str...
function _read_specs_and_push_index (line 659) | def _read_specs_and_push_index(
function _url_generate_package_index (line 710) | def _url_generate_package_index(
function generate_key_index (line 762) | def generate_key_index(mirror_url: str, tmpdir: str) -> None:
class FileTypes (line 805) | class FileTypes:
function file_type (line 814) | def file_type(f: IO[bytes]) -> int:
function tarfile_of_spec_prefix (line 851) | def tarfile_of_spec_prefix(
function create_tarball (line 914) | def create_tarball(spec: spack.spec.Spec, tarfile_path: str) -> Tuple[st...
function _do_create_tarball (line 925) | def _do_create_tarball(
function _exists_in_buildcache (line 950) | def _exists_in_buildcache(
function prefixes_to_relocate (line 959) | def prefixes_to_relocate(spec):
function _url_upload_tarball_and_specfile (line 966) | def _url_upload_tarball_and_specfile(
class Uploader (line 975) | class Uploader:
method __init__ (line 976) | def __init__(self, mirror: spack.mirrors.mirror.Mirror, force: bool, u...
method __enter__ (line 987) | def __enter__(self):
method __exit__ (line 996) | def __exit__(self, *args):
method push_or_raise (line 1000) | def push_or_raise(self, specs: List[spack.spec.Spec]) -> List[spack.sp...
method push (line 1011) | def push(
method tag (line 1016) | def tag(self, tag: str, roots: List[spack.spec.Spec]):
class OCIUploader (line 1021) | class OCIUploader(Uploader):
method __init__ (line 1022) | def __init__(
method push (line 1033) | def push(
method tag (line 1054) | def tag(self, tag: str, roots: List[spack.spec.Spec]):
class URLUploader (line 1072) | class URLUploader(Uploader):
method __init__ (line 1073) | def __init__(
method push (line 1084) | def push(
function make_uploader (line 1098) | def make_uploader(
function _format_spec (line 1116) | def _format_spec(spec: spack.spec.Spec) -> str:
class FancyProgress (line 1120) | class FancyProgress:
method __init__ (line 1121) | def __init__(self, total: int):
method _clear (line 1129) | def _clear(self):
method _progress (line 1133) | def _progress(self):
method start (line 1139) | def start(self, spec: spack.spec.Spec, running: bool) -> None:
method ok (line 1147) | def ok(self, msg: Optional[str] = None) -> None:
method fail (line 1152) | def fail(self) -> None:
function _url_push (line 1157) | def _url_push(
function _oci_upload_success_msg (line 1249) | def _oci_upload_success_msg(spec: spack.spec.Spec, digest: Digest, size:...
function _oci_get_blob_info (line 1257) | def _oci_get_blob_info(image_ref: ImageReference) -> Optional[spack.oci....
function _oci_push_pkg_blob (line 1271) | def _oci_push_pkg_blob(
function _oci_retrieve_env_dict_from_config (line 1297) | def _oci_retrieve_env_dict_from_config(config: dict) -> dict:
function _oci_archspec_to_gooarch (line 1316) | def _oci_archspec_to_gooarch(spec: spack.spec.Spec) -> str:
function _oci_put_manifest (line 1322) | def _oci_put_manifest(
function _oci_update_base_images (line 1423) | def _oci_update_base_images(
function _oci_default_tag (line 1447) | def _oci_default_tag(spec: spack.spec.Spec) -> str:
function tag_is_spec (line 1456) | def tag_is_spec(tag: str) -> bool:
function _oci_push (line 1461) | def _oci_push(
function _oci_config_from_tag (line 1590) | def _oci_config_from_tag(image_ref_and_tag: Tuple[ImageReference, str]) ...
function _oci_update_index (line 1601) | def _oci_update_index(
function try_fetch (line 1667) | def try_fetch(url_to_fetch):
function download_tarball (line 1689) | def download_tarball(
function dedupe_hardlinks_if_necessary (line 1837) | def dedupe_hardlinks_if_necessary(root, buildinfo):
function relocate_package (line 1869) | def relocate_package(spec: spack.spec.Spec) -> None:
function _tar_strip_component (line 1991) | def _tar_strip_component(tar: tarfile.TarFile, prefix: str):
function extract_buildcache_tarball (line 2015) | def extract_buildcache_tarball(tarfile_path: str, destination: str) -> N...
function extract_tarball (line 2025) | def extract_tarball(spec, tarball_stage: spack.stage.Stage, force=False,...
function _ensure_common_prefix (line 2068) | def _ensure_common_prefix(tar: tarfile.TarFile) -> str:
function install_root_node (line 2112) | def install_root_node(
function install_single_spec (line 2154) | def install_single_spec(spec, unsigned=False, force=False):
function try_direct_fetch (line 2167) | def try_direct_fetch(spec: spack.spec.Spec) -> List[MirrorMetadata]:
function get_mirrors_for_spec (line 2199) | def get_mirrors_for_spec(spec: spack.spec.Spec, index_only: bool = False...
function update_cache_and_get_specs (line 2227) | def update_cache_and_get_specs():
function get_keys (line 2242) | def get_keys(
function _get_keys (line 2272) | def _get_keys(
function _get_keys_v2 (line 2328) | def _get_keys_v2(mirror_url, install=False, trust=False, force=False) ->...
function _url_push_keys (line 2376) | def _url_push_keys(
function needs_rebuild (line 2414) | def needs_rebuild(spec, mirror_url):
function check_specs_against_mirrors (line 2434) | def check_specs_against_mirrors(mirrors, specs, output_file=None):
function download_single_spec (line 2473) | def download_single_spec(
class BinaryCacheQuery (line 2521) | class BinaryCacheQuery:
method __init__ (line 2524) | def __init__(self, all_architectures):
method __call__ (line 2540) | def __call__(self, spec: spack.spec.Spec, **kwargs):
class FetchIndexError (line 2548) | class FetchIndexError(Exception):
method __str__ (line 2549) | def __str__(self):
class BuildcacheIndexError (line 2556) | class BuildcacheIndexError(spack.error.SpackError):
class BuildcacheIndexNotExists (line 2560) | class BuildcacheIndexNotExists(Exception):
class IndexFetcher (line 2567) | class IndexFetcher:
method conditional_fetch (line 2568) | def conditional_fetch(self) -> FetchIndexResult:
method get_index_manifest (line 2571) | def get_index_manifest(self, manifest_response) -> BlobRecord:
method fetch_index_blob (line 2588) | def fetch_index_blob(
class DefaultIndexFetcherV2 (line 2613) | class DefaultIndexFetcherV2(IndexFetcher):
method __init__ (line 2616) | def __init__(self, url, local_hash, urlopen=web_util.urlopen):
method get_remote_hash (line 2622) | def get_remote_hash(self):
method conditional_fetch (line 2638) | def conditional_fetch(self) -> FetchIndexResult:
class EtagIndexFetcherV2 (line 2684) | class EtagIndexFetcherV2(IndexFetcher):
method __init__ (line 2687) | def __init__(self, url, etag, urlopen=web_util.urlopen):
method conditional_fetch (line 2692) | def conditional_fetch(self) -> FetchIndexResult:
class OCIIndexFetcher (line 2727) | class OCIIndexFetcher(IndexFetcher):
method __init__ (line 2728) | def __init__(self, mirror_metadata: MirrorMetadata, local_hash, urlope...
method conditional_fetch (line 2733) | def conditional_fetch(self) -> FetchIndexResult:
class DefaultIndexFetcher (line 2781) | class DefaultIndexFetcher(IndexFetcher):
method __init__ (line 2784) | def __init__(self, mirror_metadata: MirrorMetadata, local_hash, urlope...
method conditional_fetch (line 2792) | def conditional_fetch(self) -> FetchIndexResult:
class EtagIndexFetcher (line 2829) | class EtagIndexFetcher(IndexFetcher):
method __init__ (line 2844) | def __init__(self, mirror_metadata: MirrorMetadata, etag, urlopen=web_...
method conditional_fetch (line 2851) | def conditional_fetch(self) -> FetchIndexResult:
function get_index_fetcher (line 2887) | def get_index_fetcher(
class NoOverwriteException (line 2910) | class NoOverwriteException(spack.error.SpackError):
method __init__ (line 2913) | def __init__(self, file_path):
class NoGpgException (line 2917) | class NoGpgException(spack.error.SpackError):
method __init__ (line 2922) | def __init__(self, msg):
class NoKeyException (line 2926) | class NoKeyException(spack.error.SpackError):
method __init__ (line 2931) | def __init__(self, msg):
class PickKeyException (line 2935) | class PickKeyException(spack.error.SpackError):
method __init__ (line 2940) | def __init__(self, keys):
class NewLayoutException (line 2946) | class NewLayoutException(spack.error.SpackError):
method __init__ (line 2951) | def __init__(self, msg):
class UnsignedPackageException (line 2955) | class UnsignedPackageException(spack.error.SpackError):
class GenerateIndexError (line 2962) | class GenerateIndexError(spack.error.SpackError):
class CannotListKeys (line 2966) | class CannotListKeys(GenerateIndexError):
class PushToBuildCacheError (line 2970) | class PushToBuildCacheError(spack.error.SpackError):
class NoConfiguredBinaryMirrors (line 2974) | class NoConfiguredBinaryMirrors(spack.error.SpackError):
method __init__ (line 2977) | def __init__(self):
FILE: lib/spack/spack/bootstrap/_common.py
class QueryInfo (line 30) | class QueryInfo(TypedDict, total=False):
function _python_import (line 35) | def _python_import(module: str) -> bool:
function _try_import_from_store (line 43) | def _try_import_from_store(
function _fix_ext_suffix (line 117) | def _fix_ext_suffix(candidate_spec: "spack.spec.Spec"):
function _executables_in_store (line 185) | def _executables_in_store(
function _root_spec (line 227) | def _root_spec(spec_str: str) -> str:
FILE: lib/spack/spack/bootstrap/clingo.py
function _select_best_version (line 32) | def _select_best_version(
function _add_compilers_if_missing (line 45) | def _add_compilers_if_missing() -> None:
class ClingoBootstrapConcretizer (line 51) | class ClingoBootstrapConcretizer:
method __init__ (line 52) | def __init__(self, configuration):
method _valid_compiler_or_raise (line 66) | def _valid_compiler_or_raise(self):
method _externals_from_yaml (line 100) | def _externals_from_yaml(
method prototype_path (line 123) | def prototype_path(self) -> pathlib.Path:
method concretize (line 140) | def concretize(self) -> "spack.spec.Spec":
method python_external_spec (line 206) | def python_external_spec(self) -> "spack.spec.Spec":
method libc_external_spec (line 211) | def libc_external_spec(self) -> "spack.spec.Spec":
method _external_spec (line 216) | def _external_spec(self, initial_spec) -> "spack.spec.Spec":
FILE: lib/spack/spack/bootstrap/config.py
function is_bootstrapping (line 25) | def is_bootstrapping() -> bool:
function spec_for_current_python (line 30) | def spec_for_current_python() -> str:
function root_path (line 43) | def root_path() -> str:
function store_path (line 50) | def store_path() -> str:
function spack_python_interpreter (line 61) | def spack_python_interpreter() -> Generator:
function _store_path (line 78) | def _store_path() -> str:
function _config_path (line 83) | def _config_path() -> str:
function ensure_bootstrap_configuration (line 89) | def ensure_bootstrap_configuration() -> Generator:
function _read_and_sanitize_configuration (line 109) | def _read_and_sanitize_configuration() -> Dict[str, Any]:
function _bootstrap_config_scopes (line 125) | def _bootstrap_config_scopes() -> Sequence["spack.config.ConfigScope"]:
function _ensure_bootstrap_configuration (line 140) | def _ensure_bootstrap_configuration() -> Generator:
FILE: lib/spack/spack/bootstrap/core.py
function bootstrapper (line 74) | def bootstrapper(bootstrapper_type: str):
class Bootstrapper (line 89) | class Bootstrapper:
method __init__ (line 94) | def __init__(self, conf: ConfigDictionary) -> None:
method mirror_scope (line 107) | def mirror_scope(self) -> spack.config.InternalConfigScope:
method try_import (line 115) | def try_import(self, module: str, abstract_spec_str: str) -> bool:
method try_search_path (line 128) | def try_search_path(self, executables: Tuple[str], abstract_spec_str: ...
class BuildcacheBootstrapper (line 143) | class BuildcacheBootstrapper(Bootstrapper):
method __init__ (line 146) | def __init__(self, conf) -> None:
method _spec_and_platform (line 152) | def _spec_and_platform(
method _read_metadata (line 167) | def _read_metadata(self, package_name: str) -> Any:
method _install_by_hash (line 176) | def _install_by_hash(
method _install_and_test (line 194) | def _install_and_test(
method try_import (line 231) | def try_import(self, module: str, abstract_spec_str: str) -> bool:
method try_search_path (line 244) | def try_search_path(self, executables: Tuple[str], abstract_spec_str: ...
class SourceBootstrapper (line 258) | class SourceBootstrapper(Bootstrapper):
method __init__ (line 261) | def __init__(self, conf) -> None:
method try_import (line 266) | def try_import(self, module: str, abstract_spec_str: str) -> bool:
method try_search_path (line 306) | def try_search_path(self, executables: Tuple[str], abstract_spec_str: ...
function create_bootstrapper (line 329) | def create_bootstrapper(conf: ConfigDictionary):
function source_is_enabled (line 335) | def source_is_enabled(conf: ConfigDictionary) -> bool:
function ensure_module_importable_or_raise (line 340) | def ensure_module_importable_or_raise(module: str, abstract_spec: Option...
function ensure_executables_in_path_or_raise (line 388) | def ensure_executables_in_path_or_raise(
function _add_externals_if_missing (line 454) | def _add_externals_if_missing() -> None:
function clingo_root_spec (line 475) | def clingo_root_spec() -> str:
function ensure_clingo_importable_or_raise (line 480) | def ensure_clingo_importable_or_raise() -> None:
function gnupg_root_spec (line 485) | def gnupg_root_spec() -> str:
function ensure_gpg_in_path_or_raise (line 491) | def ensure_gpg_in_path_or_raise() -> None:
function patchelf_root_spec (line 498) | def patchelf_root_spec() -> str:
function verify_patchelf (line 504) | def verify_patchelf(patchelf: "spack.util.executable.Executable") -> bool:
function ensure_patchelf_in_path_or_raise (line 525) | def ensure_patchelf_in_path_or_raise() -> spack.util.executable.Executable:
function ensure_winsdk_external_or_raise (line 542) | def ensure_winsdk_external_or_raise() -> None:
function ensure_core_dependencies (line 578) | def ensure_core_dependencies() -> None:
function all_core_root_specs (line 586) | def all_core_root_specs() -> List[str]:
function bootstrapping_sources (line 591) | def bootstrapping_sources(scope: Optional[str] = None):
FILE: lib/spack/spack/bootstrap/environment.py
class BootstrapEnvironment (line 28) | class BootstrapEnvironment(spack.environment.Environment):
method __init__ (line 31) | def __init__(self) -> None:
method spack_dev_requirements (line 42) | def spack_dev_requirements(cls) -> List[str]:
method environment_root (line 47) | def environment_root(cls) -> pathlib.Path:
method view_root (line 61) | def view_root(cls) -> pathlib.Path:
method bin_dir (line 66) | def bin_dir(cls) -> pathlib.Path:
method python_dirs (line 70) | def python_dirs(self) -> Iterable[pathlib.Path]:
method spack_yaml (line 75) | def spack_yaml(cls) -> pathlib.Path:
method trust_bootstrap_mirror_keys (line 80) | def trust_bootstrap_mirror_keys(self):
method update_installations (line 85) | def update_installations(self) -> None:
method load (line 109) | def load(self) -> None:
method _write_spack_yaml_file (line 117) | def _write_spack_yaml_file(self) -> None:
function mypy_root_spec (line 136) | def mypy_root_spec() -> str:
function pytest_root_spec (line 141) | def pytest_root_spec() -> str:
function ruff_root_spec (line 146) | def ruff_root_spec() -> str:
function dev_bootstrap_mirror_names (line 151) | def dev_bootstrap_mirror_names() -> List[str]:
function ensure_environment_dependencies (line 161) | def ensure_environment_dependencies() -> None:
FILE: lib/spack/spack/bootstrap/status.py
function _required_system_executable (line 21) | def _required_system_executable(exes: ExecutablesType, msg: str) -> Requ...
function _required_executable (line 30) | def _required_executable(
function _required_python_module (line 41) | def _required_python_module(module: str, query_spec: SpecLike, msg: str)...
function _missing (line 50) | def _missing(name: str, purpose: str, system_only: bool = True) -> str:
function _core_requirements (line 58) | def _core_requirements() -> List[RequiredResponseType]:
function _buildcache_requirements (line 81) | def _buildcache_requirements() -> List[RequiredResponseType]:
function _optional_requirements (line 105) | def _optional_requirements() -> List[RequiredResponseType]:
function _development_requirements (line 116) | def _development_requirements() -> List[RequiredResponseType]:
function status_message (line 137) | def status_message(section) -> Tuple[str, bool]:
FILE: lib/spack/spack/build_environment.py
function shared_library_suffix (line 145) | def shared_library_suffix(spec: spack.spec.Spec) -> str:
function static_library_suffix (line 155) | def static_library_suffix(spec: spack.spec.Spec) -> str:
function jobserver_enabled (line 163) | def jobserver_enabled():
function get_effective_jobs (line 168) | def get_effective_jobs(
class MakeExecutable (line 179) | class MakeExecutable(Executable):
method __init__ (line 184) | def __init__(self, name: str, *, jobs: int, supports_jobserver: bool =...
method __call__ (line 190) | def __call__(
method __call__ (line 209) | def __call__(
method __call__ (line 228) | def __call__(
method __call__ (line 246) | def __call__(
class UndeclaredDependencyError (line 281) | class UndeclaredDependencyError(spack.error.SpackError):
class DeprecatedExecutable (line 287) | class DeprecatedExecutable:
method __init__ (line 288) | def __init__(self, pkg: str, exe: str, exe_pkg: str) -> None:
method __call__ (line 293) | def __call__(self, *args, **kwargs):
method add_default_env (line 298) | def add_default_env(self, key: str, value: str):
function clean_environment (line 302) | def clean_environment():
function _add_werror_handling (line 395) | def _add_werror_handling(keep_werror, env):
function set_wrapper_environment_variables_for_flags (line 412) | def set_wrapper_environment_variables_for_flags(pkg, env):
function optimization_flags (line 459) | def optimization_flags(compiler, target):
function set_wrapper_variables (line 474) | def set_wrapper_variables(pkg, env):
function set_package_py_globals (line 581) | def set_package_py_globals(pkg, context: Context = Context.BUILD):
function _static_to_shared_library (line 624) | def _static_to_shared_library(arch, compiler, static_lib, shared_lib=Non...
function _get_rpath_deps_from_spec (line 710) | def _get_rpath_deps_from_spec(
function get_rpath_deps (line 728) | def get_rpath_deps(pkg: spack.package_base.PackageBase) -> List[spack.sp...
function get_cmake_prefix_path (line 734) | def get_cmake_prefix_path(pkg: spack.package_base.PackageBase) -> List[s...
function setup_package (line 756) | def setup_package(pkg, dirty, context: Context = Context.BUILD):
function _extract_dtags_arg (line 831) | def _extract_dtags_arg(env_by_name: Dict[str, ModificationList], *, var_...
class EnvironmentVisitor (line 839) | class EnvironmentVisitor:
method __init__ (line 840) | def __init__(self, *roots: spack.spec.Spec, context: Context):
method accept (line 856) | def accept(self, item):
method neighbors (line 859) | def neighbors(self, item):
class UseMode (line 868) | class UseMode(Flag):
function effective_deptypes (line 888) | def effective_deptypes(
class SetupContext (line 970) | class SetupContext:
method __init__ (line 974) | def __init__(self, *specs: spack.spec.Spec, context: Context) -> None:
method set_all_package_py_globals (line 1012) | def set_all_package_py_globals(self):
method get_env_modifications (line 1039) | def get_env_modifications(self) -> EnvironmentModifications:
method _make_buildtime_detectable (line 1088) | def _make_buildtime_detectable(self, dep: spack.spec.Spec, env: Enviro...
method _make_runnable (line 1098) | def _make_runnable(self, dep: spack.spec.Spec, env: EnvironmentModific...
function load_external_modules (line 1108) | def load_external_modules(context: SetupContext) -> None:
function _setup_pkg_and_run (line 1123) | def _setup_pkg_and_run(
class BuildProcess (line 1260) | class BuildProcess:
method __init__ (line 1272) | def __init__(
method start (line 1286) | def start(self) -> None:
method poll (line 1289) | def poll(self) -> bool:
method complete (line 1293) | def complete(self):
method is_alive (line 1301) | def is_alive(self) -> bool:
method join (line 1304) | def join(self, *, timeout: Optional[int] = None):
method terminate (line 1307) | def terminate(self):
method pid (line 1320) | def pid(self):
method exitcode (line 1324) | def exitcode(self):
function start_build_process (line 1328) | def start_build_process(
function complete_build_process (line 1430) | def complete_build_process(process: BuildProcess):
function get_package_context (line 1480) | def get_package_context(traceback, context=3):
class ChildError (line 1547) | class ChildError(InstallError):
method __init__ (line 1585) | def __init__(self, msg, module, classname, traceback_string, log_name,...
method long_message (line 1595) | def long_message(self):
method __str__ (line 1631) | def __str__(self):
method __reduce__ (line 1634) | def __reduce__(self):
function _make_child_error (line 1651) | def _make_child_error(msg, module, name, traceback, log, log_type, conte...
function write_log_summary (line 1656) | def write_log_summary(out, log_type, log, last=None):
class ModuleChangePropagator (line 1679) | class ModuleChangePropagator:
method __init__ (line 1690) | def __init__(self, package: spack.package_base.PackageBase) -> None:
method _set_self_attributes (line 1709) | def _set_self_attributes(self, key, value):
method __getattr__ (line 1712) | def __getattr__(self, item):
method __setattr__ (line 1715) | def __setattr__(self, key, value):
method propagate_changes_to_mro (line 1723) | def propagate_changes_to_mro(self):
FILE: lib/spack/spack/buildcache_migrate.py
function v2_tarball_directory_name (line 34) | def v2_tarball_directory_name(spec):
function v2_tarball_name (line 42) | def v2_tarball_name(spec, ext):
function v2_tarball_path_name (line 53) | def v2_tarball_path_name(spec, ext):
class MigrateSpecResult (line 61) | class MigrateSpecResult(NamedTuple):
class MigrationException (line 66) | class MigrationException(spack.error.SpackError):
method __init__ (line 71) | def __init__(self, msg):
function _migrate_spec (line 75) | def _migrate_spec(
function migrate (line 245) | def migrate(
FILE: lib/spack/spack/buildcache_prune.py
function _fetch_manifests (line 33) | def _fetch_manifests(
function _delete_manifests_from_cache_aws (line 66) | def _delete_manifests_from_cache_aws(
function _delete_entries_from_cache_manual (line 115) | def _delete_entries_from_cache_manual(url: str, urls_to_delete: Set[str]...
function _delete_entries_from_cache (line 129) | def _delete_entries_from_cache(
function _delete_object (line 155) | def _delete_object(url: str) -> int:
function _object_has_prunable_mtime (line 165) | def _object_has_prunable_mtime(url: str, pruning_started_at: float) -> T...
function _filter_new_specs (line 179) | def _filter_new_specs(urls: Iterable[str], pruning_started_at: float) ->...
function _prune_orphans (line 196) | def _prune_orphans(
function prune_direct (line 306) | def prune_direct(
function prune_orphan (line 411) | def prune_orphan(mirror: Mirror, pruning_started_at: float, dry_run: boo...
function get_buildcache_normalized_time (line 460) | def get_buildcache_normalized_time(mirror: Mirror) -> float:
function prune_buildcache (line 488) | def prune_buildcache(mirror: Mirror, keeplist: Optional[str] = None, dry...
class BuildcachePruningException (line 513) | class BuildcachePruningException(spack.error.SpackError):
class MalformedKeepListException (line 521) | class MalformedKeepListException(BuildcachePruningException):
FILE: lib/spack/spack/builder.py
function register_builder (line 31) | def register_builder(build_system_name: str):
function create (line 54) | def create(pkg: spack.package_base.PackageBase) -> "Builder":
class _PhaseAdapter (line 62) | class _PhaseAdapter:
method __init__ (line 63) | def __init__(self, builder, phase_fn):
method __call__ (line 67) | def __call__(self, spec, prefix):
function get_builder_class (line 71) | def get_builder_class(pkg, name: str) -> Optional[Type["Builder"]]:
function _create (line 82) | def _create(pkg: spack.package_base.PackageBase) -> "Builder":
function buildsystem_name (line 218) | def buildsystem_name(pkg: spack.package_base.PackageBase) -> str:
class BuilderMeta (line 234) | class BuilderMeta(
class _PackageAdapterMeta (line 242) | class _PackageAdapterMeta(BuilderMeta):
method phase_method_adapter (line 251) | def phase_method_adapter(phase_name):
method legacy_long_method_adapter (line 259) | def legacy_long_method_adapter(method_name):
method legacy_method_adapter (line 267) | def legacy_method_adapter(method_name):
method legacy_attribute_adapter (line 275) | def legacy_attribute_adapter(attribute_name):
method combine_callbacks (line 282) | def combine_callbacks(pipeline_attribute_name):
method __new__ (line 310) | def __new__(mcs, name, bases, attr_dict):
class InstallationPhase (line 340) | class InstallationPhase:
method __init__ (line 351) | def __init__(self, name, builder):
method _make_callbacks (line 358) | def _make_callbacks(self, callbacks_attribute):
method __str__ (line 371) | def __str__(self):
method execute (line 375) | def execute(self):
method _select_phase_fn (line 389) | def _select_phase_fn(self):
method _on_phase_start (line 401) | def _on_phase_start(self, instance):
method _on_phase_exit (line 407) | def _on_phase_exit(self, instance):
method copy (line 413) | def copy(self):
class BaseBuilder (line 417) | class BaseBuilder(metaclass=BuilderMeta):
method __init__ (line 445) | def __init__(self, pkg: spack.package_base.PackageBase) -> None:
method spec (line 449) | def spec(self) -> spack.spec.Spec:
method stage (line 453) | def stage(self):
method prefix (line 457) | def prefix(self):
method setup_build_environment (line 460) | def setup_build_environment(
method setup_dependent_build_environment (line 476) | def setup_dependent_build_environment(
method __repr__ (line 502) | def __repr__(self):
method __str__ (line 506) | def __str__(self):
class Builder (line 511) | class Builder(BaseBuilder, collections.abc.Sequence):
method archive_files (line 549) | def archive_files(self) -> List[str]:
method __init__ (line 552) | def __init__(self, pkg: spack.package_base.PackageBase) -> None:
method __getitem__ (line 558) | def __getitem__(self, idx):
method __len__ (line 562) | def __len__(self):
function package_methods (line 566) | def package_methods(builder: Type[Builder]) -> Tuple[str, ...]:
function package_attributes (line 577) | def package_attributes(builder: Type[Builder]) -> Tuple[str, ...]:
function package_long_methods (line 588) | def package_long_methods(builder: Type[Builder]) -> Tuple[str, ...]:
function sanity_check_prefix (line 599) | def sanity_check_prefix(builder: Builder):
class BuilderWithDefaults (line 634) | class BuilderWithDefaults(Builder):
function apply_macos_rpath_fixups (line 641) | def apply_macos_rpath_fixups(builder: Builder):
function execute_install_time_tests (line 661) | def execute_install_time_tests(builder: Builder):
class Package (line 674) | class Package(spack.package_base.PackageBase):
class GenericBuilder (line 723) | class GenericBuilder(BuilderWithDefaults):
method install (line 765) | def install(self, pkg: Package, spec: spack.spec.Spec, prefix: Prefix)...
FILE: lib/spack/spack/caches.py
function misc_cache_location (line 19) | def misc_cache_location():
function _misc_cache (line 29) | def _misc_cache():
function fetch_cache_location (line 38) | def fetch_cache_location():
function _fetch_cache (line 51) | def _fetch_cache():
class MirrorCache (line 56) | class MirrorCache:
method __init__ (line 57) | def __init__(self, root, skip_unstable_versions):
method store (line 61) | def store(self, fetcher, relative_dest):
FILE: lib/spack/spack/ci/__init__.py
function get_git_root (line 68) | def get_git_root(path: str) -> Optional[str]:
function get_change_revisions (line 80) | def get_change_revisions(path: str) -> Tuple[Optional[str], Optional[str]]:
function filter_added_checksums (line 94) | def filter_added_checksums(
function stack_changed (line 131) | def stack_changed(env_path: str) -> bool:
function compute_affected_packages (line 166) | def compute_affected_packages(
function get_spec_filter_list (line 174) | def get_spec_filter_list(
class RebuildDecision (line 220) | class RebuildDecision:
method __init__ (line 221) | def __init__(self, rebuild: bool = True, reason: str = ""):
function create_unaffected_pruner (line 229) | def create_unaffected_pruner(affected_specs: Set[spack.spec.Spec]) -> Pr...
function create_already_built_pruner (line 241) | def create_already_built_pruner(check_index_only: bool = True) -> Pruner...
function create_external_pruner (line 264) | def create_external_pruner() -> PrunerCallback:
function _format_pruning_message (line 275) | def _format_pruning_message(spec: spack.spec.Spec, prune: bool, reasons:...
function prune_pipeline (line 287) | def prune_pipeline(
function check_for_broken_specs (line 325) | def check_for_broken_specs(pipeline_specs: List[spack.spec.Spec], broken...
function collect_pipeline_options (line 353) | def collect_pipeline_options(env: ev.Environment, args) -> PipelineOptions:
function get_unaffected_pruners (line 422) | def get_unaffected_pruners(
function generate_pipeline (line 464) | def generate_pipeline(env: ev.Environment, args) -> None:
function import_signing_key (line 555) | def import_signing_key(base64_signing_key: str) -> None:
function can_sign_binaries (line 598) | def can_sign_binaries():
function can_verify_binaries (line 605) | def can_verify_binaries():
function push_to_build_cache (line 611) | def push_to_build_cache(spec: spack.spec.Spec, mirror_url: str, sign_bin...
function copy_stage_logs_to_artifacts (line 632) | def copy_stage_logs_to_artifacts(job_spec: spack.spec.Spec, job_log_dir:...
function copy_test_logs_to_artifacts (line 675) | def copy_test_logs_to_artifacts(test_stage, job_test_dir):
function download_and_extract_artifacts (line 693) | def download_and_extract_artifacts(url: str, work_dir: str) -> str:
function get_spack_info (line 741) | def get_spack_info():
function setup_spack_repro_version (line 756) | def setup_spack_repro_version(
function reproduce_ci_job (line 856) | def reproduce_ci_job(url, work_dir, autostart, gpg_url, runtime, use_loc...
function process_command (line 1148) | def process_command(name, commands, repro_dir, run=True, exit_on_failure...
function create_buildcache (line 1241) | def create_buildcache(
function write_broken_spec (line 1265) | def write_broken_spec(url, pkg_name, stack_name, job_url, pipeline_url, ...
function read_broken_spec (line 1296) | def read_broken_spec(broken_spec_url):
function display_broken_spec_messages (line 1309) | def display_broken_spec_messages(base_url, hashes):
function run_standalone_tests (line 1328) | def run_standalone_tests(
FILE: lib/spack/spack/ci/common.py
function copy_gzipped (line 46) | def copy_gzipped(glob_or_path: str, dest: str) -> None:
function copy_files_to_artifacts (line 83) | def copy_files_to_artifacts(
function win_quote (line 108) | def win_quote(quote_str: str) -> str:
function _spec_matches (line 114) | def _spec_matches(spec, match_string):
function _noop (line 118) | def _noop(x):
function unpack_script (line 122) | def unpack_script(script_section, op=_noop):
function ensure_expected_target_path (line 134) | def ensure_expected_target_path(path: str) -> str:
function write_pipeline_manifest (line 145) | def write_pipeline_manifest(specs, src_prefix, dest_prefix, output_file):
class CDashHandler (line 168) | class CDashHandler:
method __init__ (line 173) | def __init__(self, ci_cdash):
method args (line 190) | def args(self):
method build_name (line 202) | def build_name(self, spec: Optional[spack.spec.Spec] = None) -> Option...
method build_stamp (line 221) | def build_stamp(self):
method project_enc (line 240) | def project_enc(self):
method upload_url (line 247) | def upload_url(self):
method copy_test_results (line 251) | def copy_test_results(self, source, dest):
method create_buildgroup (line 256) | def create_buildgroup(self):
method report_skipped (line 285) | def report_skipped(self, spec: spack.spec.Spec, report_dir: str, reaso...
class PipelineType (line 307) | class PipelineType(Enum):
class PipelineOptions (line 316) | class PipelineOptions:
method __init__ (line 320) | def __init__(
class PipelineNode (line 379) | class PipelineNode:
method __init__ (line 384) | def __init__(self, spec: spack.spec.Spec):
method key (line 390) | def key(self):
class PipelineDag (line 395) | class PipelineDag:
method key (line 400) | def key(cls, spec: spack.spec.Spec) -> str:
method __init__ (line 403) | def __init__(self, specs: List[spack.spec.Spec]) -> None:
method prune (line 420) | def prune(self, node_key: str):
method traverse_nodes (line 431) | def traverse_nodes(
method get_dependencies (line 471) | def get_dependencies(self, node: PipelineNode) -> List[PipelineNode]:
class SpackCIConfig (line 477) | class SpackCIConfig:
method __init__ (line 482) | def __init__(self, ci_config):
method __init_job (line 505) | def __init_job(self, release_spec):
method __is_named (line 519) | def __is_named(self, section):
method __job_name (line 531) | def __job_name(name, suffix=""):
method __apply_submapping (line 545) | def __apply_submapping(self, dest, spec, section):
method init_pipeline_jobs (line 566) | def init_pipeline_jobs(self, pipeline: PipelineDag):
method generate_ir (line 572) | def generate_ir(self):
class SpackCIError (line 763) | class SpackCIError(spack.error.SpackError):
method __init__ (line 764) | def __init__(self, msg):
FILE: lib/spack/spack/ci/generator_registry.py
function generator (line 14) | def generator(name):
function get_generator (line 27) | def get_generator(name):
class UnknownGeneratorException (line 34) | class UnknownGeneratorException(spack.error.SpackError):
method __init__ (line 35) | def __init__(self, generator_name):
FILE: lib/spack/spack/ci/gitlab.py
function _remove_reserved_tags (line 54) | def _remove_reserved_tags(tags):
function get_job_name (line 59) | def get_job_name(spec: spack.spec.Spec, build_group: Optional[str] = Non...
function maybe_generate_manifest (line 77) | def maybe_generate_manifest(pipeline: PipelineDag, options: PipelineOpti...
function generate_gitlab_yaml (line 98) | def generate_gitlab_yaml(pipeline: PipelineDag, spack_ci: SpackCIConfig,...
FILE: lib/spack/spack/cmd/__init__.py
function python_name (line 49) | def python_name(cmd_name):
function require_python_name (line 54) | def require_python_name(pname):
function cmd_name (line 62) | def cmd_name(python_name):
function require_cmd_name (line 67) | def require_cmd_name(cname):
function all_commands (line 80) | def all_commands():
function remove_options (line 103) | def remove_options(parser, *options):
function get_module (line 112) | def get_module(cmd_name):
function get_command (line 144) | def get_command(cmd_name):
function quote_kvp (line 157) | def quote_kvp(string: str) -> str:
function parse_specs (line 174) | def parse_specs(
function _concretize_spec_pairs (line 194) | def _concretize_spec_pairs(
function matching_spec_from_env (line 251) | def matching_spec_from_env(spec):
function matching_specs_from_env (line 264) | def matching_specs_from_env(specs):
function disambiguate_spec (line 280) | def disambiguate_spec(
function disambiguate_spec_from_hashes (line 300) | def disambiguate_spec_from_hashes(
function ensure_single_spec_or_die (line 331) | def ensure_single_spec_or_die(spec, matching_specs):
function gray_hash (line 348) | def gray_hash(spec, length):
function display_specs_as_json (line 356) | def display_specs_as_json(specs, deps=False):
function iter_groups (line 378) | def iter_groups(specs, indent, all_headers):
function display_specs (line 415) | def display_specs(specs, args=None, **kwargs):
function filter_loaded_specs (line 560) | def filter_loaded_specs(specs):
function print_how_many_pkgs (line 567) | def print_how_many_pkgs(specs, pkg_type="", suffix=""):
function spack_is_git_repo (line 581) | def spack_is_git_repo():
function is_git_repo (line 586) | def is_git_repo(path):
class PythonNameError (line 602) | class PythonNameError(spack.error.SpackError):
method __init__ (line 605) | def __init__(self, name):
class CommandNameError (line 610) | class CommandNameError(spack.error.SpackError):
method __init__ (line 613) | def __init__(self, name):
class MultipleSpecsMatch (line 618) | class MultipleSpecsMatch(Exception):
class NoSpecMatches (line 624) | class NoSpecMatches(Exception):
function extant_file (line 633) | def extant_file(f):
function require_active_env (line 642) | def require_active_env(cmd_name):
function find_environment (line 668) | def find_environment(args: argparse.Namespace) -> Optional[ev.Environment]:
function doc_first_line (line 711) | def doc_first_line(function: object) -> Optional[str]:
function doc_dedented (line 719) | def doc_dedented(function: object) -> Optional[str]:
function doc_dedented (line 725) | def doc_dedented(function: object) -> Optional[str]:
function converted_arg_length (line 730) | def converted_arg_length(arg: str):
function group_arguments (line 740) | def group_arguments(
class CommandNotFoundError (line 803) | class CommandNotFoundError(spack.error.SpackError):
method __init__ (line 808) | def __init__(self, cmd_name):
FILE: lib/spack/spack/cmd/add.py
function setup_parser (line 16) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function add (line 27) | def add(parser, args):
FILE: lib/spack/spack/cmd/arch.py
function setup_parser (line 21) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function display_targets (line 62) | def display_targets(targets):
function arch (line 92) | def arch(parser, args):
FILE: lib/spack/spack/cmd/audit.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function configs (line 55) | def configs(parser, args):
function packages (line 62) | def packages(parser, args):
function packages_https (line 68) | def packages_https(parser, args):
function externals (line 78) | def externals(parser, args):
function list (line 90) | def list(parser, args):
function audit (line 103) | def audit(parser, args):
function _process_reports (line 114) | def _process_reports(reports):
FILE: lib/spack/spack/cmd/blame.py
function setup_parser (line 30) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function print_table (line 70) | def print_table(rows, last_mod, total_lines, emails):
function dump_json (line 92) | def dump_json(rows, last_mod, total_lines, emails):
function git_prefix (line 119) | def git_prefix(path: Union[str, pathlib.Path]) -> Optional[pathlib.Path]:
function package_repo_root (line 139) | def package_repo_root(path: Union[str, pathlib.Path]) -> Optional[pathli...
function git_supports_unshallow (line 179) | def git_supports_unshallow() -> bool:
function ensure_full_history (line 184) | def ensure_full_history(prefix: str, path: str) -> None:
function blame (line 215) | def blame(parser, args):
FILE: lib/spack/spack/cmd/bootstrap.py
function _add_scope_option (line 70) | def _add_scope_option(parser):
function setup_parser (line 76) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _enable_or_disable (line 144) | def _enable_or_disable(args):
function _reset (line 162) | def _reset(args):
function _root (line 193) | def _root(args):
function _list (line 208) | def _list(args):
function _write_bootstrapping_source_status (line 260) | def _write_bootstrapping_source_status(name, enabled, scope=None):
function _enable_source (line 292) | def _enable_source(args):
function _disable_source (line 298) | def _disable_source(args):
function _status (line 304) | def _status(args):
function _add (line 337) | def _add(args):
function _remove (line 367) | def _remove(args):
function _mirror (line 394) | def _mirror(args):
function _now (line 454) | def _now(args):
function bootstrap (line 461) | def bootstrap(parser, args):
FILE: lib/spack/spack/cmd/build_env.py
function build_env (line 15) | def build_env(parser, args):
FILE: lib/spack/spack/cmd/buildcache.py
class ViewUpdateMode (line 55) | class ViewUpdateMode(enum.Enum):
function setup_parser (line 61) | def setup_parser(subparser: argparse.ArgumentParser):
function _matching_specs (line 386) | def _matching_specs(specs: List[Spec]) -> List[Spec]:
function _format_spec (line 394) | def _format_spec(spec: Spec) -> str:
function _skip_no_redistribute_for_public (line 398) | def _skip_no_redistribute_for_public(specs):
class PackagesAreNotInstalledError (line 417) | class PackagesAreNotInstalledError(spack.error.SpackError):
method __init__ (line 420) | def __init__(self, specs: List[Spec]):
class PackageNotInstalledError (line 427) | class PackageNotInstalledError(spack.error.SpackError):
function _specs_to_be_packaged (line 431) | def _specs_to_be_packaged(
function push_fn (line 456) | def push_fn(args):
function install_fn (line 577) | def install_fn(args):
function list_fn (line 590) | def list_fn(args):
function keys_fn (line 615) | def keys_fn(args):
function check_fn (line 620) | def check_fn(args: argparse.Namespace):
function download_fn (line 658) | def download_fn(args):
function save_specfile_fn (line 673) | def save_specfile_fn(args):
function copy_buildcache_entry (line 695) | def copy_buildcache_entry(cache_entry: URLBuildcacheEntry, destination_u...
function sync_fn (line 769) | def sync_fn(args):
function manifest_copy (line 818) | def manifest_copy(
function update_index (line 850) | def update_index(
function mirror_update_keys (line 877) | def mirror_update_keys(mirror: spack.mirrors.mirror.Mirror):
function update_view (line 888) | def update_view(
function check_index_fn (line 981) | def check_index_fn(args):
function update_index_fn (line 1110) | def update_index_fn(args):
function migrate_fn (line 1143) | def migrate_fn(args):
function prune_fn (line 1191) | def prune_fn(args):
function buildcache (line 1205) | def buildcache(parser, args):
FILE: lib/spack/spack/cmd/cd.py
function setup_parser (line 15) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function cd (line 22) | def cd(parser, args):
FILE: lib/spack/spack/cmd/change.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function change (line 54) | def change(parser, args):
FILE: lib/spack/spack/cmd/checksum.py
function setup_parser (line 33) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function checksum (line 86) | def checksum(parser, args):
function print_checksum_status (line 190) | def print_checksum_status(pkg: PackageBase, version_hashes: dict):
function _update_version_statements (line 238) | def _update_version_statements(package_src: str, version_lines: str) -> ...
function add_versions_to_pkg (line 274) | def add_versions_to_pkg(path: str, version_lines: str) -> int:
FILE: lib/spack/spack/cmd/ci.py
function deindent (line 49) | def deindent(desc):
function unicode_escape (line 53) | def unicode_escape(path: str) -> str:
function setup_parser (line 59) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function ci_generate (line 247) | def ci_generate(args):
function ci_reindex (line 259) | def ci_reindex(args):
function ci_rebuild (line 280) | def ci_rebuild(args):
function ci_reproduce (line 667) | def ci_reproduce(args):
function _gitlab_artifacts_url (line 692) | def _gitlab_artifacts_url(url: str) -> str:
function validate_standard_versions (line 730) | def validate_standard_versions(
function validate_git_versions (line 768) | def validate_git_versions(
function ci_verify_versions (line 825) | def ci_verify_versions(args):
function ci (line 886) | def ci(parser, args):
FILE: lib/spack/spack/cmd/clean.py
class AllClean (line 25) | class AllClean(argparse.Action):
method __call__ (line 28) | def __call__(self, parser, namespace, values, option_string=None):
function setup_parser (line 32) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function remove_python_cache (line 69) | def remove_python_cache():
function clean (line 84) | def clean(parser, args):
FILE: lib/spack/spack/cmd/commands.py
function formatter (line 51) | def formatter(func: Callable[[Namespace, IO], None]) -> Callable[[Namesp...
function setup_parser (line 64) | def setup_parser(subparser: ArgumentParser) -> None:
class SpackArgparseRstWriter (line 107) | class SpackArgparseRstWriter(ArgparseRstWriter):
method __init__ (line 110) | def __init__(
method usage (line 130) | def usage(self, usage: str) -> str:
class SubcommandWriter (line 148) | class SubcommandWriter(ArgparseWriter):
method format (line 151) | def format(self, cmd: Command) -> str:
class BashCompletionWriter (line 182) | class BashCompletionWriter(ArgparseWriter):
method format (line 185) | def format(self, cmd: Command) -> str:
method start_function (line 214) | def start_function(self, prog: str) -> str:
method end_function (line 226) | def end_function(self, prog: str) -> str:
method body (line 237) | def body(
method positionals (line 273) | def positionals(self, positionals: Sequence) -> str:
method optionals (line 301) | def optionals(self, optionals: Sequence[str]) -> str:
method subcommands (line 312) | def subcommands(self, subcommands: Sequence[str]) -> str:
function _fish_dest_get_complete (line 387) | def _fish_dest_get_complete(prog: str, dest: str) -> Optional[str]:
class FishCompletionWriter (line 406) | class FishCompletionWriter(ArgparseWriter):
method format (line 409) | def format(self, cmd: Command) -> str:
method optspecs (line 433) | def optspecs(
method complete_head (line 494) | def complete_head(
method complete (line 521) | def complete(
method positionals (line 552) | def positionals(
method prog_comment (line 596) | def prog_comment(self, prog: str) -> str:
method optionals (line 600) | def optionals(
method subcommands (line 666) | def subcommands(self, prog: str, subcommands: List[Tuple[ArgumentParse...
function subcommands (line 692) | def subcommands(args: Namespace, out: IO) -> None:
function rst_index (line 704) | def rst_index(out: IO) -> None:
function rst (line 737) | def rst(args: Namespace, out: IO) -> None:
function names (line 766) | def names(args: Namespace, out: IO) -> None:
function get_all_spack_commands (line 783) | def get_all_spack_commands(out: IO) -> SpackArgumentParser:
function bash (line 798) | def bash(args: Namespace, out: IO) -> None:
function fish (line 816) | def fish(args, out):
function prepend_header (line 822) | def prepend_header(args: Namespace, out: IO) -> None:
function _commands (line 836) | def _commands(parser: ArgumentParser, args: Namespace) -> None:
function update_completion (line 862) | def update_completion(parser: ArgumentParser, args: Namespace) -> None:
function commands (line 878) | def commands(parser: ArgumentParser, args: Namespace) -> None:
FILE: lib/spack/spack/cmd/common/__init__.py
function shell_init_instructions (line 10) | def shell_init_instructions(cmd, equivalent):
FILE: lib/spack/spack/cmd/common/arguments.py
function arg (line 29) | def arg(fn):
function add_common_arguments (line 41) | def add_common_arguments(parser, list_of_arguments):
class ConstraintAction (line 57) | class ConstraintAction(argparse.Action):
method __call__ (line 67) | def __call__(self, parser, namespace, values, option_string=None):
method _specs (line 73) | def _specs(self, **kwargs):
class SetParallelJobs (line 97) | class SetParallelJobs(argparse.Action):
method __call__ (line 104) | def __call__(self, parser, namespace, jobs, option_string):
class SetConcurrentPackages (line 116) | class SetConcurrentPackages(argparse.Action):
method __call__ (line 123) | def __call__(self, parser, namespace, concurrent_packages, option_stri...
class DeprecatedStoreTrueAction (line 133) | class DeprecatedStoreTrueAction(argparse.Action):
method __init__ (line 136) | def __init__(
method __call__ (line 158) | def __call__(self, parser, namespace, value, option_string=None):
class DeptypeAction (line 167) | class DeptypeAction(argparse.Action):
method __call__ (line 170) | def __call__(self, parser, namespace, values, option_string=None):
class ConfigScope (line 178) | class ConfigScope(argparse.Action):
method __init__ (line 181) | def __init__(self, *args, **kwargs) -> None:
method default (line 186) | def default(self):
method default (line 190) | def default(self, value):
method choices (line 194) | def choices(self):
method choices (line 198) | def choices(self, value):
method __call__ (line 201) | def __call__(self, parser, namespace, values, option_string=None):
function config_scope_readable_validator (line 205) | def config_scope_readable_validator(value):
function _cdash_reporter (line 214) | def _cdash_reporter(namespace):
class CreateReporter (line 247) | class CreateReporter(argparse.Action):
method __call__ (line 250) | def __call__(self, parser, namespace, values, option_string=None):
function log_format (line 259) | def log_format():
function constraint (line 271) | def constraint():
function package (line 282) | def package():
function packages (line 287) | def packages():
function spec (line 295) | def spec():
function specs (line 300) | def specs():
function installed_spec (line 305) | def installed_spec():
function installed_specs (line 312) | def installed_specs():
function yes_to_all (line 322) | def yes_to_all():
function recurse_dependencies (line 333) | def recurse_dependencies():
function recurse_dependents (line 344) | def recurse_dependents():
function clean (line 355) | def clean():
function deptype (line 366) | def deptype():
function dirty (line 376) | def dirty():
function long (line 387) | def long():
function very_long (line 394) | def very_long():
function tags (line 404) | def tags():
function namespaces (line 416) | def namespaces():
function jobs (line 427) | def jobs():
function concurrent_packages (line 439) | def concurrent_packages():
function install_status (line 451) | def install_status():
function no_install_status (line 466) | def no_install_status():
function show_non_defaults (line 477) | def show_non_defaults():
function no_checksum (line 487) | def no_checksum():
function deprecated (line 498) | def deprecated():
function add_cdash_args (line 507) | def add_cdash_args(subparser, add_help):
function print_cdash_help (line 544) | def print_cdash_help():
function sanitize_reporter_options (line 559) | def sanitize_reporter_options(namespace: argparse.Namespace):
class ConfigSetAction (line 578) | class ConfigSetAction(argparse.Action):
method __init__ (line 586) | def __init__(
method __call__ (line 617) | def __call__(self, parser, namespace, values, option_string):
function add_concretizer_args (line 630) | def add_concretizer_args(subparser):
function add_connection_args (line 689) | def add_connection_args(subparser, add_help):
function use_buildcache (line 734) | def use_buildcache(cli_arg_value):
function mirror_name_or_url (line 788) | def mirror_name_or_url(m):
function mirror_url (line 804) | def mirror_url(url):
function mirror_directory (line 811) | def mirror_directory(path):
function mirror_name (line 818) | def mirror_name(name):
FILE: lib/spack/spack/cmd/common/confirmation.py
function confirm_action (line 15) | def confirm_action(specs: List[spack.spec.Spec], participle: str, noun: ...
FILE: lib/spack/spack/cmd/common/env_utility.py
function setup_parser (line 19) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
class AreDepsInstalledVisitor (line 41) | class AreDepsInstalledVisitor:
method __init__ (line 42) | def __init__(self, context: Context = Context.BUILD):
method accept (line 53) | def accept(self, item):
method neighbors (line 69) | def neighbors(self, item):
function emulate_env_utility (line 76) | def emulate_env_utility(cmd_name, context: Context, args):
FILE: lib/spack/spack/cmd/common/spec_strings.py
class _LegacySpecTokens (line 19) | class _LegacySpecTokens(TokenBase):
function _spec_str_reorder_compiler (line 51) | def _spec_str_reorder_compiler(idx: int, blocks: List[List[Token]]) -> N...
function _spec_str_format (line 69) | def _spec_str_format(spec_str: str) -> Optional[str]:
function _spec_str_default_handler (line 145) | def _spec_str_default_handler(path: str, line: int, col: int, old: str, ...
function _spec_str_fix_handler (line 150) | def _spec_str_fix_handler(path: str, line: int, col: int, old: str, new:...
function _spec_str_ast (line 164) | def _spec_str_ast(path: str, tree: ast.AST, handler: SpecStrHandler) -> ...
function _spec_str_json_and_yaml (line 183) | def _spec_str_json_and_yaml(path: str, data: dict, handler: SpecStrHandl...
function _check_spec_strings (line 209) | def _check_spec_strings(
FILE: lib/spack/spack/cmd/compiler.py
function setup_parser (line 26) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function compiler_find (line 80) | def compiler_find(args):
function compiler_remove (line 101) | def compiler_remove(args):
function compiler_info (line 127) | def compiler_info(args):
function compiler_list (line 180) | def compiler_list(args):
function _all_available_compilers (line 225) | def _all_available_compilers(scope: Optional[str], remote: bool) -> List...
function compiler (line 242) | def compiler(parser, args):
FILE: lib/spack/spack/cmd/compilers.py
function setup_parser (line 15) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function compilers (line 27) | def compilers(parser, args):
FILE: lib/spack/spack/cmd/concretize.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function concretize (line 33) | def concretize(parser, args):
FILE: lib/spack/spack/cmd/config.py
function setup_parser (line 32) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _get_scope_and_section (line 166) | def _get_scope_and_section(args):
function print_configuration (line 191) | def print_configuration(args, *, blame: bool) -> None:
function _print_configuration_helper (line 212) | def _print_configuration_helper(args, *, blame: bool) -> None:
function print_flattened_configuration (line 222) | def print_flattened_configuration(*, blame: bool, yaml: bool) -> None:
function config_get (line 247) | def config_get(args):
function config_blame (line 256) | def config_blame(args):
function config_edit (line 261) | def config_edit(args):
function config_list (line 294) | def config_list(args):
function _config_scope_info (line 302) | def _config_scope_info(args, scope, active, included):
function _config_basic_scope_types (line 333) | def _config_basic_scope_types(scope, included):
function config_scopes (line 346) | def config_scopes(args):
function config_add (line 377) | def config_add(args):
function config_remove (line 395) | def config_remove(args):
function _can_update_config_file (line 423) | def _can_update_config_file(scope: spack.config.ConfigScope, cfg_file):
function _config_change_requires_scope (line 431) | def _config_change_requires_scope(path, spec, scope, match_spec=None):
function _config_change (line 478) | def _config_change(config_path, match_spec_str=None):
function config_change (line 522) | def config_change(args):
function config_update (line 526) | def config_update(args):
function _can_revert_update (line 607) | def _can_revert_update(scope_dir, cfg_file, bkp_file):
function config_revert (line 614) | def config_revert(args):
function config_prefer_upstream (line 669) | def config_prefer_upstream(args):
function config (line 736) | def config(parser, args):
FILE: lib/spack/spack/cmd/containerize.py
function setup_parser (line 16) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function containerize (line 31) | def containerize(parser, args):
FILE: lib/spack/spack/cmd/create.py
class BundlePackageTemplate (line 84) | class BundlePackageTemplate:
method __init__ (line 99) | def __init__(self, name: str, versions, languages: List[str]):
method write (line 105) | def write(self, pkg_path):
class PackageTemplate (line 129) | class PackageTemplate(BundlePackageTemplate):
method __init__ (line 143) | def __init__(self, name, url, versions, languages: List[str]):
class AutotoolsPackageTemplate (line 149) | class AutotoolsPackageTemplate(PackageTemplate):
class AutoreconfPackageTemplate (line 166) | class AutoreconfPackageTemplate(PackageTemplate):
class CargoPackageTemplate (line 197) | class CargoPackageTemplate(PackageTemplate):
class CMakePackageTemplate (line 206) | class CMakePackageTemplate(PackageTemplate):
class GoPackageTemplate (line 221) | class GoPackageTemplate(PackageTemplate):
class LuaPackageTemplate (line 230) | class LuaPackageTemplate(PackageTemplate):
method __init__ (line 243) | def __init__(self, name, url, versions, languages: List[str]):
class MesonPackageTemplate (line 252) | class MesonPackageTemplate(PackageTemplate):
class QMakePackageTemplate (line 265) | class QMakePackageTemplate(PackageTemplate):
class MavenPackageTemplate (line 278) | class MavenPackageTemplate(PackageTemplate):
class SconsPackageTemplate (line 290) | class SconsPackageTemplate(PackageTemplate):
class WafPackageTemplate (line 304) | class WafPackageTemplate(PackageTemplate):
class BazelPackageTemplate (line 315) | class BazelPackageTemplate(PackageTemplate):
class RacketPackageTemplate (line 329) | class RacketPackageTemplate(PackageTemplate):
method __init__ (line 358) | def __init__(self, name, url, versions, languages: List[str]):
class PythonPackageTemplate (line 368) | class PythonPackageTemplate(PackageTemplate):
method __init__ (line 401) | def __init__(self, name, url, versions, languages: List[str]):
class RPackageTemplate (line 458) | class RPackageTemplate(PackageTemplate):
method __init__ (line 476) | def __init__(self, name, url, versions, languages: List[str]):
class PerlmakePackageTemplate (line 499) | class PerlmakePackageTemplate(PackageTemplate):
method __init__ (line 518) | def __init__(self, name, url, versions, languages: List[str]):
class PerlbuildPackageTemplate (line 528) | class PerlbuildPackageTemplate(PerlmakePackageTemplate):
class OctavePackageTemplate (line 540) | class OctavePackageTemplate(PackageTemplate):
method __init__ (line 553) | def __init__(self, name, url, versions, languages: List[str]):
class RubyPackageTemplate (line 564) | class RubyPackageTemplate(PackageTemplate):
method __init__ (line 583) | def __init__(self, name, url, versions, languages: List[str]):
class MakefilePackageTemplate (line 594) | class MakefilePackageTemplate(PackageTemplate):
class IntelPackageTemplate (line 609) | class IntelPackageTemplate(PackageTemplate):
class SIPPackageTemplate (line 619) | class SIPPackageTemplate(PackageTemplate):
method __init__ (line 632) | def __init__(self, name, url, versions, languages: List[str]):
function setup_parser (line 670) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
class BuildSystemAndLanguageGuesser (line 750) | class BuildSystemAndLanguageGuesser:
method __init__ (line 756) | def __init__(self):
method __call__ (line 766) | def __call__(self, archive: str, url: str) -> None:
method _determine_build_system (line 793) | def _determine_build_system(self, url: str) -> None:
method _determine_language (line 848) | def _determine_language(self):
method languages (line 863) | def languages(self) -> List[str]:
function get_name (line 874) | def get_name(name, url):
function get_url (line 922) | def get_url(url: Optional[str]) -> str:
function get_versions (line 937) | def get_versions(args: argparse.Namespace, name: str) -> Tuple[str, Buil...
function get_build_system (line 1002) | def get_build_system(
function get_repository (line 1039) | def get_repository(args: argparse.Namespace, name: str) -> spack.repo.Repo:
function create (line 1083) | def create(parser, args):
FILE: lib/spack/spack/cmd/debug.py
function setup_parser (line 23) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _format_repo_info (line 28) | def _format_repo_info(source, commit):
function _get_builtin_repo_info (line 35) | def _get_builtin_repo_info() -> Optional[str]:
function _get_spack_repo_info (line 70) | def _get_spack_repo_info() -> str:
function report (line 80) | def report(args):
function debug (line 91) | def debug(parser, args):
FILE: lib/spack/spack/cmd/deconcretize.py
function setup_parser (line 24) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function get_deconcretize_list (line 38) | def get_deconcretize_list(
function deconcretize_specs (line 76) | def deconcretize_specs(args, specs):
function deconcretize (line 93) | def deconcretize(parser, args):
FILE: lib/spack/spack/cmd/dependencies.py
function setup_parser (line 21) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function dependencies (line 49) | def dependencies(parser, args):
FILE: lib/spack/spack/cmd/dependents.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function inverted_dependencies (line 41) | def inverted_dependencies():
function get_dependents (line 64) | def get_dependents(pkg_name, ideps, transitive=False, dependents=None):
function dependents (line 87) | def dependents(parser, args):
FILE: lib/spack/spack/cmd/deprecate.py
function setup_parser (line 38) | def setup_parser(sp: argparse.ArgumentParser) -> None:
function deprecate (line 88) | def deprecate(parser, args):
FILE: lib/spack/spack/cmd/dev_build.py
function setup_parser (line 24) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function dev_build (line 93) | def dev_build(self, args):
FILE: lib/spack/spack/cmd/develop.py
function setup_parser (line 27) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _retrieve_develop_source (line 78) | def _retrieve_develop_source(spec: spack.spec.Spec, abspath: str) -> None:
function assure_concrete_spec (line 99) | def assure_concrete_spec(env: spack.environment.Environment, spec: spack...
function setup_src_code (line 125) | def setup_src_code(spec: spack.spec.Spec, src_path: str, clone: bool = T...
function _update_config (line 145) | def _update_config(spec, path):
function update_env (line 158) | def update_env(
function _clone (line 189) | def _clone(spec: spack.spec.Spec, abspath: str, force: bool = False):
function _abs_code_path (line 204) | def _abs_code_path(
function _dev_spec_generator (line 211) | def _dev_spec_generator(args, env):
function develop (line 254) | def develop(parser, args):
FILE: lib/spack/spack/cmd/diff.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function shift (line 50) | def shift(asp_function: asp.AspFunction) -> asp.AspFunction:
function compare_specs (line 58) | def compare_specs(a, b, to_string=False, color=None, ignore_packages=None):
function flatten (line 125) | def flatten(functions):
function print_difference (line 138) | def print_difference(c, attributes="all", out=None):
function diff (line 208) | def diff(parser, args):
FILE: lib/spack/spack/cmd/docs.py
function docs (line 12) | def docs(parser, args):
FILE: lib/spack/spack/cmd/edit.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function locate_package (line 80) | def locate_package(name: str, repo: Optional[spack.repo.Repo]) -> str:
function locate_build_system (line 94) | def locate_build_system(name: str, repo: Optional[spack.repo.Repo]) -> str:
function locate_file (line 118) | def locate_file(name: str, path: str) -> str:
function edit (line 148) | def edit(parser, args):
FILE: lib/spack/spack/cmd/env.py
function env_create_setup_parser (line 61) | def env_create_setup_parser(subparser):
function env_create (line 101) | def env_create(args):
function _env_create (line 134) | def _env_create(
function env_activate_setup_parser (line 185) | def env_activate_setup_parser(subparser):
function create_temp_env_directory (line 285) | def create_temp_env_directory():
function _tty_info (line 293) | def _tty_info(msg):
function env_activate (line 300) | def env_activate(args):
function env_deactivate_setup_parser (line 394) | def env_deactivate_setup_parser(subparser):
function env_deactivate (line 434) | def env_deactivate(args):
function env_track_setup_parser (line 457) | def env_track_setup_parser(subparser):
function env_track (line 464) | def env_track(args):
function filter_managed_env_names (line 495) | def filter_managed_env_names(env_names: Set[str]) -> Set[str]:
function get_valid_envs (line 520) | def get_valid_envs(env_names: Set[str]) -> Set[ev.Environment]:
function _env_untrack_or_remove (line 533) | def _env_untrack_or_remove(
function env_untrack_setup_parser (line 627) | def env_untrack_setup_parser(subparser):
function env_untrack (line 636) | def env_untrack(args):
function env_remove_setup_parser (line 645) | def env_remove_setup_parser(subparser):
function env_remove (line 666) | def env_remove(args):
function env_rename_setup_parser (line 676) | def env_rename_setup_parser(subparser):
function env_rename (line 702) | def env_rename(args):
function env_list_setup_parser (line 751) | def env_list_setup_parser(subparser):
function env_list (line 755) | def env_list(args):
class ViewAction (line 774) | class ViewAction:
method actions (line 780) | def actions():
function env_view_setup_parser (line 787) | def env_view_setup_parser(subparser):
function env_view (line 799) | def env_view(args):
function env_status_setup_parser (line 823) | def env_status_setup_parser(subparser):
function env_status (line 827) | def env_status(args):
function env_loads_setup_parser (line 844) | def env_loads_setup_parser(subparser):
function env_loads (line 861) | def env_loads(args):
function env_update_setup_parser (line 885) | def env_update_setup_parser(subparser):
function env_update (line 901) | def env_update(args):
function env_revert_setup_parser (line 931) | def env_revert_setup_parser(subparser):
function env_revert (line 947) | def env_revert(args):
function env_depfile_setup_parser (line 979) | def env_depfile_setup_parser(subparser):
function env_depfile (line 1034) | def env_depfile(args):
function setup_parser (line 1080) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function env (line 1104) | def env(parser, args):
FILE: lib/spack/spack/cmd/extensions.py
function setup_parser (line 21) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function extensions (line 50) | def extensions(parser, args):
FILE: lib/spack/spack/cmd/external.py
function setup_parser (line 29) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function external_find (line 96) | def external_find(args):
function packages_to_search_for (line 161) | def packages_to_search_for(
function external_read_cray_manifest (line 183) | def external_read_cray_manifest(args):
function _collect_and_consume_cray_manifest_files (line 193) | def _collect_and_consume_cray_manifest_files(
function external_list (line 247) | def external_list(args):
function external (line 257) | def external(parser, args):
class NoManifestFileError (line 267) | class NoManifestFileError(spack.error.SpackError):
FILE: lib/spack/spack/cmd/fetch.py
function setup_parser (line 19) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function fetch (line 38) | def fetch(parser, args):
FILE: lib/spack/spack/cmd/find.py
function setup_parser (line 31) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function query_arguments (line 190) | def query_arguments(args):
function make_env_decorator (line 236) | def make_env_decorator(env):
function display_env (line 254) | def display_env(env, args, decorator, results):
function _find_query (line 339) | def _find_query(args, env):
function find (line 401) | def find(parser, args):
FILE: lib/spack/spack/cmd/gc.py
function setup_parser (line 20) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function roots_from_environments (line 47) | def roots_from_environments(args, active_env):
function gc (line 75) | def gc(parser, args):
FILE: lib/spack/spack/cmd/gpg.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function gpg_create (line 131) | def gpg_create(args):
function gpg_export (line 150) | def gpg_export(args):
function gpg_list (line 158) | def gpg_list(args):
function gpg_sign (line 163) | def gpg_sign(args):
function gpg_trust (line 181) | def gpg_trust(args):
function gpg_init (line 186) | def gpg_init(args):
function gpg_untrust (line 199) | def gpg_untrust(args):
function gpg_verify (line 204) | def gpg_verify(args):
function gpg_publish (line 213) | def gpg_publish(args):
function gpg (line 231) | def gpg(parser, args):
FILE: lib/spack/spack/cmd/graph.py
function setup_parser (line 19) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function graph (line 57) | def graph(parser, args):
FILE: lib/spack/spack/cmd/help.py
function setup_parser (line 85) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function help (line 112) | def help(parser, args):
FILE: lib/spack/spack/cmd/info.py
class Formatter (line 44) | class Formatter:
method format_name (line 72) | def format_name(self, element: Any) -> str:
method format_values (line 75) | def format_values(self, element: Any) -> str:
method format_description (line 78) | def format_description(self, element: Any) -> str:
function padder (line 82) | def padder(str_list: Iterable, extra: int = 0) -> Callable:
function setup_parser (line 94) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function section_title (line 142) | def section_title(s: str) -> str:
function version (line 146) | def version(s: str) -> str:
function format_deptype (line 150) | def format_deptype(depflag: int) -> str:
class DependencyFormatter (line 159) | class DependencyFormatter(Formatter):
method format_name (line 160) | def format_name(self, dep: spack.dependency.Dependency) -> str:
method format_values (line 163) | def format_values(self, dep: spack.dependency.Dependency) -> str:
function count_bool_variant_conditions (line 167) | def count_bool_variant_conditions(
function print_dependencies (line 184) | def print_dependencies(pkg: PackageBase, args: Namespace) -> None:
function print_dependency_suggestion (line 189) | def print_dependency_suggestion(pkg: PackageBase) -> None:
function print_detectable (line 217) | def print_detectable(pkg: PackageBase, args: Namespace) -> None:
function print_maintainers (line 245) | def print_maintainers(pkg: PackageBase, args: Namespace) -> None:
function print_namespace (line 254) | def print_namespace(pkg: PackageBase, args: Namespace) -> None:
function print_phases (line 263) | def print_phases(pkg: PackageBase, args: Namespace) -> None:
function print_tags (line 277) | def print_tags(pkg: PackageBase, args: Namespace) -> None:
function print_tests (line 289) | def print_tests(pkg: PackageBase, args: Namespace) -> None:
function _fmt_when (line 327) | def _fmt_when(when: "spack.spec.Spec", indent: int) -> str:
function _fmt_variant_value (line 333) | def _fmt_variant_value(v: Any) -> str:
function _print_definition (line 337) | def _print_definition(
function print_header (line 417) | def print_header(header: str, when_indexed_dictionary: Dict, formatter: ...
function max_name_length (line 427) | def max_name_length(when_indexed_dictionary: Dict, formatter: Formatter)...
function print_grouped_by_when (line 437) | def print_grouped_by_when(
function print_by_name (line 478) | def print_by_name(
function print_definitions (line 516) | def print_definitions(
class VariantFormatter (line 538) | class VariantFormatter(Formatter):
method format_name (line 539) | def format_name(self, variant: spack.variant.Variant) -> str:
method format_values (line 544) | def format_values(self, variant: spack.variant.Variant) -> str:
method format_description (line 556) | def format_description(self, variant: spack.variant.Variant) -> str:
function print_variants (line 560) | def print_variants(pkg: PackageBase, args: Namespace) -> None:
function print_licenses (line 565) | def print_licenses(pkg: PackageBase, args: Namespace) -> None:
function print_versions (line 570) | def print_versions(pkg: PackageBase, args: Namespace) -> None:
function print_virtuals (line 625) | def print_virtuals(pkg: PackageBase, args: Namespace) -> None:
function info (line 639) | def info(parser: argparse.ArgumentParser, args: Namespace) -> None:
FILE: lib/spack/spack/cmd/install.py
function cache_opt (line 30) | def cache_opt(use_buildcache: str, default: InstallPolicy) -> InstallPol...
function install_kwargs_from_args (line 38) | def install_kwargs_from_args(args):
function setup_parser (line 70) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function default_log_file (line 228) | def default_log_file(spec):
function report_filename (line 238) | def report_filename(args: argparse.Namespace, specs: List[spack.spec.Spe...
function compute_tests_install_kwargs (line 244) | def compute_tests_install_kwargs(specs, cli_test_arg):
function require_user_confirmation_for_overwrite (line 253) | def require_user_confirmation_for_overwrite(concrete_specs, args):
function _dump_log_on_error (line 279) | def _dump_log_on_error(e: InstallError):
function _die_require_env (line 290) | def _die_require_env():
function install (line 307) | def install(parser, args):
function _maybe_add_and_concretize (line 342) | def _maybe_add_and_concretize(args, env, specs):
function install_with_active_env (line 369) | def install_with_active_env(env: ev.Environment, args, install_kwargs, r...
function concrete_specs_from_cli (line 413) | def concrete_specs_from_cli(args, install_kwargs):
function install_without_active_env (line 430) | def install_without_active_env(args, install_kwargs, reporter):
FILE: lib/spack/spack/cmd/license.py
function _licensed_files (line 65) | def _licensed_files(root: str = spack.paths.prefix) -> Generator[str, No...
function list_files (line 85) | def list_files(args):
class ErrorType (line 93) | class ErrorType(enum.Enum):
class LicenseError (line 107) | class LicenseError:
method __init__ (line 110) | def __init__(self):
method add_error (line 113) | def add_error(self, error):
method has_errors (line 116) | def has_errors(self):
method error_messages (line 119) | def error_messages(self):
function _check_license (line 132) | def _check_license(lines, path):
function verify (line 169) | def verify(args):
function setup_parser (line 189) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function license (line 202) | def license(parser, args):
FILE: lib/spack/spack/cmd/list.py
function formatter (line 34) | def formatter(func):
function setup_parser (line 40) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function filter_by_name (line 95) | def filter_by_name(pkgs, args):
function name_only (line 139) | def name_only(pkgs, out):
function github_url (line 146) | def github_url(pkg: Type[spack.package_base.PackageBase]) -> Optional[str]:
function rows_for_ncols (line 202) | def rows_for_ncols(elts, ncols):
function get_dependencies (line 213) | def get_dependencies(pkg):
function version_json (line 223) | def version_json(pkg_names, out):
function html (line 257) | def html(pkg_names, out):
function list (line 370) | def list(parser, args):
FILE: lib/spack/spack/cmd/load.py
function setup_parser (line 20) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function load (line 78) | def load(parser, args):
FILE: lib/spack/spack/cmd/location.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function location (line 94) | def location(parser, args):
FILE: lib/spack/spack/cmd/log_parse.py
function setup_parser (line 20) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function log_parse (line 51) | def log_parse(parser, args):
FILE: lib/spack/spack/cmd/logs.py
function setup_parser (line 24) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _dump_byte_stream_to_stdout (line 28) | def _dump_byte_stream_to_stdout(instream: io.BufferedIOBase) -> None:
function _logs (line 34) | def _logs(cmdline_spec: spack.spec.Spec, concrete_spec: spack.spec.Spec):
function logs (line 60) | def logs(parser, args):
FILE: lib/spack/spack/cmd/maintainers.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function packages_to_maintainers (line 53) | def packages_to_maintainers(package_names=None):
function maintainers_to_packages (line 66) | def maintainers_to_packages(users=None):
function maintained_packages (line 78) | def maintained_packages():
function union_values (line 91) | def union_values(dictionary):
function maintainers (line 104) | def maintainers(parser, args):
FILE: lib/spack/spack/cmd/make_installer.py
function txt_to_rtf (line 19) | def txt_to_rtf(file_path):
function setup_parser (line 39) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function make_installer (line 62) | def make_installer(parser, args):
FILE: lib/spack/spack/cmd/mark.py
function setup_parser (line 30) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function find_matching_specs (line 56) | def find_matching_specs(
function do_mark (line 93) | def do_mark(specs, explicit):
function mark_specs (line 105) | def mark_specs(args, specs):
function mark (line 112) | def mark(parser, args):
FILE: lib/spack/spack/cmd/mirror.py
function setup_parser (line 32) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _configure_access_pair (line 252) | def _configure_access_pair(args, id_tok, id_variable_tok, secret_variabl...
function mirror_add (line 307) | def mirror_add(args):
function mirror_remove (line 364) | def mirror_remove(args):
function _configure_mirror (line 383) | def _configure_mirror(args):
function mirror_set (line 441) | def mirror_set(args):
function mirror_set_url (line 446) | def mirror_set_url(args):
function mirror_list (line 451) | def mirror_list(args):
function specs_from_text_file (line 462) | def specs_from_text_file(filename, concretize=False):
function concrete_specs_from_user (line 478) | def concrete_specs_from_user(args):
function extend_with_additional_versions (line 492) | def extend_with_additional_versions(specs, num_versions):
function filter_externals (line 501) | def filter_externals(specs):
function extend_with_dependencies (line 509) | def extend_with_dependencies(specs):
function concrete_specs_from_cli_or_file (line 518) | def concrete_specs_from_cli_or_file(args):
class IncludeFilter (line 533) | class IncludeFilter:
method __init__ (line 534) | def __init__(self, args):
method __call__ (line 542) | def __call__(self, x):
method _not_license_excluded (line 545) | def _not_license_excluded(self, x):
method _not_cmdline_excluded (line 560) | def _not_cmdline_excluded(self, x):
function concrete_specs_from_environment (line 565) | def concrete_specs_from_environment():
function all_specs_with_all_versions (line 573) | def all_specs_with_all_versions():
function versions_per_spec (line 580) | def versions_per_spec(args):
function process_mirror_stats (line 598) | def process_mirror_stats(present, mirrored, error):
function mirror_create (line 612) | def mirror_create(args):
function _specs_to_mirror (line 656) | def _specs_to_mirror(args):
function create_mirror_for_one_spec (line 670) | def create_mirror_for_one_spec(candidate, mirror_cache):
function create_mirror_for_all_specs (line 679) | def create_mirror_for_all_specs(mirror_specs, path, skip_unstable_versio...
function create (line 698) | def create(path, specs, skip_unstable_versions=False):
function mirror_destroy (line 723) | def mirror_destroy(args):
function mirror (line 736) | def mirror(parser, args):
FILE: lib/spack/spack/cmd/module.py
function setup_parser (line 19) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function module (line 25) | def module(parser, args):
FILE: lib/spack/spack/cmd/modules/__init__.py
function setup_parser (line 28) | def setup_parser(subparser):
function add_loads_arguments (line 68) | def add_loads_arguments(subparser):
function one_spec_or_raise (line 93) | def one_spec_or_raise(specs):
function check_module_set_name (line 107) | def check_module_set_name(name):
function loads (line 136) | def loads(module_type, specs, args, out=None):
function find (line 197) | def find(module_type, specs, args):
function rm (line 240) | def rm(module_type, specs, args):
function refresh (line 271) | def refresh(module_type, specs, args):
function modules_cmd (line 365) | def modules_cmd(parser, args, module_type, callbacks=callbacks):
FILE: lib/spack/spack/cmd/modules/lmod.py
function add_command (line 14) | def add_command(parser, command_dict):
function setdefault (line 32) | def setdefault(module_type, specs, args):
FILE: lib/spack/spack/cmd/modules/tcl.py
function add_command (line 13) | def add_command(parser, command_dict):
function setdefault (line 31) | def setdefault(module_type, specs, args):
FILE: lib/spack/spack/cmd/patch.py
function setup_parser (line 20) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function patch (line 25) | def patch(parser, args):
function _patch_env (line 41) | def _patch_env(env: ev.Environment):
function _patch (line 47) | def _patch(pkg: spack.package_base.PackageBase):
FILE: lib/spack/spack/cmd/pkg.py
function setup_parser (line 22) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function pkg_add (line 88) | def pkg_add(args):
function pkg_list (line 93) | def pkg_list(args):
function pkg_diff (line 98) | def pkg_diff(args):
function pkg_removed (line 113) | def pkg_removed(args):
function pkg_added (line 120) | def pkg_added(args):
function pkg_changed (line 127) | def pkg_changed(args):
function pkg_source (line 137) | def pkg_source(args):
function pkg_hash (line 160) | def pkg_hash(args):
function get_grep (line 168) | def get_grep(required=False):
function pkg_grep (line 176) | def pkg_grep(args, unknown_args):
function pkg (line 236) | def pkg(parser, args, unknown_args):
FILE: lib/spack/spack/cmd/providers.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function providers (line 25) | def providers(parser, args):
FILE: lib/spack/spack/cmd/pydoc.py
function setup_parser (line 13) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function pydoc (line 17) | def pydoc(parser, args):
FILE: lib/spack/spack/cmd/python.py
function setup_parser (line 23) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function python (line 59) | def python(parser, args, unknown_args):
function ipython_interpreter (line 89) | def ipython_interpreter(args):
function python_interpreter (line 121) | def python_interpreter(args):
function propagate_exceptions_from (line 159) | def propagate_exceptions_from(console):
FILE: lib/spack/spack/cmd/reindex.py
function reindex (line 16) | def reindex(parser, args):
FILE: lib/spack/spack/cmd/remove.py
function setup_parser (line 16) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function remove (line 33) | def remove(parser, args):
FILE: lib/spack/spack/cmd/repo.py
function setup_parser (line 37) | def setup_parser(subparser: argparse.ArgumentParser):
function repo_create (line 220) | def repo_create(args):
function _add_repo (line 227) | def _add_repo(
function repo_add (line 296) | def repo_add(args):
function repo_remove (line 308) | def repo_remove(args):
function _remove_repo (line 320) | def _remove_repo(namespace_or_path, scope):
function repo_list (line 353) | def repo_list(args):
function _get_repo (line 437) | def _get_repo(name_or_path: str) -> Optional[spack.repo.Repo]:
function repo_migrate (line 457) | def repo_migrate(args: Any) -> int:
function repo_set (line 526) | def repo_set(args):
function _iter_repos_from_descriptors (line 560) | def _iter_repos_from_descriptors(
function repo_update (line 582) | def repo_update(args):
function repo_show_version_updates (line 658) | def repo_show_version_updates(args):
function repo (line 735) | def repo(parser, args):
FILE: lib/spack/spack/cmd/resource.py
function setup_parser (line 17) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _show_patch (line 29) | def _show_patch(sha256):
function resource_list (line 60) | def resource_list(args):
function resource_show (line 70) | def resource_show(args):
function resource (line 75) | def resource(parser, args):
FILE: lib/spack/spack/cmd/restage.py
function setup_parser (line 16) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function restage (line 20) | def restage(parser, args):
FILE: lib/spack/spack/cmd/solve.py
function setup_parser (line 29) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _process_result (line 55) | def _process_result(result, show, required_format, kwargs):
function solve (line 107) | def solve(parser, args):
FILE: lib/spack/spack/cmd/spec.py
function setup_parser (line 25) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function spec (line 80) | def spec(parser, args):
FILE: lib/spack/spack/cmd/stage.py
class StageFilter (line 21) | class StageFilter:
method __init__ (line 26) | def __init__(self, exclusions, skip_installed):
method __call__ (line 34) | def __call__(self, spec):
function setup_parser (line 48) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function stage (line 66) | def stage(parser, args):
function _stage_env (line 104) | def _stage_env(env: ev.Environment, filter):
function _stage (line 113) | def _stage(pkg: spack.package_base.PackageBase):
FILE: lib/spack/spack/cmd/style.py
class tool (line 46) | class tool:
method __init__ (line 47) | def __init__(
method __call__ (line 55) | def __call__(self, fun):
method installed (line 61) | def installed(self) -> bool:
method executable (line 65) | def executable(self) -> Optional[Executable]:
function changed_files (line 73) | def changed_files(base="develop", untracked=True, all_files=False, root=...
function setup_parser (line 137) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function cwd_relative (line 202) | def cwd_relative(path: Path, root: Union[Path, str], initial_working_dir...
function rewrite_and_print_output (line 209) | def rewrite_and_print_output(
function print_tool_result (line 237) | def print_tool_result(tool, returncode):
function ruff_check (line 245) | def ruff_check(file_list, args):
function ruff_format (line 258) | def ruff_format(file_list, args):
function run_ruff (line 268) | def run_ruff(
function run_mypy (line 298) | def run_mypy(file_list, args):
function _module_part (line 326) | def _module_part(root: Path, expr: str):
function _run_import_check (line 346) | def _run_import_check(
function run_import_check (line 460) | def run_import_check(file_list, args):
function print_style_header (line 474) | def print_style_header(file_list: List[Path], args, tools_to_run):
function validate_toolset (line 487) | def validate_toolset(arg_value):
function missing_tools (line 496) | def missing_tools(tools_to_run: List[str]) -> List[str]:
function _bootstrap_dev_dependencies (line 500) | def _bootstrap_dev_dependencies():
function style (line 507) | def style(parser, args):
FILE: lib/spack/spack/cmd/tags.py
function report_tags (line 20) | def report_tags(category, tags):
function setup_parser (line 36) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function tags (line 60) | def tags(parser, args):
function packages_with_tags (line 110) | def packages_with_tags(
FILE: lib/spack/spack/cmd/test.py
function setup_parser (line 30) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function test_run (line 149) | def test_run(args):
function report_filename (line 218) | def report_filename(args, test_suite):
function test_list (line 222) | def test_list(args):
function test_find (line 256) | def test_find(args): # TODO: merge with status (noargs)
function test_status (line 296) | def test_status(args):
function _report_suite_results (line 317) | def _report_suite_results(test_suite, args, constraints):
function test_results (line 381) | def test_results(args):
function test_remove (line 408) | def test_remove(args):
function test (line 445) | def test(parser, args):
FILE: lib/spack/spack/cmd/test_env.py
function test_env (line 17) | def test_env(parser, args):
FILE: lib/spack/spack/cmd/tutorial.py
function setup_parser (line 40) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function tutorial (line 44) | def tutorial(parser, args):
FILE: lib/spack/spack/cmd/undevelop.py
function setup_parser (line 18) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function _update_config (line 36) | def _update_config(specs_to_remove):
function undevelop (line 49) | def undevelop(parser, args):
FILE: lib/spack/spack/cmd/uninstall.py
function setup_parser (line 36) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function find_matching_specs (line 80) | def find_matching_specs(
function installed_dependents (line 133) | def installed_dependents(specs: List[spack.spec.Spec]) -> List[spack.spe...
function dependent_environments (line 157) | def dependent_environments(
function all_specs_in_env (line 176) | def all_specs_in_env(env: ev.Environment, specs: List[spack.spec.Spec]) ...
function _remove_from_env (line 182) | def _remove_from_env(spec, env):
function do_uninstall (line 192) | def do_uninstall(specs: List[spack.spec.Spec], force: bool = False):
function get_uninstall_list (line 204) | def get_uninstall_list(args, specs: List[spack.spec.Spec], env: Optional...
function uninstall_specs (line 272) | def uninstall_specs(args, specs):
function uninstall (line 296) | def uninstall(parser, args):
FILE: lib/spack/spack/cmd/unit_test.py
function setup_parser (line 30) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function do_list (line 112) | def do_list(args, extra_args):
function add_back_pytest_args (line 200) | def add_back_pytest_args(args, unknown_args):
function unit_test (line 214) | def unit_test(parser, args, unknown_args):
FILE: lib/spack/spack/cmd/unload.py
function setup_parser (line 21) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function unload (line 68) | def unload(parser, args):
FILE: lib/spack/spack/cmd/url.py
function setup_parser (line 35) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function url (line 105) | def url(parser, args):
function url_parse (line 111) | def url_parse(args):
function url_list (line 153) | def url_list(args):
function url_summary (line 176) | def url_summary(args):
function url_stats (line 286) | def url_stats(args):
function print_name_and_version (line 415) | def print_name_and_version(url):
function url_list_parsing (line 433) | def url_list_parsing(args, urls, url, pkg):
function name_parsed_correctly (line 481) | def name_parsed_correctly(pkg, name):
function version_parsed_correctly (line 498) | def version_parsed_correctly(pkg, version):
function remove_prefix (line 519) | def remove_prefix(pkg_name):
function remove_separators (line 552) | def remove_separators(version):
FILE: lib/spack/spack/cmd/verify.py
function setup_parser (line 26) | def setup_parser(subparser: argparse.ArgumentParser):
function verify (line 76) | def verify(parser, args):
function verify_versions (line 87) | def verify_versions(args):
function _verify_version (line 103) | def _verify_version(specs):
function verify_libraries (line 145) | def verify_libraries(args):
function _verify_libraries (line 167) | def _verify_libraries(spec: spack.spec.Spec, unresolved_libraries: List[...
function verify_manifest (line 183) | def verify_manifest(args):
FILE: lib/spack/spack/cmd/versions.py
function setup_parser (line 20) | def setup_parser(subparser: argparse.ArgumentParser) -> None:
function versions (line 37) | def versions(parser, args):
FILE: lib/spack/spack/cmd/view.py
function disambiguate_in_view (line 58) | def disambiguate_in_view(specs, view):
function setup_parser (line 78) | def setup_parser(sp: argparse.ArgumentParser) -> None:
function view (line 190) | def view(parser, args):
FILE: lib/spack/spack/compilers/adaptor.py
class Languages (line 13) | class Languages(enum.Enum):
class CompilerAdaptor (line 19) | class CompilerAdaptor:
method __init__ (line 24) | def __init__(
method _lang_exists_or_raise (line 33) | def _lang_exists_or_raise(self, name: str, *, lang: Languages) -> None:
method _maybe_return_attribute (line 40) | def _maybe_return_attribute(self, name: str, *, lang: Languages) -> str:
method cc_rpath_arg (line 45) | def cc_rpath_arg(self) -> str:
method cxx_rpath_arg (line 50) | def cxx_rpath_arg(self) -> str:
method fc_rpath_arg (line 55) | def fc_rpath_arg(self) -> str:
method f77_rpath_arg (line 60) | def f77_rpath_arg(self) -> str:
method linker_arg (line 65) | def linker_arg(self) -> str:
method name (line 69) | def name(self):
method version (line 73) | def version(self):
method implicit_rpaths (line 76) | def implicit_rpaths(self) -> List[str]:
method opt_flags (line 86) | def opt_flags(self) -> List[str]:
method debug_flags (line 90) | def debug_flags(self) -> List[str]:
method openmp_flag (line 94) | def openmp_flag(self) -> str:
method cxx98_flag (line 98) | def cxx98_flag(self) -> str:
method cxx11_flag (line 104) | def cxx11_flag(self) -> str:
method cxx14_flag (line 110) | def cxx14_flag(self) -> str:
method cxx17_flag (line 116) | def cxx17_flag(self) -> str:
method cxx20_flag (line 122) | def cxx20_flag(self) -> str:
method cxx23_flag (line 128) | def cxx23_flag(self) -> str:
method c99_flag (line 134) | def c99_flag(self) -> str:
method c11_flag (line 140) | def c11_flag(self) -> str:
method c17_flag (line 146) | def c17_flag(self) -> str:
method c23_flag (line 152) | def c23_flag(self) -> str:
method cc_pic_flag (line 158) | def cc_pic_flag(self) -> str:
method cxx_pic_flag (line 163) | def cxx_pic_flag(self) -> str:
method fc_pic_flag (line 168) | def fc_pic_flag(self) -> str:
method f77_pic_flag (line 173) | def f77_pic_flag(self) -> str:
method prefix (line 178) | def prefix(self) -> str:
method extra_rpaths (line 182) | def extra_rpaths(self) -> List[str]:
method cc (line 187) | def cc(self):
method cxx (line 191) | def cxx(self):
method fc (line 195) | def fc(self):
method f77 (line 200) | def f77(self):
method stdcxx_libs (line 205) | def stdcxx_libs(self):
class DeprecatedCompiler (line 209) | class DeprecatedCompiler(lang.DeprecatedProperty):
method __init__ (line 210) | def __init__(self) -> None:
method factory (line 213) | def factory(self, instance, owner) -> CompilerAdaptor:
FILE: lib/spack/spack/compilers/config.py
function compiler_config_files (line 32) | def compiler_config_files():
function add_compiler_to_config (line 45) | def add_compiler_to_config(new_compilers, *, scope=None) -> None:
function find_compilers (line 54) | def find_compilers(
function select_new_compilers (line 86) | def select_new_compilers(
function supported_compilers (line 96) | def supported_compilers() -> List[str]:
function all_compilers (line 101) | def all_compilers(scope: Optional[str] = None, init_config: bool = True)...
function _init_packages_yaml (line 118) | def _init_packages_yaml(
function all_compilers_from (line 144) | def all_compilers_from(
class CompilerRemover (line 158) | class CompilerRemover:
method __init__ (line 161) | def __init__(self, configuration: spack.config.Configuration) -> None:
method mark_compilers (line 165) | def mark_compilers(self, *, match: str, scope: Optional[str] = None) -...
method _mark_in_packages_yaml (line 180) | def _mark_in_packages_yaml(self, match, candidate_scopes):
method flush (line 216) | def flush(self):
function compilers_for_arch (line 224) | def compilers_for_arch(
function name_os_target (line 236) | def name_os_target(spec: spack.spec.Spec) -> Tuple[str, str, str]:
class CompilerFactory (line 255) | class CompilerFactory:
method from_packages_yaml (line 259) | def from_packages_yaml(
method from_legacy_yaml (line 286) | def from_legacy_yaml(compiler_dict: Dict[str, Any]) -> List[spack.spec...
method from_compilers_yaml (line 322) | def from_compilers_yaml(
class UnknownCompilerError (line 332) | class UnknownCompilerError(spack.error.SpackError):
method __init__ (line 333) | def __init__(self, compiler_name):
class NoAvailableCompilerError (line 337) | class NoAvailableCompilerError(spack.error.SpackError):
FILE: lib/spack/spack/compilers/error.py
class CompilerAccessError (line 9) | class CompilerAccessError(SpackError):
method __init__ (line 10) | def __init__(self, compiler, paths):
class UnsupportedCompilerFlag (line 17) | class UnsupportedCompilerFlag(SpackError):
method __init__ (line 22) | def __init__(self, message, long_message=None):
FILE: lib/spack/spack/compilers/flags.py
function tokenize_flags (line 7) | def tokenize_flags(flags_values: str, propagate: bool = False) -> List[T...
FILE: lib/spack/spack/compilers/libraries.py
function parse_non_system_link_dirs (line 42) | def parse_non_system_link_dirs(compiler_debug_output: str) -> List[str]:
function filter_non_existing_dirs (line 65) | def filter_non_existing_dirs(dirs):
function in_system_subdirectory (line 69) | def in_system_subdirectory(path):
function _parse_link_paths (line 81) | def _parse_link_paths(string):
class CompilerPropertyDetector (line 139) | class CompilerPropertyDetector:
method __init__ (line 142) | def __init__(self, compiler_spec: spack.spec.Spec):
method compiler_environment (line 148) | def compiler_environment(self):
method _compile_dummy_c_source (line 180) | def _compile_dummy_c_source(self) -> Optional[str]:
method compiler_verbose_output (line 222) | def compiler_verbose_output(self) -> Optional[str]:
method default_dynamic_linker (line 226) | def default_dynamic_linker(self) -> Optional[str]:
method default_libc (line 235) | def default_libc(self) -> Optional[spack.spec.Spec]:
method implicit_rpaths (line 249) | def implicit_rpaths(self) -> List[str]:
class DefaultDynamicLinkerFilter (line 269) | class DefaultDynamicLinkerFilter:
method __init__ (line 274) | def __init__(self, dynamic_linker: Optional[str]) -> None:
method is_dynamic_loader_default_path (line 293) | def is_dynamic_loader_default_path(self, p: str) -> bool:
method __call__ (line 302) | def __call__(self, dirs: List[str]) -> List[str]:
function dynamic_linker_filter_for (line 308) | def dynamic_linker_filter_for(node: spack.spec.Spec) -> Optional[Default...
function compiler_spec (line 319) | def compiler_spec(node: spack.spec.Spec) -> Optional[spack.spec.Spec]:
class CompilerCacheEntry (line 341) | class CompilerCacheEntry:
method __init__ (line 346) | def __init__(self, c_compiler_output: Optional[str]):
method empty (line 350) | def empty(self) -> bool:
method from_dict (line 356) | def from_dict(cls, data: Dict[str, Optional[str]]):
class CompilerCache (line 365) | class CompilerCache:
method value (line 368) | def value(self, compiler: spack.spec.Spec) -> Dict[str, Optional[str]]:
method get (line 371) | def get(self, compiler: spack.spec.Spec) -> CompilerCacheEntry:
class FileCompilerCache (line 375) | class FileCompilerCache(CompilerCache):
method __init__ (line 381) | def __init__(self, cache: "FileCache") -> None:
method _get_entry (line 385) | def _get_entry(self, key: str, *, allow_empty: bool) -> Optional[Compi...
method get (line 395) | def get(self, compiler: spack.spec.Spec) -> CompilerCacheEntry:
method _key (line 437) | def _key(self, compiler: spack.spec.Spec) -> str:
function _make_compiler_cache (line 442) | def _make_compiler_cache():
FILE: lib/spack/spack/concretize.py
function _concretize_specs_together (line 28) | def _concretize_specs_together(
function concretize_together (line 51) | def concretize_together(
function concretize_together_when_possible (line 72) | def concretize_together_when_possible(
function concretize_separately (line 125) | def concretize_separately(
function _concretize_task (line 213) | def _concretize_task(
function concretize_one (line 223) | def concretize_one(
class UnavailableCompilerVersionError (line 272) | class UnavailableCompilerVersionError(spack.error.SpackError):
method __init__ (line 276) | def __init__(self, compiler_spec: CompilerSpec, arch: Optional[ArchSpe...
FILE: lib/spack/spack/config.py
class ConfigScope (line 141) | class ConfigScope:
method __init__ (line 142) | def __init__(self, name: str, included: bool = False) -> None:
method included_scopes (line 153) | def included_scopes(self) -> List["ConfigScope"]:
method exists (line 175) | def exists(self) -> bool:
method override_include (line 179) | def override_include(self):
method transitive_includes (line 189) | def transitive_includes(self, _names: Optional[Set[str]] = None) -> Se...
method get_section_filename (line 198) | def get_section_filename(self, section: str) -> str:
method get_section (line 201) | def get_section(self, section: str) -> Optional[YamlConfigDict]:
method _write_section (line 204) | def _write_section(self, section: str) -> None:
method clear (line 207) | def clear(self) -> None:
method __repr__ (line 211) | def __repr__(self) -> str:
class DirectoryConfigScope (line 215) | class DirectoryConfigScope(ConfigScope):
method __init__ (line 218) | def __init__(
method exists (line 233) | def exists(self) -> bool:
method get_section_filename (line 236) | def get_section_filename(self, section: str) -> str:
method get_section (line 241) | def get_section(self, section: str) -> Optional[YamlConfigDict]:
method _get_section (line 248) | def _get_section(self, section: str) -> Optional[YamlConfigDict]:
method _write_section (line 257) | def _write_section(self, section: str) -> None:
class SingleFileScope (line 282) | class SingleFileScope(ConfigScope):
method __init__ (line 285) | def __init__(
method exists (line 322) | def exists(self) -> bool:
method get_section_filename (line 325) | def get_section_filename(self, section) -> str:
method get_section (line 328) | def get_section(self, section: str) -> Optional[YamlConfigDict]:
method _write_section (line 381) | def _write_section(self, section: str) -> None:
method __repr__ (line 426) | def __repr__(self) -> str:
class InternalConfigScope (line 430) | class InternalConfigScope(ConfigScope):
method __init__ (line 438) | def __init__(self, name: str, data: Optional[YamlConfigDict] = None) -...
method get_section (line 449) | def get_section(self, section: str) -> Optional[YamlConfigDict]:
method _write_section (line 455) | def _write_section(self, section: str) -> None:
method __repr__ (line 462) | def __repr__(self) -> str:
method clear (line 465) | def clear(self) -> None:
method _process_dict_keyname_overrides (line 470) | def _process_dict_keyname_overrides(data: YamlConfigDict) -> YamlConfi...
function _config_mutator (line 496) | def _config_mutator(method):
class Configuration (line 514) | class Configuration:
method __init__ (line 520) | def __init__(self) -> None:
method ensure_unwrapped (line 524) | def ensure_unwrapped(self) -> "Configuration":
method highest (line 528) | def highest(self) -> ConfigScope:
method push_scope_incremental (line 533) | def push_scope_incremental(
method push_scope (line 573) | def push_scope(
method remove_scope (line 593) | def remove_scope(self, scope_name: str) -> Optional[ConfigScope]:
method writable_scopes (line 613) | def writable_scopes(self) -> Generator[ConfigScope, None, None]:
method existing_scopes (line 618) | def existing_scopes(self) -> Generator[ConfigScope, None, None]:
method highest_precedence_scope (line 623) | def highest_precedence_scope(self) -> ConfigScope:
method matching_scopes (line 636) | def matching_scopes(self, reg_expr) -> List[ConfigScope]:
method _validate_scope (line 645) | def _validate_scope(self, scope: Optional[str]) -> ConfigScope:
method get_config_filename (line 671) | def get_config_filename(self, scope: str, section: str) -> str:
method clear_caches (line 677) | def clear_caches(self) -> None:
method update_config (line 685) | def update_config(
method get_config (line 733) | def get_config(
method deepcopy_as_builtin (line 762) | def deepcopy_as_builtin(
method _filter_overridden (line 770) | def _filter_overridden(self, scopes: List[ConfigScope], includes: bool...
method active_include_section_scopes (line 799) | def active_include_section_scopes(self) -> List[ConfigScope]:
method active_scopes (line 808) | def active_scopes(self) -> List[ConfigScope]:
method _get_config_memoized (line 813) | def _get_config_memoized(
method get (line 878) | def get(self, path: str, default: Optional[Any] = None, scope: Optiona...
method set (line 908) | def set(self, path: str, value: Any, scope: Optional[str] = None) -> N...
method __iter__ (line 948) | def __iter__(self):
method print_section (line 952) | def print_section(
function override (line 977) | def override(
class OptionalInclude (line 1020) | class OptionalInclude:
method __init__ (line 1030) | def __init__(self, entry: dict):
method _parent_scope_directory (line 1039) | def _parent_scope_directory(parent_scope: Optional[ConfigScope]) -> Op...
method base_directory (line 1049) | def base_directory(
method _scope (line 1107) | def _scope(
method _validate_parent_scope (line 1191) | def _validate_parent_scope(self, parent_scope: ConfigScope):
method evaluate_condition (line 1200) | def evaluate_condition(self) -> bool:
method scopes (line 1210) | def scopes(self, parent_scope: ConfigScope) -> List[ConfigScope]:
method paths (line 1225) | def paths(self) -> List[str]:
class IncludePath (line 1231) | class IncludePath(OptionalInclude):
method __init__ (line 1236) | def __init__(self, entry: dict):
method __repr__ (line 1252) | def __repr__(self):
method scopes (line 1258) | def scopes(self, parent_scope: ConfigScope) -> List[ConfigScope]:
method paths (line 1302) | def paths(self) -> List[str]:
class GitIncludePaths (line 1308) | class GitIncludePaths(OptionalInclude):
method __init__ (line 1316) | def __init__(self, entry: dict):
method __repr__ (line 1342) | def __repr__(self):
method _clone (line 1353) | def _clone(self, parent_scope: ConfigScope) -> Optional[str]:
method fetched (line 1410) | def fetched(self) -> bool:
method scopes (line 1415) | def scopes(self, parent_scope: ConfigScope) -> List[ConfigScope]:
method paths (line 1454) | def paths(self) -> List[str]:
function included_path (line 1460) | def included_path(entry: Union[str, pathlib.Path, dict]) -> Union[Includ...
function paths_from_includes (line 1477) | def paths_from_includes(includes: List[Union[str, dict]]) -> List[str]:
function config_paths_from_entry_points (line 1493) | def config_paths_from_entry_points() -> List[Tuple[str, str]]:
function create_incremental (line 1518) | def create_incremental() -> Generator[Configuration, None, None]:
function create (line 1557) | def create() -> Configuration:
function add_from_file (line 1566) | def add_from_file(filename: str, scope: Optional[str] = None) -> None:
function add (line 1599) | def add(fullpath: str, scope: Optional[str] = None) -> None:
function get (line 1649) | def get(path: str, default: Optional[Any] = None, scope: Optional[str] =...
function set (line 1657) | def set(path: str, value: Any, scope: Optional[str] = None) -> None:
function scopes (line 1666) | def scopes() -> lang.PriorityOrderedMapping[str, ConfigScope]:
function writable_scopes (line 1671) | def writable_scopes() -> List[ConfigScope]:
function existing_scopes (line 1678) | def existing_scopes() -> List[ConfigScope]:
function writable_scope_names (line 1688) | def writable_scope_names() -> List[str]:
function existing_scope_names (line 1692) | def existing_scope_names() -> List[str]:
function matched_config (line 1696) | def matched_config(cfg_path: str) -> List[Tuple[str, Any]]:
function change_or_add (line 1700) | def change_or_add(
function update_all (line 1745) | def update_all(section_name: str, change_fn: Callable[[str], bool]) -> N...
function _validate_section_name (line 1757) | def _validate_section_name(section: str) -> None:
function validate (line 1765) | def validate(
function read_config_file (line 1790) | def read_config_file(
function _mark_internal (line 1829) | def _mark_internal(data, name):
function get_valid_type (line 1850) | def get_valid_type(path):
function remove_yaml (line 1891) | def remove_yaml(dest, source):
class ConfigPath (line 1941) | class ConfigPath:
method _split_front (line 1948) | def _split_front(string, extract):
method _validate (line 1956) | def _validate(path):
method process (line 2003) | def process(path):
function process_config_path (line 2048) | def process_config_path(path: str) -> List[str]:
function default_modify_scope (line 2083) | def default_modify_scope(section: str = "config") -> str:
function _update_in_memory (line 2095) | def _update_in_memory(data: YamlConfigDict, section: str) -> bool:
function ensure_latest_format_fn (line 2111) | def ensure_latest_format_fn(section: str) -> Callable[[YamlConfigDict], ...
function use_configuration (line 2124) | def use_configuration(
function _normalize_input (line 2151) | def _normalize_input(entry: Union[ScopeWithOptionalPriority, str]) -> Sc...
function create_from (line 2167) | def create_from(*scopes_or_paths: Union[ScopeWithOptionalPriority, str])...
function determine_number_of_jobs (line 2191) | def determine_number_of_jobs(
class ConfigSectionError (line 2224) | class ConfigSectionError(spack.error.ConfigError):
class ConfigFileError (line 2228) | class ConfigFileError(spack.error.ConfigError):
class ConfigFormatError (line 2232) | class ConfigFormatError(spack.error.ConfigError):
method __init__ (line 2235) | def __init__(
method _get_mark (line 2262) | def _get_mark(self, validation_error, data):
class RecursiveIncludeError (line 2297) | class RecursiveIncludeError(spack.error.SpackError):
FILE: lib/spack/spack/container/__init__.py
function validate (line 21) | def validate(configuration_file):
FILE: lib/spack/spack/container/images.py
function data (line 19) | def data():
function build_info (line 34) | def build_info(image, spack_version):
function os_package_manager_for (line 55) | def os_package_manager_for(image):
function all_bootstrap_os (line 70) | def all_bootstrap_os():
function commands_for (line 75) | def commands_for(package_manager):
function bootstrap_template_for (line 89) | def bootstrap_template_for(image):
function _verify_ref (line 93) | def _verify_ref(url, ref, enforce_sha):
function checkout_command (line 113) | def checkout_command(url, ref, enforce_sha, verify):
FILE: lib/spack/spack/container/writers.py
function writer (line 34) | def writer(name):
function create (line 49) | def create(configuration, last_phase=None):
function recipe (line 60) | def recipe(configuration, last_phase=None):
function _stage_base_images (line 70) | def _stage_base_images(images_config):
function _spack_checkout_config (line 115) | def _spack_checkout_config(images_config):
class PathContext (line 134) | class PathContext(tengine.Context):
method __init__ (line 143) | def __init__(self, config, last_phase):
method depfile (line 159) | def depfile(self):
method run (line 163) | def run(self):
method build (line 169) | def build(self):
method strip (line 175) | def strip(self):
method paths (line 180) | def paths(self):
method manifest (line 192) | def manifest(self):
method os_packages_final (line 210) | def os_packages_final(self):
method os_packages_build (line 219) | def os_packages_build(self):
method os_package_update (line 228) | def os_package_update(self):
method _os_packages_for_stage (line 233) | def _os_packages_for_stage(self, stage):
method _package_info_from (line 238) | def _package_info_from(self, package_list):
method _os_pkg_manager (line 265) | def _os_pkg_manager(self):
method labels (line 277) | def labels(self):
method bootstrap (line 281) | def bootstrap(self):
method render_phase (line 297) | def render_phase(self):
method __call__ (line 304) | def __call__(self):
class DockerContext (line 313) | class DockerContext(PathContext):
method manifest (line 320) | def manifest(self):
class SingularityContext (line 338) | class SingularityContext(PathContext):
method singularity_config (line 345) | def singularity_config(self):
method runscript (line 349) | def runscript(self):
method startscript (line 353) | def startscript(self):
method test (line 357) | def test(self):
method help (line 361) | def help(self):
FILE: lib/spack/spack/context.py
class Context (line 9) | class Context(Enum):
method __str__ (line 17) | def __str__(self):
method from_string (line 21) | def from_string(cls, s: str):
FILE: lib/spack/spack/cray_manifest.py
function translated_compiler_name (line 34) | def translated_compiler_name(manifest_compiler_name):
function compiler_from_entry (line 54) | def compiler_from_entry(entry: dict, *, manifest_path: str) -> Optional[...
function compiler_spec_from_paths (line 86) | def compiler_spec_from_paths(*, pkg_name: str, compiler_paths: Iterable[...
function extract_compiler_paths (line 101) | def extract_compiler_paths(entry: Dict[str, Any]) -> List[str]:
function spec_from_entry (line 109) | def spec_from_entry(entry):
function entries_to_specs (line 191) | def entries_to_specs(entries):
function read (line 223) | def read(path, apply_updates):
class ManifestValidationError (line 266) | class ManifestValidationError(spack.error.SpackError):
method __init__ (line 267) | def __init__(self, msg, long_msg=None):
class CrayCompilerDetectionError (line 271) | class CrayCompilerDetectionError(spack.error.SpackError):
FILE: lib/spack/spack/database.py
function reader (line 140) | def reader(version: vn.StandardVersion) -> Type["spack.spec.SpecfileRead...
function _now (line 150) | def _now() -> float:
function _autospec (line 155) | def _autospec(function):
function normalize_query (line 167) | def normalize_query(installed: Union[bool, InstallRecordStatus]) -> Inst...
class InstallRecord (line 175) | class InstallRecord:
method __init__ (line 200) | def __init__(
method install_type_matches (line 222) | def install_type_matches(self, installed: InstallRecordStatus) -> bool:
method to_dict (line 229) | def to_dict(self, include_fields=DEFAULT_INSTALL_RECORD_FIELDS):
method from_dict (line 246) | def from_dict(cls, spec, dictionary):
class ForbiddenLockError (line 260) | class ForbiddenLockError(SpackError):
class ForbiddenLock (line 264) | class ForbiddenLock:
method __getattr__ (line 265) | def __getattr__(self, name):
method __reduce__ (line 268) | def __reduce__(self):
class LockConfiguration (line 272) | class LockConfiguration(NamedTuple):
function lock_configuration (line 305) | def lock_configuration(configuration):
function prefix_lock_path (line 314) | def prefix_lock_path(root_dir: Union[str, pathlib.Path]) -> pathlib.Path:
function failures_lock_path (line 323) | def failures_lock_path(root_dir: Union[str, pathlib.Path]) -> pathlib.Path:
class SpecLocker (line 332) | class SpecLocker:
method __init__ (line 335) | def __init__(self, lock_path: Union[str, pathlib.Path], default_timeou...
method lock (line 342) | def lock(self, spec: "spack.spec.Spec", timeout: Optional[float] = Non...
method raw_lock (line 364) | def raw_lock(self, spec: "spack.spec.Spec", timeout: Optional[float] =...
method has_lock (line 374) | def has_lock(self, spec: "spack.spec.Spec") -> bool:
method _lock_key (line 378) | def _lock_key(self, spec: "spack.spec.Spec") -> Tuple[str, str]:
method write_lock (line 382) | def write_lock(self, spec: "spack.spec.Spec") -> Generator["SpecLocker...
method clear (line 398) | def clear(self, spec: "spack.spec.Spec") -> Tuple[bool, Optional[lk.Lo...
method clear_all (line 403) | def clear_all(self, clear_fn: Optional[Callable[[lk.Lock], Any]] = Non...
class FailureTracker (line 410) | class FailureTracker:
method __init__ (line 431) | def __init__(self, root_dir: Union[str, pathlib.Path], default_timeout...
method _ensure_parent_directories (line 437) | def _ensure_parent_directories(self) -> None:
method clear (line 444) | def clear(self, spec: "spack.spec.Spec", force: bool = False) -> None:
method clear_all (line 477) | def clear_all(self) -> None:
method mark (line 499) | def mark(self, spec: "spack.spec.Spec") -> lk.Lock:
method has_failed (line 525) | def has_failed(self, spec: "spack.spec.Spec") -> bool:
method lock_taken (line 540) | def lock_taken(self, spec: "spack.spec.Spec") -> bool:
method persistent_mark (line 545) | def persistent_mark(self, spec: "spack.spec.Spec") -> bool:
method _path (line 549) | def _path(self, spec: "spack.spec.Spec") -> pathlib.Path:
class Database (line 558) | class Database:
method __init__ (line 562) | def __init__(
method db_version (line 638) | def db_version(self) -> vn.ConcreteVersion:
method db_version (line 644) | def db_version(self, value: vn.ConcreteVersion):
method _ensure_parent_directories (line 647) | def _ensure_parent_directories(self):
method write_transaction (line 652) | def write_transaction(self):
method read_transaction (line 656) | def read_transaction(self):
method _write_to_file (line 660) | def _write_to_file(self, stream):
method _read_spec_from_dict (line 694) | def _read_spec_from_dict(self, spec_reader, hash_key, installs, hash=h...
method db_for_spec_hash (line 714) | def db_for_spec_hash(self, hash_key):
method query_by_spec_hash (line 723) | def query_by_spec_hash(
method query_local_by_spec_hash (line 748) | def query_local_by_spec_hash(self, hash_key: str) -> Optional[InstallR...
method _assign_build_spec (line 756) | def _assign_build_spec(
method _assign_dependencies (line 777) | def _assign_dependencies(
method _read_from_file (line 816) | def _read_from_file(self, filename: pathlib.Path, *, reindex: bool = F...
method _read_from_stream (line 824) | def _read_from_stream(self, stream: IO[str], *, reindex: bool = False)...
method _handle_current_version_read (line 916) | def _handle_current_version_read(self, check, db):
method _handle_old_db_versions_read (line 921) | def _handle_old_db_versions_read(self, check, db, *, reindex: bool):
method is_readable (line 932) | def is_readable(self) -> bool:
method raise_explicit_database_upgrade_error (line 936) | def raise_explicit_database_upgrade_error(self):
method reindex (line 960) | def reindex(self):
method _reindex (line 993) | def _reindex(self, old_data: Dict[str, InstallRecord]):
method _check_ref_counts (line 1089) | def _check_ref_counts(self):
method _write (line 1118) | def _write(self, type=None, value=None, traceback=None):
method _read (line 1159) | def _read(self):
method _add (line 1184) | def _add(
method add (line 1293) | def add(self, spec: "spack.spec.Spec", *, explicit: bool = False, allo...
method _get_matching_spec_key (line 1304) | def _get_matching_spec_key(self, spec: "spack.spec.Spec", **kwargs) ->...
method get_record (line 1316) | def get_record(self, spec: "spack.spec.Spec", **kwargs) -> Optional[In...
method _decrement_ref_count (line 1321) | def _decrement_ref_count(self, spec: "spack.spec.Spec") -> None:
method _increment_ref_count (line 1338) | def _increment_ref_count(self, spec: "spack.spec.Spec") -> None:
method _remove (line 1347) | def _remove(self, spec: "spack.spec.Spec") -> "spack.spec.Spec":
method remove (line 1378) | def remove(self, spec: "spack.spec.Spec") -> "spack.spec.Spec":
method deprecator (line 1393) | def deprecator(self, spec: "spack.spec.Spec") -> Optional["spack.spec....
method specs_deprecated_by (line 1404) | def specs_deprecated_by(self, spec: "spack.spec.Spec") -> List["spack....
method _deprecate (line 1411) | def _deprecate(self, spec: "spack.spec.Spec", deprecator: "spack.spec....
method mark (line 1429) | def mark(self, spec: "spack.spec.Spec", key: str, value: Any) -> None:
method _mark (line 1434) | def _mark(self, spec: "spack.spec.Spec", key, value) -> None:
method deprecate (line 1439) | def deprecate(self, spec: "spack.spec.Spec", deprecator: "spack.spec.S...
method installed_relatives (line 1445) | def installed_relatives(
method installed_extensions_for (line 1483) | def installed_extensions_for(self, extendee_spec: "spack.spec.Spec"):
method _get_by_hash_local (line 1489) | def _get_by_hash_local(
method get_by_hash_local (line 1516) | def get_by_hash_local(
method get_by_hash (line 1537) | def get_by_hash(
method _query (line 1567) | def _query(
method query_local (line 1650) | def query_local(
method query (line 1710) | def query(
method query_one (line 1807) | def query_one(
method missing (line 1824) | def missing(self, spec):
method is_occupied_install_prefix (line 1829) | def is_occupied_install_prefix(self, path):
method all_hashes (line 1833) | def all_hashes(self):
method unused_specs (line 1838) | def unused_specs(
class NoUpstreamVisitor (line 1868) | class NoUpstreamVisitor:
method __init__ (line 1871) | def __init__(
method accept (line 1879) | def accept(self, item: tr.EdgeAndDepth) -> bool:
method is_upstream (line 1883) | def is_upstream(self, item: tr.EdgeAndDepth) -> bool:
method neighbors (line 1886) | def neighbors(self, item: tr.EdgeAndDepth):
class UpstreamDatabaseLockingError (line 1895) | class UpstreamDatabaseLockingError(SpackError):
class CorruptDatabaseError (line 1899) | class CorruptDatabaseError(SpackError):
class NonConcreteSpecAddError (line 1903) | class NonConcreteSpecAddError(SpackError):
class MissingDependenciesError (line 1907) | class MissingDependenciesError(SpackError):
class InvalidDatabaseVersionError (line 1911) | class InvalidDatabaseVersionError(SpackError):
method __init__ (line 1914) | def __init__(self, database, expected, found):
method database_version_message (line 1924) | def database_version_message(self):
class ExplicitDatabaseUpgradeError (line 1928) | class ExplicitDatabaseUpgradeError(SpackError):
class DatabaseNotReadableError (line 1932) | class DatabaseNotReadableError(SpackError):
class NoSuchSpecError (line 1936) | class NoSuchSpecError(KeyError):
method __init__ (line 1939) | def __init__(self, spec):
method __str__ (line 1943) | def __str__(self):
FILE: lib/spack/spack/dependency.py
class Dependency (line 16) | class Dependency:
method __init__ (line 45) | def __init__(
method name (line 67) | def name(self) -> str:
method __repr__ (line 71) | def __repr__(self) -> str:
FILE: lib/spack/spack/deptypes.py
function compatible (line 47) | def compatible(flag1: DepFlag, flag2: DepFlag) -> bool:
function flag_from_string (line 75) | def flag_from_string(s: str) -> DepFlag:
function flag_from_strings (line 88) | def flag_from_strings(deptype: Iterable[str]) -> DepFlag:
function canonicalize (line 96) | def canonicalize(deptype: DepTypes) -> DepFlag:
function flag_to_tuple (line 116) | def flag_to_tuple(x: DepFlag) -> Tuple[DepType, ...]:
function flag_to_string (line 129) | def flag_to_string(x: DepFlag) -> DepType:
function flag_to_chars (line 142) | def flag_to_chars(depflag: DepFlag) -> str:
FILE: lib/spack/spack/detection/common.py
function _externals_in_packages_yaml (line 35) | def _externals_in_packages_yaml() -> Set[spack.spec.Spec]:
function _pkg_config_dict (line 48) | def _pkg_config_dict(
function _spec_is_valid (line 90) | def _spec_is_valid(spec: spack.spec.Spec) -> bool:
function path_to_dict (line 111) | def path_to_dict(search_paths: List[str]) -> Dict[str, str]:
function is_executable (line 133) | def is_executable(file_path: str) -> bool:
function _convert_to_iterable (line 138) | def _convert_to_iterable(single_val_or_multiple):
function executable_prefix (line 155) | def executable_prefix(executable_dir: str) -> str:
function library_prefix (line 176) | def library_prefix(library_dir: str) -> str:
function update_configuration (line 204) | def update_configuration(
function set_virtuals_nonbuildable (line 238) | def set_virtuals_nonbuildable(virtuals: Set[str], scope: Optional[str] =...
function _windows_drive (line 259) | def _windows_drive() -> str:
class WindowsCompilerExternalPaths (line 269) | class WindowsCompilerExternalPaths:
method find_windows_compiler_root_paths (line 271) | def find_windows_compiler_root_paths() -> List[str]:
method find_windows_compiler_cmake_paths (line 279) | def find_windows_compiler_cmake_paths() -> List[str]:
method find_windows_compiler_ninja_paths (line 289) | def find_windows_compiler_ninja_paths() -> List[str]:
method find_windows_compiler_bundled_packages (line 297) | def find_windows_compiler_bundled_packages() -> List[str]:
class WindowsKitExternalPaths (line 305) | class WindowsKitExternalPaths:
method find_windows_kit_roots (line 307) | def find_windows_kit_roots() -> List[str]:
method find_windows_kit_bin_paths (line 316) | def find_windows_kit_bin_paths(
method find_windows_kit_lib_paths (line 331) | def find_windows_kit_lib_paths(
method find_windows_driver_development_kit_paths (line 346) | def find_windows_driver_development_kit_paths() -> List[str]:
method find_windows_kit_reg_installed_roots_paths (line 354) | def find_windows_kit_reg_installed_roots_paths() -> List[str]:
method find_windows_kit_reg_sdk_paths (line 371) | def find_windows_kit_reg_sdk_paths() -> List[str]:
function find_win32_additional_install_paths (line 388) | def find_win32_additional_install_paths() -> List[str]:
function compute_windows_program_path_for_package (line 415) | def compute_windows_program_path_for_package(pkg: "spack.package_base.Pa...
function compute_windows_user_path_for_package (line 435) | def compute_windows_user_path_for_package(pkg: "spack.package_base.Packa...
FILE: lib/spack/spack/detection/path.py
function common_windows_package_paths (line 47) | def common_windows_package_paths(pkg_cls=None) -> List[str]:
function file_identifier (line 65) | def file_identifier(path):
function dedupe_paths (line 70) | def dedupe_paths(paths: List[str]) -> List[str]:
function executables_in_path (line 93) | def executables_in_path(path_hints: List[str]) -> Dict[str, str]:
function accept_elf (line 112) | def accept_elf(path, host_compat):
function libraries_in_ld_and_system_library_path (line 125) | def libraries_in_ld_and_system_library_path(
function libraries_in_windows_paths (line 189) | def libraries_in_windows_paths(path_hints: Optional[List[str]] = None) -...
function _group_by_prefix (line 216) | def _group_by_prefix(paths: List[str]) -> Dict[str, Set[str]]:
class Finder (line 223) | class Finder:
method default_path_hints (line 226) | def default_path_hints(self) -> List[str]:
method search_patterns (line 229) | def search_patterns(self, *, pkg: Type["spack.package_base.PackageBase...
method candidate_files (line 237) | def candidate_files(self, *, patterns: List[str], paths: List[str]) ->...
method prefix_from_path (line 246) | def prefix_from_path(self, *, path: str) -> str:
method detect_specs (line 254) | def detect_specs(
method find (line 335) | def find(
class ExecutablesFinder (line 357) | class ExecutablesFinder(Finder):
method default_path_hints (line 358) | def default_path_hints(self) -> List[str]:
method search_patterns (line 361) | def search_patterns(self, *, pkg: Type["spack.package_base.PackageBase...
method candidate_files (line 367) | def candidate_files(self, *, patterns: List[str], paths: List[str]) ->...
method prefix_from_path (line 374) | def prefix_from_path(self, *, path: str) -> str:
class LibrariesFinder (line 382) | class LibrariesFinder(Finder):
method search_patterns (line 387) | def search_patterns(self, *, pkg: Type["spack.package_base.PackageBase...
method candidate_files (line 393) | def candidate_files(self, *, patterns: List[str], paths: List[str]) ->...
method prefix_from_path (line 407) | def prefix_from_path(self, *, path: str) -> str:
function by_path (line 415) | def by_path(
FILE: lib/spack/spack/detection/test.py
class MockExecutables (line 21) | class MockExecutables(NamedTuple):
class ExpectedTestResult (line 30) | class ExpectedTestResult(NamedTuple):
class DetectionTest (line 39) | class DetectionTest(NamedTuple):
class Runner (line 52) | class Runner:
method __init__ (line 55) | def __init__(self, *, test: DetectionTest, repository: spack.repo.Repo...
method execute (line 60) | def execute(self) -> List[spack.spec.Spec]:
method _mock_layout (line 74) | def _mock_layout(self) -> Generator[List[str], None, None]:
method _create_executable_scripts (line 87) | def _create_executable_scripts(self, mock_executables: MockExecutables...
method expected_specs (line 104) | def expected_specs(self) -> List[spack.spec.Spec]:
function detection_tests (line 113) | def detection_tests(pkg_name: str, repository: spack.repo.RepoPath) -> L...
function read_detection_tests (line 155) | def read_detection_tests(pkg_name: str, repository: spack.repo.RepoPath)...
function _detection_tests_yaml (line 195) | def _detection_tests_yaml(
FILE: lib/spack/spack/directives.py
function _make_when_spec (line 96) | def _make_when_spec(value: Union[WhenType, Tuple[str, ...]]) -> Optional...
function version (line 158) | def version(
function _execute_version (line 244) | def _execute_version(pkg: PackageType, ver: Union[str, int], kwargs: dict):
function conflicts (line 266) | def conflicts(conflict_spec: SpecType, when: WhenType = None, msg: Optio...
function _execute_conflicts (line 286) | def _execute_conflicts(pkg: PackageType, conflict_spec, when, msg):
function depends_on (line 299) | def depends_on(
function _execute_depends_on (line 323) | def _execute_depends_on(
function redistribute (line 397) | def redistribute(
function _execute_redistribute (line 408) | def _execute_redistribute(
function extends (line 444) | def extends(
function _execute_extends (line 462) | def _execute_extends(
function provides (line 482) | def provides(*specs: SpecType, when: WhenType = None):
function _execute_provides (line 496) | def _execute_provides(pkg: PackageType, specs: Tuple[SpecType, ...], whe...
function can_splice (line 514) | def can_splice(
function _execute_can_splice (line 536) | def _execute_can_splice(
function patch (line 552) | def patch(
function _execute_patch (line 592) | def _execute_patch(
function conditional (line 644) | def conditional(*values: Union[str, bool], when: Optional[WhenType] = No...
function variant (line 654) | def variant(
function _format_error (line 698) | def _format_error(msg, pkg, name):
function _execute_variant (line 703) | def _execute_variant(
function resource (line 808) | def resource(
function _execute_resource (line 841) | def _execute_resource(
function build_system (line 877) | def build_system(*values, **kwargs):
function maintainers (line 895) | def maintainers(*names: str):
function _execute_maintainer (line 904) | def _execute_maintainer(pkg: PackageType, names: Tuple[str, ...]):
function license (line 911) | def license(
function _execute_license (line 929) | def _execute_license(pkg: PackageType, license_identifier: str, when: Op...
function requires (line 954) | def requires(
function _execute_requires (line 985) | def _execute_requires(
class DependencyError (line 1010) | class DependencyError(DirectiveError):
class CircularReferenceError (line 1014) | class CircularReferenceError(DependencyError):
class DependencyPatchError (line 1018) | class DependencyPatchError(DirectiveError):
class UnsupportedPackageDirective (line 1022) | class UnsupportedPackageDirective(DirectiveError):
class OverlappingLicenseError (line 1026) | class OverlappingLicenseError(DirectiveError):
FILE: lib/spack/spack/directives_meta.py
function get_spec (line 26) | def get_spec(spec_str: str) -> spack.spec.Spec:
class DirectiveMeta (line 33) | class DirectiveMeta(type):
method __new__ (line 60) | def __new__(
method __init__ (line 93) | def __init__(cls: "DirectiveMeta", name: str, bases: tuple, attr_dict:...
method register_directive (line 103) | def register_directive(name: str, dicts: Tuple[str, ...]) -> None:
method _get_descriptor (line 110) | def _get_descriptor(name: str) -> "DirectiveDictDescriptor":
method push_when_constraint (line 117) | def push_when_constraint(when_spec: str) -> None:
method pop_when_constraint (line 122) | def pop_when_constraint() -> str:
method push_default_args (line 127) | def push_default_args(default_args: Dict[str, Any]) -> None:
method pop_default_args (line 132) | def pop_default_args() -> dict:
method _remove_kwarg_value_directives_from_queue (line 137) | def _remove_kwarg_value_directives_from_queue(value) -> None:
method _get_execution_plan (line 155) | def _get_execution_plan(target_dict: str) -> Tuple[List[str], List[str]]:
class DirectiveDictDescriptor (line 178) | class DirectiveDictDescriptor:
method __init__ (line 181) | def __init__(self, name: str):
method __get__ (line 186) | def __get__(self, obj, objtype=None):
class directive (line 206) | class directive:
method __init__ (line 207) | def __init__(
method __call__ (line 259) | def __call__(self, decorated_function: Callable[P, R]) -> Callable[P, R]:
class DirectiveError (line 302) | class DirectiveError(spack.error.SpackError):
FILE: lib/spack/spack/directory_layout.py
function _check_concrete (line 27) | def _check_concrete(spec: "spack.spec.Spec") -> None:
function _get_spec (line 33) | def _get_spec(prefix: str) -> Optional["spack.spec.Spec"]:
function specs_from_metadata_dirs (line 43) | def specs_from_metadata_dirs(root: str) -> List["spack.spec.Spec"]:
class DirectoryLayout (line 69) | class DirectoryLayout:
method __init__ (line 84) | def __init__(
method hidden_file_regexes (line 122) | def hidden_file_regexes(self) -> Tuple[str]:
method relative_path_for_spec (line 125) | def relative_path_for_spec(self, spec: "spack.spec.Spec") -> str:
method write_spec (line 132) | def write_spec(self, spec: "spack.spec.Spec", path: str) -> None:
method write_host_environment (line 140) | def write_host_environment(self, spec: "spack.spec.Spec") -> None:
method read_spec (line 150) | def read_spec(self, path: str) -> "spack.spec.Spec":
method spec_file_path (line 171) | def spec_file_path(self, spec: "spack.spec.Spec") -> str:
method deprecated_file_path (line 178) | def deprecated_file_path(
method metadata_path (line 216) | def metadata_path(self, spec: "spack.spec.Spec") -> str:
method env_metadata_path (line 219) | def env_metadata_path(self, spec: "spack.spec.Spec") -> str:
method build_packages_path (line 222) | def build_packages_path(self, spec: "spack.spec.Spec") -> str:
method create_install_directory (line 225) | def create_install_directory(self, spec: "spack.spec.Spec") -> None:
method ensure_installed (line 243) | def ensure_installed(self, spec: "spack.spec.Spec") -> None:
method path_for_spec (line 270) | def path_for_spec(self, spec: "spack.spec.Spec") -> str:
method remove_install_directory (line 281) | def remove_install_directory(self, spec: "spack.spec.Spec", deprecated...
method all_specs (line 329) | def all_specs(self) -> List["spack.spec.Spec"]:
method deprecated_for (line 336) | def deprecated_for(
class DirectoryLayoutError (line 359) | class DirectoryLayoutError(SpackError):
method __init__ (line 362) | def __init__(self, message, long_msg=None):
class RemoveFailedError (line 366) | class RemoveFailedError(DirectoryLayoutError):
method __init__ (line 369) | def __init__(self, installed_spec, prefix, error):
class InconsistentInstallDirectoryError (line 376) | class InconsistentInstallDirectoryError(DirectoryLayoutError):
method __init__ (line 379) | def __init__(self, message, long_msg=None):
class SpecReadError (line 383) | class SpecReadError(DirectoryLayoutError):
class InvalidDirectoryLayoutParametersError (line 387) | class InvalidDirectoryLayoutParametersError(DirectoryLayoutError):
method __init__ (line 390) | def __init__(self, message, long_msg=None):
class InvalidExtensionSpecError (line 394) | class InvalidExtensionSpecError(DirectoryLayoutError):
class ExtensionAlreadyInstalledError (line 398) | class ExtensionAlreadyInstalledError(DirectoryLayoutError):
method __init__ (line 401) | def __init__(self, spec, ext_spec):
class ExtensionConflictError (line 405) | class ExtensionConflictError(DirectoryLayoutError):
method __init__ (line 408) | def __init__(self, spec, ext_spec, conflict):
FILE: lib/spack/spack/enums.py
class InstallRecordStatus (line 9) | class InstallRecordStatus(enum.Flag):
class ConfigScopePriority (line 18) | class ConfigScopePriority(enum.IntEnum):
class PropagationPolicy (line 30) | class PropagationPolicy(enum.Enum):
FILE: lib/spack/spack/environment/depfile.py
class UseBuildCache (line 22) | class UseBuildCache(Enum):
method from_string (line 28) | def from_string(s: str) -> "UseBuildCache":
function _deptypes (line 38) | def _deptypes(use_buildcache: UseBuildCache):
class DepfileNode (line 46) | class DepfileNode:
method __init__ (line 50) | def __init__(
class DepfileSpecVisitor (line 63) | class DepfileSpecVisitor:
method __init__ (line 72) | def __init__(self, pkg_buildcache: UseBuildCache, deps_buildcache: Use...
method neighbors (line 79) | def neighbors(self, node):
method accept (line 84) | def accept(self, node):
class MakefileSpec (line 97) | class MakefileSpec(object):
method __init__ (line 104) | def __init__(self, spec):
method safe_name (line 107) | def safe_name(self):
method spec_hash (line 110) | def spec_hash(self):
method safe_format (line 113) | def safe_format(self, format_str):
method unsafe_format (line 119) | def unsafe_format(self, format_str):
class MakefileModel (line 123) | class MakefileModel:
method __init__ (line 126) | def __init__(
method _target (line 203) | def _target(self, name: str) -> str:
method _install_target (line 213) | def _install_target(self, name: str) -> str:
method _install_deps_target (line 216) | def _install_deps_target(self, name: str) -> str:
method to_dict (line 219) | def to_dict(self):
method empty (line 240) | def empty(self):
method from_env (line 244) | def from_env(
FILE: lib/spack/spack/environment/environment.py
function env_root_path (line 100) | def env_root_path() -> str:
function environment_name (line 107) | def environment_name(path: Union[str, pathlib.Path]) -> str:
function ensure_no_disallowed_env_config_mods (line 129) | def ensure_no_disallowed_env_config_mods(scope: spack.config.ConfigScope...
function default_manifest_yaml (line 140) | def default_manifest_yaml():
function installed_specs (line 192) | def installed_specs():
function valid_env_name (line 202) | def valid_env_name(name):
function validate_env_name (line 206) | def validate_env_name(name):
function activate (line 214) | def activate(env, use_env_repo=False):
function deactivate (line 261) | def deactivate():
function active_environment (line 287) | def active_environment() -> Optional["Environment"]:
function _root (line 292) | def _root(name):
function root (line 297) | def root(name):
function exists (line 303) | def exists(name):
function active (line 308) | def active(name):
function is_env_dir (line 313) | def is_env_dir(path):
function as_env_dir (line 318) | def as_env_dir(name_or_dir):
function environment_from_name_or_dir (line 329) | def environment_from_name_or_dir(name_or_dir):
function read (line 334) | def read(name):
function create (line 342) | def create(
function create_in_dir (line 376) | def create_in_dir(
function _rewrite_relative_dev_paths_on_relocation (line 447) | def _rewrite_relative_dev_paths_on_relocation(env, init_file_dir, copied...
function _rewrite_relative_repos_paths_on_relocation (line 479) | def _rewrite_relative_repos_paths_on_relocation(env, init_file_dir, copi...
function environment_dir_from_name (line 514) | def environment_dir_from_name(name: str, exists_ok: bool = True) -> str:
function ensure_env_root_path_exists (line 532) | def ensure_env_root_path_exists():
function set_included_envs_to_env_paths (line 537) | def set_included_envs_to_env_paths(include_concrete: List[str]) -> None:
function validate_included_envs_exists (line 551) | def validate_included_envs_exists(include_concrete: List[str]) -> None:
function validate_included_envs_concrete (line 572) | def validate_included_envs_concrete(include_concrete: List[str]) -> None:
function all_environment_names (line 598) | def all_environment_names():
function all_environments (line 625) | def all_environments():
function _read_yaml (line 631) | def _read_yaml(str_or_file):
function _write_yaml (line 645) | def _write_yaml(data, str_or_file):
function _is_dev_spec_and_has_changed (line 652) | def _is_dev_spec_and_has_changed(spec):
function _error_on_nonempty_view_dir (line 671) | def _error_on_nonempty_view_dir(new_root):
class ViewDescriptor (line 695) | class ViewDescriptor:
method __init__ (line 696) | def __init__(
method select_fn (line 720) | def select_fn(self, spec: Spec) -> bool:
method exclude_fn (line 723) | def exclude_fn(self, spec: Spec) -> bool:
method update_root (line 726) | def update_root(self, new_path: str) -> None:
method __eq__ (line 730) | def __eq__(self, other: object) -> bool:
method to_dict (line 742) | def to_dict(self):
method from_dict (line 757) | def from_dict(base_path: str, d) -> "ViewDescriptor":
method _current_root (line 770) | def _current_root(self) -> Optional[str]:
method _next_root (line 781) | def _next_root(self, specs):
method content_hash (line 787) | def content_hash(self, specs):
method get_projection_for_spec (line 797) | def get_projection_for_spec(self, spec):
method view (line 802) | def view(self, new: Optional[str] = None) -> fsv.SimpleFilesystemView:
method _view (line 822) | def _view(self, root: str) -> fsv.SimpleFilesystemView:
method __contains__ (line 832) | def __contains__(self, spec):
method specs_for_view (line 849) | def specs_for_view(self, concrete_roots: List[Spec]) -> List[Spec]:
method regenerate (line 869) | def regenerate(self, env: "Environment") -> None:
method _exclude_duplicate_runtimes (line 976) | def _exclude_duplicate_runtimes(self, specs: List[Spec]) -> List[Spec]:
function env_subdir_path (line 989) | def env_subdir_path(manifest_dir: Union[str, pathlib.Path]) -> str:
class ConcretizedRootInfo (line 1000) | class ConcretizedRootInfo:
method __init__ (line 1005) | def __init__(
method __str__ (line 1013) | def __str__(self):
method __eq__ (line 1016) | def __eq__(self, other: object) -> bool:
method __hash__ (line 1025) | def __hash__(self) -> int:
method from_info_dict (line 1029) | def from_info_dict(info_dict: Dict[str, str]) -> "ConcretizedRootInfo":
class Environment (line 1039) | class Environment:
method __init__ (line 1042) | def __init__(self, manifest_dir: Union[str, pathlib.Path]) -> None:
method _load_manifest_file (line 1085) | def _load_manifest_file(self):
method config_override_for_group (line 1093) | def config_override_for_group(self, *, group: str):
method __getstate__ (line 1117) | def __getstate__(self):
method __setstate__ (line 1125) | def __setstate__(self, state):
method _re_read (line 1130) | def _re_read(self):
method _read (line 1135) | def _read(self):
method write_transaction (line 1146) | def write_transaction(self):
method _process_view (line 1150) | def _process_view(self, env_view: Optional[Union[bool, str, Dict]]):
method _load_concrete_include_data (line 1195) | def _load_concrete_include_data(self):
method _process_included_lockfiles (line 1207) | def _process_included_lockfiles(self):
method _construct_state_from_manifest (line 1251) | def _construct_state_from_manifest(self):
method _sync_speclists (line 1258) | def _sync_speclists(self):
method _user_specs_key (line 1275) | def _user_specs_key(self, *, group: Optional[str] = None) -> str:
method user_specs (line 1281) | def user_specs(self) -> SpecList:
method user_specs_by (line 1284) | def user_specs_by(self, *, group: Optional[str]) -> SpecList:
method explicit_roots (line 1289) | def explicit_roots(self):
method dev_specs (line 1295) | def dev_specs(self):
method included_user_specs (line 1309) | def included_user_specs(self) -> SpecList:
method clear (line 1328) | def clear(self):
method active (line 1345) | def active(self):
method manifest_path (line 1350) | def manifest_path(self):
method _transaction_lock_path (line 1355) | def _transaction_lock_path(self):
method lock_path (line 1362) | def lock_path(self):
method _lock_backup_v1_path (line 1367) | def _lock_backup_v1_path(self):
method repos_path (line 1372) | def repos_path(self):
method view_path_default (line 1376) | def view_path_default(self) -> str:
method repo (line 1381) | def repo(self):
method scope_name (line 1387) | def scope_name(self):
method include_concrete_envs (line 1391) | def include_concrete_envs(self):
method destroy (line 1428) | def destroy(self):
method add (line 1432) | def add(self, user_spec, list_name=USER_SPECS_KEY) -> bool:
method change_existing_spec (line 1465) | def change_existing_spec(
method remove (line 1517) | def remove(self, query_spec, list_name=USER_SPECS_KEY, force=False):
method is_develop (line 1572) | def is_develop(self, spec):
method apply_develop (line 1576) | def apply_develop(self, spec: spack.spec.Spec, path: Optional[str] = N...
method mutate (line 1598) | def mutate(
method concretize (line 1656) | def concretize(
method sync_concretized_specs (line 1678) | def sync_concretized_specs(self) -> None:
method _all_user_specs_with_group (line 1690) | def _all_user_specs_with_group(self) -> Set[Tuple[str, Spec]]:
method clear_concretized_specs (line 1696) | def clear_concretized_specs(self) -> None:
method deconcretize_by_hash (line 1701) | def deconcretize_by_hash(self, dag_hash: str) -> None:
method deconcretize_by_user_spec (line 1706) | def deconcretize_by_user_spec(
method _maybe_remove_dag_hash (line 1727) | def _maybe_remove_dag_hash(self, dag_hash: str):
method user_spec_with_hash (line 1733) | def user_spec_with_hash(self, dag_hash: str) -> bool:
method unify_specs (line 1737) | def unify_specs(self) -> None:
method default_view (line 1744) | def default_view(self):
method has_view (line 1750) | def has_view(self, view_name: str) -> bool:
method update_default_view (line 1753) | def update_default_view(self, path_or_bool: Union[str, bool]) -> None:
method delete_default_view (line 1800) | def delete_default_view(self) -> None:
method regenerate_views (line 1813) | def regenerate_views(self):
method check_views (line 1821) | def check_views(self):
method _env_modifications_for_view (line 1839) | def _env_modifications_for_view(
method add_view_to_env (line 1855) | def add_view_to_env(
method rm_view_from_env (line 1877) | def rm_view_from_env(
method add_concrete_spec (line 1895) | def add_concrete_spec(
method _dev_specs_that_need_overwrite (line 1920) | def _dev_specs_that_need_overwrite(self):
method _partition_roots_by_install_status (line 1946) | def _partition_roots_by_install_status(self):
method uninstalled_specs (line 1955) | def uninstalled_specs(self):
method install_all (line 1960) | def install_all(self, **install_args):
method install_specs (line 1971) | def install_specs(self, specs: Optional[List[Spec]] = None, **install_...
method all_specs_generator (line 2006) | def all_specs_generator(self) -> Iterable[Spec]:
method all_specs (line 2010) | def all_specs(self) -> List[Spec]:
method all_hashes (line 2014) | def all_hashes(self):
method roots (line 2018) | def roots(self):
method added_specs (line 2029) | def added_specs(self):
method concretized_specs (line 2046) | def concretized_specs(self):
method concretized_specs_from_all_included_environments (line 2053) | def concretized_specs_from_all_included_environments(self):
method concretized_specs_from_included_environment (line 2058) | def concretized_specs_from_included_environment(
method concrete_roots (line 2068) | def concrete_roots(self):
method concretized_specs_by (line 2073) | def concretized_specs_by(self, *, group: str) -> Iterable[Tuple[Spec, ...
method get_by_hash (line 2080) | def get_by_hash(self, dag_hash: str) -> List[Spec]:
method get_one_by_hash (line 2093) | def get_one_by_hash(self, dag_hash):
method all_matching_specs (line 2101) | def all_matching_specs(self, *specs: spack.spec.Spec) -> List[Spec]:
method matching_spec (line 2110) | def matching_spec(self, spec):
method removed_specs (line 2182) | def removed_specs(self):
method _concrete_specs_dict (line 2196) | def _concrete_specs_dict(self):
method _concrete_roots_dict (line 2212) | def _concrete_roots_dict(self):
method has_groups (line 2220) | def has_groups(self) -> bool:
method _to_lockfile_dict (line 2225) | def _to_lockfile_dict(self):
method _read_lockfile (line 2260) | def _read_lockfile(self, file_or_json):
method _set_included_env_roots (line 2266) | def _set_included_env_roots(
method _read_lockfile_dict (line 2303) | def _read_lockfile_dict(self, d):
method _filter_specs (line 2356) | def _filter_specs(self, reader, json_specs_by_hash, order_concretized):
method write (line 2411) | def write(self, regenerate: bool = True) -> None:
method update_lockfile (line 2442) | def update_lockfile(self) -> None:
method ensure_env_directory_exists (line 2446) | def ensure_env_directory_exists(self, dot_env: bool = False) -> None:
method update_environment_repository (line 2456) | def update_environment_repository(self) -> None:
method _add_to_environment_repository (line 2465) | def _add_to_environment_repository(self, spec_node: Spec) -> None:
method manifest_uptodate_or_warn (line 2477) | def manifest_uptodate_or_warn(self):
method _default_view_as_yaml (line 2490) | def _default_view_as_yaml(self):
method invalidate_repository_cache (line 2504) | def invalidate_repository_cache(self):
method __enter__ (line 2507) | def __enter__(self):
method __exit__ (line 2514) | def __exit__(self, exc_type, exc_val, exc_tb):
function _is_uninstalled (line 2520) | def _is_uninstalled(spec):
class ReusableSpecsFactory (line 2524) | class ReusableSpecsFactory:
method __init__ (line 2527) | def __init__(self, *, env: Environment, group: str):
method _const (line 2532) | def _const(specs: List[Spec]) -> Callable[[], List[Spec]]:
method __call__ (line 2536) | def __call__(
class EnvironmentConcretizer (line 2617) | class EnvironmentConcretizer:
method __init__ (line 2618) | def __init__(self, env: Environment):
method concretize (line 2621) | def concretize(
method _concretize_single_group (line 2640) | def _concretize_single_group(
method _prepare_environment_for_concretization (line 2672) | def _prepare_environment_for_concretization(self, *, force: bool):
method _partition_user_specs (line 2683) | def _partition_user_specs(
method _order_groups (line 2696) | def _order_groups(self) -> List[str]:
method _user_spec_pairs (line 2730) | def _user_spec_pairs(
method _concretize_together_where_possible (line 2740) | def _concretize_together_where_possible(
method _concretize_together (line 2761) | def _concretize_together(
method _concretize_separately (line 2799) | def _concretize_separately(
function yaml_equivalent (line 2822) | def yaml_equivalent(first, second) -> bool:
function _equiv_list (line 2839) | def _equiv_list(first, second):
function _equiv_dict (line 2846) | def _equiv_dict(first, second):
function display_specs (line 2858) | def display_specs(specs: List[spack.spec.Spec], *, highlight_non_default...
function make_repo_path (line 2883) | def make_repo_path(root):
function manifest_file (line 2892) | def manifest_file(env_name_or_dir):
function update_yaml (line 2913) | def update_yaml(manifest, backup_file):
function _top_level_key (line 2950) | def _top_level_key(data):
function is_latest_format (line 2966) | def is_latest_format(manifest):
function no_active_environment (line 2983) | def no_active_environment():
function initialize_environment_dir (line 2996) | def initialize_environment_dir(
class EnvironmentManifestFile (line 3100) | class EnvironmentManifestFile(collections.abc.Mapping):
method from_lockfile (line 3106) | def from_lockfile(manifest_dir: Union[pathlib.Path, str]) -> "Environm...
method __init__ (line 3140) | def __init__(self, manifest_dir: Union[pathlib.Path, str], name: Optio...
method _init_user_specs (line 3170) | def _init_user_specs(self):
method _clear_user_specs (line 3197) | def _clear_user_specs(self) -> None:
method _all_matches (line 3203) | def _all_matches(self, user_spec: str) -> List[str]:
method user_specs (line 3223) | def user_specs(self, *, group: Optional[str] = None) -> List:
method config_override (line 3227) | def config_override(
method groups (line 3236) | def groups(self) -> KeysView:
method needs (line 3240) | def needs(self, *, group: Optional[str] = None) -> Tuple[str, ...]:
method is_explicit (line 3245) | def is_explicit(self, *, group: Optional[str] = None) -> bool:
method _ensure_group_exists (line 3254) | def _ensure_group_exists(self, group: Optional[str]) -> str:
method add_user_spec (line 3260) | def add_user_spec(self, user_spec: str, *, group: Optional[str] = None...
method _get_group (line 3281) | def _get_group(self, group: str) -> Dict:
method remove_user_spec (line 3300) | def remove_user_spec(self, user_spec: str) -> None:
method clear (line 3318) | def clear(self) -> None:
method override_user_spec (line 3324) | def override_user_spec(self, user_spec: str, idx: int) -> None:
method set_include_concrete (line 3343) | def set_include_concrete(self, include_concrete: List[str]) -> None:
method add_definition (line 3352) | def add_definition(self, user_spec: str, list_name: str) -> None:
method remove_definition (line 3373) | def remove_definition(self, user_spec: str, list_name: str) -> None:
method override_definition (line 3398) | def override_definition(self, user_spec: str, *, override: str, list_n...
method _iterate_on_definitions (line 3425) | def _iterate_on_definitions(self, definitions, *, list_name, err_msg):
method set_default_view (line 3446) | def set_default_view(self, view: Union[bool, str, pathlib.Path, Dict[s...
method remove_default_view (line 3464) | def remove_default_view(self) -> None:
method flush (line 3474) | def flush(self) -> None:
method configuration (line 3484) | def configuration(self):
method __len__ (line 3488) | def __len__(self):
method __getitem__ (line 3491) | def __getitem__(self, key):
method __iter__ (line 3494) | def __iter__(self):
method __str__ (line 3497) | def __str__(self):
method env_config_scope (line 3501) | def env_config_scope(self) -> spack.config.ConfigScope:
method prepare_config_scope (line 3513) | def prepare_config_scope(self) -> None:
method deactivate_config_scope (line 3519) | def deactivate_config_scope(self) -> None:
method use_config (line 3524) | def use_config(self):
function environment_path_scope (line 3532) | def environment_path_scope(name: str, path: str) -> Optional[spack.confi...
class SpackEnvironmentError (line 3553) | class SpackEnvironmentError(spack.error.SpackError):
class SpackEnvironmentViewError (line 3557) | class SpackEnvironmentViewError(SpackEnvironmentError):
class SpackEnvironmentConfigError (line 3561) | class SpackEnvironmentConfigError(SpackEnvironmentError):
method __init__ (line 3564) | def __init__(self, msg, filename):
class SpackEnvironmentDevelopError (line 3568) | class SpackEnvironmentDevelopError(SpackEnvironmentError):
FILE: lib/spack/spack/environment/list.py
class SpecList (line 15) | class SpecList:
method __init__ (line 16) | def __init__(
method is_matrix (line 29) | def is_matrix(self):
method specs_as_constraints (line 36) | def specs_as_constraints(self):
method specs (line 49) | def specs(self) -> List[Spec]:
method add (line 65) | def add(self, spec: Spec):
method remove (line 77) | def remove(self, spec):
method extend (line 99) | def extend(self, other: "SpecList", copy_reference=True) -> None:
method __len__ (line 105) | def __len__(self):
method __getitem__ (line 108) | def __getitem__(self, key):
method __iter__ (line 111) | def __iter__(self):
function _expand_matrix_constraints (line 115) | def _expand_matrix_constraints(matrix_config):
function _sigilify (line 169) | def _sigilify(item, sigil):
class Definition (line 178) | class Definition(NamedTuple):
class SpecListParser (line 184) | class SpecListParser:
method __init__ (line 187) | def __init__(self, *, toolchains=None):
method parse_definitions (line 191) | def parse_definitions(self, *, data: List[Dict[str, Any]]) -> Dict[str...
method parse_user_specs (line 201) | def parse_user_specs(self, *, name, yaml_list) -> SpecList:
method _parse_yaml_definition (line 205) | def _parse_yaml_definition(self, yaml_entry) -> Definition:
method _build_definitions (line 224) | def _build_definitions(self, definitions_from_yaml: Dict[str, List[Def...
method _speclist_from_definitions (line 228) | def _speclist_from_definitions(self, name, definitions) -> SpecList:
method _expand_yaml_list (line 242) | def _expand_yaml_list(self, raw_yaml_list):
method _expand_reference (line 255) | def _expand_reference(self, item: str):
method _expand_yaml_matrix (line 270) | def _expand_yaml_matrix(self, matrix_yaml):
class SpecListError (line 289) | class SpecListError(SpackError):
class UndefinedReferenceError (line 293) | class UndefinedReferenceError(SpecListError):
class InvalidSpecConstraintError (line 297) | class InvalidSpecConstraintError(SpecListError):
FILE: lib/spack/spack/environment/shell.py
function activate_header (line 18) | def activate_header(env, shell, prompt=None, view: Optional[str] = None):
function deactivate_header (line 101) | def deactivate_header(shell):
function activate (line 155) | def activate(
function deactivate (line 204) | def deactivate() -> EnvironmentModifications:
FILE: lib/spack/spack/error.py
class SpackAPIWarning (line 18) | class SpackAPIWarning(UserWarning):
class SpackError (line 22) | class SpackError(Exception):
method __init__ (line 27) | def __init__(self, message: str, long_message: Optional[str] = None) -...
method long_message (line 43) | def long_message(self):
method print_context (line 46) | def print_context(self):
method die (line 76) | def die(self):
method __str__ (line 80) | def __str__(self):
method __repr__ (line 85) | def __repr__(self):
method __reduce__ (line 89) | def __reduce__(self):
class UnsupportedPlatformError (line 93) | class UnsupportedPlatformError(SpackError):
method __init__ (line 96) | def __init__(self, message):
class NoLibrariesError (line 100) | class NoLibrariesError(SpackError):
method __init__ (line 103) | def __init__(self, message_or_name, prefix=None):
class NoHeadersError (line 111) | class NoHeadersError(SpackError):
class SpecError (line 115) | class SpecError(SpackError):
class UnsatisfiableSpecError (line 119) | class UnsatisfiableSpecError(SpecError):
method __init__ (line 127) | def __init__(self, provided, required, constraint_type):
class FetchError (line 136) | class FetchError(SpackError):
class NoSuchPatchError (line 140) | class NoSuchPatchError(SpackError):
class PatchDirectiveError (line 144) | class PatchDirectiveError(SpackError):
class PatchLookupError (line 148) | class PatchLookupError(NoSuchPatchError):
class SpecSyntaxError (line 152) | class SpecSyntaxError(Exception):
class PackageError (line 156) | class PackageError(SpackError):
method __init__ (line 159) | def __init__(self, message, long_msg=None):
class NoURLError (line 163) | class NoURLError(PackageError):
method __init__ (line 166) | def __init__(self, cls):
class InstallError (line 170) | class InstallError(SpackError):
method __init__ (line 177) | def __init__(self, message, long_msg=None, pkg=None):
class ConfigError (line 182) | class ConfigError(SpackError):
class StopPhase (line 186) | class StopPhase(SpackError):
method __reduce__ (line 189) | def __reduce__(self):
function _make_stop_phase (line 193) | def _make_stop_phase(msg, long_msg):
class MirrorError (line 197) | class MirrorError(SpackError):
method __init__ (line 200) | def __init__(self, msg, long_msg=None):
class NoChecksumException (line 204) | class NoChecksumException(SpackError):
method __init__ (line 209) | def __init__(self, path, size, contents, algorithm, expected, computed):
class CompilerError (line 217) | class CompilerError(SpackError):
class SpecFilenameError (line 221) | class SpecFilenameError(SpecError):
class NoSuchSpecFileError (line 225) | class NoSuchSpecFileError(SpecFilenameError):
FILE: lib/spack/spack/extensions.py
function _python_name (line 25) | def _python_name(cmd_name):
function extension_name (line 29) | def extension_name(path):
function load_command_extension (line 48) | def load_command_extension(command, path):
function ensure_extension_loaded (line 84) | def ensure_extension_loaded(extension, *, path):
function load_extension (line 111) | def load_extension(name: str) -> str:
function get_extension_paths (line 128) | def get_extension_paths():
function extension_paths_from_entry_points (line 137) | def extension_paths_from_entry_points() -> List[str]:
function get_command_paths (line 166) | def get_command_paths():
function path_for_extension (line 178) | def path_for_extension(target_name: str, *, paths: List[str]) -> str:
function get_module (line 196) | def get_module(cmd_name):
function get_template_dirs (line 214) | def get_template_dirs():
class ExtensionNamingError (line 223) | class ExtensionNamingError(spack.error.SpackError):
method __init__ (line 228) | def __init__(self, path):
FILE: lib/spack/spack/externals.py
class DependencyDict (line 33) | class DependencyDict(TypedDict, total=False):
class ExternalDict (line 40) | class ExternalDict(TypedDict, total=False):
function node_from_dict (line 57) | def node_from_dict(external_dict: ExternalDict) -> spack.spec.Spec:
function complete_architecture (line 77) | def complete_architecture(node: spack.spec.Spec) -> None:
function complete_variants_and_architecture (line 96) | def complete_variants_and_architecture(node: spack.spec.Spec) -> None:
function extract_dicts_from_configuration (line 131) | def extract_dicts_from_configuration(packages_yaml) -> List[ExternalDict]:
function _line_info (line 152) | def _line_info(config_dict: Any) -> str:
function _required_target (line 160) | def _required_target(entry) -> str:
class ExternalSpecAndConfig (line 186) | class ExternalSpecAndConfig(NamedTuple):
class ExternalSpecsParser (line 191) | class ExternalSpecsParser:
method __init__ (line 194) | def __init__(
method _parse (line 222) | def _parse(self) -> None:
method _create_edges (line 233) | def _create_edges(self):
method _ensure_dependencies_have_single_id (line 288) | def _ensure_dependencies_have_single_id(self):
method _parse_all_nodes (line 347) | def _parse_all_nodes(self) -> None:
method get_specs_for_package (line 404) | def get_specs_for_package(self, package_name: str) -> List[spack.spec....
method all_specs (line 409) | def all_specs(self) -> List[spack.spec.Spec]:
method query (line 413) | def query(self, query: Union[str, spack.spec.Spec]) -> List[spack.spec...
function external_spec (line 422) | def external_spec(config: ExternalDict) -> spack.spec.Spec:
class DuplicateExternalError (line 427) | class DuplicateExternalError(SpackError):
class ExternalDependencyError (line 431) | class ExternalDependencyError(SpackError):
class ExternalSpecError (line 435) | class ExternalSpecError(SpackError):
FILE: lib/spack/spack/fetch_strategy.py
function _needs_stage (line 65) | def _needs_stage(fun):
function _ensure_one_stage_entry (line 78) | def _ensure_one_stage_entry(stage_path):
function fetcher (line 85) | def fetcher(cls):
class FetchStrategy (line 91) | class FetchStrategy:
method __init__ (line 104) | def __init__(self, **kwargs):
method set_package (line 115) | def set_package(self, package):
method fetch (line 119) | def fetch(self):
method check (line 126) | def check(self):
method expand (line 129) | def expand(self):
method reset (line 132) | def reset(self):
method archive (line 138) | def archive(self, destination):
method cachable (line 147) | def cachable(self):
method source_id (line 157) | def source_id(self):
method mirror_id (line 168) | def mirror_id(self):
method __str__ (line 177) | def __str__(self): # Should be human readable URL.
method matches (line 181) | def matches(cls, args):
class BundleFetchStrategy (line 192) | class BundleFetchStrategy(FetchStrategy):
method fetch (line 209) | def fetch(self):
method cachable (line 214) | def cachable(self):
method source_id (line 218) | def source_id(self):
method mirror_id (line 222) | def mirror_id(self):
function _format_speed (line 226) | def _format_speed(total_bytes: int, elapsed: float) -> str:
function _format_bytes (line 239) | def _format_bytes(total_bytes: int) -> str:
class FetchProgress (line 250) | class FetchProgress:
method __init__ (line 254) | def __init__(
method from_headers (line 283) | def from_headers(
method advance (line 298) | def advance(self, num_bytes: int, out=sys.stdout) -> None:
method print (line 304) | def print(self, final: bool = False, out=sys.stdout) -> None:
class URLFetchStrategy (line 335) | class URLFetchStrategy(FetchStrategy):
method __init__ (line 348) | def __init__(self, *, url: str, checksum: Optional[str] = None, **kwar...
method curl (line 368) | def curl(self) -> Executable:
method source_id (line 373) | def source_id(self):
method mirror_id (line 376) | def mirror_id(self):
method candidate_urls (line 385) | def candidate_urls(self):
method fetch (line 389) | def fetch(self):
method _fetch_from_url (line 409) | def _fetch_from_url(self, url):
method _check_headers (line 416) | def _check_headers(self, headers):
method _fetch_urllib (line 431) | def _fetch_urllib(self, url, chunk_size=65536, retries=5):
method _fetch_curl (line 480) | def _fetch_curl(self, url, config_args=[]):
method archive_file (line 536) | def archive_file(self):
method cachable (line 541) | def cachable(self):
method expand (line 545) | def expand(self):
method archive (line 580) | def archive(self, destination):
method check (line 590) | def check(self):
method reset (line 599) | def reset(self):
method __repr__ (line 618) | def __repr__(self):
method __str__ (line 621) | def __str__(self):
class CacheURLFetchStrategy (line 626) | class CacheURLFetchStrategy(URLFetchStrategy):
method fetch (line 630) | def fetch(self):
class OCIRegistryFetchStrategy (line 658) | class OCIRegistryFetchStrategy(URLFetchStrategy):
method __init__ (line 659) | def __init__(self, *, url: str, checksum: Optional[str] = None, **kwar...
method fetch (line 665) | def fetch(self):
class VCSFetchStrategy (line 685) | class VCSFetchStrategy(FetchStrategy):
method __init__ (line 698) | def __init__(self, **kwargs):
method check (line 710) | def check(self):
method expand (line 714) | def expand(self):
method archive (line 718) | def archive(self, destination, *, exclude: Optional[str] = None):
method __str__ (line 734) | def __str__(self):
method __repr__ (line 737) | def __repr__(self):
class GoFetchStrategy (line 742) | class GoFetchStrategy(VCSFetchStrategy):
method __init__ (line 757) | def __init__(self, **kwargs):
method go_version (line 767) | def go_version(self):
method go (line 772) | def go(self):
method fetch (line 778) | def fetch(self):
method archive (line 790) | def archive(self, destination):
method expand (line 794) | def expand(self):
method reset (line 802) | def reset(self):
method __str__ (line 806) | def __str__(self):
class GitFetchStrategy (line 811) | class GitFetchStrategy(VCSFetchStrategy):
method __init__ (line 843) | def __init__(self, **kwargs):
method git_version (line 865) | def git_version(self):
method version_from_git (line 869) | def version_from_git(git_exe):
method git (line 877) | def git(self):
method cachable (line 898) | def cachable(self):
method source_id (line 901) | def source_id(self):
method mirror_id (line 906) | def mirror_id(self):
method _repo_info (line 922) | def _repo_info(self):
method fetch (line 934) | def fetch(self):
method bare_clone (line 942) | def bare_clone(self, dest: str) -> None:
method _clone_src (line 962) | def _clone_src(self) -> None:
method submodule_operations (line 1000) | def submodule_operations(self):
method reset (line 1035) | def reset(self):
method __str__ (line 1046) | def __str__(self):
class CvsFetchStrategy (line 1051) | class CvsFetchStrategy(VCSFetchStrategy):
method __init__ (line 1071) | def __init__(self, **kwargs):
method cvs (line 1085) | def cvs(self):
method cachable (line 1091) | def cachable(self):
method source_id (line 1094) | def source_id(self):
method mirror_id (line 1105) | def mirror_id(self):
method fetch (line 1123) | def fetch(self):
method _remove_untracked_files (line 1145) | def _remove_untracked_files(self):
method archive (line 1155) | def archive(self, destination):
method reset (line 1159) | def reset(self):
method __str__ (line 1164) | def __str__(self):
class SvnFetchStrategy (line 1169) | class SvnFetchStrategy(VCSFetchStrategy):
method __init__ (line 1185) | def __init__(self, **kwargs):
method svn (line 1197) | def svn(self):
method cachable (line 1203) | def cachable(self):
method source_id (line 1206) | def source_id(self):
method mirror_id (line 1209) | def mirror_id(self):
method fetch (line 1216) | def fetch(self):
method _remove_untracked_files (line 1234) | def _remove_untracked_files(self):
method archive (line 1248) | def archive(self, destination):
method reset (line 1252) | def reset(self):
method __str__ (line 1257) | def __str__(self):
class HgFetchStrategy (line 1262) | class HgFetchStrategy(VCSFetchStrategy):
method __init__ (line 1286) | def __init__(self, **kwargs):
method hg (line 1296) | def hg(self):
method cachable (line 1312) | def cachable(self):
method source_id (line 1315) | def source_id(self):
method mirror_id (line 1318) | def mirror_id(self):
method fetch (line 1325) | def fetch(self):
method archive (line 1351) | def archive(self, destination):
method reset (line 1355) | def reset(self):
method __str__ (line 1369) | def __str__(self):
class S3FetchStrategy (line 1374) | class S3FetchStrategy(URLFetchStrategy):
method fetch (line 1380) | def fetch(self):
class GCSFetchStrategy (line 1396) | class GCSFetchStrategy(URLFetchStrategy):
method fetch (line 1402) | def fetch(self):
class FetchAndVerifyExpandedFile (line 1420) | class FetchAndVerifyExpandedFile(URLFetchStrategy):
method __init__ (line 1424) | def __init__(self, url, archive_sha256: str, expanded_sha256: str):
method expand (line 1428) | def expand(self):
function verify_checksum (line 1446) | def verify_checksum(file: str, digest: str, url: str, effective_url: Opt...
function stable_target (line 1463) | def stable_target(fetcher):
function from_url (line 1472) | def from_url(url: str) -> URLFetchStrategy:
function from_kwargs (line 1481) | def from_kwargs(**kwargs) -> FetchStrategy:
function check_pkg_attributes (line 1502) | def check_pkg_attributes(pkg):
function _check_version_attributes (line 1522) | def _check_version_attributes(fetcher, pkg, version):
function _extrapolate (line 1544) | def _extrapolate(pkg, version):
function _from_merged_attrs (line 1555) | def _from_merged_attrs(fetcher, pkg, version):
function for_package_version (line 1578) | def for_package_version(pkg, version=None):
function _for_package_version (line 1590) | def _for_package_version(pkg, version=None):
function from_url_scheme (line 1704) | def from_url_scheme(url: str, **kwargs) -> FetchStrategy:
function from_list_url (line 1728) | def from_list_url(pkg):
class FsCache (line 1763) | class FsCache:
method __init__ (line 1764) | def __init__(self, root):
method store (line 1767) | def store(self, fetcher, relative_dest):
method fetcher (line 1780) | def fetcher(self, target_path: str, digest: Optional[str], **kwargs) -...
method destroy (line 1785) | def destroy(self):
class NoCacheError (line 1789) | class NoCacheError(spack.error.FetchError):
class FailedDownloadError (line 1793) | class FailedDownloadError(spack.error.FetchError):
method __init__ (line 1796) | def __init__(self, *exceptions: Exception):
class NoArchiveFileError (line 1801) | class NoArchiveFileError(spack.error.FetchError):
class NoDigestError (line 1805) | class NoDigestError(spack.error.FetchError):
class ExtrapolationError (line 1809) | class ExtrapolationError(spack.error.FetchError):
class FetcherConflict (line 1813) | class FetcherConflict(spack.error.FetchError):
class InvalidArgsError (line 1817) | class InvalidArgsError(spack.error.FetchError):
method __init__ (line 1820) | def __init__(self, pkg=None, version=None, **args):
class ChecksumError (line 1830) | class ChecksumError(spack.error.FetchError):
class NoStageError (line 1834) | class NoStageError(spack.error.FetchError):
method __init__ (line 1837) | def __init__(self, method):
FILE: lib/spack/spack/filesystem_view.py
function view_symlink (line 56) | def view_symlink(src: str, dst: str, *args, **kwargs) -> None:
function view_hardlink (line 60) | def view_hardlink(src: str, dst: str, *args, **kwargs) -> None:
function view_copy (line 64) | def view_copy(
function canonicalize_link_type (line 124) | def canonicalize_link_type(link_type: LinkType) -> CanonicalLinkType:
function function_for_link_type (line 134) | def function_for_link_type(link_type: LinkType) -> LinkCallbackType:
class FilesystemView (line 146) | class FilesystemView:
method __init__ (line 159) | def __init__(
method link (line 186) | def link(self, src: str, dst: str, spec: Optional[spack.spec.Spec] = N...
method add_specs (line 189) | def add_specs(self, *specs: spack.spec.Spec, **kwargs) -> None:
method add_standalone (line 204) | def add_standalone(self, spec: spack.spec.Spec) -> bool:
method check_added (line 210) | def check_added(self, spec: spack.spec.Spec) -> bool:
method remove_specs (line 216) | def remove_specs(self, *specs: spack.spec.Spec, **kwargs) -> None:
method remove_standalone (line 235) | def remove_standalone(self, spec: spack.spec.Spec) -> None:
method get_projection_for_spec (line 241) | def get_projection_for_spec(self, spec: spack.spec.Spec) -> str:
method get_all_specs (line 247) | def get_all_specs(self) -> List[spack.spec.Spec]:
method get_spec (line 253) | def get_spec(self, spec: spack.spec.Spec) -> Optional[spack.spec.Spec]:
method print_status (line 267) | def print_status(self, *specs: spack.spec.Spec, **kwargs) -> None:
class YamlFilesystemView (line 281) | class YamlFilesystemView(FilesystemView):
method __init__ (line 286) | def __init__(
method write_projections (line 325) | def write_projections(self):
method read_projections (line 331) | def read_projections(self):
method add_specs (line 340) | def add_specs(self, *specs, **kwargs):
method add_standalone (line 360) | def add_standalone(self, spec):
method merge (line 377) | def merge(self, spec, ignore=None):
method unmerge (line 402) | def unmerge(self, spec, ignore=None):
method remove_files (line 418) | def remove_files(self, files):
method check_added (line 456) | def check_added(self, spec):
method remove_specs (line 460) | def remove_specs(self, *specs, **kwargs):
method remove_standalone (line 521) | def remove_standalone(self, spec):
method get_projection_for_spec (line 535) | def get_projection_for_spec(self, spec):
method get_all_specs (line 552) | def get_all_specs(self):
method get_conflicts (line 570) | def get_conflicts(self, *specs):
method get_path_meta_folder (line 578) | def get_path_meta_folder(self, spec):
method get_spec (line 586) | def get_spec(self, spec):
method link_meta_folder (line 592) | def link_meta_folder(self, spec):
method print_conflict (line 600) | def print_conflict(self, spec_active, spec_specified, level="error"):
method print_status (line 612) | def print_status(self, *specs, **kwargs):
method _purge_empty_directories (line 665) | def _purge_empty_directories(self):
method _purge_broken_links (line 668) | def _purge_broken_links(self):
method clean (line 671) | def clean(self):
method unlink_meta_folder (line 675) | def unlink_meta_folder(self, spec):
class SimpleFilesystemView (line 681) | class SimpleFilesystemView(FilesystemView):
method _sanity_check_view_projection (line 685) | def _sanity_check_view_projection(self, specs):
method add_specs (line 699) | def add_specs(self, *specs, **kwargs) -> None:
method _source_merge_visitor_to_merge_map (line 757) | def _source_merge_visitor_to_merge_map(self, visitor: SourceMergeVisit...
method relative_metadata_dir_for_spec (line 773) | def relative_metadata_dir_for_spec(self, spec):
method link_metadata (line 780) | def link_metadata(self, specs):
method get_relative_projection_for_spec (line 808) | def get_relative_projection_for_spec(self, spec):
method get_projection_for_spec (line 816) | def get_projection_for_spec(self, spec):
function get_spec_from_file (line 836) | def get_spec_from_file(filename) -> Optional[spack.spec.Spec]:
function colorize_root (line 844) | def colorize_root(root):
function colorize_spec (line 850) | def colorize_spec(spec):
function find_dependents (line 858) | def find_dependents(all_specs, providers, deptype="run"):
function filter_exclude (line 871) | def filter_exclude(specs, exclude):
function get_dependencies (line 884) | def get_dependencies(specs):
class ConflictingProjectionsError (line 891) | class ConflictingProjectionsError(SpackError):
function is_folder_on_case_insensitive_filesystem (line 895) | def is_folder_on_case_insensitive_filesystem(path: str) -> bool:
FILE: lib/spack/spack/graph.py
function find (line 53) | def find(seq, predicate):
class _GraphLineState (line 67) | class _GraphLineState(enum.Enum):
class AsciiGraph (line 77) | class AsciiGraph:
method __init__ (line 78) | def __init__(self):
method _indent (line 98) | def _indent(self):
method _write_edge (line 101) | def _write_edge(self, string, index, sub=0):
method _connect_deps (line 110) | def _connect_deps(self, i, deps, label=None):
method _set_state (line 166) | def _set_state(self, state, index, label=None):
method _back_edge_line (line 176) | def _back_edge_line(self, prev_ends, end, start, collapse, label=None):
method _node_label (line 250) | def _node_label(self, node):
method _node_line (line 253) | def _node_line(self, index, node):
method _collapse_line (line 268) | def _collapse_line(self, index):
method _merge_right_line (line 279) | def _merge_right_line(self, index):
method _expand_right_line (line 292) | def _expand_right_line(self, index):
method write (line 306) | def write(self, spec, color=None, out=None):
function graph_ascii (line 430) | def graph_ascii(
class DotGraphBuilder (line 442) | class DotGraphBuilder:
method __init__ (line 445) | def __init__(self):
method visit (line 449) | def visit(self, edge: spack.spec.DependencySpec):
method node_entry (line 459) | def node_entry(self, node: spack.spec.Spec) -> Tuple[str, str]:
method edge_entry (line 463) | def edge_entry(self, edge: spack.spec.DependencySpec) -> Tuple[str, st...
method context (line 467) | def context(self):
method render (line 472) | def render(self) -> str:
class SimpleDAG (line 479) | class SimpleDAG(DotGraphBuilder):
method node_entry (line 482) | def node_entry(self, node):
method edge_entry (line 486) | def edge_entry(self, edge):
class StaticDag (line 490) | class StaticDag(DotGraphBuilder):
method node_entry (line 493) | def node_entry(self, node):
method edge_entry (line 496) | def edge_entry(self, edge):
class DAGWithDependencyTypes (line 500) | class DAGWithDependencyTypes(DotGraphBuilder):
method __init__ (line 505) | def __init__(self):
method visit (line 509) | def visit(self, edge):
method node_entry (line 515) | def node_entry(self, node):
method edge_entry (line 522) | def edge_entry(self, edge):
function _static_edges (line 536) | def _static_edges(specs, depflag):
function static_graph_dot (line 552) | def static_graph_dot(
function graph_dot (line 569) | def graph_dot(
FILE: lib/spack/spack/hash_types.py
class SpecHashDescriptor (line 15) | class SpecHashDescriptor:
method __init__ (line 27) | def __init__(
method __call__ (line 41) | def __call__(self, spec: "spack.spec.Spec") -> str:
method __repr__ (line 45) | def __repr__(self) -> str:
function _content_hash_override (line 58) | def _content_hash_override(spec: "spack.spec.Spec") -> str:
FILE: lib/spack/spack/hooks/__init__.py
class _HookRunner (line 28) | class _HookRunner:
method __init__ (line 48) | def __init__(self, hook_name):
method hooks (line 52) | def hooks(self) -> List[types.ModuleType]:
method __call__ (line 57) | def __call__(self, *args, **kwargs):
FILE: lib/spack/spack/hooks/absolutify_elf_sonames.py
function is_shared_library_elf (line 16) | def is_shared_library_elf(filepath):
class SharedLibrariesVisitor (line 32) | class SharedLibrariesVisitor(BaseDirectoryVisitor):
method __init__ (
Copy disabled (too large)
Download .json
Condensed preview — 1696 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,578K chars).
[
{
"path": ".ci/gitlab/forward_dotenv_variables.py",
"chars": 907,
"preview": "import sys\nfrom typing import Dict\n\nimport yaml\n\n\ndef read_dotenv(file_name: str) -> Dict[str, str]:\n result = []\n "
},
{
"path": ".ci/gitlab-ci.yml",
"chars": 1232,
"preview": "# Gitlab configuraiton for spack/spack\n\nstages:\n - packages\n\nvariables:\n SPACK_PACKAGES_CHECKOUT_VERSION: develop\n\n.cl"
},
{
"path": ".codecov.yml",
"chars": 967,
"preview": "coverage:\n precision: 2\n round: nearest\n range: 60...90\n status:\n project:\n default:\n threshold: 2.0%"
},
{
"path": ".devcontainer/postCreateCommand.sh",
"chars": 635,
"preview": "#!/bin/bash\n\n# Load spack environment at terminal startup\ncat <<EOF >> /root/.bashrc\n. /workspaces/spack/share/spack/set"
},
{
"path": ".devcontainer/ubuntu20.04/devcontainer.json",
"chars": 165,
"preview": "{\n \"name\": \"Ubuntu 20.04\",\n \"image\": \"ghcr.io/spack/ubuntu20.04-runner-amd64-gcc-11.4:2023.08.01\",\n \"postCreateComman"
},
{
"path": ".devcontainer/ubuntu22.04/devcontainer.json",
"chars": 145,
"preview": "{\n \"name\": \"Ubuntu 22.04\",\n \"image\": \"ghcr.io/spack/ubuntu-22.04:v2024-05-07\",\n \"postCreateCommand\": \"./.devcontainer"
},
{
"path": ".dockerignore",
"chars": 158,
"preview": ".git/*\nopt/spack/*\n\n/etc/spack/*\n!/etc/spack/defaults\n\nshare/spack/dotkit/*\nshare/spack/lmod/*\nshare/spack/modules/*\nlib"
},
{
"path": ".flake8",
"chars": 1483,
"preview": "# -*- conf -*-\n# flake8 settings for Spack.\n#\n# These exceptions are for Spack core files. We're slightly more lenient\n#"
},
{
"path": ".git-blame-ignore-revs",
"chars": 258,
"preview": "# .git-blame-ignore-revs\n# Formatted entire codebase with black 23\n603569e321013a1a63a637813c94c2834d0a0023\n# Formatted "
},
{
"path": ".gitattributes",
"chars": 97,
"preview": "*.bat text eol=crlf\n*.py diff=python\n*.py text eol=lf\nlib/spack/spack/vendor/* linguist-vendored\n"
},
{
"path": ".github/CODE_OF_CONDUCT.md",
"chars": 3220,
"preview": "# Spack Community Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as "
},
{
"path": ".github/CONTRIBUTING.md",
"chars": 339,
"preview": "# Contributing to Spack\n\nAll contributions to Spack must be made under both the Apache License,\nVersion 2.0 (Apache-2.0)"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 2536,
"preview": "name: \"\\U0001F41E Bug report\"\ndescription: Report a bug in the core of Spack (command not working as expected, etc.)\nlab"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 461,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: \"\\U0001F4A5 Package build error\"\n url: https://github.com/spack/s"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.yml",
"chars": 1441,
"preview": "name: \"\\U0001F38A Feature request\"\ndescription: Suggest adding a feature that is not yet in Spack\nlabels: [feature]\nbody"
},
{
"path": ".github/dependabot.yml",
"chars": 376,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n directory: \"/\"\n schedule:\n interval: \"daily\"\n\n "
},
{
"path": ".github/labeler.yml",
"chars": 2030,
"preview": "bootstrap:\n- changed-files:\n - any-glob-to-any-file: lib/spack/spack/bootstrap/**\n\nbinary-caches:\n- changed-files:\n - "
},
{
"path": ".github/pull_request_template.md",
"chars": 325,
"preview": "<!-- \nRemember that `spackbot` can help with your PR in multiple ways:\n- `@spackbot help` shows all the commands that a"
},
{
"path": ".github/workflows/bin/canonicalize.py",
"chars": 5157,
"preview": "#!/usr/bin/env python3\n# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier"
},
{
"path": ".github/workflows/bin/execute_installer.ps1",
"chars": 249,
"preview": "$ proc = Start-Process ${{ env.spack_installer }}\\spack.exe \"/install /quiet\" -Passthru\n$handle = $proc.Handle # cache "
},
{
"path": ".github/workflows/bin/format-rst.py",
"chars": 9771,
"preview": "#!/usr/bin/env python3\n# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier"
},
{
"path": ".github/workflows/bin/generate_spack_yaml_containerize.sh",
"chars": 270,
"preview": "#!/bin/bash\n (echo \"spack:\" \\\n&& echo \" specs: []\" \\\n&& echo \" container:\" \\\n&& echo \" format: docker\" \\\n&"
},
{
"path": ".github/workflows/bin/setup_git.ps1",
"chars": 224,
"preview": "git config --global user.email \"spack@example.com\"\ngit config --global user.name \"Test User\"\ngit config --global core.lo"
},
{
"path": ".github/workflows/bin/setup_git.sh",
"chars": 240,
"preview": "#!/bin/bash -e\ngit config --global user.email \"spack@example.com\"\ngit config --global user.name \"Test User\"\n\n# create a "
},
{
"path": ".github/workflows/bin/system_shortcut_check.ps1",
"chars": 142,
"preview": "param ($systemFolder, $shortcut)\n\n$start = [System.Environment]::GetFolderPath(\"$systemFolder\")\nInvoke-Item \"$start\\Prog"
},
{
"path": ".github/workflows/bootstrap.yml",
"chars": 7623,
"preview": "name: Bootstrapping\n\non:\n # This Workflow can be triggered manually\n workflow_dispatch:\n workflow_call:\n schedule:\n "
},
{
"path": ".github/workflows/build-containers.yml",
"chars": 5814,
"preview": "name: Containers\n\non:\n # This Workflow can be triggered manually\n workflow_dispatch:\n # Build new Spack develop conta"
},
{
"path": ".github/workflows/ci.yaml",
"chars": 4302,
"preview": "name: ci\n\non:\n push:\n branches:\n - develop\n - releases/**\n pull_request:\n branches:\n - develop\n "
},
{
"path": ".github/workflows/coverage.yml",
"chars": 1051,
"preview": "name: coverage\n\non:\n workflow_call:\n\njobs:\n # Upload coverage reports to codecov once as a single bundle\n upload:\n "
},
{
"path": ".github/workflows/import-check.yaml",
"chars": 2000,
"preview": "name: import-check\n\non:\n workflow_call:\n\njobs:\n # Check we don't make the situation with circular imports worse\n impo"
},
{
"path": ".github/workflows/prechecks.yml",
"chars": 2202,
"preview": "name: prechecks\n\non:\n workflow_call:\n inputs:\n with_coverage:\n required: true\n type: string\n "
},
{
"path": ".github/workflows/requirements/coverage/requirements.txt",
"chars": 17,
"preview": "coverage==7.13.5\n"
},
{
"path": ".github/workflows/requirements/style/requirements.txt",
"chars": 167,
"preview": "black==25.12.0\nclingo==5.8.0\nflake8==7.3.0\nisort==7.0.0\nmypy==1.20.1\nvermin==1.8.0\npylint==4.0.5\ndocutils==0.22.4\nruamel"
},
{
"path": ".github/workflows/requirements/unit_tests/requirements.txt",
"chars": 89,
"preview": "pytest==9.0.3\npytest-cov==7.1.0\npytest-xdist==3.8.0\ncoverage[toml]<=7.11.0\nclingo==5.8.0\n"
},
{
"path": ".github/workflows/stale.yaml",
"chars": 2906,
"preview": "name: 'Close stale issues and PRs'\non:\n schedule:\n # Run every day at 1:14 UTC\n - cron: '14 1 * * *'\n workflow_d"
},
{
"path": ".github/workflows/triage.yml",
"chars": 649,
"preview": "#-----------------------------------------------------------------------\n# DO NOT modify unless you really know what you"
},
{
"path": ".github/workflows/unit_tests.yaml",
"chars": 11148,
"preview": "name: unit tests\n\non:\n workflow_dispatch:\n workflow_call:\n\nconcurrency:\n group: unit_tests-${{github.ref}}-${{github."
},
{
"path": ".gitignore",
"chars": 8779,
"preview": "##########################\n# Spack-specific ignores #\n##########################\n\n/var/spack/stage\n/var/spack/cache\n/var"
},
{
"path": ".mailmap",
"chars": 6418,
"preview": "Abhinav Bhatele <bhatele@llnl.gov> Abhinav Bhatele <bhatele@gmail.com>\nAdam Moody "
},
{
"path": ".readthedocs.yml",
"chars": 1648,
"preview": "version: 2\n\nbuild:\n os: \"ubuntu-24.04\"\n apt_packages:\n - graphviz\n - inkscape\n - xindy\n tools:\n python: \""
},
{
"path": "CHANGELOG.md",
"chars": 171489,
"preview": "# v1.1.1 (2026-01-14)\n\n## Usability and performance enhancements\n\n* solver: do a precheck for non-existing and deprecate"
},
{
"path": "CITATION.cff",
"chars": 3682,
"preview": "# If you are referencing Spack in a publication, please cite the SC'15 paper\n# described here.\n#\n# Here's the raw citati"
},
{
"path": "COPYRIGHT",
"chars": 3306,
"preview": "Intellectual Property Notice\n------------------------------\n\nSpack is licensed under the Apache License, Version 2.0 (LI"
},
{
"path": "LICENSE-APACHE",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "LICENSE-MIT",
"chars": 1077,
"preview": "MIT License\n\nCopyright (c) Spack Project Developers.\n\nPermission is hereby granted, free of charge, to any person obtain"
},
{
"path": "NEWS.md",
"chars": 1705,
"preview": "## Package API v2.4\n- Added the `%%` sigil to spec syntax, to propagate compiler preferences.\n\n## Spack v1.0.0\nDeprecate"
},
{
"path": "NOTICE",
"chars": 1167,
"preview": "This work was produced under the auspices of the U.S. Department of\nEnergy by Lawrence Livermore National Laboratory und"
},
{
"path": "README.md",
"chars": 8698,
"preview": "<div align=\"left\">\n\n<h2>\n<picture>\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent."
},
{
"path": "SECURITY.md",
"chars": 1091,
"preview": "# Security Policy\n\n## Supported Versions\n\nWe provide security updates for `develop` and for the last two\nstable (`0.x`) "
},
{
"path": "bin/haspywin.py",
"chars": 547,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "bin/sbang",
"chars": 2852,
"preview": "#!/bin/sh\n#\n# Copyright sbang project developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2"
},
{
"path": "bin/spack",
"chars": 1628,
"preview": "#!/bin/sh\n# -*- python -*-\n#\n# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Iden"
},
{
"path": "bin/spack-python",
"chars": 653,
"preview": "#!/bin/sh\n#\n# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2"
},
{
"path": "bin/spack-tmpconfig",
"chars": 2562,
"preview": "#!/bin/bash\nset -euo pipefail\n[[ -n \"${TMPCONFIG_DEBUG:=}\" ]] && set -x\nDIR=\"$(cd -P \"$(dirname \"${BASH_SOURCE[0]}\")\" &&"
},
{
"path": "bin/spack.bat",
"chars": 7495,
"preview": ":: Copyright Spack Project Developers. See COPYRIGHT file for details.\r\n::\r\n:: SPDX-License-Identifier: (Apache-2.0 OR M"
},
{
"path": "bin/spack.ps1",
"chars": 5056,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n"
},
{
"path": "bin/spack_cmd.bat",
"chars": 367,
"preview": "@ECHO OFF\r\n:: (c) 2021 Lawrence Livermore National Laboratory\r\n:: To use this file independently of Spack's installer, e"
},
{
"path": "bin/spack_pwsh.ps1",
"chars": 292,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "etc/spack/defaults/base/concretizer.yaml",
"chars": 5461,
"preview": "# -------------------------------------------------------------------------\n# This is the default spack configuration fi"
},
{
"path": "etc/spack/defaults/base/config.yaml",
"chars": 9814,
"preview": "# -------------------------------------------------------------------------\n# This is the default spack configuration fi"
},
{
"path": "etc/spack/defaults/base/mirrors.yaml",
"chars": 76,
"preview": "mirrors:\n spack-public:\n binary: false\n url: https://mirror.spack.io\n"
},
{
"path": "etc/spack/defaults/base/modules.yaml",
"chars": 1560,
"preview": "# -------------------------------------------------------------------------\n# This is the default configuration for Spac"
},
{
"path": "etc/spack/defaults/base/packages.yaml",
"chars": 3075,
"preview": "# -------------------------------------------------------------------------\n# This file controls default concretization "
},
{
"path": "etc/spack/defaults/base/repos.yaml",
"chars": 575,
"preview": "# -------------------------------------------------------------------------\n# This is the default spack repository confi"
},
{
"path": "etc/spack/defaults/bootstrap.yaml",
"chars": 948,
"preview": "bootstrap:\n # If set to false Spack will not bootstrap missing software,\n # but will instead raise an error.\n enable:"
},
{
"path": "etc/spack/defaults/darwin/modules.yaml",
"chars": 768,
"preview": "# -------------------------------------------------------------------------\n# This is the default configuration for Spac"
},
{
"path": "etc/spack/defaults/darwin/packages.yaml",
"chars": 1848,
"preview": "# -------------------------------------------------------------------------\n# This file controls default concretization "
},
{
"path": "etc/spack/defaults/include.yaml",
"chars": 177,
"preview": "include:\n # default platform-specific configuration\n - path: \"${platform}\"\n optional: true\n\n # base packages.yaml "
},
{
"path": "etc/spack/defaults/linux/modules.yaml",
"chars": 655,
"preview": "# -------------------------------------------------------------------------\n# This is the default configuration for Spac"
},
{
"path": "etc/spack/defaults/windows/config.yaml",
"chars": 129,
"preview": "config:\n locks: false\n build_stage::\n - '$user_cache_path/stage'\n stage_name: '{name}-{version}-{hash:7}'\n instal"
},
{
"path": "etc/spack/defaults/windows/packages.yaml",
"chars": 813,
"preview": "# -------------------------------------------------------------------------\n# This file controls default concretization "
},
{
"path": "lib/spack/_vendoring/__init__.py",
"chars": 351,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/docs/.gitignore",
"chars": 113,
"preview": ".spack/spack-packages\n.spack/packages.yaml\n.spack-env\n_build\n_spack_root\ncommand_index.rst\nspack*.rst\nspack.lock\n"
},
{
"path": "lib/spack/docs/.spack/repos.yaml",
"chars": 52,
"preview": "repos:\n builtin:\n destination: ./spack-packages\n"
},
{
"path": "lib/spack/docs/Makefile",
"chars": 7042,
"preview": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS = -W --keep-go"
},
{
"path": "lib/spack/docs/_gh_pages_redirect/.nojekyll",
"chars": 0,
"preview": ""
},
{
"path": "lib/spack/docs/_gh_pages_redirect/index.html",
"chars": 254,
"preview": "<html>\n <head>\n <meta http-equiv=\"refresh\" content=\"0; url=https://spack.readthedocs.io/\" />\n </head>\n <body>\n "
},
{
"path": "lib/spack/docs/_static/css/custom.css",
"chars": 1071,
"preview": "div.versionadded {\n border-left: 3px solid #0c731f;\n color: #0c731f;\n padding-left: 1rem;\n}\n\n.py.property {\n display"
},
{
"path": "lib/spack/docs/_static/js/versions.js",
"chars": 4430,
"preview": "// based on https://github.com/readthedocs/sphinx_rtd_theme/blob/3.0.2/sphinx_rtd_theme/static/js/versions.js_t\n\nfunctio"
},
{
"path": "lib/spack/docs/_templates/base.html",
"chars": 536,
"preview": "{% extends \"!base.html\" %}\n\n{%- block extrahead %} \n <!-- Google tag (gtag.js) -->\n <script async src=\"https://www.goo"
},
{
"path": "lib/spack/docs/_templates/sidebar/brand.html",
"chars": 990,
"preview": "<a class=\"sidebar-brand{% if logo %} centered{% endif %}\" href=\"{{ pathto(master_doc) }}\">\n {%- block brand_content %}\n"
},
{
"path": "lib/spack/docs/advanced_topics.rst",
"chars": 6278,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/binary_caches.rst",
"chars": 31053,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/bootstrapping.rst",
"chars": 6918,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_settings.rst",
"chars": 10901,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/autotoolspackage.rst",
"chars": 18006,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/bundlepackage.rst",
"chars": 2496,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/cachedcmakepackage.rst",
"chars": 4467,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/cmakepackage.rst",
"chars": 11533,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/cudapackage.rst",
"chars": 4516,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/custompackage.rst",
"chars": 7742,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/inteloneapipackage.rst",
"chars": 5545,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/luapackage.rst",
"chars": 3469,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/makefilepackage.rst",
"chars": 10040,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/mavenpackage.rst",
"chars": 2440,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/mesonpackage.rst",
"chars": 3516,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/octavepackage.rst",
"chars": 1350,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/perlpackage.rst",
"chars": 8661,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/pythonpackage.rst",
"chars": 27163,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/qmakepackage.rst",
"chars": 3472,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/racketpackage.rst",
"chars": 1742,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/rocmpackage.rst",
"chars": 3906,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/rpackage.rst",
"chars": 15211,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/rubypackage.rst",
"chars": 4683,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/sconspackage.rst",
"chars": 9221,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/sippackage.rst",
"chars": 4500,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/sourceforgepackage.rst",
"chars": 1692,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems/wafpackage.rst",
"chars": 3296,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/build_systems.rst",
"chars": 2924,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/chain.rst",
"chars": 4070,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/command_index.in",
"chars": 287,
"preview": "=================\nCommand Reference\n=================\n\nThis is a reference for all commands in the Spack command line in"
},
{
"path": "lib/spack/docs/conf.py",
"chars": 20308,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/docs/config_yaml.rst",
"chars": 15639,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/configuration.rst",
"chars": 26712,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/configuring_compilers.rst",
"chars": 10862,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/containers.rst",
"chars": 35829,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/contribution_guide.rst",
"chars": 29397,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/developer_guide.rst",
"chars": 45124,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/env_vars_yaml.rst",
"chars": 1032,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/environments.rst",
"chars": 59173,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/environments_basics.rst",
"chars": 6657,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/extensions.rst",
"chars": 6140,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/features.rst",
"chars": 5934,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/frequently_asked_questions.rst",
"chars": 6546,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/getting_help.rst",
"chars": 787,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/getting_started.rst",
"chars": 5200,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/google5fda5f94b4ffb8de.html",
"chars": 53,
"preview": "google-site-verification: google5fda5f94b4ffb8de.html"
},
{
"path": "lib/spack/docs/gpu_configuration.rst",
"chars": 3904,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/images/packaging.excalidrawlib",
"chars": 86548,
"preview": "{\n \"type\": \"excalidrawlib\",\n \"version\": 2,\n \"source\": \"https://excalidraw.com\",\n \"libraryItems\": [\n {\n \"stat"
},
{
"path": "lib/spack/docs/include_yaml.rst",
"chars": 13617,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/index.rst",
"chars": 3546,
"preview": ".. \n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR M"
},
{
"path": "lib/spack/docs/installing.rst",
"chars": 6281,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/installing_prerequisites.rst",
"chars": 2077,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/mirrors.rst",
"chars": 9005,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/module_file_support.rst",
"chars": 36225,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/package_api.rst",
"chars": 3316,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/package_fundamentals.rst",
"chars": 33769,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/package_review_guide.rst",
"chars": 19133,
"preview": ".. Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MIT)\n"
},
{
"path": "lib/spack/docs/packages_yaml.rst",
"chars": 31120,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/packaging_guide_advanced.rst",
"chars": 22657,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/packaging_guide_build.rst",
"chars": 68971,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/packaging_guide_creation.rst",
"chars": 135255,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/packaging_guide_testing.rst",
"chars": 45374,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/pipelines.rst",
"chars": 40897,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/repositories.rst",
"chars": 25384,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/requirements.txt",
"chars": 232,
"preview": "sphinx==9.1.0\nsphinxcontrib-programoutput==0.19\nsphinxcontrib-svg2pdfconverter==2.1.0\nsphinx-copybutton==0.5.2\nsphinx-la"
},
{
"path": "lib/spack/docs/roles_and_responsibilities.rst",
"chars": 4098,
"preview": ".. Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MIT)\n"
},
{
"path": "lib/spack/docs/signing.rst",
"chars": 24536,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/spack.yaml",
"chars": 634,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/docs/spec_syntax.rst",
"chars": 26535,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/toolchains_yaml.rst",
"chars": 6163,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/docs/windows.rst",
"chars": 9421,
"preview": "..\n Copyright Spack Project Developers. See COPYRIGHT file for details.\n\n SPDX-License-Identifier: (Apache-2.0 OR MI"
},
{
"path": "lib/spack/llnl/__init__.py",
"chars": 340,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/__init__.py",
"chars": 2563,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/aliases.py",
"chars": 580,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/archspec.py",
"chars": 2148,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/audit.py",
"chars": 55194,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/binary_distribution.py",
"chars": 112419,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/bootstrap/__init__.py",
"chars": 998,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/_common.py",
"chars": 9038,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/clingo.py",
"chars": 9143,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/config.py",
"chars": 5440,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/core.py",
"chars": 23867,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/environment.py",
"chars": 6235,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-darwin-aarch64.json",
"chars": 38613,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"darwin\",\"platfo"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-darwin-x86_64.json",
"chars": 35858,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"darwin\",\"platfo"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-freebsd-amd64.json",
"chars": 35777,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"freebsd\",\"platf"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-linux-aarch64.json",
"chars": 50068,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"linux\",\"platfor"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-linux-ppc64le.json",
"chars": 49474,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"linux\",\"platfor"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-linux-x86_64.json",
"chars": 46837,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"linux\",\"platfor"
},
{
"path": "lib/spack/spack/bootstrap/prototypes/clingo-windows-x86_64.json",
"chars": 10700,
"preview": "{\"spec\":{\"_meta\":{\"version\":5},\"nodes\":[{\"name\":\"clingo-bootstrap\",\"version\":\"spack\",\"arch\":{\"platform\":\"windows\",\"platf"
},
{
"path": "lib/spack/spack/bootstrap/status.py",
"chars": 6277,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\""
},
{
"path": "lib/spack/spack/build_environment.py",
"chars": 66387,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/buildcache_migrate.py",
"chars": 12908,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/buildcache_prune.py",
"chars": 20143,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/builder.py",
"chars": 29457,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/caches.py",
"chars": 2207,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/ci/README.md",
"chars": 1644,
"preview": "# Spack CI generators\n\nThis document describes how the ci module can be extended to provide novel\nci generators. The mo"
},
{
"path": "lib/spack/spack/ci/__init__.py",
"chars": 52405,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/ci/common.py",
"chars": 28853,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/ci/generator_registry.py",
"chars": 975,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n#"
},
{
"path": "lib/spack/spack/ci/gitlab.py",
"chars": 18422,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/cmd/__init__.py",
"chars": 28600,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/add.py",
"chars": 1029,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/arch.py",
"chars": 4227,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/audit.py",
"chars": 4103,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/cmd/blame.py",
"chars": 10626,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/bootstrap.py",
"chars": 18171,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/cmd/build_env.py",
"chars": 476,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/buildcache.py",
"chars": 43932,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
},
{
"path": "lib/spack/spack/cmd/cd.py",
"chars": 765,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/change.py",
"chars": 2753,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/checksum.py",
"chars": 9946,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/ci.py",
"chars": 35712,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/clean.py",
"chars": 4100,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/commands.py",
"chars": 29715,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/common/__init__.py",
"chars": 2232,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/common/arguments.py",
"chars": 24472,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/common/confirmation.py",
"chars": 924,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\n"
},
{
"path": "lib/spack/spack/cmd/common/env_utility.py",
"chars": 5099,
"preview": "# Copyright Spack Project Developers. See COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\ni"
}
]
// ... and 1496 more files (download for full content)
About this extraction
This page contains the full source code of the LLNL/spack GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1696 files (12.2 MB), approximately 3.3M tokens, and a symbol index with 14977 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.