Merge branch 'features/matrix-broadcast' of https://github.com/spack/spack into 2022-12-06
This commit is contained in:
commit
9150f47af0
@ -1,3 +1,5 @@
|
|||||||
# .git-blame-ignore-revs
|
# .git-blame-ignore-revs
|
||||||
# Formatted entire codebase with black
|
# Formatted entire codebase with black 23
|
||||||
|
603569e321013a1a63a637813c94c2834d0a0023
|
||||||
|
# Formatted entire codebase with black 22
|
||||||
f52f6e99dbf1131886a80112b8c79dfc414afb7c
|
f52f6e99dbf1131886a80112b8c79dfc414afb7c
|
||||||
|
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -1,3 +1,4 @@
|
|||||||
*.py diff=python
|
*.py diff=python
|
||||||
*.lp linguist-language=Prolog
|
*.lp linguist-language=Prolog
|
||||||
lib/spack/external/* linguist-vendored
|
lib/spack/external/* linguist-vendored
|
||||||
|
*.bat text eol=crlf
|
4
.github/workflows/audit.yaml
vendored
4
.github/workflows/audit.yaml
vendored
@ -19,8 +19,8 @@ jobs:
|
|||||||
package-audits:
|
package-audits:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: ${{inputs.python_version}}
|
python-version: ${{inputs.python_version}}
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
|
22
.github/workflows/bootstrap.yml
vendored
22
.github/workflows/bootstrap.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
|||||||
make patch unzip which xz python3 python3-devel tree \
|
make patch unzip which xz python3 python3-devel tree \
|
||||||
cmake bison bison-devel libstdc++-static
|
cmake bison bison-devel libstdc++-static
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup non-root user
|
- name: Setup non-root user
|
||||||
@ -62,7 +62,7 @@ jobs:
|
|||||||
make patch unzip xz-utils python3 python3-dev tree \
|
make patch unzip xz-utils python3 python3-dev tree \
|
||||||
cmake bison
|
cmake bison
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup non-root user
|
- name: Setup non-root user
|
||||||
@ -99,7 +99,7 @@ jobs:
|
|||||||
bzip2 curl file g++ gcc gfortran git gnupg2 gzip \
|
bzip2 curl file g++ gcc gfortran git gnupg2 gzip \
|
||||||
make patch unzip xz-utils python3 python3-dev tree
|
make patch unzip xz-utils python3 python3-dev tree
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup non-root user
|
- name: Setup non-root user
|
||||||
@ -133,7 +133,7 @@ jobs:
|
|||||||
make patch unzip which xz python3 python3-devel tree \
|
make patch unzip which xz python3 python3-devel tree \
|
||||||
cmake bison
|
cmake bison
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup repo
|
- name: Setup repo
|
||||||
@ -158,7 +158,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
brew install cmake bison@2.7 tree
|
brew install cmake bison@2.7 tree
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
- name: Bootstrap clingo
|
- name: Bootstrap clingo
|
||||||
run: |
|
run: |
|
||||||
source share/spack/setup-env.sh
|
source share/spack/setup-env.sh
|
||||||
@ -179,7 +179,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
brew install tree
|
brew install tree
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
- name: Bootstrap clingo
|
- name: Bootstrap clingo
|
||||||
run: |
|
run: |
|
||||||
set -ex
|
set -ex
|
||||||
@ -204,7 +204,7 @@ jobs:
|
|||||||
runs-on: ubuntu-20.04
|
runs-on: ubuntu-20.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup repo
|
- name: Setup repo
|
||||||
@ -247,7 +247,7 @@ jobs:
|
|||||||
bzip2 curl file g++ gcc patchelf gfortran git gzip \
|
bzip2 curl file g++ gcc patchelf gfortran git gzip \
|
||||||
make patch unzip xz-utils python3 python3-dev tree
|
make patch unzip xz-utils python3 python3-dev tree
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup non-root user
|
- name: Setup non-root user
|
||||||
@ -283,7 +283,7 @@ jobs:
|
|||||||
make patch unzip xz-utils python3 python3-dev tree \
|
make patch unzip xz-utils python3 python3-dev tree \
|
||||||
gawk
|
gawk
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Setup non-root user
|
- name: Setup non-root user
|
||||||
@ -316,7 +316,7 @@ jobs:
|
|||||||
# Remove GnuPG since we want to bootstrap it
|
# Remove GnuPG since we want to bootstrap it
|
||||||
sudo rm -rf /usr/local/bin/gpg
|
sudo rm -rf /usr/local/bin/gpg
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
- name: Bootstrap GnuPG
|
- name: Bootstrap GnuPG
|
||||||
run: |
|
run: |
|
||||||
source share/spack/setup-env.sh
|
source share/spack/setup-env.sh
|
||||||
@ -333,7 +333,7 @@ jobs:
|
|||||||
# Remove GnuPG since we want to bootstrap it
|
# Remove GnuPG since we want to bootstrap it
|
||||||
sudo rm -rf /usr/local/bin/gpg
|
sudo rm -rf /usr/local/bin/gpg
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
- name: Bootstrap GnuPG
|
- name: Bootstrap GnuPG
|
||||||
run: |
|
run: |
|
||||||
source share/spack/setup-env.sh
|
source share/spack/setup-env.sh
|
||||||
|
8
.github/workflows/build-containers.yml
vendored
8
.github/workflows/build-containers.yml
vendored
@ -50,7 +50,7 @@ jobs:
|
|||||||
if: github.repository == 'spack/spack'
|
if: github.repository == 'spack/spack'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
|
|
||||||
- name: Set Container Tag Normal (Nightly)
|
- name: Set Container Tag Normal (Nightly)
|
||||||
run: |
|
run: |
|
||||||
@ -80,7 +80,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Upload Dockerfile
|
- name: Upload Dockerfile
|
||||||
uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
|
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce
|
||||||
with:
|
with:
|
||||||
name: dockerfiles
|
name: dockerfiles
|
||||||
path: dockerfiles
|
path: dockerfiles
|
||||||
@ -89,7 +89,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # @v1
|
uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # @v1
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@8c0edbc76e98fa90f69d9a2c020dcb50019dc325 # @v1
|
uses: docker/setup-buildx-action@f03ac48505955848960e80bbb68046aa35c7b9e7 # @v1
|
||||||
|
|
||||||
- name: Log in to GitHub Container Registry
|
- name: Log in to GitHub Container Registry
|
||||||
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
|
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
|
||||||
@ -106,7 +106,7 @@ jobs:
|
|||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Build & Deploy ${{ matrix.dockerfile[0] }}
|
- name: Build & Deploy ${{ matrix.dockerfile[0] }}
|
||||||
uses: docker/build-push-action@c56af957549030174b10d6867f20e78cfd7debc5 # @v2
|
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 # @v2
|
||||||
with:
|
with:
|
||||||
context: dockerfiles/${{ matrix.dockerfile[0] }}
|
context: dockerfiles/${{ matrix.dockerfile[0] }}
|
||||||
platforms: ${{ matrix.dockerfile[1] }}
|
platforms: ${{ matrix.dockerfile[1] }}
|
||||||
|
2
.github/workflows/ci.yaml
vendored
2
.github/workflows/ci.yaml
vendored
@ -35,7 +35,7 @@ jobs:
|
|||||||
core: ${{ steps.filter.outputs.core }}
|
core: ${{ steps.filter.outputs.core }}
|
||||||
packages: ${{ steps.filter.outputs.packages }}
|
packages: ${{ steps.filter.outputs.packages }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
if: ${{ github.event_name == 'push' }}
|
if: ${{ github.event_name == 'push' }}
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
8
.github/workflows/setup_git.ps1
vendored
8
.github/workflows/setup_git.ps1
vendored
@ -1,15 +1,9 @@
|
|||||||
# (c) 2021 Lawrence Livermore National Laboratory
|
# (c) 2022 Lawrence Livermore National Laboratory
|
||||||
|
|
||||||
Set-Location spack
|
|
||||||
|
|
||||||
git config --global user.email "spack@example.com"
|
git config --global user.email "spack@example.com"
|
||||||
git config --global user.name "Test User"
|
git config --global user.name "Test User"
|
||||||
git config --global core.longpaths true
|
git config --global core.longpaths true
|
||||||
|
|
||||||
# See https://github.com/git/git/security/advisories/GHSA-3wp6-j8xr-qw85 (CVE-2022-39253)
|
|
||||||
# This is needed to let some fixture in our unit-test suite run
|
|
||||||
git config --global protocol.file.allow always
|
|
||||||
|
|
||||||
if ($(git branch --show-current) -ne "develop")
|
if ($(git branch --show-current) -ne "develop")
|
||||||
{
|
{
|
||||||
git branch develop origin/develop
|
git branch develop origin/develop
|
||||||
|
4
.github/workflows/setup_git.sh
vendored
4
.github/workflows/setup_git.sh
vendored
@ -2,10 +2,6 @@
|
|||||||
git config --global user.email "spack@example.com"
|
git config --global user.email "spack@example.com"
|
||||||
git config --global user.name "Test User"
|
git config --global user.name "Test User"
|
||||||
|
|
||||||
# See https://github.com/git/git/security/advisories/GHSA-3wp6-j8xr-qw85 (CVE-2022-39253)
|
|
||||||
# This is needed to let some fixture in our unit-test suite run
|
|
||||||
git config --global protocol.file.allow always
|
|
||||||
|
|
||||||
# create a local pr base branch
|
# create a local pr base branch
|
||||||
if [[ -n $GITHUB_BASE_REF ]]; then
|
if [[ -n $GITHUB_BASE_REF ]]; then
|
||||||
git fetch origin "${GITHUB_BASE_REF}:${GITHUB_BASE_REF}"
|
git fetch origin "${GITHUB_BASE_REF}:${GITHUB_BASE_REF}"
|
||||||
|
18
.github/workflows/unit_tests.yaml
vendored
18
.github/workflows/unit_tests.yaml
vendored
@ -47,10 +47,10 @@ jobs:
|
|||||||
on_develop: false
|
on_develop: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install System packages
|
- name: Install System packages
|
||||||
@ -94,10 +94,10 @@ jobs:
|
|||||||
shell:
|
shell:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
- name: Install System packages
|
- name: Install System packages
|
||||||
@ -133,7 +133,7 @@ jobs:
|
|||||||
dnf install -y \
|
dnf install -y \
|
||||||
bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
|
bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
|
||||||
make patch tcl unzip which xz
|
make patch tcl unzip which xz
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
- name: Setup repo and non-root user
|
- name: Setup repo and non-root user
|
||||||
run: |
|
run: |
|
||||||
git --version
|
git --version
|
||||||
@ -151,10 +151,10 @@ jobs:
|
|||||||
clingo-cffi:
|
clingo-cffi:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
- name: Install System packages
|
- name: Install System packages
|
||||||
@ -185,10 +185,10 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
python-version: ["3.10"]
|
python-version: ["3.10"]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
|
10
.github/workflows/valid-style.yml
vendored
10
.github/workflows/valid-style.yml
vendored
@ -18,8 +18,8 @@ jobs:
|
|||||||
validate:
|
validate:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
@ -35,16 +35,16 @@ jobs:
|
|||||||
style:
|
style:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # @v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435 # @v2
|
||||||
with:
|
with:
|
||||||
python-version: '3.11'
|
python-version: '3.11'
|
||||||
cache: 'pip'
|
cache: 'pip'
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
run: |
|
run: |
|
||||||
python3 -m pip install --upgrade pip six setuptools types-six black mypy isort clingo flake8
|
python3 -m pip install --upgrade pip six setuptools types-six black==23.1.0 mypy isort clingo flake8
|
||||||
- name: Setup git configuration
|
- name: Setup git configuration
|
||||||
run: |
|
run: |
|
||||||
# Need this for the git tests to succeed.
|
# Need this for the git tests to succeed.
|
||||||
|
175
.github/workflows/windows_python.yml
vendored
175
.github/workflows/windows_python.yml
vendored
@ -10,15 +10,15 @@ concurrency:
|
|||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell:
|
shell:
|
||||||
powershell Invoke-Expression -Command ".\share\spack\qa\windows_test_setup.ps1"; {0}
|
powershell Invoke-Expression -Command "./share/spack/qa/windows_test_setup.ps1"; {0}
|
||||||
jobs:
|
jobs:
|
||||||
unit-tests:
|
unit-tests:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: 3.9
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
@ -26,13 +26,11 @@ jobs:
|
|||||||
python -m pip install --upgrade pip six pywin32 setuptools codecov pytest-cov clingo
|
python -m pip install --upgrade pip six pywin32 setuptools codecov pytest-cov clingo
|
||||||
- name: Create local develop
|
- name: Create local develop
|
||||||
run: |
|
run: |
|
||||||
.\spack\.github\workflows\setup_git.ps1
|
./.github/workflows/setup_git.ps1
|
||||||
- name: Unit Test
|
- name: Unit Test
|
||||||
run: |
|
run: |
|
||||||
echo F|xcopy .\spack\share\spack\qa\configuration\windows_config.yaml $env:USERPROFILE\.spack\windows\config.yaml
|
|
||||||
cd spack
|
|
||||||
dir
|
|
||||||
spack unit-test -x --verbose --cov --cov-config=pyproject.toml --ignore=lib/spack/spack/test/cmd
|
spack unit-test -x --verbose --cov --cov-config=pyproject.toml --ignore=lib/spack/spack/test/cmd
|
||||||
|
./share/spack/qa/validate_last_exit.ps1
|
||||||
coverage combine -a
|
coverage combine -a
|
||||||
coverage xml
|
coverage xml
|
||||||
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
|
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
|
||||||
@ -41,10 +39,10 @@ jobs:
|
|||||||
unit-tests-cmd:
|
unit-tests-cmd:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: 3.9
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
@ -52,12 +50,11 @@ jobs:
|
|||||||
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage pytest-cov clingo
|
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage pytest-cov clingo
|
||||||
- name: Create local develop
|
- name: Create local develop
|
||||||
run: |
|
run: |
|
||||||
.\spack\.github\workflows\setup_git.ps1
|
./.github/workflows/setup_git.ps1
|
||||||
- name: Command Unit Test
|
- name: Command Unit Test
|
||||||
run: |
|
run: |
|
||||||
echo F|xcopy .\spack\share\spack\qa\configuration\windows_config.yaml $env:USERPROFILE\.spack\windows\config.yaml
|
|
||||||
cd spack
|
|
||||||
spack unit-test -x --verbose --cov --cov-config=pyproject.toml lib/spack/spack/test/cmd
|
spack unit-test -x --verbose --cov --cov-config=pyproject.toml lib/spack/spack/test/cmd
|
||||||
|
./share/spack/qa/validate_last_exit.ps1
|
||||||
coverage combine -a
|
coverage combine -a
|
||||||
coverage xml
|
coverage xml
|
||||||
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
|
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
|
||||||
@ -66,10 +63,10 @@ jobs:
|
|||||||
build-abseil:
|
build-abseil:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
|
- uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
|
||||||
with:
|
with:
|
||||||
python-version: 3.9
|
python-version: 3.9
|
||||||
- name: Install Python packages
|
- name: Install Python packages
|
||||||
@ -78,81 +75,81 @@ jobs:
|
|||||||
- name: Build Test
|
- name: Build Test
|
||||||
run: |
|
run: |
|
||||||
spack compiler find
|
spack compiler find
|
||||||
echo F|xcopy .\spack\share\spack\qa\configuration\windows_config.yaml $env:USERPROFILE\.spack\windows\config.yaml
|
|
||||||
spack external find cmake
|
spack external find cmake
|
||||||
spack external find ninja
|
spack external find ninja
|
||||||
spack -d install abseil-cpp
|
spack -d install abseil-cpp
|
||||||
make-installer:
|
# TODO: johnwparent - reduce the size of the installer operations
|
||||||
runs-on: windows-latest
|
# make-installer:
|
||||||
steps:
|
# runs-on: windows-latest
|
||||||
- name: Disable Windows Symlinks
|
# steps:
|
||||||
run: |
|
# - name: Disable Windows Symlinks
|
||||||
git config --global core.symlinks false
|
# run: |
|
||||||
shell:
|
# git config --global core.symlinks false
|
||||||
powershell
|
# shell:
|
||||||
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
|
# powershell
|
||||||
with:
|
# - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c
|
||||||
fetch-depth: 0
|
# with:
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
|
# fetch-depth: 0
|
||||||
with:
|
# - uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
|
||||||
python-version: 3.9
|
# with:
|
||||||
- name: Install Python packages
|
# python-version: 3.9
|
||||||
run: |
|
# - name: Install Python packages
|
||||||
python -m pip install --upgrade pip six pywin32 setuptools
|
# run: |
|
||||||
- name: Add Light and Candle to Path
|
# python -m pip install --upgrade pip six pywin32 setuptools
|
||||||
run: |
|
# - name: Add Light and Candle to Path
|
||||||
$env:WIX >> $GITHUB_PATH
|
# run: |
|
||||||
- name: Run Installer
|
# $env:WIX >> $GITHUB_PATH
|
||||||
run: |
|
# - name: Run Installer
|
||||||
.\spack\share\spack\qa\setup_spack.ps1
|
# run: |
|
||||||
spack make-installer -s spack -g SILENT pkg
|
# ./share/spack/qa/setup_spack_installer.ps1
|
||||||
echo "installer_root=$((pwd).Path)" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
# spack make-installer -s . -g SILENT pkg
|
||||||
env:
|
# echo "installer_root=$((pwd).Path)" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
ProgressPreference: SilentlyContinue
|
# env:
|
||||||
- uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
|
# ProgressPreference: SilentlyContinue
|
||||||
with:
|
# - uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
|
||||||
name: Windows Spack Installer Bundle
|
# with:
|
||||||
path: ${{ env.installer_root }}\pkg\Spack.exe
|
# name: Windows Spack Installer Bundle
|
||||||
- uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
|
# path: ${{ env.installer_root }}\pkg\Spack.exe
|
||||||
with:
|
# - uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
|
||||||
name: Windows Spack Installer
|
# with:
|
||||||
path: ${{ env.installer_root}}\pkg\Spack.msi
|
# name: Windows Spack Installer
|
||||||
execute-installer:
|
# path: ${{ env.installer_root}}\pkg\Spack.msi
|
||||||
needs: make-installer
|
# execute-installer:
|
||||||
runs-on: windows-latest
|
# needs: make-installer
|
||||||
defaults:
|
# runs-on: windows-latest
|
||||||
run:
|
# defaults:
|
||||||
shell: pwsh
|
# run:
|
||||||
steps:
|
# shell: pwsh
|
||||||
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
|
# steps:
|
||||||
with:
|
# - uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
|
||||||
python-version: 3.9
|
# with:
|
||||||
- name: Install Python packages
|
# python-version: 3.9
|
||||||
run: |
|
# - name: Install Python packages
|
||||||
python -m pip install --upgrade pip six pywin32 setuptools
|
# run: |
|
||||||
- name: Setup installer directory
|
# python -m pip install --upgrade pip six pywin32 setuptools
|
||||||
run: |
|
# - name: Setup installer directory
|
||||||
mkdir -p spack_installer
|
# run: |
|
||||||
echo "spack_installer=$((pwd).Path)\spack_installer" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
# mkdir -p spack_installer
|
||||||
- uses: actions/download-artifact@v3
|
# echo "spack_installer=$((pwd).Path)\spack_installer" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
|
||||||
with:
|
# - uses: actions/download-artifact@v3
|
||||||
name: Windows Spack Installer Bundle
|
# with:
|
||||||
path: ${{ env.spack_installer }}
|
# name: Windows Spack Installer Bundle
|
||||||
- name: Execute Bundled Installer
|
# path: ${{ env.spack_installer }}
|
||||||
run: |
|
# - name: Execute Bundled Installer
|
||||||
$proc = Start-Process ${{ env.spack_installer }}\spack.exe "/install /quiet" -Passthru
|
# run: |
|
||||||
$handle = $proc.Handle # cache proc.Handle
|
# $proc = Start-Process ${{ env.spack_installer }}\spack.exe "/install /quiet" -Passthru
|
||||||
$proc.WaitForExit();
|
# $handle = $proc.Handle # cache proc.Handle
|
||||||
$LASTEXITCODE
|
# $proc.WaitForExit();
|
||||||
env:
|
# $LASTEXITCODE
|
||||||
ProgressPreference: SilentlyContinue
|
# env:
|
||||||
- uses: actions/download-artifact@v3
|
# ProgressPreference: SilentlyContinue
|
||||||
with:
|
# - uses: actions/download-artifact@v3
|
||||||
name: Windows Spack Installer
|
# with:
|
||||||
path: ${{ env.spack_installer }}
|
# name: Windows Spack Installer
|
||||||
- name: Execute MSI
|
# path: ${{ env.spack_installer }}
|
||||||
run: |
|
# - name: Execute MSI
|
||||||
$proc = Start-Process ${{ env.spack_installer }}\spack.msi "/quiet" -Passthru
|
# run: |
|
||||||
$handle = $proc.Handle # cache proc.Handle
|
# $proc = Start-Process ${{ env.spack_installer }}\spack.msi "/quiet" -Passthru
|
||||||
$proc.WaitForExit();
|
# $handle = $proc.Handle # cache proc.Handle
|
||||||
$LASTEXITCODE
|
# $proc.WaitForExit();
|
||||||
|
# $LASTEXITCODE
|
||||||
|
25
CHANGELOG.md
25
CHANGELOG.md
@ -1,3 +1,28 @@
|
|||||||
|
# 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 (2022-11-11)
|
||||||
|
|
||||||
`v0.19.0` is a major feature release.
|
`v0.19.0` is a major feature release.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2013-2022 LLNS, LLC and other Spack Project Developers.
|
Copyright (c) 2013-2023 LLNS, LLC and other Spack Project Developers.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -10,6 +10,7 @@ def getpywin():
|
|||||||
try:
|
try:
|
||||||
import win32con # noqa: F401
|
import win32con # noqa: F401
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
print("pyWin32 not installed but is required...\nInstalling via pip:")
|
||||||
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "--upgrade", "pip"])
|
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "--upgrade", "pip"])
|
||||||
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "pywin32"])
|
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "pywin32"])
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# sbang project developers. See the top-level COPYRIGHT file for details.
|
# sbang project developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# -*- python -*-
|
# -*- python -*-
|
||||||
#
|
#
|
||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -72,6 +72,7 @@ config:
|
|||||||
root: $TMP_DIR/install
|
root: $TMP_DIR/install
|
||||||
misc_cache: $$user_cache_path/cache
|
misc_cache: $$user_cache_path/cache
|
||||||
source_cache: $$user_cache_path/source
|
source_cache: $$user_cache_path/source
|
||||||
|
environments_root: $TMP_DIR/envs
|
||||||
EOF
|
EOF
|
||||||
cat >"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" <<EOF
|
cat >"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" <<EOF
|
||||||
bootstrap:
|
bootstrap:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
:: Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
:: Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
:: Spack Project Developers. See the top-level COPYRIGHT file for details.
|
:: Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
::
|
::
|
||||||
:: SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
:: SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -83,6 +83,16 @@ if defined _sp_flags (
|
|||||||
exit /B 0
|
exit /B 0
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
if not defined _sp_subcommand (
|
||||||
|
if not defined _sp_args (
|
||||||
|
if not defined _sp_flags (
|
||||||
|
python "%spack%" --help
|
||||||
|
exit /B 0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
:: pass parsed variables outside of local scope. Need to do
|
:: pass parsed variables outside of local scope. Need to do
|
||||||
:: this because delayedexpansion can only be set by setlocal
|
:: this because delayedexpansion can only be set by setlocal
|
||||||
echo %_sp_flags%>flags
|
echo %_sp_flags%>flags
|
||||||
@ -92,24 +102,24 @@ endlocal
|
|||||||
set /p _sp_subcommand=<subcmd
|
set /p _sp_subcommand=<subcmd
|
||||||
set /p _sp_flags=<flags
|
set /p _sp_flags=<flags
|
||||||
set /p _sp_args=<args
|
set /p _sp_args=<args
|
||||||
set str_subcommand=%_sp_subcommand:"='%
|
if "%_sp_subcommand%"=="ECHO is off." (set "_sp_subcommand=")
|
||||||
set str_flags=%_sp_flags:"='%
|
if "%_sp_subcommand%"=="ECHO is on." (set "_sp_subcommand=")
|
||||||
set str_args=%_sp_args:"='%
|
if "%_sp_flags%"=="ECHO is off." (set "_sp_flags=")
|
||||||
if "%str_subcommand%"=="ECHO is off." (set "_sp_subcommand=")
|
if "%_sp_flags%"=="ECHO is on." (set "_sp_flags=")
|
||||||
if "%str_flags%"=="ECHO is off." (set "_sp_flags=")
|
if "%_sp_args%"=="ECHO is off." (set "_sp_args=")
|
||||||
if "%str_args%"=="ECHO is off." (set "_sp_args=")
|
if "%_sp_args%"=="ECHO is on." (set "_sp_args=")
|
||||||
del subcmd
|
del subcmd
|
||||||
del flags
|
del flags
|
||||||
del args
|
del args
|
||||||
|
|
||||||
:: Filter out some commands. For any others, just run the command.
|
:: Filter out some commands. For any others, just run the command.
|
||||||
if "%_sp_subcommand%" == "cd" (
|
if %_sp_subcommand% == "cd" (
|
||||||
goto :case_cd
|
goto :case_cd
|
||||||
) else if "%_sp_subcommand%" == "env" (
|
) else if %_sp_subcommand% == "env" (
|
||||||
goto :case_env
|
goto :case_env
|
||||||
) else if "%_sp_subcommand%" == "load" (
|
) else if %_sp_subcommand% == "load" (
|
||||||
goto :case_load
|
goto :case_load
|
||||||
) else if "%_sp_subcommand%" == "unload" (
|
) else if %_sp_subcommand% == "unload" (
|
||||||
goto :case_load
|
goto :case_load
|
||||||
) else (
|
) else (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
@ -143,19 +153,21 @@ goto :end_switch
|
|||||||
:: If no args or args contain --bat or -h/--help: just execute.
|
:: If no args or args contain --bat or -h/--help: just execute.
|
||||||
if NOT defined _sp_args (
|
if NOT defined _sp_args (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
)else if NOT "%_sp_args%"=="%_sp_args:--help=%" (
|
)
|
||||||
|
set args_no_quote=%_sp_args:"=%
|
||||||
|
if NOT "%args_no_quote%"=="%args_no_quote:--help=%" (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
) else if NOT "%_sp_args%"=="%_sp_args: -h=%" (
|
) else if NOT "%args_no_quote%"=="%args_no_quote: -h=%" (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
) else if NOT "%_sp_args%"=="%_sp_args:--bat=%" (
|
) else if NOT "%args_no_quote%"=="%args_no_quote:--bat=%" (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
) else if NOT "%_sp_args%"=="%_sp_args:deactivate=%" (
|
) else if NOT "%args_no_quote%"=="%args_no_quote:deactivate=%" (
|
||||||
for /f "tokens=* USEBACKQ" %%I in (
|
for /f "tokens=* USEBACKQ" %%I in (
|
||||||
`call python "%spack%" %_sp_flags% env deactivate --bat %_sp_args:deactivate=%`
|
`call python %spack% %_sp_flags% env deactivate --bat %args_no_quote:deactivate=%`
|
||||||
) do %%I
|
) do %%I
|
||||||
) else if NOT "%_sp_args%"=="%_sp_args:activate=%" (
|
) else if NOT "%args_no_quote%"=="%args_no_quote:activate=%" (
|
||||||
for /f "tokens=* USEBACKQ" %%I in (
|
for /f "tokens=* USEBACKQ" %%I in (
|
||||||
`call python "%spack%" %_sp_flags% env activate --bat %_sp_args:activate=%`
|
`python %spack% %_sp_flags% env activate --bat %args_no_quote:activate=%`
|
||||||
) do %%I
|
) do %%I
|
||||||
) else (
|
) else (
|
||||||
goto :default_case
|
goto :default_case
|
||||||
|
@ -52,7 +52,6 @@ if defined py_path (
|
|||||||
|
|
||||||
if defined py_exe (
|
if defined py_exe (
|
||||||
"%py_exe%" "%SPACK_ROOT%\bin\haspywin.py"
|
"%py_exe%" "%SPACK_ROOT%\bin\haspywin.py"
|
||||||
"%py_exe%" "%SPACK_ROOT%\bin\spack" external find python >NUL
|
|
||||||
)
|
)
|
||||||
|
|
||||||
set "EDITOR=notepad"
|
set "EDITOR=notepad"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -54,6 +54,11 @@ config:
|
|||||||
# are that it precludes its use as a system package and its ability to be
|
# are that it precludes its use as a system package and its ability to be
|
||||||
# pip installable.
|
# pip installable.
|
||||||
#
|
#
|
||||||
|
# In Spack environment files, chaining onto existing system Spack
|
||||||
|
# installations, the $env variable can be used to download, cache and build
|
||||||
|
# into user-writable paths that are relative to the currently active
|
||||||
|
# environment.
|
||||||
|
#
|
||||||
# In any case, if the username is not already in the path, Spack will append
|
# In any case, if the username is not already in the path, Spack will append
|
||||||
# the value of `$user` in an attempt to avoid potential conflicts between
|
# the value of `$user` in an attempt to avoid potential conflicts between
|
||||||
# users in shared temporary spaces.
|
# users in shared temporary spaces.
|
||||||
@ -76,6 +81,10 @@ config:
|
|||||||
source_cache: $spack/var/spack/cache
|
source_cache: $spack/var/spack/cache
|
||||||
|
|
||||||
|
|
||||||
|
## Directory where spack managed environments are created and stored
|
||||||
|
# environments_root: $spack/var/spack/environments
|
||||||
|
|
||||||
|
|
||||||
# Cache directory for miscellaneous files, like the package index.
|
# Cache directory for miscellaneous files, like the package index.
|
||||||
# This can be purged with `spack clean --misc-cache`
|
# This can be purged with `spack clean --misc-cache`
|
||||||
misc_cache: $user_cache_path/cache
|
misc_cache: $user_cache_path/cache
|
||||||
@ -176,7 +185,7 @@ config:
|
|||||||
# when Spack needs to manage its own package metadata and all operations are
|
# when Spack needs to manage its own package metadata and all operations are
|
||||||
# expected to complete within the default time limit. The timeout should
|
# expected to complete within the default time limit. The timeout should
|
||||||
# therefore generally be left untouched.
|
# therefore generally be left untouched.
|
||||||
db_lock_timeout: 3
|
db_lock_timeout: 60
|
||||||
|
|
||||||
|
|
||||||
# How long to wait when attempting to modify a package (e.g. to install it).
|
# How long to wait when attempting to modify a package (e.g. to install it).
|
||||||
|
21
etc/spack/defaults/windows/packages.yaml
Normal file
21
etc/spack/defaults/windows/packages.yaml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# -------------------------------------------------------------------------
|
||||||
|
# This file controls default concretization preferences for Spack.
|
||||||
|
#
|
||||||
|
# Settings here are versioned with Spack and are intended to provide
|
||||||
|
# sensible defaults out of the box. Spack maintainers should edit this
|
||||||
|
# file to keep it current.
|
||||||
|
#
|
||||||
|
# Users can override these settings by editing the following files.
|
||||||
|
#
|
||||||
|
# Per-spack-instance settings (overrides defaults):
|
||||||
|
# $SPACK_ROOT/etc/spack/packages.yaml
|
||||||
|
#
|
||||||
|
# Per-user settings (overrides default and site settings):
|
||||||
|
# ~/.spack/packages.yaml
|
||||||
|
# -------------------------------------------------------------------------
|
||||||
|
packages:
|
||||||
|
all:
|
||||||
|
compiler:
|
||||||
|
- msvc
|
||||||
|
providers:
|
||||||
|
mpi: [msmpi]
|
1
lib/spack/docs/.gitignore
vendored
1
lib/spack/docs/.gitignore
vendored
@ -5,3 +5,4 @@ llnl*.rst
|
|||||||
_build
|
_build
|
||||||
.spack-env
|
.spack-env
|
||||||
spack.lock
|
spack.lock
|
||||||
|
_spack_root
|
||||||
|
@ -1,162 +0,0 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
||||||
|
|
||||||
.. _analyze:
|
|
||||||
|
|
||||||
=======
|
|
||||||
Analyze
|
|
||||||
=======
|
|
||||||
|
|
||||||
|
|
||||||
The analyze command is a front-end to various tools that let us analyze
|
|
||||||
package installations. Each analyzer is a module for a different kind
|
|
||||||
of analysis that can be done on a package installation, including (but not
|
|
||||||
limited to) binary, log, or text analysis. Thus, the analyze command group
|
|
||||||
allows you to take an existing package install, choose an analyzer,
|
|
||||||
and extract some output for the package using it.
|
|
||||||
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
Analyzer Metadata
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
For all analyzers, we write to an ``analyzers`` folder in ``~/.spack``, or the
|
|
||||||
value that you specify in your spack config at ``config:analyzers_dir``.
|
|
||||||
For example, here we see the results of running an analysis on zlib:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ tree ~/.spack/analyzers/
|
|
||||||
└── linux-ubuntu20.04-skylake
|
|
||||||
└── gcc-9.3.0
|
|
||||||
└── zlib-1.2.11-sl7m27mzkbejtkrajigj3a3m37ygv4u2
|
|
||||||
├── environment_variables
|
|
||||||
│ └── spack-analyzer-environment-variables.json
|
|
||||||
├── install_files
|
|
||||||
│ └── spack-analyzer-install-files.json
|
|
||||||
└── libabigail
|
|
||||||
└── spack-analyzer-libabigail-libz.so.1.2.11.xml
|
|
||||||
|
|
||||||
|
|
||||||
This means that you can always find analyzer output in this folder, and it
|
|
||||||
is organized with the same logic as the package install it was run for.
|
|
||||||
If you want to customize this top level folder, simply provide the ``--path``
|
|
||||||
argument to ``spack analyze run``. The nested organization will be maintained
|
|
||||||
within your custom root.
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
Listing Analyzers
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
If you aren't familiar with Spack's analyzers, you can quickly list those that
|
|
||||||
are available:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze list-analyzers
|
|
||||||
install_files : install file listing read from install_manifest.json
|
|
||||||
environment_variables : environment variables parsed from spack-build-env.txt
|
|
||||||
config_args : config args loaded from spack-configure-args.txt
|
|
||||||
libabigail : Application Binary Interface (ABI) features for objects
|
|
||||||
|
|
||||||
|
|
||||||
In the above, the first three are fairly simple - parsing metadata files from
|
|
||||||
a package install directory to save
|
|
||||||
|
|
||||||
-------------------
|
|
||||||
Analyzing a Package
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
The analyze command, akin to install, will accept a package spec to perform
|
|
||||||
an analysis for. The package must be installed. Let's walk through an example
|
|
||||||
with zlib. We first ask to analyze it. However, since we have more than one
|
|
||||||
install, we are asked to disambiguate:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run zlib
|
|
||||||
==> Error: zlib matches multiple packages.
|
|
||||||
Matching packages:
|
|
||||||
fz2bs56 zlib@1.2.11%gcc@7.5.0 arch=linux-ubuntu18.04-skylake
|
|
||||||
sl7m27m zlib@1.2.11%gcc@9.3.0 arch=linux-ubuntu20.04-skylake
|
|
||||||
Use a more specific spec.
|
|
||||||
|
|
||||||
|
|
||||||
We can then specify the spec version that we want to analyze:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run zlib/fz2bs56
|
|
||||||
|
|
||||||
If you don't provide any specific analyzer names, by default all analyzers
|
|
||||||
(shown in the ``list-analyzers`` subcommand list) will be run. If an analyzer does not
|
|
||||||
have any result, it will be skipped. For example, here is a result running for
|
|
||||||
zlib:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ ls ~/.spack/analyzers/linux-ubuntu20.04-skylake/gcc-9.3.0/zlib-1.2.11-sl7m27mzkbejtkrajigj3a3m37ygv4u2/
|
|
||||||
spack-analyzer-environment-variables.json
|
|
||||||
spack-analyzer-install-files.json
|
|
||||||
spack-analyzer-libabigail-libz.so.1.2.11.xml
|
|
||||||
|
|
||||||
If you want to run a specific analyzer, ask for it with `--analyzer`. Here we run
|
|
||||||
spack analyze on libabigail (already installed) _using_ libabigail1
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run --analyzer abigail libabigail
|
|
||||||
|
|
||||||
|
|
||||||
.. _analyze_monitoring:
|
|
||||||
|
|
||||||
----------------------
|
|
||||||
Monitoring An Analysis
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
For any kind of analysis, you can
|
|
||||||
use a `spack monitor <https://github.com/spack/spack-monitor>`_ "Spackmon"
|
|
||||||
as a server to upload the same run metadata to. You can
|
|
||||||
follow the instructions in the `spack monitor documentation <https://spack-monitor.readthedocs.org>`_
|
|
||||||
to first create a server along with a username and token for yourself.
|
|
||||||
You can then use this guide to interact with the server.
|
|
||||||
|
|
||||||
You should first export our spack monitor token and username to the environment:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ export SPACKMON_TOKEN=50445263afd8f67e59bd79bff597836ee6c05438
|
|
||||||
$ export SPACKMON_USER=spacky
|
|
||||||
|
|
||||||
|
|
||||||
By default, the host for your server is expected to be at ``http://127.0.0.1``
|
|
||||||
with a prefix of ``ms1``, and if this is the case, you can simply add the
|
|
||||||
``--monitor`` flag to the install command:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run --monitor wget
|
|
||||||
|
|
||||||
If you need to customize the host or the prefix, you can do that as well:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run --monitor --monitor-prefix monitor --monitor-host https://monitor-service.io wget
|
|
||||||
|
|
||||||
If your server doesn't have authentication, you can skip it:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze run --monitor --monitor-disable-auth wget
|
|
||||||
|
|
||||||
Regardless of your choice, when you run analyze on an installed package (whether
|
|
||||||
it was installed with ``--monitor`` or not, you'll see the results generating as they did
|
|
||||||
before, and a message that the monitor server was pinged:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack analyze --monitor wget
|
|
||||||
...
|
|
||||||
==> Sending result for wget bin/wget to monitor.
|
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -13,49 +13,51 @@ Some sites may encourage users to set up their own test environments
|
|||||||
before carrying out central installations, or some users may prefer to set
|
before carrying out central installations, or some users may prefer to set
|
||||||
up these environments on their own motivation. To reduce the load of
|
up these environments on their own motivation. To reduce the load of
|
||||||
recompiling otherwise identical package specs in different installations,
|
recompiling otherwise identical package specs in different installations,
|
||||||
installed packages can be put into build cache tarballs, uploaded to
|
installed packages can be put into build cache tarballs, pushed to
|
||||||
your Spack mirror and then downloaded and installed by others.
|
your Spack mirror and then downloaded and installed by others.
|
||||||
|
|
||||||
|
Whenever a mirror provides prebuilt packages, Spack will take these packages
|
||||||
|
into account during concretization and installation, making ``spack install``
|
||||||
|
signficantly faster.
|
||||||
|
|
||||||
--------------------------
|
|
||||||
Creating build cache files
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
A compressed tarball of an installed package is created. Tarballs are created
|
.. note::
|
||||||
for all of its link and run dependency packages as well. Compressed tarballs are
|
|
||||||
signed with gpg and signature and tarball and put in a ``.spack`` file. Optionally,
|
We use the terms "build cache" and "mirror" often interchangeably. Mirrors
|
||||||
the rpaths (and ids and deps on macOS) can be changed to paths relative to
|
are used during installation both for sources and prebuilt packages. Build
|
||||||
the Spack install tree before the tarball is created.
|
caches refer to mirrors that provide prebuilt packages.
|
||||||
|
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
Creating a build cache
|
||||||
|
----------------------
|
||||||
|
|
||||||
Build caches are created via:
|
Build caches are created via:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack buildcache create <spec>
|
$ spack buildcache create <path/url/mirror name> <spec>
|
||||||
|
|
||||||
|
This command takes the locally installed spec and its dependencies, and
|
||||||
|
creates tarballs of their install prefixes. It also generates metadata files,
|
||||||
|
signed with GPG. These tarballs and metadata files are then pushed to the
|
||||||
|
provided binary cache, which can be a local directory or a remote URL.
|
||||||
|
|
||||||
If you wanted to create a build cache in a local directory, you would provide
|
Here is an example where a build cache is created in a local directory named
|
||||||
the ``-d`` argument to target that directory, again also specifying the spec.
|
"spack-cache", to which we push the "ninja" spec:
|
||||||
Here is an example creating a local directory, "spack-cache" and creating
|
|
||||||
build cache files for the "ninja" spec:
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ mkdir -p ./spack-cache
|
$ spack buildcache create --allow-root ./spack-cache ninja
|
||||||
$ spack buildcache create -d ./spack-cache ninja
|
==> Pushing binary packages to file:///home/spackuser/spack/spack-cache/build_cache
|
||||||
==> Buildcache files will be output to file:///home/spackuser/spack/spack-cache/build_cache
|
|
||||||
gpgconf: socketdir is '/run/user/1000/gnupg'
|
|
||||||
gpg: using "E6DF6A8BD43208E4D6F392F23777740B7DBD643D" as default secret key for signing
|
|
||||||
|
|
||||||
Note that the targeted spec must already be installed. Once you have a build cache,
|
Not that ``ninja`` must be installed locally for this to work.
|
||||||
you can add it as a mirror, discussed next.
|
|
||||||
|
|
||||||
.. warning::
|
We're using the ``--allow-root`` flag to tell Spack that is OK when any of
|
||||||
|
the binaries we're pushing contain references to the local Spack install
|
||||||
|
directory.
|
||||||
|
|
||||||
Spack improved the format used for binary caches in v0.18. The entire v0.18 series
|
Once you have a build cache, you can add it as a mirror, discussed next.
|
||||||
will be able to verify and install binary caches both in the new and in the old format.
|
|
||||||
Support for using the old format is expected to end in v0.19, so we advise users to
|
|
||||||
recreate relevant buildcaches using Spack v0.18 or higher.
|
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
Finding or installing build cache files
|
Finding or installing build cache files
|
||||||
@ -66,10 +68,10 @@ with:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack mirror add <name> <url>
|
$ spack mirror add <name> <url or path>
|
||||||
|
|
||||||
|
|
||||||
Note that the url can be a web url _or_ a local filesystem location. In the previous
|
Both web URLs and local paths on the filesystem can be specified. In the previous
|
||||||
example, you might add the directory "spack-cache" and call it ``mymirror``:
|
example, you might add the directory "spack-cache" and call it ``mymirror``:
|
||||||
|
|
||||||
|
|
||||||
@ -94,7 +96,7 @@ this new build cache as follows:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack buildcache update-index -d spack-cache/
|
$ spack buildcache update-index ./spack-cache
|
||||||
|
|
||||||
Now you can use list:
|
Now you can use list:
|
||||||
|
|
||||||
@ -105,46 +107,38 @@ Now you can use list:
|
|||||||
-- linux-ubuntu20.04-skylake / gcc@9.3.0 ------------------------
|
-- linux-ubuntu20.04-skylake / gcc@9.3.0 ------------------------
|
||||||
ninja@1.10.2
|
ninja@1.10.2
|
||||||
|
|
||||||
|
With ``mymirror`` configured and an index available, Spack will automatically
|
||||||
Great! So now let's say you have a different spack installation, or perhaps just
|
use it during concretization and installation. That means that you can expect
|
||||||
a different environment for the same one, and you want to install a package from
|
``spack install ninja`` to fetch prebuilt packages from the mirror. Let's
|
||||||
that build cache. Let's first uninstall the actual library "ninja" to see if we can
|
verify by re-installing ninja:
|
||||||
re-install it from the cache.
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack uninstall ninja
|
$ spack uninstall ninja
|
||||||
|
$ spack install ninja
|
||||||
|
==> Installing ninja-1.11.1-yxferyhmrjkosgta5ei6b4lqf6bxbscz
|
||||||
And now reinstall from the buildcache
|
==> Fetching file:///home/spackuser/spack/spack-cache/build_cache/linux-ubuntu20.04-skylake-gcc-9.3.0-ninja-1.10.2-yxferyhmrjkosgta5ei6b4lqf6bxbscz.spec.json.sig
|
||||||
|
gpg: Signature made Do 12 Jan 2023 16:01:04 CET
|
||||||
.. code-block:: console
|
gpg: using RSA key 61B82B2B2350E171BD17A1744E3A689061D57BF6
|
||||||
|
gpg: Good signature from "example (GPG created for Spack) <example@example.com>" [ultimate]
|
||||||
$ spack buildcache install ninja
|
==> Fetching file:///home/spackuser/spack/spack-cache/build_cache/linux-ubuntu20.04-skylake/gcc-9.3.0/ninja-1.10.2/linux-ubuntu20.04-skylake-gcc-9.3.0-ninja-1.10.2-yxferyhmrjkosgta5ei6b4lqf6bxbscz.spack
|
||||||
==> buildcache spec(s) matching ninja
|
==> Extracting ninja-1.10.2-yxferyhmrjkosgta5ei6b4lqf6bxbscz from binary cache
|
||||||
==> Fetching file:///home/spackuser/spack/spack-cache/build_cache/linux-ubuntu20.04-skylake/gcc-9.3.0/ninja-1.10.2/linux-ubuntu20.04-skylake-gcc-9.3.0-ninja-1.10.2-i4e5luour7jxdpc3bkiykd4imke3mkym.spack
|
==> ninja: Successfully installed ninja-1.11.1-yxferyhmrjkosgta5ei6b4lqf6bxbscz
|
||||||
####################################################################################################################################### 100.0%
|
Search: 0.00s. Fetch: 0.17s. Install: 0.12s. Total: 0.29s
|
||||||
==> Installing buildcache for spec ninja@1.10.2%gcc@9.3.0 arch=linux-ubuntu20.04-skylake
|
[+] /home/harmen/spack/opt/spack/linux-ubuntu20.04-skylake/gcc-9.3.0/ninja-1.11.1-yxferyhmrjkosgta5ei6b4lqf6bxbscz
|
||||||
gpgconf: socketdir is '/run/user/1000/gnupg'
|
|
||||||
gpg: Signature made Tue 23 Mar 2021 10:16:29 PM MDT
|
|
||||||
gpg: using RSA key E6DF6A8BD43208E4D6F392F23777740B7DBD643D
|
|
||||||
gpg: Good signature from "spackuser (GPG created for Spack) <spackuser@noreply.users.github.com>" [ultimate]
|
|
||||||
|
|
||||||
|
|
||||||
It worked! You've just completed a full example of creating a build cache with
|
It worked! You've just completed a full example of creating a build cache with
|
||||||
a spec of interest, adding it as a mirror, updating it's index, listing the contents,
|
a spec of interest, adding it as a mirror, updating its index, listing the contents,
|
||||||
and finally, installing from it.
|
and finally, installing from it.
|
||||||
|
|
||||||
|
By default Spack falls back to building from sources when the mirror is not available
|
||||||
Note that the above command is intended to install a particular package to a
|
or when the package is simply not already available. To force Spack to only install
|
||||||
build cache you have created, and not to install a package from a build cache.
|
prebuilt packages, you can use
|
||||||
For the latter, once a mirror is added, by default when you do ``spack install`` the ``--use-cache``
|
|
||||||
flag is set, and you will install a package from a build cache if it is available.
|
|
||||||
If you want to always use the cache, you can do:
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack install --cache-only <package>
|
$ spack install --use-buildcache only <package>
|
||||||
|
|
||||||
For example, to combine all of the commands above to add the E4S build cache
|
For example, to combine all of the commands above to add the E4S build cache
|
||||||
and then install from it exclusively, you would do:
|
and then install from it exclusively, you would do:
|
||||||
@ -153,7 +147,7 @@ and then install from it exclusively, you would do:
|
|||||||
|
|
||||||
$ spack mirror add E4S https://cache.e4s.io
|
$ spack mirror add E4S https://cache.e4s.io
|
||||||
$ spack buildcache keys --install --trust
|
$ spack buildcache keys --install --trust
|
||||||
$ spack install --cache-only <package>
|
$ spack install --use-buildache only <package>
|
||||||
|
|
||||||
We use ``--install`` and ``--trust`` to say that we are installing keys to our
|
We use ``--install`` and ``--trust`` to say that we are installing keys to our
|
||||||
keyring, and trusting all downloaded keys.
|
keyring, and trusting all downloaded keys.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -272,7 +272,7 @@ Selection of the target microarchitectures
|
|||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The options under the ``targets`` attribute control which targets are considered during a solve.
|
The options under the ``targets`` attribute control which targets are considered during a solve.
|
||||||
Currently the options in this section are only configurable from the ``concretization.yaml`` file
|
Currently the options in this section are only configurable from the ``concretizer.yaml`` file
|
||||||
and there are no corresponding command line arguments to enable them for a single solve.
|
and there are no corresponding command line arguments to enable them for a single solve.
|
||||||
|
|
||||||
The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
|
The ``granularity`` option can take two possible values: ``microarchitectures`` and ``generic``.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -366,7 +366,7 @@ If the ``pyproject.toml`` lists ``mesonpy`` as the ``build-backend``,
|
|||||||
it uses the meson build system. Meson uses the default
|
it uses the meson build system. Meson uses the default
|
||||||
``pyproject.toml`` keys to list dependencies.
|
``pyproject.toml`` keys to list dependencies.
|
||||||
|
|
||||||
See https://meson-python.readthedocs.io/en/latest/usage/start.html
|
See https://meson-python.readthedocs.io/en/latest/tutorials/introduction.html
|
||||||
for more information.
|
for more information.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -58,9 +58,7 @@ Testing
|
|||||||
``WafPackage`` also provides ``test`` and ``installtest`` methods,
|
``WafPackage`` also provides ``test`` and ``installtest`` methods,
|
||||||
which are run after the ``build`` and ``install`` phases, respectively.
|
which are run after the ``build`` and ``install`` phases, respectively.
|
||||||
By default, these phases do nothing, but you can override them to
|
By default, these phases do nothing, but you can override them to
|
||||||
run package-specific unit tests. For example, the
|
run package-specific unit tests.
|
||||||
`py-py2cairo <https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/py-py2cairo/package.py>`_
|
|
||||||
package uses:
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -36,7 +36,7 @@
|
|||||||
if not os.path.exists(link_name):
|
if not os.path.exists(link_name):
|
||||||
os.symlink(os.path.abspath("../../.."), link_name, target_is_directory=True)
|
os.symlink(os.path.abspath("../../.."), link_name, target_is_directory=True)
|
||||||
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external"))
|
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external"))
|
||||||
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external/pytest-fallback"))
|
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external/_vendoring"))
|
||||||
sys.path.append(os.path.abspath("_spack_root/lib/spack/"))
|
sys.path.append(os.path.abspath("_spack_root/lib/spack/"))
|
||||||
|
|
||||||
# Add the Spack bin directory to the path so that we can use its output in docs.
|
# Add the Spack bin directory to the path so that we can use its output in docs.
|
||||||
@ -74,13 +74,22 @@
|
|||||||
"--force", # Overwrite existing files
|
"--force", # Overwrite existing files
|
||||||
"--no-toc", # Don't create a table of contents file
|
"--no-toc", # Don't create a table of contents file
|
||||||
"--output-dir=.", # Directory to place all output
|
"--output-dir=.", # Directory to place all output
|
||||||
|
"--module-first", # emit module docs before submodule docs
|
||||||
]
|
]
|
||||||
sphinx_apidoc(apidoc_args + ["_spack_root/lib/spack/spack"])
|
sphinx_apidoc(
|
||||||
|
apidoc_args
|
||||||
|
+ [
|
||||||
|
"_spack_root/lib/spack/spack",
|
||||||
|
"_spack_root/lib/spack/spack/test/*.py",
|
||||||
|
"_spack_root/lib/spack/spack/test/cmd/*.py",
|
||||||
|
]
|
||||||
|
)
|
||||||
sphinx_apidoc(apidoc_args + ["_spack_root/lib/spack/llnl"])
|
sphinx_apidoc(apidoc_args + ["_spack_root/lib/spack/llnl"])
|
||||||
|
|
||||||
# Enable todo items
|
# Enable todo items
|
||||||
todo_include_todos = True
|
todo_include_todos = True
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Disable duplicate cross-reference warnings.
|
# Disable duplicate cross-reference warnings.
|
||||||
#
|
#
|
||||||
@ -155,7 +164,7 @@ def setup(sphinx):
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = "Spack"
|
project = "Spack"
|
||||||
copyright = "2013-2021, Lawrence Livermore National Laboratory."
|
copyright = "2013-2023, Lawrence Livermore National Laboratory."
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
@ -200,12 +209,14 @@ def setup(sphinx):
|
|||||||
("py:class", "_frozen_importlib_external.SourceFileLoader"),
|
("py:class", "_frozen_importlib_external.SourceFileLoader"),
|
||||||
("py:class", "clingo.Control"),
|
("py:class", "clingo.Control"),
|
||||||
("py:class", "six.moves.urllib.parse.ParseResult"),
|
("py:class", "six.moves.urllib.parse.ParseResult"),
|
||||||
|
("py:class", "TextIO"),
|
||||||
# Spack classes that are private and we don't want to expose
|
# Spack classes that are private and we don't want to expose
|
||||||
("py:class", "spack.provider_index._IndexBase"),
|
("py:class", "spack.provider_index._IndexBase"),
|
||||||
("py:class", "spack.repo._PrependFileLoader"),
|
("py:class", "spack.repo._PrependFileLoader"),
|
||||||
("py:class", "spack.build_systems._checks.BaseBuilder"),
|
("py:class", "spack.build_systems._checks.BaseBuilder"),
|
||||||
# Spack classes that intersphinx is unable to resolve
|
# Spack classes that intersphinx is unable to resolve
|
||||||
("py:class", "spack.version.VersionBase"),
|
("py:class", "spack.version.VersionBase"),
|
||||||
|
("py:class", "spack.spec.DependencySpec"),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||||
@ -343,9 +354,7 @@ class SpackStyle(DefaultStyle):
|
|||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||||
latex_documents = [
|
latex_documents = [("index", "Spack.tex", "Spack Documentation", "Todd Gamblin", "manual")]
|
||||||
("index", "Spack.tex", "Spack Documentation", "Todd Gamblin", "manual"),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
# the title page.
|
# the title page.
|
||||||
@ -392,7 +401,7 @@ class SpackStyle(DefaultStyle):
|
|||||||
"Spack",
|
"Spack",
|
||||||
"One line description of project.",
|
"One line description of project.",
|
||||||
"Miscellaneous",
|
"Miscellaneous",
|
||||||
),
|
)
|
||||||
]
|
]
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
# Documents to append as an appendix to all manuals.
|
||||||
@ -408,6 +417,4 @@ class SpackStyle(DefaultStyle):
|
|||||||
# -- Extension configuration -------------------------------------------------
|
# -- Extension configuration -------------------------------------------------
|
||||||
|
|
||||||
# sphinx.ext.intersphinx
|
# sphinx.ext.intersphinx
|
||||||
intersphinx_mapping = {
|
intersphinx_mapping = {"python": ("https://docs.python.org/3", None)}
|
||||||
"python": ("https://docs.python.org/3", None),
|
|
||||||
}
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -222,7 +222,7 @@ and location. (See the *Configuration settings* section of ``man
|
|||||||
ccache`` to learn more about the default settings and how to change
|
ccache`` to learn more about the default settings and how to change
|
||||||
them). Please note that we currently disable ccache's ``hash_dir``
|
them). Please note that we currently disable ccache's ``hash_dir``
|
||||||
feature to avoid an issue with the stage directory (see
|
feature to avoid an issue with the stage directory (see
|
||||||
https://github.com/LLNL/spack/pull/3761#issuecomment-294352232).
|
https://github.com/spack/spack/pull/3761#issuecomment-294352232).
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
``shared_linking:type``
|
``shared_linking:type``
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -118,7 +118,7 @@ make another change, test that change, etc. We use `pytest
|
|||||||
<http://pytest.org/>`_ as our tests framework, and these types of
|
<http://pytest.org/>`_ as our tests framework, and these types of
|
||||||
arguments are just passed to the ``pytest`` command underneath. See `the
|
arguments are just passed to the ``pytest`` command underneath. See `the
|
||||||
pytest docs
|
pytest docs
|
||||||
<http://doc.pytest.org/en/latest/usage.html#specifying-tests-selecting-tests>`_
|
<https://doc.pytest.org/en/latest/how-to/usage.html#specifying-which-tests-to-run>`_
|
||||||
for more details on test selection syntax.
|
for more details on test selection syntax.
|
||||||
|
|
||||||
``spack unit-test`` has a few special options that can help you
|
``spack unit-test`` has a few special options that can help you
|
||||||
@ -147,7 +147,7 @@ you want to know about. For example, to see just the tests in
|
|||||||
|
|
||||||
You can also combine any of these options with a ``pytest`` keyword
|
You can also combine any of these options with a ``pytest`` keyword
|
||||||
search. See the `pytest usage docs
|
search. See the `pytest usage docs
|
||||||
<https://docs.pytest.org/en/stable/usage.html#specifying-tests-selecting-tests>`_:
|
<https://doc.pytest.org/en/latest/how-to/usage.html#specifying-which-tests-to-run>`_
|
||||||
for more details on test selection syntax. For example, to see the names of all tests that have "spec"
|
for more details on test selection syntax. For example, to see the names of all tests that have "spec"
|
||||||
or "concretize" somewhere in their names:
|
or "concretize" somewhere in their names:
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -175,14 +175,11 @@ Spec-related modules
|
|||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
:mod:`spack.spec`
|
:mod:`spack.spec`
|
||||||
Contains :class:`~spack.spec.Spec` and :class:`~spack.spec.SpecParser`.
|
Contains :class:`~spack.spec.Spec`. Also implements most of the logic for concretization
|
||||||
Also implements most of the logic for normalization and concretization
|
|
||||||
of specs.
|
of specs.
|
||||||
|
|
||||||
:mod:`spack.parse`
|
:mod:`spack.parser`
|
||||||
Contains some base classes for implementing simple recursive descent
|
Contains :class:`~spack.parser.SpecParser` and functions related to parsing specs.
|
||||||
parsers: :class:`~spack.parse.Parser` and :class:`~spack.parse.Lexer`.
|
|
||||||
Used by :class:`~spack.spec.SpecParser`.
|
|
||||||
|
|
||||||
:mod:`spack.concretize`
|
:mod:`spack.concretize`
|
||||||
Contains :class:`~spack.concretize.Concretizer` implementation,
|
Contains :class:`~spack.concretize.Concretizer` implementation,
|
||||||
@ -235,7 +232,7 @@ Spack Subcommands
|
|||||||
Unit tests
|
Unit tests
|
||||||
^^^^^^^^^^
|
^^^^^^^^^^
|
||||||
|
|
||||||
:mod:`spack.test`
|
``spack.test``
|
||||||
Implements Spack's test suite. Add a module and put its name in
|
Implements Spack's test suite. Add a module and put its name in
|
||||||
the test suite in ``__init__.py`` to add more unit tests.
|
the test suite in ``__init__.py`` to add more unit tests.
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -58,9 +58,9 @@ Using Environments
|
|||||||
Here we follow a typical use case of creating, concretizing,
|
Here we follow a typical use case of creating, concretizing,
|
||||||
installing and loading an environment.
|
installing and loading an environment.
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Creating a named Environment
|
Creating a managed Environment
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
An environment is created by:
|
An environment is created by:
|
||||||
|
|
||||||
@ -72,7 +72,8 @@ Spack then creates the directory ``var/spack/environments/myenv``.
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
All named environments are stored in the ``var/spack/environments`` folder.
|
All managed environments by default are stored in the ``var/spack/environments`` folder.
|
||||||
|
This location can be changed by setting the ``environments_root`` variable in ``config.yaml``.
|
||||||
|
|
||||||
In the ``var/spack/environments/myenv`` directory, Spack creates the
|
In the ``var/spack/environments/myenv`` directory, Spack creates the
|
||||||
file ``spack.yaml`` and the hidden directory ``.spack-env``.
|
file ``spack.yaml`` and the hidden directory ``.spack-env``.
|
||||||
@ -1039,7 +1040,7 @@ gets installed and is available for use in the ``env`` target.
|
|||||||
$(SPACK) -e . concretize -f
|
$(SPACK) -e . concretize -f
|
||||||
|
|
||||||
env.mk: spack.lock
|
env.mk: spack.lock
|
||||||
$(SPACK) -e . env depfile -o $@ --make-target-prefix spack
|
$(SPACK) -e . env depfile -o $@ --make-prefix spack
|
||||||
|
|
||||||
env: spack/env
|
env: spack/env
|
||||||
$(info Environment installed!)
|
$(info Environment installed!)
|
||||||
@ -1062,9 +1063,9 @@ the include is conditional.
|
|||||||
.. note::
|
.. note::
|
||||||
|
|
||||||
When including generated ``Makefile``\s, it is important to use
|
When including generated ``Makefile``\s, it is important to use
|
||||||
the ``--make-target-prefix`` flag and use the non-phony target
|
the ``--make-prefix`` flag and use the non-phony target
|
||||||
``<target-prefix>/env`` as prerequisite, instead of the phony target
|
``<prefix>/env`` as prerequisite, instead of the phony target
|
||||||
``<target-prefix>/all``.
|
``<prefix>/all``.
|
||||||
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Building a subset of the environment
|
Building a subset of the environment
|
||||||
@ -1090,3 +1091,51 @@ output (``spack install --verbose``) while its dependencies are installed silent
|
|||||||
|
|
||||||
# Install the root spec with verbose output.
|
# Install the root spec with verbose output.
|
||||||
$ make -j16 install/python-3.11.0-<hash> SPACK_INSTALL_FLAGS=--verbose
|
$ make -j16 install/python-3.11.0-<hash> SPACK_INSTALL_FLAGS=--verbose
|
||||||
|
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Adding post-install hooks
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Another advanced use-case of generated ``Makefile``\s is running a post-install
|
||||||
|
command for each package. These "hooks" could be anything from printing a
|
||||||
|
post-install message, running tests, or pushing just-built binaries to a buildcache.
|
||||||
|
|
||||||
|
This can be accomplished through the generated ``[<prefix>/]SPACK_PACKAGE_IDS``
|
||||||
|
variable. Assuming we have an active and concrete environment, we generate the
|
||||||
|
associated ``Makefile`` with a prefix ``example``:
|
||||||
|
|
||||||
|
.. code:: console
|
||||||
|
|
||||||
|
$ spack env depfile -o env.mk --make-prefix example
|
||||||
|
|
||||||
|
And we now include it in a different ``Makefile``, in which we create a target
|
||||||
|
``example/push/%`` with ``%`` referring to a package identifier. This target
|
||||||
|
depends on the particular package installation. In this target we automatically
|
||||||
|
have the target-specific ``HASH`` and ``SPEC`` variables at our disposal. They
|
||||||
|
are respectively the spec hash (excluding leading ``/``), and a human-readable spec.
|
||||||
|
Finally, we have an entrypoint target ``push`` that will update the buildcache
|
||||||
|
index once every package is pushed. Note how this target uses the generated
|
||||||
|
``example/SPACK_PACKAGE_IDS`` variable to define its prerequisites.
|
||||||
|
|
||||||
|
.. code:: Makefile
|
||||||
|
|
||||||
|
SPACK ?= spack
|
||||||
|
BUILDCACHE_DIR = $(CURDIR)/tarballs
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
|
||||||
|
all: push
|
||||||
|
|
||||||
|
include env.mk
|
||||||
|
|
||||||
|
example/push/%: example/install/%
|
||||||
|
@mkdir -p $(dir $@)
|
||||||
|
$(info About to push $(SPEC) to a buildcache)
|
||||||
|
$(SPACK) -e . buildcache create --allow-root --only=package --directory $(BUILDCACHE_DIR) /$(HASH)
|
||||||
|
@touch $@
|
||||||
|
|
||||||
|
push: $(addprefix example/push/,$(example/SPACK_PACKAGE_IDS))
|
||||||
|
$(info Updating the buildcache index)
|
||||||
|
$(SPACK) -e . buildcache update-index --directory $(BUILDCACHE_DIR)
|
||||||
|
$(info Done!)
|
||||||
|
@touch $@
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -116,7 +116,7 @@ creates a simple python file:
|
|||||||
|
|
||||||
# FIXME: Add a list of GitHub accounts to
|
# FIXME: Add a list of GitHub accounts to
|
||||||
# notify when the package is updated.
|
# notify when the package is updated.
|
||||||
# maintainers = ["github_user1", "github_user2"]
|
# maintainers("github_user1", "github_user2")
|
||||||
|
|
||||||
version("0.8.13", sha256="591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d")
|
version("0.8.13", sha256="591a9b4ec81c1f2042a97aa60564e0cb79d041c52faa7416acb38bc95bd2c76d")
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -1548,7 +1548,7 @@ Intel Fortran
|
|||||||
|
|
||||||
For Fortran-based packages on Windows, we strongly recommend Intel's oneAPI Fortran compilers.
|
For Fortran-based packages on Windows, we strongly recommend Intel's oneAPI Fortran compilers.
|
||||||
The suite is free to download from Intel's website, located at
|
The suite is free to download from Intel's website, located at
|
||||||
https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html#gs.70t5tw.
|
https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/fortran-compiler.html.
|
||||||
The executable of choice for Spack will be Intel's Beta Compiler, ifx, which supports the classic
|
The executable of choice for Spack will be Intel's Beta Compiler, ifx, which supports the classic
|
||||||
compiler's (ifort's) frontend and runtime libraries by using LLVM.
|
compiler's (ifort's) frontend and runtime libraries by using LLVM.
|
||||||
|
|
||||||
@ -1700,29 +1700,15 @@ If in the previous step, you did not have CMake or Ninja installed, running the
|
|||||||
Windows Compatible Packages
|
Windows Compatible Packages
|
||||||
"""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""
|
||||||
|
|
||||||
Many Spack packages are not currently compatible with Windows, due to Unix
|
Not all spack packages currently have Windows support. Some are inherently incompatible with the
|
||||||
dependencies or incompatible build tools like autoconf. Here are several
|
platform, and others simply have yet to be ported. To view the current set of packages with Windows
|
||||||
packages known to work on Windows:
|
support, the list command should be used via `spack list -t windows`. If there's a package you'd like
|
||||||
|
to install on Windows but is not in that list, feel free to reach out to request the port or contribute
|
||||||
* abseil-cpp
|
the port yourself.
|
||||||
* bzip2
|
|
||||||
* clingo
|
|
||||||
* cpuinfo
|
|
||||||
* cmake
|
|
||||||
* hdf5
|
|
||||||
* glm
|
|
||||||
* nasm
|
|
||||||
* netlib-lapack (requires Intel Fortran)
|
|
||||||
* ninja
|
|
||||||
* openssl
|
|
||||||
* perl
|
|
||||||
* python
|
|
||||||
* ruby
|
|
||||||
* wrf
|
|
||||||
* zlib
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
This is by no means a comprehensive list
|
This is by no means a comprehensive list, some packages may have ports that were not tagged
|
||||||
|
while others may just work out of the box on Windows and have not been tagged as such.
|
||||||
|
|
||||||
^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^
|
||||||
For developers
|
For developers
|
||||||
@ -1734,3 +1720,4 @@ Instructions for creating the installer are at
|
|||||||
https://github.com/spack/spack/blob/develop/lib/spack/spack/cmd/installer/README.md
|
https://github.com/spack/spack/blob/develop/lib/spack/spack/cmd/installer/README.md
|
||||||
|
|
||||||
Alternatively a pre-built copy of the Windows installer is available as an artifact of Spack's Windows CI
|
Alternatively a pre-built copy of the Windows installer is available as an artifact of Spack's Windows CI
|
||||||
|
available at each run of the CI on develop or any PR.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -67,7 +67,6 @@ or refer to the full manual below.
|
|||||||
build_settings
|
build_settings
|
||||||
environments
|
environments
|
||||||
containers
|
containers
|
||||||
monitoring
|
|
||||||
mirrors
|
mirrors
|
||||||
module_file_support
|
module_file_support
|
||||||
repositories
|
repositories
|
||||||
@ -78,12 +77,6 @@ or refer to the full manual below.
|
|||||||
extensions
|
extensions
|
||||||
pipelines
|
pipelines
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
:caption: Research
|
|
||||||
|
|
||||||
analyze
|
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
:caption: Contributing
|
:caption: Contributing
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,265 +0,0 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
||||||
|
|
||||||
.. _monitoring:
|
|
||||||
|
|
||||||
==========
|
|
||||||
Monitoring
|
|
||||||
==========
|
|
||||||
|
|
||||||
You can use a `spack monitor <https://github.com/spack/spack-monitor>`_ "Spackmon"
|
|
||||||
server to store a database of your packages, builds, and associated metadata
|
|
||||||
for provenance, research, or some other kind of development. You should
|
|
||||||
follow the instructions in the `spack monitor documentation <https://spack-monitor.readthedocs.org>`_
|
|
||||||
to first create a server along with a username and token for yourself.
|
|
||||||
You can then use this guide to interact with the server.
|
|
||||||
|
|
||||||
-------------------
|
|
||||||
Analysis Monitoring
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
To read about how to monitor an analysis (meaning you want to send analysis results
|
|
||||||
to a server) see :ref:`analyze_monitoring`.
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
Monitoring An Install
|
|
||||||
---------------------
|
|
||||||
|
|
||||||
Since an install is typically when you build packages, we logically want
|
|
||||||
to tell spack to monitor during this step. Let's start with an example
|
|
||||||
where we want to monitor the install of hdf5. Unless you have disabled authentication
|
|
||||||
for the server, we first want to export our spack monitor token and username to the environment:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ export SPACKMON_TOKEN=50445263afd8f67e59bd79bff597836ee6c05438
|
|
||||||
$ export SPACKMON_USER=spacky
|
|
||||||
|
|
||||||
|
|
||||||
By default, the host for your server is expected to be at ``http://127.0.0.1``
|
|
||||||
with a prefix of ``ms1``, and if this is the case, you can simply add the
|
|
||||||
``--monitor`` flag to the install command:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack install --monitor hdf5
|
|
||||||
|
|
||||||
|
|
||||||
If you need to customize the host or the prefix, you can do that as well:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack install --monitor --monitor-prefix monitor --monitor-host https://monitor-service.io hdf5
|
|
||||||
|
|
||||||
|
|
||||||
As a precaution, we cut out early in the spack client if you have not provided
|
|
||||||
authentication credentials. For example, if you run the command above without
|
|
||||||
exporting your username or token, you'll see:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
==> Error: You are required to export SPACKMON_TOKEN and SPACKMON_USER
|
|
||||||
|
|
||||||
This extra check is to ensure that we don't start any builds,
|
|
||||||
and then discover that you forgot to export your token. However, if
|
|
||||||
your monitoring server has authentication disabled, you can tell this to
|
|
||||||
the client to skip this step:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack install --monitor --monitor-disable-auth hdf5
|
|
||||||
|
|
||||||
If the service is not running, you'll cleanly exit early - the install will
|
|
||||||
not continue if you've asked it to monitor and there is no service.
|
|
||||||
For example, here is what you'll see if the monitoring service is not running:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
[Errno 111] Connection refused
|
|
||||||
|
|
||||||
|
|
||||||
If you want to continue builds (and stop monitoring) you can set the ``--monitor-keep-going``
|
|
||||||
flag.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack install --monitor --monitor-keep-going hdf5
|
|
||||||
|
|
||||||
This could mean that if a request fails, you only have partial or no data
|
|
||||||
added to your monitoring database. This setting will not be applied to the
|
|
||||||
first request to check if the server is running, but to subsequent requests.
|
|
||||||
If you don't have a monitor server running and you want to build, simply
|
|
||||||
don't provide the ``--monitor`` flag! Finally, if you want to provide one or
|
|
||||||
more tags to your build, you can do:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# Add one tag, "pizza"
|
|
||||||
$ spack install --monitor --monitor-tags pizza hdf5
|
|
||||||
|
|
||||||
# Add two tags, "pizza" and "pasta"
|
|
||||||
$ spack install --monitor --monitor-tags pizza,pasta hdf5
|
|
||||||
|
|
||||||
|
|
||||||
----------------------------
|
|
||||||
Monitoring with Containerize
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
The same argument group is available to add to a containerize command.
|
|
||||||
|
|
||||||
^^^^^^
|
|
||||||
Docker
|
|
||||||
^^^^^^
|
|
||||||
|
|
||||||
To add monitoring to a Docker container recipe generation using the defaults,
|
|
||||||
and assuming a monitor server running on localhost, you would
|
|
||||||
start with a spack.yaml in your present working directory:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
spack:
|
|
||||||
specs:
|
|
||||||
- samtools
|
|
||||||
|
|
||||||
And then do:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# preview first
|
|
||||||
spack containerize --monitor
|
|
||||||
|
|
||||||
# and then write to a Dockerfile
|
|
||||||
spack containerize --monitor > Dockerfile
|
|
||||||
|
|
||||||
|
|
||||||
The install command will be edited to include commands for enabling monitoring.
|
|
||||||
However, getting secrets into the container for your monitor server is something
|
|
||||||
that should be done carefully. Specifically you should:
|
|
||||||
|
|
||||||
- Never try to define secrets as ENV, ARG, or using ``--build-arg``
|
|
||||||
- Do not try to get the secret into the container via a "temporary" file that you remove (it in fact will still exist in a layer)
|
|
||||||
|
|
||||||
Instead, it's recommended to use buildkit `as explained here <https://pythonspeed.com/articles/docker-build-secrets/>`_.
|
|
||||||
You'll need to again export environment variables for your spack monitor server:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ export SPACKMON_TOKEN=50445263afd8f67e59bd79bff597836ee6c05438
|
|
||||||
$ export SPACKMON_USER=spacky
|
|
||||||
|
|
||||||
And then use buildkit along with your build and identifying the name of the secret:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ DOCKER_BUILDKIT=1 docker build --secret id=st,env=SPACKMON_TOKEN --secret id=su,env=SPACKMON_USER -t spack/container .
|
|
||||||
|
|
||||||
The secrets are expected to come from your environment, and then will be temporarily mounted and available
|
|
||||||
at ``/run/secrets/<name>``. If you forget to supply them (and authentication is required) the build
|
|
||||||
will fail. If you need to build on your host (and interact with a spack monitor at localhost) you'll
|
|
||||||
need to tell Docker to use the host network:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ DOCKER_BUILDKIT=1 docker build --network="host" --secret id=st,env=SPACKMON_TOKEN --secret id=su,env=SPACKMON_USER -t spack/container .
|
|
||||||
|
|
||||||
|
|
||||||
^^^^^^^^^^^
|
|
||||||
Singularity
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
To add monitoring to a Singularity container build, the spack.yaml needs to
|
|
||||||
be modified slightly to specify wanting a different format:
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
spack:
|
|
||||||
specs:
|
|
||||||
- samtools
|
|
||||||
container:
|
|
||||||
format: singularity
|
|
||||||
|
|
||||||
|
|
||||||
Again, generate the recipe:
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# preview first
|
|
||||||
$ spack containerize --monitor
|
|
||||||
|
|
||||||
# then write to a Singularity recipe
|
|
||||||
$ spack containerize --monitor > Singularity
|
|
||||||
|
|
||||||
|
|
||||||
Singularity doesn't have a direct way to define secrets at build time, so we have
|
|
||||||
to do a bit of a manual command to add a file, source secrets in it, and remove it.
|
|
||||||
Since Singularity doesn't have layers like Docker, deleting a file will truly
|
|
||||||
remove it from the container and history. So let's say we have this file,
|
|
||||||
``secrets.sh``:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# secrets.sh
|
|
||||||
export SPACKMON_USER=spack
|
|
||||||
export SPACKMON_TOKEN=50445263afd8f67e59bd79bff597836ee6c05438
|
|
||||||
|
|
||||||
|
|
||||||
We would then generate the Singularity recipe, and add a files section,
|
|
||||||
a source of that file at the start of ``%post``, and **importantly**
|
|
||||||
a removal of the final at the end of that same section.
|
|
||||||
|
|
||||||
.. code-block::
|
|
||||||
|
|
||||||
Bootstrap: docker
|
|
||||||
From: spack/ubuntu-bionic:latest
|
|
||||||
Stage: build
|
|
||||||
|
|
||||||
%files
|
|
||||||
secrets.sh /opt/secrets.sh
|
|
||||||
|
|
||||||
%post
|
|
||||||
. /opt/secrets.sh
|
|
||||||
|
|
||||||
# spack install commands are here
|
|
||||||
...
|
|
||||||
|
|
||||||
# Don't forget to remove here!
|
|
||||||
rm /opt/secrets.sh
|
|
||||||
|
|
||||||
|
|
||||||
You can then build the container as your normally would.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ sudo singularity build container.sif Singularity
|
|
||||||
|
|
||||||
|
|
||||||
------------------
|
|
||||||
Monitoring Offline
|
|
||||||
------------------
|
|
||||||
|
|
||||||
In the case that you want to save monitor results to your filesystem
|
|
||||||
and then upload them later (perhaps you are in an environment where you don't
|
|
||||||
have credentials or it isn't safe to use them) you can use the ``--monitor-save-local``
|
|
||||||
flag.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack install --monitor --monitor-save-local hdf5
|
|
||||||
|
|
||||||
This will save results in a subfolder, "monitor" in your designated spack
|
|
||||||
reports folder, which defaults to ``$HOME/.spack/reports/monitor``. When
|
|
||||||
you are ready to upload them to a spack monitor server:
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ spack monitor upload ~/.spack/reports/monitor
|
|
||||||
|
|
||||||
|
|
||||||
You can choose the root directory of results as shown above, or a specific
|
|
||||||
subdirectory. The command accepts other arguments to specify configuration
|
|
||||||
for the monitor.
|
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -34,6 +34,15 @@ ubiquitous in the scientific software community. Second, it's a modern
|
|||||||
language and has many powerful features to help make package writing
|
language and has many powerful features to help make package writing
|
||||||
easy.
|
easy.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
As a general rule, packages should install the software *from source*.
|
||||||
|
The only exception is for proprietary software (e.g., vendor compilers).
|
||||||
|
|
||||||
|
If a special build system needs to be added in order to support building
|
||||||
|
a package from source, then the associated code and recipe need to be added
|
||||||
|
first.
|
||||||
|
|
||||||
|
|
||||||
.. _installation_procedure:
|
.. _installation_procedure:
|
||||||
|
|
||||||
@ -225,7 +234,7 @@ generates a boilerplate template for your package, and opens up the new
|
|||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -259,7 +268,7 @@ generates a boilerplate template for your package, and opens up the new
|
|||||||
|
|
||||||
# FIXME: Add a list of GitHub accounts to
|
# FIXME: Add a list of GitHub accounts to
|
||||||
# notify when the package is updated.
|
# notify when the package is updated.
|
||||||
# maintainers = ["github_user1", "github_user2"]
|
# maintainers("github_user1", "github_user2")
|
||||||
|
|
||||||
version("6.2.1", sha256="eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c")
|
version("6.2.1", sha256="eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c")
|
||||||
|
|
||||||
@ -310,14 +319,8 @@ The rest of the tasks you need to do are as follows:
|
|||||||
|
|
||||||
#. Add a comma-separated list of maintainers.
|
#. Add a comma-separated list of maintainers.
|
||||||
|
|
||||||
The ``maintainers`` field is a list of GitHub accounts of people
|
Add a list of Github accounts of people who want to be notified
|
||||||
who want to be notified any time the package is modified. When a
|
any time the package is modified. See :ref:`package_maintainers`.
|
||||||
pull request is submitted that updates the package, these people
|
|
||||||
will be requested to review the PR. This is useful for developers
|
|
||||||
who maintain a Spack package for their own software, as well as
|
|
||||||
users who rely on a piece of software and want to ensure that the
|
|
||||||
package doesn't break. It also gives users a list of people to
|
|
||||||
contact for help when someone reports a build error with the package.
|
|
||||||
|
|
||||||
#. Add ``depends_on()`` calls for the package's dependencies.
|
#. Add ``depends_on()`` calls for the package's dependencies.
|
||||||
|
|
||||||
@ -488,6 +491,31 @@ some examples:
|
|||||||
In general, you won't have to remember this naming convention because
|
In general, you won't have to remember this naming convention because
|
||||||
:ref:`cmd-spack-create` and :ref:`cmd-spack-edit` handle the details for you.
|
:ref:`cmd-spack-create` and :ref:`cmd-spack-edit` handle the details for you.
|
||||||
|
|
||||||
|
.. _package_maintainers:
|
||||||
|
|
||||||
|
-----------
|
||||||
|
Maintainers
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Each package in Spack may have one or more maintainers, i.e. one or more
|
||||||
|
GitHub accounts of people who want to be notified any time the package is
|
||||||
|
modified.
|
||||||
|
|
||||||
|
When a pull request is submitted that updates the package, these people will
|
||||||
|
be requested to review the PR. This is useful for developers who maintain a
|
||||||
|
Spack package for their own software, as well as users who rely on a piece of
|
||||||
|
software and want to ensure that the package doesn't break. It also gives users
|
||||||
|
a list of people to contact for help when someone reports a build error with
|
||||||
|
the package.
|
||||||
|
|
||||||
|
To add maintainers to a package, simply declare them with the ``maintainers`` directive:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
maintainers("user1", "user2")
|
||||||
|
|
||||||
|
The list of maintainers is additive, and includes all the accounts eventually declared in base classes.
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
Trusted Downloads
|
Trusted Downloads
|
||||||
-----------------
|
-----------------
|
||||||
@ -1364,7 +1392,7 @@ Go
|
|||||||
^^
|
^^
|
||||||
|
|
||||||
Go isn't a VCS, it is a programming language with a builtin command,
|
Go isn't a VCS, it is a programming language with a builtin command,
|
||||||
`go get <https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies>`_,
|
`go get <https://pkg.go.dev/cmd/go#hdr-Add_dependencies_to_current_module_and_install_them>`_,
|
||||||
that fetches packages and their dependencies automatically.
|
that fetches packages and their dependencies automatically.
|
||||||
The destination directory will be the standard stage source path.
|
The destination directory will be the standard stage source path.
|
||||||
|
|
||||||
@ -2089,7 +2117,7 @@ dynamic loader where to find its dependencies at runtime. You may be
|
|||||||
familiar with `LD_LIBRARY_PATH
|
familiar with `LD_LIBRARY_PATH
|
||||||
<http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html>`_
|
<http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html>`_
|
||||||
on Linux or `DYLD_LIBRARY_PATH
|
on Linux or `DYLD_LIBRARY_PATH
|
||||||
<https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html>`_
|
<https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dyld.3.html>`_
|
||||||
on Mac OS X. RPATH is similar to these paths, in that it tells
|
on Mac OS X. RPATH is similar to these paths, in that it tells
|
||||||
the loader where to find libraries. Unlike them, it is embedded in
|
the loader where to find libraries. Unlike them, it is embedded in
|
||||||
the binary and not set in each user's environment.
|
the binary and not set in each user's environment.
|
||||||
@ -2397,13 +2425,15 @@ this because uninstalling the dependency would break the package.
|
|||||||
|
|
||||||
``build``, ``link``, and ``run`` dependencies all affect the hash of Spack
|
``build``, ``link``, and ``run`` dependencies all affect the hash of Spack
|
||||||
packages (along with ``sha256`` sums of patches and archives used to build the
|
packages (along with ``sha256`` sums of patches and archives used to build the
|
||||||
package, and a [canonical hash](https://github.com/spack/spack/pull/28156) of
|
package, and a `canonical hash <https://github.com/spack/spack/pull/28156>`_ of
|
||||||
the ``package.py`` recipes). ``test`` dependencies do not affect the package
|
the ``package.py`` recipes). ``test`` dependencies do not affect the package
|
||||||
hash, as they are only used to construct a test environment *after* building and
|
hash, as they are only used to construct a test environment *after* building and
|
||||||
installing a given package installation. Older versions of Spack did not include
|
installing a given package installation. Older versions of Spack did not include
|
||||||
build dependencies in the hash, but this has been
|
build dependencies in the hash, but this has been
|
||||||
[fixed](https://github.com/spack/spack/pull/28504) as of [Spack
|
`fixed <https://github.com/spack/spack/pull/28504>`_ as of |Spack v0.18|_.
|
||||||
``v0.18``](https://github.com/spack/spack/releases/tag/v0.18.0)
|
|
||||||
|
.. |Spack v0.18| replace:: Spack ``v0.18``
|
||||||
|
.. _Spack v0.18: https://github.com/spack/spack/releases/tag/v0.18.0
|
||||||
|
|
||||||
If the dependency type is not specified, Spack uses a default of
|
If the dependency type is not specified, Spack uses a default of
|
||||||
``('build', 'link')``. This is the common case for compiler languages.
|
``('build', 'link')``. This is the common case for compiler languages.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -184,13 +184,48 @@ simply run the following commands:
|
|||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
$ spack env activate myenv
|
$ spack env activate myenv
|
||||||
$ spack concretize --force
|
$ spack concretize --fresh --force
|
||||||
$ spack install
|
$ spack install
|
||||||
|
|
||||||
The ``--force`` flag tells Spack to overwrite its previous concretization
|
The ``--fresh`` flag tells Spack to use the latest version of every package
|
||||||
decisions, allowing you to choose a new version of Python. If any of the new
|
where possible instead of trying to optimize for reuse of existing installed
|
||||||
packages like Bash are already installed, ``spack install`` won't re-install
|
packages.
|
||||||
them, it will keep the symlinks in place.
|
|
||||||
|
The ``--force`` flag in addition tells Spack to overwrite its previous
|
||||||
|
concretization decisions, allowing you to choose a new version of Python.
|
||||||
|
If any of the new packages like Bash are already installed, ``spack install``
|
||||||
|
won't re-install them, it will keep the symlinks in place.
|
||||||
|
|
||||||
|
-----------------------------------
|
||||||
|
Updating & Cleaning Up Old Packages
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
If you're looking to mimic the behavior of Homebrew, you may also want to
|
||||||
|
clean up out-of-date packages from your environment after an upgrade. To
|
||||||
|
upgrade your entire software stack within an environment and clean up old
|
||||||
|
package versions, simply run the following commands:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ spack env activate myenv
|
||||||
|
$ spack mark -i --all
|
||||||
|
$ spack concretize --fresh --force
|
||||||
|
$ spack install
|
||||||
|
$ spack gc
|
||||||
|
|
||||||
|
Running ``spack mark -i --all`` tells Spack to mark all of the existing
|
||||||
|
packages within an environment as "implicitly" installed. This tells
|
||||||
|
spack's garbage collection system that these packages should be cleaned up.
|
||||||
|
|
||||||
|
Don't worry however, this will not remove your entire environment.
|
||||||
|
Running ``spack install`` will reexamine your spack environment after
|
||||||
|
a fresh concretization and will re-mark any packages that should remain
|
||||||
|
installed as "explicitly" installed.
|
||||||
|
|
||||||
|
**Note:** if you use multiple spack environments you should re-run ``spack install``
|
||||||
|
in each of your environments prior to running ``spack gc`` to prevent spack
|
||||||
|
from uninstalling any shared packages that are no longer required by the
|
||||||
|
environment you just upgraded.
|
||||||
|
|
||||||
--------------
|
--------------
|
||||||
Uninstallation
|
Uninstallation
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.. Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
.. Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
|
||||||
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
2
lib/spack/env/cc
vendored
2
lib/spack/env/cc
vendored
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh -f
|
#!/bin/sh -f
|
||||||
# shellcheck disable=SC2034 # evals in this script fool shellcheck
|
# shellcheck disable=SC2034 # evals in this script fool shellcheck
|
||||||
#
|
#
|
||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
59
lib/spack/external/__init__.py
vendored
59
lib/spack/external/__init__.py
vendored
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
|
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
||||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
#
|
#
|
||||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
@ -11,25 +11,14 @@
|
|||||||
|
|
||||||
* Homepage: https://altgraph.readthedocs.io/en/latest/index.html
|
* Homepage: https://altgraph.readthedocs.io/en/latest/index.html
|
||||||
* Usage: dependency of macholib
|
* Usage: dependency of macholib
|
||||||
* Version: 0.17.2
|
* Version: 0.17.3
|
||||||
|
|
||||||
archspec
|
archspec
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/archspec
|
* Homepage: https://pypi.python.org/pypi/archspec
|
||||||
* Usage: Labeling, comparison and detection of microarchitectures
|
* Usage: Labeling, comparison and detection of microarchitectures
|
||||||
* Version: 0.2.0 (commit 77640e572725ad97f18e63a04857155752ace045)
|
* Version: 0.2.0 (commit e44bad9c7b6defac73696f64078b2fe634719b62)
|
||||||
|
|
||||||
argparse
|
|
||||||
--------
|
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/argparse
|
|
||||||
* Usage: We include our own version to be Python 3.X compatible.
|
|
||||||
* Version: 1.4.0
|
|
||||||
* Note: This package has been slightly modified to improve
|
|
||||||
error message formatting. See the following commit if the
|
|
||||||
vendored copy ever needs to be updated again:
|
|
||||||
https://github.com/spack/spack/pull/6786/commits/dfcef577b77249106ea4e4c69a6cd9e64fa6c418
|
|
||||||
|
|
||||||
astunparse
|
astunparse
|
||||||
----------------
|
----------------
|
||||||
@ -52,7 +41,7 @@
|
|||||||
|
|
||||||
* Homepage: https://github.com/python-attrs/attrs
|
* Homepage: https://github.com/python-attrs/attrs
|
||||||
* Usage: Needed by jsonschema.
|
* Usage: Needed by jsonschema.
|
||||||
* Version: 21.2.0 (83d3cd70f90a3f4d19ee8b508e58d1c58821c0ad)
|
* Version: 22.1.0
|
||||||
|
|
||||||
ctest_log_parser
|
ctest_log_parser
|
||||||
----------------
|
----------------
|
||||||
@ -67,21 +56,14 @@
|
|||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/distro
|
* Homepage: https://pypi.python.org/pypi/distro
|
||||||
* Usage: Provides a more stable linux distribution detection.
|
* Usage: Provides a more stable linux distribution detection.
|
||||||
* Version: 1.6.0 (64946a1e2a9ff529047070657728600e006c99ff)
|
* Version: 1.8.0
|
||||||
* Note: Last version supporting Python 2.7
|
|
||||||
|
|
||||||
functools32
|
|
||||||
-----------
|
|
||||||
* Homepage: https://github.com/MiCHiLU/python-functools32
|
|
||||||
* Usage: Needed by jsonschema when using Python 2.7.
|
|
||||||
* Version: 3.2.3-2
|
|
||||||
|
|
||||||
jinja2
|
jinja2
|
||||||
------
|
------
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/Jinja2
|
* Homepage: https://pypi.python.org/pypi/Jinja2
|
||||||
* Usage: A modern and designer-friendly templating language for Python.
|
* Usage: A modern and designer-friendly templating language for Python.
|
||||||
* Version: 2.11.3 (last version supporting Python 2.7)
|
* Version: 3.0.3 (last version supporting Python 3.6)
|
||||||
|
|
||||||
jsonschema
|
jsonschema
|
||||||
----------
|
----------
|
||||||
@ -96,44 +78,21 @@
|
|||||||
|
|
||||||
* Homepage: https://macholib.readthedocs.io/en/latest/index.html#
|
* Homepage: https://macholib.readthedocs.io/en/latest/index.html#
|
||||||
* Usage: Manipulation of Mach-o binaries for relocating macOS buildcaches on Linux
|
* Usage: Manipulation of Mach-o binaries for relocating macOS buildcaches on Linux
|
||||||
* Version: 1.15.2
|
* Version: 1.16.2
|
||||||
|
|
||||||
markupsafe
|
markupsafe
|
||||||
----------
|
----------
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/MarkupSafe
|
* Homepage: https://pypi.python.org/pypi/MarkupSafe
|
||||||
* Usage: Implements a XML/HTML/XHTML Markup safe string for Python.
|
* Usage: Implements a XML/HTML/XHTML Markup safe string for Python.
|
||||||
* Version: 1.1.1 (last version supporting Python 2.7)
|
* Version: 2.0.1 (last version supporting Python 3.6)
|
||||||
|
|
||||||
py
|
|
||||||
--
|
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/py
|
|
||||||
* Usage: Needed by pytest. Library with cross-python path,
|
|
||||||
ini-parsing, io, code, and log facilities.
|
|
||||||
* Version: 1.4.34 (last version supporting Python 2.6)
|
|
||||||
* Note: This packages has been modified:
|
|
||||||
* https://github.com/pytest-dev/py/pull/186 was backported
|
|
||||||
|
|
||||||
pyrsistent
|
pyrsistent
|
||||||
----------
|
----------
|
||||||
|
|
||||||
* Homepage: http://github.com/tobgu/pyrsistent/
|
* Homepage: http://github.com/tobgu/pyrsistent/
|
||||||
* Usage: Needed by `jsonschema`
|
* Usage: Needed by `jsonschema`
|
||||||
* Version: 0.16.1 (last version supporting Python 2.7)
|
* Version: 0.18.0
|
||||||
* Note: We only include the parts needed for `jsonschema`.
|
|
||||||
|
|
||||||
pytest
|
|
||||||
------
|
|
||||||
|
|
||||||
* Homepage: https://pypi.python.org/pypi/pytest
|
|
||||||
* Usage: Testing framework used by Spack.
|
|
||||||
* Version: 3.2.5 (last version supporting Python 2.6)
|
|
||||||
* Note: This package has been slightly modified:
|
|
||||||
* We improve Python 2.6 compatibility. See:
|
|
||||||
https://github.com/spack/spack/pull/6801.
|
|
||||||
* We have patched pytest not to depend on setuptools. See:
|
|
||||||
https://github.com/spack/spack/pull/15612
|
|
||||||
|
|
||||||
ruamel.yaml
|
ruamel.yaml
|
||||||
------
|
------
|
||||||
|
1
lib/spack/external/_vendoring/_pyrsistent_version.py
vendored
Normal file
1
lib/spack/external/_vendoring/_pyrsistent_version.py
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
__version__ = '0.18.0'
|
1
lib/spack/external/_vendoring/_pyrsistent_version.pyi
vendored
Normal file
1
lib/spack/external/_vendoring/_pyrsistent_version.pyi
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
from _pyrsistent_version import *
|
1
lib/spack/external/_vendoring/altgraph.pyi
vendored
Normal file
1
lib/spack/external/_vendoring/altgraph.pyi
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
from altgraph import *
|
18
lib/spack/external/_vendoring/altgraph/LICENSE
vendored
Normal file
18
lib/spack/external/_vendoring/altgraph/LICENSE
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
Copyright (c) 2004 Istvan Albert unless otherwise noted.
|
||||||
|
Copyright (c) 2006-2010 Bob Ippolito
|
||||||
|
Copyright (2) 2010-2020 Ronald Oussoren, et. al.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to
|
||||||
|
deal in the Software without restriction, including without limitation the
|
||||||
|
rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||||
|
IN THE SOFTWARE.
|
@ -1,4 +1,5 @@
|
|||||||
from __future__ import absolute_import, division, print_function
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@ -22,7 +23,7 @@
|
|||||||
from ._version_info import VersionInfo
|
from ._version_info import VersionInfo
|
||||||
|
|
||||||
|
|
||||||
__version__ = "21.2.0"
|
__version__ = "22.1.0"
|
||||||
__version_info__ = VersionInfo._from_version_string(__version__)
|
__version_info__ = VersionInfo._from_version_string(__version__)
|
||||||
|
|
||||||
__title__ = "attrs"
|
__title__ = "attrs"
|
||||||
@ -73,6 +74,6 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
if sys.version_info[:2] >= (3, 6):
|
if sys.version_info[:2] >= (3, 6):
|
||||||
from ._next_gen import define, field, frozen, mutable
|
from ._next_gen import define, field, frozen, mutable # noqa: F401
|
||||||
|
|
||||||
__all__.extend((define, field, frozen, mutable))
|
__all__.extend(("define", "field", "frozen", "mutable"))
|
486
lib/spack/external/_vendoring/attr/__init__.pyi
vendored
Normal file
486
lib/spack/external/_vendoring/attr/__init__.pyi
vendored
Normal file
@ -0,0 +1,486 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
from typing import (
|
||||||
|
Any,
|
||||||
|
Callable,
|
||||||
|
ClassVar,
|
||||||
|
Dict,
|
||||||
|
Generic,
|
||||||
|
List,
|
||||||
|
Mapping,
|
||||||
|
Optional,
|
||||||
|
Protocol,
|
||||||
|
Sequence,
|
||||||
|
Tuple,
|
||||||
|
Type,
|
||||||
|
TypeVar,
|
||||||
|
Union,
|
||||||
|
overload,
|
||||||
|
)
|
||||||
|
|
||||||
|
# `import X as X` is required to make these public
|
||||||
|
from . import converters as converters
|
||||||
|
from . import exceptions as exceptions
|
||||||
|
from . import filters as filters
|
||||||
|
from . import setters as setters
|
||||||
|
from . import validators as validators
|
||||||
|
from ._cmp import cmp_using as cmp_using
|
||||||
|
from ._version_info import VersionInfo
|
||||||
|
|
||||||
|
__version__: str
|
||||||
|
__version_info__: VersionInfo
|
||||||
|
__title__: str
|
||||||
|
__description__: str
|
||||||
|
__url__: str
|
||||||
|
__uri__: str
|
||||||
|
__author__: str
|
||||||
|
__email__: str
|
||||||
|
__license__: str
|
||||||
|
__copyright__: str
|
||||||
|
|
||||||
|
_T = TypeVar("_T")
|
||||||
|
_C = TypeVar("_C", bound=type)
|
||||||
|
|
||||||
|
_EqOrderType = Union[bool, Callable[[Any], Any]]
|
||||||
|
_ValidatorType = Callable[[Any, Attribute[_T], _T], Any]
|
||||||
|
_ConverterType = Callable[[Any], Any]
|
||||||
|
_FilterType = Callable[[Attribute[_T], _T], bool]
|
||||||
|
_ReprType = Callable[[Any], str]
|
||||||
|
_ReprArgType = Union[bool, _ReprType]
|
||||||
|
_OnSetAttrType = Callable[[Any, Attribute[Any], Any], Any]
|
||||||
|
_OnSetAttrArgType = Union[
|
||||||
|
_OnSetAttrType, List[_OnSetAttrType], setters._NoOpType
|
||||||
|
]
|
||||||
|
_FieldTransformer = Callable[
|
||||||
|
[type, List[Attribute[Any]]], List[Attribute[Any]]
|
||||||
|
]
|
||||||
|
# FIXME: in reality, if multiple validators are passed they must be in a list
|
||||||
|
# or tuple, but those are invariant and so would prevent subtypes of
|
||||||
|
# _ValidatorType from working when passed in a list or tuple.
|
||||||
|
_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]]
|
||||||
|
|
||||||
|
# A protocol to be able to statically accept an attrs class.
|
||||||
|
class AttrsInstance(Protocol):
|
||||||
|
__attrs_attrs__: ClassVar[Any]
|
||||||
|
|
||||||
|
# _make --
|
||||||
|
|
||||||
|
NOTHING: object
|
||||||
|
|
||||||
|
# NOTE: Factory lies about its return type to make this possible:
|
||||||
|
# `x: List[int] # = Factory(list)`
|
||||||
|
# Work around mypy issue #4554 in the common case by using an overload.
|
||||||
|
if sys.version_info >= (3, 8):
|
||||||
|
from typing import Literal
|
||||||
|
@overload
|
||||||
|
def Factory(factory: Callable[[], _T]) -> _T: ...
|
||||||
|
@overload
|
||||||
|
def Factory(
|
||||||
|
factory: Callable[[Any], _T],
|
||||||
|
takes_self: Literal[True],
|
||||||
|
) -> _T: ...
|
||||||
|
@overload
|
||||||
|
def Factory(
|
||||||
|
factory: Callable[[], _T],
|
||||||
|
takes_self: Literal[False],
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
else:
|
||||||
|
@overload
|
||||||
|
def Factory(factory: Callable[[], _T]) -> _T: ...
|
||||||
|
@overload
|
||||||
|
def Factory(
|
||||||
|
factory: Union[Callable[[Any], _T], Callable[[], _T]],
|
||||||
|
takes_self: bool = ...,
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
# Static type inference support via __dataclass_transform__ implemented as per:
|
||||||
|
# https://github.com/microsoft/pyright/blob/1.1.135/specs/dataclass_transforms.md
|
||||||
|
# This annotation must be applied to all overloads of "define" and "attrs"
|
||||||
|
#
|
||||||
|
# NOTE: This is a typing construct and does not exist at runtime. Extensions
|
||||||
|
# wrapping attrs decorators should declare a separate __dataclass_transform__
|
||||||
|
# signature in the extension module using the specification linked above to
|
||||||
|
# provide pyright support.
|
||||||
|
def __dataclass_transform__(
|
||||||
|
*,
|
||||||
|
eq_default: bool = True,
|
||||||
|
order_default: bool = False,
|
||||||
|
kw_only_default: bool = False,
|
||||||
|
field_descriptors: Tuple[Union[type, Callable[..., Any]], ...] = (()),
|
||||||
|
) -> Callable[[_T], _T]: ...
|
||||||
|
|
||||||
|
class Attribute(Generic[_T]):
|
||||||
|
name: str
|
||||||
|
default: Optional[_T]
|
||||||
|
validator: Optional[_ValidatorType[_T]]
|
||||||
|
repr: _ReprArgType
|
||||||
|
cmp: _EqOrderType
|
||||||
|
eq: _EqOrderType
|
||||||
|
order: _EqOrderType
|
||||||
|
hash: Optional[bool]
|
||||||
|
init: bool
|
||||||
|
converter: Optional[_ConverterType]
|
||||||
|
metadata: Dict[Any, Any]
|
||||||
|
type: Optional[Type[_T]]
|
||||||
|
kw_only: bool
|
||||||
|
on_setattr: _OnSetAttrType
|
||||||
|
def evolve(self, **changes: Any) -> "Attribute[Any]": ...
|
||||||
|
|
||||||
|
# NOTE: We had several choices for the annotation to use for type arg:
|
||||||
|
# 1) Type[_T]
|
||||||
|
# - Pros: Handles simple cases correctly
|
||||||
|
# - Cons: Might produce less informative errors in the case of conflicting
|
||||||
|
# TypeVars e.g. `attr.ib(default='bad', type=int)`
|
||||||
|
# 2) Callable[..., _T]
|
||||||
|
# - Pros: Better error messages than #1 for conflicting TypeVars
|
||||||
|
# - Cons: Terrible error messages for validator checks.
|
||||||
|
# e.g. attr.ib(type=int, validator=validate_str)
|
||||||
|
# -> error: Cannot infer function type argument
|
||||||
|
# 3) type (and do all of the work in the mypy plugin)
|
||||||
|
# - Pros: Simple here, and we could customize the plugin with our own errors.
|
||||||
|
# - Cons: Would need to write mypy plugin code to handle all the cases.
|
||||||
|
# We chose option #1.
|
||||||
|
|
||||||
|
# `attr` lies about its return type to make the following possible:
|
||||||
|
# attr() -> Any
|
||||||
|
# attr(8) -> int
|
||||||
|
# attr(validator=<some callable>) -> Whatever the callable expects.
|
||||||
|
# This makes this type of assignments possible:
|
||||||
|
# x: int = attr(8)
|
||||||
|
#
|
||||||
|
# This form catches explicit None or no default but with no other arguments
|
||||||
|
# returns Any.
|
||||||
|
@overload
|
||||||
|
def attrib(
|
||||||
|
default: None = ...,
|
||||||
|
validator: None = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
type: None = ...,
|
||||||
|
converter: None = ...,
|
||||||
|
factory: None = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> Any: ...
|
||||||
|
|
||||||
|
# This form catches an explicit None or no default and infers the type from the
|
||||||
|
# other arguments.
|
||||||
|
@overload
|
||||||
|
def attrib(
|
||||||
|
default: None = ...,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
type: Optional[Type[_T]] = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
# This form catches an explicit default argument.
|
||||||
|
@overload
|
||||||
|
def attrib(
|
||||||
|
default: _T,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
type: Optional[Type[_T]] = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
# This form covers type=non-Type: e.g. forward references (str), Any
|
||||||
|
@overload
|
||||||
|
def attrib(
|
||||||
|
default: Optional[_T] = ...,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
type: object = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> Any: ...
|
||||||
|
@overload
|
||||||
|
def field(
|
||||||
|
*,
|
||||||
|
default: None = ...,
|
||||||
|
validator: None = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
converter: None = ...,
|
||||||
|
factory: None = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[bool] = ...,
|
||||||
|
order: Optional[bool] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> Any: ...
|
||||||
|
|
||||||
|
# This form catches an explicit None or no default and infers the type from the
|
||||||
|
# other arguments.
|
||||||
|
@overload
|
||||||
|
def field(
|
||||||
|
*,
|
||||||
|
default: None = ...,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
# This form catches an explicit default argument.
|
||||||
|
@overload
|
||||||
|
def field(
|
||||||
|
*,
|
||||||
|
default: _T,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> _T: ...
|
||||||
|
|
||||||
|
# This form covers type=non-Type: e.g. forward references (str), Any
|
||||||
|
@overload
|
||||||
|
def field(
|
||||||
|
*,
|
||||||
|
default: Optional[_T] = ...,
|
||||||
|
validator: Optional[_ValidatorArgType[_T]] = ...,
|
||||||
|
repr: _ReprArgType = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
metadata: Optional[Mapping[Any, Any]] = ...,
|
||||||
|
converter: Optional[_ConverterType] = ...,
|
||||||
|
factory: Optional[Callable[[], _T]] = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
) -> Any: ...
|
||||||
|
@overload
|
||||||
|
@__dataclass_transform__(order_default=True, field_descriptors=(attrib, field))
|
||||||
|
def attrs(
|
||||||
|
maybe_cls: _C,
|
||||||
|
these: Optional[Dict[str, Any]] = ...,
|
||||||
|
repr_ns: Optional[str] = ...,
|
||||||
|
repr: bool = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
slots: bool = ...,
|
||||||
|
frozen: bool = ...,
|
||||||
|
weakref_slot: bool = ...,
|
||||||
|
str: bool = ...,
|
||||||
|
auto_attribs: bool = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
cache_hash: bool = ...,
|
||||||
|
auto_exc: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
auto_detect: bool = ...,
|
||||||
|
collect_by_mro: bool = ...,
|
||||||
|
getstate_setstate: Optional[bool] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
field_transformer: Optional[_FieldTransformer] = ...,
|
||||||
|
match_args: bool = ...,
|
||||||
|
) -> _C: ...
|
||||||
|
@overload
|
||||||
|
@__dataclass_transform__(order_default=True, field_descriptors=(attrib, field))
|
||||||
|
def attrs(
|
||||||
|
maybe_cls: None = ...,
|
||||||
|
these: Optional[Dict[str, Any]] = ...,
|
||||||
|
repr_ns: Optional[str] = ...,
|
||||||
|
repr: bool = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
slots: bool = ...,
|
||||||
|
frozen: bool = ...,
|
||||||
|
weakref_slot: bool = ...,
|
||||||
|
str: bool = ...,
|
||||||
|
auto_attribs: bool = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
cache_hash: bool = ...,
|
||||||
|
auto_exc: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
auto_detect: bool = ...,
|
||||||
|
collect_by_mro: bool = ...,
|
||||||
|
getstate_setstate: Optional[bool] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
field_transformer: Optional[_FieldTransformer] = ...,
|
||||||
|
match_args: bool = ...,
|
||||||
|
) -> Callable[[_C], _C]: ...
|
||||||
|
@overload
|
||||||
|
@__dataclass_transform__(field_descriptors=(attrib, field))
|
||||||
|
def define(
|
||||||
|
maybe_cls: _C,
|
||||||
|
*,
|
||||||
|
these: Optional[Dict[str, Any]] = ...,
|
||||||
|
repr: bool = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
slots: bool = ...,
|
||||||
|
frozen: bool = ...,
|
||||||
|
weakref_slot: bool = ...,
|
||||||
|
str: bool = ...,
|
||||||
|
auto_attribs: bool = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
cache_hash: bool = ...,
|
||||||
|
auto_exc: bool = ...,
|
||||||
|
eq: Optional[bool] = ...,
|
||||||
|
order: Optional[bool] = ...,
|
||||||
|
auto_detect: bool = ...,
|
||||||
|
getstate_setstate: Optional[bool] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
field_transformer: Optional[_FieldTransformer] = ...,
|
||||||
|
match_args: bool = ...,
|
||||||
|
) -> _C: ...
|
||||||
|
@overload
|
||||||
|
@__dataclass_transform__(field_descriptors=(attrib, field))
|
||||||
|
def define(
|
||||||
|
maybe_cls: None = ...,
|
||||||
|
*,
|
||||||
|
these: Optional[Dict[str, Any]] = ...,
|
||||||
|
repr: bool = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
slots: bool = ...,
|
||||||
|
frozen: bool = ...,
|
||||||
|
weakref_slot: bool = ...,
|
||||||
|
str: bool = ...,
|
||||||
|
auto_attribs: bool = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
cache_hash: bool = ...,
|
||||||
|
auto_exc: bool = ...,
|
||||||
|
eq: Optional[bool] = ...,
|
||||||
|
order: Optional[bool] = ...,
|
||||||
|
auto_detect: bool = ...,
|
||||||
|
getstate_setstate: Optional[bool] = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
field_transformer: Optional[_FieldTransformer] = ...,
|
||||||
|
match_args: bool = ...,
|
||||||
|
) -> Callable[[_C], _C]: ...
|
||||||
|
|
||||||
|
mutable = define
|
||||||
|
frozen = define # they differ only in their defaults
|
||||||
|
|
||||||
|
def fields(cls: Type[AttrsInstance]) -> Any: ...
|
||||||
|
def fields_dict(cls: Type[AttrsInstance]) -> Dict[str, Attribute[Any]]: ...
|
||||||
|
def validate(inst: AttrsInstance) -> None: ...
|
||||||
|
def resolve_types(
|
||||||
|
cls: _C,
|
||||||
|
globalns: Optional[Dict[str, Any]] = ...,
|
||||||
|
localns: Optional[Dict[str, Any]] = ...,
|
||||||
|
attribs: Optional[List[Attribute[Any]]] = ...,
|
||||||
|
) -> _C: ...
|
||||||
|
|
||||||
|
# TODO: add support for returning a proper attrs class from the mypy plugin
|
||||||
|
# we use Any instead of _CountingAttr so that e.g. `make_class('Foo',
|
||||||
|
# [attr.ib()])` is valid
|
||||||
|
def make_class(
|
||||||
|
name: str,
|
||||||
|
attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]],
|
||||||
|
bases: Tuple[type, ...] = ...,
|
||||||
|
repr_ns: Optional[str] = ...,
|
||||||
|
repr: bool = ...,
|
||||||
|
cmp: Optional[_EqOrderType] = ...,
|
||||||
|
hash: Optional[bool] = ...,
|
||||||
|
init: bool = ...,
|
||||||
|
slots: bool = ...,
|
||||||
|
frozen: bool = ...,
|
||||||
|
weakref_slot: bool = ...,
|
||||||
|
str: bool = ...,
|
||||||
|
auto_attribs: bool = ...,
|
||||||
|
kw_only: bool = ...,
|
||||||
|
cache_hash: bool = ...,
|
||||||
|
auto_exc: bool = ...,
|
||||||
|
eq: Optional[_EqOrderType] = ...,
|
||||||
|
order: Optional[_EqOrderType] = ...,
|
||||||
|
collect_by_mro: bool = ...,
|
||||||
|
on_setattr: Optional[_OnSetAttrArgType] = ...,
|
||||||
|
field_transformer: Optional[_FieldTransformer] = ...,
|
||||||
|
) -> type: ...
|
||||||
|
|
||||||
|
# _funcs --
|
||||||
|
|
||||||
|
# TODO: add support for returning TypedDict from the mypy plugin
|
||||||
|
# FIXME: asdict/astuple do not honor their factory args. Waiting on one of
|
||||||
|
# these:
|
||||||
|
# https://github.com/python/mypy/issues/4236
|
||||||
|
# https://github.com/python/typing/issues/253
|
||||||
|
# XXX: remember to fix attrs.asdict/astuple too!
|
||||||
|
def asdict(
|
||||||
|
inst: AttrsInstance,
|
||||||
|
recurse: bool = ...,
|
||||||
|
filter: Optional[_FilterType[Any]] = ...,
|
||||||
|
dict_factory: Type[Mapping[Any, Any]] = ...,
|
||||||
|
retain_collection_types: bool = ...,
|
||||||
|
value_serializer: Optional[
|
||||||
|
Callable[[type, Attribute[Any], Any], Any]
|
||||||
|
] = ...,
|
||||||
|
tuple_keys: Optional[bool] = ...,
|
||||||
|
) -> Dict[str, Any]: ...
|
||||||
|
|
||||||
|
# TODO: add support for returning NamedTuple from the mypy plugin
|
||||||
|
def astuple(
|
||||||
|
inst: AttrsInstance,
|
||||||
|
recurse: bool = ...,
|
||||||
|
filter: Optional[_FilterType[Any]] = ...,
|
||||||
|
tuple_factory: Type[Sequence[Any]] = ...,
|
||||||
|
retain_collection_types: bool = ...,
|
||||||
|
) -> Tuple[Any, ...]: ...
|
||||||
|
def has(cls: type) -> bool: ...
|
||||||
|
def assoc(inst: _T, **changes: Any) -> _T: ...
|
||||||
|
def evolve(inst: _T, **changes: Any) -> _T: ...
|
||||||
|
|
||||||
|
# _config --
|
||||||
|
|
||||||
|
def set_run_validators(run: bool) -> None: ...
|
||||||
|
def get_run_validators() -> bool: ...
|
||||||
|
|
||||||
|
# aliases --
|
||||||
|
|
||||||
|
s = attributes = attrs
|
||||||
|
ib = attr = attrib
|
||||||
|
dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;)
|
@ -1,8 +1,9 @@
|
|||||||
from __future__ import absolute_import, division, print_function
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
import functools
|
import functools
|
||||||
|
import types
|
||||||
|
|
||||||
from ._compat import new_class
|
|
||||||
from ._make import _make_ne
|
from ._make import _make_ne
|
||||||
|
|
||||||
|
|
||||||
@ -78,7 +79,9 @@ def cmp_using(
|
|||||||
num_order_functions += 1
|
num_order_functions += 1
|
||||||
body["__ge__"] = _make_operator("ge", ge)
|
body["__ge__"] = _make_operator("ge", ge)
|
||||||
|
|
||||||
type_ = new_class(class_name, (object,), {}, lambda ns: ns.update(body))
|
type_ = types.new_class(
|
||||||
|
class_name, (object,), {}, lambda ns: ns.update(body)
|
||||||
|
)
|
||||||
|
|
||||||
# Add same type requirement.
|
# Add same type requirement.
|
||||||
if require_same_type:
|
if require_same_type:
|
13
lib/spack/external/_vendoring/attr/_cmp.pyi
vendored
Normal file
13
lib/spack/external/_vendoring/attr/_cmp.pyi
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from typing import Any, Callable, Optional, Type
|
||||||
|
|
||||||
|
_CompareWithType = Callable[[Any, Any], bool]
|
||||||
|
|
||||||
|
def cmp_using(
|
||||||
|
eq: Optional[_CompareWithType],
|
||||||
|
lt: Optional[_CompareWithType],
|
||||||
|
le: Optional[_CompareWithType],
|
||||||
|
gt: Optional[_CompareWithType],
|
||||||
|
ge: Optional[_CompareWithType],
|
||||||
|
require_same_type: bool,
|
||||||
|
class_name: str,
|
||||||
|
) -> Type: ...
|
185
lib/spack/external/_vendoring/attr/_compat.py
vendored
Normal file
185
lib/spack/external/_vendoring/attr/_compat.py
vendored
Normal file
@ -0,0 +1,185 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
|
import inspect
|
||||||
|
import platform
|
||||||
|
import sys
|
||||||
|
import threading
|
||||||
|
import types
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
from collections.abc import Mapping, Sequence # noqa
|
||||||
|
|
||||||
|
|
||||||
|
PYPY = platform.python_implementation() == "PyPy"
|
||||||
|
PY36 = sys.version_info[:2] >= (3, 6)
|
||||||
|
HAS_F_STRINGS = PY36
|
||||||
|
PY310 = sys.version_info[:2] >= (3, 10)
|
||||||
|
|
||||||
|
|
||||||
|
if PYPY or PY36:
|
||||||
|
ordered_dict = dict
|
||||||
|
else:
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
ordered_dict = OrderedDict
|
||||||
|
|
||||||
|
|
||||||
|
def just_warn(*args, **kw):
|
||||||
|
warnings.warn(
|
||||||
|
"Running interpreter doesn't sufficiently support code object "
|
||||||
|
"introspection. Some features like bare super() or accessing "
|
||||||
|
"__class__ will not work with slotted classes.",
|
||||||
|
RuntimeWarning,
|
||||||
|
stacklevel=2,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class _AnnotationExtractor:
|
||||||
|
"""
|
||||||
|
Extract type annotations from a callable, returning None whenever there
|
||||||
|
is none.
|
||||||
|
"""
|
||||||
|
|
||||||
|
__slots__ = ["sig"]
|
||||||
|
|
||||||
|
def __init__(self, callable):
|
||||||
|
try:
|
||||||
|
self.sig = inspect.signature(callable)
|
||||||
|
except (ValueError, TypeError): # inspect failed
|
||||||
|
self.sig = None
|
||||||
|
|
||||||
|
def get_first_param_type(self):
|
||||||
|
"""
|
||||||
|
Return the type annotation of the first argument if it's not empty.
|
||||||
|
"""
|
||||||
|
if not self.sig:
|
||||||
|
return None
|
||||||
|
|
||||||
|
params = list(self.sig.parameters.values())
|
||||||
|
if params and params[0].annotation is not inspect.Parameter.empty:
|
||||||
|
return params[0].annotation
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_return_type(self):
|
||||||
|
"""
|
||||||
|
Return the return type if it's not empty.
|
||||||
|
"""
|
||||||
|
if (
|
||||||
|
self.sig
|
||||||
|
and self.sig.return_annotation is not inspect.Signature.empty
|
||||||
|
):
|
||||||
|
return self.sig.return_annotation
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def make_set_closure_cell():
|
||||||
|
"""Return a function of two arguments (cell, value) which sets
|
||||||
|
the value stored in the closure cell `cell` to `value`.
|
||||||
|
"""
|
||||||
|
# pypy makes this easy. (It also supports the logic below, but
|
||||||
|
# why not do the easy/fast thing?)
|
||||||
|
if PYPY:
|
||||||
|
|
||||||
|
def set_closure_cell(cell, value):
|
||||||
|
cell.__setstate__((value,))
|
||||||
|
|
||||||
|
return set_closure_cell
|
||||||
|
|
||||||
|
# Otherwise gotta do it the hard way.
|
||||||
|
|
||||||
|
# Create a function that will set its first cellvar to `value`.
|
||||||
|
def set_first_cellvar_to(value):
|
||||||
|
x = value
|
||||||
|
return
|
||||||
|
|
||||||
|
# This function will be eliminated as dead code, but
|
||||||
|
# not before its reference to `x` forces `x` to be
|
||||||
|
# represented as a closure cell rather than a local.
|
||||||
|
def force_x_to_be_a_cell(): # pragma: no cover
|
||||||
|
return x
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Extract the code object and make sure our assumptions about
|
||||||
|
# the closure behavior are correct.
|
||||||
|
co = set_first_cellvar_to.__code__
|
||||||
|
if co.co_cellvars != ("x",) or co.co_freevars != ():
|
||||||
|
raise AssertionError # pragma: no cover
|
||||||
|
|
||||||
|
# Convert this code object to a code object that sets the
|
||||||
|
# function's first _freevar_ (not cellvar) to the argument.
|
||||||
|
if sys.version_info >= (3, 8):
|
||||||
|
|
||||||
|
def set_closure_cell(cell, value):
|
||||||
|
cell.cell_contents = value
|
||||||
|
|
||||||
|
else:
|
||||||
|
args = [co.co_argcount]
|
||||||
|
args.append(co.co_kwonlyargcount)
|
||||||
|
args.extend(
|
||||||
|
[
|
||||||
|
co.co_nlocals,
|
||||||
|
co.co_stacksize,
|
||||||
|
co.co_flags,
|
||||||
|
co.co_code,
|
||||||
|
co.co_consts,
|
||||||
|
co.co_names,
|
||||||
|
co.co_varnames,
|
||||||
|
co.co_filename,
|
||||||
|
co.co_name,
|
||||||
|
co.co_firstlineno,
|
||||||
|
co.co_lnotab,
|
||||||
|
# These two arguments are reversed:
|
||||||
|
co.co_cellvars,
|
||||||
|
co.co_freevars,
|
||||||
|
]
|
||||||
|
)
|
||||||
|
set_first_freevar_code = types.CodeType(*args)
|
||||||
|
|
||||||
|
def set_closure_cell(cell, value):
|
||||||
|
# Create a function using the set_first_freevar_code,
|
||||||
|
# whose first closure cell is `cell`. Calling it will
|
||||||
|
# change the value of that cell.
|
||||||
|
setter = types.FunctionType(
|
||||||
|
set_first_freevar_code, {}, "setter", (), (cell,)
|
||||||
|
)
|
||||||
|
# And call it to set the cell.
|
||||||
|
setter(value)
|
||||||
|
|
||||||
|
# Make sure it works on this interpreter:
|
||||||
|
def make_func_with_cell():
|
||||||
|
x = None
|
||||||
|
|
||||||
|
def func():
|
||||||
|
return x # pragma: no cover
|
||||||
|
|
||||||
|
return func
|
||||||
|
|
||||||
|
cell = make_func_with_cell().__closure__[0]
|
||||||
|
set_closure_cell(cell, 100)
|
||||||
|
if cell.cell_contents != 100:
|
||||||
|
raise AssertionError # pragma: no cover
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
return just_warn
|
||||||
|
else:
|
||||||
|
return set_closure_cell
|
||||||
|
|
||||||
|
|
||||||
|
set_closure_cell = make_set_closure_cell()
|
||||||
|
|
||||||
|
# Thread-local global to track attrs instances which are already being repr'd.
|
||||||
|
# This is needed because there is no other (thread-safe) way to pass info
|
||||||
|
# about the instances that are already being repr'd through the call stack
|
||||||
|
# in order to ensure we don't perform infinite recursion.
|
||||||
|
#
|
||||||
|
# For instance, if an instance contains a dict which contains that instance,
|
||||||
|
# we need to know that we're already repr'ing the outside instance from within
|
||||||
|
# the dict's repr() call.
|
||||||
|
#
|
||||||
|
# This lives here rather than in _make.py so that the functions in _make.py
|
||||||
|
# don't have a direct reference to the thread-local in their globals dict.
|
||||||
|
# If they have such a reference, it breaks cloudpickle.
|
||||||
|
repr_context = threading.local()
|
@ -1,4 +1,4 @@
|
|||||||
from __future__ import absolute_import, division, print_function
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["set_run_validators", "get_run_validators"]
|
__all__ = ["set_run_validators", "get_run_validators"]
|
||||||
@ -9,6 +9,10 @@
|
|||||||
def set_run_validators(run):
|
def set_run_validators(run):
|
||||||
"""
|
"""
|
||||||
Set whether or not validators are run. By default, they are run.
|
Set whether or not validators are run. By default, they are run.
|
||||||
|
|
||||||
|
.. deprecated:: 21.3.0 It will not be removed, but it also will not be
|
||||||
|
moved to new ``attrs`` namespace. Use `attrs.validators.set_disabled()`
|
||||||
|
instead.
|
||||||
"""
|
"""
|
||||||
if not isinstance(run, bool):
|
if not isinstance(run, bool):
|
||||||
raise TypeError("'run' must be bool.")
|
raise TypeError("'run' must be bool.")
|
||||||
@ -19,5 +23,9 @@ def set_run_validators(run):
|
|||||||
def get_run_validators():
|
def get_run_validators():
|
||||||
"""
|
"""
|
||||||
Return whether or not validators are run.
|
Return whether or not validators are run.
|
||||||
|
|
||||||
|
.. deprecated:: 21.3.0 It will not be removed, but it also will not be
|
||||||
|
moved to new ``attrs`` namespace. Use `attrs.validators.get_disabled()`
|
||||||
|
instead.
|
||||||
"""
|
"""
|
||||||
return _run_validators
|
return _run_validators
|
@ -1,8 +1,8 @@
|
|||||||
from __future__ import absolute_import, division, print_function
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
from ._compat import iteritems
|
|
||||||
from ._make import NOTHING, _obj_setattr, fields
|
from ._make import NOTHING, _obj_setattr, fields
|
||||||
from .exceptions import AttrsAttributeNotFoundError
|
from .exceptions import AttrsAttributeNotFoundError
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ def asdict(
|
|||||||
``attrs``-decorated.
|
``attrs``-decorated.
|
||||||
:param callable filter: A callable whose return code determines whether an
|
:param callable filter: A callable whose return code determines whether an
|
||||||
attribute or element is included (``True``) or dropped (``False``). Is
|
attribute or element is included (``True``) or dropped (``False``). Is
|
||||||
called with the `attr.Attribute` as the first argument and the
|
called with the `attrs.Attribute` as the first argument and the
|
||||||
value as the second argument.
|
value as the second argument.
|
||||||
:param callable dict_factory: A callable to produce dictionaries from. For
|
:param callable dict_factory: A callable to produce dictionaries from. For
|
||||||
example, to produce ordered dictionaries instead of normal Python
|
example, to produce ordered dictionaries instead of normal Python
|
||||||
@ -46,6 +46,8 @@ def asdict(
|
|||||||
.. versionadded:: 16.0.0 *dict_factory*
|
.. versionadded:: 16.0.0 *dict_factory*
|
||||||
.. versionadded:: 16.1.0 *retain_collection_types*
|
.. versionadded:: 16.1.0 *retain_collection_types*
|
||||||
.. versionadded:: 20.3.0 *value_serializer*
|
.. versionadded:: 20.3.0 *value_serializer*
|
||||||
|
.. versionadded:: 21.3.0 If a dict has a collection for a key, it is
|
||||||
|
serialized as a tuple.
|
||||||
"""
|
"""
|
||||||
attrs = fields(inst.__class__)
|
attrs = fields(inst.__class__)
|
||||||
rv = dict_factory()
|
rv = dict_factory()
|
||||||
@ -61,11 +63,11 @@ def asdict(
|
|||||||
if has(v.__class__):
|
if has(v.__class__):
|
||||||
rv[a.name] = asdict(
|
rv[a.name] = asdict(
|
||||||
v,
|
v,
|
||||||
True,
|
recurse=True,
|
||||||
filter,
|
filter=filter,
|
||||||
dict_factory,
|
dict_factory=dict_factory,
|
||||||
retain_collection_types,
|
retain_collection_types=retain_collection_types,
|
||||||
value_serializer,
|
value_serializer=value_serializer,
|
||||||
)
|
)
|
||||||
elif isinstance(v, (tuple, list, set, frozenset)):
|
elif isinstance(v, (tuple, list, set, frozenset)):
|
||||||
cf = v.__class__ if retain_collection_types is True else list
|
cf = v.__class__ if retain_collection_types is True else list
|
||||||
@ -73,10 +75,11 @@ def asdict(
|
|||||||
[
|
[
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
i,
|
i,
|
||||||
filter,
|
is_key=False,
|
||||||
dict_factory,
|
filter=filter,
|
||||||
retain_collection_types,
|
dict_factory=dict_factory,
|
||||||
value_serializer,
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
)
|
)
|
||||||
for i in v
|
for i in v
|
||||||
]
|
]
|
||||||
@ -87,20 +90,22 @@ def asdict(
|
|||||||
(
|
(
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
kk,
|
kk,
|
||||||
filter,
|
is_key=True,
|
||||||
df,
|
filter=filter,
|
||||||
retain_collection_types,
|
dict_factory=df,
|
||||||
value_serializer,
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
),
|
),
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
vv,
|
vv,
|
||||||
filter,
|
is_key=False,
|
||||||
df,
|
filter=filter,
|
||||||
retain_collection_types,
|
dict_factory=df,
|
||||||
value_serializer,
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
for kk, vv in iteritems(v)
|
for kk, vv in v.items()
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rv[a.name] = v
|
rv[a.name] = v
|
||||||
@ -111,6 +116,7 @@ def asdict(
|
|||||||
|
|
||||||
def _asdict_anything(
|
def _asdict_anything(
|
||||||
val,
|
val,
|
||||||
|
is_key,
|
||||||
filter,
|
filter,
|
||||||
dict_factory,
|
dict_factory,
|
||||||
retain_collection_types,
|
retain_collection_types,
|
||||||
@ -123,22 +129,29 @@ def _asdict_anything(
|
|||||||
# Attrs class.
|
# Attrs class.
|
||||||
rv = asdict(
|
rv = asdict(
|
||||||
val,
|
val,
|
||||||
True,
|
recurse=True,
|
||||||
filter,
|
filter=filter,
|
||||||
dict_factory,
|
dict_factory=dict_factory,
|
||||||
retain_collection_types,
|
retain_collection_types=retain_collection_types,
|
||||||
value_serializer,
|
value_serializer=value_serializer,
|
||||||
)
|
)
|
||||||
elif isinstance(val, (tuple, list, set, frozenset)):
|
elif isinstance(val, (tuple, list, set, frozenset)):
|
||||||
cf = val.__class__ if retain_collection_types is True else list
|
if retain_collection_types is True:
|
||||||
|
cf = val.__class__
|
||||||
|
elif is_key:
|
||||||
|
cf = tuple
|
||||||
|
else:
|
||||||
|
cf = list
|
||||||
|
|
||||||
rv = cf(
|
rv = cf(
|
||||||
[
|
[
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
i,
|
i,
|
||||||
filter,
|
is_key=False,
|
||||||
dict_factory,
|
filter=filter,
|
||||||
retain_collection_types,
|
dict_factory=dict_factory,
|
||||||
value_serializer,
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
)
|
)
|
||||||
for i in val
|
for i in val
|
||||||
]
|
]
|
||||||
@ -148,13 +161,23 @@ def _asdict_anything(
|
|||||||
rv = df(
|
rv = df(
|
||||||
(
|
(
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
kk, filter, df, retain_collection_types, value_serializer
|
kk,
|
||||||
|
is_key=True,
|
||||||
|
filter=filter,
|
||||||
|
dict_factory=df,
|
||||||
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
),
|
),
|
||||||
_asdict_anything(
|
_asdict_anything(
|
||||||
vv, filter, df, retain_collection_types, value_serializer
|
vv,
|
||||||
|
is_key=False,
|
||||||
|
filter=filter,
|
||||||
|
dict_factory=df,
|
||||||
|
retain_collection_types=retain_collection_types,
|
||||||
|
value_serializer=value_serializer,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
for kk, vv in iteritems(val)
|
for kk, vv in val.items()
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
rv = val
|
rv = val
|
||||||
@ -181,7 +204,7 @@ def astuple(
|
|||||||
``attrs``-decorated.
|
``attrs``-decorated.
|
||||||
:param callable filter: A callable whose return code determines whether an
|
:param callable filter: A callable whose return code determines whether an
|
||||||
attribute or element is included (``True``) or dropped (``False``). Is
|
attribute or element is included (``True``) or dropped (``False``). Is
|
||||||
called with the `attr.Attribute` as the first argument and the
|
called with the `attrs.Attribute` as the first argument and the
|
||||||
value as the second argument.
|
value as the second argument.
|
||||||
:param callable tuple_factory: A callable to produce tuples from. For
|
:param callable tuple_factory: A callable to produce tuples from. For
|
||||||
example, to produce lists instead of tuples.
|
example, to produce lists instead of tuples.
|
||||||
@ -253,7 +276,7 @@ def astuple(
|
|||||||
if has(vv.__class__)
|
if has(vv.__class__)
|
||||||
else vv,
|
else vv,
|
||||||
)
|
)
|
||||||
for kk, vv in iteritems(v)
|
for kk, vv in v.items()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
@ -291,7 +314,9 @@ def assoc(inst, **changes):
|
|||||||
class.
|
class.
|
||||||
|
|
||||||
.. deprecated:: 17.1.0
|
.. deprecated:: 17.1.0
|
||||||
Use `evolve` instead.
|
Use `attrs.evolve` instead if you can.
|
||||||
|
This function will not be removed du to the slightly different approach
|
||||||
|
compared to `attrs.evolve`.
|
||||||
"""
|
"""
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
@ -302,7 +327,7 @@ def assoc(inst, **changes):
|
|||||||
)
|
)
|
||||||
new = copy.copy(inst)
|
new = copy.copy(inst)
|
||||||
attrs = fields(inst.__class__)
|
attrs = fields(inst.__class__)
|
||||||
for k, v in iteritems(changes):
|
for k, v in changes.items():
|
||||||
a = getattr(attrs, k, NOTHING)
|
a = getattr(attrs, k, NOTHING)
|
||||||
if a is NOTHING:
|
if a is NOTHING:
|
||||||
raise AttrsAttributeNotFoundError(
|
raise AttrsAttributeNotFoundError(
|
||||||
@ -370,18 +395,16 @@ class and you didn't pass any attribs.
|
|||||||
:raise NameError: If types cannot be resolved because of missing variables.
|
:raise NameError: If types cannot be resolved because of missing variables.
|
||||||
|
|
||||||
:returns: *cls* so you can use this function also as a class decorator.
|
:returns: *cls* so you can use this function also as a class decorator.
|
||||||
Please note that you have to apply it **after** `attr.s`. That means
|
Please note that you have to apply it **after** `attrs.define`. That
|
||||||
the decorator has to come in the line **before** `attr.s`.
|
means the decorator has to come in the line **before** `attrs.define`.
|
||||||
|
|
||||||
.. versionadded:: 20.1.0
|
.. versionadded:: 20.1.0
|
||||||
.. versionadded:: 21.1.0 *attribs*
|
.. versionadded:: 21.1.0 *attribs*
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
|
||||||
# Since calling get_type_hints is expensive we cache whether we've
|
# Since calling get_type_hints is expensive we cache whether we've
|
||||||
# done it already.
|
# done it already.
|
||||||
cls.__attrs_types_resolved__
|
if getattr(cls, "__attrs_types_resolved__", None) != cls:
|
||||||
except AttributeError:
|
|
||||||
import typing
|
import typing
|
||||||
|
|
||||||
hints = typing.get_type_hints(cls, globalns=globalns, localns=localns)
|
hints = typing.get_type_hints(cls, globalns=globalns, localns=localns)
|
||||||
@ -389,7 +412,9 @@ class and you didn't pass any attribs.
|
|||||||
if field.name in hints:
|
if field.name in hints:
|
||||||
# Since fields have been frozen we must work around it.
|
# Since fields have been frozen we must work around it.
|
||||||
_obj_setattr(field, "type", hints[field.name])
|
_obj_setattr(field, "type", hints[field.name])
|
||||||
cls.__attrs_types_resolved__ = True
|
# We store the class we resolved so that subclasses know they haven't
|
||||||
|
# been resolved.
|
||||||
|
cls.__attrs_types_resolved__ = cls
|
||||||
|
|
||||||
# Return the class so you can use it as a decorator too.
|
# Return the class so you can use it as a decorator too.
|
||||||
return cls
|
return cls
|
File diff suppressed because it is too large
Load Diff
@ -1,14 +1,24 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
"""
|
"""
|
||||||
These are Python 3.6+-only and keyword-only APIs that call `attr.s` and
|
These are Python 3.6+-only and keyword-only APIs that call `attr.s` and
|
||||||
`attr.ib` with different default values.
|
`attr.ib` with different default values.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from attr.exceptions import UnannotatedAttributeError
|
|
||||||
|
|
||||||
from . import setters
|
from . import setters
|
||||||
from ._make import NOTHING, _frozen_setattrs, attrib, attrs
|
from ._funcs import asdict as _asdict
|
||||||
|
from ._funcs import astuple as _astuple
|
||||||
|
from ._make import (
|
||||||
|
NOTHING,
|
||||||
|
_frozen_setattrs,
|
||||||
|
_ng_default_on_setattr,
|
||||||
|
attrib,
|
||||||
|
attrs,
|
||||||
|
)
|
||||||
|
from .exceptions import UnannotatedAttributeError
|
||||||
|
|
||||||
|
|
||||||
def define(
|
def define(
|
||||||
@ -32,22 +42,45 @@ def define(
|
|||||||
getstate_setstate=None,
|
getstate_setstate=None,
|
||||||
on_setattr=None,
|
on_setattr=None,
|
||||||
field_transformer=None,
|
field_transformer=None,
|
||||||
|
match_args=True,
|
||||||
):
|
):
|
||||||
r"""
|
r"""
|
||||||
The only behavioral differences are the handling of the *auto_attribs*
|
Define an ``attrs`` class.
|
||||||
option:
|
|
||||||
|
Differences to the classic `attr.s` that it uses underneath:
|
||||||
|
|
||||||
|
- Automatically detect whether or not *auto_attribs* should be `True` (c.f.
|
||||||
|
*auto_attribs* parameter).
|
||||||
|
- If *frozen* is `False`, run converters and validators when setting an
|
||||||
|
attribute by default.
|
||||||
|
- *slots=True*
|
||||||
|
|
||||||
|
.. caution::
|
||||||
|
|
||||||
|
Usually this has only upsides and few visible effects in everyday
|
||||||
|
programming. But it *can* lead to some suprising behaviors, so please
|
||||||
|
make sure to read :term:`slotted classes`.
|
||||||
|
- *auto_exc=True*
|
||||||
|
- *auto_detect=True*
|
||||||
|
- *order=False*
|
||||||
|
- Some options that were only relevant on Python 2 or were kept around for
|
||||||
|
backwards-compatibility have been removed.
|
||||||
|
|
||||||
|
Please note that these are all defaults and you can change them as you
|
||||||
|
wish.
|
||||||
|
|
||||||
:param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves
|
:param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves
|
||||||
exactly like `attr.s`. If left `None`, `attr.s` will try to guess:
|
exactly like `attr.s`. If left `None`, `attr.s` will try to guess:
|
||||||
|
|
||||||
1. If any attributes are annotated and no unannotated `attr.ib`\ s
|
1. If any attributes are annotated and no unannotated `attrs.fields`\ s
|
||||||
are found, it assumes *auto_attribs=True*.
|
are found, it assumes *auto_attribs=True*.
|
||||||
2. Otherwise it assumes *auto_attribs=False* and tries to collect
|
2. Otherwise it assumes *auto_attribs=False* and tries to collect
|
||||||
`attr.ib`\ s.
|
`attrs.fields`\ s.
|
||||||
|
|
||||||
and that mutable classes (``frozen=False``) validate on ``__setattr__``.
|
For now, please refer to `attr.s` for the rest of the parameters.
|
||||||
|
|
||||||
.. versionadded:: 20.1.0
|
.. versionadded:: 20.1.0
|
||||||
|
.. versionchanged:: 21.3.0 Converters are also run ``on_setattr``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def do_it(cls, auto_attribs):
|
def do_it(cls, auto_attribs):
|
||||||
@ -72,6 +105,7 @@ def do_it(cls, auto_attribs):
|
|||||||
getstate_setstate=getstate_setstate,
|
getstate_setstate=getstate_setstate,
|
||||||
on_setattr=on_setattr,
|
on_setattr=on_setattr,
|
||||||
field_transformer=field_transformer,
|
field_transformer=field_transformer,
|
||||||
|
match_args=match_args,
|
||||||
)
|
)
|
||||||
|
|
||||||
def wrap(cls):
|
def wrap(cls):
|
||||||
@ -84,9 +118,9 @@ def wrap(cls):
|
|||||||
|
|
||||||
had_on_setattr = on_setattr not in (None, setters.NO_OP)
|
had_on_setattr = on_setattr not in (None, setters.NO_OP)
|
||||||
|
|
||||||
# By default, mutable classes validate on setattr.
|
# By default, mutable classes convert & validate on setattr.
|
||||||
if frozen is False and on_setattr is None:
|
if frozen is False and on_setattr is None:
|
||||||
on_setattr = setters.validate
|
on_setattr = _ng_default_on_setattr
|
||||||
|
|
||||||
# However, if we subclass a frozen class, we inherit the immutability
|
# However, if we subclass a frozen class, we inherit the immutability
|
||||||
# and disable on_setattr.
|
# and disable on_setattr.
|
||||||
@ -156,3 +190,31 @@ def field(
|
|||||||
order=order,
|
order=order,
|
||||||
on_setattr=on_setattr,
|
on_setattr=on_setattr,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def asdict(inst, *, recurse=True, filter=None, value_serializer=None):
|
||||||
|
"""
|
||||||
|
Same as `attr.asdict`, except that collections types are always retained
|
||||||
|
and dict is always used as *dict_factory*.
|
||||||
|
|
||||||
|
.. versionadded:: 21.3.0
|
||||||
|
"""
|
||||||
|
return _asdict(
|
||||||
|
inst=inst,
|
||||||
|
recurse=recurse,
|
||||||
|
filter=filter,
|
||||||
|
value_serializer=value_serializer,
|
||||||
|
retain_collection_types=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def astuple(inst, *, recurse=True, filter=None):
|
||||||
|
"""
|
||||||
|
Same as `attr.astuple`, except that collections types are always retained
|
||||||
|
and `tuple` is always used as the *tuple_factory*.
|
||||||
|
|
||||||
|
.. versionadded:: 21.3.0
|
||||||
|
"""
|
||||||
|
return _astuple(
|
||||||
|
inst=inst, recurse=recurse, filter=filter, retain_collection_types=True
|
||||||
|
)
|
@ -1,4 +1,5 @@
|
|||||||
from __future__ import absolute_import, division, print_function
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
from functools import total_ordering
|
from functools import total_ordering
|
||||||
|
|
||||||
@ -8,7 +9,7 @@
|
|||||||
|
|
||||||
@total_ordering
|
@total_ordering
|
||||||
@attrs(eq=False, order=False, slots=True, frozen=True)
|
@attrs(eq=False, order=False, slots=True, frozen=True)
|
||||||
class VersionInfo(object):
|
class VersionInfo:
|
||||||
"""
|
"""
|
||||||
A version object that can be compared to tuple of length 1--4:
|
A version object that can be compared to tuple of length 1--4:
|
||||||
|
|
9
lib/spack/external/_vendoring/attr/_version_info.pyi
vendored
Normal file
9
lib/spack/external/_vendoring/attr/_version_info.pyi
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
class VersionInfo:
|
||||||
|
@property
|
||||||
|
def year(self) -> int: ...
|
||||||
|
@property
|
||||||
|
def minor(self) -> int: ...
|
||||||
|
@property
|
||||||
|
def micro(self) -> int: ...
|
||||||
|
@property
|
||||||
|
def releaselevel(self) -> str: ...
|
@ -1,22 +1,21 @@
|
|||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Commonly useful converters.
|
Commonly useful converters.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import absolute_import, division, print_function
|
|
||||||
|
|
||||||
from ._compat import PY2
|
import typing
|
||||||
|
|
||||||
|
from ._compat import _AnnotationExtractor
|
||||||
from ._make import NOTHING, Factory, pipe
|
from ._make import NOTHING, Factory, pipe
|
||||||
|
|
||||||
|
|
||||||
if not PY2:
|
|
||||||
import inspect
|
|
||||||
import typing
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"pipe",
|
|
||||||
"optional",
|
|
||||||
"default_if_none",
|
"default_if_none",
|
||||||
|
"optional",
|
||||||
|
"pipe",
|
||||||
|
"to_bool",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -39,22 +38,15 @@ def optional_converter(val):
|
|||||||
return None
|
return None
|
||||||
return converter(val)
|
return converter(val)
|
||||||
|
|
||||||
if not PY2:
|
xtr = _AnnotationExtractor(converter)
|
||||||
sig = None
|
|
||||||
try:
|
t = xtr.get_first_param_type()
|
||||||
sig = inspect.signature(converter)
|
if t:
|
||||||
except (ValueError, TypeError): # inspect failed
|
optional_converter.__annotations__["val"] = typing.Optional[t]
|
||||||
pass
|
|
||||||
if sig:
|
rt = xtr.get_return_type()
|
||||||
params = list(sig.parameters.values())
|
if rt:
|
||||||
if params and params[0].annotation is not inspect.Parameter.empty:
|
optional_converter.__annotations__["return"] = typing.Optional[rt]
|
||||||
optional_converter.__annotations__["val"] = typing.Optional[
|
|
||||||
params[0].annotation
|
|
||||||
]
|
|
||||||
if sig.return_annotation is not inspect.Signature.empty:
|
|
||||||
optional_converter.__annotations__["return"] = typing.Optional[
|
|
||||||
sig.return_annotation
|
|
||||||
]
|
|
||||||
|
|
||||||
return optional_converter
|
return optional_converter
|
||||||
|
|
||||||
@ -65,14 +57,14 @@ def default_if_none(default=NOTHING, factory=None):
|
|||||||
result of *factory*.
|
result of *factory*.
|
||||||
|
|
||||||
:param default: Value to be used if ``None`` is passed. Passing an instance
|
:param default: Value to be used if ``None`` is passed. Passing an instance
|
||||||
of `attr.Factory` is supported, however the ``takes_self`` option
|
of `attrs.Factory` is supported, however the ``takes_self`` option
|
||||||
is *not*.
|
is *not*.
|
||||||
:param callable factory: A callable that takes no parameters whose result
|
:param callable factory: A callable that takes no parameters whose result
|
||||||
is used if ``None`` is passed.
|
is used if ``None`` is passed.
|
||||||
|
|
||||||
:raises TypeError: If **neither** *default* or *factory* is passed.
|
:raises TypeError: If **neither** *default* or *factory* is passed.
|
||||||
:raises TypeError: If **both** *default* and *factory* are passed.
|
:raises TypeError: If **both** *default* and *factory* are passed.
|
||||||
:raises ValueError: If an instance of `attr.Factory` is passed with
|
:raises ValueError: If an instance of `attrs.Factory` is passed with
|
||||||
``takes_self=True``.
|
``takes_self=True``.
|
||||||
|
|
||||||
.. versionadded:: 18.2.0
|
.. versionadded:: 18.2.0
|
||||||
@ -109,3 +101,44 @@ def default_if_none_converter(val):
|
|||||||
return default
|
return default
|
||||||
|
|
||||||
return default_if_none_converter
|
return default_if_none_converter
|
||||||
|
|
||||||
|
|
||||||
|
def to_bool(val):
|
||||||
|
"""
|
||||||
|
Convert "boolean" strings (e.g., from env. vars.) to real booleans.
|
||||||
|
|
||||||
|
Values mapping to :code:`True`:
|
||||||
|
|
||||||
|
- :code:`True`
|
||||||
|
- :code:`"true"` / :code:`"t"`
|
||||||
|
- :code:`"yes"` / :code:`"y"`
|
||||||
|
- :code:`"on"`
|
||||||
|
- :code:`"1"`
|
||||||
|
- :code:`1`
|
||||||
|
|
||||||
|
Values mapping to :code:`False`:
|
||||||
|
|
||||||
|
- :code:`False`
|
||||||
|
- :code:`"false"` / :code:`"f"`
|
||||||
|
- :code:`"no"` / :code:`"n"`
|
||||||
|
- :code:`"off"`
|
||||||
|
- :code:`"0"`
|
||||||
|
- :code:`0`
|
||||||
|
|
||||||
|
:raises ValueError: for any other value.
|
||||||
|
|
||||||
|
.. versionadded:: 21.3.0
|
||||||
|
"""
|
||||||
|
if isinstance(val, str):
|
||||||
|
val = val.lower()
|
||||||
|
truthy = {True, "true", "t", "yes", "y", "on", "1", 1}
|
||||||
|
falsy = {False, "false", "f", "no", "n", "off", "0", 0}
|
||||||
|
try:
|
||||||
|
if val in truthy:
|
||||||
|
return True
|
||||||
|
if val in falsy:
|
||||||
|
return False
|
||||||
|
except TypeError:
|
||||||
|
# Raised when "val" is not hashable (e.g., lists)
|
||||||
|
pass
|
||||||
|
raise ValueError("Cannot convert value to bool: {}".format(val))
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user