diff --git a/.github/workflows/audit.yaml b/.github/workflows/audit.yaml index 4cd04440215408..54760393578f92 100644 --- a/.github/workflows/audit.yaml +++ b/.github/workflows/audit.yaml @@ -28,8 +28,8 @@ jobs: run: shell: ${{ matrix.system.shell }} steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: ${{inputs.python_version}} - name: Install Python packages diff --git a/.github/workflows/bin/bootstrap-test.sh b/.github/workflows/bin/bootstrap-test.sh index 563eb286433c4f..0d774c248c3a6a 100755 --- a/.github/workflows/bin/bootstrap-test.sh +++ b/.github/workflows/bin/bootstrap-test.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e source share/spack/setup-env.sh -$PYTHON bin/spack bootstrap disable github-actions-v0.4 +$PYTHON bin/spack bootstrap disable github-actions-v0.5 $PYTHON bin/spack bootstrap disable spack-install $PYTHON bin/spack $SPACK_FLAGS solve zlib tree $BOOTSTRAP/store diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index c9e69d3026df58..90b31a098ae90d 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -37,14 +37,14 @@ jobs: make patch unzip which xz python3 python3-devel tree \ cmake bison - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - name: Bootstrap clingo run: | source share/spack/setup-env.sh + spack bootstrap disable github-actions-v0.6 spack bootstrap disable github-actions-v0.5 - spack bootstrap disable github-actions-v0.4 spack external find cmake bison spack -d solve zlib tree ~/.spack/bootstrap/store/ @@ -60,17 +60,17 @@ jobs: run: | brew install cmake bison tree - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: "3.12" - name: Bootstrap clingo run: | source share/spack/setup-env.sh + spack bootstrap disable github-actions-v0.6 spack bootstrap disable github-actions-v0.5 - spack bootstrap disable github-actions-v0.4 spack external find --not-buildable cmake bison spack -d solve zlib tree $HOME/.spack/bootstrap/store/ @@ -83,22 +83,22 @@ jobs: steps: - name: Setup macOS if: ${{ matrix.runner != 'ubuntu-latest' }} + run: brew install tree gawk + - name: Remove system executables run: | - brew install tree gawk - sudo rm -rf $(command -v gpg gpg2) - - name: Setup Ubuntu - if: ${{ matrix.runner == 'ubuntu-latest' }} - run: sudo rm -rf $(command -v gpg gpg2 patchelf) + while [ -n "$(command -v gpg gpg2 patchelf)" ]; do + sudo rm $(command -v gpg gpg2 patchelf) + done - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - name: Bootstrap GnuPG run: | source share/spack/setup-env.sh spack solve zlib + spack bootstrap disable github-actions-v0.6 spack bootstrap disable github-actions-v0.5 - spack bootstrap disable github-actions-v0.4 spack -d gpg list tree ~/.spack/bootstrap/store/ @@ -110,19 +110,17 @@ jobs: steps: - name: Setup macOS if: ${{ matrix.runner != 'ubuntu-latest' }} + run: brew install tree + - name: Remove system executables run: | - brew install tree - # Remove GnuPG since we want to bootstrap it - sudo rm -rf /usr/local/bin/gpg - - name: Setup Ubuntu - if: ${{ matrix.runner == 'ubuntu-latest' }} - run: | - sudo rm -rf $(which gpg) $(which gpg2) $(which patchelf) + while [ -n "$(command -v gpg gpg2 patchelf)" ]; do + sudo rm $(command -v gpg gpg2 patchelf) + done - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: | 3.8 @@ -130,15 +128,16 @@ jobs: 3.10 3.11 3.12 + 3.13 - name: Set bootstrap sources run: | source share/spack/setup-env.sh - spack bootstrap disable github-actions-v0.4 + spack bootstrap disable github-actions-v0.5 spack bootstrap disable spack-install - name: Bootstrap clingo run: | set -e - for ver in '3.8' '3.9' '3.10' '3.11' '3.12' ; do + for ver in '3.8' '3.9' '3.10' '3.11' '3.12' '3.13'; do not_found=1 ver_dir="$(find $RUNNER_TOOL_CACHE/Python -wholename "*/${ver}.*/*/bin" | grep . || true)" if [[ -d "$ver_dir" ]] ; then @@ -172,10 +171,10 @@ jobs: runs-on: "windows-latest" steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: "3.12" - name: Setup Windows @@ -185,8 +184,8 @@ jobs: - name: Bootstrap clingo run: | ./share/spack/setup-env.ps1 + spack bootstrap disable github-actions-v0.6 spack bootstrap disable github-actions-v0.5 - spack bootstrap disable github-actions-v0.4 spack external find --not-buildable cmake bison spack -d solve zlib ./share/spack/qa/validate_last_exit.ps1 diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml index a2d76855353096..dbf027f8c5d458 100644 --- a/.github/workflows/build-containers.yml +++ b/.github/workflows/build-containers.yml @@ -55,9 +55,15 @@ jobs: if: github.repository == 'spack/spack' steps: - name: Checkout - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - - uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 + - name: Determine latest release tag + id: latest + run: | + git fetch --quiet --tags + echo "tag=$(git tag --list --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)" | tee -a $GITHUB_OUTPUT + + - uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 id: docker_meta with: images: | @@ -71,6 +77,7 @@ jobs: type=semver,pattern={{major}} type=ref,event=branch type=ref,event=pr + type=raw,value=latest,enable=${{ github.ref == format('refs/tags/{0}', steps.latest.outputs.tag) }} - name: Generate the Dockerfile env: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 18e914713bc668..79e478a94f9ebc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -24,7 +24,7 @@ jobs: core: ${{ steps.filter.outputs.core }} packages: ${{ steps.filter.outputs.packages }} steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 if: ${{ github.event_name == 'push' }} with: fetch-depth: 0 @@ -83,10 +83,17 @@ jobs: all-prechecks: needs: [ prechecks ] + if: ${{ always() }} runs-on: ubuntu-latest steps: - name: Success - run: "true" + run: | + if [ "${{ needs.prechecks.result }}" == "failure" ] || [ "${{ needs.prechecks.result }}" == "canceled" ]; then + echo "Unit tests failed." + exit 1 + else + exit 0 + fi coverage: needs: [ unit-tests, prechecks ] @@ -94,8 +101,19 @@ jobs: secrets: inherit all: - needs: [ coverage, bootstrap ] + needs: [ unit-tests, coverage, bootstrap ] + if: ${{ always() }} runs-on: ubuntu-latest + # See https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs#needs-context steps: - - name: Success - run: "true" + - name: Status summary + run: | + if [ "${{ needs.unit-tests.result }}" == "failure" ] || [ "${{ needs.unit-tests.result }}" == "canceled" ]; then + echo "Unit tests failed." + exit 1 + elif [ "${{ needs.bootstrap.result }}" == "failure" ] || [ "${{ needs.bootstrap.result }}" == "canceled" ]; then + echo "Bootstrap tests failed." + exit 1 + else + exit 0 + fi diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 1456645b2a63d8..600c06dc692680 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -8,8 +8,8 @@ jobs: upload: runs-on: ubuntu-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: '3.11' cache: 'pip' @@ -29,6 +29,6 @@ jobs: - run: coverage xml - name: "Upload coverage report to CodeCov" - uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 + uses: codecov/codecov-action@05f5a9cfad807516dbbef9929c4a42df3eb78766 with: verbose: true diff --git a/.github/workflows/nightly-win-builds.yml b/.github/workflows/nightly-win-builds.yml index 4e040a05ea2a6a..5a6e53ce71238b 100644 --- a/.github/workflows/nightly-win-builds.yml +++ b/.github/workflows/nightly-win-builds.yml @@ -14,10 +14,10 @@ jobs: build-paraview-deps: runs-on: windows-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: 3.9 - name: Install Python packages diff --git a/.github/workflows/requirements/style/requirements.txt b/.github/workflows/requirements/style/requirements.txt index 6cd71ed1280f30..93ab7eaa7f78cf 100644 --- a/.github/workflows/requirements/style/requirements.txt +++ b/.github/workflows/requirements/style/requirements.txt @@ -1,7 +1,7 @@ -black==24.8.0 +black==24.10.0 clingo==5.7.1 flake8==7.1.1 isort==5.13.2 mypy==1.8.0 -types-six==1.16.21.20240513 +types-six==1.16.21.20241105 vermin==1.6.0 diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml index 310e635735d15e..2d7935fe11a87f 100644 --- a/.github/workflows/unit_tests.yaml +++ b/.github/workflows/unit_tests.yaml @@ -40,10 +40,10 @@ jobs: on_develop: false steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: ${{ matrix.python-version }} - name: Install System packages @@ -89,10 +89,10 @@ jobs: shell: runs-on: ubuntu-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: '3.11' - name: Install System packages @@ -130,7 +130,7 @@ jobs: dnf install -y \ bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ make patch tcl unzip which xz - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Setup repo and non-root user run: | git --version @@ -149,10 +149,10 @@ jobs: clingo-cffi: runs-on: ubuntu-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: '3.13' - name: Install System packages @@ -170,11 +170,11 @@ jobs: run: | . share/spack/setup-env.sh spack bootstrap disable spack-install - spack bootstrap disable github-actions-v0.4 spack bootstrap disable github-actions-v0.5 + spack bootstrap disable github-actions-v0.6 spack bootstrap status spack solve zlib - spack unit-test --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml lib/spack/spack/test/concretize.py + spack unit-test --verbose --cov --cov-config=pyproject.toml --cov-report=xml:coverage.xml lib/spack/spack/test/concretization/core.py - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 with: name: coverage-clingo-cffi @@ -188,10 +188,10 @@ jobs: os: [macos-13, macos-14] python-version: ["3.11"] steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: ${{ matrix.python-version }} - name: Install Python packages @@ -226,10 +226,10 @@ jobs: powershell Invoke-Expression -Command "./share/spack/qa/windows_test_setup.ps1"; {0} runs-on: windows-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: 3.9 - name: Install Python packages diff --git a/.github/workflows/valid-style.yml b/.github/workflows/valid-style.yml index 5c79ddd5cfc4b2..05e4563e5a924e 100644 --- a/.github/workflows/valid-style.yml +++ b/.github/workflows/valid-style.yml @@ -18,8 +18,8 @@ jobs: validate: runs-on: ubuntu-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: '3.11' cache: 'pip' @@ -35,10 +35,10 @@ jobs: style: runs-on: ubuntu-latest steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 0 - - uses: actions/setup-python@f677139bbe7f9c59b41e40162b753c062f5d49a3 + - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b with: python-version: '3.11' cache: 'pip' @@ -70,7 +70,7 @@ jobs: dnf install -y \ bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ make patch tcl unzip which xz - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Setup repo and non-root user run: | git --version @@ -98,14 +98,14 @@ jobs: # PR: use the base of the PR as the old commit - name: Checkout PR base commit if: github.event_name == 'pull_request' - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: ref: ${{ github.event.pull_request.base.sha }} path: old # not a PR: use the previous commit as the old commit - name: Checkout previous commit if: github.event_name != 'pull_request' - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: fetch-depth: 2 path: old @@ -114,14 +114,14 @@ jobs: run: git -C old reset --hard HEAD^ - name: Checkout new commit - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: path: new - name: Install circular import checker - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 with: repository: haampie/circular-import-fighter - ref: 555519c6fd5564fd2eb844e7b87e84f4d12602e2 + ref: 9f60f51bc7134e0be73f27623f1b0357d1718427 path: circular-import-fighter - name: Install dependencies working-directory: circular-import-fighter diff --git a/.readthedocs.yml b/.readthedocs.yml index ff477536131e6b..012a6e6e0ae1d6 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -14,3 +14,26 @@ sphinx: python: install: - requirements: lib/spack/docs/requirements.txt + +search: + ranking: + spack.html: -10 + spack.*.html: -10 + llnl.html: -10 + llnl.*.html: -10 + _modules/*: -10 + command_index.html: -9 + basic_usage.html: 5 + configuration.html: 5 + config_yaml.html: 5 + packages_yaml.html: 5 + build_settings.html: 5 + environments.html: 5 + containers.html: 5 + mirrors.html: 5 + module_file_support.html: 5 + repositories.html: 5 + binary_caches.html: 5 + chain.html: 5 + pipelines.html: 5 + packaging_guide.html: 5 diff --git a/CHANGELOG.md b/CHANGELOG.md index b39f065e045e89..4f18c386cb796c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,365 @@ +# v0.23.0 (2024-11-13) + +`v0.23.0` is a major feature release. + +We are planning to make this the last major release before Spack `v1.0` +in June 2025. Alongside `v0.23`, we will be making pre-releases (alpha, +beta, etc.) of `v1.0`, and we encourage users to try them and send us +feedback, either on GitHub or on Slack. You can track the road to +`v1.0` here: + + * https://github.com/spack/spack/releases + * https://github.com/spack/spack/discussions/30634 + +## Features in this Release + +1. **Language virtuals** + + Your packages can now explicitly depend on the languages they require. + Historically, Spack has considered C, C++, and Fortran compiler + dependencies to be implicit. In `v0.23`, you should ensure that + new packages add relevant C, C++, and Fortran dependencies like this: + + ```python + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + ``` + + We encourage you to add these annotations to your packages now, to prepare + for Spack `v1.0.0`. In `v1.0.0`, these annotations will be necessary for + your package to use C, C++, and Fortran compilers. Note that you should + *not* add language dependencies to packages that don't need them, e.g., + pure python packages. + + We have already auto-generated these dependencies for packages in the + `builtin` repository (see #45217), based on the types of source files + present in each package's source code. We *may* have added too many or too + few language dependencies, so please submit pull requests to correct + packages if you find that the language dependencies are incorrect. + + Note that we have also backported support for these dependencies to + `v0.21.3` and `v0.22.2`, to make all of them forward-compatible with + `v0.23`. This should allow you to move easily between older and newer Spack + releases without breaking your packages. + +2. **Spec splicing** + + We are working to make binary installation more seamless in Spack. `v0.23` + introduces "splicing", which allows users to deploy binaries using local, + optimized versions of a binary interface, even if they were not built with + that interface. For example, this would allow you to build binaries in the + cloud using `mpich` and install them on a system using a local, optimized + version of `mvapich2` *without rebuilding*. Spack preserves full provenance + for the installed packages and knows that they were built one way but + deployed another. + + Our intent is to leverage this across many key HPC binary packages, + e.g. MPI, CUDA, ROCm, and libfabric. + + Fundamentally, splicing allows Spack to redeploy an existing spec with + different dependencies than how it was built. There are two interfaces to + splicing. + + a. Explicit Splicing + + #39136 introduced the explicit splicing interface. In the + concretizer config, you can specify a target spec and a replacement + by hash. + + ```yaml + concretizer: + splice: + explicit: + - target: mpi + replacement: mpich/abcdef + ``` + + Here, every installation that would normally use the target spec will + instead use its replacement. Above, any spec using *any* `mpi` will be + spliced to depend on the specific `mpich` installation requested. This + *can* go wrong if you try to replace something built with, e.g., + `openmpi` with `mpich`, and it is on the user to ensure ABI + compatibility between target and replacement specs. This currently + requires some expertise to use, but it will allow users to reuse the + binaries they create across more machines and environments. + + b. Automatic Splicing (experimental) + + #46729 introduced automatic splicing. In the concretizer config, enable + automatic splicing: + + ```yaml + concretizer: + splice: + automatic: true + ``` + + or run: + + ```console + spack config add concretizer:splice:automatic:true + ``` + + The concretizer will select splices for ABI compatibility to maximize + package reuse. Packages can denote ABI compatibility using the + `can_splice` directive. No packages in Spack yet use this directive, so + if you want to use this feature you will need to add `can_splice` + annotations to your packages. We are working on ways to add more ABI + compatibility information to the Spack package repository, and this + directive may change in the future. + + See the documentation for more details: + * https://spack.readthedocs.io/en/latest/build_settings.html#splicing + * https://spack.readthedocs.io/en/latest/packaging_guide.html#specifying-abi-compatibility + +3. Broader variant propagation + + Since #42931, you can specify propagated variants like `hdf5 + build_type==RelWithDebInfo` or `trilinos ++openmp` to propagate a variant + to all dependencies for which it is relevant. This is valid *even* if the + variant does not exist on the package or its dependencies. + + See https://spack.readthedocs.io/en/latest/basic_usage.html#variants. + +4. Query specs by namespace + + #45416 allows a package's namespace (indicating the repository it came from) + to be treated like a variant. You can request packages from particular repos + like this: + + ```console + spack find zlib namespace=builtin + spack find zlib namespace=myrepo + ``` + + Previously, the spec syntax only allowed namespaces to be prefixes of spec + names, e.g. `builtin.zlib`. The previous syntax still works. + +5. `spack spec` respects environment settings and `unify:true` + + `spack spec` did not previously respect environment lockfiles or + unification settings, which made it difficult to see exactly how a spec + would concretize within an environment. Now it does, so the output you get + with `spack spec` will be *the same* as what your environment will + concretize to when you run `spack concretize`. Similarly, if you provide + multiple specs on the command line with `spack spec`, it will concretize + them together if `unify:true` is set. + + See #47556 and #44843. + +6. Less noisy `spack spec` output + + `spack spec` previously showed output like this: + + ```console + > spack spec /v5fn6xo + Input spec + -------------------------------- + - /v5fn6xo + + Concretized + -------------------------------- + [+] openssl@3.3.1%apple-clang@16.0.0~docs+shared arch=darwin-sequoia-m1 + ... + ``` + + But the input spec is redundant, and we know we run `spack spec` to concretize + the input spec. `spack spec` now *only* shows the concretized spec. See #47574. + +7. Better output for `spack find -c` + + In an environmnet, `spack find -c` lets you search the concretized, but not + yet installed, specs, just as you would the installed ones. As with `spack + spec`, this should make it easier for you to see what *will* be built + before building and installing it. See #44713. + +8. `spack -C `: use an environment's configuration without activation + + Spack environments allow you to associate: + 1. a set of (possibly concretized) specs, and + 2. configuration + + When you activate an environment, you're using both of these. Previously, we + supported: + * `spack -e ` to run spack in the context of a specific environment, and + * `spack -C ` to run spack using a directory with configuration files. + + You can now also pass an environment to `spack -C` to use *only* the environment's + configuration, but not the specs or lockfile. See #45046. + +## New commands, options, and directives + +* The new `spack env track` command (#41897) takes a non-managed Spack + environment and adds a symlink to Spack's `$environments_root` directory, so + that it will be included for reference counting for commands like `spack + uninstall` and `spack gc`. If you use free-standing directory environments, + this is useful for preventing Spack from removing things required by your + environments. You can undo this tracking with the `spack env untrack` + command. + +* Add `-t` short option for `spack --backtrace` (#47227) + + `spack -d / --debug` enables backtraces on error, but it can be very + verbose, and sometimes you just want the backtrace. `spack -t / --backtrace` + provides that option. + +* `gc`: restrict to specific specs (#46790) + + If you only want to garbage-collect specific packages, you can now provide + them on the command line. This gives users finer-grained control over what + is uninstalled. + +* oci buildcaches now support `--only=package`. You can now push *just* a + package and not its dependencies to an OCI registry. This allows dependents + of non-redistributable specs to be stored in OCI registries without an + error. See #45775. + +## Notable refactors +* Variants are now fully conditional + + The `variants` dictionary on packages was previously keyed by variant name, + and allowed only one definition of any given variant. Spack is now smart + enough to understand that variants may have different values and defaults + for different versions. For example, `warpx` prior to `23.06` only supported + builds for one dimensionality, and newer `warpx` versions could be built + with support for many different dimensions: + + ```python + variant( + "dims", + default="3", + values=("1", "2", "3", "rz"), + multi=False, + description="Number of spatial dimensions", + when="@:23.05", + ) + variant( + "dims", + default="1,2,rz,3", + values=("1", "2", "3", "rz"), + multi=True, + description="Number of spatial dimensions", + when="@23.06:", + ) + ``` + + Previously, the default for the old version of `warpx` was not respected and + had to be specified manually. Now, Spack will select the right variant + definition for each version at concretization time. This allows variants to + evolve more smoothly over time. See #44425 for details. + +## Highlighted bugfixes + +1. Externals no longer override the preferred provider (#45025). + + External definitions could interfere with package preferences. Now, if + `openmpi` is the preferred `mpi`, and an external `mpich` is defined, a new + `openmpi` *will* be built if building it is possible. Previously we would + prefer `mpich` despite the preference. + +2. Composable `cflags` (#41049). + + This release fixes a longstanding bug that concretization would fail if + there were different `cflags` specified in `packages.yaml`, + `compilers.yaml`, or on `the` CLI. Flags and their ordering are now tracked + in the concretizer and flags from multiple sources will be merged. + +3. Fix concretizer Unification for included environments (#45139). + +## Deprecations, removals, and syntax changes + +1. The old concretizer has been removed from Spack, along with the + `config:concretizer` config option. Spack will emit a warning if the option + is present in user configuration, since it now has no effect. Spack now + uses a simpler bootstrapping mechanism, where a JSON prototype is tweaked + slightly to get an initial concrete spec to download. See #45215. + +2. Best-effort expansion of spec matrices has been removed. This feature did + not work with the "new" ASP-based concretizer, and did not work with + `unify: True` or `unify: when_possible`. Use the + [exclude key](https://spack.readthedocs.io/en/latest/environments.html#spec-matrices) + for the environment to exclude invalid components, or use multiple spec + matrices to combine the list of specs for which the constraint is valid and + the list of specs for which it is not. See #40792. + +3. The old Cray `platform` (based on Cray PE modules) has been removed, and + `platform=cray` is no longer supported. Since `v0.19`, Spack has handled + Cray machines like Linux clusters with extra packages, and we have + encouraged using this option to support Cray. The new approach allows us to + correctly handle Cray machines with non-SLES operating systems, and it is + much more reliable than making assumptions about Cray modules. See the + `v0.19` release notes and #43796 for more details. + +4. The `config:install_missing_compilers` config option has been deprecated, + and it is a no-op when set in `v0.23`. Our new compiler dependency model + will replace it with a much more reliable and robust mechanism in `v1.0`. + See #46237. + +5. Config options that deprecated in `v0.21` have been removed in `v0.23`. You + can now only specify preferences for `compilers`, `targets`, and + `providers` globally via the `packages:all:` section. Similarly, you can + only specify `versions:` locally for a specific package. See #44061 and + #31261 for details. + +6. Spack's old test interface has been removed (#45752), having been + deprecated in `v0.22.0` (#34236). All `builtin` packages have been updated + to use the new interface. See the [stand-alone test documentation]( + https://spack.readthedocs.io/en/latest/packaging_guide.html#stand-alone-tests) + +7. The `spack versions --safe-only` option, deprecated since `v0.21.0`, has + been removed. See #45765. + +* The `--dependencies` and `--optimize` arguments to `spack ci` have been + deprecated. See #45005. + +## Binary caches +1. Public binary caches now include an ML stack for Linux/aarch64 (#39666)We + now build an ML stack for Linux/aarch64 for all pull requests and on + develop. The ML stack includes both CPU-only and CUDA builds for Horovod, + Hugging Face, JAX, Keras, PyTorch,scikit-learn, TensorBoard, and + TensorFlow, and related packages. The CPU-only stack also includes XGBoost. + See https://cache.spack.io/tag/develop/?stack=ml-linux-aarch64-cuda. + +2. There is also now an stack of developer tools for macOS (#46910), which is + analogous to the Linux devtools stack. You can use this to avoid building + many common build dependencies. See + https://cache.spack.io/tag/develop/?stack=developer-tools-darwin. + +## Architecture support +* archspec has been updated to `v0.2.5`, with support for `zen5` +* Spack's CUDA package now supports the Grace Hopper `9.0a` compute capability (#45540) + +## Windows +* Windows bootstrapping: `file` and `gpg` (#41810) +* `scripts` directory added to PATH on Windows for python extensions (#45427) +* Fix `spack load --list` and `spack unload` on Windows (#35720) + +## Other notable changes +* Bugfix: `spack find -x` in environments (#46798) +* Spec splices are now robust to duplicate nodes with the same name in a spec (#46382) +* Cache per-compiler libc calculations for performance (#47213) +* Fixed a bug in external detection for openmpi (#47541) +* Mirror configuration allows username/password as environment variables (#46549) +* Default library search caps maximum depth (#41945) +* Unify interface for `spack spec` and `spack solve` commands (#47182) +* Spack no longer RPATHs directories in the default library search path (#44686) +* Improved performance of Spack database (#46554) +* Enable package reuse for packages with versions from git refs (#43859) +* Improved handling for `uuid` virtual on macos (#43002) +* Improved tracking of task queueing/requeueing in the installer (#46293) + +## Spack community stats + +* Over 2,000 pull requests updated package recipes +* 8,307 total packages, 329 new since `v0.22.0` + * 140 new Python packages + * 14 new R packages +* 373 people contributed to this release + * 357 committers to packages + * 60 committers to core + + # v0.22.2 (2024-09-21) ## Bugfixes diff --git a/README.md b/README.md index af2ee583de74e7..feff4b31053809 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Tutorial ---------------- We maintain a -[**hands-on tutorial**](https://spack.readthedocs.io/en/latest/tutorial.html). +[**hands-on tutorial**](https://spack-tutorial.readthedocs.io/). It covers basic to advanced usage, packaging, developer features, and large HPC deployments. You can do all of the exercises on your own laptop using a Docker container. diff --git a/bin/spack_cmd.bat b/bin/spack_cmd.bat index 392e42d29b63db..da7b67e3bc5ae6 100644 --- a/bin/spack_cmd.bat +++ b/bin/spack_cmd.bat @@ -1,71 +1,11 @@ @ECHO OFF -setlocal EnableDelayedExpansion :: (c) 2021 Lawrence Livermore National Laboratory :: To use this file independently of Spack's installer, execute this script in its directory, or add the :: associated bin directory to your PATH. Invoke to launch Spack Shell. :: :: source_dir/spack/bin/spack_cmd.bat :: -pushd %~dp0.. -set SPACK_ROOT=%CD% -pushd %CD%\.. -set spackinstdir=%CD% -popd - -:: Check if Python is on the PATH -if not defined python_pf_ver ( -(for /f "delims=" %%F in ('where python.exe') do ( - set "python_pf_ver=%%F" - goto :found_python - ) ) 2> NUL -) -:found_python -if not defined python_pf_ver ( - :: If not, look for Python from the Spack installer - :get_builtin - (for /f "tokens=*" %%g in ('dir /b /a:d "!spackinstdir!\Python*"') do ( - set "python_ver=%%g")) 2> NUL - - if not defined python_ver ( - echo Python was not found on your system. - echo Please install Python or add Python to your PATH. - ) else ( - set "py_path=!spackinstdir!\!python_ver!" - set "py_exe=!py_path!\python.exe" - ) - goto :exitpoint -) else ( - :: Python is already on the path - set "py_exe=!python_pf_ver!" - (for /F "tokens=* USEBACKQ" %%F in ( - `"!py_exe!" --version`) do (set "output=%%F")) 2>NUL - if not "!output:Microsoft Store=!"=="!output!" goto :get_builtin - goto :exitpoint -) -:exitpoint - -set "PATH=%SPACK_ROOT%\bin\;%PATH%" -if defined py_path ( - set "PATH=%py_path%;%PATH%" -) - -if defined py_exe ( - "%py_exe%" "%SPACK_ROOT%\bin\haspywin.py" -) - -set "EDITOR=notepad" - -DOSKEY spacktivate=spack env activate $* - -@echo ********************************************************************** -@echo ** Spack Package Manager -@echo ********************************************************************** - -IF "%1"=="" GOTO CONTINUE -set -GOTO:EOF - -:continue -set PROMPT=[spack] %PROMPT% -%comspec% /k +call "%~dp0..\share\spack\setup-env.bat" +pushd %SPACK_ROOT% +%comspec% /K diff --git a/etc/spack/defaults/bootstrap.yaml b/etc/spack/defaults/bootstrap.yaml index 6f2dbe171c5f60..b2e2c0f37385ed 100644 --- a/etc/spack/defaults/bootstrap.yaml +++ b/etc/spack/defaults/bootstrap.yaml @@ -9,15 +9,15 @@ bootstrap: # may not be able to bootstrap all the software that Spack needs, # depending on its type. sources: - - name: 'github-actions-v0.5' + - name: github-actions-v0.6 + metadata: $spack/share/spack/bootstrap/github-actions-v0.6 + - name: github-actions-v0.5 metadata: $spack/share/spack/bootstrap/github-actions-v0.5 - - name: 'github-actions-v0.4' - metadata: $spack/share/spack/bootstrap/github-actions-v0.4 - - name: 'spack-install' + - name: spack-install metadata: $spack/share/spack/bootstrap/spack-install trusted: # By default we trust bootstrapping from sources and from binaries # produced on Github via the workflow + github-actions-v0.6: true github-actions-v0.5: true - github-actions-v0.4: true spack-install: true diff --git a/etc/spack/defaults/concretizer.yaml b/etc/spack/defaults/concretizer.yaml index 5bbf580bcf826a..eda51c09beefc0 100644 --- a/etc/spack/defaults/concretizer.yaml +++ b/etc/spack/defaults/concretizer.yaml @@ -39,11 +39,27 @@ concretizer: # Option to deal with possible duplicate nodes (i.e. different nodes from the same package) in the DAG. duplicates: # "none": allows a single node for any package in the DAG. - # "minimal": allows the duplication of 'build-tools' nodes only (e.g. py-setuptools, cmake etc.) + # "minimal": allows the duplication of 'build-tools' nodes only + # (e.g. py-setuptools, cmake etc.) # "full" (experimental): allows separation of the entire build-tool stack (e.g. the entire "cmake" subDAG) strategy: minimal - # Option to specify compatiblity between operating systems for reuse of compilers and packages - # Specified as a key: [list] where the key is the os that is being targeted, and the list contains the OS's - # it can reuse. Note this is a directional compatibility so mutual compatibility between two OS's + # Option to specify compatibility between operating systems for reuse of compilers and packages + # Specified as a key: [list] where the key is the os that is being targeted, and the list contains the OS's + # it can reuse. Note this is a directional compatibility so mutual compatibility between two OS's # requires two entries i.e. os_compatible: {sonoma: [monterey], monterey: [sonoma]} os_compatible: {} + + # Option to specify whether to support splicing. Splicing allows for + # the relinking of concrete package dependencies in order to better + # reuse already built packages with ABI compatible dependencies + splice: + explicit: [] + automatic: false + # Maximum time, in seconds, allowed for the 'solve' phase. If set to 0, there is no time limit. + timeout: 0 + # If set to true, exceeding the timeout will always result in a concretization error. If false, + # the best (suboptimal) model computed before the timeout is used. + # + # Setting this to false yields unreproducible results, so we advise to use that value only + # for debugging purposes (e.g. check which constraints can help Spack concretize faster). + error_on_timeout: true diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml index a7c64ad7365af4..c0804c349898c3 100644 --- a/etc/spack/defaults/packages.yaml +++ b/etc/spack/defaults/packages.yaml @@ -40,9 +40,9 @@ packages: jpeg: [libjpeg-turbo, libjpeg] lapack: [openblas, amdlibflame] libc: [glibc, musl] - libgfortran: [ gcc-runtime ] + libgfortran: [gcc-runtime] libglx: [mesa+glx] - libifcore: [ intel-oneapi-runtime ] + libifcore: [intel-oneapi-runtime] libllvm: [llvm] lua-lang: [lua, lua-luajit-openresty, lua-luajit] luajit: [lua-luajit-openresty, lua-luajit] diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst index 171a82b6ea1e37..21733a256633b0 100644 --- a/lib/spack/docs/basic_usage.rst +++ b/lib/spack/docs/basic_usage.rst @@ -1359,6 +1359,10 @@ For example, for the ``stackstart`` variant: mpileaks stackstart==4 # variant will be propagated to dependencies mpileaks stackstart=4 # only mpileaks will have this variant value +Spack also allows variants to be propagated from a package that does +not have that variant. + + ^^^^^^^^^^^^^^ Compiler Flags ^^^^^^^^^^^^^^ diff --git a/lib/spack/docs/build_settings.rst b/lib/spack/docs/build_settings.rst index 97c81bf17a40ea..bdad8c8a51464c 100644 --- a/lib/spack/docs/build_settings.rst +++ b/lib/spack/docs/build_settings.rst @@ -237,3 +237,35 @@ is optional -- by default, splices will be transitive. ``mpich/abcdef`` instead of ``mvapich2`` as the MPI provider. Spack will warn the user in this case, but will not fail the concretization. + +.. _automatic_splicing: + +^^^^^^^^^^^^^^^^^^ +Automatic Splicing +^^^^^^^^^^^^^^^^^^ + +The Spack solver can be configured to do automatic splicing for +ABI-compatible packages. Automatic splices are enabled in the concretizer +config section + +.. code-block:: yaml + + concretizer: + splice: + automatic: True + +Packages can include ABI-compatibility information using the +``can_splice`` directive. See :ref:`the packaging +guide` for instructions on specifying ABI +compatibility using the ``can_splice`` directive. + +.. note:: + + The ``can_splice`` directive is experimental and may be changed in + future versions. + +When automatic splicing is enabled, the concretizer will combine any +number of ABI-compatible specs if possible to reuse installed packages +and packages available from binary caches. The end result of these +specs is equivalent to a series of transitive/intransitive splices, +but the series may be non-obvious. diff --git a/lib/spack/docs/conf.py b/lib/spack/docs/conf.py index 4873e3e104d6b3..688554fac6da13 100644 --- a/lib/spack/docs/conf.py +++ b/lib/spack/docs/conf.py @@ -210,16 +210,18 @@ def setup(sphinx): # Spack classes that are private and we don't want to expose ("py:class", "spack.provider_index._IndexBase"), ("py:class", "spack.repo._PrependFileLoader"), - ("py:class", "spack.build_systems._checks.BaseBuilder"), + ("py:class", "spack.build_systems._checks.BuilderWithDefaults"), # Spack classes that intersphinx is unable to resolve ("py:class", "spack.version.StandardVersion"), ("py:class", "spack.spec.DependencySpec"), + ("py:class", "spack.spec.ArchSpec"), ("py:class", "spack.spec.InstallStatus"), ("py:class", "spack.spec.SpecfileReaderBase"), ("py:class", "spack.install_test.Pb"), ("py:class", "spack.filesystem_view.SimpleFilesystemView"), ("py:class", "spack.traverse.EdgeAndDepth"), ("py:class", "archspec.cpu.microarchitecture.Microarchitecture"), + ("py:class", "spack.compiler.CompilerCache"), # TypeVar that is not handled correctly ("py:class", "llnl.util.lang.T"), ] diff --git a/lib/spack/docs/configuration.rst b/lib/spack/docs/configuration.rst index 7d2ceee9583444..1f62c7545557e1 100644 --- a/lib/spack/docs/configuration.rst +++ b/lib/spack/docs/configuration.rst @@ -516,6 +516,7 @@ Spack understands over a dozen special variables. These are: * ``$target_family``. The target family for the current host, as detected by ArchSpec. E.g. ``x86_64`` or ``aarch64``. * ``$date``: the current date in the format YYYY-MM-DD +* ``$spack_short_version``: the Spack version truncated to the first components. Note that, as with shell variables, you can write these as ``$varname`` diff --git a/lib/spack/docs/contribution_guide.rst b/lib/spack/docs/contribution_guide.rst index 97f181b85b7387..110bea56daf2d6 100644 --- a/lib/spack/docs/contribution_guide.rst +++ b/lib/spack/docs/contribution_guide.rst @@ -184,7 +184,7 @@ Style Tests Spack uses `Flake8 `_ to test for `PEP 8 `_ conformance and -`mypy ` for type checking. PEP 8 is +`mypy `_ for type checking. PEP 8 is a series of style guides for Python that provide suggestions for everything from variable naming to indentation. In order to limit the number of PRs that were mostly style changes, we decided to enforce PEP 8 conformance. Your PR diff --git a/lib/spack/docs/developer_guide.rst b/lib/spack/docs/developer_guide.rst index f538f75206644c..21204ba0778ed0 100644 --- a/lib/spack/docs/developer_guide.rst +++ b/lib/spack/docs/developer_guide.rst @@ -333,13 +333,9 @@ inserting them at different places in the spack code base. Whenever a hook type triggers by way of a function call, we find all the hooks of that type, and run them. -Spack defines hooks by way of a module at ``lib/spack/spack/hooks`` where we can define -types of hooks in the ``__init__.py``, and then python files in that folder -can use hook functions. The files are automatically parsed, so if you write -a new file for some integration (e.g., ``lib/spack/spack/hooks/myintegration.py`` -you can then write hook functions in that file that will be automatically detected, -and run whenever your hook is called. This section will cover the basic kind -of hooks, and how to write them. +Spack defines hooks by way of a module in the ``lib/spack/spack/hooks`` directory. +This module has to be registered in ``__init__.py`` so that Spack is aware of it. +This section will cover the basic kind of hooks, and how to write them. ^^^^^^^^^^^^^^ Types of Hooks diff --git a/lib/spack/docs/environments.rst b/lib/spack/docs/environments.rst index eec185eab89e20..988dd71ba81b92 100644 --- a/lib/spack/docs/environments.rst +++ b/lib/spack/docs/environments.rst @@ -673,6 +673,9 @@ them to the environment. Environments can include files or URLs. File paths can be relative or absolute. URLs include the path to the text for individual files or can be the path to a directory containing configuration files. +Spack supports ``file``, ``http``, ``https`` and ``ftp`` protocols (or +schemes). Spack-specific, environment and user path variables may be +used in these paths. See :ref:`config-file-variables` for more information. ^^^^^^^^^^^^^^^^^^^^^^^^ Configuration precedence @@ -1039,7 +1042,7 @@ file snippet we define a view named ``mpis``, rooted at ``/path/to/view`` in which all projections use the package name, version, and compiler name to determine the path for a given package. This view selects all packages that depend on MPI, and -excludes those built with the PGI compiler at version 18.5. +excludes those built with the GCC compiler at version 18.5. The root specs with their (transitive) link and run type dependencies will be put in the view due to the ``link: all`` option, and the files in the view will be symlinks to the spack install @@ -1053,7 +1056,7 @@ directories. mpis: root: /path/to/view select: [^mpi] - exclude: ['%pgi@18.5'] + exclude: ['%gcc@18.5'] projections: all: '{name}/{version}-{compiler.name}' link: all diff --git a/lib/spack/docs/getting_started.rst b/lib/spack/docs/getting_started.rst index cb8a586e3c94c4..418e84b5cd92dc 100644 --- a/lib/spack/docs/getting_started.rst +++ b/lib/spack/docs/getting_started.rst @@ -35,7 +35,7 @@ A build matrix showing which packages are working on which systems is shown belo .. code-block:: console apt update - apt install build-essential ca-certificates coreutils curl environment-modules gfortran git gpg lsb-release python3 python3-distutils python3-venv unzip zip + apt install bzip2 ca-certificates file g++ gcc gfortran git gzip lsb-release patch python3 tar unzip xz-utils zstd .. tab-item:: RHEL @@ -43,14 +43,14 @@ A build matrix showing which packages are working on which systems is shown belo dnf install epel-release dnf group install "Development Tools" - dnf install curl findutils gcc-gfortran gnupg2 hostname iproute redhat-lsb-core python3 python3-pip python3-setuptools unzip python3-boto3 + dnf install gcc-gfortran redhat-lsb-core python3 unzip .. tab-item:: macOS Brew .. code-block:: console brew update - brew install curl gcc git gnupg zip + brew install gcc git zip ------------ Installation @@ -283,10 +283,6 @@ compilers`` or ``spack compiler list``: intel@14.0.1 intel@13.0.1 intel@12.1.2 intel@10.1 -- clang ------------------------------------------------------- clang@3.4 clang@3.3 clang@3.2 clang@3.1 - -- pgi --------------------------------------------------------- - pgi@14.3-0 pgi@13.2-0 pgi@12.1-0 pgi@10.9-0 pgi@8.0-1 - pgi@13.10-0 pgi@13.1-1 pgi@11.10-0 pgi@10.2-0 pgi@7.1-3 - pgi@13.6-0 pgi@12.8-0 pgi@11.1-0 pgi@9.0-4 pgi@7.0-6 Any of these compilers can be used to build Spack packages. More on how this is done is in :ref:`sec-specs`. @@ -806,65 +802,6 @@ flags to the ``icc`` command: spec: intel@15.0.24.4.9.3 -^^^ -PGI -^^^ - -PGI comes with two sets of compilers for C++ and Fortran, -distinguishable by their names. "Old" compilers: - -.. code-block:: yaml - - cc: /soft/pgi/15.10/linux86-64/15.10/bin/pgcc - cxx: /soft/pgi/15.10/linux86-64/15.10/bin/pgCC - f77: /soft/pgi/15.10/linux86-64/15.10/bin/pgf77 - fc: /soft/pgi/15.10/linux86-64/15.10/bin/pgf90 - -"New" compilers: - -.. code-block:: yaml - - cc: /soft/pgi/15.10/linux86-64/15.10/bin/pgcc - cxx: /soft/pgi/15.10/linux86-64/15.10/bin/pgc++ - f77: /soft/pgi/15.10/linux86-64/15.10/bin/pgfortran - fc: /soft/pgi/15.10/linux86-64/15.10/bin/pgfortran - -Older installations of PGI contains just the old compilers; whereas -newer installations contain the old and the new. The new compiler is -considered preferable, as some packages -(``hdf``) will not build with the old compiler. - -When auto-detecting a PGI compiler, there are cases where Spack will -find the old compilers, when you really want it to find the new -compilers. It is best to check this ``compilers.yaml``; and if the old -compilers are being used, change ``pgf77`` and ``pgf90`` to -``pgfortran``. - -Other issues: - -* There are reports that some packages will not build with PGI, - including ``libpciaccess`` and ``openssl``. A workaround is to - build these packages with another compiler and then use them as - dependencies for PGI-build packages. For example: - - .. code-block:: console - - $ spack install openmpi%pgi ^libpciaccess%gcc - - -* PGI requires a license to use; see :ref:`licensed-compilers` for more - information on installation. - -.. note:: - - It is believed the problem with HDF 4 is that everything is - compiled with the ``F77`` compiler, but at some point some Fortran - 90 code slipped in there. So compilers that can handle both FORTRAN - 77 and Fortran 90 (``gfortran``, ``pgfortran``, etc) are fine. But - compilers specific to one or the other (``pgf77``, ``pgf90``) won't - work. - - ^^^ NAG ^^^ diff --git a/lib/spack/docs/index.rst b/lib/spack/docs/index.rst index e2c7219e7b38f2..accedfee98554d 100644 --- a/lib/spack/docs/index.rst +++ b/lib/spack/docs/index.rst @@ -12,10 +12,6 @@ Spack =================== -.. epigraph:: - - `These are docs for the Spack package manager. For sphere packing, see` `pyspack `_. - Spack is a package management tool designed to support multiple versions and configurations of software on a wide variety of platforms and environments. It was designed for large supercomputing centers, diff --git a/lib/spack/docs/module_file_support.rst b/lib/spack/docs/module_file_support.rst index fad1e414fcaf16..80e3c2ee668427 100644 --- a/lib/spack/docs/module_file_support.rst +++ b/lib/spack/docs/module_file_support.rst @@ -457,11 +457,11 @@ For instance, the following config options, tcl: all: suffixes: - ^python@3.12: 'python-3.12' + ^python@3: 'python{^python.version}' ^openblas: 'openblas' -will add a ``python-3.12`` version string to any packages compiled with -Python matching the spec, ``python@3.12``. This is useful to know which +will add a ``python-3.12.1`` version string to any packages compiled with +Python matching the spec, ``python@3``. This is useful to know which version of Python a set of Python extensions is associated with. Likewise, the ``openblas`` string is attached to any program that has openblas in the spec, most likely via the ``+blas`` variant specification. diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst index a736ff8c793005..a7564c2b039db4 100644 --- a/lib/spack/docs/packaging_guide.rst +++ b/lib/spack/docs/packaging_guide.rst @@ -1267,7 +1267,7 @@ Git fetching supports the following parameters to ``version``: This feature requires ``git`` to be version ``2.25.0`` or later but is useful for large repositories that have separate portions that can be built independently. If paths provided are directories then all the subdirectories and associated files - will also be cloned. + will also be cloned. Only one of ``tag``, ``branch``, or ``commit`` can be used at a time. @@ -1367,8 +1367,8 @@ Submodules git-submodule``. Sparse-Checkout - You can supply ``git_sparse_paths`` at the package or version level to utilize git's - sparse-checkout feature. This will only clone the paths that are specified in the + You can supply ``git_sparse_paths`` at the package or version level to utilize git's + sparse-checkout feature. This will only clone the paths that are specified in the ``git_sparse_paths`` attribute for the package along with the files in the top level directory. This feature allows you to only clone what you need from a large repository. Note that this is a newer feature in git and requries git ``2.25.0`` or greater. @@ -1928,71 +1928,29 @@ to the empty list. String. A URL pointing to license setup instructions for the software. Defaults to the empty string. -For example, let's take a look at the package for the PGI compilers. +For example, let's take a look at the Arm Forge package. .. code-block:: python # Licensing license_required = True - license_comment = "#" - license_files = ["license.dat"] - license_vars = ["PGROUPD_LICENSE_FILE", "LM_LICENSE_FILE"] - license_url = "http://www.pgroup.com/doc/pgiinstall.pdf" - -As you can see, PGI requires a license. Its license manager, FlexNet, uses -the ``#`` symbol to denote a comment. It expects the license file to be -named ``license.dat`` and to be located directly in the installation prefix. -If you would like the installation file to be located elsewhere, simply set -``PGROUPD_LICENSE_FILE`` or ``LM_LICENSE_FILE`` after installation. For -further instructions on installation and licensing, see the URL provided. - -Let's walk through a sample PGI installation to see exactly what Spack is -and isn't capable of. Since PGI does not provide a download URL, it must -be downloaded manually. It can either be added to a mirror or located in -the current directory when ``spack install pgi`` is run. See :ref:`mirrors` -for instructions on setting up a mirror. - -After running ``spack install pgi``, the first thing that will happen is -Spack will create a global license file located at -``$SPACK_ROOT/etc/spack/licenses/pgi/license.dat``. It will then open up the -file using :ref:`your favorite editor `. It will look like -this: - -.. code-block:: sh - - # A license is required to use pgi. - # - # The recommended solution is to store your license key in this global - # license file. After installation, the following symlink(s) will be - # added to point to this file (relative to the installation prefix): - # - # license.dat - # - # Alternatively, use one of the following environment variable(s): - # - # PGROUPD_LICENSE_FILE - # LM_LICENSE_FILE - # - # If you choose to store your license in a non-standard location, you may - # set one of these variable(s) to the full pathname to the license file, or - # port@host if you store your license keys on a dedicated license server. - # You will likely want to set this variable in a module file so that it - # gets loaded every time someone tries to use pgi. - # - # For further information on how to acquire a license, please refer to: - # - # http://www.pgroup.com/doc/pgiinstall.pdf - # - # You may enter your license below. - -You can add your license directly to this file, or tell FlexNet to use a -license stored on a separate license server. Here is an example that -points to a license server called licman1: + license_comment = "#" + license_files = ["licences/Licence"] + license_vars = [ + "ALLINEA_LICENSE_DIR", + "ALLINEA_LICENCE_DIR", + "ALLINEA_LICENSE_FILE", + "ALLINEA_LICENCE_FILE", + ] + license_url = "https://developer.arm.com/documentation/101169/latest/Use-Arm-Licence-Server" -.. code-block:: none +Arm Forge requires a license. Its license manager uses the ``#`` symbol to denote a comment. +It expects the license file to be named ``License`` and to be located in a ``licenses`` directory +in the installation prefix. - SERVER licman1.mcs.anl.gov 00163eb7fba5 27200 - USE_SERVER +If you would like the installation file to be located elsewhere, simply set ``ALLINEA_LICENSE_DIR`` or +one of the other license variables after installation. For further instructions on installation and +licensing, see the URL provided. If your package requires the license to install, you can reference the location of this global license using ``self.global_license_file``. @@ -2392,7 +2350,7 @@ by the ``--jobs`` option: .. code-block:: python :emphasize-lines: 7, 11 :linenos: - + class Xios(Package): ... def install(self, spec, prefix): @@ -2503,15 +2461,14 @@ with. For example, suppose that in the ``libdwarf`` package you write: depends_on("libelf@0.8") -Now ``libdwarf`` will require ``libelf`` at *exactly* version ``0.8``. -You can also specify a requirement for a particular variant or for -specific compiler flags: +Now ``libdwarf`` will require ``libelf`` in the range ``0.8``, which +includes patch versions ``0.8.1``, ``0.8.2``, etc. Apart from version +restrictions, you can also specify variants if this package requires +optional features of the dependency. .. code-block:: python - depends_on("libelf@0.8+debug") - depends_on("libelf debug=True") - depends_on("libelf cppflags='-fPIC'") + depends_on("libelf@0.8 +parser +pic") Both users *and* package authors can use the same spec syntax to refer to different package configurations. Users use the spec syntax on the @@ -2519,46 +2476,82 @@ command line to find installed packages or to install packages with particular constraints, and package authors can use specs to describe relationships between packages. -^^^^^^^^^^^^^^ -Version ranges -^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Specifying backward and forward compatibility +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Although some packages require a specific version for their dependencies, -most can be built with a range of versions. For example, if you are -writing a package for a legacy Python module that only works with Python -2.4 through 2.6, this would look like: +Packages are often compatible with a range of versions of their +dependencies. This is typically referred to as backward and forward +compatibility. Spack allows you to specify this in the ``depends_on`` +directive using version ranges. + +**Backwards compatibility** means that the package requires at least a +certain version of its dependency: .. code-block:: python - depends_on("python@2.4:2.6") + depends_on("python@3.10:") + +In this case, the package requires Python 3.10 or newer. -Version ranges in Spack are *inclusive*, so ``2.4:2.6`` means any version -greater than or equal to ``2.4`` and up to and including any ``2.6.x``. If -you want to specify that a package works with any version of Python 3 (or -higher), this would look like: +Commonly, packages drop support for older versions of a dependency as +they release new versions. In Spack you can conveniently add every +backward compatibility rule as a separate line: .. code-block:: python - depends_on("python@3:") + # backward compatibility with Python + depends_on("python@3.8:") + depends_on("python@3.9:", when="@1.2:") + depends_on("python@3.10:", when="@1.4:") + +This means that in general we need Python 3.8 or newer; from version +1.2 onwards we need Python 3.9 or newer; from version 1.4 onwards we +need Python 3.10 or newer. Notice that it's fine to have overlapping +ranges in the ``when`` clauses. -Here we leave out the upper bound. If you want to say that a package -requires Python 2, you can similarly leave out the lower bound: +**Forward compatibility** means that the package requires at most a +certain version of its dependency. Forward compatibility rules are +necessary when there are breaking changes in the dependency that the +package cannot handle. In Spack we often add forward compatibility +bounds only at the time a new, breaking version of a dependency is +released. As with backward compatibility, it is typical to see a list +of forward compatibility bounds in a package file as seperate lines: .. code-block:: python - depends_on("python@:2") + # forward compatibility with Python + depends_on("python@:3.12", when="@:1.10") + depends_on("python@:3.13", when="@:1.12") + +Notice how the ``:`` now appears before the version number both in the +dependency and in the ``when`` clause. This tells Spack that in general +we need Python 3.13 or older up to version ``1.12.x``, and up to version +``1.10.x`` we need Python 3.12 or older. Said differently, forward compatibility +with Python 3.13 was added in version 1.11, while version 1.13 added forward +compatibility with Python 3.14. + +Notice that a version range ``@:3.12`` includes *any* patch version +number ``3.12.x``, which is often useful when specifying forward compatibility +bounds. -Notice that we didn't use ``@:3``. Version ranges are *inclusive*, so -``@:3`` means "up to and including any 3.x version". +So far we have seen open-ended version ranges, which is by far the most +common use case. It is also possible to specify both a lower and an upper bound +on the version of a dependency, like this: -You can also simply write +.. code-block:: python + + depends_on("python@3.10:3.12") + +There is short syntax to specify that a package is compatible with say any +``3.x`` version: .. code-block:: python - depends_on("python@2.7") + depends_on("python@3") -to tell Spack that the package needs Python 2.7.x. This is equivalent to -``@2.7:2.7``. +The above is equivalent to ``depends_on("python@3:3")``, which means at least +Python version 3 and at most any version ``3.x.y``. In very rare cases, you may need to specify an exact version, for example if you need to distinguish between ``3.2`` and ``3.2.1``: @@ -2932,9 +2925,9 @@ make sense during the build phase may not be needed at runtime, and vice versa. it makes sense to let a dependency set the environment variables for its dependents. To allow all this, Spack provides four different methods that can be overridden in a package: -1. :meth:`setup_build_environment ` +1. :meth:`setup_build_environment ` 2. :meth:`setup_run_environment ` -3. :meth:`setup_dependent_build_environment ` +3. :meth:`setup_dependent_build_environment ` 4. :meth:`setup_dependent_run_environment ` The Qt package, for instance, uses this call: @@ -5385,7 +5378,7 @@ by build recipes. Examples of checking :ref:`variant settings ` and determine whether it needs to also set up build dependencies (see :ref:`test-build-tests`). -The ``MyPackage`` package below provides two basic test examples: +The ``MyPackage`` package below provides two basic test examples: ``test_example`` and ``test_example2``. The first runs the installed ``example`` and ensures its output contains an expected string. The second runs ``example2`` without checking output so is only concerned with confirming @@ -5702,7 +5695,7 @@ subdirectory of the installation prefix. They are automatically copied to the appropriate relative paths under the test stage directory prior to executing stand-alone tests. -.. tip:: +.. tip:: *Perform test-related conversions once when copying files.* @@ -7078,6 +7071,46 @@ might write: CXXFLAGS += -I$DWARF_PREFIX/include CXXFLAGS += -L$DWARF_PREFIX/lib +.. _abi_compatibility: + +---------------------------- +Specifying ABI Compatibility +---------------------------- + +Packages can include ABI-compatibility information using the +``can_splice`` directive. For example, if ``Foo`` version 1.1 can +always replace version 1.0, then the package could have: + +.. code-block:: python + + can_splice("foo@1.0", when="@1.1") + +For virtual packages, packages can also specify ABI-compabitiliby with +other packages providing the same virtual. For example, ``zlib-ng`` +could specify: + +.. code-block:: python + + can_splice("zlib@1.3.1", when="@2.2+compat") + +Some packages have ABI-compatibility that is dependent on matching +variant values, either for all variants or for some set of +ABI-relevant variants. In those cases, it is not necessary to specify +the full combinatorial explosion. The ``match_variants`` keyword can +cover all single-value variants. + +.. code-block:: python + + can_splice("foo@1.1", when="@1.2", match_variants=["bar"]) # any value for bar as long as they're the same + can_splice("foo@1.2", when="@1.3", match_variants="*") # any variant values if all single-value variants match + +The concretizer will use ABI compatibility to determine automatic +splices when :ref:`automatic splicing` is enabled. + +.. note:: + + The ``can_splice`` directive is experimental, and may be replaced + by a higher-level interface in future versions of Spack. .. _package_class_structure: diff --git a/lib/spack/docs/pipelines.rst b/lib/spack/docs/pipelines.rst index bfcf1572d79e9a..67c8a065aab6c2 100644 --- a/lib/spack/docs/pipelines.rst +++ b/lib/spack/docs/pipelines.rst @@ -59,7 +59,7 @@ Functional Example ------------------ The simplest fully functional standalone example of a working pipeline can be -examined live at this example `project `_ +examined live at this example `project `_ on gitlab.com. Here's the ``.gitlab-ci.yml`` file from that example that builds and runs the @@ -67,39 +67,46 @@ pipeline: .. code-block:: yaml - stages: [generate, build] + stages: [ "generate", "build" ] variables: - SPACK_REPO: https://github.com/scottwittenburg/spack.git - SPACK_REF: pipelines-reproducible-builds + SPACK_REPOSITORY: "https://github.com/spack/spack.git" + SPACK_REF: "develop-2024-10-06" + SPACK_USER_CONFIG_PATH: ${CI_PROJECT_DIR} + SPACK_BACKTRACE: 1 generate-pipeline: - stage: generate tags: - - docker + - saas-linux-small-amd64 + stage: generate image: - name: ghcr.io/scottwittenburg/ecpe4s-ubuntu18.04-runner-x86_64:2020-09-01 - entrypoint: [""] - before_script: - - git clone ${SPACK_REPO} - - pushd spack && git checkout ${SPACK_REF} && popd - - . "./spack/share/spack/setup-env.sh" + name: ghcr.io/spack/ubuntu20.04-runner-x86_64:2023-01-01 script: + - git clone ${SPACK_REPOSITORY} + - cd spack && git checkout ${SPACK_REF} && cd ../ + - . "./spack/share/spack/setup-env.sh" + - spack --version - spack env activate --without-view . - - spack -d ci generate + - spack -d -v --color=always + ci generate + --check-index-only --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" - --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/pipeline.yml" + --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml" artifacts: paths: - "${CI_PROJECT_DIR}/jobs_scratch_dir" - build-jobs: + build-pipeline: stage: build trigger: include: - - artifact: "jobs_scratch_dir/pipeline.yml" + - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml job: generate-pipeline strategy: depend + needs: + - artifacts: True + job: generate-pipeline + The key thing to note above is that there are two jobs: The first job to run, ``generate-pipeline``, runs the ``spack ci generate`` command to generate a @@ -114,82 +121,93 @@ And here's the spack environment built by the pipeline represented as a spack: view: false concretizer: - unify: false + unify: true + reuse: false definitions: - pkgs: - zlib - - bzip2 - - arch: - - '%gcc@7.5.0 arch=linux-ubuntu18.04-x86_64' + - bzip2 ~debug + - compiler: + - '%gcc' specs: - matrix: - - $pkgs - - - $arch - - mirrors: { "mirror": "s3://spack-public/mirror" } + - - $compiler ci: - enable-artifacts-buildcache: True - rebuild-index: False + target: gitlab + pipeline-gen: - any-job: - before_script: - - git clone ${SPACK_REPO} - - pushd spack && git checkout ${SPACK_CHECKOUT_VERSION} && popd - - . "./spack/share/spack/setup-env.sh" - - build-job: - tags: [docker] + tags: + - saas-linux-small-amd64 image: - name: ghcr.io/scottwittenburg/ecpe4s-ubuntu18.04-runner-x86_64:2020-09-01 - entrypoint: [""] - + name: ghcr.io/spack/ubuntu20.04-runner-x86_64:2023-01-01 + before_script: + - git clone ${SPACK_REPOSITORY} + - cd spack && git checkout ${SPACK_REF} && cd ../ + - . "./spack/share/spack/setup-env.sh" + - spack --version + - export SPACK_USER_CONFIG_PATH=${CI_PROJECT_DIR} + - spack config blame mirrors -The elements of this file important to spack ci pipelines are described in more -detail below, but there are a couple of things to note about the above working -example: .. note:: - There is no ``script`` attribute specified for here. The reason for this is - Spack CI will automatically generate reasonable default scripts. More - detail on what is in these scripts can be found below. - - Also notice the ``before_script`` section. It is required when using any of the - default scripts to source the ``setup-env.sh`` script in order to inform - the default scripts where to find the ``spack`` executable. - -Normally ``enable-artifacts-buildcache`` is not recommended in production as it -results in large binary artifacts getting transferred back and forth between -gitlab and the runners. But in this example on gitlab.com where there is no -shared, persistent file system, and where no secrets are stored for giving -permission to write to an S3 bucket, ``enabled-buildcache-artifacts`` is the only -way to propagate binaries from jobs to their dependents. - -Also, it is usually a good idea to let the pipeline generate a final "rebuild the -buildcache index" job, so that subsequent pipeline generation can quickly determine -which specs are up to date and which need to be rebuilt (it's a good idea for other -reasons as well, but those are out of scope for this discussion). In this case we -have disabled it (using ``rebuild-index: False``) because the index would only be -generated in the artifacts mirror anyway, and consequently would not be available -during subsequent pipeline runs. + The use of ``reuse: false`` in spack environments used for pipelines is + almost always what you want, as without it your pipelines will not rebuild + packages even if package hashes have changed. This is due to the concretizer + strongly preferring known hashes when ``reuse: true``. + +The ``ci`` section in the above environment file contains the bare minimum +configuration required for ``spack ci generate`` to create a working pipeline. +The ``target: gitlab`` tells spack that the desired pipeline output is for +gitlab. However, this isn't strictly required, as currently gitlab is the +only possible output format for pipelines. The ``pipeline-gen`` section +contains the key information needed to specify attributes for the generated +jobs. Notice that it contains a list which has only a single element in +this case. In real pipelines it will almost certainly have more elements, +and in those cases, order is important: spack starts at the bottom of the +list and works upwards when applying attributes. + +But in this simple case, we use only the special key ``any-job`` to +indicate that spack should apply the specified attributes (``tags``, ``image``, +and ``before_script``) to any job it generates. This includes jobs for +building/pushing all packages, a ``rebuild-index`` job at the end of the +pipeline, as well as any ``noop`` jobs that might be needed by gitlab when +no rebuilds are required. + +Something to note is that in this simple case, we rely on spack to +generate a reasonable script for the package build jobs (it just creates +a script that invokes ``spack ci rebuild``). + +Another thing to note is the use of the ``SPACK_USER_CONFIG_DIR`` environment +variable in any generated jobs. The purpose of this is to make spack +aware of one final file in the example, the one that contains the mirror +configuration. This file, ``mirrors.yaml`` looks like this: -.. note:: - With the addition of reproducible builds (#22887) a previously working - pipeline will require some changes: +.. code-block:: yaml - * In the build-jobs, the environment location changed. - This will typically show as a ``KeyError`` in the failing job. Be sure to - point to ``${SPACK_CONCRETE_ENV_DIR}``. + mirrors: + buildcache-destination: + url: oci://registry.gitlab.com/spack/pipeline-quickstart + binary: true + access_pair: + id_variable: CI_REGISTRY_USER + secret_variable: CI_REGISTRY_PASSWORD - * When using ``include`` in your environment, be sure to make the included - files available in the build jobs. This means adding those files to the - artifact directory. Those files will also be missing in the reproducibility - artifact. - * Because the location of the environment changed, including files with - relative path may have to be adapted to work both in the project context - (generation job) and in the concrete env dir context (build job). +Note the name of the mirror is ``buildcache-destination``, which is required +as of Spack 0.23 (see below for more information). The mirror url simply +points to the container registry associated with the project, while +``id_variable`` and ``secret_variable`` refer to to environment variables +containing the access credentials for the mirror. + +When spack builds packages for this example project, they will be pushed to +the project container registry, where they will be available for subsequent +jobs to install as dependencies, or for other pipelines to use to build runnable +container images. ----------------------------------- Spack commands supporting pipelines @@ -417,15 +435,6 @@ configuration with a ``script`` attribute. Specifying a signing job without a sc does not create a signing job and the job configuration attributes will be ignored. Signing jobs are always assigned the runner tags ``aws``, ``protected``, and ``notary``. -^^^^^^^^^^^^^^^^^ -Cleanup (cleanup) -^^^^^^^^^^^^^^^^^ - -When using ``temporary-storage-url-prefix`` the cleanup job will destroy the mirror -created for the associated Gitlab pipeline. Cleanup jobs do not allow modifying the -script, but do expect that the spack command is in the path and require a -``before_script`` to be specified that sources the ``setup-env.sh`` script. - .. _noop_jobs: ^^^^^^^^^^^^ @@ -592,6 +601,77 @@ the attributes will be merged starting from the bottom match going up to the top In the case that no match is found in a submapping section, no additional attributes will be applied. + +^^^^^^^^^^^^^^^^^^^^^^^^ +Dynamic Mapping Sections +^^^^^^^^^^^^^^^^^^^^^^^^ + +For large scale CI where cost optimization is required, dynamic mapping allows for the use of real-time +mapping schemes served by a web service. This type of mapping does not support the ``-remove`` type +behavior, but it does follow the rest of the merge rules for configurations. + +The dynamic mapping service needs to implement a single REST API interface for getting +requests ``GET [:PORT][/PATH]?spec=``. + +example request. + +.. code-block:: + + https://my-dyn-mapping.spack.io/allocation?spec=zlib-ng@2.1.6 +compat+opt+shared+pic+new_strategies arch=linux-ubuntu20.04-x86_64_v3%gcc@12.0.0 + + +With an example response the updates kubernetes request variables, overrides the max retries for gitlab, +and prepends a note about the modifications made by the my-dyn-mapping.spack.io service. + +.. code-block:: + + 200 OK + + { + "variables": + { + "KUBERNETES_CPU_REQUEST": "500m", + "KUBERNETES_MEMORY_REQUEST": "2G", + }, + "retry": { "max:": "1"} + "script+:": + [ + "echo \"Job modified by my-dyn-mapping.spack.io\"" + ] + } + + +The ci.yaml configuration section takes the URL endpoint as well as a number of options to configure how responses are handled. + +It is possible to specify a list of allowed and ignored configuration attributes under ``allow`` and ``ignore`` +respectively. It is also possible to configure required attributes under ``required`` section. + +Options to configure the client timeout and SSL verification using the ``timeout`` and ``verify_ssl`` options. +By default, the ``timeout`` is set to the option in ``config:timeout`` and ``veryify_ssl`` is set the the option in ``config::verify_ssl``. + +Passing header parameters to the request can be achieved through the ``header`` section. The values of the variables passed to the +header may be environment variables that are expanded at runtime, such as a private token configured on the runner. + +Here is an example configuration pointing to ``my-dyn-mapping.spack.io/allocation``. + + +.. code-block:: yaml + + ci: + - dynamic-mapping: + endpoint: my-dyn-mapping.spack.io/allocation + timeout: 10 + verify_ssl: True + header: + PRIVATE_TOKEN: ${MY_PRIVATE_TOKEN} + MY_CONFIG: "fuzz_allocation:false" + allow: + - variables + ignore: + - script + require: [] + + ^^^^^^^^^^^^^ Bootstrapping ^^^^^^^^^^^^^ @@ -670,15 +750,6 @@ environment/stack file, and in that case no bootstrapping will be done (only the specs will be staged for building) and the runners will be expected to already have all needed compilers installed and configured for spack to use. -^^^^^^^^^^^^^^^^^^^ -Pipeline Buildcache -^^^^^^^^^^^^^^^^^^^ - -The ``enable-artifacts-buildcache`` key -takes a boolean and determines whether the pipeline uses artifacts to store and -pass along the buildcaches from one stage to the next (the default if you don't -provide this option is ``False``). - ^^^^^^^^^^^^^^^^ Broken Specs URL ^^^^^^^^^^^^^^^^ diff --git a/lib/spack/docs/requirements.txt b/lib/spack/docs/requirements.txt index a8f853e3cf1a36..a6d86480939240 100644 --- a/lib/spack/docs/requirements.txt +++ b/lib/spack/docs/requirements.txt @@ -1,13 +1,13 @@ -sphinx==7.4.7 +sphinx==8.1.3 sphinxcontrib-programoutput==0.17 sphinx_design==0.6.1 -sphinx-rtd-theme==2.0.0 -python-levenshtein==0.25.1 +sphinx-rtd-theme==3.0.2 +python-levenshtein==0.26.1 docutils==0.21.2 pygments==2.18.0 urllib3==2.2.3 pytest==8.3.3 isort==5.13.2 -black==24.8.0 +black==24.10.0 flake8==7.1.1 mypy==1.11.2 diff --git a/lib/spack/env/cc b/lib/spack/env/cc index ccfc14bb89dc53..88969d3f3097f7 100755 --- a/lib/spack/env/cc +++ b/lib/spack/env/cc @@ -101,10 +101,9 @@ setsep() { esac } -# prepend LISTNAME ELEMENT [SEP] +# prepend LISTNAME ELEMENT # -# Prepend ELEMENT to the list stored in the variable LISTNAME, -# assuming the list is separated by SEP. +# Prepend ELEMENT to the list stored in the variable LISTNAME. # Handles empty lists and single-element lists. prepend() { varname="$1" @@ -238,6 +237,36 @@ esac } " +# path_list functions. Path_lists have 3 parts: spack_store_, and system_, +# which are used to prioritize paths when assembling the final command line. + +# init_path_lists LISTNAME +# Set , spack_store_, and system_ to "". +init_path_lists() { + eval "spack_store_$1=\"\"" + eval "$1=\"\"" + eval "system_$1=\"\"" +} + +# assign_path_lists LISTNAME1 LISTNAME2 +# Copy contents of LISTNAME2 into LISTNAME1, for each path_list prefix. +assign_path_lists() { + eval "spack_store_$1=\"\${spack_store_$2}\"" + eval "$1=\"\${$2}\"" + eval "system_$1=\"\${system_$2}\"" +} + +# append_path_lists LISTNAME ELT +# Append the provided ELT to the appropriate list, based on the result of path_order(). +append_path_lists() { + path_order "$2" + case $? in + 0) eval "append spack_store_$1 \"\$2\"" ;; + 1) eval "append $1 \"\$2\"" ;; + 2) eval "append system_$1 \"\$2\"" ;; + esac +} + # Check if optional parameters are defined # If we aren't asking for debug flags, don't add them if [ -z "${SPACK_ADD_DEBUG_FLAGS:-}" ]; then @@ -470,12 +499,7 @@ input_command="$*" parse_Wl() { while [ $# -ne 0 ]; do if [ "$wl_expect_rpath" = yes ]; then - path_order "$1" - case $? in - 0) append return_spack_store_rpath_dirs_list "$1" ;; - 1) append return_rpath_dirs_list "$1" ;; - 2) append return_system_rpath_dirs_list "$1" ;; - esac + append_path_lists return_rpath_dirs_list "$1" wl_expect_rpath=no else case "$1" in @@ -484,24 +508,14 @@ parse_Wl() { if [ -z "$arg" ]; then shift; continue fi - path_order "$arg" - case $? in - 0) append return_spack_store_rpath_dirs_list "$arg" ;; - 1) append return_rpath_dirs_list "$arg" ;; - 2) append return_system_rpath_dirs_list "$arg" ;; - esac + append_path_lists return_rpath_dirs_list "$arg" ;; --rpath=*) arg="${1#--rpath=}" if [ -z "$arg" ]; then shift; continue fi - path_order "$arg" - case $? in - 0) append return_spack_store_rpath_dirs_list "$arg" ;; - 1) append return_rpath_dirs_list "$arg" ;; - 2) append return_system_rpath_dirs_list "$arg" ;; - esac + append_path_lists return_rpath_dirs_list "$arg" ;; -rpath|--rpath) wl_expect_rpath=yes @@ -509,8 +523,7 @@ parse_Wl() { "$dtags_to_strip") ;; -Wl) - # Nested -Wl,-Wl means we're in NAG compiler territory, we don't support - # it. + # Nested -Wl,-Wl means we're in NAG compiler territory. We don't support it. return 1 ;; *) @@ -529,21 +542,10 @@ categorize_arguments() { return_other_args_list="" return_isystem_was_used="" - return_isystem_spack_store_include_dirs_list="" - return_isystem_system_include_dirs_list="" - return_isystem_include_dirs_list="" - - return_spack_store_include_dirs_list="" - return_system_include_dirs_list="" - return_include_dirs_list="" - - return_spack_store_lib_dirs_list="" - return_system_lib_dirs_list="" - return_lib_dirs_list="" - - return_spack_store_rpath_dirs_list="" - return_system_rpath_dirs_list="" - return_rpath_dirs_list="" + init_path_lists return_isystem_include_dirs_list + init_path_lists return_include_dirs_list + init_path_lists return_lib_dirs_list + init_path_lists return_rpath_dirs_list # Global state for keeping track of -Wl,-rpath -Wl,/path wl_expect_rpath=no @@ -609,32 +611,17 @@ categorize_arguments() { arg="${1#-isystem}" return_isystem_was_used=true if [ -z "$arg" ]; then shift; arg="$1"; fi - path_order "$arg" - case $? in - 0) append return_isystem_spack_store_include_dirs_list "$arg" ;; - 1) append return_isystem_include_dirs_list "$arg" ;; - 2) append return_isystem_system_include_dirs_list "$arg" ;; - esac + append_path_lists return_isystem_include_dirs_list "$arg" ;; -I*) arg="${1#-I}" if [ -z "$arg" ]; then shift; arg="$1"; fi - path_order "$arg" - case $? in - 0) append return_spack_store_include_dirs_list "$arg" ;; - 1) append return_include_dirs_list "$arg" ;; - 2) append return_system_include_dirs_list "$arg" ;; - esac + append_path_lists return_include_dirs_list "$arg" ;; -L*) arg="${1#-L}" if [ -z "$arg" ]; then shift; arg="$1"; fi - path_order "$arg" - case $? in - 0) append return_spack_store_lib_dirs_list "$arg" ;; - 1) append return_lib_dirs_list "$arg" ;; - 2) append return_system_lib_dirs_list "$arg" ;; - esac + append_path_lists return_lib_dirs_list "$arg" ;; -l*) # -loopopt=0 is generated erroneously in autoconf <= 2.69, @@ -667,32 +654,17 @@ categorize_arguments() { break elif [ "$xlinker_expect_rpath" = yes ]; then # Register the path of -Xlinker -rpath -Xlinker - path_order "$1" - case $? in - 0) append return_spack_store_rpath_dirs_list "$1" ;; - 1) append return_rpath_dirs_list "$1" ;; - 2) append return_system_rpath_dirs_list "$1" ;; - esac + append_path_lists return_rpath_dirs_list "$1" xlinker_expect_rpath=no else case "$1" in -rpath=*) arg="${1#-rpath=}" - path_order "$arg" - case $? in - 0) append return_spack_store_rpath_dirs_list "$arg" ;; - 1) append return_rpath_dirs_list "$arg" ;; - 2) append return_system_rpath_dirs_list "$arg" ;; - esac + append_path_lists return_rpath_dirs_list "$arg" ;; --rpath=*) arg="${1#--rpath=}" - path_order "$arg" - case $? in - 0) append return_spack_store_rpath_dirs_list "$arg" ;; - 1) append return_rpath_dirs_list "$arg" ;; - 2) append return_system_rpath_dirs_list "$arg" ;; - esac + append_path_lists return_rpath_dirs_list "$arg" ;; -rpath|--rpath) xlinker_expect_rpath=yes @@ -709,7 +681,36 @@ categorize_arguments() { "$dtags_to_strip") ;; *) - append return_other_args_list "$1" + # if mode is not ld, we can just add to other args + if [ "$mode" != "ld" ]; then + append return_other_args_list "$1" + shift + continue + fi + + # if we're in linker mode, we need to parse raw RPATH args + case "$1" in + -rpath=*) + arg="${1#-rpath=}" + append_path_lists return_rpath_dirs_list "$arg" + ;; + --rpath=*) + arg="${1#--rpath=}" + append_path_lists return_rpath_dirs_list "$arg" + ;; + -rpath|--rpath) + if [ $# -eq 1 ]; then + # -rpath without value: let the linker raise an error. + append return_other_args_list "$1" + break + fi + shift + append_path_lists return_rpath_dirs_list "$1" + ;; + *) + append return_other_args_list "$1" + ;; + esac ;; esac shift @@ -731,21 +732,10 @@ categorize_arguments() { categorize_arguments "$@" -spack_store_include_dirs_list="$return_spack_store_include_dirs_list" -system_include_dirs_list="$return_system_include_dirs_list" -include_dirs_list="$return_include_dirs_list" - -spack_store_lib_dirs_list="$return_spack_store_lib_dirs_list" -system_lib_dirs_list="$return_system_lib_dirs_list" -lib_dirs_list="$return_lib_dirs_list" - -spack_store_rpath_dirs_list="$return_spack_store_rpath_dirs_list" -system_rpath_dirs_list="$return_system_rpath_dirs_list" -rpath_dirs_list="$return_rpath_dirs_list" - -isystem_spack_store_include_dirs_list="$return_isystem_spack_store_include_dirs_list" -isystem_system_include_dirs_list="$return_isystem_system_include_dirs_list" -isystem_include_dirs_list="$return_isystem_include_dirs_list" +assign_path_lists isystem_include_dirs_list return_isystem_include_dirs_list +assign_path_lists include_dirs_list return_include_dirs_list +assign_path_lists lib_dirs_list return_lib_dirs_list +assign_path_lists rpath_dirs_list return_rpath_dirs_list isystem_was_used="$return_isystem_was_used" other_args_list="$return_other_args_list" @@ -821,21 +811,10 @@ IFS="$lsep" categorize_arguments $spack_flags_list unset IFS -spack_flags_isystem_spack_store_include_dirs_list="$return_isystem_spack_store_include_dirs_list" -spack_flags_isystem_system_include_dirs_list="$return_isystem_system_include_dirs_list" -spack_flags_isystem_include_dirs_list="$return_isystem_include_dirs_list" - -spack_flags_spack_store_include_dirs_list="$return_spack_store_include_dirs_list" -spack_flags_system_include_dirs_list="$return_system_include_dirs_list" -spack_flags_include_dirs_list="$return_include_dirs_list" - -spack_flags_spack_store_lib_dirs_list="$return_spack_store_lib_dirs_list" -spack_flags_system_lib_dirs_list="$return_system_lib_dirs_list" -spack_flags_lib_dirs_list="$return_lib_dirs_list" - -spack_flags_spack_store_rpath_dirs_list="$return_spack_store_rpath_dirs_list" -spack_flags_system_rpath_dirs_list="$return_system_rpath_dirs_list" -spack_flags_rpath_dirs_list="$return_rpath_dirs_list" +assign_path_lists spack_flags_isystem_include_dirs_list return_isystem_include_dirs_list +assign_path_lists spack_flags_include_dirs_list return_include_dirs_list +assign_path_lists spack_flags_lib_dirs_list return_lib_dirs_list +assign_path_lists spack_flags_rpath_dirs_list return_rpath_dirs_list spack_flags_isystem_was_used="$return_isystem_was_used" spack_flags_other_args_list="$return_other_args_list" @@ -894,7 +873,7 @@ esac case "$mode" in cpp|cc|as|ccld) if [ "$spack_flags_isystem_was_used" = "true" ] || [ "$isystem_was_used" = "true" ]; then - extend isystem_spack_store_include_dirs_list SPACK_STORE_INCLUDE_DIRS + extend spack_store_isystem_include_dirs_list SPACK_STORE_INCLUDE_DIRS extend isystem_include_dirs_list SPACK_INCLUDE_DIRS else extend spack_store_include_dirs_list SPACK_STORE_INCLUDE_DIRS @@ -910,64 +889,63 @@ args_list="$flags_list" # Include search paths partitioned by (in store, non-sytem, system) # NOTE: adding ${lsep} to the prefix here turns every added element into two -extend args_list spack_flags_spack_store_include_dirs_list -I +extend args_list spack_store_spack_flags_include_dirs_list -I extend args_list spack_store_include_dirs_list -I extend args_list spack_flags_include_dirs_list -I extend args_list include_dirs_list -I -extend args_list spack_flags_isystem_spack_store_include_dirs_list "-isystem${lsep}" -extend args_list isystem_spack_store_include_dirs_list "-isystem${lsep}" +extend args_list spack_store_spack_flags_isystem_include_dirs_list "-isystem${lsep}" +extend args_list spack_store_isystem_include_dirs_list "-isystem${lsep}" extend args_list spack_flags_isystem_include_dirs_list "-isystem${lsep}" extend args_list isystem_include_dirs_list "-isystem${lsep}" -extend args_list spack_flags_system_include_dirs_list -I +extend args_list system_spack_flags_include_dirs_list -I extend args_list system_include_dirs_list -I -extend args_list spack_flags_isystem_system_include_dirs_list "-isystem${lsep}" -extend args_list isystem_system_include_dirs_list "-isystem${lsep}" +extend args_list system_spack_flags_isystem_include_dirs_list "-isystem${lsep}" +extend args_list system_isystem_include_dirs_list "-isystem${lsep}" # Library search paths partitioned by (in store, non-sytem, system) -extend args_list spack_flags_spack_store_lib_dirs_list "-L" +extend args_list spack_store_spack_flags_lib_dirs_list "-L" extend args_list spack_store_lib_dirs_list "-L" extend args_list spack_flags_lib_dirs_list "-L" extend args_list lib_dirs_list "-L" -extend args_list spack_flags_system_lib_dirs_list "-L" +extend args_list system_spack_flags_lib_dirs_list "-L" extend args_list system_lib_dirs_list "-L" # RPATHs arguments +rpath_prefix="" case "$mode" in ccld) if [ -n "$dtags_to_add" ] ; then append args_list "$linker_arg$dtags_to_add" fi - extend args_list spack_flags_spack_store_rpath_dirs_list "$rpath" - extend args_list spack_store_rpath_dirs_list "$rpath" - - extend args_list spack_flags_rpath_dirs_list "$rpath" - extend args_list rpath_dirs_list "$rpath" - - extend args_list spack_flags_system_rpath_dirs_list "$rpath" - extend args_list system_rpath_dirs_list "$rpath" + rpath_prefix="$rpath" ;; ld) if [ -n "$dtags_to_add" ] ; then append args_list "$dtags_to_add" fi - extend args_list spack_flags_spack_store_rpath_dirs_list "-rpath${lsep}" - extend args_list spack_store_rpath_dirs_list "-rpath${lsep}" - - extend args_list spack_flags_rpath_dirs_list "-rpath${lsep}" - extend args_list rpath_dirs_list "-rpath${lsep}" - - extend args_list spack_flags_system_rpath_dirs_list "-rpath${lsep}" - extend args_list system_rpath_dirs_list "-rpath${lsep}" + rpath_prefix="-rpath${lsep}" ;; esac +# if mode is ccld or ld, extend RPATH lists with the prefix determined above +if [ -n "$rpath_prefix" ]; then + extend args_list spack_store_spack_flags_rpath_dirs_list "$rpath_prefix" + extend args_list spack_store_rpath_dirs_list "$rpath_prefix" + + extend args_list spack_flags_rpath_dirs_list "$rpath_prefix" + extend args_list rpath_dirs_list "$rpath_prefix" + + extend args_list system_spack_flags_rpath_dirs_list "$rpath_prefix" + extend args_list system_rpath_dirs_list "$rpath_prefix" +fi + # Other arguments from the input command extend args_list other_args_list extend args_list spack_flags_other_args_list diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py index ec7cc13c7d4237..bc70f5aa6e7499 100644 --- a/lib/spack/llnl/util/filesystem.py +++ b/lib/spack/llnl/util/filesystem.py @@ -20,11 +20,23 @@ import tempfile from contextlib import contextmanager from itertools import accumulate -from typing import Callable, Iterable, List, Match, Optional, Tuple, Union +from typing import ( + Callable, + Deque, + Dict, + Iterable, + List, + Match, + Optional, + Sequence, + Set, + Tuple, + Union, +) import llnl.util.symlink from llnl.util import tty -from llnl.util.lang import dedupe, memoized +from llnl.util.lang import dedupe, fnmatch_translate_multiple, memoized from llnl.util.symlink import islink, readlink, resolve_link_target_relative_to_the_link, symlink from ..path import path_to_os_path, system_path_filter @@ -85,6 +97,8 @@ "visit_directory_tree", ] +Path = Union[str, pathlib.Path] + if sys.version_info < (3, 7, 4): # monkeypatch shutil.copystat to fix PermissionError when copying read-only # files on Lustre when using Python < 3.7.4 @@ -1673,105 +1687,203 @@ def find_first(root: str, files: Union[Iterable[str], str], bfs_depth: int = 2) return FindFirstFile(root, *files, bfs_depth=bfs_depth).find() -def find(root, files, recursive=True): - """Search for ``files`` starting from the ``root`` directory. - - Like GNU/BSD find but written entirely in Python. - - Examples: - - .. code-block:: console - - $ find /usr -name python - - is equivalent to: - - >>> find('/usr', 'python') - - .. code-block:: console - - $ find /usr/local/bin -maxdepth 1 -name python - - is equivalent to: - - >>> find('/usr/local/bin', 'python', recursive=False) +def find( + root: Union[Path, Sequence[Path]], + files: Union[str, Sequence[str]], + recursive: bool = True, + max_depth: Optional[int] = None, +) -> List[str]: + """Finds all files matching the patterns from ``files`` starting from ``root``. This function + returns a deterministic result for the same input and directory structure when run multiple + times. Symlinked directories are followed, and unique directories are searched only once. Each + matching file is returned only once at lowest depth in case multiple paths exist due to + symlinked directories. Accepts any glob characters accepted by fnmatch: ========== ==================================== Pattern Meaning ========== ==================================== - ``*`` matches everything + ``*`` matches one or more characters ``?`` matches any single character ``[seq]`` matches any character in ``seq`` ``[!seq]`` matches any character not in ``seq`` ========== ==================================== + Examples: + + >>> find("/usr", "*.txt", recursive=True, max_depth=2) + + finds all files with the extension ``.txt`` in the directory ``/usr`` and subdirectories up to + depth 2. + + >>> find(["/usr", "/var"], ["*.txt", "*.log"], recursive=True) + + finds all files with the extension ``.txt`` or ``.log`` in the directories ``/usr`` and + ``/var`` at any depth. + + >>> find("/usr", "GL/*.h", recursive=True) + + finds all header files in a directory GL at any depth in the directory ``/usr``. + Parameters: - root (str): The root directory to start searching from - files (str or collections.abc.Sequence): Library name(s) to search for - recursive (bool): if False search only root folder, - if True descends top-down from the root. Defaults to True. + root: One or more root directories to start searching from + files: One or more filename patterns to search for + recursive: if False search only root, if True descends from roots. Defaults to True. + max_depth: if set, don't search below this depth. Cannot be set if recursive is False - Returns: - list: The files that have been found + Returns a list of absolute, matching file paths. """ + if isinstance(root, (str, pathlib.Path)): + root = [root] + elif not isinstance(root, collections.abc.Sequence): + raise TypeError(f"'root' arg must be a path or a sequence of paths, not '{type(root)}']") + if isinstance(files, str): files = [files] + elif not isinstance(files, collections.abc.Sequence): + raise TypeError(f"'files' arg must be str or a sequence of str, not '{type(files)}']") - if recursive: - tty.debug(f"Find (recursive): {root} {str(files)}") - result = _find_recursive(root, files) - else: - tty.debug(f"Find (not recursive): {root} {str(files)}") - result = _find_non_recursive(root, files) + # If recursive is false, max_depth can only be None or 0 + if max_depth and not recursive: + raise ValueError(f"max_depth ({max_depth}) cannot be set if recursive is False") - tty.debug(f"Find complete: {root} {str(files)}") + tty.debug(f"Find (max depth = {max_depth}): {root} {files}") + if not recursive: + max_depth = 0 + elif max_depth is None: + max_depth = sys.maxsize + result = _find_max_depth(root, files, max_depth) + tty.debug(f"Find complete: {root} {files}") return result -@system_path_filter -def _find_recursive(root, search_files): - # The variable here is **on purpose** a defaultdict. The idea is that - # we want to poke the filesystem as little as possible, but still maintain - # stability in the order of the answer. Thus we are recording each library - # found in a key, and reconstructing the stable order later. - found_files = collections.defaultdict(list) +def _log_file_access_issue(e: OSError, path: str) -> None: + errno_name = errno.errorcode.get(e.errno, "UNKNOWN") + tty.debug(f"find must skip {path}: {errno_name} {e}") - # Make the path absolute to have os.walk also return an absolute path - root = os.path.abspath(root) - for path, _, list_files in os.walk(root): - for search_file in search_files: - matches = glob.glob(os.path.join(path, search_file)) - matches = [os.path.join(path, x) for x in matches] - found_files[search_file].extend(matches) - answer = [] - for search_file in search_files: - answer.extend(found_files[search_file]) +def _file_id(s: os.stat_result) -> Tuple[int, int]: + # Note: on windows, st_ino is the file index and st_dev is the volume serial number. See + # https://github.com/python/cpython/blob/3.9/Python/fileutils.c + return (s.st_ino, s.st_dev) - return answer +def _dedupe_files(paths: List[str]) -> List[str]: + """Deduplicate files by inode and device, dropping files that cannot be accessed.""" + unique_files: List[str] = [] + # tuple of (inode, device) for each file without following symlinks + visited: Set[Tuple[int, int]] = set() + for path in paths: + try: + stat_info = os.lstat(path) + except OSError as e: + _log_file_access_issue(e, path) + continue + file_id = _file_id(stat_info) + if file_id not in visited: + unique_files.append(path) + visited.add(file_id) + return unique_files + + +def _find_max_depth( + roots: Sequence[Path], globs: Sequence[str], max_depth: int = sys.maxsize +) -> List[str]: + """See ``find`` for the public API.""" + # We optimize for the common case of simple filename only patterns: a single, combined regex + # is used. For complex patterns that include path components, we use a slower glob call from + # every directory we visit within max_depth. + filename_only_patterns = { + f"pattern_{i}": os.path.normcase(x) for i, x in enumerate(globs) if "/" not in x + } + complex_patterns = {f"pattern_{i}": x for i, x in enumerate(globs) if "/" in x} + regex = re.compile(fnmatch_translate_multiple(filename_only_patterns)) + # Ordered dictionary that keeps track of what pattern found which files + matched_paths: Dict[str, List[str]] = {f"pattern_{i}": [] for i, _ in enumerate(globs)} + # Ensure returned paths are always absolute + roots = [os.path.abspath(r) for r in roots] + # Breadth-first search queue. Each element is a tuple of (depth, dir) + dir_queue: Deque[Tuple[int, str]] = collections.deque() + # Set of visited directories. Each element is a tuple of (inode, device) + visited_dirs: Set[Tuple[int, int]] = set() + + for root in roots: + try: + stat_root = os.stat(root) + except OSError as e: + _log_file_access_issue(e, root) + continue + dir_id = _file_id(stat_root) + if dir_id not in visited_dirs: + dir_queue.appendleft((0, root)) + visited_dirs.add(dir_id) -@system_path_filter -def _find_non_recursive(root, search_files): - # The variable here is **on purpose** a defaultdict as os.list_dir - # can return files in any order (does not preserve stability) - found_files = collections.defaultdict(list) + while dir_queue: + depth, curr_dir = dir_queue.pop() + try: + dir_iter = os.scandir(curr_dir) + except OSError as e: + _log_file_access_issue(e, curr_dir) + continue - # Make the path absolute to have absolute path returned - root = os.path.abspath(root) + # Use glob.glob for complex patterns. + for pattern_name, pattern in complex_patterns.items(): + matched_paths[pattern_name].extend( + path for path in glob.glob(os.path.join(curr_dir, pattern)) + ) + + # List of subdirectories by path and (inode, device) tuple + subdirs: List[Tuple[str, Tuple[int, int]]] = [] - for search_file in search_files: - matches = glob.glob(os.path.join(root, search_file)) - matches = [os.path.join(root, x) for x in matches] - found_files[search_file].extend(matches) + with dir_iter: + for dir_entry in dir_iter: - answer = [] - for search_file in search_files: - answer.extend(found_files[search_file]) + # Match filename only patterns + if filename_only_patterns: + m = regex.match(os.path.normcase(dir_entry.name)) + if m: + for pattern_name in filename_only_patterns: + if m.group(pattern_name): + matched_paths[pattern_name].append(dir_entry.path) + break - return answer + # Collect subdirectories + if depth >= max_depth: + continue + + try: + if not dir_entry.is_dir(follow_symlinks=True): + continue + if sys.platform == "win32": + # Note: st_ino/st_dev on DirEntry.stat are not set on Windows, so we have + # to call os.stat + stat_info = os.stat(dir_entry.path, follow_symlinks=True) + else: + stat_info = dir_entry.stat(follow_symlinks=True) + except OSError as e: + # Possible permission issue, or a symlink that cannot be resolved (ELOOP). + _log_file_access_issue(e, dir_entry.path) + continue + + subdirs.append((dir_entry.path, _file_id(stat_info))) + + # Enqueue subdirectories in a deterministic order + if subdirs: + subdirs.sort(key=lambda s: os.path.basename(s[0])) + for subdir, subdir_id in subdirs: + if subdir_id not in visited_dirs: + dir_queue.appendleft((depth + 1, subdir)) + visited_dirs.add(subdir_id) + + # Sort the matched paths for deterministic output + for paths in matched_paths.values(): + paths.sort() + all_matching_paths = [path for paths in matched_paths.values() for path in paths] + + # We only dedupe files if we have any complex patterns, since only they can match the same file + # multiple times + return _dedupe_files(all_matching_paths) if complex_patterns else all_matching_paths # Utilities for libraries and headers @@ -2210,7 +2322,9 @@ def find_system_libraries(libraries, shared=True): return libraries_found -def find_libraries(libraries, root, shared=True, recursive=False, runtime=True): +def find_libraries( + libraries, root, shared=True, recursive=False, runtime=True, max_depth: Optional[int] = None +): """Returns an iterable of full paths to libraries found in a root dir. Accepts any glob characters accepted by fnmatch: @@ -2231,6 +2345,8 @@ def find_libraries(libraries, root, shared=True, recursive=False, runtime=True): otherwise for static. Defaults to True. recursive (bool): if False search only root folder, if True descends top-down from the root. Defaults to False. + max_depth (int): if set, don't search below this depth. Cannot be set + if recursive is False runtime (bool): Windows only option, no-op elsewhere. If true, search for runtime shared libs (.DLL), otherwise, search for .Lib files. If shared is false, this has no meaning. @@ -2239,6 +2355,7 @@ def find_libraries(libraries, root, shared=True, recursive=False, runtime=True): Returns: LibraryList: The libraries that have been found """ + if isinstance(libraries, str): libraries = [libraries] elif not isinstance(libraries, collections.abc.Sequence): @@ -2271,8 +2388,10 @@ def find_libraries(libraries, root, shared=True, recursive=False, runtime=True): libraries = ["{0}.{1}".format(lib, suffix) for lib in libraries for suffix in suffixes] if not recursive: + if max_depth: + raise ValueError(f"max_depth ({max_depth}) cannot be set if recursive is False") # If not recursive, look for the libraries directly in root - return LibraryList(find(root, libraries, False)) + return LibraryList(find(root, libraries, recursive=False)) # To speedup the search for external packages configured e.g. in /usr, # perform first non-recursive search in root/lib then in root/lib64 and @@ -2290,7 +2409,7 @@ def find_libraries(libraries, root, shared=True, recursive=False, runtime=True): if found_libs: break else: - found_libs = find(root, libraries, True) + found_libs = find(root, libraries, recursive=True, max_depth=max_depth) return LibraryList(found_libs) diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py index 5efe27b8b119f4..4913a50fad930e 100644 --- a/lib/spack/llnl/util/lang.py +++ b/lib/spack/llnl/util/lang.py @@ -5,14 +5,17 @@ import collections.abc import contextlib +import fnmatch import functools import itertools import os import re import sys import traceback +import typing +import warnings from datetime import datetime, timedelta -from typing import Callable, Iterable, List, Tuple, TypeVar +from typing import Callable, Dict, Iterable, List, Tuple, TypeVar # Ignore emacs backups when listing modules ignore_modules = r"^\.#|~$" @@ -858,6 +861,19 @@ def elide_list(line_list: List[str], max_num: int = 10) -> List[str]: return line_list +if sys.version_info >= (3, 9): + PatternStr = re.Pattern[str] +else: + PatternStr = typing.Pattern[str] + + +def fnmatch_translate_multiple(named_patterns: Dict[str, str]) -> str: + """Similar to ``fnmatch.translate``, but takes an ordered dictionary where keys are pattern + names, and values are filename patterns. The output is a regex that matches any of the + patterns in order, and named capture groups are used to identify which pattern matched.""" + return "|".join(f"(?P<{n}>{fnmatch.translate(p)})" for n, p in named_patterns.items()) + + @contextlib.contextmanager def nullcontext(*args, **kwargs): """Empty context manager. @@ -870,15 +886,6 @@ class UnhashableArguments(TypeError): """Raise when an @memoized function receives unhashable arg or kwarg values.""" -def enum(**kwargs): - """Return an enum-like class. - - Args: - **kwargs: explicit dictionary of enums - """ - return type("Enum", (object,), kwargs) - - T = TypeVar("T") @@ -914,6 +921,21 @@ def ensure_last(lst, *elements): lst.append(lst.pop(lst.index(elt))) +class Const: + """Class level constant, raises when trying to set the attribute""" + + __slots__ = ["value"] + + def __init__(self, value): + self.value = value + + def __get__(self, instance, owner): + return self.value + + def __set__(self, instance, value): + raise TypeError(f"Const value does not support assignment [value={self.value}]") + + class TypedMutableSequence(collections.abc.MutableSequence): """Base class that behaves like a list, just with a different type. @@ -1018,3 +1040,42 @@ def __init__(self, callback): def __get__(self, instance, owner): return self.callback(owner) + + +class DeprecatedProperty: + """Data descriptor to error or warn when a deprecated property is accessed. + + Derived classes must define a factory method to return an adaptor for the deprecated + property, if the descriptor is not set to error. + """ + + __slots__ = ["name"] + + #: 0 - Nothing + #: 1 - Warning + #: 2 - Error + error_lvl = 0 + + def __init__(self, name: str) -> None: + self.name = name + + def __get__(self, instance, owner): + if instance is None: + return self + + if self.error_lvl == 1: + warnings.warn( + f"accessing the '{self.name}' property of '{instance}', which is deprecated" + ) + elif self.error_lvl == 2: + raise AttributeError(f"cannot access the '{self.name}' attribute of '{instance}'") + + return self.factory(instance, owner) + + def __set__(self, instance, value): + raise TypeError( + f"the deprecated property '{self.name}' of '{instance}' does not support assignment" + ) + + def factory(self, instance, owner): + raise NotImplementedError("must be implemented by derived classes") diff --git a/lib/spack/llnl/util/tty/color.py b/lib/spack/llnl/util/tty/color.py index 710196783d57e6..51a5a1b5b1e1f6 100644 --- a/lib/spack/llnl/util/tty/color.py +++ b/lib/spack/llnl/util/tty/color.py @@ -263,7 +263,9 @@ def match_to_ansi(match): f"Incomplete color format: '{match.group(0)}' in '{match.string}'" ) - ansi_code = _escape(f"{styles[style]};{colors.get(color_code, '')}", color, enclose, zsh) + color_number = colors.get(color_code, "") + semi = ";" if color_number else "" + ansi_code = _escape(f"{styles[style]}{semi}{color_number}", color, enclose, zsh) if text: return f"{ansi_code}{text}{_escape(0, color, enclose, zsh)}" else: diff --git a/lib/spack/llnl/util/tty/log.py b/lib/spack/llnl/util/tty/log.py index 56139843407977..534472dbecdf3e 100644 --- a/lib/spack/llnl/util/tty/log.py +++ b/lib/spack/llnl/util/tty/log.py @@ -10,7 +10,6 @@ import errno import io import multiprocessing -import multiprocessing.connection import os import re import select @@ -19,9 +18,10 @@ import threading import traceback from contextlib import contextmanager +from multiprocessing.connection import Connection from threading import Thread from types import ModuleType -from typing import Optional +from typing import Callable, Optional import llnl.util.tty as tty @@ -345,49 +345,6 @@ def close(self): self.file.close() -class MultiProcessFd: - """Return an object which stores a file descriptor and can be passed as an - argument to a function run with ``multiprocessing.Process``, such that - the file descriptor is available in the subprocess.""" - - def __init__(self, fd): - self._connection = None - self._fd = None - if sys.version_info >= (3, 8): - self._connection = multiprocessing.connection.Connection(fd) - else: - self._fd = fd - - @property - def fd(self): - if self._connection: - return self._connection._handle - else: - return self._fd - - def close(self): - if self._connection: - self._connection.close() - else: - os.close(self._fd) - - -def close_connection_and_file(multiprocess_fd, file): - # MultiprocessFd is intended to transmit a FD - # to a child process, this FD is then opened to a Python File object - # (using fdopen). In >= 3.8, MultiprocessFd encapsulates a - # multiprocessing.connection.Connection; Connection closes the FD - # when it is deleted, and prints a warning about duplicate closure if - # it is not explicitly closed. In < 3.8, MultiprocessFd encapsulates a - # simple FD; closing the FD here appears to conflict with - # closure of the File object (in < 3.8 that is). Therefore this needs - # to choose whether to close the File or the Connection. - if sys.version_info >= (3, 8): - multiprocess_fd.close() - else: - file.close() - - @contextmanager def replace_environment(env): """Replace the current environment (`os.environ`) with `env`. @@ -545,22 +502,20 @@ def __enter__(self): # forcing debug output. self._saved_debug = tty._debug - # OS-level pipe for redirecting output to logger - read_fd, write_fd = os.pipe() - - read_multiprocess_fd = MultiProcessFd(read_fd) + # Pipe for redirecting output to logger + read_fd, self.write_fd = multiprocessing.Pipe(duplex=False) - # Multiprocessing pipe for communication back from the daemon + # Pipe for communication back from the daemon # Currently only used to save echo value between uses - self.parent_pipe, child_pipe = multiprocessing.Pipe() + self.parent_pipe, child_pipe = multiprocessing.Pipe(duplex=False) # Sets a daemon that writes to file what it reads from a pipe try: # need to pass this b/c multiprocessing closes stdin in child. - input_multiprocess_fd = None + input_fd = None try: if sys.stdin.isatty(): - input_multiprocess_fd = MultiProcessFd(os.dup(sys.stdin.fileno())) + input_fd = Connection(os.dup(sys.stdin.fileno())) except BaseException: # just don't forward input if this fails pass @@ -569,9 +524,9 @@ def __enter__(self): self.process = multiprocessing.Process( target=_writer_daemon, args=( - input_multiprocess_fd, - read_multiprocess_fd, - write_fd, + input_fd, + read_fd, + self.write_fd, self.echo, self.log_file, child_pipe, @@ -582,9 +537,9 @@ def __enter__(self): self.process.start() finally: - if input_multiprocess_fd: - input_multiprocess_fd.close() - read_multiprocess_fd.close() + if input_fd: + input_fd.close() + read_fd.close() # Flush immediately before redirecting so that anything buffered # goes to the original stream @@ -602,9 +557,9 @@ def __enter__(self): self._saved_stderr = os.dup(sys.stderr.fileno()) # redirect to the pipe we created above - os.dup2(write_fd, sys.stdout.fileno()) - os.dup2(write_fd, sys.stderr.fileno()) - os.close(write_fd) + os.dup2(self.write_fd.fileno(), sys.stdout.fileno()) + os.dup2(self.write_fd.fileno(), sys.stderr.fileno()) + self.write_fd.close() else: # Handle I/O the Python way. This won't redirect lower-level @@ -617,7 +572,7 @@ def __enter__(self): self._saved_stderr = sys.stderr # create a file object for the pipe; redirect to it. - pipe_fd_out = os.fdopen(write_fd, "w") + pipe_fd_out = os.fdopen(self.write_fd.fileno(), "w", closefd=False) sys.stdout = pipe_fd_out sys.stderr = pipe_fd_out @@ -653,6 +608,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): else: sys.stdout = self._saved_stdout sys.stderr = self._saved_stderr + self.write_fd.close() # print log contents in parent if needed. if self.log_file.write_in_parent: @@ -866,14 +822,14 @@ def force_echo(self): def _writer_daemon( - stdin_multiprocess_fd, - read_multiprocess_fd, - write_fd, - echo, - log_file_wrapper, - control_pipe, - filter_fn, -): + stdin_fd: Optional[Connection], + read_fd: Connection, + write_fd: Connection, + echo: bool, + log_file_wrapper: FileWrapper, + control_fd: Connection, + filter_fn: Optional[Callable[[str], str]], +) -> None: """Daemon used by ``log_output`` to write to a log file and to ``stdout``. The daemon receives output from the parent process and writes it both @@ -910,43 +866,37 @@ def _writer_daemon( ``StringIO`` in the parent. This is mainly for testing. Arguments: - stdin_multiprocess_fd (int): input from the terminal - read_multiprocess_fd (int): pipe for reading from parent's redirected - stdout - echo (bool): initial echo setting -- controlled by user and - preserved across multiple writer daemons - log_file_wrapper (FileWrapper): file to log all output - control_pipe (Pipe): multiprocessing pipe on which to send control - information to the parent - filter_fn (callable, optional): function to filter each line of output + stdin_fd: optional input from the terminal + read_fd: pipe for reading from parent's redirected stdout + echo: initial echo setting -- controlled by user and preserved across multiple writer + daemons + log_file_wrapper: file to log all output + control_pipe: multiprocessing pipe on which to send control information to the parent + filter_fn: optional function to filter each line of output """ - # If this process was forked, then it will inherit file descriptors from - # the parent process. This process depends on closing all instances of - # write_fd to terminate the reading loop, so we close the file descriptor - # here. Forking is the process spawning method everywhere except Mac OS - # for Python >= 3.8 and on Windows - if sys.version_info < (3, 8) or sys.platform != "darwin": - os.close(write_fd) + # This process depends on closing all instances of write_pipe to terminate the reading loop + write_fd.close() # 1. Use line buffering (3rd param = 1) since Python 3 has a bug # that prevents unbuffered text I/O. # 2. Python 3.x before 3.7 does not open with UTF-8 encoding by default - in_pipe = os.fdopen(read_multiprocess_fd.fd, "r", 1, encoding="utf-8") + # 3. closefd=False because Connection has "ownership" + read_file = os.fdopen(read_fd.fileno(), "r", 1, encoding="utf-8", closefd=False) - if stdin_multiprocess_fd: - stdin = os.fdopen(stdin_multiprocess_fd.fd) + if stdin_fd: + stdin_file = os.fdopen(stdin_fd.fileno(), closefd=False) else: - stdin = None + stdin_file = None # list of streams to select from - istreams = [in_pipe, stdin] if stdin else [in_pipe] + istreams = [read_file, stdin_file] if stdin_file else [read_file] force_echo = False # parent can force echo for certain output log_file = log_file_wrapper.unwrap() try: - with keyboard_input(stdin) as kb: + with keyboard_input(stdin_file) as kb: while True: # fix the terminal settings if we recently came to # the foreground @@ -959,12 +909,12 @@ def _writer_daemon( # Allow user to toggle echo with 'v' key. # Currently ignores other chars. # only read stdin if we're in the foreground - if stdin in rlist and not _is_background_tty(stdin): + if stdin_file and stdin_file in rlist and not _is_background_tty(stdin_file): # it's possible to be backgrounded between the above # check and the read, so we ignore SIGTTIN here. with ignore_signal(signal.SIGTTIN): try: - if stdin.read(1) == "v": + if stdin_file.read(1) == "v": echo = not echo except IOError as e: # If SIGTTIN is ignored, the system gives EIO @@ -973,13 +923,13 @@ def _writer_daemon( if e.errno != errno.EIO: raise - if in_pipe in rlist: + if read_file in rlist: line_count = 0 try: while line_count < 100: # Handle output from the calling process. try: - line = _retry(in_pipe.readline)() + line = _retry(read_file.readline)() except UnicodeDecodeError: # installs like --test=root gpgme produce non-UTF8 logs line = "\n" @@ -1008,7 +958,7 @@ def _writer_daemon( if xoff in controls: force_echo = False - if not _input_available(in_pipe): + if not _input_available(read_file): break finally: if line_count > 0: @@ -1023,14 +973,14 @@ def _writer_daemon( finally: # send written data back to parent if we used a StringIO if isinstance(log_file, io.StringIO): - control_pipe.send(log_file.getvalue()) + control_fd.send(log_file.getvalue()) log_file_wrapper.close() - close_connection_and_file(read_multiprocess_fd, in_pipe) - if stdin_multiprocess_fd: - close_connection_and_file(stdin_multiprocess_fd, stdin) + read_fd.close() + if stdin_fd: + stdin_fd.close() # send echo value back to the parent so it can be preserved. - control_pipe.send(echo) + control_fd.send(echo) def _retry(function): diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py index cf7d62c7fd02e1..e3b5bc21f4cef3 100644 --- a/lib/spack/spack/__init__.py +++ b/lib/spack/spack/__init__.py @@ -11,7 +11,7 @@ import spack.util.git #: PEP440 canonical ... string -__version__ = "0.23.0.dev0" +__version__ = "0.24.0.dev0" spack_version = __version__ @@ -69,4 +69,15 @@ def get_version() -> str: return spack_version -__all__ = ["spack_version_info", "spack_version", "get_version", "get_spack_commit"] +def get_short_version() -> str: + """Short Spack version.""" + return f"{spack_version_info[0]}.{spack_version_info[1]}" + + +__all__ = [ + "spack_version_info", + "spack_version", + "get_version", + "get_spack_commit", + "get_short_version", +] diff --git a/lib/spack/spack/audit.py b/lib/spack/spack/audit.py index 3ccdd5b9cd651f..7e6b87c987c613 100644 --- a/lib/spack/spack/audit.py +++ b/lib/spack/spack/audit.py @@ -571,8 +571,13 @@ def _search_for_deprecated_package_methods(pkgs, error_cls): @package_properties def _ensure_all_package_names_are_lowercase(pkgs, error_cls): """Ensure package names are lowercase and consistent""" + reserved_names = ("all",) badname_regex, errors = re.compile(r"[_A-Z]"), [] for pkg_name in pkgs: + if pkg_name in reserved_names: + error_msg = f"The name '{pkg_name}' is reserved, and cannot be used for packages" + errors.append(error_cls(error_msg, [])) + if badname_regex.search(pkg_name): error_msg = f"Package name '{pkg_name}' should be lowercase and must not contain '_'" errors.append(error_cls(error_msg, [])) @@ -714,17 +719,16 @@ def _ensure_env_methods_are_ported_to_builders(pkgs, error_cls): for pkg_name in pkgs: pkg_cls = spack.repo.PATH.get_pkg_class(pkg_name) - # values are either Value objects (for conditional values) or the values themselves + # values are either ConditionalValue objects or the values themselves build_system_names = set( - v.value if isinstance(v, spack.variant.Value) else v + v.value if isinstance(v, spack.variant.ConditionalValue) else v for _, variant in pkg_cls.variant_definitions("build_system") for v in variant.values ) builder_cls_names = [spack.builder.BUILDER_CLS[x].__name__ for x in build_system_names] - module = pkg_cls.module has_builders_in_package_py = any( - getattr(module, name, False) for name in builder_cls_names + spack.builder.get_builder_class(pkg_cls, name) for name in builder_cls_names ) if not has_builders_in_package_py: continue @@ -806,7 +810,7 @@ def _uses_deprecated_globals(pkgs, error_cls): file = spack.repo.PATH.filename_for_package_name(pkg_name) tree = ast.parse(open(file).read()) - visitor = DeprecatedMagicGlobals(("std_cmake_args",)) + visitor = DeprecatedMagicGlobals(("std_cmake_args", "std_meson_args", "std_pip_args")) visitor.visit(tree) if visitor.references_to_globals: errors.append( diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py index 1f0d33f00eea1d..db26f32c00885c 100644 --- a/lib/spack/spack/binary_distribution.py +++ b/lib/spack/spack/binary_distribution.py @@ -87,6 +87,8 @@ from spack.stage import Stage from spack.util.executable import which +from .enums import InstallRecordStatus + BUILD_CACHE_RELATIVE_PATH = "build_cache" BUILD_CACHE_KEYS_RELATIVE_PATH = "_pgp" @@ -252,7 +254,7 @@ def _associate_built_specs_with_mirror(self, cache_key, mirror_url): spec_list = [ s - for s in db.query_local(installed=any, in_buildcache=any) + for s in db.query_local(installed=InstallRecordStatus.ANY) if s.external or db.query_local_by_spec_hash(s.dag_hash()).in_buildcache ] @@ -1182,6 +1184,9 @@ def __init__(self, mirror: spack.mirror.Mirror, force: bool, update_index: bool) self.tmpdir: str self.executor: concurrent.futures.Executor + # Verify if the mirror meets the requirements to push + self.mirror.ensure_mirror_usable("push") + def __enter__(self): self._tmpdir = tempfile.TemporaryDirectory(dir=spack.stage.get_stage_root()) self._executor = spack.util.parallel.make_concurrent_executor() @@ -2562,7 +2567,13 @@ def _ensure_common_prefix(tar: tarfile.TarFile) -> str: return pkg_prefix -def install_root_node(spec, unsigned=False, force=False, sha256=None): +def install_root_node( + spec: spack.spec.Spec, + unsigned=False, + force: bool = False, + sha256: Optional[str] = None, + allow_missing: bool = False, +) -> None: """Install the root node of a concrete spec from a buildcache. Checking the sha256 sum of a node before installation is usually needed only @@ -2571,11 +2582,10 @@ def install_root_node(spec, unsigned=False, force=False, sha256=None): Args: spec: spec to be installed (note that only the root node will be installed) - unsigned (bool): if True allows installing unsigned binaries - force (bool): force installation if the spec is already present in the - local store - sha256 (str): optional sha256 of the binary package, to be checked - before installation + unsigned: if True allows installing unsigned binaries + force: force installation if the spec is already present in the local store + sha256: optional sha256 of the binary package, to be checked before installation + allow_missing: when true, allows installing a node with missing dependencies """ # Early termination if spec.external or spec.virtual: @@ -2613,7 +2623,7 @@ def install_root_node(spec, unsigned=False, force=False, sha256=None): spec, spack.store.STORE.layout.spec_file_path(spec) ) spack.hooks.post_install(spec, False) - spack.store.STORE.db.add(spec) + spack.store.STORE.db.add(spec, allow_missing=allow_missing) def install_single_spec(spec, unsigned=False, force=False): diff --git a/lib/spack/spack/bootstrap/_common.py b/lib/spack/spack/bootstrap/_common.py index e56890f22b74de..2a33fa9aba02de 100644 --- a/lib/spack/spack/bootstrap/_common.py +++ b/lib/spack/spack/bootstrap/_common.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) """Common basic functions used through the spack.bootstrap package""" import fnmatch +import glob import importlib import os.path import re @@ -60,10 +61,19 @@ def _try_import_from_store( python, *_ = candidate_spec.dependencies("python-venv") else: python, *_ = candidate_spec.dependencies("python") - module_paths = [ - os.path.join(candidate_spec.prefix, python.package.purelib), - os.path.join(candidate_spec.prefix, python.package.platlib), - ] + + # if python is installed, ask it for the layout + if python.installed: + module_paths = [ + os.path.join(candidate_spec.prefix, python.package.purelib), + os.path.join(candidate_spec.prefix, python.package.platlib), + ] + # otherwise search for the site-packages directory + # (clingo from binaries with truncated python-venv runtime) + else: + module_paths = glob.glob( + os.path.join(candidate_spec.prefix, "lib", "python*", "site-packages") + ) path_before = list(sys.path) # NOTE: try module_paths first and last, last allows an existing version in path diff --git a/lib/spack/spack/bootstrap/core.py b/lib/spack/spack/bootstrap/core.py index 6f1d9fdb9dff52..0c6127e63e8289 100644 --- a/lib/spack/spack/bootstrap/core.py +++ b/lib/spack/spack/bootstrap/core.py @@ -37,6 +37,7 @@ import spack.binary_distribution import spack.config import spack.detection +import spack.mirror import spack.platforms import spack.spec import spack.store @@ -44,7 +45,6 @@ import spack.util.executable import spack.util.path import spack.util.spack_yaml -import spack.util.url import spack.version from spack.installer import PackageInstaller @@ -91,12 +91,7 @@ def __init__(self, conf: ConfigDictionary) -> None: self.metadata_dir = spack.util.path.canonicalize_path(conf["metadata"]) # Promote (relative) paths to file urls - url = conf["info"]["url"] - if spack.util.url.is_path_instead_of_url(url): - if not os.path.isabs(url): - url = os.path.join(self.metadata_dir, url) - url = spack.util.url.path_to_file_url(url) - self.url = url + self.url = spack.mirror.Mirror(conf["info"]["url"]).fetch_url @property def mirror_scope(self) -> spack.config.InternalConfigScope: @@ -175,7 +170,15 @@ def _install_by_hash( query = spack.binary_distribution.BinaryCacheQuery(all_architectures=True) for match in spack.store.find([f"/{pkg_hash}"], multiple=False, query_fn=query): spack.binary_distribution.install_root_node( - match, unsigned=True, force=True, sha256=pkg_sha256 + # allow_missing is true since when bootstrapping clingo we truncate runtime + # deps such as gcc-runtime, since we link libstdc++ statically, and the other + # further runtime deps are loaded by the Python interpreter. This just silences + # warnings about missing dependencies. + match, + unsigned=True, + force=True, + sha256=pkg_sha256, + allow_missing=True, ) def _install_and_test( @@ -599,7 +602,10 @@ def bootstrapping_sources(scope: Optional[str] = None): current = copy.copy(entry) metadata_dir = spack.util.path.canonicalize_path(entry["metadata"]) metadata_yaml = os.path.join(metadata_dir, METADATA_YAML_FILENAME) - with open(metadata_yaml, encoding="utf-8") as stream: - current.update(spack.util.spack_yaml.load(stream)) - list_of_sources.append(current) + try: + with open(metadata_yaml, encoding="utf-8") as stream: + current.update(spack.util.spack_yaml.load(stream)) + list_of_sources.append(current) + except OSError: + pass return list_of_sources diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py index af6d0f4e76da85..c46db63c83b3f6 100644 --- a/lib/spack/spack/build_environment.py +++ b/lib/spack/spack/build_environment.py @@ -44,6 +44,7 @@ from collections import defaultdict from enum import Flag, auto from itertools import chain +from multiprocessing.connection import Connection from typing import Callable, Dict, List, Optional, Set, Tuple import archspec.cpu @@ -54,9 +55,7 @@ from llnl.util.lang import dedupe, stable_partition from llnl.util.symlink import symlink from llnl.util.tty.color import cescape, colorize -from llnl.util.tty.log import MultiProcessFd -import spack.build_systems._checks import spack.build_systems.cmake import spack.build_systems.meson import spack.build_systems.python @@ -617,14 +616,12 @@ def set_package_py_globals(pkg, context: Context = Context.BUILD): """ module = ModuleChangePropagator(pkg) + jobs = spack.config.determine_number_of_jobs(parallel=pkg.parallel) + module.make_jobs = jobs if context == Context.BUILD: - module.std_cmake_args = spack.build_systems.cmake.CMakeBuilder.std_args(pkg) module.std_meson_args = spack.build_systems.meson.MesonBuilder.std_args(pkg) module.std_pip_args = spack.build_systems.python.PythonPipBuilder.std_args(pkg) - jobs = spack.config.determine_number_of_jobs(parallel=pkg.parallel) - module.make_jobs = jobs - # TODO: make these build deps that can be installed if not found. module.make = MakeExecutable("make", jobs) module.gmake = MakeExecutable("gmake", jobs) @@ -885,6 +882,9 @@ def __init__(self, *roots: spack.spec.Spec, context: Context): elif context == Context.RUN: self.root_depflag = dt.RUN | dt.LINK + def accept(self, item): + return True + def neighbors(self, item): spec = item.edge.spec if spec.dag_hash() in self.root_hashes: @@ -922,19 +922,19 @@ def effective_deptypes( a flag specifying in what way they do so. The list is ordered topologically from root to leaf, meaning that environment modifications should be applied in reverse so that dependents override dependencies, not the other way around.""" - visitor = traverse.TopoVisitor( - EnvironmentVisitor(*specs, context=context), - key=lambda x: x.dag_hash(), + topo_sorted_edges = traverse.traverse_topo_edges_generator( + traverse.with_artificial_edges(specs), + visitor=EnvironmentVisitor(*specs, context=context), + key=traverse.by_dag_hash, root=True, all_edges=True, ) - traverse.traverse_depth_first_with_visitor(traverse.with_artificial_edges(specs), visitor) # Dictionary with "no mode" as default value, so it's easy to write modes[x] |= flag. use_modes = defaultdict(lambda: UseMode(0)) nodes_with_type = [] - for edge in visitor.edges: + for edge in topo_sorted_edges: parent, child, depflag = edge.parent, edge.spec, edge.depflag # Mark the starting point @@ -1048,6 +1048,12 @@ def set_all_package_py_globals(self): # This includes runtime dependencies, also runtime deps of direct build deps. set_package_py_globals(pkg, context=Context.RUN) + # Looping over the set of packages a second time + # ensures all globals are loaded into the module space prior to + # any package setup. This guarantees package setup methods have + # access to expected module level definitions such as "spack_cc" + for dspec, flag in chain(self.external, self.nonexternal): + pkg = dspec.package for spec in dspec.dependents(): # Note: some specs have dependents that are unreachable from the root, so avoid # setting globals for those. @@ -1057,6 +1063,15 @@ def set_all_package_py_globals(self): pkg.setup_dependent_package(dependent_module, spec) dependent_module.propagate_changes_to_mro() + if self.context == Context.BUILD: + pkg = self.specs[0].package + module = ModuleChangePropagator(pkg) + # std_cmake_args is not sufficiently static to be defined + # in set_package_py_globals and is deprecated so its handled + # here as a special case + module.std_cmake_args = spack.build_systems.cmake.CMakeBuilder.std_args(pkg) + module.propagate_changes_to_mro() + def get_env_modifications(self) -> EnvironmentModifications: """Returns the environment variable modifications for the given input specs and context. Environment modifications include: @@ -1130,10 +1145,10 @@ def _setup_pkg_and_run( serialized_pkg: "spack.subprocess_context.PackageInstallContext", function: Callable, kwargs: Dict, - write_pipe: multiprocessing.connection.Connection, - input_multiprocess_fd: Optional[MultiProcessFd], - jsfd1: Optional[MultiProcessFd], - jsfd2: Optional[MultiProcessFd], + write_pipe: Connection, + input_pipe: Optional[Connection], + jsfd1: Optional[Connection], + jsfd2: Optional[Connection], ): """Main entry point in the child process for Spack builds. @@ -1175,13 +1190,12 @@ def _setup_pkg_and_run( context: str = kwargs.get("context", "build") try: - # We are in the child process. Python sets sys.stdin to - # open(os.devnull) to prevent our process and its parent from - # simultaneously reading from the original stdin. But, we assume - # that the parent process is not going to read from it till we - # are done with the child, so we undo Python's precaution. - if input_multiprocess_fd is not None: - sys.stdin = os.fdopen(input_multiprocess_fd.fd) + # We are in the child process. Python sets sys.stdin to open(os.devnull) to prevent our + # process and its parent from simultaneously reading from the original stdin. But, we + # assume that the parent process is not going to read from it till we are done with the + # child, so we undo Python's precaution. closefd=False since Connection has ownership. + if input_pipe is not None: + sys.stdin = os.fdopen(input_pipe.fileno(), closefd=False) pkg = serialized_pkg.restore() @@ -1204,7 +1218,7 @@ def _setup_pkg_and_run( # objects can't be sent to the parent. exc_type = type(e) tb = e.__traceback__ - tb_string = traceback.format_exception(exc_type, e, tb) + tb_string = "".join(traceback.format_exception(exc_type, e, tb)) # build up some context from the offending package so we can # show that, too. @@ -1250,8 +1264,8 @@ def _setup_pkg_and_run( finally: write_pipe.close() - if input_multiprocess_fd is not None: - input_multiprocess_fd.close() + if input_pipe is not None: + input_pipe.close() def start_build_process(pkg, function, kwargs): @@ -1278,23 +1292,9 @@ def child_fun(): If something goes wrong, the child process catches the error and passes it to the parent wrapped in a ChildError. The parent is expected to handle (or re-raise) the ChildError. - - This uses `multiprocessing.Process` to create the child process. The - mechanism used to create the process differs on different operating - systems and for different versions of Python. In some cases "fork" - is used (i.e. the "fork" system call) and some cases it starts an - entirely new Python interpreter process (in the docs this is referred - to as the "spawn" start method). Breaking it down by OS: - - - Linux always uses fork. - - Mac OS uses fork before Python 3.8 and "spawn" for 3.8 and after. - - Windows always uses the "spawn" start method. - - For more information on `multiprocessing` child process creation - mechanisms, see https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods """ read_pipe, write_pipe = multiprocessing.Pipe(duplex=False) - input_multiprocess_fd = None + input_fd = None jobserver_fd1 = None jobserver_fd2 = None @@ -1303,14 +1303,13 @@ def child_fun(): try: # Forward sys.stdin when appropriate, to allow toggling verbosity if sys.platform != "win32" and sys.stdin.isatty() and hasattr(sys.stdin, "fileno"): - input_fd = os.dup(sys.stdin.fileno()) - input_multiprocess_fd = MultiProcessFd(input_fd) + input_fd = Connection(os.dup(sys.stdin.fileno())) mflags = os.environ.get("MAKEFLAGS", False) if mflags: m = re.search(r"--jobserver-[^=]*=(\d),(\d)", mflags) if m: - jobserver_fd1 = MultiProcessFd(int(m.group(1))) - jobserver_fd2 = MultiProcessFd(int(m.group(2))) + jobserver_fd1 = Connection(int(m.group(1))) + jobserver_fd2 = Connection(int(m.group(2))) p = multiprocessing.Process( target=_setup_pkg_and_run, @@ -1319,7 +1318,7 @@ def child_fun(): function, kwargs, write_pipe, - input_multiprocess_fd, + input_fd, jobserver_fd1, jobserver_fd2, ), @@ -1339,8 +1338,8 @@ def child_fun(): finally: # Close the input stream in the parent process - if input_multiprocess_fd is not None: - input_multiprocess_fd.close() + if input_fd is not None: + input_fd.close() def exitcode_msg(p): typ = "exit" if p.exitcode >= 0 else "signal" @@ -1378,7 +1377,7 @@ def exitcode_msg(p): return child_result -CONTEXT_BASES = (spack.package_base.PackageBase, spack.build_systems._checks.BaseBuilder) +CONTEXT_BASES = (spack.package_base.PackageBase, spack.builder.Builder) def get_package_context(traceback, context=3): diff --git a/lib/spack/spack/build_systems/_checks.py b/lib/spack/spack/build_systems/_checks.py index e15409fc38d80d..2c88f15e2bf593 100644 --- a/lib/spack/spack/build_systems/_checks.py +++ b/lib/spack/spack/build_systems/_checks.py @@ -9,6 +9,7 @@ import spack.builder import spack.error +import spack.phase_callbacks import spack.relocate import spack.spec import spack.store @@ -63,7 +64,7 @@ def apply_macos_rpath_fixups(builder: spack.builder.Builder): def ensure_build_dependencies_or_raise( - spec: spack.spec.Spec, dependencies: List[spack.spec.Spec], error_msg: str + spec: spack.spec.Spec, dependencies: List[str], error_msg: str ): """Ensure that some build dependencies are present in the concrete spec. @@ -71,7 +72,7 @@ def ensure_build_dependencies_or_raise( Args: spec: concrete spec to be checked. - dependencies: list of abstract specs to be satisfied + dependencies: list of package names of required build dependencies error_msg: brief error message to be prepended to a longer description Raises: @@ -127,8 +128,8 @@ def execute_install_time_tests(builder: spack.builder.Builder): builder.pkg.tester.phase_tests(builder, "install", builder.install_time_test_callbacks) -class BaseBuilder(spack.builder.Builder): - """Base class for builders to register common checks""" +class BuilderWithDefaults(spack.builder.Builder): + """Base class for all specific builders with common callbacks registered.""" # Check that self.prefix is there after installation - spack.builder.run_after("install")(sanity_check_prefix) + spack.phase_callbacks.run_after("install")(sanity_check_prefix) diff --git a/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py index 47911271fef860..aad8a6ffb107fb 100644 --- a/lib/spack/spack/build_systems/autotools.py +++ b/lib/spack/spack/build_systems/autotools.py @@ -6,7 +6,7 @@ import os.path import stat import subprocess -from typing import List +from typing import Callable, List, Optional, Set, Tuple, Union import llnl.util.filesystem as fs import llnl.util.tty as tty @@ -15,6 +15,9 @@ import spack.builder import spack.error import spack.package_base +import spack.phase_callbacks +import spack.spec +import spack.util.prefix from spack.directives import build_system, conflicts, depends_on from spack.multimethod import when from spack.operating_systems.mac_os import macos_version @@ -22,7 +25,7 @@ from spack.version import Version from ._checks import ( - BaseBuilder, + BuilderWithDefaults, apply_macos_rpath_fixups, ensure_build_dependencies_or_raise, execute_build_time_tests, @@ -69,14 +72,14 @@ def flags_to_build_system_args(self, flags): # Legacy methods (used by too many packages to change them, # need to forward to the builder) def enable_or_disable(self, *args, **kwargs): - return self.builder.enable_or_disable(*args, **kwargs) + return spack.builder.create(self).enable_or_disable(*args, **kwargs) def with_or_without(self, *args, **kwargs): - return self.builder.with_or_without(*args, **kwargs) + return spack.builder.create(self).with_or_without(*args, **kwargs) @spack.builder.builder("autotools") -class AutotoolsBuilder(BaseBuilder): +class AutotoolsBuilder(BuilderWithDefaults): """The autotools builder encodes the default way of installing software built with autotools. It has four phases that can be overridden, if need be: @@ -157,7 +160,7 @@ class AutotoolsBuilder(BaseBuilder): install_libtool_archives = False @property - def patch_config_files(self): + def patch_config_files(self) -> bool: """Whether to update old ``config.guess`` and ``config.sub`` files distributed with the tarball. @@ -177,7 +180,7 @@ def patch_config_files(self): ) @property - def _removed_la_files_log(self): + def _removed_la_files_log(self) -> str: """File containing the list of removed libtool archives""" build_dir = self.build_directory if not os.path.isabs(self.build_directory): @@ -185,15 +188,15 @@ def _removed_la_files_log(self): return os.path.join(build_dir, "removed_la_files.txt") @property - def archive_files(self): + def archive_files(self) -> List[str]: """Files to archive for packages based on autotools""" files = [os.path.join(self.build_directory, "config.log")] if not self.install_libtool_archives: files.append(self._removed_la_files_log) return files - @spack.builder.run_after("autoreconf") - def _do_patch_config_files(self): + @spack.phase_callbacks.run_after("autoreconf") + def _do_patch_config_files(self) -> None: """Some packages ship with older config.guess/config.sub files and need to have these updated when installed on a newer architecture. @@ -294,7 +297,7 @@ def runs_ok(script_abs_path): and set the prefix to the directory containing the `config.guess` and `config.sub` files. """ - raise spack.error.InstallError(msg.format(", ".join(to_be_found), self.name)) + raise spack.error.InstallError(msg.format(", ".join(to_be_found), self.pkg.name)) # Copy the good files over the bad ones for abs_path in to_be_patched: @@ -304,8 +307,8 @@ def runs_ok(script_abs_path): fs.copy(substitutes[name], abs_path) os.chmod(abs_path, mode) - @spack.builder.run_before("configure") - def _patch_usr_bin_file(self): + @spack.phase_callbacks.run_before("configure") + def _patch_usr_bin_file(self) -> None: """On NixOS file is not available in /usr/bin/file. Patch configure scripts to use file from path.""" @@ -316,8 +319,8 @@ def _patch_usr_bin_file(self): with fs.keep_modification_time(*x.filenames): x.filter(regex="/usr/bin/file", repl="file", string=True) - @spack.builder.run_before("configure") - def _set_autotools_environment_variables(self): + @spack.phase_callbacks.run_before("configure") + def _set_autotools_environment_variables(self) -> None: """Many autotools builds use a version of mknod.m4 that fails when running as root unless FORCE_UNSAFE_CONFIGURE is set to 1. @@ -330,8 +333,8 @@ def _set_autotools_environment_variables(self): """ os.environ["FORCE_UNSAFE_CONFIGURE"] = "1" - @spack.builder.run_before("configure") - def _do_patch_libtool_configure(self): + @spack.phase_callbacks.run_before("configure") + def _do_patch_libtool_configure(self) -> None: """Patch bugs that propagate from libtool macros into "configure" and further into "libtool". Note that patches that can be fixed by patching "libtool" directly should be implemented in the _do_patch_libtool method @@ -358,8 +361,8 @@ def _do_patch_libtool_configure(self): # Support Libtool 2.4.2 and older: x.filter(regex=r'^(\s*test \$p = "-R")(; then\s*)$', repl=r'\1 || test x-l = x"$p"\2') - @spack.builder.run_after("configure") - def _do_patch_libtool(self): + @spack.phase_callbacks.run_after("configure") + def _do_patch_libtool(self) -> None: """If configure generates a "libtool" script that does not correctly detect the compiler (and patch_libtool is set), patch in the correct values for libtool variables. @@ -507,63 +510,36 @@ def _do_patch_libtool(self): ) @property - def configure_directory(self): + def configure_directory(self) -> str: """Return the directory where 'configure' resides.""" return self.pkg.stage.source_path @property - def configure_abs_path(self): + def configure_abs_path(self) -> str: # Absolute path to configure configure_abs_path = os.path.join(os.path.abspath(self.configure_directory), "configure") return configure_abs_path @property - def build_directory(self): + def build_directory(self) -> str: """Override to provide another place to build the package""" return self.configure_directory - @spack.builder.run_before("autoreconf") - def delete_configure_to_force_update(self): + @spack.phase_callbacks.run_before("autoreconf") + def delete_configure_to_force_update(self) -> None: if self.force_autoreconf: fs.force_remove(self.configure_abs_path) - def autoreconf(self, pkg, spec, prefix): - """Not needed usually, configure should be already there""" - - # If configure exists nothing needs to be done - if os.path.exists(self.configure_abs_path): - return - - # Else try to regenerate it, which requires a few build dependencies - ensure_build_dependencies_or_raise( - spec=spec, - dependencies=["autoconf", "automake", "libtool"], - error_msg="Cannot generate configure", - ) - - tty.msg("Configure script not found: trying to generate it") - tty.warn("*********************************************************") - tty.warn("* If the default procedure fails, consider implementing *") - tty.warn("* a custom AUTORECONF phase in the package *") - tty.warn("*********************************************************") - with fs.working_dir(self.configure_directory): - # This line is what is needed most of the time - # --install, --verbose, --force - autoreconf_args = ["-ivf"] - autoreconf_args += self.autoreconf_search_path_args - autoreconf_args += self.autoreconf_extra_args - self.pkg.module.autoreconf(*autoreconf_args) - @property - def autoreconf_search_path_args(self): + def autoreconf_search_path_args(self) -> List[str]: """Search path includes for autoreconf. Add an -I flag for all `aclocal` dirs of build deps, skips the default path of automake, move external include flags to the back, since they might pull in unrelated m4 files shadowing spack dependencies.""" return _autoreconf_search_path_args(self.spec) - @spack.builder.run_after("autoreconf") - def set_configure_or_die(self): + @spack.phase_callbacks.run_after("autoreconf") + def set_configure_or_die(self) -> None: """Ensure the presence of a "configure" script, or raise. If the "configure" is found, a module level attribute is set. @@ -580,13 +556,50 @@ def set_configure_or_die(self): globals_for_pkg.configure = Executable(self.configure_abs_path) globals_for_pkg.propagate_changes_to_mro() - def configure_args(self): + def configure_args(self) -> List[str]: """Return the list of all the arguments that must be passed to configure, except ``--prefix`` which will be pre-pended to the list. """ return [] - def configure(self, pkg, spec, prefix): + def autoreconf( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: + """Not needed usually, configure should be already there""" + + # If configure exists nothing needs to be done + if os.path.exists(self.configure_abs_path): + return + + # Else try to regenerate it, which requires a few build dependencies + ensure_build_dependencies_or_raise( + spec=spec, + dependencies=["autoconf", "automake", "libtool"], + error_msg="Cannot generate configure", + ) + + tty.msg("Configure script not found: trying to generate it") + tty.warn("*********************************************************") + tty.warn("* If the default procedure fails, consider implementing *") + tty.warn("* a custom AUTORECONF phase in the package *") + tty.warn("*********************************************************") + with fs.working_dir(self.configure_directory): + # This line is what is needed most of the time + # --install, --verbose, --force + autoreconf_args = ["-ivf"] + autoreconf_args += self.autoreconf_search_path_args + autoreconf_args += self.autoreconf_extra_args + self.pkg.module.autoreconf(*autoreconf_args) + + def configure( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run "configure", with the arguments specified by the builder and an appropriately set prefix. """ @@ -597,7 +610,12 @@ def configure(self, pkg, spec, prefix): with fs.working_dir(self.build_directory, create=True): pkg.module.configure(*options) - def build(self, pkg, spec, prefix): + def build( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run "make" on the build targets specified by the builder.""" # See https://autotools.io/automake/silent.html params = ["V=1"] @@ -605,41 +623,49 @@ def build(self, pkg, spec, prefix): with fs.working_dir(self.build_directory): pkg.module.make(*params) - def install(self, pkg, spec, prefix): + def install( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run "make" on the install targets specified by the builder.""" with fs.working_dir(self.build_directory): pkg.module.make(*self.install_targets) - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) - def check(self): + def check(self) -> None: """Run "make" on the ``test`` and ``check`` targets, if found.""" with fs.working_dir(self.build_directory): self.pkg._if_make_target_execute("test") self.pkg._if_make_target_execute("check") def _activate_or_not( - self, name, activation_word, deactivation_word, activation_value=None, variant=None - ): + self, + name: str, + activation_word: str, + deactivation_word: str, + activation_value: Optional[Union[Callable, str]] = None, + variant=None, + ) -> List[str]: """This function contain the current implementation details of :meth:`~spack.build_systems.autotools.AutotoolsBuilder.with_or_without` and :meth:`~spack.build_systems.autotools.AutotoolsBuilder.enable_or_disable`. Args: - name (str): name of the option that is being activated or not - activation_word (str): the default activation word ('with' in the - case of ``with_or_without``) - deactivation_word (str): the default deactivation word ('without' - in the case of ``with_or_without``) - activation_value (typing.Callable): callable that accepts a single - value. This value is either one of the allowed values for a - multi-valued variant or the name of a bool-valued variant. + name: name of the option that is being activated or not + activation_word: the default activation word ('with' in the case of + ``with_or_without``) + deactivation_word: the default deactivation word ('without' in the case of + ``with_or_without``) + activation_value: callable that accepts a single value. This value is either one of the + allowed values for a multi-valued variant or the name of a bool-valued variant. Returns the parameter to be used when the value is activated. - The special value 'prefix' can also be assigned and will return + The special value "prefix" can also be assigned and will return ``spec[name].prefix`` as activation parameter. - variant (str): name of the variant that is being processed - (if different from option name) + variant: name of the variant that is being processed (if different from option name) Examples: @@ -647,19 +673,19 @@ def _activate_or_not( .. code-block:: python - variant('foo', values=('x', 'y'), description='') - variant('bar', default=True, description='') - variant('ba_z', default=True, description='') + variant("foo", values=("x", "y"), description=") + variant("bar", default=True, description=") + variant("ba_z", default=True, description=") calling this function like: .. code-block:: python _activate_or_not( - 'foo', 'with', 'without', activation_value='prefix' + "foo", "with", "without", activation_value="prefix" ) - _activate_or_not('bar', 'with', 'without') - _activate_or_not('ba-z', 'with', 'without', variant='ba_z') + _activate_or_not("bar", "with", "without") + _activate_or_not("ba-z", "with", "without", variant="ba_z") will generate the following configuration options: @@ -679,8 +705,8 @@ def _activate_or_not( Raises: KeyError: if name is not among known variants """ - spec = self.pkg.spec - args = [] + spec: spack.spec.Spec = self.pkg.spec + args: List[str] = [] if activation_value == "prefix": activation_value = lambda x: spec[x].prefix @@ -698,7 +724,7 @@ def _activate_or_not( # Create a list of pairs. Each pair includes a configuration # option and whether or not that option is activated vdef = self.pkg.get_variant(variant) - if set(vdef.values) == set((True, False)): + if set(vdef.values) == set((True, False)): # type: ignore # BoolValuedVariant carry information about a single option. # Nonetheless, for uniformity of treatment we'll package them # in an iterable of one element. @@ -709,14 +735,12 @@ def _activate_or_not( # package's build system. It excludes values which have special # meanings and do not correspond to features (e.g. "none") feature_values = getattr(vdef.values, "feature_values", None) or vdef.values - options = [(value, f"{variant}={value}" in spec) for value in feature_values] + options = [(v, f"{variant}={v}" in spec) for v in feature_values] # type: ignore # For each allowed value in the list of values for option_value, activated in options: # Search for an override in the package for this value - override_name = "{0}_or_{1}_{2}".format( - activation_word, deactivation_word, option_value - ) + override_name = f"{activation_word}_or_{deactivation_word}_{option_value}" line_generator = getattr(self, override_name, None) or getattr( self.pkg, override_name, None ) @@ -725,19 +749,24 @@ def _activate_or_not( def _default_generator(is_activated): if is_activated: - line = "--{0}-{1}".format(activation_word, option_value) + line = f"--{activation_word}-{option_value}" if activation_value is not None and activation_value( option_value ): # NOQA=ignore=E501 - line += "={0}".format(activation_value(option_value)) + line = f"{line}={activation_value(option_value)}" return line - return "--{0}-{1}".format(deactivation_word, option_value) + return f"--{deactivation_word}-{option_value}" line_generator = _default_generator args.append(line_generator(activated)) return args - def with_or_without(self, name, activation_value=None, variant=None): + def with_or_without( + self, + name: str, + activation_value: Optional[Union[Callable, str]] = None, + variant: Optional[str] = None, + ) -> List[str]: """Inspects a variant and returns the arguments that activate or deactivate the selected feature(s) for the configure options. @@ -752,12 +781,11 @@ def with_or_without(self, name, activation_value=None, variant=None): ``variant=value`` is in the spec. Args: - name (str): name of a valid multi-valued variant - activation_value (typing.Callable): callable that accepts a single - value and returns the parameter to be used leading to an entry - of the type ``--with-{name}={parameter}``. + name: name of a valid multi-valued variant + activation_value: callable that accepts a single value and returns the parameter to be + used leading to an entry of the type ``--with-{name}={parameter}``. - The special value 'prefix' can also be assigned and will return + The special value "prefix" can also be assigned and will return ``spec[name].prefix`` as activation parameter. Returns: @@ -765,18 +793,22 @@ def with_or_without(self, name, activation_value=None, variant=None): """ return self._activate_or_not(name, "with", "without", activation_value, variant) - def enable_or_disable(self, name, activation_value=None, variant=None): + def enable_or_disable( + self, + name: str, + activation_value: Optional[Union[Callable, str]] = None, + variant: Optional[str] = None, + ) -> List[str]: """Same as :meth:`~spack.build_systems.autotools.AutotoolsBuilder.with_or_without` but substitute ``with`` with ``enable`` and ``without`` with ``disable``. Args: - name (str): name of a valid multi-valued variant - activation_value (typing.Callable): if present accepts a single value - and returns the parameter to be used leading to an entry of the - type ``--enable-{name}={parameter}`` + name: name of a valid multi-valued variant + activation_value: if present accepts a single value and returns the parameter to be + used leading to an entry of the type ``--enable-{name}={parameter}`` - The special value 'prefix' can also be assigned and will return + The special value "prefix" can also be assigned and will return ``spec[name].prefix`` as activation parameter. Returns: @@ -784,15 +816,15 @@ def enable_or_disable(self, name, activation_value=None, variant=None): """ return self._activate_or_not(name, "enable", "disable", activation_value, variant) - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) - def installcheck(self): + def installcheck(self) -> None: """Run "make" on the ``installcheck`` target, if found.""" with fs.working_dir(self.build_directory): self.pkg._if_make_target_execute("installcheck") - @spack.builder.run_after("install") - def remove_libtool_archives(self): + @spack.phase_callbacks.run_after("install") + def remove_libtool_archives(self) -> None: """Remove all .la files in prefix sub-folders if the package sets ``install_libtool_archives`` to be False. """ @@ -814,12 +846,13 @@ def setup_build_environment(self, env): env.set("MACOSX_DEPLOYMENT_TARGET", "10.16") # On macOS, force rpaths for shared library IDs and remove duplicate rpaths - spack.builder.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) + spack.phase_callbacks.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) -def _autoreconf_search_path_args(spec): - dirs_seen = set() - flags_spack, flags_external = [], [] +def _autoreconf_search_path_args(spec: spack.spec.Spec) -> List[str]: + dirs_seen: Set[Tuple[int, int]] = set() + flags_spack: List[str] = [] + flags_external: List[str] = [] # We don't want to add an include flag for automake's default search path. for automake in spec.dependencies(name="automake", deptype="build"): diff --git a/lib/spack/spack/build_systems/cached_cmake.py b/lib/spack/spack/build_systems/cached_cmake.py index d9b415cbc76416..273eb070b10637 100644 --- a/lib/spack/spack/build_systems/cached_cmake.py +++ b/lib/spack/spack/build_systems/cached_cmake.py @@ -10,7 +10,7 @@ import llnl.util.filesystem as fs import llnl.util.tty as tty -import spack.builder +import spack.phase_callbacks from .cmake import CMakeBuilder, CMakePackage @@ -192,7 +192,10 @@ def initconfig_mpi_entries(self): entries.append(cmake_cache_path("MPI_C_COMPILER", spec["mpi"].mpicc)) entries.append(cmake_cache_path("MPI_CXX_COMPILER", spec["mpi"].mpicxx)) - entries.append(cmake_cache_path("MPI_Fortran_COMPILER", spec["mpi"].mpifc)) + + # not all MPIs have Fortran wrappers + if hasattr(spec["mpi"], "mpifc"): + entries.append(cmake_cache_path("MPI_Fortran_COMPILER", spec["mpi"].mpifc)) # Check for slurm using_slurm = False @@ -332,7 +335,7 @@ def std_cmake_args(self): args.extend(["-C", self.cache_path]) return args - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def install_cmake_cache(self): fs.mkdirp(self.pkg.spec.prefix.share.cmake) fs.install(self.cache_path, self.pkg.spec.prefix.share.cmake) diff --git a/lib/spack/spack/build_systems/cargo.py b/lib/spack/spack/build_systems/cargo.py index 4dded46559fb3a..a27ded465c8b86 100644 --- a/lib/spack/spack/build_systems/cargo.py +++ b/lib/spack/spack/build_systems/cargo.py @@ -7,10 +7,11 @@ import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, depends_on from spack.multimethod import when -from ._checks import BaseBuilder, execute_install_time_tests +from ._checks import BuilderWithDefaults, execute_install_time_tests class CargoPackage(spack.package_base.PackageBase): @@ -27,7 +28,7 @@ class CargoPackage(spack.package_base.PackageBase): @spack.builder.builder("cargo") -class CargoBuilder(BaseBuilder): +class CargoBuilder(BuilderWithDefaults): """The Cargo builder encodes the most common way of building software with a rust Cargo.toml file. It has two phases that can be overridden, if need be: @@ -77,7 +78,7 @@ def install(self, pkg, spec, prefix): with fs.working_dir(self.build_directory): fs.install_tree("out", prefix) - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) def check(self): """Run "cargo test".""" diff --git a/lib/spack/spack/build_systems/cmake.py b/lib/spack/spack/build_systems/cmake.py index a32d92d3a6e713..2566d3888bba2c 100644 --- a/lib/spack/spack/build_systems/cmake.py +++ b/lib/spack/spack/build_systems/cmake.py @@ -9,7 +9,7 @@ import re import sys from itertools import chain -from typing import List, Optional, Set, Tuple +from typing import Any, List, Optional, Set, Tuple import archspec.cpu @@ -20,11 +20,14 @@ import spack.deptypes as dt import spack.error import spack.package_base +import spack.phase_callbacks +import spack.spec +import spack.util.prefix from spack.directives import build_system, conflicts, depends_on, variant from spack.multimethod import when from spack.util.environment import filter_system_paths -from ._checks import BaseBuilder, execute_build_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests # Regex to extract the primary generator from the CMake generator # string. @@ -50,9 +53,9 @@ def _maybe_set_python_hints(pkg: spack.package_base.PackageBase, args: List[str] python_executable = pkg.spec["python"].command.path args.extend( [ - CMakeBuilder.define("PYTHON_EXECUTABLE", python_executable), - CMakeBuilder.define("Python_EXECUTABLE", python_executable), - CMakeBuilder.define("Python3_EXECUTABLE", python_executable), + define("PYTHON_EXECUTABLE", python_executable), + define("Python_EXECUTABLE", python_executable), + define("Python3_EXECUTABLE", python_executable), ] ) @@ -87,7 +90,7 @@ def _conditional_cmake_defaults(pkg: spack.package_base.PackageBase, args: List[ ipo = False if cmake.satisfies("@3.9:"): - args.append(CMakeBuilder.define("CMAKE_INTERPROCEDURAL_OPTIMIZATION", ipo)) + args.append(define("CMAKE_INTERPROCEDURAL_OPTIMIZATION", ipo)) # Disable Package Registry: export(PACKAGE) may put files in the user's home directory, and # find_package may search there. This is not what we want. @@ -95,30 +98,36 @@ def _conditional_cmake_defaults(pkg: spack.package_base.PackageBase, args: List[ # Do not populate CMake User Package Registry if cmake.satisfies("@3.15:"): # see https://cmake.org/cmake/help/latest/policy/CMP0090.html - args.append(CMakeBuilder.define("CMAKE_POLICY_DEFAULT_CMP0090", "NEW")) + args.append(define("CMAKE_POLICY_DEFAULT_CMP0090", "NEW")) elif cmake.satisfies("@3.1:"): # see https://cmake.org/cmake/help/latest/variable/CMAKE_EXPORT_NO_PACKAGE_REGISTRY.html - args.append(CMakeBuilder.define("CMAKE_EXPORT_NO_PACKAGE_REGISTRY", True)) + args.append(define("CMAKE_EXPORT_NO_PACKAGE_REGISTRY", True)) # Do not use CMake User/System Package Registry # https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#disabling-the-package-registry if cmake.satisfies("@3.16:"): - args.append(CMakeBuilder.define("CMAKE_FIND_USE_PACKAGE_REGISTRY", False)) + args.append(define("CMAKE_FIND_USE_PACKAGE_REGISTRY", False)) elif cmake.satisfies("@3.1:3.15"): - args.append(CMakeBuilder.define("CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY", False)) - args.append(CMakeBuilder.define("CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY", False)) + args.append(define("CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY", False)) + args.append(define("CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY", False)) # Export a compilation database if supported. if _supports_compilation_databases(pkg): - args.append(CMakeBuilder.define("CMAKE_EXPORT_COMPILE_COMMANDS", True)) + args.append(define("CMAKE_EXPORT_COMPILE_COMMANDS", True)) # Enable MACOSX_RPATH by default when cmake_minimum_required < 3 # https://cmake.org/cmake/help/latest/policy/CMP0042.html if pkg.spec.satisfies("platform=darwin") and cmake.satisfies("@3:"): - args.append(CMakeBuilder.define("CMAKE_POLICY_DEFAULT_CMP0042", "NEW")) + args.append(define("CMAKE_POLICY_DEFAULT_CMP0042", "NEW")) + # Disable find package's config mode for versions of Boost that + # didn't provide it. See https://github.com/spack/spack/issues/20169 + # and https://cmake.org/cmake/help/latest/module/FindBoost.html + if pkg.spec.satisfies("^boost@:1.69.0"): + args.append(define("Boost_NO_BOOST_CMAKE", True)) -def generator(*names: str, default: Optional[str] = None): + +def generator(*names: str, default: Optional[str] = None) -> None: """The build system generator to use. See ``cmake --help`` for a list of valid generators. @@ -265,15 +274,15 @@ def flags_to_build_system_args(self, flags): # Legacy methods (used by too many packages to change them, # need to forward to the builder) - def define(self, *args, **kwargs): - return self.builder.define(*args, **kwargs) + def define(self, cmake_var: str, value: Any) -> str: + return define(cmake_var, value) - def define_from_variant(self, *args, **kwargs): - return self.builder.define_from_variant(*args, **kwargs) + def define_from_variant(self, cmake_var: str, variant: Optional[str] = None) -> str: + return define_from_variant(self, cmake_var, variant) @spack.builder.builder("cmake") -class CMakeBuilder(BaseBuilder): +class CMakeBuilder(BuilderWithDefaults): """The cmake builder encodes the default way of building software with CMake. IT has three phases that can be overridden: @@ -323,15 +332,15 @@ class CMakeBuilder(BaseBuilder): build_time_test_callbacks = ["check"] @property - def archive_files(self): + def archive_files(self) -> List[str]: """Files to archive for packages based on CMake""" files = [os.path.join(self.build_directory, "CMakeCache.txt")] - if _supports_compilation_databases(self): + if _supports_compilation_databases(self.pkg): files.append(os.path.join(self.build_directory, "compile_commands.json")) return files @property - def root_cmakelists_dir(self): + def root_cmakelists_dir(self) -> str: """The relative path to the directory containing CMakeLists.txt This path is relative to the root of the extracted tarball, @@ -340,16 +349,17 @@ def root_cmakelists_dir(self): return self.pkg.stage.source_path @property - def generator(self): + def generator(self) -> str: if self.spec.satisfies("generator=make"): return "Unix Makefiles" if self.spec.satisfies("generator=ninja"): return "Ninja" - msg = f'{self.spec.format()} has an unsupported value for the "generator" variant' - raise ValueError(msg) + raise ValueError( + f'{self.spec.format()} has an unsupported value for the "generator" variant' + ) @property - def std_cmake_args(self): + def std_cmake_args(self) -> List[str]: """Standard cmake arguments provided as a property for convenience of package writers """ @@ -358,7 +368,9 @@ def std_cmake_args(self): return args @staticmethod - def std_args(pkg, generator=None): + def std_args( + pkg: spack.package_base.PackageBase, generator: Optional[str] = None + ) -> List[str]: """Computes the standard cmake arguments for a generic package""" default_generator = "Ninja" if sys.platform == "win32" else "Unix Makefiles" generator = generator or default_generator @@ -375,7 +387,6 @@ def std_args(pkg, generator=None): except KeyError: build_type = "RelWithDebInfo" - define = CMakeBuilder.define args = [ "-G", generator, @@ -411,152 +422,31 @@ def std_args(pkg, generator=None): return args @staticmethod - def define_cuda_architectures(pkg): - """Returns the str ``-DCMAKE_CUDA_ARCHITECTURES:STRING=(expanded cuda_arch)``. - - ``cuda_arch`` is variant composed of a list of target CUDA architectures and - it is declared in the cuda package. - - This method is no-op for cmake<3.18 and when ``cuda_arch`` variant is not set. - - """ - cmake_flag = str() - if "cuda_arch" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.18:"): - cmake_flag = CMakeBuilder.define( - "CMAKE_CUDA_ARCHITECTURES", pkg.spec.variants["cuda_arch"].value - ) - - return cmake_flag + def define_cuda_architectures(pkg: spack.package_base.PackageBase) -> str: + return define_cuda_architectures(pkg) @staticmethod - def define_hip_architectures(pkg): - """Returns the str ``-DCMAKE_HIP_ARCHITECTURES:STRING=(expanded amdgpu_target)``. - - ``amdgpu_target`` is variant composed of a list of the target HIP - architectures and it is declared in the rocm package. - - This method is no-op for cmake<3.18 and when ``amdgpu_target`` variant is - not set. - - """ - cmake_flag = str() - if "amdgpu_target" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.21:"): - cmake_flag = CMakeBuilder.define( - "CMAKE_HIP_ARCHITECTURES", pkg.spec.variants["amdgpu_target"].value - ) - - return cmake_flag + def define_hip_architectures(pkg: spack.package_base.PackageBase) -> str: + return define_hip_architectures(pkg) @staticmethod - def define(cmake_var, value): - """Return a CMake command line argument that defines a variable. - - The resulting argument will convert boolean values to OFF/ON - and lists/tuples to CMake semicolon-separated string lists. All other - values will be interpreted as strings. - - Examples: - - .. code-block:: python - - [define('BUILD_SHARED_LIBS', True), - define('CMAKE_CXX_STANDARD', 14), - define('swr', ['avx', 'avx2'])] - - will generate the following configuration options: - - .. code-block:: console - - ["-DBUILD_SHARED_LIBS:BOOL=ON", - "-DCMAKE_CXX_STANDARD:STRING=14", - "-DSWR:STRING=avx;avx2] - - """ - # Create a list of pairs. Each pair includes a configuration - # option and whether or not that option is activated - if isinstance(value, bool): - kind = "BOOL" - value = "ON" if value else "OFF" - else: - kind = "STRING" - if isinstance(value, collections.abc.Sequence) and not isinstance(value, str): - value = ";".join(str(v) for v in value) - else: - value = str(value) - - return "".join(["-D", cmake_var, ":", kind, "=", value]) - - def define_from_variant(self, cmake_var, variant=None): - """Return a CMake command line argument from the given variant's value. - - The optional ``variant`` argument defaults to the lower-case transform - of ``cmake_var``. - - This utility function is similar to - :meth:`~spack.build_systems.autotools.AutotoolsBuilder.with_or_without`. - - Examples: - - Given a package with: - - .. code-block:: python - - variant('cxxstd', default='11', values=('11', '14'), - multi=False, description='') - variant('shared', default=True, description='') - variant('swr', values=any_combination_of('avx', 'avx2'), - description='') - - calling this function like: - - .. code-block:: python - - [self.define_from_variant('BUILD_SHARED_LIBS', 'shared'), - self.define_from_variant('CMAKE_CXX_STANDARD', 'cxxstd'), - self.define_from_variant('SWR')] - - will generate the following configuration options: - - .. code-block:: console - - ["-DBUILD_SHARED_LIBS:BOOL=ON", - "-DCMAKE_CXX_STANDARD:STRING=14", - "-DSWR:STRING=avx;avx2] - - for `` cxxstd=14 +shared swr=avx,avx2`` - - Note: if the provided variant is conditional, and the condition is not met, - this function returns an empty string. CMake discards empty strings - provided on the command line. - """ - - if variant is None: - variant = cmake_var.lower() - - if not self.pkg.has_variant(variant): - raise KeyError('"{0}" is not a variant of "{1}"'.format(variant, self.pkg.name)) - - if variant not in self.pkg.spec.variants: - return "" - - value = self.pkg.spec.variants[variant].value - if isinstance(value, (tuple, list)): - # Sort multi-valued variants for reproducibility - value = sorted(value) + def define(cmake_var: str, value: Any) -> str: + return define(cmake_var, value) - return self.define(cmake_var, value) + def define_from_variant(self, cmake_var: str, variant: Optional[str] = None) -> str: + return define_from_variant(self.pkg, cmake_var, variant) @property - def build_dirname(self): + def build_dirname(self) -> str: """Directory name to use when building the package.""" - return "spack-build-%s" % self.pkg.spec.dag_hash(7) + return f"spack-build-{self.pkg.spec.dag_hash(7)}" @property - def build_directory(self): + def build_directory(self) -> str: """Full-path to the directory to use when building the package.""" return os.path.join(self.pkg.stage.path, self.build_dirname) - def cmake_args(self): + def cmake_args(self) -> List[str]: """List of all the arguments that must be passed to cmake, except: * CMAKE_INSTALL_PREFIX @@ -566,7 +456,12 @@ def cmake_args(self): """ return [] - def cmake(self, pkg, spec, prefix): + def cmake( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Runs ``cmake`` in the build directory""" # skip cmake phase if it is an incremental develop build @@ -581,7 +476,12 @@ def cmake(self, pkg, spec, prefix): with fs.working_dir(self.build_directory, create=True): pkg.module.cmake(*options) - def build(self, pkg, spec, prefix): + def build( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Make the build targets""" with fs.working_dir(self.build_directory): if self.generator == "Unix Makefiles": @@ -590,7 +490,12 @@ def build(self, pkg, spec, prefix): self.build_targets.append("-v") pkg.module.ninja(*self.build_targets) - def install(self, pkg, spec, prefix): + def install( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Make the install targets""" with fs.working_dir(self.build_directory): if self.generator == "Unix Makefiles": @@ -598,9 +503,9 @@ def install(self, pkg, spec, prefix): elif self.generator == "Ninja": pkg.module.ninja(*self.install_targets) - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) - def check(self): + def check(self) -> None: """Search the CMake-generated files for the targets ``test`` and ``check``, and runs them if found. """ @@ -612,3 +517,133 @@ def check(self): elif primary_generator == "Ninja": self.pkg._if_ninja_target_execute("test", jobs_env="CTEST_PARALLEL_LEVEL") self.pkg._if_ninja_target_execute("check") + + +def define(cmake_var: str, value: Any) -> str: + """Return a CMake command line argument that defines a variable. + + The resulting argument will convert boolean values to OFF/ON and lists/tuples to CMake + semicolon-separated string lists. All other values will be interpreted as strings. + + Examples: + + .. code-block:: python + + [define("BUILD_SHARED_LIBS", True), + define("CMAKE_CXX_STANDARD", 14), + define("swr", ["avx", "avx2"])] + + will generate the following configuration options: + + .. code-block:: console + + ["-DBUILD_SHARED_LIBS:BOOL=ON", + "-DCMAKE_CXX_STANDARD:STRING=14", + "-DSWR:STRING=avx;avx2] + + """ + # Create a list of pairs. Each pair includes a configuration + # option and whether or not that option is activated + if isinstance(value, bool): + kind = "BOOL" + value = "ON" if value else "OFF" + else: + kind = "STRING" + if isinstance(value, collections.abc.Sequence) and not isinstance(value, str): + value = ";".join(str(v) for v in value) + else: + value = str(value) + + return "".join(["-D", cmake_var, ":", kind, "=", value]) + + +def define_from_variant( + pkg: spack.package_base.PackageBase, cmake_var: str, variant: Optional[str] = None +) -> str: + """Return a CMake command line argument from the given variant's value. + + The optional ``variant`` argument defaults to the lower-case transform + of ``cmake_var``. + + Examples: + + Given a package with: + + .. code-block:: python + + variant("cxxstd", default="11", values=("11", "14"), + multi=False, description="") + variant("shared", default=True, description="") + variant("swr", values=any_combination_of("avx", "avx2"), + description="") + + calling this function like: + + .. code-block:: python + + [ + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"), + self.define_from_variant("SWR"), + ] + + will generate the following configuration options: + + .. code-block:: console + + [ + "-DBUILD_SHARED_LIBS:BOOL=ON", + "-DCMAKE_CXX_STANDARD:STRING=14", + "-DSWR:STRING=avx;avx2", + ] + + for `` cxxstd=14 +shared swr=avx,avx2`` + + Note: if the provided variant is conditional, and the condition is not met, this function + returns an empty string. CMake discards empty strings provided on the command line. + """ + if variant is None: + variant = cmake_var.lower() + + if not pkg.has_variant(variant): + raise KeyError('"{0}" is not a variant of "{1}"'.format(variant, pkg.name)) + + if variant not in pkg.spec.variants: + return "" + + value = pkg.spec.variants[variant].value + if isinstance(value, (tuple, list)): + # Sort multi-valued variants for reproducibility + value = sorted(value) + + return define(cmake_var, value) + + +def define_hip_architectures(pkg: spack.package_base.PackageBase) -> str: + """Returns the str ``-DCMAKE_HIP_ARCHITECTURES:STRING=(expanded amdgpu_target)``. + + ``amdgpu_target`` is variant composed of a list of the target HIP + architectures and it is declared in the rocm package. + + This method is no-op for cmake<3.18 and when ``amdgpu_target`` variant is + not set. + + """ + if "amdgpu_target" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.21:"): + return define("CMAKE_HIP_ARCHITECTURES", pkg.spec.variants["amdgpu_target"].value) + + return "" + + +def define_cuda_architectures(pkg: spack.package_base.PackageBase) -> str: + """Returns the str ``-DCMAKE_CUDA_ARCHITECTURES:STRING=(expanded cuda_arch)``. + + ``cuda_arch`` is variant composed of a list of target CUDA architectures and + it is declared in the cuda package. + + This method is no-op for cmake<3.18 and when ``cuda_arch`` variant is not set. + + """ + if "cuda_arch" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.18:"): + return define("CMAKE_CUDA_ARCHITECTURES", pkg.spec.variants["cuda_arch"].value) + return "" diff --git a/lib/spack/spack/build_systems/cuda.py b/lib/spack/spack/build_systems/cuda.py index 5bfe0cfcadf679..d25c63ed196bb9 100644 --- a/lib/spack/spack/build_systems/cuda.py +++ b/lib/spack/spack/build_systems/cuda.py @@ -180,13 +180,6 @@ def compute_capabilities(arch_list: Iterable[str]) -> List[str]: conflicts("%gcc@7:", when="+cuda ^cuda@:9.1 target=x86_64:") conflicts("%gcc@8:", when="+cuda ^cuda@:10.0.130 target=x86_64:") conflicts("%gcc@9:", when="+cuda ^cuda@:10.2.89 target=x86_64:") - conflicts("%pgi@:14.8", when="+cuda ^cuda@:7.0.27 target=x86_64:") - conflicts("%pgi@:15.3,15.5:", when="+cuda ^cuda@7.5 target=x86_64:") - conflicts("%pgi@:16.2,16.0:16.3", when="+cuda ^cuda@8 target=x86_64:") - conflicts("%pgi@:15,18:", when="+cuda ^cuda@9.0:9.1 target=x86_64:") - conflicts("%pgi@:16,19:", when="+cuda ^cuda@9.2.88:10.0 target=x86_64:") - conflicts("%pgi@:17,20:", when="+cuda ^cuda@10.1.105:10.2.89 target=x86_64:") - conflicts("%pgi@:17,21:", when="+cuda ^cuda@11.0.2:11.1.0 target=x86_64:") conflicts("%clang@:3.4", when="+cuda ^cuda@:7.5 target=x86_64:") conflicts("%clang@:3.7,4:", when="+cuda ^cuda@8.0:9.0 target=x86_64:") conflicts("%clang@:3.7,4.1:", when="+cuda ^cuda@9.1 target=x86_64:") @@ -212,9 +205,6 @@ def compute_capabilities(arch_list: Iterable[str]) -> List[str]: conflicts("%gcc@8:", when="+cuda ^cuda@:10.0.130 target=ppc64le:") conflicts("%gcc@9:", when="+cuda ^cuda@:10.1.243 target=ppc64le:") # officially, CUDA 11.0.2 only supports the system GCC 8.3 on ppc64le - conflicts("%pgi", when="+cuda ^cuda@:8 target=ppc64le:") - conflicts("%pgi@:16", when="+cuda ^cuda@:9.1.185 target=ppc64le:") - conflicts("%pgi@:17", when="+cuda ^cuda@:10 target=ppc64le:") conflicts("%clang@4:", when="+cuda ^cuda@:9.0.176 target=ppc64le:") conflicts("%clang@5:", when="+cuda ^cuda@:9.1 target=ppc64le:") conflicts("%clang@6:", when="+cuda ^cuda@:9.2 target=ppc64le:") diff --git a/lib/spack/spack/build_systems/generic.py b/lib/spack/spack/build_systems/generic.py index df8f53d5e6e02a..16b7a544280c4a 100644 --- a/lib/spack/spack/build_systems/generic.py +++ b/lib/spack/spack/build_systems/generic.py @@ -7,8 +7,9 @@ import spack.builder import spack.directives import spack.package_base +import spack.phase_callbacks -from ._checks import BaseBuilder, apply_macos_rpath_fixups, execute_install_time_tests +from ._checks import BuilderWithDefaults, apply_macos_rpath_fixups, execute_install_time_tests class Package(spack.package_base.PackageBase): @@ -26,7 +27,7 @@ class Package(spack.package_base.PackageBase): @spack.builder.builder("generic") -class GenericBuilder(BaseBuilder): +class GenericBuilder(BuilderWithDefaults): """A builder for a generic build system, that require packagers to implement an "install" phase. """ @@ -44,7 +45,7 @@ class GenericBuilder(BaseBuilder): install_time_test_callbacks: List[str] = [] # On macOS, force rpaths for shared library IDs and remove duplicate rpaths - spack.builder.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) + spack.phase_callbacks.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) # unconditionally perform any post-install phase tests - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) diff --git a/lib/spack/spack/build_systems/go.py b/lib/spack/spack/build_systems/go.py index ae588789c774d5..bcd38d65bd1550 100644 --- a/lib/spack/spack/build_systems/go.py +++ b/lib/spack/spack/build_systems/go.py @@ -7,10 +7,11 @@ import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, extends from spack.multimethod import when -from ._checks import BaseBuilder, execute_install_time_tests +from ._checks import BuilderWithDefaults, execute_install_time_tests class GoPackage(spack.package_base.PackageBase): @@ -32,7 +33,7 @@ class GoPackage(spack.package_base.PackageBase): @spack.builder.builder("go") -class GoBuilder(BaseBuilder): +class GoBuilder(BuilderWithDefaults): """The Go builder encodes the most common way of building software with a golang go.mod file. It has two phases that can be overridden, if need be: @@ -99,7 +100,7 @@ def install(self, pkg, spec, prefix): fs.mkdirp(prefix.bin) fs.install(pkg.name, prefix.bin) - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) def check(self): """Run ``go test .`` in the source directory""" diff --git a/lib/spack/spack/build_systems/intel.py b/lib/spack/spack/build_systems/intel.py index 9f82bae14d39b0..0a791f899930fc 100644 --- a/lib/spack/spack/build_systems/intel.py +++ b/lib/spack/spack/build_systems/intel.py @@ -22,8 +22,8 @@ install, ) -import spack.builder import spack.error +import spack.phase_callbacks from spack.build_environment import dso_suffix from spack.error import InstallError from spack.util.environment import EnvironmentModifications @@ -1163,7 +1163,7 @@ def _determine_license_type(self): debug_print(license_type) return license_type - @spack.builder.run_before("install") + @spack.phase_callbacks.run_before("install") def configure(self): """Generates the silent.cfg file to pass to installer.sh. @@ -1250,7 +1250,7 @@ def install(self, spec, prefix): for f in glob.glob("%s/intel*log" % tmpdir): install(f, dst) - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def validate_install(self): # Sometimes the installer exits with an error but doesn't pass a # non-zero exit code to spack. Check for the existence of a 'bin' @@ -1258,7 +1258,7 @@ def validate_install(self): if not os.path.exists(self.prefix.bin): raise InstallError("The installer has failed to install anything.") - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def configure_rpath(self): if "+rpath" not in self.spec: return @@ -1276,7 +1276,7 @@ def configure_rpath(self): with open(compiler_cfg, "w") as fh: fh.write("-Xlinker -rpath={0}\n".format(compilers_lib_dir)) - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def configure_auto_dispatch(self): if self._has_compilers: if "auto_dispatch=none" in self.spec: @@ -1300,7 +1300,7 @@ def configure_auto_dispatch(self): with open(compiler_cfg, "a") as fh: fh.write("-ax{0}\n".format(",".join(ad))) - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def filter_compiler_wrappers(self): if ("+mpi" in self.spec or self.provides("mpi")) and "~newdtags" in self.spec: bin_dir = self.component_bin_dir("mpi") @@ -1308,7 +1308,7 @@ def filter_compiler_wrappers(self): f = os.path.join(bin_dir, f) filter_file("-Xlinker --enable-new-dtags", " ", f, string=True) - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def uninstall_ism(self): # The "Intel(R) Software Improvement Program" [ahem] gets installed, # apparently regardless of PHONEHOME_SEND_USAGE_DATA. @@ -1340,7 +1340,7 @@ def base_lib_dir(self): debug_print(d) return d - @spack.builder.run_after("install") + @spack.phase_callbacks.run_after("install") def modify_LLVMgold_rpath(self): """Add libimf.so and other required libraries to the RUNPATH of LLVMgold.so. diff --git a/lib/spack/spack/build_systems/makefile.py b/lib/spack/spack/build_systems/makefile.py index 25f25adfe3d716..083cab3744fa45 100644 --- a/lib/spack/spack/build_systems/makefile.py +++ b/lib/spack/spack/build_systems/makefile.py @@ -8,11 +8,14 @@ import spack.builder import spack.package_base +import spack.phase_callbacks +import spack.spec +import spack.util.prefix from spack.directives import build_system, conflicts, depends_on from spack.multimethod import when from ._checks import ( - BaseBuilder, + BuilderWithDefaults, apply_macos_rpath_fixups, execute_build_time_tests, execute_install_time_tests, @@ -36,7 +39,7 @@ class MakefilePackage(spack.package_base.PackageBase): @spack.builder.builder("makefile") -class MakefileBuilder(BaseBuilder): +class MakefileBuilder(BuilderWithDefaults): """The Makefile builder encodes the most common way of building software with Makefiles. It has three phases that can be overridden, if need be: @@ -91,35 +94,50 @@ class MakefileBuilder(BaseBuilder): install_time_test_callbacks = ["installcheck"] @property - def build_directory(self): + def build_directory(self) -> str: """Return the directory containing the main Makefile.""" return self.pkg.stage.source_path - def edit(self, pkg, spec, prefix): + def edit( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Edit the Makefile before calling make. The default is a no-op.""" pass - def build(self, pkg, spec, prefix): + def build( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run "make" on the build targets specified by the builder.""" with fs.working_dir(self.build_directory): pkg.module.make(*self.build_targets) - def install(self, pkg, spec, prefix): + def install( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run "make" on the install targets specified by the builder.""" with fs.working_dir(self.build_directory): pkg.module.make(*self.install_targets) - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) - def check(self): + def check(self) -> None: """Run "make" on the ``test`` and ``check`` targets, if found.""" with fs.working_dir(self.build_directory): self.pkg._if_make_target_execute("test") self.pkg._if_make_target_execute("check") - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) - def installcheck(self): + def installcheck(self) -> None: """Searches the Makefile for an ``installcheck`` target and runs it if found. """ @@ -127,4 +145,4 @@ def installcheck(self): self.pkg._if_make_target_execute("installcheck") # On macOS, force rpaths for shared library IDs and remove duplicate rpaths - spack.builder.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) + spack.phase_callbacks.run_after("install", when="platform=darwin")(apply_macos_rpath_fixups) diff --git a/lib/spack/spack/build_systems/maven.py b/lib/spack/spack/build_systems/maven.py index 809258d5dff2c5..962d05f96c43af 100644 --- a/lib/spack/spack/build_systems/maven.py +++ b/lib/spack/spack/build_systems/maven.py @@ -10,7 +10,7 @@ from spack.multimethod import when from spack.util.executable import which -from ._checks import BaseBuilder +from ._checks import BuilderWithDefaults class MavenPackage(spack.package_base.PackageBase): @@ -34,7 +34,7 @@ class MavenPackage(spack.package_base.PackageBase): @spack.builder.builder("maven") -class MavenBuilder(BaseBuilder): +class MavenBuilder(BuilderWithDefaults): """The Maven builder encodes the default way to build software with Maven. It has two phases that can be overridden, if need be: diff --git a/lib/spack/spack/build_systems/meson.py b/lib/spack/spack/build_systems/meson.py index cf3cd24e2032f7..8a5ea5d850f52b 100644 --- a/lib/spack/spack/build_systems/meson.py +++ b/lib/spack/spack/build_systems/meson.py @@ -9,10 +9,13 @@ import spack.builder import spack.package_base +import spack.phase_callbacks +import spack.spec +import spack.util.prefix from spack.directives import build_system, conflicts, depends_on, variant from spack.multimethod import when -from ._checks import BaseBuilder, execute_build_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests class MesonPackage(spack.package_base.PackageBase): @@ -62,7 +65,7 @@ def flags_to_build_system_args(self, flags): @spack.builder.builder("meson") -class MesonBuilder(BaseBuilder): +class MesonBuilder(BuilderWithDefaults): """The Meson builder encodes the default way to build software with Meson. The builder has three phases that can be overridden, if need be: @@ -112,7 +115,7 @@ def archive_files(self): return [os.path.join(self.build_directory, "meson-logs", "meson-log.txt")] @property - def root_mesonlists_dir(self): + def root_mesonlists_dir(self) -> str: """Relative path to the directory containing meson.build This path is relative to the root of the extracted tarball, @@ -121,7 +124,7 @@ def root_mesonlists_dir(self): return self.pkg.stage.source_path @property - def std_meson_args(self): + def std_meson_args(self) -> List[str]: """Standard meson arguments provided as a property for convenience of package writers. """ @@ -132,7 +135,7 @@ def std_meson_args(self): return std_meson_args @staticmethod - def std_args(pkg): + def std_args(pkg) -> List[str]: """Standard meson arguments for a generic package.""" try: build_type = pkg.spec.variants["buildtype"].value @@ -172,7 +175,7 @@ def build_directory(self): """Directory to use when building the package.""" return os.path.join(self.pkg.stage.path, self.build_dirname) - def meson_args(self): + def meson_args(self) -> List[str]: """List of arguments that must be passed to meson, except: * ``--prefix`` @@ -185,7 +188,12 @@ def meson_args(self): """ return [] - def meson(self, pkg, spec, prefix): + def meson( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Run ``meson`` in the build directory""" options = [] if self.spec["meson"].satisfies("@0.64:"): @@ -196,21 +204,31 @@ def meson(self, pkg, spec, prefix): with fs.working_dir(self.build_directory, create=True): pkg.module.meson(*options) - def build(self, pkg, spec, prefix): + def build( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Make the build targets""" options = ["-v"] options += self.build_targets with fs.working_dir(self.build_directory): pkg.module.ninja(*options) - def install(self, pkg, spec, prefix): + def install( + self, + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, + prefix: spack.util.prefix.Prefix, + ) -> None: """Make the install targets""" with fs.working_dir(self.build_directory): pkg.module.ninja(*self.install_targets) - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) - def check(self): + def check(self) -> None: """Search Meson-generated files for the target ``test`` and run it if found.""" with fs.working_dir(self.build_directory): self.pkg._if_ninja_target_execute("test") diff --git a/lib/spack/spack/build_systems/msbuild.py b/lib/spack/spack/build_systems/msbuild.py index 8fb4ef936e0758..3ffc7212157392 100644 --- a/lib/spack/spack/build_systems/msbuild.py +++ b/lib/spack/spack/build_systems/msbuild.py @@ -10,7 +10,7 @@ import spack.package_base from spack.directives import build_system, conflicts -from ._checks import BaseBuilder +from ._checks import BuilderWithDefaults class MSBuildPackage(spack.package_base.PackageBase): @@ -26,7 +26,7 @@ class MSBuildPackage(spack.package_base.PackageBase): @spack.builder.builder("msbuild") -class MSBuildBuilder(BaseBuilder): +class MSBuildBuilder(BuilderWithDefaults): """The MSBuild builder encodes the most common way of building software with Mircosoft's MSBuild tool. It has two phases that can be overridden, if need be: diff --git a/lib/spack/spack/build_systems/nmake.py b/lib/spack/spack/build_systems/nmake.py index 50232f3e2da993..b6eb75e3e53047 100644 --- a/lib/spack/spack/build_systems/nmake.py +++ b/lib/spack/spack/build_systems/nmake.py @@ -10,7 +10,7 @@ import spack.package_base from spack.directives import build_system, conflicts -from ._checks import BaseBuilder +from ._checks import BuilderWithDefaults class NMakePackage(spack.package_base.PackageBase): @@ -26,7 +26,7 @@ class NMakePackage(spack.package_base.PackageBase): @spack.builder.builder("nmake") -class NMakeBuilder(BaseBuilder): +class NMakeBuilder(BuilderWithDefaults): """The NMake builder encodes the most common way of building software with Mircosoft's NMake tool. It has two phases that can be overridden, if need be: diff --git a/lib/spack/spack/build_systems/octave.py b/lib/spack/spack/build_systems/octave.py index 1b0a88c6e76551..e8f15767858761 100644 --- a/lib/spack/spack/build_systems/octave.py +++ b/lib/spack/spack/build_systems/octave.py @@ -7,7 +7,7 @@ from spack.directives import build_system, extends from spack.multimethod import when -from ._checks import BaseBuilder +from ._checks import BuilderWithDefaults class OctavePackage(spack.package_base.PackageBase): @@ -29,7 +29,7 @@ class OctavePackage(spack.package_base.PackageBase): @spack.builder.builder("octave") -class OctaveBuilder(BaseBuilder): +class OctaveBuilder(BuilderWithDefaults): """The octave builder provides the following phases that can be overridden: 1. :py:meth:`~.OctaveBuilder.install` diff --git a/lib/spack/spack/build_systems/oneapi.py b/lib/spack/spack/build_systems/oneapi.py index 6d60a7ae4f329e..9082d4f8ab068e 100644 --- a/lib/spack/spack/build_systems/oneapi.py +++ b/lib/spack/spack/build_systems/oneapi.py @@ -255,7 +255,7 @@ def libs(self): return find_libraries("*", root=self.component_prefix.lib, recursive=not self.v2_layout) -class IntelOneApiLibraryPackageWithSdk(IntelOneApiPackage): +class IntelOneApiLibraryPackageWithSdk(IntelOneApiLibraryPackage): """Base class for Intel oneAPI library packages with SDK components. Contains some convenient default implementations for libraries diff --git a/lib/spack/spack/build_systems/perl.py b/lib/spack/spack/build_systems/perl.py index 18a185f42a4a69..b319005ab01a7f 100644 --- a/lib/spack/spack/build_systems/perl.py +++ b/lib/spack/spack/build_systems/perl.py @@ -11,13 +11,14 @@ import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, extends from spack.hooks.sbang import filter_shebang from spack.install_test import SkipTest, test_part from spack.util.executable import Executable from spack.version import ver -from ._checks import BaseBuilder, execute_build_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests class PerlPackage(spack.package_base.PackageBase): @@ -87,7 +88,7 @@ def test_use(self): @spack.builder.builder("perl") -class PerlBuilder(BaseBuilder): +class PerlBuilder(BuilderWithDefaults): """The perl builder provides four phases that can be overridden, if required: 1. :py:meth:`~.PerlBuilder.configure` @@ -185,7 +186,7 @@ def fetch_remote_versions(self, concurrency=128): # Build.PL may be too long causing the build to fail. Patching the shebang # does not happen until after install so set '/usr/bin/env perl' here in # the Build script. - @spack.builder.run_after("configure") + @spack.phase_callbacks.run_after("configure") def fix_shebang(self): if self.build_method == "Build.PL": filter_shebang("Build") @@ -195,7 +196,7 @@ def build(self, pkg, spec, prefix): self.build_executable() # Ensure that tests run after build (if requested): - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) def check(self): """Runs built-in tests of a Perl package.""" diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py index b951ec2a977814..9f5db48f4d3015 100644 --- a/lib/spack/spack/build_systems/python.py +++ b/lib/spack/spack/build_systems/python.py @@ -24,6 +24,7 @@ import spack.detection import spack.multimethod import spack.package_base +import spack.phase_callbacks import spack.platforms import spack.repo import spack.spec @@ -34,7 +35,7 @@ from spack.spec import Spec from spack.util.prefix import Prefix -from ._checks import BaseBuilder, execute_install_time_tests +from ._checks import BuilderWithDefaults, execute_install_time_tests def _flatten_dict(dictionary: Mapping[str, object]) -> Iterable[str]: @@ -374,7 +375,7 @@ def list_url(cls) -> Optional[str]: # type: ignore[override] return None @property - def python_spec(self): + def python_spec(self) -> Spec: """Get python-venv if it exists or python otherwise.""" python, *_ = self.spec.dependencies("python-venv") or self.spec.dependencies("python") return python @@ -425,7 +426,7 @@ def libs(self) -> LibraryList: @spack.builder.builder("python_pip") -class PythonPipBuilder(BaseBuilder): +class PythonPipBuilder(BuilderWithDefaults): phases = ("install",) #: Names associated with package methods in the old build-system format @@ -543,4 +544,4 @@ def install(self, pkg: PythonPackage, spec: Spec, prefix: Prefix) -> None: with fs.working_dir(self.build_directory): pip(*args) - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) diff --git a/lib/spack/spack/build_systems/qmake.py b/lib/spack/spack/build_systems/qmake.py index 75ad3860b4b2dc..eb530f4b38aef3 100644 --- a/lib/spack/spack/build_systems/qmake.py +++ b/lib/spack/spack/build_systems/qmake.py @@ -6,9 +6,10 @@ import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, depends_on -from ._checks import BaseBuilder, execute_build_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests class QMakePackage(spack.package_base.PackageBase): @@ -30,7 +31,7 @@ class QMakePackage(spack.package_base.PackageBase): @spack.builder.builder("qmake") -class QMakeBuilder(BaseBuilder): +class QMakeBuilder(BuilderWithDefaults): """The qmake builder provides three phases that can be overridden: 1. :py:meth:`~.QMakeBuilder.qmake` @@ -81,4 +82,4 @@ def check(self): with working_dir(self.build_directory): self.pkg._if_make_target_execute("check") - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) diff --git a/lib/spack/spack/build_systems/ruby.py b/lib/spack/spack/build_systems/ruby.py index 77d7ef289c7460..50228e21374aea 100644 --- a/lib/spack/spack/build_systems/ruby.py +++ b/lib/spack/spack/build_systems/ruby.py @@ -8,7 +8,7 @@ import spack.package_base from spack.directives import build_system, extends, maintainers -from ._checks import BaseBuilder +from ._checks import BuilderWithDefaults class RubyPackage(spack.package_base.PackageBase): @@ -28,7 +28,7 @@ class RubyPackage(spack.package_base.PackageBase): @spack.builder.builder("ruby") -class RubyBuilder(BaseBuilder): +class RubyBuilder(BuilderWithDefaults): """The Ruby builder provides two phases that can be overridden if required: #. :py:meth:`~.RubyBuilder.build` diff --git a/lib/spack/spack/build_systems/scons.py b/lib/spack/spack/build_systems/scons.py index 4a32b690f794ae..5e0211903daf2b 100644 --- a/lib/spack/spack/build_systems/scons.py +++ b/lib/spack/spack/build_systems/scons.py @@ -4,9 +4,10 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, depends_on -from ._checks import BaseBuilder, execute_build_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests class SConsPackage(spack.package_base.PackageBase): @@ -28,7 +29,7 @@ class SConsPackage(spack.package_base.PackageBase): @spack.builder.builder("scons") -class SConsBuilder(BaseBuilder): +class SConsBuilder(BuilderWithDefaults): """The Scons builder provides the following phases that can be overridden: 1. :py:meth:`~.SConsBuilder.build` @@ -79,4 +80,4 @@ def build_test(self): """ pass - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) diff --git a/lib/spack/spack/build_systems/sip.py b/lib/spack/spack/build_systems/sip.py index f297c59a00be97..54ce4c6d8e4e86 100644 --- a/lib/spack/spack/build_systems/sip.py +++ b/lib/spack/spack/build_systems/sip.py @@ -11,11 +11,12 @@ import spack.builder import spack.install_test import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, depends_on, extends from spack.multimethod import when from spack.util.executable import Executable -from ._checks import BaseBuilder, execute_install_time_tests +from ._checks import BuilderWithDefaults, execute_install_time_tests class SIPPackage(spack.package_base.PackageBase): @@ -103,7 +104,7 @@ def test_imports(self): @spack.builder.builder("sip") -class SIPBuilder(BaseBuilder): +class SIPBuilder(BuilderWithDefaults): """The SIP builder provides the following phases that can be overridden: * configure @@ -170,4 +171,4 @@ def install_args(self): """Arguments to pass to install.""" return [] - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) diff --git a/lib/spack/spack/build_systems/waf.py b/lib/spack/spack/build_systems/waf.py index a0110c5c3480b3..5161f40985aafb 100644 --- a/lib/spack/spack/build_systems/waf.py +++ b/lib/spack/spack/build_systems/waf.py @@ -6,9 +6,10 @@ import spack.builder import spack.package_base +import spack.phase_callbacks from spack.directives import build_system, depends_on -from ._checks import BaseBuilder, execute_build_time_tests, execute_install_time_tests +from ._checks import BuilderWithDefaults, execute_build_time_tests, execute_install_time_tests class WafPackage(spack.package_base.PackageBase): @@ -30,7 +31,7 @@ class WafPackage(spack.package_base.PackageBase): @spack.builder.builder("waf") -class WafBuilder(BaseBuilder): +class WafBuilder(BuilderWithDefaults): """The WAF builder provides the following phases that can be overridden: * configure @@ -136,7 +137,7 @@ def build_test(self): """ pass - spack.builder.run_after("build")(execute_build_time_tests) + spack.phase_callbacks.run_after("build")(execute_build_time_tests) def install_test(self): """Run unit tests after install. @@ -146,4 +147,4 @@ def install_test(self): """ pass - spack.builder.run_after("install")(execute_install_time_tests) + spack.phase_callbacks.run_after("install")(execute_install_time_tests) diff --git a/lib/spack/spack/builder.py b/lib/spack/spack/builder.py index 098f583d534d2d..6dd84fab452c44 100644 --- a/lib/spack/spack/builder.py +++ b/lib/spack/spack/builder.py @@ -6,43 +6,30 @@ import collections.abc import copy import functools -from typing import List, Optional, Tuple - -from llnl.util import lang +from typing import Dict, List, Optional, Tuple, Type import spack.error import spack.multimethod +import spack.package_base +import spack.phase_callbacks +import spack.repo +import spack.spec +import spack.util.environment #: Builder classes, as registered by the "builder" decorator -BUILDER_CLS = {} - -#: An object of this kind is a shared global state used to collect callbacks during -#: class definition time, and is flushed when the class object is created at the end -#: of the class definition -#: -#: Args: -#: attribute_name (str): name of the attribute that will be attached to the builder -#: callbacks (list): container used to temporarily aggregate the callbacks -CallbackTemporaryStage = collections.namedtuple( - "CallbackTemporaryStage", ["attribute_name", "callbacks"] -) - -#: Shared global state to aggregate "@run_before" callbacks -_RUN_BEFORE = CallbackTemporaryStage(attribute_name="run_before_callbacks", callbacks=[]) -#: Shared global state to aggregate "@run_after" callbacks -_RUN_AFTER = CallbackTemporaryStage(attribute_name="run_after_callbacks", callbacks=[]) +BUILDER_CLS: Dict[str, Type["Builder"]] = {} #: Map id(pkg) to a builder, to avoid creating multiple #: builders for the same package object. -_BUILDERS = {} +_BUILDERS: Dict[int, "Builder"] = {} -def builder(build_system_name): +def builder(build_system_name: str): """Class decorator used to register the default builder for a given build-system. Args: - build_system_name (str): name of the build-system + build_system_name: name of the build-system """ def _decorator(cls): @@ -53,13 +40,9 @@ def _decorator(cls): return _decorator -def create(pkg): - """Given a package object with an associated concrete spec, - return the builder object that can install it. - - Args: - pkg (spack.package_base.PackageBase): package for which we want the builder - """ +def create(pkg: spack.package_base.PackageBase) -> "Builder": + """Given a package object with an associated concrete spec, return the builder object that can + install it.""" if id(pkg) not in _BUILDERS: _BUILDERS[id(pkg)] = _create(pkg) return _BUILDERS[id(pkg)] @@ -74,7 +57,15 @@ def __call__(self, spec, prefix): return self.phase_fn(self.builder.pkg, spec, prefix) -def _create(pkg): +def get_builder_class(pkg, name: str) -> Optional[Type["Builder"]]: + """Return the builder class if a package module defines it.""" + cls = getattr(pkg.module, name, None) + if cls and cls.__module__.startswith(spack.repo.ROOT_PYTHON_NAMESPACE): + return cls + return None + + +def _create(pkg: spack.package_base.PackageBase) -> "Builder": """Return a new builder object for the package object being passed as argument. The function inspects the build-system used by the package object and try to: @@ -94,14 +85,15 @@ class hierarchy (look at AspellDictPackage for an example of that) to look for build-related methods in the ``*Package``. Args: - pkg (spack.package_base.PackageBase): package object for which we need a builder + pkg: package object for which we need a builder """ package_buildsystem = buildsystem_name(pkg) default_builder_cls = BUILDER_CLS[package_buildsystem] builder_cls_name = default_builder_cls.__name__ - builder_cls = getattr(pkg.module, builder_cls_name, None) - if builder_cls: - return builder_cls(pkg) + builder_class = get_builder_class(pkg, builder_cls_name) + + if builder_class: + return builder_class(pkg) # Specialized version of a given buildsystem can subclass some # base classes and specialize certain phases or methods or attributes. @@ -158,8 +150,8 @@ def __forward(self, *args, **kwargs): # with the same name is defined in the Package, it will override this definition # (when _ForwardToBaseBuilder is initialized) for method_name in ( - base_cls.phases - + base_cls.legacy_methods + base_cls.phases # type: ignore + + base_cls.legacy_methods # type: ignore + getattr(base_cls, "legacy_long_methods", tuple()) + ("setup_build_environment", "setup_dependent_build_environment") ): @@ -171,14 +163,14 @@ def __forward(self): return __forward - for attribute_name in base_cls.legacy_attributes: + for attribute_name in base_cls.legacy_attributes: # type: ignore setattr( _ForwardToBaseBuilder, attribute_name, property(forward_property_to_getattr(attribute_name)), ) - class Adapter(base_cls, metaclass=_PackageAdapterMeta): + class Adapter(base_cls, metaclass=_PackageAdapterMeta): # type: ignore def __init__(self, pkg): # Deal with custom phases in packages here if hasattr(pkg, "phases"): @@ -203,99 +195,18 @@ def setup_dependent_build_environment(self, env, dependent_spec): return Adapter(pkg) -def buildsystem_name(pkg): +def buildsystem_name(pkg: spack.package_base.PackageBase) -> str: """Given a package object with an associated concrete spec, - return the name of its build system. - - Args: - pkg (spack.package_base.PackageBase): package for which we want - the build system name - """ + return the name of its build system.""" try: return pkg.spec.variants["build_system"].value except KeyError: # We are reading an old spec without the build_system variant - return pkg.legacy_buildsystem - - -class PhaseCallbacksMeta(type): - """Permit to register arbitrary functions during class definition and run them - later, before or after a given install phase. - - Each method decorated with ``run_before`` or ``run_after`` gets temporarily - stored in a global shared state when a class being defined is parsed by the Python - interpreter. At class definition time that temporary storage gets flushed and a list - of callbacks is attached to the class being defined. - """ - - def __new__(mcs, name, bases, attr_dict): - for temporary_stage in (_RUN_BEFORE, _RUN_AFTER): - staged_callbacks = temporary_stage.callbacks - - # Here we have an adapter from an old-style package. This means there is no - # hierarchy of builders, and every callback that had to be combined between - # *Package and *Builder has been combined already by _PackageAdapterMeta - if name == "Adapter": - continue - - # If we are here we have callbacks. To get a complete list, we accumulate all the - # callbacks from base classes, we deduplicate them, then prepend what we have - # registered here. - # - # The order should be: - # 1. Callbacks are registered in order within the same class - # 2. Callbacks defined in derived classes precede those defined in base - # classes - callbacks_from_base = [] - for base in bases: - current_callbacks = getattr(base, temporary_stage.attribute_name, None) - if not current_callbacks: - continue - callbacks_from_base.extend(current_callbacks) - callbacks_from_base = list(lang.dedupe(callbacks_from_base)) - # Set the callbacks in this class and flush the temporary stage - attr_dict[temporary_stage.attribute_name] = staged_callbacks[:] + callbacks_from_base - del temporary_stage.callbacks[:] - - return super(PhaseCallbacksMeta, mcs).__new__(mcs, name, bases, attr_dict) - - @staticmethod - def run_after(phase, when=None): - """Decorator to register a function for running after a given phase. - - Args: - phase (str): phase after which the function must run. - when (str): condition under which the function is run (if None, it is always run). - """ - - def _decorator(fn): - key = (phase, when) - item = (key, fn) - _RUN_AFTER.callbacks.append(item) - return fn - - return _decorator - - @staticmethod - def run_before(phase, when=None): - """Decorator to register a function for running before a given phase. - - Args: - phase (str): phase before which the function must run. - when (str): condition under which the function is run (if None, it is always run). - """ - - def _decorator(fn): - key = (phase, when) - item = (key, fn) - _RUN_BEFORE.callbacks.append(item) - return fn - - return _decorator + return pkg.legacy_buildsystem # type: ignore class BuilderMeta( - PhaseCallbacksMeta, + spack.phase_callbacks.PhaseCallbacksMeta, spack.multimethod.MultiMethodMeta, type(collections.abc.Sequence), # type: ignore ): @@ -390,8 +301,12 @@ def __new__(mcs, name, bases, attr_dict): ) combine_callbacks = _PackageAdapterMeta.combine_callbacks - attr_dict[_RUN_BEFORE.attribute_name] = combine_callbacks(_RUN_BEFORE.attribute_name) - attr_dict[_RUN_AFTER.attribute_name] = combine_callbacks(_RUN_AFTER.attribute_name) + attr_dict[spack.phase_callbacks._RUN_BEFORE.attribute_name] = combine_callbacks( + spack.phase_callbacks._RUN_BEFORE.attribute_name + ) + attr_dict[spack.phase_callbacks._RUN_AFTER.attribute_name] = combine_callbacks( + spack.phase_callbacks._RUN_AFTER.attribute_name + ) return super(_PackageAdapterMeta, mcs).__new__(mcs, name, bases, attr_dict) @@ -411,8 +326,8 @@ def __init__(self, name, builder): self.name = name self.builder = builder self.phase_fn = self._select_phase_fn() - self.run_before = self._make_callbacks(_RUN_BEFORE.attribute_name) - self.run_after = self._make_callbacks(_RUN_AFTER.attribute_name) + self.run_before = self._make_callbacks(spack.phase_callbacks._RUN_BEFORE.attribute_name) + self.run_after = self._make_callbacks(spack.phase_callbacks._RUN_AFTER.attribute_name) def _make_callbacks(self, callbacks_attribute): result = [] @@ -473,44 +388,36 @@ def copy(self): return copy.deepcopy(self) -class Builder(collections.abc.Sequence, metaclass=BuilderMeta): - """A builder is a class that, given a package object (i.e. associated with - concrete spec), knows how to install it. +class BaseBuilder(metaclass=BuilderMeta): + """An interface for builders, without any phases defined. This class is exposed in the package + API, so that packagers can create a single class to define ``setup_build_environment`` and + ``@run_before`` and ``@run_after`` callbacks that can be shared among different builders. - The builder behaves like a sequence, and when iterated over return the - "phases" of the installation in the correct order. + Example: - Args: - pkg (spack.package_base.PackageBase): package object to be built - """ + .. code-block:: python - #: Sequence of phases. Must be defined in derived classes - phases: Tuple[str, ...] = () - #: Build system name. Must also be defined in derived classes. - build_system: Optional[str] = None + class AnyBuilder(BaseBuilder): + @run_after("install") + def fixup_install(self): + # do something after the package is installed + pass - legacy_methods: Tuple[str, ...] = () - legacy_attributes: Tuple[str, ...] = () + def setup_build_environment(self, env): + env.set("MY_ENV_VAR", "my_value") - # type hints for some of the legacy methods - build_time_test_callbacks: List[str] - install_time_test_callbacks: List[str] + class CMakeBuilder(cmake.CMakeBuilder, AnyBuilder): + pass - #: List of glob expressions. Each expression must either be - #: absolute or relative to the package source path. - #: Matching artifacts found at the end of the build process will be - #: copied in the same directory tree as _spack_build_logfile and - #: _spack_build_envfile. - archive_files: List[str] = [] + class AutotoolsBuilder(autotools.AutotoolsBuilder, AnyBuilder): + pass + """ - def __init__(self, pkg): + def __init__(self, pkg: spack.package_base.PackageBase) -> None: self.pkg = pkg - self.callbacks = {} - for phase in self.phases: - self.callbacks[phase] = InstallationPhase(phase, self) @property - def spec(self): + def spec(self) -> spack.spec.Spec: return self.pkg.spec @property @@ -521,53 +428,89 @@ def stage(self): def prefix(self): return self.pkg.prefix - def setup_build_environment(self, env): + def setup_build_environment( + self, env: spack.util.environment.EnvironmentModifications + ) -> None: """Sets up the build environment for a package. This method will be called before the current package prefix exists in Spack's store. Args: - env (spack.util.environment.EnvironmentModifications): environment - modifications to be applied when the package is built. Package authors + env: environment modifications to be applied when the package is built. Package authors can call methods on it to alter the build environment. """ if not hasattr(super(), "setup_build_environment"): return - super().setup_build_environment(env) + super().setup_build_environment(env) # type: ignore - def setup_dependent_build_environment(self, env, dependent_spec): - """Sets up the build environment of packages that depend on this one. + def setup_dependent_build_environment( + self, env: spack.util.environment.EnvironmentModifications, dependent_spec: spack.spec.Spec + ) -> None: + """Sets up the build environment of a package that depends on this one. - This is similar to ``setup_build_environment``, but it is used to - modify the build environments of packages that *depend* on this one. + This is similar to ``setup_build_environment``, but it is used to modify the build + environment of a package that *depends* on this one. - This gives packages like Python and others that follow the extension - model a way to implement common environment or compile-time settings - for dependencies. + This gives packages the ability to set environment variables for the build of the + dependent, which can be useful to provide search hints for headers or libraries if they are + not in standard locations. - This method will be called before the dependent package prefix exists - in Spack's store. - - Examples: - 1. Installing python modules generally requires ``PYTHONPATH`` - to point to the ``lib/pythonX.Y/site-packages`` directory in the - module's install prefix. This method could be used to set that - variable. + This method will be called before the dependent package prefix exists in Spack's store. Args: - env (spack.util.environment.EnvironmentModifications): environment - modifications to be applied when the dependent package is built. + env: environment modifications to be applied when the dependent package is built. Package authors can call methods on it to alter the build environment. - dependent_spec (spack.spec.Spec): the spec of the dependent package - about to be built. This allows the extendee (self) to query - the dependent's state. Note that *this* package's spec is + dependent_spec: the spec of the dependent package about to be built. This allows the + extendee (self) to query the dependent's state. Note that *this* package's spec is available as ``self.spec`` """ if not hasattr(super(), "setup_dependent_build_environment"): return - super().setup_dependent_build_environment(env, dependent_spec) + super().setup_dependent_build_environment(env, dependent_spec) # type: ignore + + def __repr__(self): + fmt = "{name}{/hash:7}" + return f"{self.__class__.__name__}({self.spec.format(fmt)})" + + def __str__(self): + fmt = "{name}{/hash:7}" + return f'"{self.__class__.__name__}" builder for "{self.spec.format(fmt)}"' + + +class Builder(BaseBuilder, collections.abc.Sequence): + """A builder is a class that, given a package object (i.e. associated with concrete spec), + knows how to install it. + + The builder behaves like a sequence, and when iterated over return the "phases" of the + installation in the correct order. + """ + + #: Sequence of phases. Must be defined in derived classes + phases: Tuple[str, ...] = () + #: Build system name. Must also be defined in derived classes. + build_system: Optional[str] = None + + legacy_methods: Tuple[str, ...] = () + legacy_attributes: Tuple[str, ...] = () + + # type hints for some of the legacy methods + build_time_test_callbacks: List[str] + install_time_test_callbacks: List[str] + + #: List of glob expressions. Each expression must either be absolute or relative to the package + #: source path. Matching artifacts found at the end of the build process will be copied in the + #: same directory tree as _spack_build_logfile and _spack_build_envfile. + @property + def archive_files(self) -> List[str]: + return [] + + def __init__(self, pkg: spack.package_base.PackageBase) -> None: + super().__init__(pkg) + self.callbacks = {} + for phase in self.phases: + self.callbacks[phase] = InstallationPhase(phase, self) def __getitem__(self, idx): key = self.phases[idx] @@ -575,16 +518,3 @@ def __getitem__(self, idx): def __len__(self): return len(self.phases) - - def __repr__(self): - msg = "{0}({1})" - return msg.format(type(self).__name__, self.pkg.spec.format("{name}/{hash:7}")) - - def __str__(self): - msg = '"{0}" builder for "{1}"' - return msg.format(type(self).build_system, self.pkg.spec.format("{name}/{hash:7}")) - - -# Export these names as standalone to be used in packages -run_after = PhaseCallbacksMeta.run_after -run_before = PhaseCallbacksMeta.run_before diff --git a/lib/spack/spack/caches.py b/lib/spack/spack/caches.py index 58594059a58d09..f2d4bfeec07a33 100644 --- a/lib/spack/spack/caches.py +++ b/lib/spack/spack/caches.py @@ -5,7 +5,6 @@ """Caches used by Spack to store data""" import os -from typing import Union import llnl.util.lang from llnl.util.filesystem import mkdirp @@ -32,12 +31,8 @@ def _misc_cache(): return spack.util.file_cache.FileCache(path) -FileCacheType = Union[spack.util.file_cache.FileCache, llnl.util.lang.Singleton] - #: Spack's cache for small data -MISC_CACHE: Union[spack.util.file_cache.FileCache, llnl.util.lang.Singleton] = ( - llnl.util.lang.Singleton(_misc_cache) -) +MISC_CACHE: spack.util.file_cache.FileCache = llnl.util.lang.Singleton(_misc_cache) # type: ignore def fetch_cache_location(): @@ -74,6 +69,4 @@ def store(self, fetcher, relative_dest): #: Spack's local cache for downloaded source archives -FETCH_CACHE: Union[spack.fetch_strategy.FsCache, llnl.util.lang.Singleton] = ( - llnl.util.lang.Singleton(_fetch_cache) -) +FETCH_CACHE: spack.fetch_strategy.FsCache = llnl.util.lang.Singleton(_fetch_cache) # type: ignore diff --git a/lib/spack/spack/ci.py b/lib/spack/spack/ci.py index f360137ede41bc..6fba4863561184 100644 --- a/lib/spack/spack/ci.py +++ b/lib/spack/spack/ci.py @@ -10,6 +10,7 @@ import os import re import shutil +import ssl import stat import subprocess import sys @@ -19,21 +20,22 @@ from collections import defaultdict, namedtuple from typing import Dict, List, Optional, Set, Tuple from urllib.error import HTTPError, URLError -from urllib.parse import urlencode -from urllib.request import HTTPHandler, Request, build_opener +from urllib.parse import quote, urlencode, urlparse +from urllib.request import HTTPHandler, HTTPSHandler, Request, build_opener import ruamel.yaml import llnl.util.filesystem as fs import llnl.util.tty as tty -from llnl.util.lang import memoized +from llnl.util.lang import Singleton, memoized from llnl.util.tty.color import cescape, colorize import spack import spack.binary_distribution as bindist +import spack.builder import spack.concretize import spack.config as cfg -import spack.environment as ev +import spack.error import spack.main import spack.mirror import spack.paths @@ -50,6 +52,31 @@ from spack.reporters.cdash import SPACK_CDASH_TIMEOUT from spack.reporters.cdash import build_stamp as cdash_build_stamp + +def _urlopen(): + error_handler = web_util.SpackHTTPDefaultErrorHandler() + + # One opener with HTTPS ssl enabled + with_ssl = build_opener( + HTTPHandler(), HTTPSHandler(context=web_util.ssl_create_default_context()), error_handler + ) + + # One opener with HTTPS ssl disabled + without_ssl = build_opener( + HTTPHandler(), HTTPSHandler(context=ssl._create_unverified_context()), error_handler + ) + + # And dynamically dispatch based on the config:verify_ssl. + def dispatch_open(fullurl, data=None, timeout=None, verify_ssl=True): + opener = with_ssl if verify_ssl else without_ssl + timeout = timeout or spack.config.get("config:connect_timeout", 1) + return opener.open(fullurl, data, timeout) + + return dispatch_open + + +_dyn_mapping_urlopener = Singleton(_urlopen) + # See https://docs.gitlab.com/ee/ci/yaml/#retry for descriptions of conditions JOB_RETRY_CONDITIONS = [ # "always", @@ -69,8 +96,6 @@ TEMP_STORAGE_MIRROR_NAME = "ci_temporary_mirror" SPACK_RESERVED_TAGS = ["public", "protected", "notary"] -# TODO: Remove this in Spack 0.23 -SHARED_PR_MIRROR_URL = "s3://spack-binaries-prs/shared_pr_mirror" JOB_NAME_FORMAT = ( "{name}{@version} {/hash:7} {%compiler.name}{@compiler.version}{ arch=architecture}" ) @@ -175,11 +200,11 @@ def _remove_satisfied_deps(deps, satisfied_list): return nodes, edges, stages -def _print_staging_summary(spec_labels, stages, mirrors_to_check, rebuild_decisions): +def _print_staging_summary(spec_labels, stages, rebuild_decisions): if not stages: return - mirrors = spack.mirror.MirrorCollection(mirrors=mirrors_to_check, binary=True) + mirrors = spack.mirror.MirrorCollection(binary=True) tty.msg("Checked the following mirrors for binaries:") for m in mirrors.values(): tty.msg(f" {m.fetch_url}") @@ -226,21 +251,14 @@ def _spec_matches(spec, match_string): return spec.intersects(match_string) -def _format_job_needs( - dep_jobs, build_group, prune_dag, rebuild_decisions, enable_artifacts_buildcache -): +def _format_job_needs(dep_jobs, build_group, prune_dag, rebuild_decisions): needs_list = [] for dep_job in dep_jobs: dep_spec_key = _spec_ci_label(dep_job) rebuild = rebuild_decisions[dep_spec_key].rebuild if not prune_dag or rebuild: - needs_list.append( - { - "job": get_job_name(dep_job, build_group), - "artifacts": enable_artifacts_buildcache, - } - ) + needs_list.append({"job": get_job_name(dep_job, build_group), "artifacts": False}) return needs_list @@ -384,12 +402,6 @@ def __init__(self, ci_config, spec_labels, stages): self.ir = { "jobs": {}, - "temporary-storage-url-prefix": self.ci_config.get( - "temporary-storage-url-prefix", None - ), - "enable-artifacts-buildcache": self.ci_config.get( - "enable-artifacts-buildcache", False - ), "rebuild-index": self.ci_config.get("rebuild-index", True), "broken-specs-url": self.ci_config.get("broken-specs-url", None), "broken-tests-packages": self.ci_config.get("broken-tests-packages", []), @@ -405,9 +417,20 @@ def __init__(self, ci_config, spec_labels, stages): if name not in ["any", "build"]: jobs[name] = self.__init_job("") - def __init_job(self, spec): + def __init_job(self, release_spec): """Initialize job object""" - return {"spec": spec, "attributes": {}} + job_object = {"spec": release_spec, "attributes": {}} + if release_spec: + job_vars = job_object["attributes"].setdefault("variables", {}) + job_vars["SPACK_JOB_SPEC_DAG_HASH"] = release_spec.dag_hash() + job_vars["SPACK_JOB_SPEC_PKG_NAME"] = release_spec.name + job_vars["SPACK_JOB_SPEC_PKG_VERSION"] = release_spec.format("{version}") + job_vars["SPACK_JOB_SPEC_COMPILER_NAME"] = release_spec.format("{compiler.name}") + job_vars["SPACK_JOB_SPEC_COMPILER_VERSION"] = release_spec.format("{compiler.version}") + job_vars["SPACK_JOB_SPEC_ARCH"] = release_spec.format("{architecture}") + job_vars["SPACK_JOB_SPEC_VARIANTS"] = release_spec.format("{variants}") + + return job_object def __is_named(self, section): """Check if a pipeline-gen configuration section is for a named job, @@ -500,6 +523,7 @@ def generate_ir(self): for section in reversed(pipeline_gen): name = self.__is_named(section) has_submapping = "submapping" in section + has_dynmapping = "dynamic-mapping" in section section = cfg.InternalConfigScope._process_dict_keyname_overrides(section) if name: @@ -542,6 +566,108 @@ def _apply_section(dest, src): job["attributes"] = self.__apply_submapping( job["attributes"], job["spec"], section ) + elif has_dynmapping: + mapping = section["dynamic-mapping"] + + dynmap_name = mapping.get("name") + + # Check if this section should be skipped + dynmap_skip = os.environ.get("SPACK_CI_SKIP_DYNAMIC_MAPPING") + if dynmap_name and dynmap_skip: + if re.match(dynmap_skip, dynmap_name): + continue + + # Get the endpoint + endpoint = mapping["endpoint"] + endpoint_url = urlparse(endpoint) + + # Configure the request header + header = {"User-Agent": web_util.SPACK_USER_AGENT} + header.update(mapping.get("header", {})) + + # Expand header environment variables + # ie. if tokens are passed + for value in header.values(): + value = os.path.expandvars(value) + + verify_ssl = mapping.get("verify_ssl", spack.config.get("config:verify_ssl", True)) + timeout = mapping.get("timeout", spack.config.get("config:connect_timeout", 1)) + + required = mapping.get("require", []) + allowed = mapping.get("allow", []) + ignored = mapping.get("ignore", []) + + # required keys are implicitly allowed + allowed = sorted(set(allowed + required)) + ignored = sorted(set(ignored)) + required = sorted(set(required)) + + # Make sure required things are not also ignored + assert not any([ikey in required for ikey in ignored]) + + def job_query(job): + job_vars = job["attributes"]["variables"] + query = ( + "{SPACK_JOB_SPEC_PKG_NAME}@{SPACK_JOB_SPEC_PKG_VERSION}" + # The preceding spaces are required (ref. https://github.com/spack/spack-gantry/blob/develop/docs/api.md#allocation) + " {SPACK_JOB_SPEC_VARIANTS}" + " arch={SPACK_JOB_SPEC_ARCH}" + "%{SPACK_JOB_SPEC_COMPILER_NAME}@{SPACK_JOB_SPEC_COMPILER_VERSION}" + ).format_map(job_vars) + return f"spec={quote(query)}" + + for job in jobs.values(): + if not job["spec"]: + continue + + # Create request for this job + query = job_query(job) + request = Request( + endpoint_url._replace(query=query).geturl(), headers=header, method="GET" + ) + try: + response = _dyn_mapping_urlopener( + request, verify_ssl=verify_ssl, timeout=timeout + ) + except Exception as e: + # For now just ignore any errors from dynamic mapping and continue + # This is still experimental, and failures should not stop CI + # from running normally + tty.warn(f"Failed to fetch dynamic mapping for query:\n\t{query}") + tty.warn(f"{e}") + continue + + config = json.load(codecs.getreader("utf-8")(response)) + + # Strip ignore keys + if ignored: + for key in ignored: + if key in config: + config.pop(key) + + # Only keep allowed keys + clean_config = {} + if allowed: + for key in allowed: + if key in config: + clean_config[key] = config[key] + else: + clean_config = config + + # Verify all of the required keys are present + if required: + missing_keys = [] + for key in required: + if key not in clean_config.keys(): + missing_keys.append(key) + + if missing_keys: + tty.warn(f"Response missing required keys: {missing_keys}") + + if clean_config: + job["attributes"] = spack.config.merge_yaml( + job.get("attributes", {}), clean_config + ) for _, job in jobs.items(): if job["spec"]: @@ -558,14 +684,13 @@ def generate_gitlab_ci_yaml( prune_dag=False, check_index_only=False, artifacts_root=None, - remote_mirror_override=None, ): """Generate a gitlab yaml file to run a dynamic child pipeline from the spec matrix in the active environment. Arguments: env (spack.environment.Environment): Activated environment object - which must contain a gitlab-ci section describing how to map + which must contain a ci section describing how to map specs to runners print_summary (bool): Should we print a summary of all the jobs in the stages in which they were placed. @@ -580,39 +705,21 @@ def generate_gitlab_ci_yaml( artifacts_root (str): Path where artifacts like logs, environment files (spack.yaml, spack.lock), etc should be written. GitLab requires this to be within the project directory. - remote_mirror_override (str): Typically only needed when one spack.yaml - is used to populate several mirrors with binaries, based on some - criteria. Spack protected pipelines populate different mirrors based - on branch name, facilitated by this option. DEPRECATED """ with spack.concretize.disable_compiler_existence_check(): with env.write_transaction(): env.concretize() env.write() - yaml_root = env.manifest[ev.TOP_LEVEL_KEY] - # Get the joined "ci" config with all of the current scopes resolved ci_config = cfg.get("ci") - config_deprecated = False if not ci_config: - tty.warn("Environment does not have `ci` a configuration") - gitlabci_config = yaml_root.get("gitlab-ci") - if not gitlabci_config: - tty.die("Environment yaml does not have `gitlab-ci` config section. Cannot recover.") - - tty.warn( - "The `gitlab-ci` configuration is deprecated in favor of `ci`.\n", - "To update run \n\t$ spack env update /path/to/ci/spack.yaml", - ) - translate_deprecated_config(gitlabci_config) - ci_config = gitlabci_config - config_deprecated = True + raise SpackCIError("Environment does not have a `ci` configuration") # Default target is gitlab...and only target is gitlab if not ci_config.get("target", "gitlab") == "gitlab": - tty.die('Spack CI module only generates target "gitlab"') + raise SpackCIError('Spack CI module only generates target "gitlab"') cdash_config = cfg.get("cdash") cdash_handler = CDashHandler(cdash_config) if "build-group" in cdash_config else None @@ -673,12 +780,6 @@ def generate_gitlab_ci_yaml( spack_pipeline_type = os.environ.get("SPACK_PIPELINE_TYPE", None) copy_only_pipeline = spack_pipeline_type == "spack_copy_only" - if copy_only_pipeline and config_deprecated: - tty.warn( - "SPACK_PIPELINE_TYPE=spack_copy_only is not supported when using\n", - "deprecated ci configuration, a no-op pipeline will be generated\n", - "instead.", - ) def ensure_expected_target_path(path): """Returns passed paths with all Windows path separators exchanged @@ -697,38 +798,16 @@ def ensure_expected_target_path(path): return path pipeline_mirrors = spack.mirror.MirrorCollection(binary=True) - deprecated_mirror_config = False buildcache_destination = None - if "buildcache-destination" in pipeline_mirrors: - if remote_mirror_override: - tty.die( - "Using the deprecated --buildcache-destination cli option and " - "having a mirror named 'buildcache-destination' at the same time " - "is not allowed" - ) - buildcache_destination = pipeline_mirrors["buildcache-destination"] - else: - deprecated_mirror_config = True - # TODO: This will be an error in Spack 0.23 + if "buildcache-destination" not in pipeline_mirrors: + raise SpackCIError("spack ci generate requires a mirror named 'buildcache-destination'") - # TODO: Remove this block in spack 0.23 - remote_mirror_url = None - if deprecated_mirror_config: - if "mirrors" not in yaml_root or len(yaml_root["mirrors"].values()) < 1: - tty.die("spack ci generate requires an env containing a mirror") - - ci_mirrors = yaml_root["mirrors"] - mirror_urls = [url for url in ci_mirrors.values()] - remote_mirror_url = mirror_urls[0] + buildcache_destination = pipeline_mirrors["buildcache-destination"] spack_buildcache_copy = os.environ.get("SPACK_COPY_BUILDCACHE", None) if spack_buildcache_copy: buildcache_copies = {} - buildcache_copy_src_prefix = ( - buildcache_destination.fetch_url - if buildcache_destination - else remote_mirror_override or remote_mirror_url - ) + buildcache_copy_src_prefix = buildcache_destination.fetch_url buildcache_copy_dest_prefix = spack_buildcache_copy # Check for a list of "known broken" specs that we should not bother @@ -738,55 +817,10 @@ def ensure_expected_target_path(path): if "broken-specs-url" in ci_config: broken_specs_url = ci_config["broken-specs-url"] - enable_artifacts_buildcache = False - if "enable-artifacts-buildcache" in ci_config: - tty.warn("Support for enable-artifacts-buildcache will be removed in Spack 0.23") - enable_artifacts_buildcache = ci_config["enable-artifacts-buildcache"] - rebuild_index_enabled = True if "rebuild-index" in ci_config and ci_config["rebuild-index"] is False: rebuild_index_enabled = False - temp_storage_url_prefix = None - if "temporary-storage-url-prefix" in ci_config: - tty.warn("Support for temporary-storage-url-prefix will be removed in Spack 0.23") - temp_storage_url_prefix = ci_config["temporary-storage-url-prefix"] - - # If a remote mirror override (alternate buildcache destination) was - # specified, add it here in case it has already built hashes we might - # generate. - # TODO: Remove this block in Spack 0.23 - mirrors_to_check = None - if deprecated_mirror_config and remote_mirror_override: - if spack_pipeline_type == "spack_protected_branch": - # Overriding the main mirror in this case might result - # in skipping jobs on a release pipeline because specs are - # up to date in develop. Eventually we want to notice and take - # advantage of this by scheduling a job to copy the spec from - # develop to the release, but until we have that, this makes - # sure we schedule a rebuild job if the spec isn't already in - # override mirror. - mirrors_to_check = {"override": remote_mirror_override} - - # If we have a remote override and we want generate pipeline using - # --check-index-only, then the override mirror needs to be added to - # the configured mirrors when bindist.update() is run, or else we - # won't fetch its index and include in our local cache. - spack.mirror.add( - spack.mirror.Mirror(remote_mirror_override, name="ci_pr_mirror"), - cfg.default_modify_scope(), - ) - - # TODO: Remove this block in Spack 0.23 - shared_pr_mirror = None - if deprecated_mirror_config and spack_pipeline_type == "spack_pull_request": - stack_name = os.environ.get("SPACK_CI_STACK_NAME", "") - shared_pr_mirror = url_util.join(SHARED_PR_MIRROR_URL, stack_name) - spack.mirror.add( - spack.mirror.Mirror(shared_pr_mirror, name="ci_shared_pr_mirror"), - cfg.default_modify_scope(), - ) - pipeline_artifacts_dir = artifacts_root if not pipeline_artifacts_dir: proj_dir = os.environ.get("CI_PROJECT_DIR", os.getcwd()) @@ -795,9 +829,8 @@ def ensure_expected_target_path(path): pipeline_artifacts_dir = os.path.abspath(pipeline_artifacts_dir) concrete_env_dir = os.path.join(pipeline_artifacts_dir, "concrete_environment") - # Now that we've added the mirrors we know about, they should be properly - # reflected in the environment manifest file, so copy that into the - # concrete environment directory, along with the spack.lock file. + # Copy the environment manifest file into the concrete environment directory, + # along with the spack.lock file. if not os.path.exists(concrete_env_dir): os.makedirs(concrete_env_dir) shutil.copyfile(env.manifest_path, os.path.join(concrete_env_dir, "spack.yaml")) @@ -822,18 +855,12 @@ def ensure_expected_target_path(path): env_includes.extend(include_scopes) env_yaml_root["spack"]["include"] = [ensure_expected_target_path(i) for i in env_includes] - if "gitlab-ci" in env_yaml_root["spack"] and "ci" not in env_yaml_root["spack"]: - env_yaml_root["spack"]["ci"] = env_yaml_root["spack"].pop("gitlab-ci") - translate_deprecated_config(env_yaml_root["spack"]["ci"]) - with open(os.path.join(concrete_env_dir, "spack.yaml"), "w") as fd: fd.write(syaml.dump_config(env_yaml_root, default_flow_style=False)) job_log_dir = os.path.join(pipeline_artifacts_dir, "logs") job_repro_dir = os.path.join(pipeline_artifacts_dir, "reproduction") job_test_dir = os.path.join(pipeline_artifacts_dir, "tests") - # TODO: Remove this line in Spack 0.23 - local_mirror_dir = os.path.join(pipeline_artifacts_dir, "mirror") user_artifacts_dir = os.path.join(pipeline_artifacts_dir, "user_data") # We communicate relative paths to the downstream jobs to avoid issues in @@ -847,8 +874,6 @@ def ensure_expected_target_path(path): rel_job_log_dir = os.path.relpath(job_log_dir, ci_project_dir) rel_job_repro_dir = os.path.relpath(job_repro_dir, ci_project_dir) rel_job_test_dir = os.path.relpath(job_test_dir, ci_project_dir) - # TODO: Remove this line in Spack 0.23 - rel_local_mirror_dir = os.path.join(local_mirror_dir, ci_project_dir) rel_user_artifacts_dir = os.path.relpath(user_artifacts_dir, ci_project_dir) # Speed up staging by first fetching binary indices from all mirrors @@ -910,7 +935,7 @@ def ensure_expected_target_path(path): continue up_to_date_mirrors = bindist.get_mirrors_for_spec( - spec=release_spec, mirrors_to_check=mirrors_to_check, index_only=check_index_only + spec=release_spec, index_only=check_index_only ) spec_record.rebuild = not up_to_date_mirrors @@ -952,36 +977,16 @@ def main_script_replacements(cmd): job_name = get_job_name(release_spec, build_group) - job_vars = job_object.setdefault("variables", {}) - job_vars["SPACK_JOB_SPEC_DAG_HASH"] = release_spec_dag_hash - job_vars["SPACK_JOB_SPEC_PKG_NAME"] = release_spec.name - job_vars["SPACK_JOB_SPEC_PKG_VERSION"] = release_spec.format("{version}") - job_vars["SPACK_JOB_SPEC_COMPILER_NAME"] = release_spec.format("{compiler.name}") - job_vars["SPACK_JOB_SPEC_COMPILER_VERSION"] = release_spec.format("{compiler.version}") - job_vars["SPACK_JOB_SPEC_ARCH"] = release_spec.format("{architecture}") - job_vars["SPACK_JOB_SPEC_VARIANTS"] = release_spec.format("{variants}") - job_object["needs"] = [] if spec_label in dependencies: - if enable_artifacts_buildcache: - # Get dependencies transitively, so they're all - # available in the artifacts buildcache. - dep_jobs = [d for d in release_spec.traverse(deptype="all", root=False)] - else: - # In this case, "needs" is only used for scheduling - # purposes, so we only get the direct dependencies. - dep_jobs = [] - for dep_label in dependencies[spec_label]: - dep_jobs.append(spec_labels[dep_label]) + # In this case, "needs" is only used for scheduling + # purposes, so we only get the direct dependencies. + dep_jobs = [] + for dep_label in dependencies[spec_label]: + dep_jobs.append(spec_labels[dep_label]) job_object["needs"].extend( - _format_job_needs( - dep_jobs, - build_group, - prune_dag, - rebuild_decisions, - enable_artifacts_buildcache, - ) + _format_job_needs(dep_jobs, build_group, prune_dag, rebuild_decisions) ) rebuild_spec = spec_record.rebuild @@ -1038,6 +1043,7 @@ def main_script_replacements(cmd): # Let downstream jobs know whether the spec needed rebuilding, regardless # whether DAG pruning was enabled or not. + job_vars = job_object["variables"] job_vars["SPACK_SPEC_NEEDS_REBUILD"] = str(rebuild_spec) if cdash_handler: @@ -1062,19 +1068,6 @@ def main_script_replacements(cmd): }, ) - # TODO: Remove this block in Spack 0.23 - if enable_artifacts_buildcache: - bc_root = os.path.join(local_mirror_dir, "build_cache") - job_object["artifacts"]["paths"].extend( - [ - os.path.join(bc_root, p) - for p in [ - bindist.tarball_name(release_spec, ".spec.json"), - bindist.tarball_directory_name(release_spec), - ] - ] - ) - job_object["stage"] = stage_name job_object["retry"] = {"max": 2, "when": JOB_RETRY_CONDITIONS} job_object["interruptible"] = True @@ -1089,15 +1082,7 @@ def main_script_replacements(cmd): job_id += 1 if print_summary: - _print_staging_summary(spec_labels, stages, mirrors_to_check, rebuild_decisions) - - # Clean up remote mirror override if enabled - # TODO: Remove this block in Spack 0.23 - if deprecated_mirror_config: - if remote_mirror_override: - spack.mirror.remove("ci_pr_mirror", cfg.default_modify_scope()) - if spack_pipeline_type == "spack_pull_request": - spack.mirror.remove("ci_shared_pr_mirror", cfg.default_modify_scope()) + _print_staging_summary(spec_labels, stages, rebuild_decisions) tty.debug(f"{job_id} build jobs generated in {stage_id} stages") @@ -1119,7 +1104,7 @@ def main_script_replacements(cmd): "when": ["runner_system_failure", "stuck_or_timeout_failure", "script_failure"], } - if copy_only_pipeline and not config_deprecated: + if copy_only_pipeline: stage_names.append("copy") sync_job = copy.deepcopy(spack_ci_ir["jobs"]["copy"]["attributes"]) sync_job["stage"] = "copy" @@ -1129,17 +1114,12 @@ def main_script_replacements(cmd): if "variables" not in sync_job: sync_job["variables"] = {} - sync_job["variables"]["SPACK_COPY_ONLY_DESTINATION"] = ( - buildcache_destination.fetch_url - if buildcache_destination - else remote_mirror_override or remote_mirror_url - ) + sync_job["variables"]["SPACK_COPY_ONLY_DESTINATION"] = buildcache_destination.fetch_url - if "buildcache-source" in pipeline_mirrors: - buildcache_source = pipeline_mirrors["buildcache-source"].fetch_url - else: - # TODO: Remove this condition in Spack 0.23 - buildcache_source = os.environ.get("SPACK_SOURCE_MIRROR", None) + if "buildcache-source" not in pipeline_mirrors: + raise SpackCIError("Copy-only pipelines require a mirror named 'buildcache-source'") + + buildcache_source = pipeline_mirrors["buildcache-source"].fetch_url sync_job["variables"]["SPACK_BUILDCACHE_SOURCE"] = buildcache_source sync_job["dependencies"] = [] @@ -1147,27 +1127,6 @@ def main_script_replacements(cmd): job_id += 1 if job_id > 0: - # TODO: Remove this block in Spack 0.23 - if temp_storage_url_prefix: - # There were some rebuild jobs scheduled, so we will need to - # schedule a job to clean up the temporary storage location - # associated with this pipeline. - stage_names.append("cleanup-temp-storage") - cleanup_job = copy.deepcopy(spack_ci_ir["jobs"]["cleanup"]["attributes"]) - - cleanup_job["stage"] = "cleanup-temp-storage" - cleanup_job["when"] = "always" - cleanup_job["retry"] = service_job_retries - cleanup_job["interruptible"] = True - - cleanup_job["script"] = _unpack_script( - cleanup_job["script"], - op=lambda cmd: cmd.replace("mirror_prefix", temp_storage_url_prefix), - ) - - cleanup_job["dependencies"] = [] - output_object["cleanup"] = cleanup_job - if ( "script" in spack_ci_ir["jobs"]["signing"]["attributes"] and spack_pipeline_type == "spack_protected_branch" @@ -1184,11 +1143,9 @@ def main_script_replacements(cmd): signing_job["interruptible"] = True if "variables" not in signing_job: signing_job["variables"] = {} - signing_job["variables"]["SPACK_BUILDCACHE_DESTINATION"] = ( - buildcache_destination.push_url # need the s3 url for aws s3 sync - if buildcache_destination - else remote_mirror_override or remote_mirror_url - ) + signing_job["variables"][ + "SPACK_BUILDCACHE_DESTINATION" + ] = buildcache_destination.push_url signing_job["dependencies"] = [] output_object["sign-pkgs"] = signing_job @@ -1199,9 +1156,7 @@ def main_script_replacements(cmd): final_job = spack_ci_ir["jobs"]["reindex"]["attributes"] final_job["stage"] = "stage-rebuild-index" - target_mirror = remote_mirror_override or remote_mirror_url - if buildcache_destination: - target_mirror = buildcache_destination.push_url + target_mirror = buildcache_destination.push_url final_job["script"] = _unpack_script( final_job["script"], op=lambda cmd: cmd.replace("{index_target_mirror}", target_mirror), @@ -1227,17 +1182,11 @@ def main_script_replacements(cmd): "SPACK_CONCRETE_ENV_DIR": rel_concrete_env_dir, "SPACK_VERSION": spack_version, "SPACK_CHECKOUT_VERSION": version_to_clone, - # TODO: Remove this line in Spack 0.23 - "SPACK_REMOTE_MIRROR_URL": remote_mirror_url, "SPACK_JOB_LOG_DIR": rel_job_log_dir, "SPACK_JOB_REPRO_DIR": rel_job_repro_dir, "SPACK_JOB_TEST_DIR": rel_job_test_dir, - # TODO: Remove this line in Spack 0.23 - "SPACK_LOCAL_MIRROR_DIR": rel_local_mirror_dir, "SPACK_PIPELINE_TYPE": str(spack_pipeline_type), "SPACK_CI_STACK_NAME": os.environ.get("SPACK_CI_STACK_NAME", "None"), - # TODO: Remove this line in Spack 0.23 - "SPACK_CI_SHARED_PR_MIRROR_URL": shared_pr_mirror or "None", "SPACK_REBUILD_CHECK_UP_TO_DATE": str(prune_dag), "SPACK_REBUILD_EVERYTHING": str(rebuild_everything), "SPACK_REQUIRE_SIGNING": os.environ.get("SPACK_REQUIRE_SIGNING", "False"), @@ -1246,10 +1195,6 @@ def main_script_replacements(cmd): for item, val in output_vars.items(): output_vars[item] = ensure_expected_target_path(val) - # TODO: Remove this block in Spack 0.23 - if deprecated_mirror_config and remote_mirror_override: - (output_object["variables"]["SPACK_REMOTE_MIRROR_OVERRIDE"]) = remote_mirror_override - spack_stack_name = os.environ.get("SPACK_CI_STACK_NAME", None) if spack_stack_name: output_object["variables"]["SPACK_CI_STACK_NAME"] = spack_stack_name @@ -1276,15 +1221,8 @@ def main_script_replacements(cmd): noop_job["retry"] = 0 noop_job["allow_failure"] = True - if copy_only_pipeline and config_deprecated: - tty.debug("Generating no-op job as copy-only is unsupported here.") - noop_job["script"] = [ - 'echo "copy-only pipelines are not supported with deprecated ci configs"' - ] - output_object = {"unsupported-copy": noop_job} - else: - tty.debug("No specs to rebuild, generating no-op job") - output_object = {"no-specs-to-rebuild": noop_job} + tty.debug("No specs to rebuild, generating no-op job") + output_object = {"no-specs-to-rebuild": noop_job} # Ensure the child pipeline always runs output_object["workflow"] = {"rules": [{"when": "always"}]} @@ -1450,7 +1388,11 @@ def copy_stage_logs_to_artifacts(job_spec: spack.spec.Spec, job_log_dir: str) -> stage_dir = job_pkg.stage.path tty.debug(f"stage dir: {stage_dir}") - for file in [job_pkg.log_path, job_pkg.env_mods_path, *job_pkg.builder.archive_files]: + for file in [ + job_pkg.log_path, + job_pkg.env_mods_path, + *spack.builder.create(job_pkg).archive_files, + ]: copy_files_to_artifacts(file, job_log_dir) @@ -2322,83 +2264,6 @@ def report_skipped(self, spec: spack.spec.Spec, report_dir: str, reason: Optiona reporter.test_skipped_report(report_dir, spec, reason) -def translate_deprecated_config(config): - # Remove all deprecated keys from config - mappings = config.pop("mappings", []) - match_behavior = config.pop("match_behavior", "first") - - build_job = {} - if "image" in config: - build_job["image"] = config.pop("image") - if "tags" in config: - build_job["tags"] = config.pop("tags") - if "variables" in config: - build_job["variables"] = config.pop("variables") - - # Scripts always override in old CI - if "before_script" in config: - build_job["before_script:"] = config.pop("before_script") - if "script" in config: - build_job["script:"] = config.pop("script") - if "after_script" in config: - build_job["after_script:"] = config.pop("after_script") - - signing_job = None - if "signing-job-attributes" in config: - signing_job = {"signing-job": config.pop("signing-job-attributes")} - - service_job_attributes = None - if "service-job-attributes" in config: - service_job_attributes = config.pop("service-job-attributes") - - # If this config already has pipeline-gen do not more - if "pipeline-gen" in config: - return True if mappings or build_job or signing_job or service_job_attributes else False - - config["target"] = "gitlab" - - config["pipeline-gen"] = [] - pipeline_gen = config["pipeline-gen"] - - # Build Job - submapping = [] - for section in mappings: - submapping_section = {"match": section["match"]} - if "runner-attributes" in section: - remapped_attributes = {} - if match_behavior == "first": - for key, value in section["runner-attributes"].items(): - # Scripts always override in old CI - if key == "script": - remapped_attributes["script:"] = value - elif key == "before_script": - remapped_attributes["before_script:"] = value - elif key == "after_script": - remapped_attributes["after_script:"] = value - else: - remapped_attributes[key] = value - else: - # Handle "merge" behavior be allowing scripts to merge in submapping section - remapped_attributes = section["runner-attributes"] - submapping_section["build-job"] = remapped_attributes - - if "remove-attributes" in section: - # Old format only allowed tags in this section, so no extra checks are needed - submapping_section["build-job-remove"] = section["remove-attributes"] - submapping.append(submapping_section) - pipeline_gen.append({"submapping": submapping, "match_behavior": match_behavior}) - - if build_job: - pipeline_gen.append({"build-job": build_job}) - - # Signing Job - if signing_job: - pipeline_gen.append(signing_job) - - # Service Jobs - if service_job_attributes: - pipeline_gen.append({"reindex-job": service_job_attributes}) - pipeline_gen.append({"noop-job": service_job_attributes}) - pipeline_gen.append({"cleanup-job": service_job_attributes}) - - return True +class SpackCIError(spack.error.SpackError): + def __init__(self, msg): + super().__init__(msg) diff --git a/lib/spack/spack/cmd/__init__.py b/lib/spack/spack/cmd/__init__.py index c481e931312988..e0bcf6da8d0311 100644 --- a/lib/spack/spack/cmd/__init__.py +++ b/lib/spack/spack/cmd/__init__.py @@ -8,7 +8,8 @@ import os import re import sys -from typing import List, Union +from collections import Counter +from typing import List, Optional, Union import llnl.string import llnl.util.tty as tty @@ -17,12 +18,14 @@ from llnl.util.tty.colify import colify from llnl.util.tty.color import colorize +import spack.concretize import spack.config # breaks a cycle. import spack.environment as ev import spack.error import spack.extensions import spack.parser import spack.paths +import spack.repo import spack.spec import spack.store import spack.traverse as traverse @@ -30,6 +33,8 @@ import spack.util.spack_json as sjson import spack.util.spack_yaml as syaml +from ..enums import InstallRecordStatus + # cmd has a submodule called "list" so preserve the python list module python_list = list @@ -173,10 +178,66 @@ def parse_specs( arg_string = " ".join([quote_kvp(arg) for arg in args]) specs = spack.parser.parse(arg_string) - for spec in specs: - if concretize: - spec.concretize(tests=tests) - return specs + if not concretize: + return specs + + to_concretize = [(s, None) for s in specs] + return _concretize_spec_pairs(to_concretize, tests=tests) + + +def _concretize_spec_pairs(to_concretize, tests=False): + """Helper method that concretizes abstract specs from a list of abstract,concrete pairs. + + Any spec with a concrete spec associated with it will concretize to that spec. Any spec + with ``None`` for its concrete spec will be newly concretized. This method respects unification + rules from config.""" + unify = spack.config.get("concretizer:unify", False) + + # Special case for concretizing a single spec + if len(to_concretize) == 1: + abstract, concrete = to_concretize[0] + return [concrete or abstract.concretized()] + + # Special case if every spec is either concrete or has an abstract hash + if all( + concrete or abstract.concrete or abstract.abstract_hash + for abstract, concrete in to_concretize + ): + # Get all the concrete specs + ret = [ + concrete or (abstract if abstract.concrete else abstract.lookup_hash()) + for abstract, concrete in to_concretize + ] + + # If unify: true, check that specs don't conflict + # Since all concrete, "when_possible" is not relevant + if unify is True: # True, "when_possible", False are possible values + runtimes = spack.repo.PATH.packages_with_tags("runtime") + specs_per_name = Counter( + spec.name + for spec in traverse.traverse_nodes( + ret, deptype=("link", "run"), key=traverse.by_dag_hash + ) + if spec.name not in runtimes # runtimes are allowed multiple times + ) + + conflicts = sorted(name for name, count in specs_per_name.items() if count > 1) + if conflicts: + raise spack.error.SpecError( + "Specs conflict and `concretizer:unify` is configured true.", + f" specs depend on multiple versions of {', '.join(conflicts)}", + ) + return ret + + # Standard case + concretize_method = spack.concretize.concretize_separately # unify: false + if unify is True: + concretize_method = spack.concretize.concretize_together + elif unify == "when_possible": + concretize_method = spack.concretize.concretize_together_when_possible + + concretized = concretize_method(to_concretize, tests=tests) + return [concrete for _, concrete in concretized] def matching_spec_from_env(spec): @@ -192,39 +253,64 @@ def matching_spec_from_env(spec): return spec.concretized() -def disambiguate_spec(spec, env, local=False, installed=True, first=False): +def matching_specs_from_env(specs): + """ + Same as ``matching_spec_from_env`` but respects spec unification rules. + + For each spec, if there is a matching spec in the environment it is used. If no + matching spec is found, this will return the given spec but concretized in the + context of the active environment and other given specs, with unification rules applied. + """ + env = ev.active_environment() + spec_pairs = [(spec, env.matching_spec(spec) if env else None) for spec in specs] + additional_concrete_specs = ( + [(concrete, concrete) for _, concrete in env.concretized_specs()] if env else [] + ) + return _concretize_spec_pairs(spec_pairs + additional_concrete_specs)[: len(spec_pairs)] + + +def disambiguate_spec( + spec: spack.spec.Spec, + env: Optional[ev.Environment], + local: bool = False, + installed: Union[bool, InstallRecordStatus] = True, + first: bool = False, +) -> spack.spec.Spec: """Given a spec, figure out which installed package it refers to. - Arguments: - spec (spack.spec.Spec): a spec to disambiguate - env (spack.environment.Environment): a spack environment, - if one is active, or None if no environment is active - local (bool): do not search chained spack instances - installed (bool or spack.database.InstallStatus or typing.Iterable): - install status argument passed to database query. - See ``spack.database.Database._query`` for details. + Args: + spec: a spec to disambiguate + env: a spack environment, if one is active, or None if no environment is active + local: do not search chained spack instances + installed: install status argument passed to database query. + first: returns the first matching spec, even if more than one match is found """ hashes = env.all_hashes() if env else None return disambiguate_spec_from_hashes(spec, hashes, local, installed, first) -def disambiguate_spec_from_hashes(spec, hashes, local=False, installed=True, first=False): +def disambiguate_spec_from_hashes( + spec: spack.spec.Spec, + hashes: List[str], + local: bool = False, + installed: Union[bool, InstallRecordStatus] = True, + first: bool = False, +) -> spack.spec.Spec: """Given a spec and a list of hashes, get concrete spec the spec refers to. Arguments: - spec (spack.spec.Spec): a spec to disambiguate - hashes (typing.Iterable): a set of hashes of specs among which to disambiguate - local (bool): do not search chained spack instances - installed (bool or spack.database.InstallStatus or typing.Iterable): - install status argument passed to database query. - See ``spack.database.Database._query`` for details. + spec: a spec to disambiguate + hashes: a set of hashes of specs among which to disambiguate + local: if True, do not search chained spack instances + installed: install status argument passed to database query. + first: returns the first matching spec, even if more than one match is found """ if local: matching_specs = spack.store.STORE.db.query_local(spec, hashes=hashes, installed=installed) else: matching_specs = spack.store.STORE.db.query(spec, hashes=hashes, installed=installed) if not matching_specs: - tty.die("Spec '%s' matches no installed packages." % spec) + tty.die(f"Spec '{spec}' matches no installed packages.") elif first: return matching_specs[0] @@ -509,6 +595,18 @@ def __init__(self, name): super().__init__("{0} is not a permissible Spack command name.".format(name)) +class MultipleSpecsMatch(Exception): + """Raised when multiple specs match a constraint, in a context where + this is not allowed. + """ + + +class NoSpecMatches(Exception): + """Raised when no spec matches a constraint, in a context where + this is not allowed. + """ + + ######################################## # argparse types for argument validation ######################################## diff --git a/lib/spack/spack/cmd/arch.py b/lib/spack/spack/cmd/arch.py index 163478414863a7..c684a5fa4b3d30 100644 --- a/lib/spack/spack/cmd/arch.py +++ b/lib/spack/spack/cmd/arch.py @@ -19,12 +19,23 @@ def setup_parser(subparser): + # DEPRECATED: equivalent to --generic --target subparser.add_argument( - "-g", "--generic-target", action="store_true", help="show the best generic target" + "-g", + "--generic-target", + action="store_true", + help="show the best generic target (deprecated)", ) subparser.add_argument( "--known-targets", action="store_true", help="show a list of all known targets and exit" ) + target_type = subparser.add_mutually_exclusive_group() + target_type.add_argument( + "--family", action="store_true", help="print generic ISA (x86_64, aarch64, ppc64le, ...)" + ) + target_type.add_argument( + "--generic", action="store_true", help="print feature level (x86_64_v3, armv8.4a, ...)" + ) parts = subparser.add_mutually_exclusive_group() parts2 = subparser.add_mutually_exclusive_group() parts.add_argument( @@ -80,6 +91,7 @@ def display_target_group(header, target_group): def arch(parser, args): if args.generic_target: + # TODO: add deprecation warning in 0.24 print(archspec.cpu.host().generic) return @@ -96,6 +108,10 @@ def arch(parser, args): host_platform = spack.platforms.host() host_os = host_platform.operating_system(os_args) host_target = host_platform.target(target_args) + if args.family: + host_target = host_target.family + elif args.generic: + host_target = host_target.generic architecture = spack.spec.ArchSpec((str(host_platform), str(host_os), str(host_target))) if args.platform: diff --git a/lib/spack/spack/cmd/buildcache.py b/lib/spack/spack/cmd/buildcache.py index 960f468c7d13b6..8daa78610c128f 100644 --- a/lib/spack/spack/cmd/buildcache.py +++ b/lib/spack/spack/cmd/buildcache.py @@ -34,6 +34,8 @@ from spack.cmd.common import arguments from spack.spec import Spec, save_dependency_specfiles +from ..enums import InstallRecordStatus + description = "create, download and install binary packages" section = "packaging" level = "long" @@ -308,7 +310,10 @@ def setup_parser(subparser: argparse.ArgumentParser): def _matching_specs(specs: List[Spec]) -> List[Spec]: """Disambiguate specs and return a list of matching specs""" - return [spack.cmd.disambiguate_spec(s, ev.active_environment(), installed=any) for s in specs] + return [ + spack.cmd.disambiguate_spec(s, ev.active_environment(), installed=InstallRecordStatus.ANY) + for s in specs + ] def _format_spec(spec: Spec) -> str: diff --git a/lib/spack/spack/cmd/ci.py b/lib/spack/spack/cmd/ci.py index 44557488fef6d0..8d835b0af41f59 100644 --- a/lib/spack/spack/cmd/ci.py +++ b/lib/spack/spack/cmd/ci.py @@ -62,13 +62,6 @@ def setup_parser(subparser): "path to the file where generated jobs file should be written. " "default is .gitlab-ci.yml in the root of the repository", ) - generate.add_argument( - "--copy-to", - default=None, - help="path to additional directory for job files\n\n" - "this option provides an absolute path to a directory where the generated " - "jobs yaml file should be copied. default is not to copy", - ) generate.add_argument( "--optimize", action="store_true", @@ -83,12 +76,6 @@ def setup_parser(subparser): default=False, help="(DEPRECATED) disable DAG scheduling (use 'plain' dependencies)", ) - generate.add_argument( - "--buildcache-destination", - default=None, - help="override the mirror configured in the environment\n\n" - "allows for pushing binaries from the generated pipeline to a different location", - ) prune_group = generate.add_mutually_exclusive_group() prune_group.add_argument( "--prune-dag", @@ -214,20 +201,10 @@ def ci_generate(args): env = spack.cmd.require_active_env(cmd_name="ci generate") - if args.copy_to: - tty.warn("The flag --copy-to is deprecated and will be removed in Spack 0.23") - - if args.buildcache_destination: - tty.warn( - "The flag --buildcache-destination is deprecated and will be removed in Spack 0.23" - ) - output_file = args.output_file - copy_yaml_to = args.copy_to prune_dag = args.prune_dag index_only = args.index_only artifacts_root = args.artifacts_root - buildcache_destination = args.buildcache_destination if not output_file: output_file = os.path.abspath(".gitlab-ci.yml") @@ -245,15 +222,8 @@ def ci_generate(args): prune_dag=prune_dag, check_index_only=index_only, artifacts_root=artifacts_root, - remote_mirror_override=buildcache_destination, ) - if copy_yaml_to: - copy_to_dir = os.path.dirname(copy_yaml_to) - if not os.path.exists(copy_to_dir): - os.makedirs(copy_to_dir) - shutil.copyfile(output_file, copy_yaml_to) - def ci_reindex(args): """rebuild the buildcache index for the remote mirror @@ -298,22 +268,13 @@ def ci_rebuild(args): job_log_dir = os.environ.get("SPACK_JOB_LOG_DIR") job_test_dir = os.environ.get("SPACK_JOB_TEST_DIR") repro_dir = os.environ.get("SPACK_JOB_REPRO_DIR") - # TODO: Remove this in Spack 0.23 - local_mirror_dir = os.environ.get("SPACK_LOCAL_MIRROR_DIR") concrete_env_dir = os.environ.get("SPACK_CONCRETE_ENV_DIR") - ci_pipeline_id = os.environ.get("CI_PIPELINE_ID") ci_job_name = os.environ.get("CI_JOB_NAME") signing_key = os.environ.get("SPACK_SIGNING_KEY") job_spec_pkg_name = os.environ.get("SPACK_JOB_SPEC_PKG_NAME") job_spec_dag_hash = os.environ.get("SPACK_JOB_SPEC_DAG_HASH") spack_pipeline_type = os.environ.get("SPACK_PIPELINE_TYPE") - # TODO: Remove this in Spack 0.23 - remote_mirror_override = os.environ.get("SPACK_REMOTE_MIRROR_OVERRIDE") - # TODO: Remove this in Spack 0.23 - remote_mirror_url = os.environ.get("SPACK_REMOTE_MIRROR_URL") spack_ci_stack_name = os.environ.get("SPACK_CI_STACK_NAME") - # TODO: Remove this in Spack 0.23 - shared_pr_mirror_url = os.environ.get("SPACK_CI_SHARED_PR_MIRROR_URL") rebuild_everything = os.environ.get("SPACK_REBUILD_EVERYTHING") require_signing = os.environ.get("SPACK_REQUIRE_SIGNING") @@ -333,12 +294,10 @@ def ci_rebuild(args): job_log_dir = os.path.join(ci_project_dir, job_log_dir) job_test_dir = os.path.join(ci_project_dir, job_test_dir) repro_dir = os.path.join(ci_project_dir, repro_dir) - local_mirror_dir = os.path.join(ci_project_dir, local_mirror_dir) concrete_env_dir = os.path.join(ci_project_dir, concrete_env_dir) # Debug print some of the key environment variables we should have received tty.debug("pipeline_artifacts_dir = {0}".format(pipeline_artifacts_dir)) - tty.debug("remote_mirror_url = {0}".format(remote_mirror_url)) tty.debug("job_spec_pkg_name = {0}".format(job_spec_pkg_name)) # Query the environment manifest to find out whether we're reporting to a @@ -370,51 +329,11 @@ def ci_rebuild(args): full_rebuild = True if rebuild_everything and rebuild_everything.lower() == "true" else False pipeline_mirrors = spack.mirror.MirrorCollection(binary=True) - deprecated_mirror_config = False buildcache_destination = None - if "buildcache-destination" in pipeline_mirrors: - buildcache_destination = pipeline_mirrors["buildcache-destination"] - else: - deprecated_mirror_config = True - # TODO: This will be an error in Spack 0.23 - - # If no override url exists, then just push binary package to the - # normal remote mirror url. - # TODO: Remove in Spack 0.23 - buildcache_mirror_url = remote_mirror_override or remote_mirror_url - if buildcache_destination: - buildcache_mirror_url = buildcache_destination.push_url - - # Figure out what is our temporary storage mirror: Is it artifacts - # buildcache? Or temporary-storage-url-prefix? In some cases we need to - # force something or pipelines might not have a way to propagate build - # artifacts from upstream to downstream jobs. - # TODO: Remove this in Spack 0.23 - pipeline_mirror_url = None - - # TODO: Remove this in Spack 0.23 - temp_storage_url_prefix = None - if "temporary-storage-url-prefix" in ci_config: - temp_storage_url_prefix = ci_config["temporary-storage-url-prefix"] - pipeline_mirror_url = url_util.join(temp_storage_url_prefix, ci_pipeline_id) - - # TODO: Remove this in Spack 0.23 - enable_artifacts_mirror = False - if "enable-artifacts-buildcache" in ci_config: - enable_artifacts_mirror = ci_config["enable-artifacts-buildcache"] - if enable_artifacts_mirror or ( - spack_is_pr_pipeline and not enable_artifacts_mirror and not temp_storage_url_prefix - ): - # If you explicitly enabled the artifacts buildcache feature, or - # if this is a PR pipeline but you did not enable either of the - # per-pipeline temporary storage features, we force the use of - # artifacts buildcache. Otherwise jobs will not have binary - # dependencies from previous stages available since we do not - # allow pushing binaries to the remote mirror during PR pipelines. - enable_artifacts_mirror = True - pipeline_mirror_url = url_util.path_to_file_url(local_mirror_dir) - mirror_msg = "artifact buildcache enabled, mirror url: {0}".format(pipeline_mirror_url) - tty.debug(mirror_msg) + if "buildcache-destination" not in pipeline_mirrors: + tty.die("spack ci rebuild requires a mirror named 'buildcache-destination") + + buildcache_destination = pipeline_mirrors["buildcache-destination"] # Get the concrete spec to be built by this job. try: @@ -489,48 +408,7 @@ def ci_rebuild(args): fd.write(spack_info.encode("utf8")) fd.write(b"\n") - pipeline_mirrors = [] - - # If we decided there should be a temporary storage mechanism, add that - # mirror now so it's used when we check for a hash match already - # built for this spec. - # TODO: Remove this block in Spack 0.23 - if pipeline_mirror_url: - mirror = spack.mirror.Mirror(pipeline_mirror_url, name=spack_ci.TEMP_STORAGE_MIRROR_NAME) - spack.mirror.add(mirror, cfg.default_modify_scope()) - pipeline_mirrors.append(pipeline_mirror_url) - - # Check configured mirrors for a built spec with a matching hash - # TODO: Remove this block in Spack 0.23 - mirrors_to_check = None - if remote_mirror_override: - if spack_pipeline_type == "spack_protected_branch": - # Passing "mirrors_to_check" below means we *only* look in the override - # mirror to see if we should skip building, which is what we want. - mirrors_to_check = {"override": remote_mirror_override} - - # Adding this mirror to the list of configured mirrors means dependencies - # could be installed from either the override mirror or any other configured - # mirror (e.g. remote_mirror_url which is defined in the environment or - # pipeline_mirror_url), which is also what we want. - spack.mirror.add( - spack.mirror.Mirror(remote_mirror_override, name="mirror_override"), - cfg.default_modify_scope(), - ) - pipeline_mirrors.append(remote_mirror_override) - - # TODO: Remove this in Spack 0.23 - if deprecated_mirror_config and spack_pipeline_type == "spack_pull_request": - if shared_pr_mirror_url != "None": - pipeline_mirrors.append(shared_pr_mirror_url) - - matches = ( - None - if full_rebuild - else bindist.get_mirrors_for_spec( - job_spec, mirrors_to_check=mirrors_to_check, index_only=False - ) - ) + matches = None if full_rebuild else bindist.get_mirrors_for_spec(job_spec, index_only=False) if matches: # Got a hash match on at least one configured mirror. All @@ -542,25 +420,10 @@ def ci_rebuild(args): tty.msg("No need to rebuild {0}, found hash match at: ".format(job_spec_pkg_name)) for match in matches: tty.msg(" {0}".format(match["mirror_url"])) - # TODO: Remove this block in Spack 0.23 - if enable_artifacts_mirror: - matching_mirror = matches[0]["mirror_url"] - build_cache_dir = os.path.join(local_mirror_dir, "build_cache") - tty.debug("Getting {0} buildcache from {1}".format(job_spec_pkg_name, matching_mirror)) - tty.debug("Downloading to {0}".format(build_cache_dir)) - bindist.download_single_spec(job_spec, build_cache_dir, mirror_url=matching_mirror) # Now we are done and successful return 0 - # Before beginning the install, if this is a "rebuild everything" pipeline, we - # only want to keep the mirror being used by the current pipeline as it's binary - # package destination. This ensures that the when we rebuild everything, we only - # consume binary dependencies built in this pipeline. - # TODO: Remove this in Spack 0.23 - if deprecated_mirror_config and full_rebuild: - spack_ci.remove_other_mirrors(pipeline_mirrors, cfg.default_modify_scope()) - # No hash match anywhere means we need to rebuild spec # Start with spack arguments @@ -681,17 +544,11 @@ def ci_rebuild(args): cdash_handler.copy_test_results(reports_dir, job_test_dir) if install_exit_code == 0: - # If the install succeeded, push it to one or more mirrors. Failure to push to any mirror + # If the install succeeded, push it to the buildcache destination. Failure to push # will result in a non-zero exit code. Pushing is best-effort. - mirror_urls = [buildcache_mirror_url] - - # TODO: Remove this block in Spack 0.23 - if pipeline_mirror_url: - mirror_urls.append(pipeline_mirror_url) - for result in spack_ci.create_buildcache( input_spec=job_spec, - destination_mirror_urls=mirror_urls, + destination_mirror_urls=[buildcache_destination.push_url], sign_binaries=spack_ci.can_sign_binaries(), ): if not result.success: diff --git a/lib/spack/spack/cmd/clean.py b/lib/spack/spack/cmd/clean.py index 0b8fb6d6bbf6f2..59d650fd12a7cc 100644 --- a/lib/spack/spack/cmd/clean.py +++ b/lib/spack/spack/cmd/clean.py @@ -105,7 +105,8 @@ def clean(parser, args): # Then do the cleaning falling through the cases if args.specs: specs = spack.cmd.parse_specs(args.specs, concretize=False) - specs = list(spack.cmd.matching_spec_from_env(x) for x in specs) + specs = spack.cmd.matching_specs_from_env(specs) + for spec in specs: msg = "Cleaning build stage [{0}]" tty.msg(msg.format(spec.short_spec)) diff --git a/lib/spack/spack/cmd/common/arguments.py b/lib/spack/spack/cmd/common/arguments.py index 456ad0f5ac2260..7ddafd4d14c566 100644 --- a/lib/spack/spack/cmd/common/arguments.py +++ b/lib/spack/spack/cmd/common/arguments.py @@ -581,23 +581,51 @@ def add_concretizer_args(subparser): def add_connection_args(subparser, add_help): - subparser.add_argument( - "--s3-access-key-id", help="ID string to use to connect to this S3 mirror" + def add_argument_string_or_variable(parser, arg: str, *, deprecate_str: bool = True, **kwargs): + group = parser.add_mutually_exclusive_group() + group.add_argument(arg, **kwargs) + # Update help string + if "help" in kwargs: + kwargs["help"] = "environment variable containing " + kwargs["help"] + group.add_argument(arg + "-variable", **kwargs) + + s3_connection_parser = subparser.add_argument_group("S3 Connection") + + add_argument_string_or_variable( + s3_connection_parser, + "--s3-access-key-id", + help="ID string to use to connect to this S3 mirror", ) - subparser.add_argument( - "--s3-access-key-secret", help="secret string to use to connect to this S3 mirror" + add_argument_string_or_variable( + s3_connection_parser, + "--s3-access-key-secret", + help="secret string to use to connect to this S3 mirror", ) - subparser.add_argument( - "--s3-access-token", help="access token to use to connect to this S3 mirror" + add_argument_string_or_variable( + s3_connection_parser, + "--s3-access-token", + help="access token to use to connect to this S3 mirror", ) - subparser.add_argument( + s3_connection_parser.add_argument( "--s3-profile", help="S3 profile name to use to connect to this S3 mirror", default=None ) - subparser.add_argument( + s3_connection_parser.add_argument( "--s3-endpoint-url", help="endpoint URL to use to connect to this S3 mirror" ) - subparser.add_argument("--oci-username", help="username to use to connect to this OCI mirror") - subparser.add_argument("--oci-password", help="password to use to connect to this OCI mirror") + + oci_connection_parser = subparser.add_argument_group("OCI Connection") + + add_argument_string_or_variable( + oci_connection_parser, + "--oci-username", + deprecate_str=False, + help="username to use to connect to this OCI mirror", + ) + add_argument_string_or_variable( + oci_connection_parser, + "--oci-password", + help="password to use to connect to this OCI mirror", + ) def use_buildcache(cli_arg_value): @@ -660,34 +688,32 @@ def mirror_name_or_url(m): # accidentally to a dir in the current working directory. # If there's a \ or / in the name, it's interpreted as a path or url. - if "/" in m or "\\" in m: + if "/" in m or "\\" in m or m in (".", ".."): return spack.mirror.Mirror(m) # Otherwise, the named mirror is required to exist. try: return spack.mirror.require_mirror_name(m) except ValueError as e: - raise argparse.ArgumentTypeError( - str(e) + ". Did you mean {}?".format(os.path.join(".", m)) - ) + raise argparse.ArgumentTypeError(f"{e}. Did you mean {os.path.join('.', m)}?") from e def mirror_url(url): try: return spack.mirror.Mirror.from_url(url) except ValueError as e: - raise argparse.ArgumentTypeError(str(e)) + raise argparse.ArgumentTypeError(str(e)) from e def mirror_directory(path): try: return spack.mirror.Mirror.from_local_path(path) except ValueError as e: - raise argparse.ArgumentTypeError(str(e)) + raise argparse.ArgumentTypeError(str(e)) from e def mirror_name(name): try: return spack.mirror.require_mirror_name(name) except ValueError as e: - raise argparse.ArgumentTypeError(str(e)) + raise argparse.ArgumentTypeError(str(e)) from e diff --git a/lib/spack/spack/cmd/deconcretize.py b/lib/spack/spack/cmd/deconcretize.py index ffb05eebe71ffa..7e2feab5aa0926 100644 --- a/lib/spack/spack/cmd/deconcretize.py +++ b/lib/spack/spack/cmd/deconcretize.py @@ -99,5 +99,5 @@ def deconcretize(parser, args): " Use `spack deconcretize --all` to deconcretize ALL specs.", ) - specs = spack.cmd.parse_specs(args.specs) if args.specs else [any] + specs = spack.cmd.parse_specs(args.specs) if args.specs else [None] deconcretize_specs(args, specs) diff --git a/lib/spack/spack/cmd/deprecate.py b/lib/spack/spack/cmd/deprecate.py index abca550ccad4a0..f7ecc39312faae 100644 --- a/lib/spack/spack/cmd/deprecate.py +++ b/lib/spack/spack/cmd/deprecate.py @@ -23,9 +23,10 @@ import spack.installer import spack.store from spack.cmd.common import arguments -from spack.database import InstallStatuses from spack.error import SpackError +from ..enums import InstallRecordStatus + description = "replace one package with another via symlinks" section = "admin" level = "long" @@ -95,8 +96,12 @@ def deprecate(parser, args): if len(specs) != 2: raise SpackError("spack deprecate requires exactly two specs") - install_query = [InstallStatuses.INSTALLED, InstallStatuses.DEPRECATED] - deprecate = spack.cmd.disambiguate_spec(specs[0], env, local=True, installed=install_query) + deprecate = spack.cmd.disambiguate_spec( + specs[0], + env, + local=True, + installed=(InstallRecordStatus.INSTALLED | InstallRecordStatus.DEPRECATED), + ) if args.install: deprecator = specs[1].concretized() diff --git a/lib/spack/spack/cmd/env.py b/lib/spack/spack/cmd/env.py index c4596af469c15a..5a80f0e1a8a8e3 100644 --- a/lib/spack/spack/cmd/env.py +++ b/lib/spack/spack/cmd/env.py @@ -10,11 +10,12 @@ import sys import tempfile from pathlib import Path -from typing import List, Optional +from typing import List, Optional, Set import llnl.string as string import llnl.util.filesystem as fs import llnl.util.tty as tty +from llnl.util.symlink import islink, symlink from llnl.util.tty.colify import colify from llnl.util.tty.color import cescape, colorize @@ -50,6 +51,8 @@ "update", "revert", "depfile", + "track", + "untrack", ] @@ -57,35 +60,41 @@ # env create # def env_create_setup_parser(subparser): - """create a new environment""" - subparser.add_argument("env_name", metavar="env", help="name or directory of environment") + """create a new environment + + create a new environment or, optionally, copy an existing environment + + a manifest file results in a new abstract environment while a lock file + creates a new concrete environment + """ + subparser.add_argument( + "env_name", metavar="env", help="name or directory of the new environment" + ) subparser.add_argument( "-d", "--dir", action="store_true", help="create an environment in a specific directory" ) subparser.add_argument( "--keep-relative", action="store_true", - help="copy relative develop paths verbatim into the new environment" - " when initializing from envfile", + help="copy envfile's relative develop paths verbatim", ) view_opts = subparser.add_mutually_exclusive_group() view_opts.add_argument( "--without-view", action="store_true", help="do not maintain a view for this environment" ) view_opts.add_argument( - "--with-view", - help="specify that this environment should maintain a view at the" - " specified path (by default the view is maintained in the" - " environment directory)", + "--with-view", help="maintain view at WITH_VIEW (vs. environment's directory)" ) subparser.add_argument( "envfile", nargs="?", default=None, - help="either a lockfile (must end with '.json' or '.lock') or a manifest file", + help="manifest or lock file (ends with '.json' or '.lock')", ) subparser.add_argument( - "--include-concrete", action="append", help="name of old environment to copy specs from" + "--include-concrete", + action="append", + help="copy concrete specs from INCLUDE_CONCRETE's environment", ) @@ -173,7 +182,7 @@ def _env_create( # env activate # def env_activate_setup_parser(subparser): - """set the current environment""" + """set the active environment""" shells = subparser.add_mutually_exclusive_group() shells.add_argument( "--sh", @@ -213,14 +222,14 @@ def env_activate_setup_parser(subparser): view_options = subparser.add_mutually_exclusive_group() view_options.add_argument( - "--with-view", "-v", + "--with-view", metavar="name", - help="set runtime environment variables for specific view", + help="set runtime environment variables for the named view", ) view_options.add_argument( - "--without-view", "-V", + "--without-view", action="store_true", help="do not set runtime environment variables for any view", ) @@ -230,14 +239,14 @@ def env_activate_setup_parser(subparser): "--prompt", action="store_true", default=False, - help="decorate the command line prompt when activating", + help="add the active environment to the command line prompt", ) subparser.add_argument( "--temp", action="store_true", default=False, - help="create and activate an environment in a temporary directory", + help="create and activate in a temporary directory", ) subparser.add_argument( "--create", @@ -249,13 +258,12 @@ def env_activate_setup_parser(subparser): "--envfile", nargs="?", default=None, - help="either a lockfile (must end with '.json' or '.lock') or a manifest file", + help="manifest or lock file (ends with '.json' or '.lock')", ) subparser.add_argument( "--keep-relative", action="store_true", - help="copy relative develop paths verbatim into the new environment" - " when initializing from envfile", + help="copy envfile's relative develop paths verbatim when create", ) subparser.add_argument( "-d", @@ -269,10 +277,7 @@ def env_activate_setup_parser(subparser): dest="env_name", nargs="?", default=None, - help=( - "name of managed environment or directory of the independent env" - " (when using --dir/-d) to activate" - ), + help=("name or directory of the environment being activated"), ) @@ -385,7 +390,7 @@ def env_activate(args): # env deactivate # def env_deactivate_setup_parser(subparser): - """deactivate any active environment in the shell""" + """deactivate the active environment""" shells = subparser.add_mutually_exclusive_group() shells.add_argument( "--sh", @@ -445,103 +450,252 @@ def env_deactivate(args): # -# env remove +# env track # -def env_remove_setup_parser(subparser): - """remove an existing environment""" - subparser.add_argument("rm_env", metavar="env", nargs="+", help="environment(s) to remove") +def env_track_setup_parser(subparser): + """track an environment from a directory in Spack""" + subparser.add_argument("-n", "--name", help="custom environment name") + subparser.add_argument("dir", help="path to environment") arguments.add_common_arguments(subparser, ["yes_to_all"]) - subparser.add_argument( - "-f", - "--force", - action="store_true", - help="remove the environment even if it is included in another environment", + + +def env_track(args): + src_path = os.path.abspath(args.dir) + if not ev.is_env_dir(src_path): + tty.die("Cannot track environment. Path doesn't contain an environment") + + if args.name: + name = args.name + else: + name = os.path.basename(src_path) + + try: + dst_path = ev.environment_dir_from_name(name, exists_ok=False) + except ev.SpackEnvironmentError: + tty.die( + f"An environment named {name} already exists. Set a name with:" + "\n\n" + f" spack env track --name NAME {src_path}\n" + ) + + symlink(src_path, dst_path) + + tty.msg(f"Tracking environment in {src_path}") + tty.msg( + "You can now activate this environment with the following command:\n\n" + f" spack env activate {name}\n" ) -def env_remove(args): - """Remove a *named* environment. +# +# env remove & untrack helpers +# +def filter_managed_env_names(env_names: Set[str]) -> Set[str]: + tracked_env_names = {e for e in env_names if islink(ev.environment_dir_from_name(e))} + managed_env_names = env_names - set(tracked_env_names) + + num_managed_envs = len(managed_env_names) + managed_envs_str = " ".join(managed_env_names) + if num_managed_envs >= 2: + tty.error( + f"The following are not tracked environments. " + "To remove them completely run," + "\n\n" + f" spack env rm {managed_envs_str}\n" + ) + + elif num_managed_envs > 0: + tty.error( + f"'{managed_envs_str}' is not a tracked env. " + "To remove it completely run," + "\n\n" + f" spack env rm {managed_envs_str}\n" + ) + + return tracked_env_names - This removes an environment managed by Spack. Directory environments - and manifests embedded in repositories should be removed manually. - """ - remove_envs = [] - valid_envs = [] - bad_envs = [] - for env_name in ev.all_environment_names(): +def get_valid_envs(env_names: Set[str]) -> Set[ev.Environment]: + valid_envs = set() + for env_name in env_names: try: env = ev.read(env_name) - valid_envs.append(env) + valid_envs.add(env) - if env_name in args.rm_env: - remove_envs.append(env) except (spack.config.ConfigFormatError, ev.SpackEnvironmentConfigError): - if env_name in args.rm_env: - bad_envs.append(env_name) + pass + + return valid_envs + + +def _env_untrack_or_remove( + env_names: List[str], remove: bool = False, force: bool = False, yes_to_all: bool = False +): + all_env_names = set(ev.all_environment_names()) + known_env_names = set(env_names).intersection(all_env_names) + unknown_env_names = set(env_names) - known_env_names + + # print error for unknown environments + for env_name in unknown_env_names: + tty.error(f"Environment '{env_name}' does not exist") + + # if only unlinking is allowed, remove all environments + # which do not point internally at symlinks + if not remove: + env_names_to_remove = filter_managed_env_names(known_env_names) + else: + env_names_to_remove = known_env_names + + # initalize all environments with valid spack.yaml configs + all_valid_envs = get_valid_envs(all_env_names) - # Check if remove_env is included from another env before trying to remove - for env in valid_envs: - for remove_env in remove_envs: - # don't check if environment is included to itself + # build a task list of environments and bad env names to remove + envs_to_remove = [e for e in all_valid_envs if e.name in env_names_to_remove] + bad_env_names_to_remove = env_names_to_remove - {e.name for e in envs_to_remove} + for remove_env in envs_to_remove: + for env in all_valid_envs: + # don't check if an environment is included to itself if env.name == remove_env.name: continue + # check if an environment is included un another if remove_env.path in env.included_concrete_envs: - msg = f'Environment "{remove_env.name}" is being used by environment "{env.name}"' - if args.force: + msg = f"Environment '{remove_env.name}' is used by environment '{env.name}'" + if force: tty.warn(msg) else: - tty.die(msg) - - if not args.yes_to_all: - environments = string.plural(len(args.rm_env), "environment", show_n=False) - envs = string.comma_and(args.rm_env) - answer = tty.get_yes_or_no(f"Really remove {environments} {envs}?", default=False) + tty.error(msg) + envs_to_remove.remove(remove_env) + + # ask the user if they really want to remove the known environments + # force should do the same as yes to all here following the symantics of rm + if not (yes_to_all or force) and (envs_to_remove or bad_env_names_to_remove): + environments = string.plural(len(env_names_to_remove), "environment", show_n=False) + envs = string.comma_and(list(env_names_to_remove)) + answer = tty.get_yes_or_no( + f"Really {'remove' if remove else 'untrack'} {environments} {envs}?", default=False + ) if not answer: tty.die("Will not remove any environments") - for env in remove_envs: + # keep track of the environments we remove for later printing the exit code + removed_env_names = [] + for env in envs_to_remove: name = env.name - if env.active: - tty.die(f"Environment {name} can't be removed while activated.") - env.destroy() - tty.msg(f"Successfully removed environment '{name}'") + if not force and env.active: + tty.error( + f"Environment '{name}' can't be " + f"{'removed' if remove else 'untracked'} while activated." + ) + continue + # Get path to check if environment is a tracked / symlinked environment + if islink(env.path): + real_env_path = os.path.realpath(env.path) + os.unlink(env.path) + tty.msg( + f"Sucessfully untracked environment '{name}', " + "but it can still be found at:\n\n" + f" {real_env_path}\n" + ) + else: + env.destroy() + tty.msg(f"Successfully removed environment '{name}'") - for bad_env_name in bad_envs: + removed_env_names.append(env.name) + + for bad_env_name in bad_env_names_to_remove: shutil.rmtree( spack.environment.environment.environment_dir_from_name(bad_env_name, exists_ok=True) ) tty.msg(f"Successfully removed environment '{bad_env_name}'") + removed_env_names.append(env.name) + + # Following the design of linux rm we should exit with a status of 1 + # anytime we cannot delete every environment the user asks for. + # However, we should still process all the environments we know about + # and delete them instead of failing on the first unknown enviornment. + if len(removed_env_names) < len(known_env_names): + sys.exit(1) # -# env rename +# env untrack # -def env_rename_setup_parser(subparser): - """rename an existing environment""" +def env_untrack_setup_parser(subparser): + """track an environment from a directory in Spack""" + subparser.add_argument("env", nargs="+", help="tracked environment name") subparser.add_argument( - "mv_from", metavar="from", help="name (or path) of existing environment" + "-f", "--force", action="store_true", help="force unlink even when environment is active" ) + arguments.add_common_arguments(subparser, ["yes_to_all"]) + + +def env_untrack(args): + _env_untrack_or_remove( + env_names=args.env, force=args.force, yes_to_all=args.yes_to_all, remove=False + ) + + +# +# env remove +# +def env_remove_setup_parser(subparser): + """remove managed environment(s) + + remove existing environment(s) managed by Spack + + directory environments and manifests embedded in repositories must be + removed manually + """ + subparser.add_argument( + "rm_env", metavar="env", nargs="+", help="name(s) of the environment(s) being removed" + ) + arguments.add_common_arguments(subparser, ["yes_to_all"]) + subparser.add_argument( + "-f", + "--force", + action="store_true", + help="force removal even when included in other environment(s)", + ) + + +def env_remove(args): + """remove existing environment(s)""" + _env_untrack_or_remove( + env_names=args.rm_env, remove=True, force=args.force, yes_to_all=args.yes_to_all + ) + + +# +# env rename +# +def env_rename_setup_parser(subparser): + """rename an existing environment + + rename a managed environment or move an independent/directory environment + + operation cannot be performed to or from an active environment + """ subparser.add_argument( - "mv_to", metavar="to", help="new name (or path) for existing environment" + "mv_from", metavar="from", help="current name or directory of the environment" ) + subparser.add_argument("mv_to", metavar="to", help="new name or directory for the environment") subparser.add_argument( "-d", "--dir", action="store_true", - help="the specified arguments correspond to directory paths", + help="positional arguments are environment directory paths", ) subparser.add_argument( - "-f", "--force", action="store_true", help="allow overwriting of an existing environment" + "-f", + "--force", + action="store_true", + help="force renaming even if overwriting an existing environment", ) def env_rename(args): - """Rename an environment. - - This renames a managed environment or moves an independent environment. - """ + """rename or move an existing environment""" # Directory option has been specified if args.dir: @@ -590,7 +744,7 @@ def env_rename(args): # env list # def env_list_setup_parser(subparser): - """list managed environments""" + """list all managed environments""" def env_list(args): @@ -626,13 +780,14 @@ def actions(): # env view # def env_view_setup_parser(subparser): - """manage a view associated with the environment""" + """manage the environment's view + + provide the path when enabling a view with a non-default path + """ subparser.add_argument( "action", choices=ViewAction.actions(), help="action to take for the environment's view" ) - subparser.add_argument( - "view_path", nargs="?", help="when enabling a view, optionally set the path manually" - ) + subparser.add_argument("view_path", nargs="?", help="view's non-default path when enabling it") def env_view(args): @@ -660,7 +815,7 @@ def env_view(args): # env status # def env_status_setup_parser(subparser): - """print whether there is an active environment""" + """print active environment status""" def env_status(args): @@ -720,14 +875,22 @@ def env_loads(args): def env_update_setup_parser(subparser): - """update environments to the latest format""" + """update the environment manifest to the latest schema format + + update the environment to the latest schema format, which may not be + readable by older versions of spack + + a backup copy of the manifest is retained in case there is a need to revert + this operation + """ subparser.add_argument( - metavar="env", dest="update_env", help="name or directory of the environment to activate" + metavar="env", dest="update_env", help="name or directory of the environment" ) spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"]) def env_update(args): + """update the manifest to the latest format""" manifest_file = ev.manifest_file(args.update_env) backup_file = manifest_file + ".bkp" @@ -757,14 +920,22 @@ def env_update(args): def env_revert_setup_parser(subparser): - """restore environments to their state before update""" + """restore the environment manifest to its previous format + + revert the environment's manifest to the schema format from its last + 'spack env update' + + the current manifest will be overwritten by the backup copy and the backup + copy will be removed + """ subparser.add_argument( - metavar="env", dest="revert_env", help="name or directory of the environment to activate" + metavar="env", dest="revert_env", help="name or directory of the environment" ) spack.cmd.common.arguments.add_common_arguments(subparser, ["yes_to_all"]) def env_revert(args): + """restore the environment manifest to its previous format""" manifest_file = ev.manifest_file(args.revert_env) backup_file = manifest_file + ".bkp" @@ -796,15 +967,19 @@ def env_revert(args): def env_depfile_setup_parser(subparser): - """generate a depfile from the concrete environment specs""" + """generate a depfile to exploit parallel builds across specs + + requires the active environment to be concrete + """ subparser.add_argument( "--make-prefix", "--make-target-prefix", default=None, metavar="TARGET", - help="prefix Makefile targets (and variables) with /\n\nby default " - "the absolute path to the directory makedeps under the environment metadata dir is " - "used. can be set to an empty string --make-prefix ''", + help="prefix Makefile targets/variables with /,\n" + "which can be an empty string (--make-prefix '')\n" + "defaults to the absolute path of the environment's makedeps\n" + "environment metadata dir\n", ) subparser.add_argument( "--make-disable-jobserver", @@ -819,8 +994,8 @@ def env_depfile_setup_parser(subparser): type=arguments.use_buildcache, default="package:auto,dependencies:auto", metavar="[{auto,only,never},][package:{auto,only,never},][dependencies:{auto,only,never}]", - help="when using `only`, redundant build dependencies are pruned from the DAG\n\n" - "this flag is passed on to the generated spack install commands", + help="use `only` to prune redundant build dependencies\n" + "option is also passed to generated spack install commands", ) subparser.add_argument( "-o", @@ -834,14 +1009,14 @@ def env_depfile_setup_parser(subparser): "--generator", default="make", choices=("make",), - help="specify the depfile type\n\ncurrently only make is supported", + help="specify the depfile type (only supports `make`)", ) subparser.add_argument( metavar="specs", dest="specs", nargs=argparse.REMAINDER, default=None, - help="generate a depfile only for matching specs in the environment", + help="limit the generated file to matching specs", ) @@ -910,7 +1085,12 @@ def setup_parser(subparser): setup_parser_cmd_name = "env_%s_setup_parser" % name setup_parser_cmd = globals()[setup_parser_cmd_name] - subsubparser = sp.add_parser(name, aliases=aliases, help=setup_parser_cmd.__doc__) + subsubparser = sp.add_parser( + name, + aliases=aliases, + description=setup_parser_cmd.__doc__, + help=spack.cmd.first_line(setup_parser_cmd.__doc__), + ) setup_parser_cmd(subsubparser) diff --git a/lib/spack/spack/cmd/find.py b/lib/spack/spack/cmd/find.py index 2f25683c5ece6b..29ac155984aaee 100644 --- a/lib/spack/spack/cmd/find.py +++ b/lib/spack/spack/cmd/find.py @@ -17,7 +17,8 @@ import spack.spec import spack.store from spack.cmd.common import arguments -from spack.database import InstallStatuses + +from ..enums import InstallRecordStatus description = "list and search installed packages" section = "basic" @@ -137,21 +138,22 @@ def setup_parser(subparser): subparser.add_argument( "--loaded", action="store_true", help="show only packages loaded in the user environment" ) - subparser.add_argument( + only_missing_or_deprecated = subparser.add_mutually_exclusive_group() + only_missing_or_deprecated.add_argument( "-M", "--only-missing", action="store_true", dest="only_missing", help="show only missing dependencies", ) + only_missing_or_deprecated.add_argument( + "--only-deprecated", action="store_true", help="show only deprecated packages" + ) subparser.add_argument( "--deprecated", action="store_true", help="show deprecated packages as well as installed specs", ) - subparser.add_argument( - "--only-deprecated", action="store_true", help="show only deprecated packages" - ) subparser.add_argument( "--install-tree", action="store", @@ -165,26 +167,35 @@ def setup_parser(subparser): def query_arguments(args): - # Set up query arguments. - installed = [] - if not (args.only_missing or args.only_deprecated): - installed.append(InstallStatuses.INSTALLED) - if (args.deprecated or args.only_deprecated) and not args.only_missing: - installed.append(InstallStatuses.DEPRECATED) - if (args.missing or args.only_missing) and not args.only_deprecated: - installed.append(InstallStatuses.MISSING) - - known = any + if args.only_missing and (args.deprecated or args.missing): + raise RuntimeError("cannot use --only-missing with --deprecated, or --missing") + + if args.only_deprecated and (args.deprecated or args.missing): + raise RuntimeError("cannot use --only-deprecated with --deprecated, or --missing") + + installed = InstallRecordStatus.INSTALLED + if args.only_missing: + installed = InstallRecordStatus.MISSING + elif args.only_deprecated: + installed = InstallRecordStatus.DEPRECATED + + if args.missing: + installed |= InstallRecordStatus.MISSING + + if args.deprecated: + installed |= InstallRecordStatus.DEPRECATED + + predicate_fn = None if args.unknown: - known = False + predicate_fn = lambda x: not spack.repo.PATH.exists(x.spec.name) - explicit = any + explicit = None if args.explicit: explicit = True if args.implicit: explicit = False - q_args = {"installed": installed, "known": known, "explicit": explicit} + q_args = {"installed": installed, "predicate_fn": predicate_fn, "explicit": explicit} install_tree = args.install_tree upstreams = spack.config.get("upstreams", {}) @@ -222,11 +233,9 @@ def decorator(spec, fmt): def display_env(env, args, decorator, results): """Display extra find output when running in an environment. - Find in an environment outputs 2 or 3 sections: - - 1. Root specs - 2. Concretized roots (if asked for with -c) - 3. Installed specs + In an environment, `spack find` outputs a preliminary section + showing the root specs of the environment (this is in addition + to the section listing out specs matching the query parameters). """ tty.msg("In environment %s" % env.name) @@ -299,42 +308,70 @@ def root_decorator(spec, string): print() -def find(parser, args): - env = ev.active_environment() - - if not env and args.only_roots: - tty.die("-r / --only-roots requires an active environment") - if not env and args.show_concretized: - tty.die("-c / --show-concretized requires an active environment") - +def _find_query(args, env): + q_args = query_arguments(args) + concretized_but_not_installed = list() if env: + all_env_specs = env.all_specs() if args.constraint: - init_specs = spack.cmd.parse_specs(args.constraint) - results = env.all_matching_specs(*init_specs) + init_specs = cmd.parse_specs(args.constraint) + env_specs = env.all_matching_specs(*init_specs) else: - results = env.all_specs() + env_specs = all_env_specs + + spec_hashes = set(x.dag_hash() for x in env_specs) + specs_meeting_q_args = set(spack.store.STORE.db.query(hashes=spec_hashes, **q_args)) + + results = list() + with spack.store.STORE.db.read_transaction(): + for spec in env_specs: + if not spec.installed: + concretized_but_not_installed.append(spec) + if spec in specs_meeting_q_args: + results.append(spec) else: - q_args = query_arguments(args) results = args.specs(**q_args) - decorator = make_env_decorator(env) if env else lambda s, f: f - # use groups by default except with format. if args.groups is None: args.groups = not args.format # Exit early with an error code if no package matches the constraint - if not results and args.constraint: - constraint_str = " ".join(str(s) for s in args.constraint_specs) - tty.die(f"No package matches the query: {constraint_str}") + if concretized_but_not_installed and args.show_concretized: + pass + elif results: + pass + elif args.constraint: + raise cmd.NoSpecMatches() # If tags have been specified on the command line, filter by tags if args.tags: packages_with_tags = spack.repo.PATH.packages_with_tags(*args.tags) results = [x for x in results if x.name in packages_with_tags] + concretized_but_not_installed = [ + x for x in concretized_but_not_installed if x.name in packages_with_tags + ] if args.loaded: - results = spack.cmd.filter_loaded_specs(results) + results = cmd.filter_loaded_specs(results) + + return results, concretized_but_not_installed + + +def find(parser, args): + env = ev.active_environment() + + if not env and args.only_roots: + tty.die("-r / --only-roots requires an active environment") + if not env and args.show_concretized: + tty.die("-c / --show-concretized requires an active environment") + + try: + results, concretized_but_not_installed = _find_query(args, env) + except cmd.NoSpecMatches: + # Note: this uses args.constraint vs. args.constraint_specs because + # the latter only exists if you call args.specs() + tty.die(f"No package matches the query: {' '.join(args.constraint)}") if args.install_status or args.show_concretized: status_fn = spack.spec.Spec.install_status @@ -345,14 +382,16 @@ def find(parser, args): if args.json: cmd.display_specs_as_json(results, deps=args.deps) else: + decorator = make_env_decorator(env) if env else lambda s, f: f + if not args.format: if env: display_env(env, args, decorator, results) if not args.only_roots: - display_results = results - if not args.show_concretized: - display_results = list(x for x in results if x.installed) + display_results = list(results) + if args.show_concretized: + display_results += concretized_but_not_installed cmd.display_specs( display_results, args, decorator=decorator, all_headers=True, status_fn=status_fn ) @@ -370,13 +409,9 @@ def find(parser, args): concretized_suffix += " (show with `spack find -c`)" pkg_type = "loaded" if args.loaded else "installed" - spack.cmd.print_how_many_pkgs( - list(x for x in results if x.installed), pkg_type, suffix=installed_suffix - ) + cmd.print_how_many_pkgs(results, pkg_type, suffix=installed_suffix) if env: - spack.cmd.print_how_many_pkgs( - list(x for x in results if not x.installed), - "concretized", - suffix=concretized_suffix, + cmd.print_how_many_pkgs( + concretized_but_not_installed, "concretized", suffix=concretized_suffix ) diff --git a/lib/spack/spack/cmd/help.py b/lib/spack/spack/cmd/help.py index 9a4023c87a4bb3..1a38d55cb63bac 100644 --- a/lib/spack/spack/cmd/help.py +++ b/lib/spack/spack/cmd/help.py @@ -78,8 +78,8 @@ boxlib @B{dim=2} boxlib built for 2 dimensions libdwarf @g{%intel} ^libelf@g{%gcc} libdwarf, built with intel compiler, linked to libelf built with gcc - mvapich2 @g{%pgi} @B{fabrics=psm,mrail,sock} - mvapich2, built with pgi compiler, with support for multiple fabrics + mvapich2 @g{%gcc} @B{fabrics=psm,mrail,sock} + mvapich2, built with gcc compiler, with support for multiple fabrics """ diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py index 890b32b3002507..25b113992d602d 100644 --- a/lib/spack/spack/cmd/info.py +++ b/lib/spack/spack/cmd/info.py @@ -11,6 +11,7 @@ import llnl.util.tty.color as color from llnl.util.tty.colify import colify +import spack.builder import spack.deptypes as dt import spack.fetch_strategy as fs import spack.install_test @@ -202,11 +203,13 @@ def print_namespace(pkg, args): def print_phases(pkg, args): """output installation phases""" - if hasattr(pkg.builder, "phases") and pkg.builder.phases: + builder = spack.builder.create(pkg) + + if hasattr(builder, "phases") and builder.phases: color.cprint("") color.cprint(section_title("Installation Phases:")) phase_str = "" - for phase in pkg.builder.phases: + for phase in builder.phases: phase_str += " {0}".format(phase) color.cprint(phase_str) diff --git a/lib/spack/spack/cmd/mark.py b/lib/spack/spack/cmd/mark.py index 38701b97475547..f613522d2c5076 100644 --- a/lib/spack/spack/cmd/mark.py +++ b/lib/spack/spack/cmd/mark.py @@ -10,7 +10,8 @@ import spack.cmd import spack.store from spack.cmd.common import arguments -from spack.database import InstallStatuses + +from ..enums import InstallRecordStatus description = "mark packages as explicitly or implicitly installed" section = "admin" @@ -67,8 +68,7 @@ def find_matching_specs(specs, allow_multiple_matches=False): has_errors = False for spec in specs: - install_query = [InstallStatuses.INSTALLED] - matching = spack.store.STORE.db.query_local(spec, installed=install_query) + matching = spack.store.STORE.db.query_local(spec, installed=InstallRecordStatus.INSTALLED) # For each spec provided, make sure it refers to only one package. # Fail and ask user to be unambiguous if it doesn't if not allow_multiple_matches and len(matching) > 1: @@ -80,8 +80,8 @@ def find_matching_specs(specs, allow_multiple_matches=False): has_errors = True # No installed package matches the query - if len(matching) == 0 and spec is not any: - tty.die("{0} does not match any installed packages.".format(spec)) + if len(matching) == 0 and spec is not None: + tty.die(f"{spec} does not match any installed packages.") specs_from_cli.extend(matching) @@ -98,8 +98,9 @@ def do_mark(specs, explicit): specs (list): list of specs to be marked explicit (bool): whether to mark specs as explicitly installed """ - for spec in specs: - spack.store.STORE.db.update_explicit(spec, explicit) + with spack.store.STORE.db.write_transaction(): + for spec in specs: + spack.store.STORE.db.mark(spec, "explicit", explicit) def mark_specs(args, specs): @@ -116,6 +117,6 @@ def mark(parser, args): " Use `spack mark --all` to mark ALL packages.", ) - # [any] here handles the --all case by forcing all specs to be returned - specs = spack.cmd.parse_specs(args.specs) if args.specs else [any] + # [None] here handles the --all case by forcing all specs to be returned + specs = spack.cmd.parse_specs(args.specs) if args.specs else [None] mark_specs(args, specs) diff --git a/lib/spack/spack/cmd/mirror.py b/lib/spack/spack/cmd/mirror.py index af6a45e3990752..ede042949796c0 100644 --- a/lib/spack/spack/cmd/mirror.py +++ b/lib/spack/spack/cmd/mirror.py @@ -231,31 +231,133 @@ def setup_parser(subparser): ) +def _configure_access_pair( + args, id_tok, id_variable_tok, secret_tok, secret_variable_tok, default=None +): + """Configure the access_pair options""" + + # Check if any of the arguments are set to update this access_pair. + # If none are set, then skip computing the new access pair + args_id = getattr(args, id_tok) + args_id_variable = getattr(args, id_variable_tok) + args_secret = getattr(args, secret_tok) + args_secret_variable = getattr(args, secret_variable_tok) + if not any([args_id, args_id_variable, args_secret, args_secret_variable]): + return None + + def _default_value(id_): + if isinstance(default, list): + return default[0] if id_ == "id" else default[1] + elif isinstance(default, dict): + return default.get(id_) + else: + return None + + def _default_variable(id_): + if isinstance(default, dict): + return default.get(id_ + "_variable") + else: + return None + + id_ = None + id_variable = None + secret = None + secret_variable = None + + # Get the value/default value if the argument of the inverse + if not args_id_variable: + id_ = getattr(args, id_tok) or _default_value("id") + if not args_id: + id_variable = getattr(args, id_variable_tok) or _default_variable("id") + if not args_secret_variable: + secret = getattr(args, secret_tok) or _default_value("secret") + if not args_secret: + secret_variable = getattr(args, secret_variable_tok) or _default_variable("secret") + + if (id_ or id_variable) and (secret or secret_variable): + if secret: + if not id_: + raise SpackError("Cannot add mirror with a variable id and text secret") + + return [id_, secret] + else: + return dict( + [ + (("id", id_) if id_ else ("id_variable", id_variable)), + ("secret_variable", secret_variable), + ] + ) + else: + if id_ or id_variable or secret or secret_variable is not None: + id_arg_tok = id_tok.replace("_", "-") + secret_arg_tok = secret_tok.replace("_", "-") + tty.warn( + "Expected both parts of the access pair to be specified. " + f"(i.e. --{id_arg_tok} and --{secret_arg_tok})" + ) + + return None + + def mirror_add(args): """add a mirror to Spack""" if ( args.s3_access_key_id or args.s3_access_key_secret or args.s3_access_token + or args.s3_access_key_id_variable + or args.s3_access_key_secret_variable + or args.s3_access_token_variable or args.s3_profile or args.s3_endpoint_url or args.type or args.oci_username or args.oci_password + or args.oci_username_variable + or args.oci_password_variable or args.autopush or args.signed is not None ): connection = {"url": args.url} - if args.s3_access_key_id and args.s3_access_key_secret: - connection["access_pair"] = [args.s3_access_key_id, args.s3_access_key_secret] + # S3 Connection + if args.s3_access_key_secret: + tty.warn( + "Configuring mirror secrets as plain text with --s3-access-key-secret is " + "deprecated. Use --s3-access-key-secret-variable instead" + ) + if args.oci_password: + tty.warn( + "Configuring mirror secrets as plain text with --oci-password is deprecated. " + "Use --oci-password-variable instead" + ) + access_pair = _configure_access_pair( + args, + "s3_access_key_id", + "s3_access_key_id_variable", + "s3_access_key_secret", + "s3_access_key_secret_variable", + ) + if access_pair: + connection["access_pair"] = access_pair + if args.s3_access_token: connection["access_token"] = args.s3_access_token + elif args.s3_access_token_variable: + connection["access_token_variable"] = args.s3_access_token_variable + if args.s3_profile: connection["profile"] = args.s3_profile + if args.s3_endpoint_url: connection["endpoint_url"] = args.s3_endpoint_url - if args.oci_username and args.oci_password: - connection["access_pair"] = [args.oci_username, args.oci_password] + + # OCI Connection + access_pair = _configure_access_pair( + args, "oci_username", "oci_username_variable", "oci_password", "oci_password_variable" + ) + if access_pair: + connection["access_pair"] = access_pair + if args.type: connection["binary"] = "binary" in args.type connection["source"] = "source" in args.type @@ -285,16 +387,35 @@ def _configure_mirror(args): changes = {} if args.url: changes["url"] = args.url - if args.s3_access_key_id and args.s3_access_key_secret: - changes["access_pair"] = [args.s3_access_key_id, args.s3_access_key_secret] + + default_access_pair = entry._get_value("access_pair", direction or "fetch") + # TODO: Init access_pair args with the fetch/push/base values in the current mirror state + access_pair = _configure_access_pair( + args, + "s3_access_key_id", + "s3_access_key_id_variable", + "s3_access_key_secret", + "s3_access_key_secret_variable", + default=default_access_pair, + ) + if access_pair: + changes["access_pair"] = access_pair if args.s3_access_token: changes["access_token"] = args.s3_access_token if args.s3_profile: changes["profile"] = args.s3_profile if args.s3_endpoint_url: changes["endpoint_url"] = args.s3_endpoint_url - if args.oci_username and args.oci_password: - changes["access_pair"] = [args.oci_username, args.oci_password] + access_pair = _configure_access_pair( + args, + "oci_username", + "oci_username_variable", + "oci_password", + "oci_password_variable", + default=default_access_pair, + ) + if access_pair: + changes["access_pair"] = access_pair if getattr(args, "signed", None) is not None: changes["signed"] = args.signed if getattr(args, "autopush", None) is not None: diff --git a/lib/spack/spack/cmd/modules/__init__.py b/lib/spack/spack/cmd/modules/__init__.py index b11063714f75c7..013f4723dba05f 100644 --- a/lib/spack/spack/cmd/modules/__init__.py +++ b/lib/spack/spack/cmd/modules/__init__.py @@ -19,6 +19,7 @@ import spack.modules import spack.modules.common import spack.repo +from spack.cmd import MultipleSpecsMatch, NoSpecMatches from spack.cmd.common import arguments description = "manipulate module files" @@ -91,18 +92,6 @@ def add_loads_arguments(subparser): arguments.add_common_arguments(subparser, ["recurse_dependencies"]) -class MultipleSpecsMatch(Exception): - """Raised when multiple specs match a constraint, in a context where - this is not allowed. - """ - - -class NoSpecMatches(Exception): - """Raised when no spec matches a constraint, in a context where - this is not allowed. - """ - - def one_spec_or_raise(specs): """Ensures exactly one spec has been selected, or raises the appropriate exception. @@ -378,7 +367,10 @@ def refresh(module_type, specs, args): def modules_cmd(parser, args, module_type, callbacks=callbacks): # Qualifiers to be used when querying the db for specs constraint_qualifiers = { - "refresh": {"installed": True, "known": lambda x: not spack.repo.PATH.exists(x)} + "refresh": { + "installed": True, + "predicate_fn": lambda x: spack.repo.PATH.exists(x.spec.name), + } } query_args = constraint_qualifiers.get(args.subparser_name, {}) diff --git a/lib/spack/spack/cmd/modules/lmod.py b/lib/spack/spack/cmd/modules/lmod.py index 4fd6992a47a97d..3f2f7d2ec04cca 100644 --- a/lib/spack/spack/cmd/modules/lmod.py +++ b/lib/spack/spack/cmd/modules/lmod.py @@ -8,6 +8,7 @@ import spack.cmd.common.arguments import spack.cmd.modules import spack.config +import spack.modules import spack.modules.lmod diff --git a/lib/spack/spack/cmd/modules/tcl.py b/lib/spack/spack/cmd/modules/tcl.py index 4ca8ece704479e..e31d5bcc46ff9a 100644 --- a/lib/spack/spack/cmd/modules/tcl.py +++ b/lib/spack/spack/cmd/modules/tcl.py @@ -7,6 +7,7 @@ import spack.cmd.common.arguments import spack.cmd.modules import spack.config +import spack.modules import spack.modules.tcl diff --git a/lib/spack/spack/cmd/patch.py b/lib/spack/spack/cmd/patch.py index 885ff2f746c352..dbd18f7948a1c4 100644 --- a/lib/spack/spack/cmd/patch.py +++ b/lib/spack/spack/cmd/patch.py @@ -33,8 +33,9 @@ def patch(parser, args): spack.config.set("config:checksum", False, scope="command_line") specs = spack.cmd.parse_specs(args.specs, concretize=False) + specs = spack.cmd.matching_specs_from_env(specs) for spec in specs: - _patch(spack.cmd.matching_spec_from_env(spec).package) + _patch(spec.package) def _patch_env(env: ev.Environment): diff --git a/lib/spack/spack/cmd/solve.py b/lib/spack/spack/cmd/solve.py index f5a9c09c3d395c..8adc06fdfbe24c 100644 --- a/lib/spack/spack/cmd/solve.py +++ b/lib/spack/spack/cmd/solve.py @@ -3,7 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import argparse import re import sys @@ -12,13 +11,12 @@ import spack import spack.cmd -import spack.cmd.common.arguments +import spack.cmd.spec import spack.config import spack.environment import spack.hash_types as ht import spack.solver.asp as asp import spack.spec -from spack.cmd.common import arguments description = "concretize a specs using an ASP solver" section = "developer" @@ -41,42 +39,6 @@ def setup_parser(subparser): " solutions models found by asp program\n" " all all of the above", ) - - # Below are arguments w.r.t. spec display (like spack spec) - arguments.add_common_arguments(subparser, ["long", "very_long", "namespaces"]) - - install_status_group = subparser.add_mutually_exclusive_group() - arguments.add_common_arguments(install_status_group, ["install_status", "no_install_status"]) - - subparser.add_argument( - "-y", - "--yaml", - action="store_const", - dest="format", - default=None, - const="yaml", - help="print concrete spec as yaml", - ) - subparser.add_argument( - "-j", - "--json", - action="store_const", - dest="format", - default=None, - const="json", - help="print concrete spec as json", - ) - subparser.add_argument( - "-c", - "--cover", - action="store", - default="nodes", - choices=["nodes", "edges", "paths"], - help="how extensively to traverse the DAG (default: nodes)", - ) - subparser.add_argument( - "-t", "--types", action="store_true", default=False, help="show dependency types" - ) subparser.add_argument( "--timers", action="store_true", @@ -86,9 +48,8 @@ def setup_parser(subparser): subparser.add_argument( "--stats", action="store_true", default=False, help="print out statistics from clingo" ) - subparser.add_argument("specs", nargs=argparse.REMAINDER, help="specs of packages") - spack.cmd.common.arguments.add_concretizer_args(subparser) + spack.cmd.spec.setup_parser(subparser) def _process_result(result, show, required_format, kwargs): @@ -164,11 +125,12 @@ def solve(parser, args): # If we have an active environment, pick the specs from there env = spack.environment.active_environment() - if env and args.specs: - msg = "cannot give explicit specs when an environment is active" - raise RuntimeError(msg) - - specs = list(env.user_specs) if env else spack.cmd.parse_specs(args.specs) + if args.specs: + specs = spack.cmd.parse_specs(args.specs) + elif env: + specs = list(env.user_specs) + else: + tty.die("spack solve requires at least one spec or an active environment") solver = asp.Solver() output = sys.stdout if "asp" in show else None diff --git a/lib/spack/spack/cmd/spec.py b/lib/spack/spack/cmd/spec.py index e5cc951d695d40..d1278a71753970 100644 --- a/lib/spack/spack/cmd/spec.py +++ b/lib/spack/spack/cmd/spec.py @@ -82,64 +82,44 @@ def spec(parser, args): if args.namespaces: fmt = "{namespace}." + fmt - tree_kwargs = { - "cover": args.cover, - "format": fmt, - "hashlen": None if args.very_long else 7, - "show_types": args.types, - "status_fn": install_status_fn if args.install_status else None, - } - # use a read transaction if we are getting install status for every # spec in the DAG. This avoids repeatedly querying the DB. tree_context = lang.nullcontext if args.install_status: tree_context = spack.store.STORE.db.read_transaction - # Use command line specified specs, otherwise try to use environment specs. + env = ev.active_environment() + if args.specs: - input_specs = spack.cmd.parse_specs(args.specs) - concretized_specs = spack.cmd.parse_specs(args.specs, concretize=True) - specs = list(zip(input_specs, concretized_specs)) + concrete_specs = spack.cmd.parse_specs(args.specs, concretize=True) + elif env: + env.concretize() + concrete_specs = env.concrete_roots() else: - env = ev.active_environment() - if env: - env.concretize() - specs = env.concretized_specs() - - # environments are printed together in a combined tree() invocation, - # except when using --yaml or --json, which we print spec by spec below. - if not args.format: - tree_kwargs["key"] = spack.traverse.by_dag_hash - tree_kwargs["hashes"] = args.long or args.very_long - print(spack.spec.tree([concrete for _, concrete in specs], **tree_kwargs)) - return - else: - tty.die("spack spec requires at least one spec or an active environment") - - for input, output in specs: - # With --yaml or --json, just print the raw specs to output - if args.format: + tty.die("spack spec requires at least one spec or an active environment") + + # With --yaml, --json, or --format, just print the raw specs to output + if args.format: + for spec in concrete_specs: if args.format == "yaml": # use write because to_yaml already has a newline. - sys.stdout.write(output.to_yaml(hash=ht.dag_hash)) + sys.stdout.write(spec.to_yaml(hash=ht.dag_hash)) elif args.format == "json": - print(output.to_json(hash=ht.dag_hash)) + print(spec.to_json(hash=ht.dag_hash)) else: - print(output.format(args.format)) - continue - - with tree_context(): - # Only show the headers for input specs that are not concrete to avoid - # repeated output. This happens because parse_specs outputs concrete - # specs for `/hash` inputs. - if not input.concrete: - tree_kwargs["hashes"] = False # Always False for input spec - print("Input spec") - print("--------------------------------") - print(input.tree(**tree_kwargs)) - print("Concretized") - print("--------------------------------") - - tree_kwargs["hashes"] = args.long or args.very_long - print(output.tree(**tree_kwargs)) + print(spec.format(args.format)) + return + + with tree_context(): + print( + spack.spec.tree( + concrete_specs, + cover=args.cover, + format=fmt, + hashlen=None if args.very_long else 7, + show_types=args.types, + status_fn=install_status_fn if args.install_status else None, + hashes=args.long or args.very_long, + key=spack.traverse.by_dag_hash, + ) + ) diff --git a/lib/spack/spack/cmd/stage.py b/lib/spack/spack/cmd/stage.py index af5fa412ea7e1a..20da92926f8104 100644 --- a/lib/spack/spack/cmd/stage.py +++ b/lib/spack/spack/cmd/stage.py @@ -47,8 +47,8 @@ def stage(parser, args): if len(specs) > 1 and custom_path: tty.die("`--path` requires a single spec, but multiple were provided") + specs = spack.cmd.matching_specs_from_env(specs) for spec in specs: - spec = spack.cmd.matching_spec_from_env(spec) pkg = spec.package if custom_path: diff --git a/lib/spack/spack/cmd/style.py b/lib/spack/spack/cmd/style.py index d16ff342770d16..9d164875ae2400 100644 --- a/lib/spack/spack/cmd/style.py +++ b/lib/spack/spack/cmd/style.py @@ -3,18 +3,21 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) import argparse +import ast import os import re import sys from itertools import zip_longest +from typing import Dict, List, Optional import llnl.util.tty as tty import llnl.util.tty.color as color from llnl.util.filesystem import working_dir import spack.paths +import spack.repo import spack.util.git -from spack.util.executable import which +from spack.util.executable import Executable, which description = "runs source code style checks on spack" section = "developer" @@ -36,10 +39,7 @@ def grouper(iterable, n, fillvalue=None): #: double-check the results of other tools (if, e.g., --fix was provided) #: The list maps an executable name to a method to ensure the tool is #: bootstrapped or present in the environment. -tool_names = ["isort", "black", "flake8", "mypy"] - -#: tools we run in spack style -tools = {} +tool_names = ["import", "isort", "black", "flake8", "mypy"] #: warnings to ignore in mypy mypy_ignores = [ @@ -61,14 +61,28 @@ def is_package(f): #: decorator for adding tools to the list class tool: - def __init__(self, name, required=False): + def __init__(self, name: str, required: bool = False, external: bool = True) -> None: self.name = name + self.external = external self.required = required def __call__(self, fun): - tools[self.name] = (fun, self.required) + self.fun = fun + tools[self.name] = self return fun + @property + def installed(self) -> bool: + return bool(which(self.name)) if self.external else True + + @property + def executable(self) -> Optional[Executable]: + return which(self.name) if self.external else None + + +#: tools we run in spack style +tools: Dict[str, tool] = {} + def changed_files(base="develop", untracked=True, all_files=False, root=None): """Get list of changed files in the Spack repository. @@ -176,22 +190,22 @@ def setup_parser(subparser): "-t", "--tool", action="append", - help="specify which tools to run (default: %s)" % ",".join(tool_names), + help="specify which tools to run (default: %s)" % ", ".join(tool_names), ) tool_group.add_argument( "-s", "--skip", metavar="TOOL", action="append", - help="specify tools to skip (choose from %s)" % ",".join(tool_names), + help="specify tools to skip (choose from %s)" % ", ".join(tool_names), ) subparser.add_argument("files", nargs=argparse.REMAINDER, help="specific files to check") -def cwd_relative(path, args): +def cwd_relative(path, root, initial_working_dir): """Translate prefix-relative path to current working directory-relative.""" - return os.path.relpath(os.path.join(args.root, path), args.initial_working_dir) + return os.path.relpath(os.path.join(root, path), initial_working_dir) def rewrite_and_print_output( @@ -201,7 +215,10 @@ def rewrite_and_print_output( # print results relative to current working directory def translate(match): - return replacement.format(cwd_relative(match.group(1), args), *list(match.groups()[1:])) + return replacement.format( + cwd_relative(match.group(1), args.root, args.initial_working_dir), + *list(match.groups()[1:]), + ) for line in output.split("\n"): if not line: @@ -220,7 +237,7 @@ def print_style_header(file_list, args, tools_to_run): # translate modified paths to cwd_relative if needed paths = [filename.strip() for filename in file_list] if not args.root_relative: - paths = [cwd_relative(filename, args) for filename in paths] + paths = [cwd_relative(filename, args.root, args.initial_working_dir) for filename in paths] tty.msg("Modified files", *paths) sys.stdout.flush() @@ -352,17 +369,137 @@ def run_black(black_cmd, file_list, args): return returncode +def _module_part(root: str, expr: str): + parts = expr.split(".") + # spack.pkg is for repositories, don't try to resolve it here. + if ".".join(parts[:2]) == spack.repo.ROOT_PYTHON_NAMESPACE: + return None + while parts: + f1 = os.path.join(root, "lib", "spack", *parts) + ".py" + f2 = os.path.join(root, "lib", "spack", *parts, "__init__.py") + + if ( + os.path.exists(f1) + # ensure case sensitive match + and f"{parts[-1]}.py" in os.listdir(os.path.dirname(f1)) + or os.path.exists(f2) + ): + return ".".join(parts) + parts.pop() + return None + + +def _run_import_check( + file_list: List[str], + *, + fix: bool, + root_relative: bool, + root=spack.paths.prefix, + working_dir=spack.paths.prefix, + out=sys.stdout, +): + if sys.version_info < (3, 9): + print("import check requires Python 3.9 or later") + return 0 + + is_use = re.compile(r"(? List[str]: + return [t for t in tools_to_run if not tools[t].installed] def _bootstrap_dev_dependencies(): @@ -417,9 +554,9 @@ def prefix_relative(path): print_style_header(file_list, args, tools_to_run) for tool_name in tools_to_run: - run_function, required = tools[tool_name] + tool = tools[tool_name] print_tool_header(tool_name) - return_code |= run_function(which(tool_name), file_list, args) + return_code |= tool.fun(tool.executable, file_list, args) if return_code == 0: tty.msg(color.colorize("@*{spack style checks were clean}")) diff --git a/lib/spack/spack/cmd/test.py b/lib/spack/spack/cmd/test.py index d3d45dbe463cc7..14578043829a4b 100644 --- a/lib/spack/spack/cmd/test.py +++ b/lib/spack/spack/cmd/test.py @@ -165,7 +165,7 @@ def test_run(args): if args.fail_fast: spack.config.set("config:fail_fast", True, scope="command_line") - explicit = args.explicit or any + explicit = args.explicit or None explicit_str = "explicitly " if args.explicit else "" # Get specs to test diff --git a/lib/spack/spack/cmd/tutorial.py b/lib/spack/spack/cmd/tutorial.py index 478ca52b7f565b..678a9262369c3f 100644 --- a/lib/spack/spack/cmd/tutorial.py +++ b/lib/spack/spack/cmd/tutorial.py @@ -24,7 +24,7 @@ # tutorial configuration parameters -tutorial_branch = "releases/v0.22" +tutorial_branch = "releases/v0.23" tutorial_mirror = "file:///mirror" tutorial_key = os.path.join(spack.paths.share_path, "keys", "tutorial.pub") diff --git a/lib/spack/spack/cmd/uninstall.py b/lib/spack/spack/cmd/uninstall.py index d51a8f8e3bc06e..fb13df369c0603 100644 --- a/lib/spack/spack/cmd/uninstall.py +++ b/lib/spack/spack/cmd/uninstall.py @@ -17,7 +17,8 @@ import spack.store import spack.traverse as traverse from spack.cmd.common import arguments -from spack.database import InstallStatuses + +from ..enums import InstallRecordStatus description = "remove installed packages" section = "build" @@ -90,6 +91,7 @@ def find_matching_specs( env: optional active environment specs: list of specs to be matched against installed packages allow_multiple_matches: if True multiple matches are admitted + origin: origin of the spec Return: list: list of specs @@ -98,12 +100,14 @@ def find_matching_specs( hashes = env.all_hashes() if env else None # List of specs that match expressions given via command line - specs_from_cli = [] + specs_from_cli: List[spack.spec.Spec] = [] has_errors = False for spec in specs: - install_query = [InstallStatuses.INSTALLED, InstallStatuses.DEPRECATED] matching = spack.store.STORE.db.query_local( - spec, hashes=hashes, installed=install_query, origin=origin + spec, + hashes=hashes, + installed=(InstallRecordStatus.INSTALLED | InstallRecordStatus.DEPRECATED), + origin=origin, ) # For each spec provided, make sure it refers to only one package. # Fail and ask user to be unambiguous if it doesn't @@ -116,7 +120,7 @@ def find_matching_specs( has_errors = True # No installed package matches the query - if len(matching) == 0 and spec is not any: + if len(matching) == 0 and spec is not None: if env: pkg_type = "packages in environment '%s'" % env.name else: @@ -213,7 +217,7 @@ def get_uninstall_list(args, specs: List[spack.spec.Spec], env: Optional[ev.Envi # Gets the list of installed specs that match the ones given via cli # args.all takes care of the case where '-a' is given in the cli - matching_specs = find_matching_specs(env, specs, args.all) + matching_specs = find_matching_specs(env, specs, args.all, origin=args.origin) dependent_specs = installed_dependents(matching_specs) all_uninstall_specs = matching_specs + dependent_specs if args.dependents else matching_specs other_dependent_envs = dependent_environments(all_uninstall_specs, current_env=env) @@ -301,6 +305,6 @@ def uninstall(parser, args): " Use `spack uninstall --all` to uninstall ALL packages.", ) - # [any] here handles the --all case by forcing all specs to be returned - specs = spack.cmd.parse_specs(args.specs) if args.specs else [any] + # [None] here handles the --all case by forcing all specs to be returned + specs = spack.cmd.parse_specs(args.specs) if args.specs else [None] uninstall_specs(args, specs) diff --git a/lib/spack/spack/compiler.py b/lib/spack/spack/compiler.py index 8ed125ae24fdfe..e16e4a2725c194 100644 --- a/lib/spack/spack/compiler.py +++ b/lib/spack/spack/compiler.py @@ -4,20 +4,23 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import contextlib +import hashlib import itertools +import json import os import platform import re import shutil import sys import tempfile -from typing import List, Optional, Sequence +from typing import Dict, List, Optional, Sequence import llnl.path import llnl.util.lang import llnl.util.tty as tty from llnl.util.filesystem import path_contains_subdirectory, paths_containing_libs +import spack.caches import spack.error import spack.schema.environment import spack.spec @@ -26,6 +29,7 @@ import spack.util.module_cmd import spack.version from spack.util.environment import filter_system_paths +from spack.util.file_cache import FileCache __all__ = ["Compiler"] @@ -34,7 +38,7 @@ @llnl.util.lang.memoized -def _get_compiler_version_output(compiler_path, version_arg, ignore_errors=()): +def _get_compiler_version_output(compiler_path, version_arg, ignore_errors=()) -> str: """Invokes the compiler at a given path passing a single version argument and returns the output. @@ -57,7 +61,7 @@ def _get_compiler_version_output(compiler_path, version_arg, ignore_errors=()): return output -def get_compiler_version_output(compiler_path, *args, **kwargs): +def get_compiler_version_output(compiler_path, *args, **kwargs) -> str: """Wrapper for _get_compiler_version_output().""" # This ensures that we memoize compiler output by *absolute path*, # not just executable name. If we don't do this, and the path changes @@ -275,7 +279,7 @@ def __init__( operating_system, target, paths, - modules=None, + modules: Optional[List[str]] = None, alias=None, environment=None, extra_rpaths=None, @@ -290,6 +294,7 @@ def __init__( self.environment = environment or {} self.extra_rpaths = extra_rpaths or [] self.enable_implicit_rpaths = enable_implicit_rpaths + self.cache = COMPILER_CACHE self.cc = paths[0] self.cxx = paths[1] @@ -390,15 +395,11 @@ def real_version(self): E.g. C++11 flag checks. """ - if not self._real_version: - try: - real_version = spack.version.Version(self.get_real_version()) - if real_version == spack.version.Version("unknown"): - return self.version - self._real_version = real_version - except spack.util.executable.ProcessError: - self._real_version = self.version - return self._real_version + real_version_str = self.cache.get(self).real_version + if not real_version_str or real_version_str == "unknown": + return self.version + + return spack.version.StandardVersion.from_string(real_version_str) def implicit_rpaths(self) -> List[str]: if self.enable_implicit_rpaths is False: @@ -427,6 +428,11 @@ def default_dynamic_linker(self) -> Optional[str]: @property def default_libc(self) -> Optional["spack.spec.Spec"]: """Determine libc targeted by the compiler from link line""" + # technically this should be testing the target platform of the compiler, but we don't have + # that, so stick to host platform for now. + if sys.platform in ("darwin", "win32"): + return None + dynamic_linker = self.default_dynamic_linker if not dynamic_linker: @@ -445,19 +451,23 @@ def required_libs(self): @property def compiler_verbose_output(self) -> Optional[str]: """Verbose output from compiling a dummy C source file. Output is cached.""" - if not hasattr(self, "_compile_c_source_output"): - self._compile_c_source_output = self._compile_dummy_c_source() - return self._compile_c_source_output + return self.cache.get(self).c_compiler_output def _compile_dummy_c_source(self) -> Optional[str]: - cc = self.cc if self.cc else self.cxx + if self.cc: + cc = self.cc + ext = "c" + else: + cc = self.cxx + ext = "cc" + if not cc or not self.verbose_flag: return None try: tmpdir = tempfile.mkdtemp(prefix="spack-implicit-link-info") fout = os.path.join(tmpdir, "output") - fin = os.path.join(tmpdir, "main.c") + fin = os.path.join(tmpdir, f"main.{ext}") with open(fin, "w") as csource: csource.write( @@ -559,7 +569,7 @@ def fc_pic_flag(self): # Note: This is not a class method. The class methods are used to detect # compilers on PATH based systems, and do not set up the run environment of # the compiler. This method can be called on `module` based systems as well - def get_real_version(self): + def get_real_version(self) -> str: """Query the compiler for its version. This is the "real" compiler version, regardless of what is in the @@ -569,14 +579,17 @@ def get_real_version(self): modifications) to enable the compiler to run properly on any platform. """ cc = spack.util.executable.Executable(self.cc) - with self.compiler_environment(): - output = cc( - self.version_argument, - output=str, - error=str, - ignore_errors=tuple(self.ignore_version_errors), - ) - return self.extract_version_from_output(output) + try: + with self.compiler_environment(): + output = cc( + self.version_argument, + output=str, + error=str, + ignore_errors=tuple(self.ignore_version_errors), + ) + return self.extract_version_from_output(output) + except spack.util.executable.ProcessError: + return "unknown" @property def prefix(self): @@ -603,7 +616,7 @@ def default_version(cls, cc): @classmethod @llnl.util.lang.memoized - def extract_version_from_output(cls, output): + def extract_version_from_output(cls, output: str) -> str: """Extracts the version from compiler's output.""" match = re.search(cls.version_regex, output) return match.group(1) if match else "unknown" @@ -732,3 +745,106 @@ def __init__(self, compiler, feature, flag_name, ver_string=None): ) + " implement the {0} property and submit a pull request or issue.".format(flag_name), ) + + +class CompilerCacheEntry: + """Deserialized cache entry for a compiler""" + + __slots__ = ["c_compiler_output", "real_version"] + + def __init__(self, c_compiler_output: Optional[str], real_version: str): + self.c_compiler_output = c_compiler_output + self.real_version = real_version + + @classmethod + def from_dict(cls, data: Dict[str, Optional[str]]): + if not isinstance(data, dict): + raise ValueError(f"Invalid {cls.__name__} data") + c_compiler_output = data.get("c_compiler_output") + real_version = data.get("real_version") + if not isinstance(real_version, str) or not isinstance( + c_compiler_output, (str, type(None)) + ): + raise ValueError(f"Invalid {cls.__name__} data") + return cls(c_compiler_output, real_version) + + +class CompilerCache: + """Base class for compiler output cache. Default implementation does not cache anything.""" + + def value(self, compiler: Compiler) -> Dict[str, Optional[str]]: + return { + "c_compiler_output": compiler._compile_dummy_c_source(), + "real_version": compiler.get_real_version(), + } + + def get(self, compiler: Compiler) -> CompilerCacheEntry: + return CompilerCacheEntry.from_dict(self.value(compiler)) + + +class FileCompilerCache(CompilerCache): + """Cache for compiler output, which is used to determine implicit link paths, the default libc + version, and the compiler version.""" + + name = os.path.join("compilers", "compilers.json") + + def __init__(self, cache: "FileCache") -> None: + self.cache = cache + self.cache.init_entry(self.name) + self._data: Dict[str, Dict[str, Optional[str]]] = {} + + def _get_entry(self, key: str) -> Optional[CompilerCacheEntry]: + try: + return CompilerCacheEntry.from_dict(self._data[key]) + except ValueError: + del self._data[key] + except KeyError: + pass + return None + + def get(self, compiler: Compiler) -> CompilerCacheEntry: + # Cache hit + try: + with self.cache.read_transaction(self.name) as f: + assert f is not None + self._data = json.loads(f.read()) + assert isinstance(self._data, dict) + except (json.JSONDecodeError, AssertionError): + self._data = {} + + key = self._key(compiler) + value = self._get_entry(key) + if value is not None: + return value + + # Cache miss + with self.cache.write_transaction(self.name) as (old, new): + try: + assert old is not None + self._data = json.loads(old.read()) + assert isinstance(self._data, dict) + except (json.JSONDecodeError, AssertionError): + self._data = {} + + # Use cache entry that may have been created by another process in the meantime. + entry = self._get_entry(key) + + # Finally compute the cache entry + if entry is None: + self._data[key] = self.value(compiler) + entry = CompilerCacheEntry.from_dict(self._data[key]) + + new.write(json.dumps(self._data, separators=(",", ":"))) + + return entry + + def _key(self, compiler: Compiler) -> str: + as_bytes = json.dumps(compiler.to_dict(), separators=(",", ":")).encode("utf-8") + return hashlib.sha256(as_bytes).hexdigest() + + +def _make_compiler_cache(): + return FileCompilerCache(spack.caches.MISC_CACHE) + + +COMPILER_CACHE: CompilerCache = llnl.util.lang.Singleton(_make_compiler_cache) # type: ignore diff --git a/lib/spack/spack/compilers/aocc.py b/lib/spack/spack/compilers/aocc.py index 7ac861c745733d..920e7d049263c2 100644 --- a/lib/spack/spack/compilers/aocc.py +++ b/lib/spack/spack/compilers/aocc.py @@ -116,5 +116,5 @@ def fflags(self): def _handle_default_flag_addtions(self): # This is a known issue for AOCC 3.0 see: # https://developer.amd.com/wp-content/resources/AOCC-3.0-Install-Guide.pdf - if self.real_version.satisfies(ver("3.0.0")): + if self.version.satisfies(ver("3.0.0")): return "-Wno-unused-command-line-argument " "-mllvm -eliminate-similar-expr=false" diff --git a/lib/spack/spack/compilers/clang.py b/lib/spack/spack/compilers/clang.py index 98e00aa270f8a8..f4a2708164dc32 100644 --- a/lib/spack/spack/compilers/clang.py +++ b/lib/spack/spack/compilers/clang.py @@ -16,7 +16,6 @@ ("gfortran", os.path.join("clang", "gfortran")), ("xlf_r", os.path.join("xl_r", "xlf_r")), ("xlf", os.path.join("xl", "xlf")), - ("pgfortran", os.path.join("pgi", "pgfortran")), ("ifort", os.path.join("intel", "ifort")), ] @@ -25,7 +24,6 @@ ("gfortran", os.path.join("clang", "gfortran")), ("xlf90_r", os.path.join("xl_r", "xlf90_r")), ("xlf90", os.path.join("xl", "xlf90")), - ("pgfortran", os.path.join("pgi", "pgfortran")), ("ifort", os.path.join("intel", "ifort")), ] diff --git a/lib/spack/spack/compilers/intel.py b/lib/spack/spack/compilers/intel.py index 4990da3cb06aa5..3002ba7f6e72c2 100644 --- a/lib/spack/spack/compilers/intel.py +++ b/lib/spack/spack/compilers/intel.py @@ -124,9 +124,8 @@ def setup_custom_environment(self, pkg, env): # Edge cases for Intel's oneAPI compilers when using the legacy classic compilers: # Always pass flags to disable deprecation warnings, since these warnings can # confuse tools that parse the output of compiler commands (e.g. version checks). - if self.cc and self.cc.endswith("icc") and self.real_version >= Version("2021"): + if self.real_version >= Version("2021") and self.real_version <= Version("2023"): env.append_flags("SPACK_ALWAYS_CFLAGS", "-diag-disable=10441") - if self.cxx and self.cxx.endswith("icpc") and self.real_version >= Version("2021"): env.append_flags("SPACK_ALWAYS_CXXFLAGS", "-diag-disable=10441") - if self.fc and self.fc.endswith("ifort") and self.real_version >= Version("2021"): + if self.real_version >= Version("2021") and self.real_version <= Version("2024"): env.append_flags("SPACK_ALWAYS_FFLAGS", "-diag-disable=10448") diff --git a/lib/spack/spack/compilers/oneapi.py b/lib/spack/spack/compilers/oneapi.py index ee279433c321a4..c06a55f39621b7 100644 --- a/lib/spack/spack/compilers/oneapi.py +++ b/lib/spack/spack/compilers/oneapi.py @@ -7,7 +7,9 @@ from os.path import dirname, join from llnl.util import tty +from llnl.util.filesystem import ancestor +import spack.util.executable from spack.compiler import Compiler from spack.version import Version @@ -116,6 +118,24 @@ def fc_pic_flag(self): def stdcxx_libs(self): return ("-cxxlib",) + @property + def prefix(self): + # OneAPI reports its install prefix when running ``--version`` + # on the line ``InstalledDir: /bin/compiler``. + cc = spack.util.executable.Executable(self.cc) + with self.compiler_environment(): + oneapi_output = cc("--version", output=str, error=str) + + for line in oneapi_output.splitlines(): + if line.startswith("InstalledDir:"): + oneapi_prefix = line.split(":")[1].strip() + # Go from /bin/compiler to + return ancestor(oneapi_prefix, 2) + + raise RuntimeError( + "could not find install prefix of OneAPI from output:\n\t{}".format(oneapi_output) + ) + def setup_custom_environment(self, pkg, env): # workaround bug in icpx driver where it requires sycl-post-link is on the PATH # It is located in the same directory as the driver. Error message: @@ -131,11 +151,14 @@ def setup_custom_environment(self, pkg, env): # Edge cases for Intel's oneAPI compilers when using the legacy classic compilers: # Always pass flags to disable deprecation warnings, since these warnings can # confuse tools that parse the output of compiler commands (e.g. version checks). - if self.cc and self.cc.endswith("icc") and self.real_version >= Version("2021"): + # This is really only needed for Fortran, since oneapi@ should be using either + # icx+icpx+ifx or icx+icpx+ifort. But to be on the safe side (some users may + # want to try to swap icpx against icpc, for example), and since the Intel LLVM + # compilers accept these diag-disable flags, we apply them for all compilers. + if self.real_version >= Version("2021") and self.real_version <= Version("2023"): env.append_flags("SPACK_ALWAYS_CFLAGS", "-diag-disable=10441") - if self.cxx and self.cxx.endswith("icpc") and self.real_version >= Version("2021"): env.append_flags("SPACK_ALWAYS_CXXFLAGS", "-diag-disable=10441") - if self.fc and self.fc.endswith("ifort") and self.real_version >= Version("2021"): + if self.real_version >= Version("2021") and self.real_version <= Version("2024"): env.append_flags("SPACK_ALWAYS_FFLAGS", "-diag-disable=10448") # 2024 release bumped the libsycl version because of an ABI diff --git a/lib/spack/spack/compilers/pgi.py b/lib/spack/spack/compilers/pgi.py deleted file mode 100644 index bb7f290be3bb7c..00000000000000 --- a/lib/spack/spack/compilers/pgi.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2013-2024 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) - -import os - -from spack.compiler import Compiler, UnsupportedCompilerFlag -from spack.version import Version - - -class Pgi(Compiler): - # Named wrapper links within build_env_path - link_paths = { - "cc": os.path.join("pgi", "pgcc"), - "cxx": os.path.join("pgi", "pgc++"), - "f77": os.path.join("pgi", "pgfortran"), - "fc": os.path.join("pgi", "pgfortran"), - } - - version_argument = "-V" - ignore_version_errors = [2] # `pgcc -V` on PowerPC annoyingly returns 2 - version_regex = r"pg[^ ]* ([0-9.]+)-[0-9]+ (LLVM )?[^ ]+ target on " - - @property - def verbose_flag(self): - return "-v" - - @property - def debug_flags(self): - return ["-g", "-gopt"] - - @property - def opt_flags(self): - return ["-O", "-O0", "-O1", "-O2", "-O3", "-O4"] - - @property - def openmp_flag(self): - return "-mp" - - @property - def cxx11_flag(self): - return "-std=c++11" - - @property - def cc_pic_flag(self): - return "-fpic" - - @property - def cxx_pic_flag(self): - return "-fpic" - - @property - def f77_pic_flag(self): - return "-fpic" - - @property - def fc_pic_flag(self): - return "-fpic" - - required_libs = ["libpgc", "libpgf90"] - - @property - def c99_flag(self): - if self.real_version >= Version("12.10"): - return "-c99" - raise UnsupportedCompilerFlag(self, "the C99 standard", "c99_flag", "< 12.10") - - @property - def c11_flag(self): - if self.real_version >= Version("15.3"): - return "-c11" - raise UnsupportedCompilerFlag(self, "the C11 standard", "c11_flag", "< 15.3") - - @property - def stdcxx_libs(self): - return ("-pgc++libs",) diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py index 387c7f2de27efd..65ad755e7eade0 100644 --- a/lib/spack/spack/concretize.py +++ b/lib/spack/spack/concretize.py @@ -2,14 +2,20 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -""" -(DEPRECATED) Used to contain the code for the original concretizer -""" +"""High-level functions to concretize list of specs""" +import sys +import time from contextlib import contextmanager -from itertools import chain +from typing import Iterable, Optional, Sequence, Tuple, Union +import llnl.util.tty as tty + +import spack.compilers import spack.config import spack.error +import spack.repo +import spack.util.parallel +from spack.spec import ArchSpec, CompilerSpec, Spec CHECK_COMPILER_EXISTENCE = True @@ -30,67 +36,172 @@ def enable_compiler_existence_check(): CHECK_COMPILER_EXISTENCE = saved -def find_spec(spec, condition, default=None): - """Searches the dag from spec in an intelligent order and looks - for a spec that matches a condition""" - # First search parents, then search children - deptype = ("build", "link") - dagiter = chain( - spec.traverse(direction="parents", deptype=deptype, root=False), - spec.traverse(direction="children", deptype=deptype, root=False), - ) - visited = set() - for relative in dagiter: - if condition(relative): - return relative - visited.add(id(relative)) - - # Then search all other relatives in the DAG *except* spec - for relative in spec.root.traverse(deptype="all"): - if relative is spec: - continue - if id(relative) in visited: - continue - if condition(relative): - return relative - - # Finally search spec itself. - if condition(spec): - return spec - - return default # Nothing matched the condition; return default. - - -def concretize_specs_together(*abstract_specs, **kwargs): +SpecPair = Tuple[Spec, Spec] +SpecLike = Union[Spec, str] +TestsType = Union[bool, Iterable[str]] + + +def concretize_specs_together( + abstract_specs: Sequence[SpecLike], tests: TestsType = False +) -> Sequence[Spec]: """Given a number of specs as input, tries to concretize them together. Args: - tests (bool or list or set): False to run no tests, True to test - all packages, or a list of package names to run tests for some - *abstract_specs: abstract specs to be concretized, given either - as Specs or strings - - Returns: - List of concretized specs + abstract_specs: abstract specs to be concretized + tests: list of package names for which to consider tests dependencies. If True, all nodes + will have test dependencies. If False, test dependencies will be disregarded. """ import spack.solver.asp allow_deprecated = spack.config.get("config:deprecated", False) solver = spack.solver.asp.Solver() - result = solver.solve( - abstract_specs, tests=kwargs.get("tests", False), allow_deprecated=allow_deprecated - ) + result = solver.solve(abstract_specs, tests=tests, allow_deprecated=allow_deprecated) return [s.copy() for s in result.specs] +def concretize_together( + spec_list: Sequence[SpecPair], tests: TestsType = False +) -> Sequence[SpecPair]: + """Given a number of specs as input, tries to concretize them together. + + Args: + spec_list: list of tuples to concretize. First entry is abstract spec, second entry is + already concrete spec or None if not yet concretized + tests: list of package names for which to consider tests dependencies. If True, all nodes + will have test dependencies. If False, test dependencies will be disregarded. + """ + to_concretize = [concrete if concrete else abstract for abstract, concrete in spec_list] + abstract_specs = [abstract for abstract, _ in spec_list] + concrete_specs = concretize_specs_together(to_concretize, tests=tests) + return list(zip(abstract_specs, concrete_specs)) + + +def concretize_together_when_possible( + spec_list: Sequence[SpecPair], tests: TestsType = False +) -> Sequence[SpecPair]: + """Given a number of specs as input, tries to concretize them together to the extent possible. + + See documentation for ``unify: when_possible`` concretization for the precise definition of + "to the extent possible". + + Args: + spec_list: list of tuples to concretize. First entry is abstract spec, second entry is + already concrete spec or None if not yet concretized + tests: list of package names for which to consider tests dependencies. If True, all nodes + will have test dependencies. If False, test dependencies will be disregarded. + """ + import spack.solver.asp + + to_concretize = [concrete if concrete else abstract for abstract, concrete in spec_list] + old_concrete_to_abstract = { + concrete: abstract for (abstract, concrete) in spec_list if concrete + } + + result_by_user_spec = {} + solver = spack.solver.asp.Solver() + allow_deprecated = spack.config.get("config:deprecated", False) + for result in solver.solve_in_rounds( + to_concretize, tests=tests, allow_deprecated=allow_deprecated + ): + result_by_user_spec.update(result.specs_by_input) + + # If the "abstract" spec is a concrete spec from the previous concretization + # translate it back to an abstract spec. Otherwise, keep the abstract spec + return [ + (old_concrete_to_abstract.get(abstract, abstract), concrete) + for abstract, concrete in sorted(result_by_user_spec.items()) + ] + + +def concretize_separately( + spec_list: Sequence[SpecPair], tests: TestsType = False +) -> Sequence[SpecPair]: + """Concretizes the input specs separately from each other. + + Args: + spec_list: list of tuples to concretize. First entry is abstract spec, second entry is + already concrete spec or None if not yet concretized + tests: list of package names for which to consider tests dependencies. If True, all nodes + will have test dependencies. If False, test dependencies will be disregarded. + """ + import spack.bootstrap + + to_concretize = [abstract for abstract, concrete in spec_list if not concrete] + args = [ + (i, str(abstract), tests) + for i, abstract in enumerate(to_concretize) + if not abstract.concrete + ] + ret = [(i, abstract) for i, abstract in enumerate(to_concretize) if abstract.concrete] + # Ensure we don't try to bootstrap clingo in parallel + with spack.bootstrap.ensure_bootstrap_configuration(): + spack.bootstrap.ensure_clingo_importable_or_raise() + + # Ensure all the indexes have been built or updated, since + # otherwise the processes in the pool may timeout on waiting + # for a write lock. We do this indirectly by retrieving the + # provider index, which should in turn trigger the update of + # all the indexes if there's any need for that. + _ = spack.repo.PATH.provider_index + + # Ensure we have compilers in compilers.yaml to avoid that + # processes try to write the config file in parallel + _ = spack.compilers.all_compilers_config(spack.config.CONFIG) + + # Early return if there is nothing to do + if len(args) == 0: + # Still have to combine the things that were passed in as abstract with the things + # that were passed in as pairs + return [(abstract, concrete) for abstract, (_, concrete) in zip(to_concretize, ret)] + [ + (abstract, concrete) for abstract, concrete in spec_list if concrete + ] + + # Solve the environment in parallel on Linux + # TODO: support parallel concretization on macOS and Windows + num_procs = min(len(args), spack.config.determine_number_of_jobs(parallel=True)) + + msg = "Starting concretization" + if sys.platform not in ("darwin", "win32") and num_procs > 1: + msg += f" pool with {num_procs} processes" + tty.msg(msg) + + for j, (i, concrete, duration) in enumerate( + spack.util.parallel.imap_unordered( + _concretize_task, args, processes=num_procs, debug=tty.is_debug(), maxtaskperchild=1 + ) + ): + ret.append((i, concrete)) + percentage = (j + 1) / len(args) * 100 + tty.verbose( + f"{duration:6.1f}s [{percentage:3.0f}%] {concrete.cformat('{hash:7}')} " + f"{to_concretize[i].colored_str}" + ) + sys.stdout.flush() + + # Add specs in original order + ret.sort(key=lambda x: x[0]) + + return [(abstract, concrete) for abstract, (_, concrete) in zip(to_concretize, ret)] + [ + (abstract, concrete) for abstract, concrete in spec_list if concrete + ] + + +def _concretize_task(packed_arguments: Tuple[int, str, TestsType]) -> Tuple[int, Spec, float]: + index, spec_str, tests = packed_arguments + with tty.SuppressOutput(msg_enabled=False): + start = time.time() + spec = Spec(spec_str).concretized(tests=tests) + return index, spec, time.time() - start + + class UnavailableCompilerVersionError(spack.error.SpackError): """Raised when there is no available compiler that satisfies a compiler spec.""" - def __init__(self, compiler_spec, arch=None): - err_msg = "No compilers with spec {0} found".format(compiler_spec) + def __init__(self, compiler_spec: CompilerSpec, arch: Optional[ArchSpec] = None) -> None: + err_msg = f"No compilers with spec {compiler_spec} found" if arch: - err_msg += " for operating system {0} and target {1}.".format(arch.os, arch.target) + err_msg += f" for operating system {arch.os} and target {arch.target}." super().__init__( err_msg, diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py index a8b8d0b49d16d2..749caa90ae326a 100644 --- a/lib/spack/spack/config.py +++ b/lib/spack/spack/config.py @@ -435,6 +435,10 @@ def __init__(self, *scopes: ConfigScope) -> None: self.push_scope(scope) self.format_updates: Dict[str, List[ConfigScope]] = collections.defaultdict(list) + def ensure_unwrapped(self) -> "Configuration": + """Ensure we unwrap this object from any dynamic wrapper (like Singleton)""" + return self + @_config_mutator def push_scope(self, scope: ConfigScope) -> None: """Add a higher precedence scope to the Configuration.""" @@ -723,7 +727,7 @@ def _non_platform_scopes(self): @contextlib.contextmanager def override( path_or_scope: Union[ConfigScope, str], value: Optional[Any] = None -) -> Generator[Union[lang.Singleton, Configuration], None, None]: +) -> Generator[Configuration, None, None]: """Simple way to override config settings within a context. Arguments: @@ -799,9 +803,7 @@ def config_paths_from_entry_points() -> List[Tuple[str, str]]: return config_paths -def _add_command_line_scopes( - cfg: Union[Configuration, lang.Singleton], command_line_scopes: List[str] -) -> None: +def _add_command_line_scopes(cfg: Configuration, command_line_scopes: List[str]) -> None: """Add additional scopes from the --config-scope argument, either envs or dirs.""" import spack.environment.environment as env # circular import @@ -871,18 +873,11 @@ def create() -> Configuration: # Each scope can have per-platfom overrides in subdirectories _add_platform_scopes(cfg, name, path) - # add command-line scopes - _add_command_line_scopes(cfg, COMMAND_LINE_SCOPES) - - # we make a special scope for spack commands so that they can - # override configuration options. - cfg.push_scope(InternalConfigScope("command_line")) - return cfg #: This is the singleton configuration instance for Spack. -CONFIG: Union[Configuration, lang.Singleton] = lang.Singleton(create) +CONFIG: Configuration = lang.Singleton(create) # type: ignore def add_from_file(filename: str, scope: Optional[str] = None) -> None: diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py index 907b73c5db71a6..ed68b5d13c0f18 100644 --- a/lib/spack/spack/database.py +++ b/lib/spack/spack/database.py @@ -32,6 +32,7 @@ Container, Dict, Generator, + Iterable, List, NamedTuple, Optional, @@ -68,6 +69,8 @@ from spack.error import SpackError from spack.util.crypto import bit_length +from .enums import InstallRecordStatus + # TODO: Provide an API automatically retyring a build after detecting and # TODO: clearing a failure. @@ -159,36 +162,12 @@ def converter(self, spec_like, *args, **kwargs): return converter -class InstallStatus(str): - pass - - -class InstallStatuses: - INSTALLED = InstallStatus("installed") - DEPRECATED = InstallStatus("deprecated") - MISSING = InstallStatus("missing") - - @classmethod - def canonicalize(cls, query_arg): - if query_arg is True: - return [cls.INSTALLED] - if query_arg is False: - return [cls.MISSING] - if query_arg is any: - return [cls.INSTALLED, cls.DEPRECATED, cls.MISSING] - if isinstance(query_arg, InstallStatus): - return [query_arg] - try: - statuses = list(query_arg) - if all(isinstance(x, InstallStatus) for x in statuses): - return statuses - except TypeError: - pass - - raise TypeError( - "installation query must be `any`, boolean, " - "InstallStatus, or iterable of InstallStatus" - ) +def normalize_query(installed: Union[bool, InstallRecordStatus]) -> InstallRecordStatus: + if installed is True: + installed = InstallRecordStatus.INSTALLED + elif installed is False: + installed = InstallRecordStatus.MISSING + return installed class InstallRecord: @@ -226,8 +205,8 @@ def __init__( installation_time: Optional[float] = None, deprecated_for: Optional[str] = None, in_buildcache: bool = False, - origin=None, - ): + origin: Optional[str] = None, + ) -> None: self.spec = spec self.path = str(path) if path else None self.installed = bool(installed) @@ -238,14 +217,12 @@ def __init__( self.in_buildcache = in_buildcache self.origin = origin - def install_type_matches(self, installed): - installed = InstallStatuses.canonicalize(installed) + def install_type_matches(self, installed: InstallRecordStatus) -> bool: if self.installed: - return InstallStatuses.INSTALLED in installed + return InstallRecordStatus.INSTALLED in installed elif self.deprecated_for: - return InstallStatuses.DEPRECATED in installed - else: - return InstallStatuses.MISSING in installed + return InstallRecordStatus.DEPRECATED in installed + return InstallRecordStatus.MISSING in installed def to_dict(self, include_fields=DEFAULT_INSTALL_RECORD_FIELDS): rec_dict = {} @@ -290,55 +267,6 @@ def __reduce__(self): return ForbiddenLock, tuple() -_QUERY_DOCSTRING = """ - - Args: - query_spec: queries iterate through specs in the database and - return those that satisfy the supplied ``query_spec``. If - query_spec is `any`, This will match all specs in the - database. If it is a spec, we'll evaluate - ``spec.satisfies(query_spec)`` - - known (bool or None): Specs that are "known" are those - for which Spack can locate a ``package.py`` file -- i.e., - Spack "knows" how to install them. Specs that are unknown may - represent packages that existed in a previous version of - Spack, but have since either changed their name or - been removed - - installed (bool or InstallStatus or typing.Iterable or None): - if ``True``, includes only installed - specs in the search; if ``False`` only missing specs, and if - ``any``, all specs in database. If an InstallStatus or iterable - of InstallStatus, returns specs whose install status - (installed, deprecated, or missing) matches (one of) the - InstallStatus. (default: True) - - explicit (bool or None): A spec that was installed - following a specific user request is marked as explicit. If - instead it was pulled-in as a dependency of a user requested - spec it's considered implicit. - - start_date (datetime.datetime or None): filters the query - discarding specs that have been installed before ``start_date``. - - end_date (datetime.datetime or None): filters the query discarding - specs that have been installed after ``end_date``. - - hashes (Container): list or set of hashes that we can use to - restrict the search - - in_buildcache (bool or None): Specs that are marked in - this database as part of an associated binary cache are - ``in_buildcache``. All other specs are not. This field is used - for querying mirror indices. Default is ``any``. - - Returns: - list of specs that match the query - - """ - - class LockConfiguration(NamedTuple): """Data class to configure locks in Database objects @@ -604,6 +532,9 @@ def _path(self, spec: "spack.spec.Spec") -> pathlib.Path: return self.dir / f"{spec.name}-{spec.dag_hash()}" +SelectType = Callable[[InstallRecord], bool] + + class Database: #: Fields written for each install record record_fields: Tuple[str, ...] = DEFAULT_INSTALL_RECORD_FIELDS @@ -1245,7 +1176,7 @@ def _add( self._data[key].explicit = explicit @_autospec - def add(self, spec: "spack.spec.Spec", *, explicit: bool = False) -> None: + def add(self, spec: "spack.spec.Spec", *, explicit: bool = False, allow_missing=False) -> None: """Add spec at path to database, locking and reading DB to sync. ``add()`` will lock and read from the DB on disk. @@ -1254,7 +1185,7 @@ def add(self, spec: "spack.spec.Spec", *, explicit: bool = False) -> None: # TODO: ensure that spec is concrete? # Entire add is transactional. with self.write_transaction(): - self._add(spec, explicit=explicit) + self._add(spec, explicit=explicit, allow_missing=allow_missing) def _get_matching_spec_key(self, spec: "spack.spec.Spec", **kwargs) -> str: """Get the exact spec OR get a single spec that matches.""" @@ -1381,7 +1312,7 @@ def _deprecate(self, spec: "spack.spec.Spec", deprecator: "spack.spec.Spec") -> self._data[spec_key] = spec_rec @_autospec - def mark(self, spec: "spack.spec.Spec", key, value) -> None: + def mark(self, spec: "spack.spec.Spec", key: str, value: Any) -> None: """Mark an arbitrary record on a spec.""" with self.write_transaction(): return self._mark(spec, key, value) @@ -1441,7 +1372,13 @@ def installed_extensions_for(self, extendee_spec: "spack.spec.Spec"): if spec.package.extends(extendee_spec): yield spec.package - def _get_by_hash_local(self, dag_hash, default=None, installed=any): + def _get_by_hash_local( + self, + dag_hash: str, + default: Optional[List["spack.spec.Spec"]] = None, + installed: Union[bool, InstallRecordStatus] = InstallRecordStatus.ANY, + ) -> Optional[List["spack.spec.Spec"]]: + installed = normalize_query(installed) # hash is a full hash and is in the data somewhere if dag_hash in self._data: rec = self._data[dag_hash] @@ -1450,8 +1387,7 @@ def _get_by_hash_local(self, dag_hash, default=None, installed=any): else: return default - # check if hash is a prefix of some installed (or previously - # installed) spec. + # check if hash is a prefix of some installed (or previously installed) spec. matches = [ record.spec for h, record in self._data.items() @@ -1463,52 +1399,43 @@ def _get_by_hash_local(self, dag_hash, default=None, installed=any): # nothing found return default - def get_by_hash_local(self, dag_hash, default=None, installed=any): + def get_by_hash_local( + self, + dag_hash: str, + default: Optional[List["spack.spec.Spec"]] = None, + installed: Union[bool, InstallRecordStatus] = InstallRecordStatus.ANY, + ) -> Optional[List["spack.spec.Spec"]]: """Look up a spec in *this DB* by DAG hash, or by a DAG hash prefix. - Arguments: - dag_hash (str): hash (or hash prefix) to look up - default (object or None): default value to return if dag_hash is - not in the DB (default: None) - installed (bool or InstallStatus or typing.Iterable or None): - if ``True``, includes only installed - specs in the search; if ``False`` only missing specs, and if - ``any``, all specs in database. If an InstallStatus or iterable - of InstallStatus, returns specs whose install status - (installed, deprecated, or missing) matches (one of) the - InstallStatus. (default: any) - - ``installed`` defaults to ``any`` so that we can refer to any - known hash. Note that ``query()`` and ``query_one()`` differ in - that they only return installed specs by default. - - Returns: - (list): a list of specs matching the hash or hash prefix + Args: + dag_hash: hash (or hash prefix) to look up + default: default value to return if dag_hash is not in the DB + installed: if ``True``, includes only installed specs in the search; if ``False`` + only missing specs. Otherwise, a InstallRecordStatus flag. + ``installed`` defaults to ``InstallRecordStatus.ANY`` so we can refer to any known hash. + + ``query()`` and ``query_one()`` differ in that they only return installed specs by default. """ with self.read_transaction(): return self._get_by_hash_local(dag_hash, default=default, installed=installed) - def get_by_hash(self, dag_hash, default=None, installed=any): + def get_by_hash( + self, + dag_hash: str, + default: Optional[List["spack.spec.Spec"]] = None, + installed: Union[bool, InstallRecordStatus] = InstallRecordStatus.ANY, + ) -> Optional[List["spack.spec.Spec"]]: """Look up a spec by DAG hash, or by a DAG hash prefix. - Arguments: - dag_hash (str): hash (or hash prefix) to look up - default (object or None): default value to return if dag_hash is - not in the DB (default: None) - installed (bool or InstallStatus or typing.Iterable or None): - if ``True``, includes only installed specs in the search; if ``False`` - only missing specs, and if ``any``, all specs in database. If an - InstallStatus or iterable of InstallStatus, returns specs whose install - status (installed, deprecated, or missing) matches (one of) the - InstallStatus. (default: any) - - ``installed`` defaults to ``any`` so that we can refer to any - known hash. Note that ``query()`` and ``query_one()`` differ in - that they only return installed specs by default. - - Returns: - (list): a list of specs matching the hash or hash prefix + Args: + dag_hash: hash (or hash prefix) to look up + default: default value to return if dag_hash is not in the DB + installed: if ``True``, includes only installed specs in the search; if ``False`` + only missing specs. Otherwise, a InstallRecordStatus flag. + + ``installed`` defaults to ``InstallRecordStatus.ANY`` so we can refer to any known hash. + ``query()`` and ``query_one()`` differ in that they only return installed specs by default. """ @@ -1525,62 +1452,52 @@ def get_by_hash(self, dag_hash, default=None, installed=any): def _query( self, - query_spec=any, - known=any, - installed=True, - explicit=any, - start_date=None, - end_date=None, - hashes=None, - in_buildcache=any, - origin=None, - ): - """Run a query on the database.""" - - # TODO: Specs are a lot like queries. Should there be a - # TODO: wildcard spec object, and should specs have attributes - # TODO: like installed and known that can be queried? Or are - # TODO: these really special cases that only belong here? - - if query_spec is not any: - if not isinstance(query_spec, spack.spec.Spec): - query_spec = spack.spec.Spec(query_spec) - - # Just look up concrete specs with hashes; no fancy search. - if query_spec.concrete: - # TODO: handling of hashes restriction is not particularly elegant. - hash_key = query_spec.dag_hash() - if hash_key in self._data and (not hashes or hash_key in hashes): - return [self._data[hash_key].spec] - else: - return [] - - # Abstract specs require more work -- currently we test - # against everything. + query_spec: Optional[Union[str, "spack.spec.Spec"]] = None, + *, + predicate_fn: Optional[SelectType] = None, + installed: Union[bool, InstallRecordStatus] = True, + explicit: Optional[bool] = None, + start_date: Optional[datetime.datetime] = None, + end_date: Optional[datetime.datetime] = None, + hashes: Optional[Iterable[str]] = None, + in_buildcache: Optional[bool] = None, + origin: Optional[str] = None, + ) -> List["spack.spec.Spec"]: + installed = normalize_query(installed) + + # Restrict the set of records over which we iterate first + matching_hashes = self._data + if hashes is not None: + matching_hashes = {h: self._data[h] for h in hashes if h in self._data} + + if isinstance(query_spec, str): + query_spec = spack.spec.Spec(query_spec) + + if query_spec is not None and query_spec.concrete: + hash_key = query_spec.dag_hash() + if hash_key not in matching_hashes: + return [] + matching_hashes = {hash_key: matching_hashes[hash_key]} + results = [] start_date = start_date or datetime.datetime.min end_date = end_date or datetime.datetime.max - # save specs whose name doesn't match for last, to avoid a virtual check deferred = [] - - for key, rec in self._data.items(): - if hashes is not None and rec.spec.dag_hash() not in hashes: - continue - + for rec in matching_hashes.values(): if origin and not (origin == rec.origin): continue if not rec.install_type_matches(installed): continue - if in_buildcache is not any and rec.in_buildcache != in_buildcache: + if in_buildcache is not None and rec.in_buildcache != in_buildcache: continue - if explicit is not any and rec.explicit != explicit: + if explicit is not None and rec.explicit != explicit: continue - if known is not any and known(rec.spec.name): + if predicate_fn is not None and not predicate_fn(rec): continue if start_date or end_date: @@ -1588,7 +1505,7 @@ def _query( if not (start_date < inst_date < end_date): continue - if query_spec is any: + if query_spec is None or query_spec.concrete: results.append(rec.spec) continue @@ -1606,36 +1523,118 @@ def _query( # If we did fine something, the query spec can't be virtual b/c we matched an actual # package installation, so skip the virtual check entirely. If we *didn't* find anything, # check all the deferred specs *if* the query is virtual. - if not results and query_spec is not any and deferred and query_spec.virtual: + if not results and query_spec is not None and deferred and query_spec.virtual: results = [spec for spec in deferred if spec.satisfies(query_spec)] return results - if _query.__doc__ is None: - _query.__doc__ = "" - _query.__doc__ += _QUERY_DOCSTRING + def query_local( + self, + query_spec: Optional[Union[str, "spack.spec.Spec"]] = None, + *, + predicate_fn: Optional[SelectType] = None, + installed: Union[bool, InstallRecordStatus] = True, + explicit: Optional[bool] = None, + start_date: Optional[datetime.datetime] = None, + end_date: Optional[datetime.datetime] = None, + hashes: Optional[List[str]] = None, + in_buildcache: Optional[bool] = None, + origin: Optional[str] = None, + ) -> List["spack.spec.Spec"]: + """Queries the local Spack database. + + This function doesn't guarantee any sorting of the returned data for performance reason, + since comparing specs for __lt__ may be an expensive operation. + + Args: + query_spec: if query_spec is ``None``, match all specs in the database. + If it is a spec, return all specs matching ``spec.satisfies(query_spec)``. + + predicate_fn: optional predicate taking an InstallRecord as argument, and returning + whether that record is selected for the query. It can be used to craft criteria + that need some data for selection not provided by the Database itself. + + installed: if ``True``, includes only installed specs in the search. If ``False`` only + missing specs, and if ``any``, all specs in database. If an InstallStatus or + iterable of InstallStatus, returns specs whose install status matches at least + one of the InstallStatus. + + explicit: a spec that was installed following a specific user request is marked as + explicit. If instead it was pulled-in as a dependency of a user requested spec + it's considered implicit. + + start_date: if set considers only specs installed from the starting date. + + end_date: if set considers only specs installed until the ending date. - def query_local(self, *args, **kwargs): - """Query only the local Spack database. + in_buildcache: specs that are marked in this database as part of an associated binary + cache are ``in_buildcache``. All other specs are not. This field is used for + querying mirror indices. By default, it does not check this status. - This function doesn't guarantee any sorting of the returned - data for performance reason, since comparing specs for __lt__ - may be an expensive operation. + hashes: list of hashes used to restrict the search + + origin: origin of the spec """ with self.read_transaction(): - return self._query(*args, **kwargs) + return self._query( + query_spec, + predicate_fn=predicate_fn, + installed=installed, + explicit=explicit, + start_date=start_date, + end_date=end_date, + hashes=hashes, + in_buildcache=in_buildcache, + origin=origin, + ) + + def query( + self, + query_spec: Optional[Union[str, "spack.spec.Spec"]] = None, + *, + predicate_fn: Optional[SelectType] = None, + installed: Union[bool, InstallRecordStatus] = True, + explicit: Optional[bool] = None, + start_date: Optional[datetime.datetime] = None, + end_date: Optional[datetime.datetime] = None, + in_buildcache: Optional[bool] = None, + hashes: Optional[List[str]] = None, + origin: Optional[str] = None, + install_tree: str = "all", + ) -> List["spack.spec.Spec"]: + """Queries the Spack database including all upstream databases. + + Args: + query_spec: if query_spec is ``None``, match all specs in the database. + If it is a spec, return all specs matching ``spec.satisfies(query_spec)``. - if query_local.__doc__ is None: - query_local.__doc__ = "" - query_local.__doc__ += _QUERY_DOCSTRING + predicate_fn: optional predicate taking an InstallRecord as argument, and returning + whether that record is selected for the query. It can be used to craft criteria + that need some data for selection not provided by the Database itself. - def query(self, *args, **kwargs): - """Query the Spack database including all upstream databases. + installed: if ``True``, includes only installed specs in the search. If ``False`` only + missing specs, and if ``any``, all specs in database. If an InstallStatus or + iterable of InstallStatus, returns specs whose install status matches at least + one of the InstallStatus. - Additional Arguments: - install_tree (str): query 'all' (default), 'local', 'upstream', or upstream path + explicit: a spec that was installed following a specific user request is marked as + explicit. If instead it was pulled-in as a dependency of a user requested spec + it's considered implicit. + + start_date: if set considers only specs installed from the starting date. + + end_date: if set considers only specs installed until the ending date. + + in_buildcache: specs that are marked in this database as part of an associated binary + cache are ``in_buildcache``. All other specs are not. This field is used for + querying mirror indices. By default, it does not check this status. + + hashes: list of hashes used to restrict the search + + install_tree: query 'all' (default), 'local', 'upstream', or upstream path + + origin: origin of the spec """ - install_tree = kwargs.pop("install_tree", "all") valid_trees = ["all", "upstream", "local", self.root] + [u.root for u in self.upstream_dbs] if install_tree not in valid_trees: msg = "Invalid install_tree argument to Database.query()\n" @@ -1651,28 +1650,55 @@ def query(self, *args, **kwargs): # queries for upstream DBs need to *not* lock - we may not # have permissions to do this and the upstream DBs won't know about # us anyway (so e.g. they should never uninstall specs) - upstream_results.extend(upstream_db._query(*args, **kwargs) or []) + upstream_results.extend( + upstream_db._query( + query_spec, + predicate_fn=predicate_fn, + installed=installed, + explicit=explicit, + start_date=start_date, + end_date=end_date, + hashes=hashes, + in_buildcache=in_buildcache, + origin=origin, + ) + or [] + ) - local_results = [] + local_results: Set["spack.spec.Spec"] = set() if install_tree in ("all", "local") or self.root == install_tree: - local_results = set(self.query_local(*args, **kwargs)) + local_results = set( + self.query_local( + query_spec, + predicate_fn=predicate_fn, + installed=installed, + explicit=explicit, + start_date=start_date, + end_date=end_date, + hashes=hashes, + in_buildcache=in_buildcache, + origin=origin, + ) + ) results = list(local_results) + list(x for x in upstream_results if x not in local_results) + results.sort() + return results - return sorted(results) - - if query.__doc__ is None: - query.__doc__ = "" - query.__doc__ += _QUERY_DOCSTRING - - def query_one(self, query_spec, known=any, installed=True): + def query_one( + self, + query_spec: Optional[Union[str, "spack.spec.Spec"]], + predicate_fn: Optional[SelectType] = None, + installed: Union[bool, InstallRecordStatus] = True, + ) -> Optional["spack.spec.Spec"]: """Query for exactly one spec that matches the query spec. - Raises an assertion error if more than one spec matches the - query. Returns None if no installed package matches. + Returns None if no installed package matches. + Raises: + AssertionError: if more than one spec matches the query. """ - concrete_specs = self.query(query_spec, known=known, installed=installed) + concrete_specs = self.query(query_spec, predicate_fn=predicate_fn, installed=installed) assert len(concrete_specs) <= 1 return concrete_specs[0] if concrete_specs else None @@ -1719,24 +1745,6 @@ def root(key, record): if id(rec.spec) not in needed and rec.installed ] - def update_explicit(self, spec, explicit): - """ - Update the spec's explicit state in the database. - - Args: - spec (spack.spec.Spec): the spec whose install record is being updated - explicit (bool): ``True`` if the package was requested explicitly - by the user, ``False`` if it was pulled in as a dependency of - an explicit package. - """ - rec = self.get_record(spec) - if explicit != rec.explicit: - with self.write_transaction(): - message = "{s.name}@{s.version} : marking the package {0}" - status = "explicit" if explicit else "implicit" - tty.debug(message.format(status, s=spec)) - rec.explicit = explicit - class NoUpstreamVisitor: """Gives edges to upstream specs, but does follow edges from upstream specs.""" diff --git a/lib/spack/spack/detection/path.py b/lib/spack/spack/detection/path.py index e8081f6e3c6e18..d529f94f290ee6 100644 --- a/lib/spack/spack/detection/path.py +++ b/lib/spack/spack/detection/path.py @@ -11,6 +11,7 @@ import os.path import re import sys +import traceback import warnings from typing import Dict, Iterable, List, Optional, Set, Tuple, Type @@ -18,6 +19,7 @@ import llnl.util.lang import llnl.util.tty +import spack.error import spack.spec import spack.util.elf as elf_utils import spack.util.environment @@ -274,8 +276,12 @@ def detect_specs( ) except Exception as e: specs = [] + if spack.error.SHOW_BACKTRACE: + details = traceback.format_exc() + else: + details = f"[{e.__class__.__name__}: {e}]" warnings.warn( - f'error detecting "{pkg.name}" from prefix {candidate_path} [{str(e)}]' + f'error detecting "{pkg.name}" from prefix {candidate_path}: {details}' ) if not specs: @@ -449,9 +455,9 @@ def by_path( llnl.util.tty.debug( f"[EXTERNAL DETECTION] Skipping {pkg_name}: timeout reached" ) - except Exception as e: + except Exception: llnl.util.tty.debug( - f"[EXTERNAL DETECTION] Skipping {pkg_name}: exception occured {e}" + f"[EXTERNAL DETECTION] Skipping {pkg_name}: {traceback.format_exc()}" ) return result diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py index c3db11a18b77ef..44d95f38373144 100644 --- a/lib/spack/spack/directives.py +++ b/lib/spack/spack/directives.py @@ -34,12 +34,12 @@ class OpenMpi(Package): import collections.abc import os.path import re -from typing import TYPE_CHECKING, Any, Callable, List, Optional, Tuple, Union +from typing import Any, Callable, List, Optional, Tuple, Union -import llnl.util.lang import llnl.util.tty.color import spack.deptypes as dt +import spack.package_base import spack.patch import spack.spec import spack.util.crypto @@ -56,14 +56,10 @@ class OpenMpi(Package): VersionLookupError, ) -if TYPE_CHECKING: - import spack.package_base - __all__ = [ "DirectiveError", - "DirectiveMeta", - "DisableRedistribute", "version", + "conditional", "conflicts", "depends_on", "extends", @@ -76,6 +72,7 @@ class OpenMpi(Package): "build_system", "requires", "redistribute", + "can_splice", ] _patch_order_index = 0 @@ -83,15 +80,15 @@ class OpenMpi(Package): SpecType = str DepType = Union[Tuple[str, ...], str] -WhenType = Optional[Union["spack.spec.Spec", str, bool]] -Patcher = Callable[[Union["spack.package_base.PackageBase", Dependency]], None] +WhenType = Optional[Union[spack.spec.Spec, str, bool]] +Patcher = Callable[[Union[spack.package_base.PackageBase, Dependency]], None] PatchesType = Optional[Union[Patcher, str, List[Union[Patcher, str]]]] SUPPORTED_LANGUAGES = ("fortran", "cxx", "c") -def _make_when_spec(value: WhenType) -> Optional["spack.spec.Spec"]: +def _make_when_spec(value: WhenType) -> Optional[spack.spec.Spec]: """Create a ``Spec`` that indicates when a directive should be applied. Directives with ``when`` specs, e.g.: @@ -136,7 +133,7 @@ def _make_when_spec(value: WhenType) -> Optional["spack.spec.Spec"]: return spack.spec.Spec(value) -SubmoduleCallback = Callable[["spack.package_base.PackageBase"], Union[str, List[str], bool]] +SubmoduleCallback = Callable[[spack.package_base.PackageBase], Union[str, List[str], bool]] directive = DirectiveMeta.directive @@ -252,8 +249,8 @@ def _execute_version(pkg, ver, **kwargs): def _depends_on( - pkg: "spack.package_base.PackageBase", - spec: "spack.spec.Spec", + pkg: spack.package_base.PackageBase, + spec: spack.spec.Spec, *, when: WhenType = None, type: DepType = dt.DEFAULT_TYPES, @@ -332,7 +329,7 @@ def conflicts(conflict_spec: SpecType, when: WhenType = None, msg: Optional[str] msg (str): optional user defined message """ - def _execute_conflicts(pkg: "spack.package_base.PackageBase"): + def _execute_conflicts(pkg: spack.package_base.PackageBase): # If when is not specified the conflict always holds when_spec = _make_when_spec(when) if not when_spec: @@ -352,7 +349,6 @@ def depends_on( when: WhenType = None, type: DepType = dt.DEFAULT_TYPES, patches: PatchesType = None, - version_translator=None, ): """Creates a dict of deps with specs defining when they apply. @@ -363,12 +359,6 @@ def depends_on( type: str or tuple of legal Spack deptypes patches: single result of ``patch()`` directive, a ``str`` to be passed to ``patch``, or a list of these - version_translator (function): function to generate a version-ish for spec - from a parent version. If provided, this function will be called for - each version defined for pkg, and any non-vacuous result will be used to - add a dependency with that version as an extra constraint on spec. - Examples of suitable functions: ``spack.version.Version`` (NOP) or - ``lambda v: v.up_to(2)`` (minor version match) This directive is to be used inside a Package definition to declare that the package requires other packages to be built first. @@ -380,41 +370,12 @@ def depends_on( assert type == "build", "languages must be of 'build' type" return _language(lang_spec_str=spec, when=when) - def _execute_depends_on(pkg: "spack.package_base.PackageBase"): - executed = False - if version_translator: - # Produce a different dependency for every package version - # for which version_translator returns an answer that alters - # the spec. - for pkg_version in pkg.versions: - version_ish = version_translator(pkg_version) - if version_ish is not None: - constrained_spec = spack.spec.Spec(dep_spec) - if constrained_spec.constrain(f"@{version_ish}"): - _depends_on( - pkg, - constrained_spec, - when=f"@{pkg_version} {when}" if when else f"@{pkg_version}", - type=type, - patches=patches, - ) - executed = True - - # If we haven't already produced one or more version-specific - # dependencies, do the basic dependency for spec. - if not executed: - _depends_on(pkg, dep_spec, when=when, type=type, patches=patches) + def _execute_depends_on(pkg: spack.package_base.PackageBase): + _depends_on(pkg, dep_spec, when=when, type=type, patches=patches) return _execute_depends_on -#: Store whether a given Spec source/binary should not be redistributed. -class DisableRedistribute: - def __init__(self, source, binary): - self.source = source - self.binary = binary - - @directive("disable_redistribute") def redistribute(source=None, binary=None, when: WhenType = None): """Can be used inside a Package definition to declare that @@ -431,7 +392,7 @@ def redistribute(source=None, binary=None, when: WhenType = None): def _execute_redistribute( - pkg: "spack.package_base.PackageBase", source=None, binary=None, when: WhenType = None + pkg: spack.package_base.PackageBase, source=None, binary=None, when: WhenType = None ): if source is None and binary is None: return @@ -461,7 +422,7 @@ def _execute_redistribute( if not binary: disable.binary = True else: - pkg.disable_redistribute[when_spec] = DisableRedistribute( + pkg.disable_redistribute[when_spec] = spack.package_base.DisableRedistribute( source=not source, binary=not binary ) @@ -507,7 +468,7 @@ def provides(*specs: SpecType, when: WhenType = None): when: condition when this provides clause needs to be considered """ - def _execute_provides(pkg: "spack.package_base.PackageBase"): + def _execute_provides(pkg: spack.package_base.PackageBase): import spack.parser # Avoid circular dependency when_spec = _make_when_spec(when) @@ -533,6 +494,43 @@ def _execute_provides(pkg: "spack.package_base.PackageBase"): return _execute_provides +@directive("splice_specs") +def can_splice( + target: SpecType, *, when: SpecType, match_variants: Union[None, str, List[str]] = None +): + """Packages can declare whether they are ABI-compatible with another package + and thus can be spliced into concrete versions of that package. + + Args: + target: The spec that the current package is ABI-compatible with. + + when: An anonymous spec constraining current package for when it is + ABI-compatible with target. + + match_variants: A list of variants that must match + between target spec and current package, with special value '*' + which matches all variants. Example: a variant is defined on both + packages called json, and they are ABI-compatible whenever they agree on + the json variant (regardless of whether it is turned on or off). Note + that this cannot be applied to multi-valued variants and multi-valued + variants will be skipped by '*'. + """ + + def _execute_can_splice(pkg: spack.package_base.PackageBase): + when_spec = _make_when_spec(when) + if isinstance(match_variants, str) and match_variants != "*": + raise ValueError( + "* is the only valid string for match_variants " + "if looking to provide a single variant, use " + f"[{match_variants}] instead" + ) + if when_spec is None: + return + pkg.splice_specs[when_spec] = (spack.spec.Spec(target), match_variants) + + return _execute_can_splice + + @directive("patches") def patch( url_or_filename: str, @@ -559,7 +557,7 @@ def patch( compressed URL patches) """ - def _execute_patch(pkg_or_dep: Union["spack.package_base.PackageBase", Dependency]): + def _execute_patch(pkg_or_dep: Union[spack.package_base.PackageBase, Dependency]): pkg = pkg_or_dep if isinstance(pkg, Dependency): pkg = pkg.pkg @@ -606,6 +604,15 @@ def _execute_patch(pkg_or_dep: Union["spack.package_base.PackageBase", Dependenc return _execute_patch +def conditional(*values: List[Any], when: Optional[WhenType] = None): + """Conditional values that can be used in variant declarations.""" + # _make_when_spec returns None when the condition is statically false. + when = _make_when_spec(when) + return spack.variant.ConditionalVariantValues( + spack.variant.ConditionalValue(x, when=when) for x in values + ) + + @directive("variants") def variant( name: str, @@ -874,7 +881,7 @@ def requires(*requirement_specs: str, policy="one_of", when=None, msg=None): msg: optional user defined message """ - def _execute_requires(pkg: "spack.package_base.PackageBase"): + def _execute_requires(pkg: spack.package_base.PackageBase): if policy not in ("one_of", "any_of"): err_msg = ( f"the 'policy' argument of the 'requires' directive in {pkg.name} is set " @@ -899,7 +906,7 @@ def _execute_requires(pkg: "spack.package_base.PackageBase"): def _language(lang_spec_str: str, *, when: Optional[Union[str, bool]] = None): """Temporary implementation of language virtuals, until compilers are proper dependencies.""" - def _execute_languages(pkg: "spack.package_base.PackageBase"): + def _execute_languages(pkg: spack.package_base.PackageBase): when_spec = _make_when_spec(when) if not when_spec: return diff --git a/lib/spack/spack/directives_meta.py b/lib/spack/spack/directives_meta.py index 0768a40664f4e6..70ba0298a88a82 100644 --- a/lib/spack/spack/directives_meta.py +++ b/lib/spack/spack/directives_meta.py @@ -10,6 +10,7 @@ import llnl.util.lang import spack.error +import spack.repo import spack.spec #: Names of possible directives. This list is mostly populated using the @directive decorator. @@ -63,7 +64,7 @@ def __init__(cls, name, bases, attr_dict): # The instance is being initialized: if it is a package we must ensure # that the directives are called to set it up. - if "spack.pkg" in cls.__module__: + if cls.__module__.startswith(spack.repo.ROOT_PYTHON_NAMESPACE): # Ensure the presence of the dictionaries associated with the directives. # All dictionaries are defaultdicts that create lists for missing keys. for d in DirectiveMeta._directive_dict_names: diff --git a/lib/spack/spack/enums.py b/lib/spack/spack/enums.py new file mode 100644 index 00000000000000..7df7ab5a42340e --- /dev/null +++ b/lib/spack/spack/enums.py @@ -0,0 +1,15 @@ +# Copyright 2013-2024 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) +"""Enumerations used throughout Spack""" +import enum + + +class InstallRecordStatus(enum.Flag): + """Enum flag to facilitate querying status from the DB""" + + INSTALLED = enum.auto() + DEPRECATED = enum.auto() + MISSING = enum.auto() + ANY = INSTALLED | DEPRECATED | MISSING diff --git a/lib/spack/spack/environment/__init__.py b/lib/spack/spack/environment/__init__.py index fb083594e00fb5..62445e04379134 100644 --- a/lib/spack/spack/environment/__init__.py +++ b/lib/spack/spack/environment/__init__.py @@ -473,6 +473,7 @@ active_environment, all_environment_names, all_environments, + as_env_dir, create, create_in_dir, deactivate, @@ -480,6 +481,7 @@ default_view_name, display_specs, environment_dir_from_name, + environment_from_name_or_dir, exists, initialize_environment_dir, installed_specs, @@ -507,6 +509,7 @@ "active_environment", "all_environment_names", "all_environments", + "as_env_dir", "create", "create_in_dir", "deactivate", @@ -514,6 +517,7 @@ "default_view_name", "display_specs", "environment_dir_from_name", + "environment_from_name_or_dir", "exists", "initialize_environment_dir", "installed_specs", diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py index 8837e2cecd8ee1..9a3361c7347466 100644 --- a/lib/spack/spack/environment/environment.py +++ b/lib/spack/spack/environment/environment.py @@ -11,22 +11,19 @@ import re import shutil import stat -import sys -import time import urllib.parse import urllib.request import warnings -from typing import Any, Dict, Iterable, List, Optional, Set, Tuple, Union +from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, Union import llnl.util.filesystem as fs import llnl.util.tty as tty import llnl.util.tty.color as clr from llnl.util.link_tree import ConflictingSpecsError -from llnl.util.symlink import readlink, symlink +from llnl.util.symlink import islink, readlink, symlink import spack import spack.caches -import spack.compilers import spack.concretize import spack.config import spack.deptypes as dt @@ -45,7 +42,6 @@ import spack.util.environment import spack.util.hash import spack.util.lock as lk -import spack.util.parallel import spack.util.path import spack.util.spack_json as sjson import spack.util.spack_yaml as syaml @@ -57,6 +53,8 @@ from spack.spec_list import SpecList from spack.util.path import substitute_path_variables +SpecPair = spack.concretize.SpecPair + #: environment variable used to indicate the active environment spack_env_var = "SPACK_ENV" @@ -277,6 +275,22 @@ def is_env_dir(path): return os.path.isdir(path) and os.path.exists(os.path.join(path, manifest_name)) +def as_env_dir(name_or_dir): + """Translate an environment name or directory to the environment directory""" + if is_env_dir(name_or_dir): + return name_or_dir + else: + validate_env_name(name_or_dir) + if not exists(name_or_dir): + raise SpackEnvironmentError("no such environment '%s'" % name_or_dir) + return root(name_or_dir) + + +def environment_from_name_or_dir(name_or_dir): + """Get an environment with the supplied name.""" + return Environment(as_env_dir(name_or_dir)) + + def read(name): """Get an environment with the supplied name.""" validate_env_name(name) @@ -654,7 +668,7 @@ def from_dict(base_path, d): @property def _current_root(self): - if not os.path.islink(self.root): + if not islink(self.root): return None root = readlink(self.root) @@ -1494,7 +1508,7 @@ def deconcretize(self, spec: spack.spec.Spec, concrete: bool = True): def _get_specs_to_concretize( self, - ) -> Tuple[Set[spack.spec.Spec], Set[spack.spec.Spec], List[spack.spec.Spec]]: + ) -> Tuple[List[spack.spec.Spec], List[spack.spec.Spec], List[SpecPair]]: """Compute specs to concretize for unify:true and unify:when_possible. This includes new user specs and any already concretized specs. @@ -1504,23 +1518,20 @@ def _get_specs_to_concretize( """ # Exit early if the set of concretized specs is the set of user specs - new_user_specs = set(self.user_specs) - set(self.concretized_user_specs) - kept_user_specs = set(self.user_specs) & set(self.concretized_user_specs) + new_user_specs = list(set(self.user_specs) - set(self.concretized_user_specs)) + kept_user_specs = list(set(self.user_specs) & set(self.concretized_user_specs)) + kept_user_specs += self.included_user_specs if not new_user_specs: return new_user_specs, kept_user_specs, [] - concrete_specs_to_keep = [ - concrete + specs_to_concretize = [(s, None) for s in new_user_specs] + [ + (abstract, concrete) for abstract, concrete in self.concretized_specs() if abstract in kept_user_specs ] - - specs_to_concretize = list(new_user_specs) + concrete_specs_to_keep return new_user_specs, kept_user_specs, specs_to_concretize - def _concretize_together_where_possible( - self, tests: bool = False - ) -> List[Tuple[spack.spec.Spec, spack.spec.Spec]]: + def _concretize_together_where_possible(self, tests: bool = False) -> Sequence[SpecPair]: # Avoid cyclic dependency import spack.solver.asp @@ -1529,36 +1540,26 @@ def _concretize_together_where_possible( if not new_user_specs: return [] - old_concrete_to_abstract = { - concrete: abstract for (abstract, concrete) in self.concretized_specs() - } - self.concretized_user_specs = [] self.concretized_order = [] self.specs_by_hash = {} - result_by_user_spec = {} - solver = spack.solver.asp.Solver() - allow_deprecated = spack.config.get("config:deprecated", False) - for result in solver.solve_in_rounds( - specs_to_concretize, tests=tests, allow_deprecated=allow_deprecated - ): - result_by_user_spec.update(result.specs_by_input) + ret = [] + result = spack.concretize.concretize_together_when_possible( + specs_to_concretize, tests=tests + ) + for abstract, concrete in result: + # Only add to the environment if it's from this environment (not included in) + if abstract in self.user_specs: + self._add_concrete_spec(abstract, concrete) - result = [] - for abstract, concrete in sorted(result_by_user_spec.items()): - # If the "abstract" spec is a concrete spec from the previous concretization - # translate it back to an abstract spec. Otherwise, keep the abstract spec - abstract = old_concrete_to_abstract.get(abstract, abstract) + # Return only the new specs if abstract in new_user_specs: - result.append((abstract, concrete)) - self._add_concrete_spec(abstract, concrete) + ret.append((abstract, concrete)) - return result + return ret - def _concretize_together( - self, tests: bool = False - ) -> List[Tuple[spack.spec.Spec, spack.spec.Spec]]: + def _concretize_together(self, tests: bool = False) -> Sequence[SpecPair]: """Concretization strategy that concretizes all the specs in the same DAG. """ @@ -1572,8 +1573,8 @@ def _concretize_together( self.specs_by_hash = {} try: - concrete_specs: List[spack.spec.Spec] = spack.concretize.concretize_specs_together( - *specs_to_concretize, tests=tests + concretized_specs = spack.concretize.concretize_together( + specs_to_concretize, tests=tests ) except spack.error.UnsatisfiableSpecError as e: # "Enhance" the error message for multiple root specs, suggest a less strict @@ -1591,14 +1592,13 @@ def _concretize_together( ) raise - # set() | set() does not preserve ordering, even though sets are ordered - ordered_user_specs = list(new_user_specs) + list(kept_user_specs) - concretized_specs = [x for x in zip(ordered_user_specs, concrete_specs)] for abstract, concrete in concretized_specs: - self._add_concrete_spec(abstract, concrete) + # Don't add if it's just included + if abstract in self.user_specs: + self._add_concrete_spec(abstract, concrete) - # zip truncates the longer list, which is exactly what we want here - return list(zip(new_user_specs, concrete_specs)) + # Return the portion of the return value that is new + return concretized_specs[: len(new_user_specs)] def _concretize_separately(self, tests=False): """Concretization strategy that concretizes separately one @@ -1620,71 +1620,16 @@ def _concretize_separately(self, tests=False): concrete = old_specs_by_hash[h] self._add_concrete_spec(s, concrete, new=False) - # Concretize any new user specs that we haven't concretized yet - args, root_specs, i = [], [], 0 - for uspec in self.user_specs: - if uspec not in old_concretized_user_specs: - root_specs.append(uspec) - args.append((i, str(uspec), tests)) - i += 1 - - # Ensure we don't try to bootstrap clingo in parallel - with spack.bootstrap.ensure_bootstrap_configuration(): - spack.bootstrap.ensure_clingo_importable_or_raise() - - # Ensure all the indexes have been built or updated, since - # otherwise the processes in the pool may timeout on waiting - # for a write lock. We do this indirectly by retrieving the - # provider index, which should in turn trigger the update of - # all the indexes if there's any need for that. - _ = spack.repo.PATH.provider_index - - # Ensure we have compilers in compilers.yaml to avoid that - # processes try to write the config file in parallel - _ = spack.compilers.all_compilers_config(spack.config.CONFIG) - - # Early return if there is nothing to do - if len(args) == 0: - return [] - - # Solve the environment in parallel on Linux - start = time.time() - num_procs = min(len(args), spack.config.determine_number_of_jobs(parallel=True)) - - # TODO: support parallel concretization on macOS and Windows - msg = "Starting concretization" - if sys.platform not in ("darwin", "win32") and num_procs > 1: - msg += f" pool with {num_procs} processes" - tty.msg(msg) - - batch = [] - for j, (i, concrete, duration) in enumerate( - spack.util.parallel.imap_unordered( - _concretize_task, - args, - processes=num_procs, - debug=tty.is_debug(), - maxtaskperchild=1, - ) - ): - batch.append((i, concrete)) - percentage = (j + 1) / len(args) * 100 - tty.verbose( - f"{duration:6.1f}s [{percentage:3.0f}%] {concrete.cformat('{hash:7}')} " - f"{root_specs[i].colored_str}" - ) - sys.stdout.flush() + to_concretize = [ + (root, None) for root in self.user_specs if root not in old_concretized_user_specs + ] + concretized_specs = spack.concretize.concretize_separately(to_concretize, tests=tests) - # Add specs in original order - batch.sort(key=lambda x: x[0]) - by_hash = {} # for attaching information on test dependencies - for root, (_, concrete) in zip(root_specs, batch): - self._add_concrete_spec(root, concrete) + by_hash = {} + for abstract, concrete in concretized_specs: + self._add_concrete_spec(abstract, concrete) by_hash[concrete.dag_hash()] = concrete - finish = time.time() - tty.msg(f"Environment concretized in {finish - start:.2f} seconds") - # Unify the specs objects, so we get correct references to all parents self._read_lockfile_dict(self._to_lockfile_dict()) @@ -1704,11 +1649,7 @@ def _concretize_separately(self, tests=False): test_dependency.copy(), depflag=dt.TEST, virtuals=current_edge.virtuals ) - results = [ - (abstract, self.specs_by_hash[h]) - for abstract, h in zip(self.concretized_user_specs, self.concretized_order) - ] - return results + return concretized_specs @property def default_view(self): @@ -1956,17 +1897,16 @@ def install_specs(self, specs: Optional[List[Spec]] = None, **install_args): specs = specs if specs is not None else roots # Extend the set of specs to overwrite with modified dev specs and their parents - overwrite: Set[str] = set() - overwrite.update(install_args.get("overwrite", []), self._dev_specs_that_need_overwrite()) - install_args["overwrite"] = overwrite - - explicit: Set[str] = set() - explicit.update( - install_args.get("explicit", []), - (s.dag_hash() for s in specs), - (s.dag_hash() for s in roots), - ) - install_args["explicit"] = explicit + install_args["overwrite"] = { + *install_args.get("overwrite", ()), + *self._dev_specs_that_need_overwrite(), + } + + # Only environment roots are marked explicit + install_args["explicit"] = { + *install_args.get("explicit", ()), + *(s.dag_hash() for s in roots), + } PackageInstaller([spec.package for spec in specs], **install_args).install() @@ -2516,14 +2456,6 @@ def display_specs(specs): print(tree_string) -def _concretize_task(packed_arguments) -> Tuple[int, Spec, float]: - index, spec_str, tests = packed_arguments - with tty.SuppressOutput(msg_enabled=False): - start = time.time() - spec = Spec(spec_str).concretized(tests=tests) - return index, spec, time.time() - start - - def make_repo_path(root): """Make a RepoPath from the repo subdirectories in an environment.""" path = spack.repo.RepoPath(cache=spack.caches.MISC_CACHE) diff --git a/lib/spack/spack/environment/shell.py b/lib/spack/spack/environment/shell.py index b1d87a48fd7649..bb2dea04c0297e 100644 --- a/lib/spack/spack/environment/shell.py +++ b/lib/spack/spack/environment/shell.py @@ -48,8 +48,6 @@ def activate_header(env, shell, prompt=None, view: Optional[str] = None): cmds += 'set "SPACK_ENV=%s"\n' % env.path if view: cmds += 'set "SPACK_ENV_VIEW=%s"\n' % view - # TODO: despacktivate - # TODO: prompt elif shell == "pwsh": cmds += "$Env:SPACK_ENV='%s'\n" % env.path if view: diff --git a/lib/spack/spack/error.py b/lib/spack/spack/error.py index edb4b9e89fb262..45a39a4f201d97 100644 --- a/lib/spack/spack/error.py +++ b/lib/spack/spack/error.py @@ -12,6 +12,9 @@ #: this is module-scoped because it needs to be set very early debug = 0 +#: whether to show a backtrace when an error is printed, enabled with --backtrace. +SHOW_BACKTRACE = False + class SpackError(Exception): """This is the superclass for all Spack errors. diff --git a/lib/spack/spack/filesystem_view.py b/lib/spack/spack/filesystem_view.py index 2d5890c36389fc..278541377989c2 100644 --- a/lib/spack/spack/filesystem_view.py +++ b/lib/spack/spack/filesystem_view.py @@ -33,6 +33,7 @@ from llnl.util.tty.color import colorize import spack.config +import spack.directory_layout import spack.paths import spack.projections import spack.relocate @@ -50,7 +51,7 @@ _projections_path = ".spack/projections.yaml" -LinkCallbackType = Callable[[str, str, "FilesystemView", Optional["spack.spec.Spec"]], None] +LinkCallbackType = Callable[[str, str, "FilesystemView", Optional[spack.spec.Spec]], None] def view_symlink(src: str, dst: str, *args, **kwargs) -> None: @@ -62,7 +63,7 @@ def view_hardlink(src: str, dst: str, *args, **kwargs) -> None: def view_copy( - src: str, dst: str, view: "FilesystemView", spec: Optional["spack.spec.Spec"] = None + src: str, dst: str, view: "FilesystemView", spec: Optional[spack.spec.Spec] = None ) -> None: """ Copy a file from src to dst. @@ -160,7 +161,7 @@ class FilesystemView: def __init__( self, root: str, - layout: "spack.directory_layout.DirectoryLayout", + layout: spack.directory_layout.DirectoryLayout, *, projections: Optional[Dict] = None, ignore_conflicts: bool = False, @@ -182,7 +183,10 @@ def __init__( # Setup link function to include view self.link_type = link_type - self.link = ft.partial(function_for_link_type(link_type), view=self) + self._link = function_for_link_type(link_type) + + def link(self, src: str, dst: str, spec: Optional[spack.spec.Spec] = None) -> None: + self._link(src, dst, self, spec) def add_specs(self, *specs, **kwargs): """ @@ -283,7 +287,7 @@ class YamlFilesystemView(FilesystemView): def __init__( self, root: str, - layout: "spack.directory_layout.DirectoryLayout", + layout: spack.directory_layout.DirectoryLayout, *, projections: Optional[Dict] = None, ignore_conflicts: bool = False, diff --git a/lib/spack/spack/graph.py b/lib/spack/spack/graph.py index f4ac437df92b38..2d0fc9c3a86fcd 100644 --- a/lib/spack/spack/graph.py +++ b/lib/spack/spack/graph.py @@ -325,12 +325,7 @@ def write(self, spec, color=None, out=None): self._out = llnl.util.tty.color.ColorStream(out, color=color) # We'll traverse the spec in topological order as we graph it. - nodes_in_topological_order = [ - edge.spec - for edge in spack.traverse.traverse_edges_topo( - [spec], direction="children", deptype=self.depflag - ) - ] + nodes_in_topological_order = list(spec.traverse(order="topo", deptype=self.depflag)) nodes_in_topological_order.reverse() # Work on a copy to be nondestructive diff --git a/lib/spack/spack/hooks/__init__.py b/lib/spack/spack/hooks/__init__.py index 0e7e3036928a67..73fad62d6ad3dc 100644 --- a/lib/spack/spack/hooks/__init__.py +++ b/lib/spack/spack/hooks/__init__.py @@ -21,43 +21,40 @@ features. """ import importlib - -from llnl.util.lang import ensure_last, list_modules - -import spack.paths +import types +from typing import List, Optional class _HookRunner: - #: Stores all hooks on first call, shared among - #: all HookRunner objects - _hooks = None + #: Order in which hooks are executed + HOOK_ORDER = [ + "spack.hooks.module_file_generation", + "spack.hooks.licensing", + "spack.hooks.sbang", + "spack.hooks.windows_runtime_linkage", + "spack.hooks.drop_redundant_rpaths", + "spack.hooks.absolutify_elf_sonames", + "spack.hooks.permissions_setters", + # after all mutations to the install prefix, write metadata + "spack.hooks.write_install_manifest", + # after all metadata is written + "spack.hooks.autopush", + ] + + #: Contains all hook modules after first call, shared among all HookRunner objects + _hooks: Optional[List[types.ModuleType]] = None def __init__(self, hook_name): self.hook_name = hook_name - @classmethod - def _populate_hooks(cls): - # Lazily populate the list of hooks - cls._hooks = [] - - relative_names = list(list_modules(spack.paths.hooks_path)) - - # Ensure that write_install_manifest comes last - ensure_last(relative_names, "absolutify_elf_sonames", "write_install_manifest") - - for name in relative_names: - module_name = __name__ + "." + name - module_obj = importlib.import_module(module_name) - cls._hooks.append((module_name, module_obj)) - @property - def hooks(self): + def hooks(self) -> List[types.ModuleType]: if not self._hooks: - self._populate_hooks() + self._hooks = [importlib.import_module(module_name) for module_name in self.HOOK_ORDER] return self._hooks def __call__(self, *args, **kwargs): - for _, module in self.hooks: + for module in self.hooks: if hasattr(module, self.hook_name): hook = getattr(module, self.hook_name) if hasattr(hook, "__call__"): diff --git a/lib/spack/spack/install_test.py b/lib/spack/spack/install_test.py index f21f4f8cde25bb..d639548ecfd3e9 100644 --- a/lib/spack/spack/install_test.py +++ b/lib/spack/spack/install_test.py @@ -23,7 +23,6 @@ from llnl.util.tty.color import colorize import spack.build_environment -import spack.builder import spack.config import spack.error import spack.package_base @@ -353,9 +352,7 @@ def status(self, name: str, status: "TestStatus", msg: Optional[str] = None): self.test_parts[part_name] = status self.counts[status] += 1 - def phase_tests( - self, builder: spack.builder.Builder, phase_name: str, method_names: List[str] - ): + def phase_tests(self, builder, phase_name: str, method_names: List[str]): """Execute the builder's package phase-time tests. Args: @@ -378,23 +375,16 @@ def phase_tests( for name in method_names: try: - # Prefer the method in the package over the builder's. - # We need this primarily to pick up arbitrarily named test - # methods but also some build-time checks. - fn = getattr(builder.pkg, name, getattr(builder, name)) - - msg = f"RUN-TESTS: {phase_name}-time tests [{name}]" - print_message(logger, msg, verbose) - - fn() - + fn = getattr(builder, name, None) or getattr(builder.pkg, name) except AttributeError as e: - msg = f"RUN-TESTS: method not implemented [{name}]" - print_message(logger, msg, verbose) - - self.add_failure(e, msg) + print_message(logger, f"RUN-TESTS: method not implemented [{name}]", verbose) + self.add_failure(e, f"RUN-TESTS: method not implemented [{name}]") if fail_fast: break + continue + + print_message(logger, f"RUN-TESTS: {phase_name}-time tests [{name}]", verbose) + fn() if have_tests: print_message(logger, "Completed testing", verbose) @@ -764,7 +754,7 @@ def virtuals(pkg): # hack for compilers that are not dependencies (yet) # TODO: this all eventually goes away - c_names = ("gcc", "intel", "intel-parallel-studio", "pgi") + c_names = ("gcc", "intel", "intel-parallel-studio") if pkg.name in c_names: v_names.extend(["c", "cxx", "fortran"]) if pkg.spec.satisfies("llvm+clang"): diff --git a/lib/spack/spack/installer.py b/lib/spack/spack/installer.py index 80fe9f2b038e58..1fffe251f35773 100644 --- a/lib/spack/spack/installer.py +++ b/lib/spack/spack/installer.py @@ -50,6 +50,7 @@ import spack.binary_distribution as binary_distribution import spack.build_environment +import spack.builder import spack.config import spack.database import spack.deptypes as dt @@ -212,7 +213,7 @@ def _check_last_phase(pkg: "spack.package_base.PackageBase") -> None: Raises: ``BadInstallPhase`` if stop_before or last phase is invalid """ - phases = pkg.builder.phases # type: ignore[attr-defined] + phases = spack.builder.create(pkg).phases # type: ignore[attr-defined] if pkg.stop_before_phase and pkg.stop_before_phase not in phases: # type: ignore[attr-defined] raise BadInstallPhase(pkg.name, pkg.stop_before_phase) # type: ignore[attr-defined] @@ -412,7 +413,7 @@ def _process_external_package(pkg: "spack.package_base.PackageBase", explicit: b tty.debug(f"{pre} already registered in DB") record = spack.store.STORE.db.get_record(spec) if explicit and not record.explicit: - spack.store.STORE.db.update_explicit(spec, explicit) + spack.store.STORE.db.mark(spec, "explicit", True) except KeyError: # If not, register it and generate the module file. @@ -661,7 +662,7 @@ def log(pkg: "spack.package_base.PackageBase") -> None: spack.store.STORE.layout.metadata_path(pkg.spec), "archived-files" ) - for glob_expr in pkg.builder.archive_files: + for glob_expr in spack.builder.create(pkg).archive_files: # Check that we are trying to copy things that are # in the stage tree (not arbitrary files) abs_expr = os.path.realpath(glob_expr) @@ -1507,8 +1508,8 @@ def _prepare_for_install(self, task: Task) -> None: self._update_installed(task) # Only update the explicit entry once for the explicit package - if task.explicit: - spack.store.STORE.db.update_explicit(task.pkg.spec, True) + if task.explicit and not rec.explicit: + spack.store.STORE.db.mark(task.pkg.spec, "explicit", True) def _cleanup_all_tasks(self) -> None: """Cleanup all tasks to include releasing their locks.""" @@ -2394,7 +2395,6 @@ def _install_source(self) -> None: fs.install_tree(pkg.stage.source_path, src_target) def _real_install(self) -> None: - import spack.builder pkg = self.pkg diff --git a/lib/spack/spack/main.py b/lib/spack/spack/main.py index c0bb3d33552776..7cab47d77f7bf1 100644 --- a/lib/spack/spack/main.py +++ b/lib/spack/spack/main.py @@ -102,9 +102,6 @@ spack_ld_library_path = os.environ.get("LD_LIBRARY_PATH", "") -#: Whether to print backtraces on error -SHOW_BACKTRACE = False - def add_all_commands(parser): """Add all spack subcommands to the parser.""" @@ -492,6 +489,7 @@ def make_argument_parser(**kwargs): help="add stacktraces to all printed statements", ) parser.add_argument( + "-t", "--backtrace", action="store_true", default="SPACK_BACKTRACE" in os.environ, @@ -527,8 +525,7 @@ def setup_main_options(args): if args.debug or args.backtrace: spack.error.debug = True - global SHOW_BACKTRACE - SHOW_BACKTRACE = True + spack.error.SHOW_BACKTRACE = True if args.debug: spack.util.debug.register_interrupt_handler() @@ -914,13 +911,6 @@ def _main(argv=None): # Make spack load / env activate work on macOS restore_macos_dyld_vars() - # make spack.config aware of any command line configuration scopes - if args.config_scopes: - spack.config.COMMAND_LINE_SCOPES = args.config_scopes - - # ensure options on spack command come before everything - setup_main_options(args) - # activate an environment if one was specified on the command line env_format_error = None if not args.no_env: @@ -934,6 +924,12 @@ def _main(argv=None): e.print_context() env_format_error = e + # Push scopes from the command line last + if args.config_scopes: + spack.config._add_command_line_scopes(spack.config.CONFIG, args.config_scopes) + spack.config.CONFIG.push_scope(spack.config.InternalConfigScope("command_line")) + setup_main_options(args) + # ------------------------------------------------------------------------ # Things that require configuration should go below here # ------------------------------------------------------------------------ @@ -1021,19 +1017,19 @@ def main(argv=None): e.die() # gracefully die on any SpackErrors except KeyboardInterrupt: - if spack.config.get("config:debug") or SHOW_BACKTRACE: + if spack.config.get("config:debug") or spack.error.SHOW_BACKTRACE: raise sys.stderr.write("\n") tty.error("Keyboard interrupt.") return signal.SIGINT.value except SystemExit as e: - if spack.config.get("config:debug") or SHOW_BACKTRACE: + if spack.config.get("config:debug") or spack.error.SHOW_BACKTRACE: traceback.print_exc() return e.code except Exception as e: - if spack.config.get("config:debug") or SHOW_BACKTRACE: + if spack.config.get("config:debug") or spack.error.SHOW_BACKTRACE: raise tty.error(e) return 3 diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py index 8caa27213735a4..a4fd8535c44e8d 100644 --- a/lib/spack/spack/mirror.py +++ b/lib/spack/spack/mirror.py @@ -18,7 +18,7 @@ import sys import traceback import urllib.parse -from typing import List, Optional, Union +from typing import Any, Dict, Optional, Tuple, Union import llnl.url import llnl.util.symlink @@ -89,9 +89,8 @@ def from_url(url: str): """Create an anonymous mirror by URL. This method validates the URL.""" if not urllib.parse.urlparse(url).scheme in supported_url_schemes: raise ValueError( - '"{}" is not a valid mirror URL. Scheme must be once of {}.'.format( - url, ", ".join(supported_url_schemes) - ) + f'"{url}" is not a valid mirror URL. ' + f"Scheme must be one of {supported_url_schemes}." ) return Mirror(url) @@ -155,8 +154,66 @@ def push_url(self): """Get the valid, canonicalized fetch URL""" return self.get_url("push") + def ensure_mirror_usable(self, direction: str = "push"): + access_pair = self._get_value("access_pair", direction) + access_token_variable = self._get_value("access_token_variable", direction) + + errors = [] + + # Verify that the credentials that are variables expand + if access_pair and isinstance(access_pair, dict): + if "id_variable" in access_pair and access_pair["id_variable"] not in os.environ: + errors.append(f"id_variable {access_pair['id_variable']} not set in environment") + if "secret_variable" in access_pair: + if access_pair["secret_variable"] not in os.environ: + errors.append( + f"environment variable `{access_pair['secret_variable']}` " + "(secret_variable) not set" + ) + + if access_token_variable: + if access_token_variable not in os.environ: + errors.append( + f"environment variable `{access_pair['access_token_variable']}` " + "(access_token_variable) not set" + ) + + if errors: + msg = f"invalid {direction} configuration for mirror {self.name}: " + msg += "\n ".join(errors) + raise MirrorError(msg) + def _update_connection_dict(self, current_data: dict, new_data: dict, top_level: bool): - keys = ["url", "access_pair", "access_token", "profile", "endpoint_url"] + # Only allow one to exist in the config + if "access_token" in current_data and "access_token_variable" in new_data: + current_data.pop("access_token") + elif "access_token_variable" in current_data and "access_token" in new_data: + current_data.pop("access_token_variable") + + # If updating to a new access_pair that is the deprecated list, warn + warn_deprecated_access_pair = False + if "access_pair" in new_data: + warn_deprecated_access_pair = isinstance(new_data["access_pair"], list) + # If the not updating the current access_pair, and it is the deprecated list, warn + elif "access_pair" in current_data: + warn_deprecated_access_pair = isinstance(current_data["access_pair"], list) + + if warn_deprecated_access_pair: + tty.warn( + f"in mirror {self.name}: support for plain text secrets in config files " + "(access_pair: [id, secret]) is deprecated and will be removed in a future Spack " + "version. Use environment variables instead (access_pair: " + "{id: ..., secret_variable: ...})" + ) + + keys = [ + "url", + "access_pair", + "access_token", + "access_token_variable", + "profile", + "endpoint_url", + ] if top_level: keys += ["binary", "source", "signed", "autopush"] changed = False @@ -272,11 +329,53 @@ def get_url(self, direction: str) -> str: return _url_or_path_to_url(url) - def get_access_token(self, direction: str) -> Optional[str]: - return self._get_value("access_token", direction) + def get_credentials(self, direction: str) -> Dict[str, Any]: + """Get the mirror credentials from the mirror config - def get_access_pair(self, direction: str) -> Optional[List]: - return self._get_value("access_pair", direction) + Args: + direction: fetch or push mirror config + + Returns: + Dictionary from credential type string to value + + Credential Type Map: + access_token -> str + access_pair -> tuple(str,str) + profile -> str + """ + creddict: Dict[str, Any] = {} + access_token = self.get_access_token(direction) + if access_token: + creddict["access_token"] = access_token + + access_pair = self.get_access_pair(direction) + if access_pair: + creddict.update({"access_pair": access_pair}) + + profile = self.get_profile(direction) + if profile: + creddict["profile"] = profile + + return creddict + + def get_access_token(self, direction: str) -> Optional[str]: + tok = self._get_value("access_token_variable", direction) + if tok: + return os.environ.get(tok) + else: + return self._get_value("access_token", direction) + return None + + def get_access_pair(self, direction: str) -> Optional[Tuple[str, str]]: + pair = self._get_value("access_pair", direction) + if isinstance(pair, (tuple, list)) and len(pair) == 2: + return (pair[0], pair[1]) if all(pair) else None + elif isinstance(pair, dict): + id_ = os.environ.get(pair["id_variable"]) if "id_variable" in pair else pair["id"] + secret = os.environ.get(pair["secret_variable"]) + return (id_, secret) if id_ and secret else None + else: + return None def get_profile(self, direction: str) -> Optional[str]: return self._get_value("profile", direction) @@ -757,9 +856,9 @@ def create_mirror_from_package_object(pkg_obj, mirror_cache, mirror_stats): def require_mirror_name(mirror_name): """Find a mirror by name and raise if it does not exist""" - mirror = spack.mirror.MirrorCollection().get(mirror_name) + mirror = MirrorCollection().get(mirror_name) if not mirror: - raise ValueError('no mirror named "{0}"'.format(mirror_name)) + raise ValueError(f'no mirror named "{mirror_name}"') return mirror diff --git a/lib/spack/spack/mixins.py b/lib/spack/spack/mixins.py index e0e25f42bb4530..2db35fa13490f2 100644 --- a/lib/spack/spack/mixins.py +++ b/lib/spack/spack/mixins.py @@ -10,7 +10,7 @@ import llnl.util.filesystem -import spack.builder +import spack.phase_callbacks def filter_compiler_wrappers(*files, **kwargs): @@ -111,4 +111,4 @@ def _filter_compiler_wrappers_impl(pkg_or_builder): if pkg.compiler.name == "nag": x.filter("-Wl,--enable-new-dtags", "", **filter_kwargs) - spack.builder.run_after(after)(_filter_compiler_wrappers_impl) + spack.phase_callbacks.run_after(after)(_filter_compiler_wrappers_impl) diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index 7875ab55616fd8..e62520a6c2ef4a 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -39,7 +39,7 @@ import llnl.util.filesystem import llnl.util.tty as tty -from llnl.util.lang import dedupe, memoized +from llnl.util.lang import Singleton, dedupe, memoized import spack.build_environment import spack.config @@ -246,7 +246,7 @@ def _generate_upstream_module_index(): return UpstreamModuleIndex(spack.store.STORE.db, module_indices) -upstream_module_index = llnl.util.lang.Singleton(_generate_upstream_module_index) +upstream_module_index = Singleton(_generate_upstream_module_index) ModuleIndexEntry = collections.namedtuple("ModuleIndexEntry", ["path", "use_name"]) @@ -527,7 +527,8 @@ def use_name(self): parts = name.split("/") name = os.path.join(*parts) # Add optional suffixes based on constraints - path_elements = [name] + self.conf.suffixes + path_elements = [name] + path_elements.extend(map(self.spec.format, self.conf.suffixes)) return "-".join(path_elements) @property diff --git a/lib/spack/spack/oci/opener.py b/lib/spack/spack/oci/opener.py index 906d5d2b92c60b..2f9e83f5be1619 100644 --- a/lib/spack/spack/oci/opener.py +++ b/lib/spack/spack/oci/opener.py @@ -377,9 +377,10 @@ def credentials_from_mirrors( # Prefer push credentials over fetch. Unlikely that those are different # but our config format allows it. for direction in ("push", "fetch"): - pair = mirror.get_access_pair(direction) - if pair is None: + pair = mirror.get_credentials(direction).get("access_pair") + if not pair: continue + url = mirror.get_url(direction) if not url.startswith("oci://"): continue diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index bf8538032ae462..525721ebb3004a 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -11,7 +11,7 @@ from os import chdir, environ, getcwd, makedirs, mkdir, remove, removedirs from shutil import move, rmtree -from spack.error import InstallError +from spack.error import InstallError, NoHeadersError, NoLibrariesError # Emulate some shell commands for convenience env = environ @@ -74,7 +74,7 @@ from spack.build_systems.sourceware import SourcewarePackage from spack.build_systems.waf import WafPackage from spack.build_systems.xorg import XorgPackage -from spack.builder import run_after, run_before +from spack.builder import BaseBuilder from spack.config import determine_number_of_jobs from spack.deptypes import ALL_TYPES as all_deptypes from spack.directives import * @@ -100,15 +100,11 @@ on_package_attributes, ) from spack.package_completions import * +from spack.phase_callbacks import run_after, run_before from spack.spec import InvalidSpecDetected, Spec from spack.util.executable import * from spack.util.filesystem import file_command, fix_darwin_install_name, mime_type -from spack.variant import ( - any_combination_of, - auto_or_any_combination_of, - conditional, - disjoint_sets, -) +from spack.variant import any_combination_of, auto_or_any_combination_of, disjoint_sets from spack.version import Version, ver # These are just here for editor support; they will be replaced when the build env diff --git a/lib/spack/spack/package_base.py b/lib/spack/spack/package_base.py index 5927c0935735a6..64920b1043e822 100644 --- a/lib/spack/spack/package_base.py +++ b/lib/spack/spack/package_base.py @@ -32,30 +32,28 @@ from llnl.util.lang import classproperty, memoized from llnl.util.link_tree import LinkTree -import spack.build_environment -import spack.builder import spack.compilers import spack.config import spack.dependency import spack.deptypes as dt -import spack.directives +import spack.directives_meta import spack.error import spack.fetch_strategy as fs import spack.hooks import spack.mirror import spack.multimethod import spack.patch +import spack.phase_callbacks import spack.repo import spack.spec import spack.store import spack.url import spack.util.environment -import spack.util.executable import spack.util.path import spack.util.web +import spack.variant from spack.error import InstallError, NoURLError, PackageError from spack.filesystem_view import YamlFilesystemView -from spack.install_test import PackageTest, TestSuite from spack.solver.version_order import concretization_version_order from spack.stage import DevelopStage, ResourceStage, Stage, StageComposite, compute_stage_name from spack.util.package_hash import package_hash @@ -301,9 +299,9 @@ def determine_variants(cls, objs, version_str): class PackageMeta( - spack.builder.PhaseCallbacksMeta, + spack.phase_callbacks.PhaseCallbacksMeta, DetectablePackageMeta, - spack.directives.DirectiveMeta, + spack.directives_meta.DirectiveMeta, spack.multimethod.MultiMethodMeta, ): """ @@ -455,7 +453,7 @@ def _names(when_indexed_dictionary: WhenDict) -> List[str]: return sorted(all_names) -WhenVariantList = List[Tuple["spack.spec.Spec", "spack.variant.Variant"]] +WhenVariantList = List[Tuple[spack.spec.Spec, spack.variant.Variant]] def _remove_overridden_vdefs(variant_defs: WhenVariantList) -> None: @@ -494,41 +492,14 @@ class Hipblas: i += 1 -class RedistributionMixin: - """Logic for determining whether a Package is source/binary - redistributable. - """ - - #: Store whether a given Spec source/binary should not be - #: redistributed. - disable_redistribute: Dict["spack.spec.Spec", "spack.directives.DisableRedistribute"] +#: Store whether a given Spec source/binary should not be redistributed. +class DisableRedistribute: + def __init__(self, source, binary): + self.source = source + self.binary = binary - # Source redistribution must be determined before concretization - # (because source mirrors work with un-concretized Specs). - @classmethod - def redistribute_source(cls, spec): - """Whether it should be possible to add the source of this - package to a Spack mirror. - """ - for when_spec, disable_redistribute in cls.disable_redistribute.items(): - if disable_redistribute.source and spec.satisfies(when_spec): - return False - - return True - @property - def redistribute_binary(self): - """Whether it should be possible to create a binary out of an - installed instance of this package. - """ - for when_spec, disable_redistribute in self.__class__.disable_redistribute.items(): - if disable_redistribute.binary and self.spec.satisfies(when_spec): - return False - - return True - - -class PackageBase(WindowsRPath, PackageViewMixin, RedistributionMixin, metaclass=PackageMeta): +class PackageBase(WindowsRPath, PackageViewMixin, metaclass=PackageMeta): """This is the superclass for all spack packages. ***The Package class*** @@ -614,16 +585,20 @@ class PackageBase(WindowsRPath, PackageViewMixin, RedistributionMixin, metaclass # Declare versions dictionary as placeholder for values. # This allows analysis tools to correctly interpret the class attributes. versions: dict - dependencies: Dict["spack.spec.Spec", Dict[str, "spack.dependency.Dependency"]] - conflicts: Dict["spack.spec.Spec", List[Tuple["spack.spec.Spec", Optional[str]]]] + dependencies: Dict[spack.spec.Spec, Dict[str, spack.dependency.Dependency]] + conflicts: Dict[spack.spec.Spec, List[Tuple[spack.spec.Spec, Optional[str]]]] requirements: Dict[ - "spack.spec.Spec", List[Tuple[Tuple["spack.spec.Spec", ...], str, Optional[str]]] + spack.spec.Spec, List[Tuple[Tuple[spack.spec.Spec, ...], str, Optional[str]]] ] - provided: Dict["spack.spec.Spec", Set["spack.spec.Spec"]] - provided_together: Dict["spack.spec.Spec", List[Set[str]]] - patches: Dict["spack.spec.Spec", List["spack.patch.Patch"]] - variants: Dict["spack.spec.Spec", Dict[str, "spack.variant.Variant"]] - languages: Dict["spack.spec.Spec", Set[str]] + provided: Dict[spack.spec.Spec, Set[spack.spec.Spec]] + provided_together: Dict[spack.spec.Spec, List[Set[str]]] + patches: Dict[spack.spec.Spec, List[spack.patch.Patch]] + variants: Dict[spack.spec.Spec, Dict[str, spack.variant.Variant]] + languages: Dict[spack.spec.Spec, Set[str]] + splice_specs: Dict[spack.spec.Spec, Tuple[spack.spec.Spec, Union[None, str, List[str]]]] + + #: Store whether a given Spec source/binary should not be redistributed. + disable_redistribute: Dict[spack.spec.Spec, DisableRedistribute] #: By default, packages are not virtual #: Virtual packages override this attribute @@ -738,11 +713,11 @@ class PackageBase(WindowsRPath, PackageViewMixin, RedistributionMixin, metaclass test_requires_compiler: bool = False #: TestSuite instance used to manage stand-alone tests for 1+ specs. - test_suite: Optional["TestSuite"] = None + test_suite: Optional[Any] = None def __init__(self, spec): # this determines how the package should be built. - self.spec: "spack.spec.Spec" = spec + self.spec: spack.spec.Spec = spec # Allow custom staging paths for packages self.path = None @@ -760,7 +735,7 @@ def __init__(self, spec): # init internal variables self._stage: Optional[StageComposite] = None self._fetcher = None - self._tester: Optional["PackageTest"] = None + self._tester: Optional[Any] = None # Set up timing variables self._fetch_time = 0.0 @@ -810,9 +785,7 @@ def variant_definitions(cls, name: str) -> WhenVariantList: return defs @classmethod - def variant_items( - cls, - ) -> Iterable[Tuple["spack.spec.Spec", Dict[str, "spack.variant.Variant"]]]: + def variant_items(cls) -> Iterable[Tuple[spack.spec.Spec, Dict[str, spack.variant.Variant]]]: """Iterate over ``cls.variants.items()`` with overridden definitions removed.""" # Note: This is quadratic in the average number of variant definitions per name. # That is likely close to linear in practice, as there are few variants with @@ -830,7 +803,7 @@ def variant_items( if filtered_variants_by_name: yield when, filtered_variants_by_name - def get_variant(self, name: str) -> "spack.variant.Variant": + def get_variant(self, name: str) -> spack.variant.Variant: """Get the highest precedence variant definition matching this package's spec. Arguments: @@ -1005,6 +978,26 @@ def global_license_file(self): self.global_license_dir, self.name, os.path.basename(self.license_files[0]) ) + # Source redistribution must be determined before concretization (because source mirrors work + # with abstract specs). + @classmethod + def redistribute_source(cls, spec): + """Whether it should be possible to add the source of this + package to a Spack mirror.""" + for when_spec, disable_redistribute in cls.disable_redistribute.items(): + if disable_redistribute.source and spec.satisfies(when_spec): + return False + return True + + @property + def redistribute_binary(self): + """Whether it should be possible to create a binary out of an installed instance of this + package.""" + for when_spec, disable_redistribute in self.disable_redistribute.items(): + if disable_redistribute.binary and self.spec.satisfies(when_spec): + return False + return True + # NOTE: return type should be Optional[Literal['all', 'specific', 'none']] in # Python 3.8+, but we still support 3.6. @property @@ -1017,7 +1010,7 @@ def keep_werror(self) -> Optional[str]: * ``"none"``: filter out all ``-Werror*`` flags. * ``None``: respect the user's configuration (``"none"`` by default). """ - if self.spec.satisfies("%nvhpc@:23.3") or self.spec.satisfies("%pgi"): + if self.spec.satisfies("%nvhpc@:23.3"): # Filtering works by replacing -Werror with -Wno-error, but older nvhpc and # PGI do not understand -Wno-error, so we disable filtering. return "all" @@ -1354,11 +1347,13 @@ def archive_install_test_log(self): @property def tester(self): + import spack.install_test + if not self.spec.versions.concrete: raise ValueError("Cannot retrieve tester for package without concrete version.") if not self._tester: - self._tester = PackageTest(self) + self._tester = spack.install_test.PackageTest(self) return self._tester @property @@ -2020,72 +2015,58 @@ def build_system_flags( """ return None, None, flags - def setup_run_environment(self, env): + def setup_run_environment(self, env: spack.util.environment.EnvironmentModifications) -> None: """Sets up the run environment for a package. Args: - env (spack.util.environment.EnvironmentModifications): environment - modifications to be applied when the package is run. Package authors + env: environment modifications to be applied when the package is run. Package authors can call methods on it to alter the run environment. """ pass - def setup_dependent_run_environment(self, env, dependent_spec): + def setup_dependent_run_environment( + self, env: spack.util.environment.EnvironmentModifications, dependent_spec: spack.spec.Spec + ) -> None: """Sets up the run environment of packages that depend on this one. - This is similar to ``setup_run_environment``, but it is used to - modify the run environments of packages that *depend* on this one. + This is similar to ``setup_run_environment``, but it is used to modify the run environment + of a package that *depends* on this one. - This gives packages like Python and others that follow the extension - model a way to implement common environment or run-time settings - for dependencies. + This gives packages like Python and others that follow the extension model a way to + implement common environment or run-time settings for dependencies. Args: - env (spack.util.environment.EnvironmentModifications): environment - modifications to be applied when the dependent package is run. - Package authors can call methods on it to alter the build environment. + env: environment modifications to be applied when the dependent package is run. Package + authors can call methods on it to alter the build environment. - dependent_spec (spack.spec.Spec): The spec of the dependent package - about to be run. This allows the extendee (self) to query - the dependent's state. Note that *this* package's spec is + dependent_spec: The spec of the dependent package about to be run. This allows the + extendee (self) to query the dependent's state. Note that *this* package's spec is available as ``self.spec`` """ pass - def setup_dependent_package(self, module, dependent_spec): - """Set up Python module-scope variables for dependent packages. - - Called before the install() method of dependents. + def setup_dependent_package(self, module, dependent_spec: spack.spec.Spec) -> None: + """Set up module-scope global variables for dependent packages. - Default implementation does nothing, but this can be - overridden by an extendable package to set up the module of - its extensions. This is useful if there are some common steps - to installing all extensions for a certain package. + This function is called when setting up the build and run environments of a DAG. Examples: - 1. Extensions often need to invoke the ``python`` interpreter - from the Python installation being extended. This routine - can put a ``python()`` Executable object in the module scope - for the extension package to simplify extension installs. - - 2. MPI compilers could set some variables in the dependent's - scope that point to ``mpicc``, ``mpicxx``, etc., allowing - them to be called by common name regardless of which MPI is used. + 1. Extensions often need to invoke the ``python`` interpreter from the Python installation + being extended. This routine can put a ``python`` Executable as a global in the module + scope for the extension package to simplify extension installs. - 3. BLAS/LAPACK implementations can set some variables - indicating the path to their libraries, since these - paths differ by BLAS/LAPACK implementation. + 2. MPI compilers could set some variables in the dependent's scope that point to ``mpicc``, + ``mpicxx``, etc., allowing them to be called by common name regardless of which MPI is + used. Args: - module (spack.package_base.PackageBase.module): The Python ``module`` - object of the dependent package. Packages can use this to set - module-scope variables for the dependent to use. + module: The Python ``module`` object of the dependent package. Packages can use this to + set module-scope variables for the dependent to use. - dependent_spec (spack.spec.Spec): The spec of the dependent package - about to be built. This allows the extendee (self) to - query the dependent's state. Note that *this* - package's spec is available as ``self.spec``. + dependent_spec: The spec of the dependent package about to be built. This allows the + extendee (self) to query the dependent's state. Note that *this* package's spec is + available as ``self.spec``. """ pass @@ -2112,7 +2093,7 @@ def flag_handler(self, var: FLAG_HANDLER_TYPE) -> None: # arguments. This is implemented for build system classes where # appropriate and will otherwise raise a NotImplementedError. - def flags_to_build_system_args(self, flags): + def flags_to_build_system_args(self, flags: Dict[str, List[str]]) -> None: # Takes flags as a dict name: list of values if any(v for v in flags.values()): msg = "The {0} build system".format(self.__class__.__name__) @@ -2315,10 +2296,6 @@ def rpath_args(self): """ return " ".join("-Wl,-rpath,%s" % p for p in self.rpath) - @property - def builder(self): - return spack.builder.create(self) - inject_flags = PackageBase.inject_flags env_flags = PackageBase.env_flags diff --git a/lib/spack/spack/phase_callbacks.py b/lib/spack/spack/phase_callbacks.py new file mode 100644 index 00000000000000..58eec54ca1c59f --- /dev/null +++ b/lib/spack/spack/phase_callbacks.py @@ -0,0 +1,105 @@ +# Copyright 2013-2024 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) + +import collections + +import llnl.util.lang as lang + +#: An object of this kind is a shared global state used to collect callbacks during +#: class definition time, and is flushed when the class object is created at the end +#: of the class definition +#: +#: Args: +#: attribute_name (str): name of the attribute that will be attached to the builder +#: callbacks (list): container used to temporarily aggregate the callbacks +CallbackTemporaryStage = collections.namedtuple( + "CallbackTemporaryStage", ["attribute_name", "callbacks"] +) + +#: Shared global state to aggregate "@run_before" callbacks +_RUN_BEFORE = CallbackTemporaryStage(attribute_name="run_before_callbacks", callbacks=[]) +#: Shared global state to aggregate "@run_after" callbacks +_RUN_AFTER = CallbackTemporaryStage(attribute_name="run_after_callbacks", callbacks=[]) + + +class PhaseCallbacksMeta(type): + """Permit to register arbitrary functions during class definition and run them + later, before or after a given install phase. + + Each method decorated with ``run_before`` or ``run_after`` gets temporarily + stored in a global shared state when a class being defined is parsed by the Python + interpreter. At class definition time that temporary storage gets flushed and a list + of callbacks is attached to the class being defined. + """ + + def __new__(mcs, name, bases, attr_dict): + for temporary_stage in (_RUN_BEFORE, _RUN_AFTER): + staged_callbacks = temporary_stage.callbacks + + # Here we have an adapter from an old-style package. This means there is no + # hierarchy of builders, and every callback that had to be combined between + # *Package and *Builder has been combined already by _PackageAdapterMeta + if name == "Adapter": + continue + + # If we are here we have callbacks. To get a complete list, we accumulate all the + # callbacks from base classes, we deduplicate them, then prepend what we have + # registered here. + # + # The order should be: + # 1. Callbacks are registered in order within the same class + # 2. Callbacks defined in derived classes precede those defined in base + # classes + callbacks_from_base = [] + for base in bases: + current_callbacks = getattr(base, temporary_stage.attribute_name, None) + if not current_callbacks: + continue + callbacks_from_base.extend(current_callbacks) + callbacks_from_base = list(lang.dedupe(callbacks_from_base)) + # Set the callbacks in this class and flush the temporary stage + attr_dict[temporary_stage.attribute_name] = staged_callbacks[:] + callbacks_from_base + del temporary_stage.callbacks[:] + + return super(PhaseCallbacksMeta, mcs).__new__(mcs, name, bases, attr_dict) + + @staticmethod + def run_after(phase, when=None): + """Decorator to register a function for running after a given phase. + + Args: + phase (str): phase after which the function must run. + when (str): condition under which the function is run (if None, it is always run). + """ + + def _decorator(fn): + key = (phase, when) + item = (key, fn) + _RUN_AFTER.callbacks.append(item) + return fn + + return _decorator + + @staticmethod + def run_before(phase, when=None): + """Decorator to register a function for running before a given phase. + + Args: + phase (str): phase before which the function must run. + when (str): condition under which the function is run (if None, it is always run). + """ + + def _decorator(fn): + key = (phase, when) + item = (key, fn) + _RUN_BEFORE.callbacks.append(item) + return fn + + return _decorator + + +# Export these names as standalone to be used in packages +run_after = PhaseCallbacksMeta.run_after +run_before = PhaseCallbacksMeta.run_before diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py index 67e980625ea359..627c9e2b057061 100644 --- a/lib/spack/spack/relocate.py +++ b/lib/spack/spack/relocate.py @@ -283,7 +283,11 @@ def modify_macho_object(cur_path, rpaths, deps, idpath, paths_to_paths): def macholib_get_paths(cur_path): """Get rpaths, dependent libraries, and library id of mach-o objects.""" - headers = macholib.MachO.MachO(cur_path).headers + headers = [] + try: + headers = macholib.MachO.MachO(cur_path).headers + except ValueError: + pass if not headers: tty.warn("Failed to read Mach-O headers: {0}".format(cur_path)) commands = [] diff --git a/lib/spack/spack/repo.py b/lib/spack/spack/repo.py index b916c3baef8674..f3872aed8d1d1f 100644 --- a/lib/spack/spack/repo.py +++ b/lib/spack/spack/repo.py @@ -39,9 +39,9 @@ import spack.error import spack.patch import spack.provider_index -import spack.repo import spack.spec import spack.tag +import spack.util.file_cache import spack.util.git import spack.util.naming as nm import spack.util.path @@ -216,9 +216,9 @@ def compute_loader(self, fullname): def packages_path(): """Get the test repo if it is active, otherwise the builtin repo.""" try: - return spack.repo.PATH.get_repo("builtin.mock").packages_path - except spack.repo.UnknownNamespaceError: - return spack.repo.PATH.get_repo("builtin").packages_path + return PATH.get_repo("builtin.mock").packages_path + except UnknownNamespaceError: + return PATH.get_repo("builtin").packages_path class GitExe: @@ -314,7 +314,7 @@ def add_package_to_git_stage(packages): git = GitExe() for pkg_name in packages: - filename = spack.repo.PATH.filename_for_package_name(pkg_name) + filename = PATH.filename_for_package_name(pkg_name) if not os.path.isfile(filename): tty.die("No such package: %s. Path does not exist:" % pkg_name, filename) @@ -590,7 +590,7 @@ def __init__( self, package_checker: FastPackageChecker, namespace: str, - cache: "spack.caches.FileCacheType", + cache: spack.util.file_cache.FileCache, ): self.checker = package_checker self.packages_path = self.checker.packages_path @@ -683,7 +683,7 @@ class RepoPath: def __init__( self, *repos: Union[str, "Repo"], - cache: Optional["spack.caches.FileCacheType"], + cache: Optional[spack.util.file_cache.FileCache], overrides: Optional[Dict[str, Any]] = None, ) -> None: self.repos: List[Repo] = [] @@ -965,7 +965,7 @@ def __init__( self, root: str, *, - cache: "spack.caches.FileCacheType", + cache: spack.util.file_cache.FileCache, overrides: Optional[Dict[str, Any]] = None, ) -> None: """Instantiate a package repository from a filesystem path. @@ -1440,9 +1440,7 @@ def _path(configuration=None): return create(configuration=configuration) -def create( - configuration: Union["spack.config.Configuration", llnl.util.lang.Singleton] -) -> RepoPath: +def create(configuration: spack.config.Configuration) -> RepoPath: """Create a RepoPath from a configuration object. Args: @@ -1465,7 +1463,7 @@ def create( #: Singleton repo path instance -PATH: Union[RepoPath, llnl.util.lang.Singleton] = llnl.util.lang.Singleton(_path) +PATH: RepoPath = llnl.util.lang.Singleton(_path) # type: ignore # Add the finder to sys.meta_path REPOS_FINDER = ReposFinder() @@ -1585,7 +1583,7 @@ def __init__(self, name, repo=None): long_msg = "Use 'spack create' to create a new package." if not repo: - repo = spack.repo.PATH + repo = PATH # We need to compare the base package name pkg_name = name.rsplit(".", 1)[-1] diff --git a/lib/spack/spack/schema/ci.py b/lib/spack/spack/schema/ci.py index e616058b998a28..9f7380ab44160d 100644 --- a/lib/spack/spack/schema/ci.py +++ b/lib/spack/spack/schema/ci.py @@ -11,8 +11,6 @@ from llnl.util.lang import union_dicts -import spack.schema.gitlab_ci - # Schema for script fields # List of lists and/or strings # This is similar to what is allowed in @@ -77,58 +75,54 @@ }, } -named_attributes_schema = { - "oneOf": [ - { - "type": "object", - "additionalProperties": False, - "properties": {"noop-job": attributes_schema, "noop-job-remove": attributes_schema}, - }, - { - "type": "object", - "additionalProperties": False, - "properties": {"build-job": attributes_schema, "build-job-remove": attributes_schema}, - }, - { - "type": "object", - "additionalProperties": False, - "properties": {"copy-job": attributes_schema, "copy-job-remove": attributes_schema}, - }, - { - "type": "object", - "additionalProperties": False, - "properties": { - "reindex-job": attributes_schema, - "reindex-job-remove": attributes_schema, - }, - }, - { - "type": "object", - "additionalProperties": False, - "properties": { - "signing-job": attributes_schema, - "signing-job-remove": attributes_schema, - }, - }, - { +dynamic_mapping_schema = { + "type": "object", + "additionalProperties": False, + "required": ["dynamic-mapping"], + "properties": { + "dynamic-mapping": { "type": "object", - "additionalProperties": False, + "required": ["endpoint"], "properties": { - "cleanup-job": attributes_schema, - "cleanup-job-remove": attributes_schema, + "name": {"type": "string"}, + # "endpoint" cannot have http patternProperties constaint as it is a required field + # Constrain is applied in code + "endpoint": {"type": "string"}, + "timeout": {"type": "integer", "minimum": 0}, + "verify_ssl": {"type": "boolean", "default": False}, + "header": {"type": "object", "additionalProperties": False}, + "allow": {"type": "array", "items": {"type": "string"}}, + "require": {"type": "array", "items": {"type": "string"}}, + "ignore": {"type": "array", "items": {"type": "string"}}, }, - }, - { - "type": "object", - "additionalProperties": False, - "properties": {"any-job": attributes_schema, "any-job-remove": attributes_schema}, - }, - ] + } + }, } + +def job_schema(name: str): + return { + "type": "object", + "additionalProperties": False, + "properties": {f"{name}-job": attributes_schema, f"{name}-job-remove": attributes_schema}, + } + + pipeline_gen_schema = { "type": "array", - "items": {"oneOf": [submapping_schema, named_attributes_schema]}, + "items": { + "oneOf": [ + submapping_schema, + dynamic_mapping_schema, + job_schema("any"), + job_schema("build"), + job_schema("cleanup"), + job_schema("copy"), + job_schema("noop"), + job_schema("reindex"), + job_schema("signing"), + ] + }, } core_shared_properties = union_dicts( @@ -141,39 +135,8 @@ } ) -# TODO: Remove in Spack 0.23 -ci_properties = { - "anyOf": [ - { - "type": "object", - "additionalProperties": False, - # "required": ["mappings"], - "properties": union_dicts( - core_shared_properties, {"enable-artifacts-buildcache": {"type": "boolean"}} - ), - }, - { - "type": "object", - "additionalProperties": False, - # "required": ["mappings"], - "properties": union_dicts( - core_shared_properties, {"temporary-storage-url-prefix": {"type": "string"}} - ), - }, - ] -} - #: Properties for inclusion in other schemas -properties: Dict[str, Any] = { - "ci": { - "oneOf": [ - # TODO: Replace with core-shared-properties in Spack 0.23 - ci_properties, - # Allow legacy format under `ci` for `config update ci` - spack.schema.gitlab_ci.gitlab_ci_properties, - ] - } -} +properties: Dict[str, Any] = {"ci": core_shared_properties} #: Full schema with metadata schema = { @@ -183,21 +146,3 @@ "additionalProperties": False, "properties": properties, } - - -def update(data): - import llnl.util.tty as tty - - import spack.ci - import spack.environment as ev - - # Warn if deprecated section is still in the environment - ci_env = ev.active_environment() - if ci_env: - env_config = ci_env.manifest[ev.TOP_LEVEL_KEY] - if "gitlab-ci" in env_config: - tty.die("Error: `gitlab-ci` section detected with `ci`, these are not compatible") - - # Detect if the ci section is using the new pipeline-gen - # If it is, assume it has already been converted - return spack.ci.translate_deprecated_config(data) diff --git a/lib/spack/spack/schema/compilers.py b/lib/spack/spack/schema/compilers.py index 976a9777fcd82d..81460882108c13 100644 --- a/lib/spack/spack/schema/compilers.py +++ b/lib/spack/spack/schema/compilers.py @@ -61,7 +61,10 @@ "target": {"type": "string"}, "alias": {"anyOf": [{"type": "string"}, {"type": "null"}]}, "modules": { - "anyOf": [{"type": "string"}, {"type": "null"}, {"type": "array"}] + "anyOf": [ + {"type": "null"}, + {"type": "array", "items": {"type": "string"}}, + ] }, "implicit_rpaths": implicit_rpaths, "environment": spack.schema.environment.definition, diff --git a/lib/spack/spack/schema/concretizer.py b/lib/spack/spack/schema/concretizer.py index 0b222d923e1b0f..a81962a926b9b0 100644 --- a/lib/spack/spack/schema/concretizer.py +++ b/lib/spack/spack/schema/concretizer.py @@ -33,8 +33,14 @@ "properties": { "type": { "type": "string", - "enum": ["local", "buildcache", "external"], + "enum": [ + "local", + "buildcache", + "external", + "environment", + ], }, + "path": {"type": "string"}, "include": LIST_OF_SPECS, "exclude": LIST_OF_SPECS, }, @@ -72,7 +78,8 @@ "transitive": {"type": "boolean", "default": False}, }, }, - } + }, + "automatic": {"type": "boolean"}, }, }, "duplicates": { @@ -81,6 +88,8 @@ "strategy": {"type": "string", "enum": ["none", "minimal", "full"]} }, }, + "timeout": {"type": "integer", "minimum": 0}, + "error_on_timeout": {"type": "boolean"}, "os_compatible": {"type": "object", "additionalProperties": {"type": "array"}}, }, } diff --git a/lib/spack/spack/schema/env.py b/lib/spack/spack/schema/env.py index 17cf29d4c6c1d2..b75bd231f4d206 100644 --- a/lib/spack/spack/schema/env.py +++ b/lib/spack/spack/schema/env.py @@ -12,7 +12,6 @@ from llnl.util.lang import union_dicts -import spack.schema.gitlab_ci # DEPRECATED import spack.schema.merged from .spec_list import spec_list_schema @@ -20,21 +19,21 @@ #: Top level key in a manifest file TOP_LEVEL_KEY = "spack" +include_concrete = {"type": "array", "default": [], "items": {"type": "string"}} + properties: Dict[str, Any] = { "spack": { "type": "object", "default": {}, "additionalProperties": False, "properties": union_dicts( - # Include deprecated "gitlab-ci" section - spack.schema.gitlab_ci.properties, # merged configuration scope schemas spack.schema.merged.properties, # extra environment schema properties { "include": {"type": "array", "default": [], "items": {"type": "string"}}, "specs": spec_list_schema, - "include_concrete": {"type": "array", "default": [], "items": {"type": "string"}}, + "include_concrete": include_concrete, }, ), } @@ -58,15 +57,6 @@ def update(data): Returns: True if data was changed, False otherwise """ - - import spack.ci - - if "gitlab-ci" in data: - data["ci"] = data.pop("gitlab-ci") - - if "ci" in data: - return spack.ci.translate_deprecated_config(data["ci"]) - # There are not currently any deprecated attributes in this section # that have not been removed return False diff --git a/lib/spack/spack/schema/gitlab_ci.py b/lib/spack/spack/schema/gitlab_ci.py deleted file mode 100644 index a180777acae74d..00000000000000 --- a/lib/spack/spack/schema/gitlab_ci.py +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright 2013-2024 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) - -"""Schema for gitlab-ci.yaml configuration file. - -.. literalinclude:: ../spack/schema/gitlab_ci.py - :lines: 15- -""" -from typing import Any, Dict - -from llnl.util.lang import union_dicts - -image_schema = { - "oneOf": [ - {"type": "string"}, - { - "type": "object", - "properties": { - "name": {"type": "string"}, - "entrypoint": {"type": "array", "items": {"type": "string"}}, - }, - }, - ] -} - -runner_attributes_schema_items = { - "image": image_schema, - "tags": {"type": "array", "items": {"type": "string"}}, - "variables": {"type": "object", "patternProperties": {r"[\w\d\-_\.]+": {"type": "string"}}}, - "before_script": {"type": "array", "items": {"type": "string"}}, - "script": {"type": "array", "items": {"type": "string"}}, - "after_script": {"type": "array", "items": {"type": "string"}}, -} - -runner_selector_schema = { - "type": "object", - "additionalProperties": True, - "required": ["tags"], - "properties": runner_attributes_schema_items, -} - -remove_attributes_schema = { - "type": "object", - "additionalProperties": False, - "required": ["tags"], - "properties": {"tags": {"type": "array", "items": {"type": "string"}}}, -} - - -core_shared_properties = union_dicts( - runner_attributes_schema_items, - { - "bootstrap": { - "type": "array", - "items": { - "anyOf": [ - {"type": "string"}, - { - "type": "object", - "additionalProperties": False, - "required": ["name"], - "properties": { - "name": {"type": "string"}, - "compiler-agnostic": {"type": "boolean", "default": False}, - }, - }, - ] - }, - }, - "match_behavior": {"type": "string", "enum": ["first", "merge"], "default": "first"}, - "mappings": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": False, - "required": ["match"], - "properties": { - "match": {"type": "array", "items": {"type": "string"}}, - "remove-attributes": remove_attributes_schema, - "runner-attributes": runner_selector_schema, - }, - }, - }, - "service-job-attributes": runner_selector_schema, - "signing-job-attributes": runner_selector_schema, - "rebuild-index": {"type": "boolean"}, - "broken-specs-url": {"type": "string"}, - "broken-tests-packages": {"type": "array", "items": {"type": "string"}}, - }, -) - -gitlab_ci_properties = { - "anyOf": [ - { - "type": "object", - "additionalProperties": False, - "required": ["mappings"], - "properties": union_dicts( - core_shared_properties, {"enable-artifacts-buildcache": {"type": "boolean"}} - ), - }, - { - "type": "object", - "additionalProperties": False, - "required": ["mappings"], - "properties": union_dicts( - core_shared_properties, {"temporary-storage-url-prefix": {"type": "string"}} - ), - }, - ] -} - -#: Properties for inclusion in other schemas -properties: Dict[str, Any] = {"gitlab-ci": gitlab_ci_properties} - -#: Full schema with metadata -schema = { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Spack gitlab-ci configuration file schema", - "type": "object", - "additionalProperties": False, - "properties": properties, -} diff --git a/lib/spack/spack/schema/mirrors.py b/lib/spack/spack/schema/mirrors.py index 9a56f1a7e28415..8a61fd5b5344fe 100644 --- a/lib/spack/spack/schema/mirrors.py +++ b/lib/spack/spack/schema/mirrors.py @@ -15,14 +15,42 @@ "url": {"type": "string"}, # todo: replace this with named keys "username" / "password" or "id" / "secret" "access_pair": { - "type": "array", - "items": {"type": ["string", "null"], "minItems": 2, "maxItems": 2}, + "oneOf": [ + { + "type": "array", + "items": {"minItems": 2, "maxItems": 2, "type": ["string", "null"]}, + }, # deprecated + { + "type": "object", + "required": ["secret_variable"], + # Only allow id or id_variable to be set, not both + "oneOf": [{"required": ["id"]}, {"required": ["id_variable"]}], + "properties": { + "id": {"type": "string"}, + "id_variable": {"type": "string"}, + "secret_variable": {"type": "string"}, + }, + }, + ] }, - "access_token": {"type": ["string", "null"]}, "profile": {"type": ["string", "null"]}, "endpoint_url": {"type": ["string", "null"]}, + "access_token": {"type": ["string", "null"]}, # deprecated + "access_token_variable": {"type": ["string", "null"]}, } +connection_ext = { + "deprecatedProperties": [ + { + "names": ["access_token"], + "message": "Use of plain text `access_token` in mirror config is deprecated, use " + "environment variables instead (access_token_variable)", + "error": False, + } + ] +} + + #: Mirror connection inside pull/push keys fetch_and_push = { "anyOf": [ @@ -31,6 +59,7 @@ "type": "object", "additionalProperties": False, "properties": {**connection}, # type: ignore + **connection_ext, # type: ignore }, ] } @@ -49,6 +78,7 @@ "autopush": {"type": "boolean"}, **connection, # type: ignore }, + **connection_ext, # type: ignore } #: Properties for inclusion in other schemas @@ -70,3 +100,28 @@ "additionalProperties": False, "properties": properties, } + + +def update(data): + import jsonschema + + errors = [] + + def check_access_pair(name, section): + if not section or not isinstance(section, dict): + return + + if "access_token" in section and "access_token_variable" in section: + errors.append( + f'{name}: mirror credential "access_token" conflicts with "access_token_variable"' + ) + + # Check all of the sections + for name, section in data.items(): + check_access_pair(name, section) + if isinstance(section, dict): + check_access_pair(name, section.get("fetch")) + check_access_pair(name, section.get("push")) + + if errors: + raise jsonschema.ValidationError("\n".join(errors)) diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py index 92734e9afd5294..a57e1183b43c65 100644 --- a/lib/spack/spack/solver/asp.py +++ b/lib/spack/spack/solver/asp.py @@ -27,7 +27,7 @@ import spack import spack.binary_distribution -import spack.bootstrap.core +import spack.compiler import spack.compilers import spack.concretize import spack.config @@ -53,6 +53,7 @@ from .core import ( AspFunction, + AspVar, NodeArgument, ast_sym, ast_type, @@ -515,6 +516,8 @@ def _compute_specs_from_answer_set(self): best = min(self.answers) opt, _, answer = best for input_spec in self.abstract_specs: + # The specs must be unified to get here, so it is safe to associate any satisfying spec + # with the input. Multiple inputs may be matched to the same concrete spec node = SpecBuilder.make_node(pkg=input_spec.name) if input_spec.virtual: providers = [ @@ -523,12 +526,14 @@ def _compute_specs_from_answer_set(self): node = SpecBuilder.make_node(pkg=providers[0]) candidate = answer.get(node) - if candidate and candidate.build_spec.satisfies(input_spec): - if not candidate.satisfies(input_spec): - tty.warn( - "explicit splice configuration has caused the concretized spec" - f" {candidate} not to satisfy the input spec {input_spec}" - ) + if candidate and candidate.satisfies(input_spec): + self._concrete_specs.append(answer[node]) + self._concrete_specs_by_input[input_spec] = answer[node] + elif candidate and candidate.build_spec.satisfies(input_spec): + tty.warn( + "explicit splice configuration has caused the concretized spec" + f" {candidate} not to satisfy the input spec {input_spec}" + ) self._concrete_specs.append(answer[node]) self._concrete_specs_by_input[input_spec] = answer[node] else: @@ -814,7 +819,7 @@ def solve(self, setup, specs, reuse=None, output=None, control=None, allow_depre solve, and the internal statistics from clingo. """ # avoid circular import - import spack.bootstrap + import spack.bootstrap.core output = output or DEFAULT_OUTPUT_CONFIGURATION timer = spack.util.timer.Timer() @@ -853,6 +858,8 @@ def solve(self, setup, specs, reuse=None, output=None, control=None, allow_depre self.control.load(os.path.join(parent_dir, "libc_compatibility.lp")) else: self.control.load(os.path.join(parent_dir, "os_compatibility.lp")) + if setup.enable_splicing: + self.control.load(os.path.join(parent_dir, "splices.lp")) timer.stop("load") @@ -879,7 +886,22 @@ def on_model(model): solve_kwargs["on_unsat"] = cores.append timer.start("solve") - solve_result = self.control.solve(**solve_kwargs) + time_limit = spack.config.CONFIG.get("concretizer:timeout", -1) + error_on_timeout = spack.config.CONFIG.get("concretizer:error_on_timeout", True) + # Spack uses 0 to set no time limit, clingo API uses -1 + if time_limit == 0: + time_limit = -1 + with self.control.solve(**solve_kwargs, async_=True) as handle: + finished = handle.wait(time_limit) + if not finished: + specs_str = ", ".join(llnl.util.lang.elide_list([str(s) for s in specs], 4)) + header = f"Spack is taking more than {time_limit} seconds to solve for {specs_str}" + if error_on_timeout: + raise UnsatisfiableSpecError(f"{header}, stopping concretization") + warnings.warn(f"{header}, using the best configuration found so far") + handle.cancel() + + solve_result = handle.get() timer.stop("solve") # once done, construct the solve result @@ -887,6 +909,7 @@ def on_model(model): result.satisfiable = solve_result.satisfiable if result.satisfiable: + timer.start("construct_specs") # get the best model builder = SpecBuilder(specs, hash_lookup=setup.reusable_and_possible) min_cost, best_model = min(models) @@ -911,7 +934,8 @@ def on_model(model): # record the possible dependencies in the solve result.possible_dependencies = setup.pkgs - + timer.stop("construct_specs") + timer.stop() elif cores: result.control = self.control result.cores.extend(cores) @@ -1163,6 +1187,9 @@ def __init__(self, tests: bool = False): # list of unique libc specs targeted by compilers (or an educated guess if no compiler) self.libcs: List[spack.spec.Spec] = [] + # If true, we have to load the code for synthesizing splices + self.enable_splicing: bool = spack.config.CONFIG.get("concretizer:splice:automatic") + def pkg_version_rules(self, pkg): """Output declared versions of a package. @@ -1333,6 +1360,10 @@ def pkg_rules(self, pkg, tests): # dependencies self.package_dependencies_rules(pkg) + # splices + if self.enable_splicing: + self.package_splice_rules(pkg) + # virtual preferences self.virtual_preferences( pkg.name, @@ -1433,14 +1464,13 @@ def define_variant( for value in sorted(values): pkg_fact(fn.variant_possible_value(vid, value)) - # when=True means unconditional, so no need for conditional values - if getattr(value, "when", True) is True: + # we're done here for unconditional values + if not isinstance(value, vt.ConditionalValue): continue - # now we have to handle conditional values - quoted_value = spack.parser.quote_if_needed(str(value)) - vstring = f"{name}={quoted_value}" - variant_has_value = spack.spec.Spec(vstring) + # make a spec indicating whether the variant has this conditional value + variant_has_value = spack.spec.Spec() + variant_has_value.variants[name] = spack.variant.AbstractVariant(name, value.value) if value.when: # the conditional value is always "possible", but it imposes its when condition as @@ -1451,10 +1481,12 @@ def define_variant( imposed_spec=value.when, required_name=pkg.name, imposed_name=pkg.name, - msg=f"{pkg.name} variant {name} has value '{quoted_value}' when {value.when}", + msg=f"{pkg.name} variant {name} has value '{value.value}' when {value.when}", ) else: - # We know the value is never allowed statically (when was false), but we can't just + vstring = f"{name}='{value.value}'" + + # We know the value is never allowed statically (when was None), but we can't just # ignore it b/c it could come in as a possible value and we need a good error msg. # So, it's a conflict -- if the value is somehow used, it'll trigger an error. trigger_id = self.condition( @@ -1670,6 +1702,94 @@ def dependency_holds(input_spec, requirements): self.gen.newline() + def _gen_match_variant_splice_constraints( + self, + pkg, + cond_spec: "spack.spec.Spec", + splice_spec: "spack.spec.Spec", + hash_asp_var: "AspVar", + splice_node, + match_variants: List[str], + ): + # If there are no variants to match, no constraints are needed + variant_constraints = [] + for i, variant_name in enumerate(match_variants): + vari_defs = pkg.variant_definitions(variant_name) + # the spliceable config of the package always includes the variant + if vari_defs != [] and any(cond_spec.satisfies(s) for (s, _) in vari_defs): + variant = vari_defs[0][1] + if variant.multi: + continue # cannot automatically match multi-valued variants + value_var = AspVar(f"VariValue{i}") + attr_constraint = fn.attr("variant_value", splice_node, variant_name, value_var) + hash_attr_constraint = fn.hash_attr( + hash_asp_var, "variant_value", splice_spec.name, variant_name, value_var + ) + variant_constraints.append(attr_constraint) + variant_constraints.append(hash_attr_constraint) + return variant_constraints + + def package_splice_rules(self, pkg): + self.gen.h2("Splice rules") + for i, (cond, (spec_to_splice, match_variants)) in enumerate( + sorted(pkg.splice_specs.items()) + ): + with named_spec(cond, pkg.name): + self.version_constraints.add((cond.name, cond.versions)) + self.version_constraints.add((spec_to_splice.name, spec_to_splice.versions)) + hash_var = AspVar("Hash") + splice_node = fn.node(AspVar("NID"), cond.name) + when_spec_attrs = [ + fn.attr(c.args[0], splice_node, *(c.args[2:])) + for c in self.spec_clauses(cond, body=True, required_from=None) + if c.args[0] != "node" + ] + splice_spec_hash_attrs = [ + fn.hash_attr(hash_var, *(c.args)) + for c in self.spec_clauses(spec_to_splice, body=True, required_from=None) + if c.args[0] != "node" + ] + if match_variants is None: + variant_constraints = [] + elif match_variants == "*": + filt_match_variants = set() + for map in pkg.variants.values(): + for k in map: + filt_match_variants.add(k) + filt_match_variants = list(filt_match_variants) + variant_constraints = self._gen_match_variant_splice_constraints( + pkg, cond, spec_to_splice, hash_var, splice_node, filt_match_variants + ) + else: + if any( + v in cond.variants or v in spec_to_splice.variants for v in match_variants + ): + raise Exception( + "Overlap between match_variants and explicitly set variants" + ) + variant_constraints = self._gen_match_variant_splice_constraints( + pkg, cond, spec_to_splice, hash_var, splice_node, match_variants + ) + + rule_head = fn.abi_splice_conditions_hold( + i, splice_node, spec_to_splice.name, hash_var + ) + rule_body_components = ( + [ + # splice_set_fact, + fn.attr("node", splice_node), + fn.installed_hash(spec_to_splice.name, hash_var), + ] + + when_spec_attrs + + splice_spec_hash_attrs + + variant_constraints + ) + rule_body = ",\n ".join(str(r) for r in rule_body_components) + rule = f"{rule_head} :-\n {rule_body}." + self.gen.append(rule) + + self.gen.newline() + def virtual_preferences(self, pkg_name, func): """Call func(vspec, provider, i) for each of pkg's provider prefs.""" config = spack.config.get("packages") @@ -2028,9 +2148,12 @@ def _spec_clauses( for variant_def in variant_defs: self.variant_values_from_specs.add((spec.name, id(variant_def), value)) - clauses.append(f.variant_value(spec.name, vname, value)) if variant.propagate: clauses.append(f.propagate(spec.name, fn.variant_value(vname, value))) + if self.pkg_class(spec.name).has_variant(vname): + clauses.append(f.variant_value(spec.name, vname, value)) + else: + clauses.append(f.variant_value(spec.name, vname, value)) # compiler and compiler version if spec.compiler: @@ -2529,8 +2652,9 @@ def concrete_specs(self): for h, spec in self.reusable_and_possible.explicit_items(): # this indicates that there is a spec like this installed self.gen.fact(fn.installed_hash(spec.name, h)) - # this describes what constraints it imposes on the solve - self.impose(h, spec, body=True) + # indirection layer between hash constraints and imposition to allow for splicing + for pred in self.spec_clauses(spec, body=True, required_from=None): + self.gen.fact(fn.hash_attr(h, *pred.args)) self.gen.newline() # Declare as possible parts of specs that are not in package.py # - Add versions to possible versions @@ -2616,6 +2740,7 @@ def setup( ) for name, info in env.dev_specs.items() ) + specs = tuple(specs) # ensure compatible types to add self.gen.h1("Reusable concrete specs") @@ -3470,6 +3595,14 @@ def consume_facts(self): self._setup.effect_rules() +# This should be a dataclass, but dataclasses don't work on Python 3.6 +class Splice: + def __init__(self, splice_node: NodeArgument, child_name: str, child_hash: str): + self.splice_node = splice_node + self.child_name = child_name + self.child_hash = child_hash + + class SpecBuilder: """Class with actions to rebuild a spec from ASP results.""" @@ -3505,10 +3638,11 @@ def make_node(*, pkg: str) -> NodeArgument: """ return NodeArgument(id="0", pkg=pkg) - def __init__( - self, specs: List[spack.spec.Spec], *, hash_lookup: Optional[ConcreteSpecsByHash] = None - ): + def __init__(self, specs, hash_lookup=None): self._specs: Dict[NodeArgument, spack.spec.Spec] = {} + + # Matches parent nodes to splice node + self._splices: Dict[NodeArgument, List[Splice]] = {} self._result = None self._command_line_specs = specs self._flag_sources: Dict[Tuple[NodeArgument, str], Set[str]] = collections.defaultdict( @@ -3592,16 +3726,8 @@ def external_spec_selected(self, node, idx): def depends_on(self, parent_node, dependency_node, type): dependency_spec = self._specs[dependency_node] - edges = self._specs[parent_node].edges_to_dependencies(name=dependency_spec.name) - edges = [x for x in edges if id(x.spec) == id(dependency_spec)] depflag = dt.flag_from_string(type) - - if not edges: - self._specs[parent_node].add_dependency_edge( - self._specs[dependency_node], depflag=depflag, virtuals=() - ) - else: - edges[0].update_deptypes(depflag=depflag) + self._specs[parent_node].add_dependency_edge(dependency_spec, depflag=depflag, virtuals=()) def virtual_on_edge(self, parent_node, provider_node, virtual): dependencies = self._specs[parent_node].edges_to_dependencies(name=(provider_node.pkg)) @@ -3718,6 +3844,57 @@ def _order_index(flag_group): def deprecated(self, node: NodeArgument, version: str) -> None: tty.warn(f'using "{node.pkg}@{version}" which is a deprecated version') + def splice_at_hash( + self, + parent_node: NodeArgument, + splice_node: NodeArgument, + child_name: str, + child_hash: str, + ): + splice = Splice(splice_node, child_name=child_name, child_hash=child_hash) + self._splices.setdefault(parent_node, []).append(splice) + + def _resolve_automatic_splices(self): + """After all of the specs have been concretized, apply all immediate splices. + + Use reverse topological order to ensure that all dependencies are resolved + before their parents, allowing for maximal sharing and minimal copying. + + """ + fixed_specs = {} + + # create a mapping from dag hash to an integer representing position in reverse topo order. + specs = self._specs.values() + topo_order = list(traverse.traverse_nodes(specs, order="topo", key=traverse.by_dag_hash)) + topo_lookup = {spec.dag_hash(): index for index, spec in enumerate(reversed(topo_order))} + + # iterate over specs, children before parents + for node, spec in sorted(self._specs.items(), key=lambda x: topo_lookup[x[1].dag_hash()]): + immediate = self._splices.get(node, []) + if not immediate and not any( + edge.spec in fixed_specs for edge in spec.edges_to_dependencies() + ): + continue + new_spec = spec.copy(deps=False) + new_spec.build_spec = spec + for edge in spec.edges_to_dependencies(): + depflag = edge.depflag & ~dt.BUILD + if any(edge.spec.dag_hash() == splice.child_hash for splice in immediate): + splice = [s for s in immediate if s.child_hash == edge.spec.dag_hash()][0] + new_spec.add_dependency_edge( + self._specs[splice.splice_node], depflag=depflag, virtuals=edge.virtuals + ) + elif edge.spec in fixed_specs: + new_spec.add_dependency_edge( + fixed_specs[edge.spec], depflag=depflag, virtuals=edge.virtuals + ) + else: + new_spec.add_dependency_edge( + edge.spec, depflag=depflag, virtuals=edge.virtuals + ) + self._specs[node] = new_spec + fixed_specs[spec] = new_spec + @staticmethod def sort_fn(function_tuple) -> Tuple[int, int]: """Ensure attributes are evaluated in the correct order. @@ -3747,7 +3924,6 @@ def build_specs(self, function_tuples): # them here so that directives that build objects (like node and # node_compiler) are called in the right order. self.function_tuples = sorted(set(function_tuples), key=self.sort_fn) - self._specs = {} for name, args in self.function_tuples: if SpecBuilder.ignored_attributes.match(name): @@ -3777,10 +3953,14 @@ def build_specs(self, function_tuples): continue # if we've already gotten a concrete spec for this pkg, - # do not bother calling actions on it + # do not bother calling actions on it except for node_flag_source, + # since node_flag_source is tracking information not in the spec itself + # we also need to keep track of splicing information. spec = self._specs.get(args[0]) if spec and spec.concrete: - continue + do_not_ignore_attrs = ["node_flag_source", "splice_at_hash"] + if name not in do_not_ignore_attrs: + continue action(*args) @@ -3790,7 +3970,7 @@ def build_specs(self, function_tuples): # inject patches -- note that we' can't use set() to unique the # roots here, because the specs aren't complete, and the hash # function will loop forever. - roots = [spec.root for spec in self._specs.values() if not spec.root.installed] + roots = [spec.root for spec in self._specs.values()] roots = dict((id(r), r) for r in roots) for root in roots.values(): spack.spec.Spec.inject_patches_variant(root) @@ -3806,6 +3986,8 @@ def build_specs(self, function_tuples): for root in roots.values(): root._finalize_concretization() + self._resolve_automatic_splices() + for s in self._specs.values(): spack.spec.Spec.ensure_no_deprecated(s) @@ -3820,7 +4002,6 @@ def build_specs(self, function_tuples): ) specs = self.execute_explicit_splices() - return specs def execute_explicit_splices(self): @@ -3829,8 +4010,16 @@ def execute_explicit_splices(self): for splice_set in splice_config: target = splice_set["target"] replacement = spack.spec.Spec(splice_set["replacement"]) - assert replacement.abstract_hash - replacement.replace_hash() + + if not replacement.abstract_hash: + location = getattr( + splice_set["replacement"], "_start_mark", " at unknown line number" + ) + msg = f"Explicit splice replacement '{replacement}' does not include a hash.\n" + msg += f"{location}\n\n" + msg += " Splice replacements must be specified by hash" + raise InvalidSpliceError(msg) + transitive = splice_set.get("transitive", False) splice_triples.append((target, replacement, transitive)) @@ -3841,6 +4030,10 @@ def execute_explicit_splices(self): if target in current_spec: # matches root or non-root # e.g. mvapich2%gcc + + # The first iteration, we need to replace the abstract hash + if not replacement.concrete: + replacement.replace_hash() current_spec = current_spec.splice(replacement, transitive) new_key = NodeArgument(id=key.id, pkg=current_spec.name) specs[new_key] = current_spec @@ -3966,7 +4159,7 @@ def selected_specs(self) -> List[spack.spec.Spec]: return [s for s in self.factory() if self.is_selected(s)] @staticmethod - def from_store(configuration, include, exclude) -> "SpecFilter": + def from_store(configuration, *, include, exclude) -> "SpecFilter": """Constructs a filter that takes the specs from the current store.""" packages = _external_config_with_implicit_externals(configuration) is_reusable = functools.partial(_is_reusable, packages=packages, local=True) @@ -3974,7 +4167,7 @@ def from_store(configuration, include, exclude) -> "SpecFilter": return SpecFilter(factory=factory, is_usable=is_reusable, include=include, exclude=exclude) @staticmethod - def from_buildcache(configuration, include, exclude) -> "SpecFilter": + def from_buildcache(configuration, *, include, exclude) -> "SpecFilter": """Constructs a filter that takes the specs from the configured buildcaches.""" packages = _external_config_with_implicit_externals(configuration) is_reusable = functools.partial(_is_reusable, packages=packages, local=False) @@ -3982,6 +4175,29 @@ def from_buildcache(configuration, include, exclude) -> "SpecFilter": factory=_specs_from_mirror, is_usable=is_reusable, include=include, exclude=exclude ) + @staticmethod + def from_environment(configuration, *, include, exclude, env) -> "SpecFilter": + packages = _external_config_with_implicit_externals(configuration) + is_reusable = functools.partial(_is_reusable, packages=packages, local=True) + factory = functools.partial(_specs_from_environment, env=env) + return SpecFilter(factory=factory, is_usable=is_reusable, include=include, exclude=exclude) + + @staticmethod + def from_environment_included_concrete( + configuration, + *, + include: List[str], + exclude: List[str], + env: ev.Environment, + included_concrete: str, + ) -> "SpecFilter": + packages = _external_config_with_implicit_externals(configuration) + is_reusable = functools.partial(_is_reusable, packages=packages, local=True) + factory = functools.partial( + _specs_from_environment_included_concrete, env=env, included_concrete=included_concrete + ) + return SpecFilter(factory=factory, is_usable=is_reusable, include=include, exclude=exclude) + def _specs_from_store(configuration): store = spack.store.create(configuration) @@ -3999,6 +4215,23 @@ def _specs_from_mirror(): return [] +def _specs_from_environment(env): + """Return all concrete specs from the environment. This includes all included concrete""" + if env: + return [concrete for _, concrete in env.concretized_specs()] + else: + return [] + + +def _specs_from_environment_included_concrete(env, included_concrete): + """Return only concrete specs from the environment included from the included_concrete""" + if env: + assert included_concrete in env.included_concrete_envs + return [concrete for concrete in env.included_specs_by_hash[included_concrete].values()] + else: + return [] + + class ReuseStrategy(enum.Enum): ROOTS = enum.auto() DEPENDENCIES = enum.auto() @@ -4028,6 +4261,12 @@ def __init__(self, configuration: spack.config.Configuration) -> None: SpecFilter.from_buildcache( configuration=self.configuration, include=[], exclude=[] ), + SpecFilter.from_environment( + configuration=self.configuration, + include=[], + exclude=[], + env=ev.active_environment(), # includes all concrete includes + ), ] ) else: @@ -4042,7 +4281,46 @@ def __init__(self, configuration: spack.config.Configuration) -> None: for source in reuse_yaml.get("from", default_sources): include = source.get("include", default_include) exclude = source.get("exclude", default_exclude) - if source["type"] == "local": + if source["type"] == "environment" and "path" in source: + env_dir = ev.as_env_dir(source["path"]) + active_env = ev.active_environment() + if active_env and env_dir in active_env.included_concrete_envs: + # If environment is included as a concrete environment, use the local copy + # of specs in the active environment. + # note: included concrete environments are only updated at concretization + # time, and reuse needs to matchthe included specs. + self.reuse_sources.append( + SpecFilter.from_environment_included_concrete( + self.configuration, + include=include, + exclude=exclude, + env=active_env, + included_concrete=env_dir, + ) + ) + else: + # If the environment is not included as a concrete environment, use the + # current specs from its lockfile. + self.reuse_sources.append( + SpecFilter.from_environment( + self.configuration, + include=include, + exclude=exclude, + env=ev.environment_from_name_or_dir(env_dir), + ) + ) + elif source["type"] == "environment": + # reusing from the current environment implicitly reuses from all of the + # included concrete environments + self.reuse_sources.append( + SpecFilter.from_environment( + self.configuration, + include=include, + exclude=exclude, + env=ev.active_environment(), + ) + ) + elif source["type"] == "local": self.reuse_sources.append( SpecFilter.from_store(self.configuration, include=include, exclude=exclude) ) @@ -4060,7 +4338,6 @@ def reusable_specs(self, specs: List[spack.spec.Spec]) -> List[spack.spec.Spec]: result = [] for reuse_source in self.reuse_sources: result.extend(reuse_source.selected_specs()) - # If we only want to reuse dependencies, remove the root specs if self.reuse_strategy == ReuseStrategy.DEPENDENCIES: result = [spec for spec in result if not any(root in spec for root in specs)] @@ -4091,7 +4368,7 @@ def _check_input_and_extract_concrete_specs(specs): spack.spec.Spec.ensure_valid_variants(s) return reusable - def solve( + def solve_with_stats( self, specs, out=None, @@ -4102,6 +4379,8 @@ def solve( allow_deprecated=False, ): """ + Concretize a set of specs and track the timing and statistics for the solve + Arguments: specs (list): List of ``Spec`` objects to solve for. out: Optionally write the generate ASP program to a file-like object. @@ -4113,15 +4392,22 @@ def solve( setup_only (bool): if True, stop after setup and don't solve (default False). allow_deprecated (bool): allow deprecated version in the solve """ - # Check upfront that the variants are admissible specs = [s.lookup_hash() for s in specs] reusable_specs = self._check_input_and_extract_concrete_specs(specs) reusable_specs.extend(self.selector.reusable_specs(specs)) setup = SpackSolverSetup(tests=tests) output = OutputConfiguration(timers=timers, stats=stats, out=out, setup_only=setup_only) - result, _, _ = self.driver.solve( + return self.driver.solve( setup, specs, reuse=reusable_specs, output=output, allow_deprecated=allow_deprecated ) + + def solve(self, specs, **kwargs): + """ + Convenience function for concretizing a set of specs and ignoring timing + and statistics. Uses the same kwargs as solve_with_stats. + """ + # Check upfront that the variants are admissible + result, _, _ = self.solve_with_stats(specs, **kwargs) return result def solve_in_rounds( @@ -4221,8 +4507,11 @@ def __init__(self, provided, conflicts): super().__init__(msg) - self.provided = provided - # Add attribute expected of the superclass interface self.required = None self.constraint_type = None + self.provided = provided + + +class InvalidSpliceError(spack.error.SpackError): + """For cases in which the splice configuration is invalid.""" diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp index 2195cd6b08b4d1..6010c39d4b4088 100644 --- a/lib/spack/spack/solver/concretize.lp +++ b/lib/spack/spack/solver/concretize.lp @@ -57,6 +57,12 @@ internal_error("provider with no virtual node"). :- provider(PackageNode, _), not attr("node", PackageNode), internal_error("provider with no real node"). +:- node_has_variant(PackageNode, _, _), not attr("node", PackageNode), + internal_error("node has variant for a non-node"). +:- attr("variant_set", PackageNode, _, _), not attr("node", PackageNode), + internal_error("variant_set for a non-node"). +:- variant_is_propagated(PackageNode, _), not attr("node", PackageNode), + internal_error("variant_is_propagated for a non-node"). :- attr("root", node(ID, PackageNode)), ID > min_dupe_id, internal_error("root with a non-minimal duplicate ID"). @@ -423,8 +429,10 @@ imposed_nodes(ConditionID, PackageNode, node(X, A1)) :- imposed_packages(ID, A1), impose(ID, PackageNode), not condition_set(PackageNode, node(_, A1)), internal_error("Imposing constraint outside of condition set"). -:- imposed_packages(ID, A1), impose(ID, PackageNode), not imposed_nodes(ID, PackageNode, node(_, A1)), - internal_error("Imposing constraint outside of imposed_nodes"). +% not sure why, but this error keeps cropping up with --include-concrete environments, trying commenting +% it out -- mengel@fnal.gov +%:- imposed_packages(ID, A1), impose(ID, PackageNode), not imposed_nodes(ID, PackageNode, node(_, A1)), +% internal_error("Imposing constraint outside of imposed_nodes"). % Conditions that hold impose may impose constraints on other specs attr(Name, node(X, A1)) :- impose(ID, PackageNode), imposed_constraint(ID, Name, A1), imposed_nodes(ID, PackageNode, node(X, A1)). @@ -575,7 +583,8 @@ attr("virtual_on_edge", PackageNode, ProviderNode, Virtual) % or used somewhere :- attr("virtual_node", node(_, Virtual)), not attr("virtual_on_incoming_edges", _, Virtual), - not attr("virtual_root", node(_, Virtual)). + not attr("virtual_root", node(_, Virtual)), + internal_error("virtual node does not match incoming edge"). attr("virtual_on_incoming_edges", ProviderNode, Virtual) :- attr("virtual_on_edge", _, ProviderNode, Virtual). @@ -629,7 +638,8 @@ do_not_impose(EffectID, node(X, Package)) virtual_condition_holds(_, PossibleProvider, Virtual), PossibleProvider != ProviderNode, explicitly_requested_root(PossibleProvider), - not explicitly_requested_root(ProviderNode). + not explicitly_requested_root(ProviderNode), + internal_error("If a root can provide a virtual, it must be the provider"). % A package cannot be the actual provider for a virtual if it does not % fulfill the conditions to provide that virtual @@ -772,7 +782,8 @@ required_provider(Provider, Virtual) pkg_fact(Virtual, condition_effect(ConditionID, EffectID)), imposed_constraint(EffectID, "node", Provider). -:- provider(node(Y, Package), node(X, Virtual)), required_provider(Provider, Virtual), Package != Provider. +:- provider(node(Y, Package), node(X, Virtual)), required_provider(Provider, Virtual), Package != Provider, + internal_error("If a provider is required the concretizer must use it"). % TODO: the following choice rule allows the solver to add compiler % flags if their only source is from a requirement. This is overly-specific @@ -852,7 +863,8 @@ variant_defined(PackageNode, Name) :- variant_definition(PackageNode, Name, _). % for two or more variant definitions, this prefers the last one defined. :- node_has_variant(node(NodeID, Package), Name, SelectedVariantID), variant_definition(node(NodeID, Package), Name, VariantID), - VariantID > SelectedVariantID. + VariantID > SelectedVariantID, + internal_error("If the solver picks a variant descriptor it must use that variant descriptor"). % B: Associating applicable package rules with nodes @@ -969,6 +981,7 @@ error(100, "{0} variant '{1}' cannot have values '{2}' and '{3}' as they come fr :- attr("variant_set", node(ID, Package), Variant, Value), not attr("variant_value", node(ID, Package), Variant, Value). + internal_error("If a variant is set to a value it must have that value"). % The rules below allow us to prefer default values for variants % whenever possible. If a variant is set in a spec, or if it is @@ -979,7 +992,7 @@ variant_not_default(node(ID, Package), Variant, Value) % variants set explicitly on the CLI don't count as non-default not attr("variant_set", node(ID, Package), Variant, Value), % variant values forced by propagation don't count as non-default - not propagate(node(ID, Package), variant_value(Variant, Value)), + not propagate(node(ID, Package), variant_value(Variant, Value, _)), % variants set on externals that we could use don't count as non-default % this makes spack prefer to use an external over rebuilding with the % default configuration @@ -991,7 +1004,7 @@ variant_default_not_used(node(ID, Package), Variant, Value) :- variant_default_value(node(ID, Package), Variant, Value), node_has_variant(node(ID, Package), Variant, _), not attr("variant_value", node(ID, Package), Variant, Value), - not propagate(node(ID, Package), variant_value(Variant, _)), + not propagate(node(ID, Package), variant_value(Variant, _, _)), attr("node", node(ID, Package)). % The variant is set in an external spec @@ -1036,10 +1049,14 @@ variant_single_value(PackageNode, Variant) % Propagation semantics %----------------------------------------------------------------------------- +non_default_propagation(variant_value(Name, Value)) :- attr("propagate", RootNode, variant_value(Name, Value)). + % Propagation roots have a corresponding attr("propagate", ...) -propagate(RootNode, PropagatedAttribute) :- attr("propagate", RootNode, PropagatedAttribute). +propagate(RootNode, PropagatedAttribute) :- attr("propagate", RootNode, PropagatedAttribute), not non_default_propagation(PropagatedAttribute). propagate(RootNode, PropagatedAttribute, EdgeTypes) :- attr("propagate", RootNode, PropagatedAttribute, EdgeTypes). +% Special case variants, to inject the source node in the propagated attribute +propagate(RootNode, variant_value(Name, Value, RootNode)) :- attr("propagate", RootNode, variant_value(Name, Value)). % Propagate an attribute along edges to child nodes propagate(ChildNode, PropagatedAttribute) :- @@ -1061,21 +1078,53 @@ propagate(ChildNode, PropagatedAttribute, edge_types(DepType1, DepType2)) :- % If a variant is propagated, and can be accepted, set its value attr("variant_selected", PackageNode, Variant, Value, VariantType, VariantID) :- - propagate(PackageNode, variant_value(Variant, Value)), + propagate(PackageNode, variant_value(Variant, Value, _)), node_has_variant(PackageNode, Variant, VariantID), variant_type(VariantID, VariantType), - variant_possible_value(PackageNode, Variant, Value), - not attr("variant_set", PackageNode, Variant). + variant_possible_value(PackageNode, Variant, Value). % If a variant is propagated, we cannot have extraneous values variant_is_propagated(PackageNode, Variant) :- attr("variant_value", PackageNode, Variant, Value), - propagate(PackageNode, variant_value(Variant, Value)), + propagate(PackageNode, variant_value(Variant, Value, _)), not attr("variant_set", PackageNode, Variant). :- variant_is_propagated(PackageNode, Variant), attr("variant_selected", PackageNode, Variant, Value, _, _), - not propagate(PackageNode, variant_value(Variant, Value)). + not propagate(PackageNode, variant_value(Variant, Value, _)). + +error(100, "{0} and {1} cannot both propagate variant '{2}' to the shared dependency: {3}", + Package1, Package2, Variant, Dependency) :- + % The variant is a singlevalued variant + variant_single_value(node(X, Package1), Variant), + % Dependency is trying to propagate Variant with different values and is not the source package + propagate(node(Z, Dependency), variant_value(Variant, Value1, node(X, Package1))), + propagate(node(Z, Dependency), variant_value(Variant, Value2, node(Y, Package2))), + % Package1 and Package2 and their values are different + Package1 > Package2, Value1 != Value2, + not propagate(node(Z, Dependency), variant_value(Variant, _, node(Z, Dependency))). + +% Cannot propagate the same variant from two different packages if one is a dependency of the other +error(100, "{0} and {1} cannot both propagate variant '{2}'", Package1, Package2, Variant) :- + % The variant is a single-valued variant + variant_single_value(node(X, Package1), Variant), + % Package1 and Package2 and their values are different + Package1 != Package2, Value1 != Value2, + % Package2 is set to propagate the value from Package1 + propagate(node(Y, Package2), variant_value(Variant, Value2, node(X, Package2))), + propagate(node(Y, Package2), variant_value(Variant, Value1, node(X, Package1))), + variant_is_propagated(node(Y, Package2), Variant). + +% Cannot propagate a variant if a different value was set for it in a dependency +error(100, "Cannot propagate the variant '{0}' from the package: {1} because package: {2} is set to exclude it", Variant, Source, Package) :- + % Package has a Variant and Source is propagating Variant + attr("variant_set", node(X, Package), Variant, Value1), + % The packages and values are different + Source != Package, Value1 != Value2, + % The variant is a single-valued variant + variant_single_value(node(X, Package1), Variant), + % A different value is being propagated from somewhere else + propagate(node(X, Package), variant_value(Variant, Value2, node(Y, Source))). %---- % Flags @@ -1402,25 +1451,71 @@ attr("node_flag", PackageNode, NodeFlag) :- attr("node_flag_set", PackageNode, N %----------------------------------------------------------------------------- -% Installed packages +% Installed Packages %----------------------------------------------------------------------------- -% the solver is free to choose at most one installed hash for each package -{ attr("hash", node(ID, Package), Hash) : installed_hash(Package, Hash) } 1 - :- attr("node", node(ID, Package)), internal_error("Package must resolve to at most one hash"). +#defined installed_hash/2. +#defined abi_splice_conditions_hold/4. + +% These are the previously concretized attributes of the installed package as +% a hash. It has the general form: +% hash_attr(Hash, Attribute, PackageName, Args*) +#defined hash_attr/3. +#defined hash_attr/4. +#defined hash_attr/5. +#defined hash_attr/6. +#defined hash_attr/7. + +{ attr("hash", node(ID, PackageName), Hash): installed_hash(PackageName, Hash) } 1 :- + attr("node", node(ID, PackageName)), + internal_error("Package must resolve to at most 1 hash"). % you can't choose an installed hash for a dev spec :- attr("hash", PackageNode, Hash), attr("variant_value", PackageNode, "dev_path", _). - % You can't install a hash, if it is not installed :- attr("hash", node(ID, Package), Hash), not installed_hash(Package, Hash). -% This should be redundant given the constraint above -:- attr("node", PackageNode), 2 { attr("hash", PackageNode, Hash) }. -% if a hash is selected, we impose all the constraints that implies -impose(Hash, PackageNode) :- attr("hash", PackageNode, Hash). +% hash_attrs are versions, but can_splice_attr are usually node_version_satisfies +hash_attr(Hash, "node_version_satisfies", PackageName, Constraint) :- + hash_attr(Hash, "version", PackageName, Version), + pkg_fact(PackageName, version_satisfies(Constraint, Version)). + +% This recovers the exact semantics for hash reuse hash and depends_on are where +% splices are decided, and virtual_on_edge can result in name-changes, which is +% why they are all treated separately. +imposed_constraint(Hash, Attr, PackageName) :- + hash_attr(Hash, Attr, PackageName). +imposed_constraint(Hash, Attr, PackageName, A1) :- + hash_attr(Hash, Attr, PackageName, A1), Attr != "hash". +imposed_constraint(Hash, Attr, PackageName, Arg1, Arg2) :- + hash_attr(Hash, Attr, PackageName, Arg1, Arg2), + Attr != "depends_on", + Attr != "virtual_on_edge". +imposed_constraint(Hash, Attr, PackageName, A1, A2, A3) :- + hash_attr(Hash, Attr, PackageName, A1, A2, A3). +imposed_constraint(Hash, "hash", PackageName, Hash) :- installed_hash(PackageName, Hash). +% Without splicing, we simply recover the exact semantics +imposed_constraint(ParentHash, "hash", ChildName, ChildHash) :- + hash_attr(ParentHash, "hash", ChildName, ChildHash), + ChildHash != ParentHash, + not abi_splice_conditions_hold(_, _, ChildName, ChildHash). + +imposed_constraint(Hash, "depends_on", PackageName, DepName, Type) :- + hash_attr(Hash, "depends_on", PackageName, DepName, Type), + hash_attr(Hash, "hash", DepName, DepHash), + not attr("splice_at_hash", _, _, DepName, DepHash). + +imposed_constraint(Hash, "virtual_on_edge", PackageName, DepName, VirtName) :- + hash_attr(Hash, "virtual_on_edge", PackageName, DepName, VirtName), + not attr("splice_at_hash", _, _, DepName,_). + +% Rules pertaining to attr("splice_at_hash") and abi_splice_conditions_hold will +% be conditionally loaded from splices.lp + +impose(Hash, PackageNode) :- attr("hash", PackageNode, Hash), attr("node", PackageNode). + +% If there is not a hash for a package, we build it. +build(PackageNode) :- attr("node", PackageNode), not concrete(PackageNode). -% if we haven't selected a hash for a package, we'll be building it -build(PackageNode) :- not attr("hash", PackageNode, _), attr("node", PackageNode). % Minimizing builds is tricky. We want a minimizing criterion @@ -1433,6 +1528,7 @@ build(PackageNode) :- not attr("hash", PackageNode, _), attr("node", PackageNode % criteria for built specs -- so that they take precedence over the otherwise % topmost-priority criterion to reuse what is installed. % + % The priority ranges are: % 1000+ Optimizations for concretization errors % 300 - 1000 Highest priority optimizations for valid solutions @@ -1458,12 +1554,10 @@ build_priority(PackageNode, 0) :- not build(PackageNode), attr("node", Package pkg_fact(Package, version_declared(Version, Weight, "installed")), not optimize_for_reuse(). -#defined installed_hash/2. % This statement, which is a hidden feature of clingo, let us avoid cycles in the DAG #edge (A, B) : depends_on(A, B). - %----------------------------------------------------------------- % Optimization to avoid errors %----------------------------------------------------------------- diff --git a/lib/spack/spack/solver/core.py b/lib/spack/spack/solver/core.py index 2530981a21dda6..ba257173a502f1 100644 --- a/lib/spack/spack/solver/core.py +++ b/lib/spack/spack/solver/core.py @@ -44,6 +44,17 @@ def _id(thing: Any) -> Union[str, AspObject]: return f'"{str(thing)}"' +class AspVar(AspObject): + """Represents a variable in an ASP rule, allows for conditionally generating + rules""" + + def __init__(self, name: str): + self.name = name + + def __str__(self) -> str: + return str(self.name) + + @lang.key_ordering class AspFunction(AspObject): """A term in the ASP logic program""" @@ -88,6 +99,8 @@ def _argify(self, arg: Any) -> Any: return clingo().Number(arg) elif isinstance(arg, AspFunction): return clingo().Function(arg.name, [self._argify(x) for x in arg.args], positive=True) + elif isinstance(arg, AspVar): + return clingo().Variable(arg.name) return clingo().String(str(arg)) def symbol(self): diff --git a/lib/spack/spack/solver/display.lp b/lib/spack/spack/solver/display.lp index 675a9d17d278ee..61d96b25b5ac2c 100644 --- a/lib/spack/spack/solver/display.lp +++ b/lib/spack/spack/solver/display.lp @@ -15,7 +15,6 @@ #show attr/4. #show attr/5. #show attr/6. - % names of optimization criteria #show opt_criterion/2. diff --git a/lib/spack/spack/solver/splices.lp b/lib/spack/spack/solver/splices.lp new file mode 100644 index 00000000000000..96762c456c18db --- /dev/null +++ b/lib/spack/spack/solver/splices.lp @@ -0,0 +1,56 @@ +% Copyright 2013-2024 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) + +%============================================================================= +% These rules are conditionally loaded to handle the synthesis of spliced +% packages. +% ============================================================================= +% Consider the concrete spec: +% foo@2.72%gcc@11.4 arch=linux-ubuntu22.04-icelake build_system=autotools ^bar ... +% It will emit the following facts for reuse (below is a subset) +% installed_hash("foo", "xxxyyy") +% hash_attr("xxxyyy", "hash", "foo", "xxxyyy") +% hash_attr("xxxyyy", "version", "foo", "2.72") +% hash_attr("xxxyyy", "node_os", "ubuntu22.04") +% hash_attr("xxxyyy", "hash", "bar", "zzzqqq") +% hash_attr("xxxyyy", "depends_on", "foo", "bar", "link") +% Rules that derive abi_splice_conditions_hold will be generated from +% use of the `can_splice` directive. The will have the following form: +% can_splice("foo@1.0.0+a", when="@1.0.1+a", match_variants=["b"]) ---> +% abi_splice_conditions_hold(0, node(SID, "foo"), "foo", BashHash) :- +% installed_hash("foo", BaseHash), +% attr("node", node(SID, SpliceName)), +% attr("node_version_satisfies", node(SID, "foo"), "1.0.1"), +% hash_attr("hash", "node_version_satisfies", "foo", "1.0.1"), +% attr("variant_value", node(SID, "foo"), "a", "True"), +% hash_attr("hash", "variant_value", "foo", "a", "True"), +% attr("variant_value", node(SID, "foo"), "b", VariVar0), +% hash_attr("hash", "variant_value", "foo", "b", VariVar0), + +% If the splice is valid (i.e. abi_splice_conditions_hold is derived) in the +% dependency of a concrete spec the solver free to choose whether to continue +% with the exact hash semantics by simply imposing the child hash, or introducing +% a spliced node as the dependency instead +{ imposed_constraint(ParentHash, "hash", ChildName, ChildHash) } :- + hash_attr(ParentHash, "hash", ChildName, ChildHash), + abi_splice_conditions_hold(_, node(SID, SpliceName), ChildName, ChildHash). + +attr("splice_at_hash", ParentNode, node(SID, SpliceName), ChildName, ChildHash) :- + attr("hash", ParentNode, ParentHash), + hash_attr(ParentHash, "hash", ChildName, ChildHash), + abi_splice_conditions_hold(_, node(SID, SpliceName), ChildName, ChildHash), + ParentHash != ChildHash, + not imposed_constraint(ParentHash, "hash", ChildName, ChildHash). + +% Names and virtual providers may change when a dependency is spliced in +imposed_constraint(Hash, "dependency_holds", ParentName, SpliceName, Type) :- + hash_attr(Hash, "depends_on", ParentName, DepName, Type), + hash_attr(Hash, "hash", DepName, DepHash), + attr("splice_at_hash", node(ID, ParentName), node(SID, SpliceName), DepName, DepHash). + +imposed_constraint(Hash, "virtual_on_edge", ParentName, SpliceName, VirtName) :- + hash_attr(Hash, "virtual_on_edge", ParentName, DepName, VirtName), + attr("splice_at_hash", node(ID, ParentName), node(SID, SpliceName), DepName, DepHash). + diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 2fe177e19e595c..272926464802d5 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -59,7 +59,7 @@ import re import socket import warnings -from typing import Any, Callable, Dict, List, Match, Optional, Set, Tuple, Union +from typing import Any, Callable, Dict, Iterable, List, Match, Optional, Set, Tuple, Union import archspec.cpu @@ -95,6 +95,8 @@ import spack.version as vn from spack.repo import UnknownPackageError +from .enums import InstallRecordStatus + __all__ = [ "CompilerSpec", "Spec", @@ -877,8 +879,9 @@ def constrain(self, other): # Next, if any flags in other propagate, we force them to propagate in our case shared = list(sorted(set(other[flag_type]) - extra_other)) for x, y in _shared_subset_pair_iterate(shared, sorted(self[flag_type])): - if x.propagate: - y.propagate = True + if y.propagate is True and x.propagate is False: + changed = True + y.propagate = False # TODO: what happens if flag groups with a partial (but not complete) # intersection specify different behaviors for flag propagation? @@ -933,6 +936,7 @@ def _cmp_iter(self): def flags(): for flag in v: yield flag + yield flag.propagate yield flags @@ -963,10 +967,6 @@ def _sort_by_dep_types(dspec: DependencySpec): return dspec.depflag -#: Enum for edge directions -EdgeDirection = lang.enum(parent=0, child=1) - - @lang.lazy_lexicographic_ordering class _EdgeMap(collections.abc.Mapping): """Represent a collection of edges (DependencySpec objects) in the DAG. @@ -980,26 +980,20 @@ class _EdgeMap(collections.abc.Mapping): __slots__ = "edges", "store_by_child" - def __init__(self, store_by=EdgeDirection.child): - # Sanitize input arguments - msg = 'unexpected value for "store_by" argument' - assert store_by in (EdgeDirection.child, EdgeDirection.parent), msg - - #: This dictionary maps a package name to a list of edges - #: i.e. to a list of DependencySpec objects - self.edges = {} - self.store_by_child = store_by == EdgeDirection.child + def __init__(self, store_by_child: bool = True) -> None: + self.edges: Dict[str, List[DependencySpec]] = {} + self.store_by_child = store_by_child - def __getitem__(self, key): + def __getitem__(self, key: str) -> List[DependencySpec]: return self.edges[key] def __iter__(self): return iter(self.edges) - def __len__(self): + def __len__(self) -> int: return len(self.edges) - def add(self, edge: DependencySpec): + def add(self, edge: DependencySpec) -> None: key = edge.spec.name if self.store_by_child else edge.parent.name if key in self.edges: lst = self.edges[key] @@ -1008,8 +1002,8 @@ def add(self, edge: DependencySpec): else: self.edges[key] = [edge] - def __str__(self): - return "{deps: %s}" % ", ".join(str(d) for d in sorted(self.values())) + def __str__(self) -> str: + return f"{{deps: {', '.join(str(d) for d in sorted(self.values()))}}}" def _cmp_iter(self): for item in sorted(itertools.chain.from_iterable(self.edges.values())): @@ -1026,24 +1020,32 @@ def copy(self): return clone - def select(self, parent=None, child=None, depflag: dt.DepFlag = dt.ALL): - """Select a list of edges and return them. + def select( + self, + *, + parent: Optional[str] = None, + child: Optional[str] = None, + depflag: dt.DepFlag = dt.ALL, + virtuals: Optional[List[str]] = None, + ) -> List[DependencySpec]: + """Selects a list of edges and returns them. If an edge: + - Has *any* of the dependency types passed as argument, - - Matches the parent and/or child name, if passed + - Matches the parent and/or child name + - Provides *any* of the virtuals passed as argument + then it is selected. The deptypes argument needs to be a flag, since the method won't convert it for performance reason. Args: - parent (str): name of the parent package - child (str): name of the child package + parent: name of the parent package + child: name of the child package depflag: allowed dependency types in flag form - - Returns: - List of DependencySpec objects + virtuals: list of virtuals on the edge """ if not depflag: return [] @@ -1062,6 +1064,10 @@ def select(self, parent=None, child=None, depflag: dt.DepFlag = dt.ALL): # Filter by allowed dependency types selected = (dep for dep in selected if not dep.depflag or (depflag & dep.depflag)) + # Filter by virtuals + if virtuals is not None: + selected = (dep for dep in selected if any(v in dep.virtuals for v in virtuals)) + return list(selected) def clear(self): @@ -1470,8 +1476,8 @@ def __init__( self.architecture = None self.compiler = None self.compiler_flags = FlagMap(self) - self._dependents = _EdgeMap(store_by=EdgeDirection.parent) - self._dependencies = _EdgeMap(store_by=EdgeDirection.child) + self._dependents = _EdgeMap(store_by_child=False) + self._dependencies = _EdgeMap(store_by_child=True) self.namespace = None # initial values for all spec hash types @@ -1591,7 +1597,7 @@ def _get_dependency(self, name): return deps[0] def edges_from_dependents( - self, name=None, depflag: dt.DepFlag = dt.ALL + self, name=None, depflag: dt.DepFlag = dt.ALL, *, virtuals: Optional[List[str]] = None ) -> List[DependencySpec]: """Return a list of edges connecting this node in the DAG to parents. @@ -1599,20 +1605,25 @@ def edges_from_dependents( Args: name (str): filter dependents by package name depflag: allowed dependency types + virtuals: allowed virtuals """ - return [d for d in self._dependents.select(parent=name, depflag=depflag)] + return [ + d for d in self._dependents.select(parent=name, depflag=depflag, virtuals=virtuals) + ] def edges_to_dependencies( - self, name=None, depflag: dt.DepFlag = dt.ALL + self, name=None, depflag: dt.DepFlag = dt.ALL, *, virtuals: Optional[List[str]] = None ) -> List[DependencySpec]: - """Return a list of edges connecting this node in the DAG - to children. + """Returns a list of edges connecting this node in the DAG to children. Args: name (str): filter dependencies by package name depflag: allowed dependency types + virtuals: allowed virtuals """ - return [d for d in self._dependencies.select(child=name, depflag=depflag)] + return [ + d for d in self._dependencies.select(child=name, depflag=depflag, virtuals=virtuals) + ] @property def edge_attributes(self) -> str: @@ -1635,17 +1646,24 @@ def edge_attributes(self) -> str: return f"[{result}]" def dependencies( - self, name=None, deptype: Union[dt.DepTypes, dt.DepFlag] = dt.ALL + self, + name=None, + deptype: Union[dt.DepTypes, dt.DepFlag] = dt.ALL, + *, + virtuals: Optional[List[str]] = None, ) -> List["Spec"]: - """Return a list of direct dependencies (nodes in the DAG). + """Returns a list of direct dependencies (nodes in the DAG) Args: - name (str): filter dependencies by package name + name: filter dependencies by package name deptype: allowed dependency types + virtuals: allowed virtuals """ if not isinstance(deptype, dt.DepFlag): deptype = dt.canonicalize(deptype) - return [d.spec for d in self.edges_to_dependencies(name, depflag=deptype)] + return [ + d.spec for d in self.edges_to_dependencies(name, depflag=deptype, virtuals=virtuals) + ] def dependents( self, name=None, deptype: Union[dt.DepTypes, dt.DepFlag] = dt.ALL @@ -2055,7 +2073,7 @@ def _lookup_hash(self): # First env, then store, then binary cache matches = ( (active_env.all_matching_specs(self) if active_env else []) - or spack.store.STORE.db.query(self, installed=any) + or spack.store.STORE.db.query(self, installed=InstallRecordStatus.ANY) or spack.binary_distribution.BinaryCacheQuery(True)(self) ) @@ -2185,6 +2203,18 @@ def to_node_dict(self, hash=ht.dag_hash): if params: d["parameters"] = params + if params and not self.concrete: + flag_names = [ + name + for name, flags in self.compiler_flags.items() + if any(x.propagate for x in flags) + ] + d["propagate"] = sorted( + itertools.chain( + [v.name for v in self.variants.values() if v.propagate], flag_names + ) + ) + if self.external: d["external"] = syaml.syaml_dict( [ @@ -2357,16 +2387,10 @@ def node_dict_with_hashes(self, hash=ht.dag_hash): spec is concrete, the full hash is added as well. If 'build' is in the hash_type, the build hash is also added.""" node = self.to_node_dict(hash) + # All specs have at least a DAG hash node[ht.dag_hash.name] = self.dag_hash() - # dag_hash is lazily computed -- but if we write a spec out, we want it - # to be included. This is effectively the last chance we get to compute - # it accurately. - if self.concrete: - # all specs have at least a DAG hash - node[ht.dag_hash.name] = self.dag_hash() - - else: + if not self.concrete: node["concrete"] = False # we can also give them other hash types if we want @@ -2813,7 +2837,7 @@ def ensure_no_deprecated(root): msg += " For each package listed, choose another spec\n" raise SpecDeprecatedError(msg) - def concretize(self, tests: Union[bool, List[str]] = False) -> None: + def concretize(self, tests: Union[bool, Iterable[str]] = False) -> None: """Concretize the current spec. Args: @@ -2892,7 +2916,7 @@ def _mark_concrete(self, value=True): if (not value) and s.concrete and s.installed: continue elif not value: - s.clear_cached_hashes() + s.clear_caches() s._mark_root_concrete(value) def _finalize_concretization(self): @@ -2941,7 +2965,7 @@ def _finalize_concretization(self): for spec in self.traverse(): spec._cached_hash(ht.dag_hash) - def concretized(self, tests=False): + def concretized(self, tests: Union[bool, Iterable[str]] = False) -> "spack.spec.Spec": """This is a non-destructive version of concretize(). First clones, then returns a concrete version of this package @@ -3005,7 +3029,12 @@ def ensure_valid_variants(spec): pkg_variants = pkg_cls.variant_names() # reserved names are variants that may be set on any package # but are not necessarily recorded by the package's class - not_existing = set(spec.variants) - (set(pkg_variants) | set(vt.reserved_names)) + propagate_variants = [name for name, variant in spec.variants.items() if variant.propagate] + + not_existing = set(spec.variants) - ( + set(pkg_variants) | set(vt.reserved_names) | set(propagate_variants) + ) + if not_existing: raise vt.UnknownVariantError( f"No such variant {not_existing} for spec: '{spec}'", list(not_existing) @@ -3032,6 +3061,10 @@ def constrain(self, other, deps=True): raise spack.error.UnsatisfiableSpecError(self, other, "constrain a concrete spec") other = self._autospec(other) + if other.concrete and other.satisfies(self): + self._dup(other) + return True + if other.abstract_hash: if not self.abstract_hash or other.abstract_hash.startswith(self.abstract_hash): self.abstract_hash = other.abstract_hash @@ -3526,8 +3559,8 @@ def _dup(self, other, deps: Union[bool, dt.DepTypes, dt.DepFlag] = True, clearde self.architecture = other.architecture.copy() if other.architecture else None self.compiler = other.compiler.copy() if other.compiler else None if cleardeps: - self._dependents = _EdgeMap(store_by=EdgeDirection.parent) - self._dependencies = _EdgeMap(store_by=EdgeDirection.child) + self._dependents = _EdgeMap(store_by_child=False) + self._dependencies = _EdgeMap(store_by_child=True) self.compiler_flags = other.compiler_flags.copy() self.compiler_flags.spec = self self.variants = other.variants.copy() @@ -4035,7 +4068,7 @@ def format_path( def __str__(self): if self._concrete: - return self.format("{name}{@version}{/hash:7}") + return self.format("{name}{@version}{/hash}") if not self._dependencies: return self.format() @@ -4232,7 +4265,7 @@ def _splice_detach_and_add_dependents(self, replacement, context): for ancestor in ancestors_in_context: # Only set it if it hasn't been spliced before ancestor._build_spec = ancestor._build_spec or ancestor.copy() - ancestor.clear_cached_hashes(ignore=(ht.package_hash.attr,)) + ancestor.clear_caches(ignore=(ht.package_hash.attr,)) for edge in ancestor.edges_to_dependencies(depflag=dt.BUILD): if edge.depflag & ~dt.BUILD: edge.depflag &= ~dt.BUILD @@ -4426,7 +4459,7 @@ def mask_build_deps(in_spec): return spec - def clear_cached_hashes(self, ignore=()): + def clear_caches(self, ignore=()): """ Clears all cached hashes in a Spec, while preserving other properties. """ @@ -4434,7 +4467,9 @@ def clear_cached_hashes(self, ignore=()): if h.attr not in ignore: if hasattr(self, h.attr): setattr(self, h.attr, None) - self._dunder_hash = None + for attr in ("_dunder_hash", "_prefix"): + if attr not in ignore: + setattr(self, attr, None) def __hash__(self): # If the spec is concrete, we leverage the process hash and just use @@ -4510,8 +4545,69 @@ def substitute(self, vspec): # Set the item super().__setitem__(vspec.name, vspec) - def satisfies(self, other): - return all(k in self and self[k].satisfies(other[k]) for k in other) + def partition_variants(self): + non_prop, prop = lang.stable_partition(self.values(), lambda x: not x.propagate) + # Just return the names + non_prop = [x.name for x in non_prop] + prop = [x.name for x in prop] + return non_prop, prop + + def satisfies(self, other: "VariantMap") -> bool: + if self.spec.concrete: + return self._satisfies_when_self_concrete(other) + return self._satisfies_when_self_abstract(other) + + def _satisfies_when_self_concrete(self, other: "VariantMap") -> bool: + non_propagating, propagating = other.partition_variants() + result = all( + name in self and self[name].satisfies(other[name]) for name in non_propagating + ) + if not propagating: + return result + + for node in self.spec.traverse(): + if not all( + node.variants[name].satisfies(other[name]) + for name in propagating + if name in node.variants + ): + return False + return result + + def _satisfies_when_self_abstract(self, other: "VariantMap") -> bool: + other_non_propagating, other_propagating = other.partition_variants() + self_non_propagating, self_propagating = self.partition_variants() + + # First check variants without propagation set + result = all( + name in self_non_propagating + and (self[name].propagate or self[name].satisfies(other[name])) + for name in other_non_propagating + ) + if result is False or (not other_propagating and not self_propagating): + return result + + # Check that self doesn't contradict variants propagated by other + if other_propagating: + for node in self.spec.traverse(): + if not all( + node.variants[name].satisfies(other[name]) + for name in other_propagating + if name in node.variants + ): + return False + + # Check that other doesn't contradict variants propagated by self + if self_propagating: + for node in other.spec.traverse(): + if not all( + node.variants[name].satisfies(self[name]) + for name in self_propagating + if name in node.variants + ): + return False + + return result def intersects(self, other): return all(self[k].intersects(other[k]) for k in other if k in self) @@ -4724,13 +4820,17 @@ def from_node_dict(cls, node): else: spec.compiler = None + propagated_names = node.get("propagate", []) for name, values in node.get("parameters", {}).items(): + propagate = name in propagated_names if name in _valid_compiler_flags: spec.compiler_flags[name] = [] for val in values: - spec.compiler_flags.add_flag(name, val, False) + spec.compiler_flags.add_flag(name, val, propagate) else: - spec.variants[name] = vt.MultiValuedVariant.from_node_dict(name, values) + spec.variants[name] = vt.MultiValuedVariant.from_node_dict( + name, values, propagate=propagate + ) spec.external_path = None spec.external_modules = None diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py index 8b4efcf387b8f2..84949c2e287295 100644 --- a/lib/spack/spack/stage.py +++ b/lib/spack/spack/stage.py @@ -16,6 +16,7 @@ import llnl.string import llnl.util.lang +import llnl.util.symlink import llnl.util.tty as tty from llnl.util.filesystem import ( can_access, diff --git a/lib/spack/spack/store.py b/lib/spack/spack/store.py index 31369531d550ce..abd7d9250007c0 100644 --- a/lib/spack/spack/store.py +++ b/lib/spack/spack/store.py @@ -33,16 +33,12 @@ import spack.error import spack.paths import spack.spec -import spack.store import spack.util.path #: default installation root, relative to the Spack install path DEFAULT_INSTALL_TREE_ROOT = os.path.join(spack.paths.opt_path, "spack") -ConfigurationType = Union["spack.config.Configuration", "llnl.util.lang.Singleton"] - - def parse_install_tree(config_dict): """Parse config settings and return values relevant to the store object. @@ -208,7 +204,7 @@ def __reduce__(self): ) -def create(configuration: ConfigurationType) -> Store: +def create(configuration: spack.config.Configuration) -> Store: """Create a store from the configuration passed as input. Args: @@ -241,7 +237,7 @@ def _create_global() -> Store: #: Singleton store instance -STORE: Union[Store, llnl.util.lang.Singleton] = llnl.util.lang.Singleton(_create_global) +STORE: Store = llnl.util.lang.Singleton(_create_global) # type: ignore def reinitialize(): @@ -308,7 +304,7 @@ def find( matching_specs: List[spack.spec.Spec] = [] errors = [] - query_fn = query_fn or spack.store.STORE.db.query + query_fn = query_fn or STORE.db.query for spec in constraints: current_matches = query_fn(spec, **kwargs) @@ -341,7 +337,7 @@ def specfile_matches(filename: str, **kwargs) -> List["spack.spec.Spec"]: **kwargs: keyword arguments forwarded to "find" """ query = [spack.spec.Spec.from_specfile(filename)] - return spack.store.find(query, **kwargs) + return find(query, **kwargs) def ensure_singleton_created() -> None: diff --git a/lib/spack/spack/subprocess_context.py b/lib/spack/spack/subprocess_context.py index c823e657036fad..507045e42faf5b 100644 --- a/lib/spack/spack/subprocess_context.py +++ b/lib/spack/spack/subprocess_context.py @@ -17,7 +17,6 @@ import multiprocessing import pickle import pydoc -import sys from types import ModuleType import spack.config @@ -27,9 +26,6 @@ import spack.repo import spack.store -_SERIALIZE = sys.platform == "win32" or (sys.version_info >= (3, 8) and sys.platform == "darwin") - - patches = None @@ -56,7 +52,7 @@ def _restore_and_run(self, fn, test_state): fn() def create(self): - test_state = TestState() + test_state = GlobalStateMarshaler() return multiprocessing.Process(target=self._restore_and_run, args=(self.fn, test_state)) @@ -65,49 +61,56 @@ class PackageInstallContext: needs to be transmitted to a child process. """ - def __init__(self, pkg): - if _SERIALIZE: + def __init__(self, pkg, *, ctx=None): + ctx = ctx or multiprocessing.get_context() + self.serialize = ctx.get_start_method() != "fork" + if self.serialize: self.serialized_pkg = serialize(pkg) + self.global_state = GlobalStateMarshaler() self.serialized_env = serialize(spack.environment.active_environment()) else: self.pkg = pkg + self.global_state = None self.env = spack.environment.active_environment() self.spack_working_dir = spack.paths.spack_working_dir - self.test_state = TestState() def restore(self): - self.test_state.restore() spack.paths.spack_working_dir = self.spack_working_dir - env = pickle.load(self.serialized_env) if _SERIALIZE else self.env + env = pickle.load(self.serialized_env) if self.serialize else self.env + # Activating the environment modifies the global configuration, so globals have to + # be restored afterward, in case other modifications were applied on top (e.g. from + # command line) if env: spack.environment.activate(env) + + if self.serialize: + self.global_state.restore() + # Order of operation is important, since the package might be retrieved # from a repo defined within the environment configuration - pkg = pickle.load(self.serialized_pkg) if _SERIALIZE else self.pkg + pkg = pickle.load(self.serialized_pkg) if self.serialize else self.pkg return pkg -class TestState: - """Spack tests may modify state that is normally read from disk in memory; - this object is responsible for properly serializing that state to be - applied to a subprocess. This isn't needed outside of a testing environment - but this logic is designed to behave the same inside or outside of tests. +class GlobalStateMarshaler: + """Class to serialize and restore global state for child processes. + + Spack may modify state that is normally read from disk or command line in memory; + this object is responsible for properly serializing that state to be applied to a subprocess. """ def __init__(self): - if _SERIALIZE: - self.config = spack.config.CONFIG - self.platform = spack.platforms.host - self.test_patches = store_patches() - self.store = spack.store.STORE + self.config = spack.config.CONFIG.ensure_unwrapped() + self.platform = spack.platforms.host + self.test_patches = store_patches() + self.store = spack.store.STORE def restore(self): - if _SERIALIZE: - spack.config.CONFIG = self.config - spack.repo.PATH = spack.repo.create(self.config) - spack.platforms.host = self.platform - spack.store.STORE = self.store - self.test_patches.restore() + spack.config.CONFIG = self.config + spack.repo.PATH = spack.repo.create(self.config) + spack.platforms.host = self.platform + spack.store.STORE = self.store + self.test_patches.restore() class TestPatches: diff --git a/lib/spack/spack/test/abi_splicing.py b/lib/spack/spack/test/abi_splicing.py new file mode 100644 index 00000000000000..d647647797571f --- /dev/null +++ b/lib/spack/spack/test/abi_splicing.py @@ -0,0 +1,247 @@ +# Copyright 2013-2024 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) +""" Test ABI-based splicing of dependencies """ + +from typing import List + +import pytest + +import spack.config +import spack.deptypes as dt +import spack.solver.asp +from spack.installer import PackageInstaller +from spack.spec import Spec + + +class CacheManager: + def __init__(self, specs: List[str]) -> None: + self.req_specs = specs + self.concr_specs: List[Spec] + self.concr_specs = [] + + def __enter__(self): + self.concr_specs = [Spec(s).concretized() for s in self.req_specs] + for s in self.concr_specs: + PackageInstaller([s.package], fake=True, explicit=True).install() + + def __exit__(self, exc_type, exc_val, exc_tb): + for s in self.concr_specs: + s.package.do_uninstall() + + +# MacOS and Windows only work if you pass this function pointer rather than a +# closure +def _mock_has_runtime_dependencies(_x): + return True + + +def _make_specs_non_buildable(specs: List[str]): + output_config = {} + for spec in specs: + output_config[spec] = {"buildable": False} + return output_config + + +@pytest.fixture +def splicing_setup(mutable_database, mock_packages, monkeypatch): + spack.config.set("concretizer:reuse", True) + monkeypatch.setattr( + spack.solver.asp, "_has_runtime_dependencies", _mock_has_runtime_dependencies + ) + + +def _enable_splicing(): + spack.config.set("concretizer:splice", {"automatic": True}) + + +def _has_build_dependency(spec: Spec, name: str): + return any(s.name == name for s in spec.dependencies(None, dt.BUILD)) + + +def test_simple_reuse(splicing_setup): + with CacheManager(["splice-z@1.0.0+compat"]): + spack.config.set("packages", _make_specs_non_buildable(["splice-z"])) + assert Spec("splice-z").concretized().satisfies(Spec("splice-z")) + + +def test_simple_dep_reuse(splicing_setup): + with CacheManager(["splice-z@1.0.0+compat"]): + spack.config.set("packages", _make_specs_non_buildable(["splice-z"])) + assert Spec("splice-h@1").concretized().satisfies(Spec("splice-h@1")) + + +def test_splice_installed_hash(splicing_setup): + cache = [ + "splice-t@1 ^splice-h@1.0.0+compat ^splice-z@1.0.0", + "splice-h@1.0.2+compat ^splice-z@1.0.0", + ] + with CacheManager(cache): + packages_config = _make_specs_non_buildable(["splice-t", "splice-h"]) + spack.config.set("packages", packages_config) + goal_spec = Spec("splice-t@1 ^splice-h@1.0.2+compat ^splice-z@1.0.0") + with pytest.raises(Exception): + goal_spec.concretized() + _enable_splicing() + assert goal_spec.concretized().satisfies(goal_spec) + + +def test_splice_build_splice_node(splicing_setup): + with CacheManager(["splice-t@1 ^splice-h@1.0.0+compat ^splice-z@1.0.0+compat"]): + spack.config.set("packages", _make_specs_non_buildable(["splice-t"])) + goal_spec = Spec("splice-t@1 ^splice-h@1.0.2+compat ^splice-z@1.0.0+compat") + with pytest.raises(Exception): + goal_spec.concretized() + _enable_splicing() + assert goal_spec.concretized().satisfies(goal_spec) + + +def test_double_splice(splicing_setup): + cache = [ + "splice-t@1 ^splice-h@1.0.0+compat ^splice-z@1.0.0+compat", + "splice-h@1.0.2+compat ^splice-z@1.0.1+compat", + "splice-z@1.0.2+compat", + ] + with CacheManager(cache): + freeze_builds_config = _make_specs_non_buildable(["splice-t", "splice-h", "splice-z"]) + spack.config.set("packages", freeze_builds_config) + goal_spec = Spec("splice-t@1 ^splice-h@1.0.2+compat ^splice-z@1.0.2+compat") + with pytest.raises(Exception): + goal_spec.concretized() + _enable_splicing() + assert goal_spec.concretized().satisfies(goal_spec) + + +# The next two tests are mirrors of one another +def test_virtual_multi_splices_in(splicing_setup): + cache = [ + "depends-on-virtual-with-abi ^virtual-abi-1", + "depends-on-virtual-with-abi ^virtual-abi-2", + ] + goal_specs = [ + "depends-on-virtual-with-abi ^virtual-abi-multi abi=one", + "depends-on-virtual-with-abi ^virtual-abi-multi abi=two", + ] + with CacheManager(cache): + spack.config.set("packages", _make_specs_non_buildable(["depends-on-virtual-with-abi"])) + for gs in goal_specs: + with pytest.raises(Exception): + Spec(gs).concretized() + _enable_splicing() + for gs in goal_specs: + assert Spec(gs).concretized().satisfies(gs) + + +def test_virtual_multi_can_be_spliced(splicing_setup): + cache = [ + "depends-on-virtual-with-abi ^virtual-abi-multi abi=one", + "depends-on-virtual-with-abi ^virtual-abi-multi abi=two", + ] + goal_specs = [ + "depends-on-virtual-with-abi ^virtual-abi-1", + "depends-on-virtual-with-abi ^virtual-abi-2", + ] + with CacheManager(cache): + spack.config.set("packages", _make_specs_non_buildable(["depends-on-virtual-with-abi"])) + with pytest.raises(Exception): + for gs in goal_specs: + Spec(gs).concretized() + _enable_splicing() + for gs in goal_specs: + assert Spec(gs).concretized().satisfies(gs) + + +def test_manyvariant_star_matching_variant_splice(splicing_setup): + cache = [ + # can_splice("manyvariants@1.0.0", when="@1.0.1", match_variants="*") + "depends-on-manyvariants ^manyvariants@1.0.0+a+b c=v1 d=v2", + "depends-on-manyvariants ^manyvariants@1.0.0~a~b c=v3 d=v3", + ] + goal_specs = [ + Spec("depends-on-manyvariants ^manyvariants@1.0.1+a+b c=v1 d=v2"), + Spec("depends-on-manyvariants ^manyvariants@1.0.1~a~b c=v3 d=v3"), + ] + with CacheManager(cache): + freeze_build_config = {"depends-on-manyvariants": {"buildable": False}} + spack.config.set("packages", freeze_build_config) + for goal in goal_specs: + with pytest.raises(Exception): + goal.concretized() + _enable_splicing() + for goal in goal_specs: + assert goal.concretized().satisfies(goal) + + +def test_manyvariant_limited_matching(splicing_setup): + cache = [ + # can_splice("manyvariants@2.0.0+a~b", when="@2.0.1~a+b", match_variants=["c", "d"]) + "depends-on-manyvariants@2.0 ^manyvariants@2.0.0+a~b c=v3 d=v2", + # can_splice("manyvariants@2.0.0 c=v1 d=v1", when="@2.0.1+a+b") + "depends-on-manyvariants@2.0 ^manyvariants@2.0.0~a~b c=v1 d=v1", + ] + goal_specs = [ + Spec("depends-on-manyvariants@2.0 ^manyvariants@2.0.1~a+b c=v3 d=v2"), + Spec("depends-on-manyvariants@2.0 ^manyvariants@2.0.1+a+b c=v3 d=v3"), + ] + with CacheManager(cache): + freeze_build_config = {"depends-on-manyvariants": {"buildable": False}} + spack.config.set("packages", freeze_build_config) + for s in goal_specs: + with pytest.raises(Exception): + s.concretized() + _enable_splicing() + for s in goal_specs: + assert s.concretized().satisfies(s) + + +def test_external_splice_same_name(splicing_setup): + cache = [ + "splice-h@1.0.0 ^splice-z@1.0.0+compat", + "splice-t@1.0 ^splice-h@1.0.1 ^splice-z@1.0.1+compat", + ] + packages_yaml = { + "splice-z": {"externals": [{"spec": "splice-z@1.0.2+compat", "prefix": "/usr"}]} + } + goal_specs = [ + Spec("splice-h@1.0.0 ^splice-z@1.0.2"), + Spec("splice-t@1.0 ^splice-h@1.0.1 ^splice-z@1.0.2"), + ] + with CacheManager(cache): + spack.config.set("packages", packages_yaml) + _enable_splicing() + for s in goal_specs: + assert s.concretized().satisfies(s) + + +def test_spliced_build_deps_only_in_build_spec(splicing_setup): + cache = ["splice-t@1.0 ^splice-h@1.0.1 ^splice-z@1.0.0"] + goal_spec = Spec("splice-t@1.0 ^splice-h@1.0.2 ^splice-z@1.0.0") + + with CacheManager(cache): + _enable_splicing() + concr_goal = goal_spec.concretized() + build_spec = concr_goal._build_spec + # Spec has been spliced + assert build_spec is not None + # Build spec has spliced build dependencies + assert _has_build_dependency(build_spec, "splice-h") + assert _has_build_dependency(build_spec, "splice-z") + # Spliced build dependencies are removed + assert len(concr_goal.dependencies(None, dt.BUILD)) == 0 + + +def test_spliced_transitive_dependency(splicing_setup): + cache = ["splice-depends-on-t@1.0 ^splice-h@1.0.1"] + goal_spec = Spec("splice-depends-on-t^splice-h@1.0.2") + + with CacheManager(cache): + spack.config.set("packages", _make_specs_non_buildable(["splice-depends-on-t"])) + _enable_splicing() + concr_goal = goal_spec.concretized() + # Spec has been spliced + assert concr_goal._build_spec is not None + assert concr_goal["splice-t"]._build_spec is not None + assert concr_goal.satisfies(goal_spec) + # Spliced build dependencies are removed + assert len(concr_goal.dependencies(None, dt.BUILD)) == 0 diff --git a/lib/spack/spack/test/build_environment.py b/lib/spack/spack/test/build_environment.py index f435a893a14ac9..dd42d5cb458306 100644 --- a/lib/spack/spack/test/build_environment.py +++ b/lib/spack/spack/test/build_environment.py @@ -15,6 +15,8 @@ from llnl.util.filesystem import HeaderList, LibraryList import spack.build_environment +import spack.compiler +import spack.compilers import spack.config import spack.deptypes as dt import spack.package_base @@ -516,6 +518,30 @@ def test_setting_dtags_based_on_config(config_setting, expected_flag, config, mo assert dtags_to_add.value == expected_flag +def test_module_globals_available_at_setup_dependent_time( + monkeypatch, mutable_config, mock_packages, working_env +): + """Spack built package externaltest depends on an external package + externaltool. Externaltool's setup_dependent_package needs to be able to + access globals on the dependent""" + + def setup_dependent_package(module, dependent_spec): + # Make sure set_package_py_globals was already called on + # dependents + # ninja is always set by the setup context and is not None + dependent_module = dependent_spec.package.module + assert hasattr(dependent_module, "ninja") + assert dependent_module.ninja is not None + dependent_spec.package.test_attr = True + + externaltool = spack.spec.Spec("externaltest").concretized() + monkeypatch.setattr( + externaltool["externaltool"].package, "setup_dependent_package", setup_dependent_package + ) + spack.build_environment.setup_package(externaltool.package, False) + assert externaltool.package.test_attr + + def test_build_jobs_sequential_is_sequential(): assert ( spack.config.determine_number_of_jobs( diff --git a/lib/spack/spack/test/build_systems.py b/lib/spack/spack/test/build_systems.py index 212ec412d3eec9..47173b7dfc71f8 100644 --- a/lib/spack/spack/test/build_systems.py +++ b/lib/spack/spack/test/build_systems.py @@ -15,6 +15,7 @@ import spack.build_systems.autotools import spack.build_systems.cmake +import spack.builder import spack.environment import spack.error import spack.paths @@ -149,7 +150,7 @@ def test_libtool_archive_files_are_deleted_by_default(self, mutable_database): # Assert the libtool archive is not there and we have # a log of removed files - assert not os.path.exists(s.package.builder.libtool_archive_file) + assert not os.path.exists(spack.builder.create(s.package).libtool_archive_file) search_directory = os.path.join(s.prefix, ".spack") libtool_deletion_log = fs.find(search_directory, "removed_la_files.txt", recursive=True) assert libtool_deletion_log @@ -160,11 +161,13 @@ def test_libtool_archive_files_might_be_installed_on_demand( # Install a package that creates a mock libtool archive, # patch its package to preserve the installation s = Spec("libtool-deletion").concretized() - monkeypatch.setattr(type(s.package.builder), "install_libtool_archives", True) + monkeypatch.setattr( + type(spack.builder.create(s.package)), "install_libtool_archives", True + ) PackageInstaller([s.package], explicit=True).install() # Assert libtool archives are installed - assert os.path.exists(s.package.builder.libtool_archive_file) + assert os.path.exists(spack.builder.create(s.package).libtool_archive_file) def test_autotools_gnuconfig_replacement(self, mutable_database): """ @@ -261,7 +264,7 @@ def test_cmake_std_args(self, default_mock_concretization): # Call the function on a CMakePackage instance s = default_mock_concretization("cmake-client") expected = spack.build_systems.cmake.CMakeBuilder.std_args(s.package) - assert s.package.builder.std_cmake_args == expected + assert spack.builder.create(s.package).std_cmake_args == expected # Call it on another kind of package s = default_mock_concretization("mpich") @@ -381,7 +384,9 @@ def test_autotools_args_from_conditional_variant(default_mock_concretization): is not met. When this is the case, the variant is not set in the spec.""" s = default_mock_concretization("autotools-conditional-variants-test") assert "example" not in s.variants - assert len(s.package.builder._activate_or_not("example", "enable", "disable")) == 0 + assert ( + len(spack.builder.create(s.package)._activate_or_not("example", "enable", "disable")) == 0 + ) def test_autoreconf_search_path_args_multiple(default_mock_concretization, tmpdir): diff --git a/lib/spack/spack/test/cc.py b/lib/spack/spack/test/cc.py index 4a394680f480b8..f65bef9b0161d4 100644 --- a/lib/spack/spack/test/cc.py +++ b/lib/spack/spack/test/cc.py @@ -199,7 +199,7 @@ def check_args(cc, args, expected): """ with set_env(SPACK_TEST_COMMAND="dump-args"): cc_modified_args = cc(*args, output=str).strip().split("\n") - assert expected == cc_modified_args + assert cc_modified_args == expected def check_args_contents(cc, args, must_contain, must_not_contain): @@ -272,6 +272,43 @@ def test_ld_mode(wrapper_environment): assert dump_mode(ld, ["foo.o", "bar.o", "baz.o", "-o", "foo", "-Wl,-rpath,foo"]) == "ld" +def test_ld_unterminated_rpath(wrapper_environment): + check_args( + ld, + ["foo.o", "bar.o", "baz.o", "-o", "foo", "-rpath"], + ["ld", "--disable-new-dtags", "foo.o", "bar.o", "baz.o", "-o", "foo", "-rpath"], + ) + + +def test_xlinker_unterminated_rpath(wrapper_environment): + check_args( + cc, + ["foo.o", "bar.o", "baz.o", "-o", "foo", "-Xlinker", "-rpath"], + [real_cc] + + target_args + + [ + "-Wl,--disable-new-dtags", + "foo.o", + "bar.o", + "baz.o", + "-o", + "foo", + "-Xlinker", + "-rpath", + ], + ) + + +def test_wl_unterminated_rpath(wrapper_environment): + check_args( + cc, + ["foo.o", "bar.o", "baz.o", "-o", "foo", "-Wl,-rpath"], + [real_cc] + + target_args + + ["-Wl,--disable-new-dtags", "foo.o", "bar.o", "baz.o", "-o", "foo", "-Wl,-rpath"], + ) + + def test_ld_flags(wrapper_environment, wrapper_flags): check_args( ld, diff --git a/lib/spack/spack/test/cmd/bootstrap.py b/lib/spack/spack/test/cmd/bootstrap.py index 888f823c55b4fa..03421ede7725b4 100644 --- a/lib/spack/spack/test/cmd/bootstrap.py +++ b/lib/spack/spack/test/cmd/bootstrap.py @@ -170,7 +170,7 @@ def test_remove_and_add_a_source(mutable_config): assert not sources # Add it back and check we restored the initial state - _bootstrap("add", "github-actions", "$spack/share/spack/bootstrap/github-actions-v0.5") + _bootstrap("add", "github-actions", "$spack/share/spack/bootstrap/github-actions-v0.6") sources = spack.bootstrap.core.bootstrapping_sources() assert len(sources) == 1 diff --git a/lib/spack/spack/test/cmd/ci.py b/lib/spack/spack/test/cmd/ci.py index 40a5285cd15e57..bc50ca683f7000 100644 --- a/lib/spack/spack/test/cmd/ci.py +++ b/lib/spack/spack/test/cmd/ci.py @@ -2,11 +2,11 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import filecmp import json import os import pathlib import shutil +from io import BytesIO from typing import NamedTuple import jsonschema @@ -17,6 +17,7 @@ import spack import spack.binary_distribution import spack.ci as ci +import spack.cmd import spack.cmd.ci import spack.environment as ev import spack.hash_types as ht @@ -26,7 +27,6 @@ import spack.util.spack_yaml as syaml from spack.cmd.ci import FAILED_CREATE_BUILDCACHE_CODE from spack.schema.buildcache_spec import schema as specfile_schema -from spack.schema.ci import schema as ci_schema from spack.schema.database_index import schema as db_idx_schema from spack.spec import Spec @@ -196,7 +196,7 @@ def test_ci_generate_with_env(ci_generate_test, tmp_path, mock_binary_index): - matrix: - [$old-gcc-pkgs] mirrors: - some-mirror: {mirror_url} + buildcache-destination: {mirror_url} ci: pipeline-gen: - submapping: @@ -238,7 +238,9 @@ def test_ci_generate_with_env(ci_generate_test, tmp_path, mock_binary_index): assert "rebuild-index" in yaml_contents rebuild_job = yaml_contents["rebuild-index"] - assert rebuild_job["script"][0] == f"spack buildcache update-index --keys {mirror_url}" + assert ( + rebuild_job["script"][0] == f"spack buildcache update-index --keys {mirror_url.as_uri()}" + ) assert rebuild_job["custom_attribute"] == "custom!" assert "variables" in yaml_contents @@ -248,31 +250,28 @@ def test_ci_generate_with_env(ci_generate_test, tmp_path, mock_binary_index): def test_ci_generate_with_env_missing_section(ci_generate_test, tmp_path, mock_binary_index): """Make sure we get a reasonable message if we omit gitlab-ci section""" - _, _, output = ci_generate_test( - f"""\ + env_yaml = f"""\ spack: specs: - archive-files mirrors: - some-mirror: {tmp_path / 'ci-mirror'} -""", - fail_on_error=False, - ) - assert "Environment does not have `ci` a configuration" in output + buildcache-destination: {tmp_path / 'ci-mirror'} +""" + expect = "Environment does not have a `ci` configuration" + with pytest.raises(ci.SpackCIError, match=expect): + ci_generate_test(env_yaml) def test_ci_generate_with_cdash_token(ci_generate_test, tmp_path, mock_binary_index, monkeypatch): """Make sure we it doesn't break if we configure cdash""" monkeypatch.setenv("SPACK_CDASH_AUTH_TOKEN", "notreallyatokenbutshouldnotmatter") - backup_file = tmp_path / "backup-ci.yml" spack_yaml_content = f"""\ spack: specs: - archive-files mirrors: - some-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: - enable-artifacts-buildcache: True pipeline-gen: - submapping: - match: @@ -287,16 +286,15 @@ def test_ci_generate_with_cdash_token(ci_generate_test, tmp_path, mock_binary_in project: Not used site: Nothing """ - spack_yaml, original_file, output = ci_generate_test( - spack_yaml_content, "--copy-to", str(backup_file) - ) + spack_yaml, original_file, output = ci_generate_test(spack_yaml_content) + yaml_contents = syaml.load(original_file.read_text()) - # That fake token should still have resulted in being unable to + # That fake token should have resulted in being unable to # register build group with cdash, but the workload should # still have been generated. assert "Problem populating buildgroup" in output - assert backup_file.exists() - assert filecmp.cmp(str(original_file), str(backup_file)) + expected_keys = ["rebuild-index", "stages", "variables", "workflow"] + assert all([key in yaml_contents.keys() for key in expected_keys]) def test_ci_generate_with_custom_settings( @@ -311,7 +309,7 @@ def test_ci_generate_with_custom_settings( specs: - archive-files mirrors: - some-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - submapping: @@ -386,9 +384,8 @@ def test_ci_generate_pkg_with_deps(ci_generate_test, tmp_path, ci_base_environme specs: - flatten-deps mirrors: - some-mirror: {tmp_path / 'ci-mirror'} + buildcache-destination: {tmp_path / 'ci-mirror'} ci: - enable-artifacts-buildcache: True pipeline-gen: - submapping: - match: @@ -421,13 +418,8 @@ def test_ci_generate_pkg_with_deps(ci_generate_test, tmp_path, ci_base_environme def test_ci_generate_for_pr_pipeline(ci_generate_test, tmp_path, monkeypatch): - """Test that PR pipelines do not include a final stage job for - rebuilding the mirror index, even if that job is specifically - configured. - """ + """Test generation of a PR pipeline with disabled rebuild-index""" monkeypatch.setenv("SPACK_PIPELINE_TYPE", "spack_pull_request") - monkeypatch.setenv("SPACK_PR_BRANCH", "fake-test-branch") - monkeypatch.setattr(spack.ci, "SHARED_PR_MIRROR_URL", f"{tmp_path / 'shared-pr-mirror'}") spack_yaml, outputfile, _ = ci_generate_test( f"""\ @@ -435,9 +427,8 @@ def test_ci_generate_for_pr_pipeline(ci_generate_test, tmp_path, monkeypatch): specs: - flatten-deps mirrors: - some-mirror: {tmp_path / 'ci-mirror'} + buildcache-destination: {tmp_path / 'ci-mirror'} ci: - enable-artifacts-buildcache: True pipeline-gen: - submapping: - match: @@ -473,7 +464,7 @@ def test_ci_generate_with_external_pkg(ci_generate_test, tmp_path, monkeypatch): - archive-files - externaltest mirrors: - some-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - submapping: @@ -539,7 +530,6 @@ def create_rebuild_env( broken_specs_path = scratch / "naughty-list" mirror_url = mirror_dir.as_uri() - temp_storage_url = (tmp_path / "temp-storage").as_uri() ci_job_url = "https://some.domain/group/project/-/jobs/42" ci_pipeline_url = "https://some.domain/group/project/-/pipelines/7" @@ -554,11 +544,10 @@ def create_rebuild_env( specs: - $packages mirrors: - test-mirror: {mirror_dir} + buildcache-destination: {mirror_dir} ci: broken-specs-url: {broken_specs_path.as_uri()} broken-tests-packages: {json.dumps([pkg_name] if broken_tests else [])} - temporary-storage-url-prefix: {temp_storage_url} pipeline-gen: - submapping: - match: @@ -710,7 +699,7 @@ def test_ci_require_signing( specs: - archive-files mirrors: - test-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - submapping: @@ -758,9 +747,8 @@ def test_ci_nothing_to_rebuild( specs: - $packages mirrors: - test-mirror: {mirror_url} + buildcache-destination: {mirror_url} ci: - enable-artifacts-buildcache: true pipeline-gen: - submapping: - match: @@ -787,103 +775,20 @@ def test_ci_nothing_to_rebuild( "SPACK_JOB_LOG_DIR": "log_dir", "SPACK_JOB_REPRO_DIR": "repro_dir", "SPACK_JOB_TEST_DIR": "test_dir", - "SPACK_LOCAL_MIRROR_DIR": str(mirror_dir), "SPACK_CONCRETE_ENV_DIR": str(tmp_path), "SPACK_JOB_SPEC_DAG_HASH": env.concrete_roots()[0].dag_hash(), "SPACK_JOB_SPEC_PKG_NAME": "archive-files", "SPACK_COMPILER_ACTION": "NONE", - "SPACK_REMOTE_MIRROR_URL": mirror_url, } ) - def fake_dl_method(spec, *args, **kwargs): - print("fake download buildcache {0}".format(spec.name)) - - monkeypatch.setattr(spack.binary_distribution, "download_single_spec", fake_dl_method) - ci_out = ci_cmd("rebuild", output=str) assert "No need to rebuild archive-files" in ci_out - assert "fake download buildcache archive-files" in ci_out env_cmd("deactivate") -def test_ci_generate_mirror_override( - tmp_path: pathlib.Path, - mutable_mock_env_path, - install_mockery, - mock_fetch, - mock_binary_index, - ci_base_environment, -): - """Ensure that protected pipelines using --buildcache-destination do not - skip building specs that are not in the override mirror when they are - found in the main mirror.""" - os.environ.update({"SPACK_PIPELINE_TYPE": "spack_protected_branch"}) - mirror_url = (tmp_path / "mirror").as_uri() - - with open(tmp_path / "spack.yaml", "w") as f: - f.write( - f""" -spack: - definitions: - - packages: [patchelf] - specs: - - $packages - mirrors: - test-mirror: {mirror_url} - ci: - pipeline-gen: - - submapping: - - match: - - patchelf - build-job: - tags: - - donotcare - image: donotcare - - cleanup-job: - tags: - - nonbuildtag - image: basicimage -""" - ) - - with working_dir(tmp_path): - env_cmd("create", "test", "./spack.yaml") - first_ci_yaml = str(tmp_path / ".gitlab-ci-1.yml") - second_ci_yaml = str(tmp_path / ".gitlab-ci-2.yml") - with ev.read("test"): - install_cmd() - buildcache_cmd("push", "-u", mirror_url, "patchelf") - buildcache_cmd("update-index", mirror_url, output=str) - - # This generate should not trigger a rebuild of patchelf, since it's in - # the main mirror referenced in the environment. - ci_cmd("generate", "--check-index-only", "--output-file", first_ci_yaml) - - # Because we used a mirror override (--buildcache-destination) on a - # spack protected pipeline, we expect to only look in the override - # mirror for the spec, and thus the patchelf job should be generated in - # this pipeline - ci_cmd( - "generate", - "--check-index-only", - "--output-file", - second_ci_yaml, - "--buildcache-destination", - (tmp_path / "does-not-exist").as_uri(), - ) - - with open(first_ci_yaml) as fd1: - first_yaml = fd1.read() - assert "no-specs-to-rebuild" in first_yaml - - with open(second_ci_yaml) as fd2: - second_yaml = fd2.read() - assert "no-specs-to-rebuild" not in second_yaml - - @pytest.mark.disable_clean_stage_check def test_push_to_build_cache( tmp_path: pathlib.Path, @@ -910,9 +815,8 @@ def test_push_to_build_cache( specs: - $packages mirrors: - test-mirror: {mirror_url} + buildcache-destination: {mirror_url} ci: - enable-artifacts-buildcache: True pipeline-gen: - submapping: - match: @@ -1048,7 +952,7 @@ def test_ci_generate_override_runner_attrs( - flatten-deps - pkg-a mirrors: - some-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - match_behavior: {match_behavior} @@ -1188,7 +1092,7 @@ def test_ci_rebuild_index( specs: - callpath mirrors: - test-mirror: {mirror_url} + buildcache-destination: {mirror_url} ci: pipeline-gen: - submapping: @@ -1244,7 +1148,7 @@ def fake_stack_changed(env_path, rev1="HEAD^", rev2="HEAD"): - archive-files - callpath mirrors: - some-mirror: {tmp_path / 'ci-mirror'} + buildcache-destination: {tmp_path / 'ci-mirror'} ci: pipeline-gen: - build-job: @@ -1307,101 +1211,15 @@ def test_ci_subcommands_without_mirror( with ev.read("test"): # Check the 'generate' subcommand - output = ci_cmd( - "generate", - "--output-file", - str(tmp_path / ".gitlab-ci.yml"), - output=str, - fail_on_error=False, - ) - assert "spack ci generate requires an env containing a mirror" in output + expect = "spack ci generate requires a mirror named 'buildcache-destination'" + with pytest.raises(ci.SpackCIError, match=expect): + ci_cmd("generate", "--output-file", str(tmp_path / ".gitlab-ci.yml")) # Also check the 'rebuild-index' subcommand output = ci_cmd("rebuild-index", output=str, fail_on_error=False) assert "spack ci rebuild-index requires an env containing a mirror" in output -def test_ensure_only_one_temporary_storage(): - """Make sure 'gitlab-ci' section of env does not allow specification of - both 'enable-artifacts-buildcache' and 'temporary-storage-url-prefix'.""" - gitlab_ci_template = """ - ci: - {0} - pipeline-gen: - - submapping: - - match: - - notcheckedhere - build-job: - tags: - - donotcare -""" - - enable_artifacts = "enable-artifacts-buildcache: True" - temp_storage = "temporary-storage-url-prefix: file:///temp/mirror" - specify_both = f"{enable_artifacts}\n {temp_storage}" - - specify_neither = "" - - # User can specify "enable-artifacts-buildcache" (boolean) - yaml_obj = syaml.load(gitlab_ci_template.format(enable_artifacts)) - jsonschema.validate(yaml_obj, ci_schema) - - # User can also specify "temporary-storage-url-prefix" (string) - yaml_obj = syaml.load(gitlab_ci_template.format(temp_storage)) - jsonschema.validate(yaml_obj, ci_schema) - - # However, specifying both should fail to validate - yaml_obj = syaml.load(gitlab_ci_template.format(specify_both)) - with pytest.raises(jsonschema.ValidationError): - jsonschema.validate(yaml_obj, ci_schema) - - # Specifying neither should be fine too, as neither of these properties - # should be required - yaml_obj = syaml.load(gitlab_ci_template.format(specify_neither)) - jsonschema.validate(yaml_obj, ci_schema) - - -def test_ci_generate_temp_storage_url(ci_generate_test, tmp_path, mock_binary_index): - """Verify correct behavior when using temporary-storage-url-prefix""" - _, outputfile, _ = ci_generate_test( - f"""\ -spack: - specs: - - archive-files - mirrors: - some-mirror: {(tmp_path / "ci-mirror").as_uri()} - ci: - temporary-storage-url-prefix: {(tmp_path / "temp-mirror").as_uri()} - pipeline-gen: - - submapping: - - match: - - archive-files - build-job: - tags: - - donotcare - image: donotcare - - cleanup-job: - custom_attribute: custom! -""" - ) - yaml_contents = syaml.load(outputfile.read_text()) - - assert "cleanup" in yaml_contents - - cleanup_job = yaml_contents["cleanup"] - assert cleanup_job["custom_attribute"] == "custom!" - assert "script" in cleanup_job - - cleanup_task = cleanup_job["script"][0] - assert cleanup_task.startswith("spack -d mirror destroy") - - assert "stages" in yaml_contents - stages = yaml_contents["stages"] - # Cleanup job should be 2nd to last, just before rebuild-index - assert "stage" in cleanup_job - assert cleanup_job["stage"] == stages[-2] - - def test_ci_generate_read_broken_specs_url( tmp_path: pathlib.Path, mutable_mock_env_path, @@ -1438,7 +1256,7 @@ def test_ci_generate_read_broken_specs_url( - flatten-deps - pkg-a mirrors: - some-mirror: {(tmp_path / "ci-mirror").as_uri()} + buildcache-destination: {(tmp_path / "ci-mirror").as_uri()} ci: broken-specs-url: "{broken_specs_url}" pipeline-gen: @@ -1483,9 +1301,8 @@ def test_ci_generate_external_signing_job(ci_generate_test, tmp_path, monkeypatc specs: - archive-files mirrors: - some-mirror: {(tmp_path / "ci-mirror").as_uri()} + buildcache-destination: {(tmp_path / "ci-mirror").as_uri()} ci: - temporary-storage-url-prefix: {(tmp_path / "temp-mirror").as_uri()} pipeline-gen: - submapping: - match: @@ -1540,7 +1357,7 @@ def test_ci_reproduce( specs: - $packages mirrors: - test-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - submapping: @@ -1671,106 +1488,6 @@ def test_cmd_first_line(): assert spack.cmd.first_line(doc) == first -legacy_spack_yaml_contents = """ -spack: - definitions: - - old-gcc-pkgs: - - archive-files - - callpath - # specify ^openblas-with-lapack to ensure that builtin.mock repo flake8 - # package (which can also provide lapack) is not chosen, as it violates - # a package-level check which requires exactly one fetch strategy (this - # is apparently not an issue for other tests that use it). - - hypre@0.2.15 ^openblas-with-lapack - specs: - - matrix: - - [$old-gcc-pkgs] - mirrors: - test-mirror: {mirror_url} - {key}: - match_behavior: first - mappings: - - match: - - arch=test-debian6-core2 - runner-attributes: - tags: - - donotcare - image: donotcare - - match: - - arch=test-debian6-m1 - runner-attributes: - tags: - - donotcare - image: donotcare - service-job-attributes: - image: donotcare - tags: [donotcare] - cdash: - build-group: Not important - url: https://my.fake.cdash - project: Not used - site: Nothing -""" - - -@pytest.mark.regression("36409") -def test_gitlab_ci_deprecated( - tmp_path: pathlib.Path, - mutable_mock_env_path, - install_mockery, - monkeypatch, - ci_base_environment, - mock_binary_index, -): - mirror_url = (tmp_path / "ci-mirror").as_uri() - with open(tmp_path / "spack.yaml", "w") as f: - f.write(legacy_spack_yaml_contents.format(mirror_url=mirror_url, key="gitlab-ci")) - - with working_dir(tmp_path): - with ev.Environment("."): - ci_cmd("generate", "--output-file", "generated-pipeline.yaml") - - with open("generated-pipeline.yaml") as f: - yaml_contents = syaml.load(f) - - assert "stages" in yaml_contents - assert len(yaml_contents["stages"]) == 5 - assert yaml_contents["stages"][0] == "stage-0" - assert yaml_contents["stages"][4] == "stage-rebuild-index" - - assert "rebuild-index" in yaml_contents - rebuild_job = yaml_contents["rebuild-index"] - expected = f"spack buildcache update-index --keys {mirror_url}" - assert rebuild_job["script"][0] == expected - - assert "variables" in yaml_contents - assert "SPACK_ARTIFACTS_ROOT" in yaml_contents["variables"] - artifacts_root = yaml_contents["variables"]["SPACK_ARTIFACTS_ROOT"] - assert artifacts_root == "jobs_scratch_dir" - - -@pytest.mark.regression("36045") -def test_gitlab_ci_update( - tmp_path: pathlib.Path, - mutable_mock_env_path, - install_mockery, - monkeypatch, - ci_base_environment, - mock_binary_index, -): - with open(tmp_path / "spack.yaml", "w") as f: - f.write( - legacy_spack_yaml_contents.format(mirror_url=(tmp_path / "mirror").as_uri(), key="ci") - ) - - env_cmd("update", "-y", str(tmp_path)) - - with open(tmp_path / "spack.yaml") as f: - yaml_contents = syaml.load(f) - ci_root = yaml_contents["spack"]["ci"] - assert "pipeline-gen" in ci_root - - def test_gitlab_config_scopes(ci_generate_test, tmp_path): """Test pipeline generation with real configs included""" configs_path = os.path.join(spack_paths.share_path, "gitlab", "cloud_pipelines", "configs") @@ -1784,7 +1501,7 @@ def test_gitlab_config_scopes(ci_generate_test, tmp_path): specs: - flatten-deps mirrors: - some-mirror: {tmp_path / "ci-mirror"} + buildcache-destination: {tmp_path / "ci-mirror"} ci: pipeline-gen: - build-job: @@ -1846,3 +1563,91 @@ def test_ci_generate_mirror_config( pipeline_doc = syaml.load(f) assert fst not in pipeline_doc["rebuild-index"]["script"][0] assert snd in pipeline_doc["rebuild-index"]["script"][0] + + +def dynamic_mapping_setup(tmpdir): + filename = str(tmpdir.join("spack.yaml")) + with open(filename, "w") as f: + f.write( + """\ +spack: + specs: + - pkg-a + mirrors: + buildcache-destination: https://my.fake.mirror + ci: + pipeline-gen: + - dynamic-mapping: + endpoint: https://fake.spack.io/mapper + require: ["variables"] + ignore: ["ignored_field"] + allow: ["variables", "retry"] +""" + ) + + spec_a = Spec("pkg-a") + spec_a.concretize() + + return ci.get_job_name(spec_a) + + +def test_ci_dynamic_mapping_empty( + tmpdir, + working_env, + mutable_mock_env_path, + install_mockery, + mock_packages, + monkeypatch, + ci_base_environment, +): + # The test will always return an empty dictionary + def fake_dyn_mapping_urlopener(*args, **kwargs): + return BytesIO("{}".encode()) + + monkeypatch.setattr(ci, "_dyn_mapping_urlopener", fake_dyn_mapping_urlopener) + + _ = dynamic_mapping_setup(tmpdir) + with tmpdir.as_cwd(): + env_cmd("create", "test", "./spack.yaml") + outputfile = str(tmpdir.join(".gitlab-ci.yml")) + + with ev.read("test"): + output = ci_cmd("generate", "--output-file", outputfile) + assert "Response missing required keys: ['variables']" in output + + +def test_ci_dynamic_mapping_full( + tmpdir, + working_env, + mutable_mock_env_path, + install_mockery, + mock_packages, + monkeypatch, + ci_base_environment, +): + # The test will always return an empty dictionary + def fake_dyn_mapping_urlopener(*args, **kwargs): + return BytesIO( + json.dumps( + {"variables": {"MY_VAR": "hello"}, "ignored_field": 0, "unallowed_field": 0} + ).encode() + ) + + monkeypatch.setattr(ci, "_dyn_mapping_urlopener", fake_dyn_mapping_urlopener) + + label = dynamic_mapping_setup(tmpdir) + with tmpdir.as_cwd(): + env_cmd("create", "test", "./spack.yaml") + outputfile = str(tmpdir.join(".gitlab-ci.yml")) + + with ev.read("test"): + ci_cmd("generate", "--output-file", outputfile) + + with open(outputfile) as of: + pipeline_doc = syaml.load(of.read()) + assert label in pipeline_doc + job = pipeline_doc[label] + + assert job.get("variables", {}).get("MY_VAR") == "hello" + assert "ignored_field" not in job + assert "unallowed_field" not in job diff --git a/lib/spack/spack/test/cmd/deprecate.py b/lib/spack/spack/test/cmd/deprecate.py index 3bb84fce7d8ef3..89e07bd04bb84e 100644 --- a/lib/spack/spack/test/cmd/deprecate.py +++ b/lib/spack/spack/test/cmd/deprecate.py @@ -7,7 +7,7 @@ import spack.spec import spack.store -from spack.database import InstallStatuses +from spack.enums import InstallRecordStatus from spack.main import SpackCommand install = SpackCommand("install") @@ -26,7 +26,7 @@ def test_deprecate(mock_packages, mock_archive, mock_fetch, install_mockery): deprecate("-y", "libelf@0.8.10", "libelf@0.8.13") non_deprecated = spack.store.STORE.db.query() - all_available = spack.store.STORE.db.query(installed=any) + all_available = spack.store.STORE.db.query(installed=InstallRecordStatus.ANY) assert all_available == all_installed assert non_deprecated == spack.store.STORE.db.query("libelf@0.8.13") @@ -56,7 +56,7 @@ def test_deprecate_install(mock_packages, mock_archive, mock_fetch, install_mock deprecate("-y", "-i", "libelf@0.8.10", "libelf@0.8.13") non_deprecated = spack.store.STORE.db.query() - deprecated = spack.store.STORE.db.query(installed=InstallStatuses.DEPRECATED) + deprecated = spack.store.STORE.db.query(installed=InstallRecordStatus.DEPRECATED) assert deprecated == to_deprecate assert len(non_deprecated) == 1 assert non_deprecated[0].satisfies("libelf@0.8.13") @@ -75,8 +75,8 @@ def test_deprecate_deps(mock_packages, mock_archive, mock_fetch, install_mockery deprecate("-y", "-d", "libdwarf@20130207", "libdwarf@20130729") non_deprecated = spack.store.STORE.db.query() - all_available = spack.store.STORE.db.query(installed=any) - deprecated = spack.store.STORE.db.query(installed=InstallStatuses.DEPRECATED) + all_available = spack.store.STORE.db.query(installed=InstallRecordStatus.ANY) + deprecated = spack.store.STORE.db.query(installed=InstallRecordStatus.DEPRECATED) assert all_available == all_installed assert sorted(all_available) == sorted(deprecated + non_deprecated) @@ -96,7 +96,9 @@ def test_uninstall_deprecated(mock_packages, mock_archive, mock_fetch, install_m uninstall("-y", "libelf@0.8.10") - assert spack.store.STORE.db.query() == spack.store.STORE.db.query(installed=any) + assert spack.store.STORE.db.query() == spack.store.STORE.db.query( + installed=InstallRecordStatus.ANY + ) assert spack.store.STORE.db.query() == non_deprecated @@ -116,7 +118,7 @@ def test_deprecate_already_deprecated(mock_packages, mock_archive, mock_fetch, i deprecate("-y", "libelf@0.8.10", "libelf@0.8.13") non_deprecated = spack.store.STORE.db.query() - all_available = spack.store.STORE.db.query(installed=any) + all_available = spack.store.STORE.db.query(installed=InstallRecordStatus.ANY) assert len(non_deprecated) == 2 assert len(all_available) == 3 @@ -143,7 +145,7 @@ def test_deprecate_deprecator(mock_packages, mock_archive, mock_fetch, install_m deprecate("-y", "libelf@0.8.12", "libelf@0.8.13") non_deprecated = spack.store.STORE.db.query() - all_available = spack.store.STORE.db.query(installed=any) + all_available = spack.store.STORE.db.query(installed=InstallRecordStatus.ANY) assert len(non_deprecated) == 1 assert len(all_available) == 3 diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py index d1d35e6f5e0cb4..099e6306ac507f 100644 --- a/lib/spack/spack/test/cmd/env.py +++ b/lib/spack/spack/test/cmd/env.py @@ -9,6 +9,7 @@ import pathlib import shutil from argparse import Namespace +from typing import Any, Dict, Optional import pytest @@ -74,7 +75,7 @@ def setup_combined_multiple_env(): env("create", "test1") test1 = ev.read("test1") with test1: - add("zlib") + add("mpich@1.0") test1.concretize() test1.write() @@ -116,6 +117,99 @@ def check_viewdir_removal(viewdir): ) == ["projections.yaml"] +def test_env_track_nonexistant_path_fails(capfd): + with pytest.raises(spack.main.SpackCommandError): + env("track", "path/does/not/exist") + + out, _ = capfd.readouterr() + assert "doesn't contain an environment" in out + + +def test_env_track_existing_env_fails(capfd): + env("create", "track_test") + + with pytest.raises(spack.main.SpackCommandError): + env("track", "--name", "track_test", ev.environment_dir_from_name("track_test")) + + out, _ = capfd.readouterr() + assert "environment named track_test already exists" in out + + +def test_env_track_valid(tmp_path): + with fs.working_dir(str(tmp_path)): + # create an independent environment + env("create", "-d", ".") + + # test tracking an environment in known store + env("track", "--name", "test1", ".") + + # test removing environment to ensure independent isn't deleted + env("rm", "-y", "test1") + + assert os.path.isfile("spack.yaml") + + +def test_env_untrack_valid(tmp_path): + with fs.working_dir(str(tmp_path)): + # create an independent environment + env("create", "-d", ".") + + # test tracking an environment in known store + env("track", "--name", "test_untrack", ".") + env("untrack", "--yes-to-all", "test_untrack") + + # check that environment was sucessfully untracked + out = env("ls") + assert "test_untrack" not in out + + +def test_env_untrack_invalid_name(): + # test untracking an environment that doesn't exist + env_name = "invalid_enviornment_untrack" + + out = env("untrack", env_name) + + assert f"Environment '{env_name}' does not exist" in out + + +def test_env_untrack_when_active(tmp_path, capfd): + env_name = "test_untrack_active" + + with fs.working_dir(str(tmp_path)): + # create an independent environment + env("create", "-d", ".") + + # test tracking an environment in known store + env("track", "--name", env_name, ".") + + active_env = ev.read(env_name) + with active_env: + with pytest.raises(spack.main.SpackCommandError): + env("untrack", "--yes-to-all", env_name) + + # check that environment could not be untracked while active + out, _ = capfd.readouterr() + assert f"'{env_name}' can't be untracked while activated" in out + + env("untrack", "-f", env_name) + out = env("ls") + assert env_name not in out + + +def test_env_untrack_managed(tmp_path, capfd): + env_name = "test_untrack_managed" + + # create an managed environment + env("create", env_name) + + with pytest.raises(spack.main.SpackCommandError): + env("untrack", env_name) + + # check that environment could not be untracked while active + out, _ = capfd.readouterr() + assert f"'{env_name}' is not a tracked env" in out + + def test_add(): e = ev.create("test") e.add("mpileaks") @@ -127,6 +221,7 @@ def test_change_match_spec(): e = ev.read("test") with e: + add("mpileaks@2.1") add("mpileaks@2.2") @@ -401,14 +496,17 @@ def test_env_install_single_spec(install_mockery, mock_fetch): @pytest.mark.parametrize("unify", [True, False, "when_possible"]) -def test_env_install_include_concrete_env(unify, install_mockery, mock_fetch): +def test_env_install_include_concrete_env(unify, install_mockery, mock_fetch, mutable_config): test1, test2, combined = setup_combined_multiple_env() + combined.unify = unify + if not unify: + combined.manifest.set_default_view(False) + + combined.add("mpileaks") combined.concretize() combined.write() - combined.unify = unify - with combined: install() @@ -422,6 +520,14 @@ def test_env_install_include_concrete_env(unify, install_mockery, mock_fetch): assert test1_roots == combined_included_roots[test1.path] assert test2_roots == combined_included_roots[test2.path] + mpileaks = combined.specs_by_hash[combined.concretized_order[0]] + if unify: + assert mpileaks["mpi"].dag_hash() in test1_roots + assert mpileaks["libelf"].dag_hash() in test2_roots + else: + # check that unification is not by accident + assert mpileaks["mpi"].dag_hash() not in test1_roots + def test_env_roots_marked_explicit(install_mockery, mock_fetch): install = SpackCommand("install") @@ -676,7 +782,7 @@ def test_force_remove_included_env(): rm_output = env("remove", "-f", "-y", "test") list_output = env("list") - assert '"test" is being used by environment "combined_env"' in rm_output + assert "'test' is used by environment 'combined_env'" in rm_output assert "test" not in list_output @@ -1869,7 +1975,7 @@ def test_env_include_concrete_envs_lockfile(): def test_env_include_concrete_add_env(): test1, test2, combined = setup_combined_multiple_env() - # crete new env & crecretize + # create new env & concretize env("create", "new") new_env = ev.read("new") with new_env: @@ -1921,6 +2027,116 @@ def test_env_include_concrete_remove_env(): assert test2.path not in lockfile_as_dict["include_concrete"].keys() +def configure_reuse(reuse_mode, combined_env) -> Optional[ev.Environment]: + override_env = None + _config: Dict[Any, Any] = {} + if reuse_mode == "true": + _config = {"concretizer": {"reuse": True}} + elif reuse_mode == "from_environment": + _config = {"concretizer": {"reuse": {"from": [{"type": "environment"}]}}} + elif reuse_mode == "from_environment_test1": + _config = {"concretizer": {"reuse": {"from": [{"type": "environment", "path": "test1"}]}}} + elif reuse_mode == "from_environment_external_test": + # Create a new environment called external_test that enables the "debug" + # The default is "~debug" + env("create", "external_test") + override_env = ev.read("external_test") + with override_env: + add("mpich@1.0 +debug") + override_env.concretize() + override_env.write() + + # Reuse from the environment that is not included. + # Specify the requirement for the debug variant. By default this would concretize to use + # mpich@3.0 but with include concrete the mpich@1.0 +debug version from the + # "external_test" environment will be used. + _config = { + "concretizer": {"reuse": {"from": [{"type": "environment", "path": "external_test"}]}}, + "packages": {"mpich": {"require": ["+debug"]}}, + } + elif reuse_mode == "from_environment_raise": + _config = { + "concretizer": {"reuse": {"from": [{"type": "environment", "path": "not-a-real-env"}]}} + } + # Disable unification in these tests to avoid confusing reuse due to unification using an + # include concrete spec vs reuse due to the reuse configuration + _config["concretizer"].update({"unify": False}) + + combined_env.manifest.configuration.update(_config) + combined_env.manifest.changed = True + combined_env.write() + + return override_env + + +@pytest.mark.parametrize( + "reuse_mode", + [ + "true", + "from_environment", + "from_environment_test1", + "from_environment_external_test", + "from_environment_raise", + ], +) +def test_env_include_concrete_reuse(monkeypatch, reuse_mode): + + # The mock packages do not use the gcc-runtime + def mock_has_runtime_dependencies(*args, **kwargs): + return True + + monkeypatch.setattr( + spack.solver.asp, "_has_runtime_dependencies", mock_has_runtime_dependencies + ) + # The default mpi version is 3.x provided by mpich in the mock repo. + # This test verifies that concretizing with an included concrete + # environment with "concretizer:reuse:true" the included + # concrete spec overrides the default with mpi@1.0. + test1, _, combined = setup_combined_multiple_env() + + # Set the reuse mode for the environment + override_env = configure_reuse(reuse_mode, combined) + if override_env: + # If there is an override environment (ie. testing reuse with + # an external environment) update it here. + test1 = override_env + + # Capture the test1 specs included by combined + test1_specs_by_hash = test1.specs_by_hash + + try: + # Add mpileaks to the combined environment + with combined: + add("mpileaks") + combined.concretize() + comb_specs_by_hash = combined.specs_by_hash + + # create reference env with mpileaks that does not use reuse + # This should concretize to the default version of mpich (3.0) + env("create", "new") + ref_env = ev.read("new") + with ref_env: + add("mpileaks") + ref_env.concretize() + ref_specs_by_hash = ref_env.specs_by_hash + + # Ensure that the mpich used by the mpileaks is the mpich from the reused test environment + comb_mpileaks_spec = [s for s in comb_specs_by_hash.values() if s.name == "mpileaks"] + test1_mpich_spec = [s for s in test1_specs_by_hash.values() if s.name == "mpich"] + assert len(comb_mpileaks_spec) == 1 + assert len(test1_mpich_spec) == 1 + assert comb_mpileaks_spec[0]["mpich"].dag_hash() == test1_mpich_spec[0].dag_hash() + + # None of the references specs (using mpich@3) reuse specs from test1. + # This tests that the reuse is not happening coincidently + assert not any([s in test1_specs_by_hash for s in ref_specs_by_hash]) + + # Make sure the raise tests raises + assert "raise" not in reuse_mode + except ev.SpackEnvironmentError: + assert "raise" in reuse_mode + + @pytest.mark.parametrize("unify", [True, False, "when_possible"]) def test_env_include_concrete_env_reconcretized(unify): """Double check to make sure that concrete_specs for the local specs is empty @@ -4117,13 +4333,13 @@ def test_spack_package_ids_variable(tmpdir, mock_packages): # Include in Makefile and create target that depend on SPACK_PACKAGE_IDS with open(makefile_path, "w") as f: f.write( - r""" + """ all: post-install include include.mk example/post-install/%: example/install/% - $(info post-install: $(HASH)) # noqa: W191,E101 +\t$(info post-install: $(HASH)) # noqa: W191,E101 post-install: $(addprefix example/post-install/,$(example/SPACK_PACKAGE_IDS)) """ diff --git a/lib/spack/spack/test/cmd/find.py b/lib/spack/spack/test/cmd/find.py index fa8299f2abb450..5398dff46918d4 100644 --- a/lib/spack/spack/test/cmd/find.py +++ b/lib/spack/spack/test/cmd/find.py @@ -14,10 +14,14 @@ import spack.cmd as cmd import spack.cmd.find import spack.environment as ev +import spack.repo import spack.store import spack.user_environment as uenv +from spack.enums import InstallRecordStatus from spack.main import SpackCommand from spack.spec import Spec +from spack.test.conftest import create_test_repo +from spack.test.utilities import SpackCommandArgs from spack.util.pattern import Bunch find = SpackCommand("find") @@ -70,11 +74,11 @@ def test_query_arguments(): q_args = query_arguments(args) assert "installed" in q_args - assert "known" in q_args + assert "predicate_fn" in q_args assert "explicit" in q_args - assert q_args["installed"] == ["installed"] - assert q_args["known"] is any - assert q_args["explicit"] is any + assert q_args["installed"] == InstallRecordStatus.INSTALLED + assert q_args["predicate_fn"] is None + assert q_args["explicit"] is None assert "start_date" in q_args assert "end_date" not in q_args assert q_args["install_tree"] == "all" @@ -453,3 +457,140 @@ def test_environment_with_version_range_in_compiler_doesnt_fail(tmp_path): with test_environment: output = find() assert "zlib%gcc@12.1.0" in output + + +_pkga = ( + "a0", + """\ +class A0(Package): + version("1.2") + version("1.1") + + depends_on("b0") + depends_on("c0") +""", +) + + +_pkgb = ( + "b0", + """\ +class B0(Package): + version("1.2") + version("1.1") +""", +) + + +_pkgc = ( + "c0", + """\ +class C0(Package): + version("1.2") + version("1.1") + + tags = ["tag0", "tag1"] +""", +) + + +_pkgd = ( + "d0", + """\ +class D0(Package): + version("1.2") + version("1.1") + + depends_on("c0") + depends_on("e0") +""", +) + + +_pkge = ( + "e0", + """\ +class E0(Package): + tags = ["tag1", "tag2"] + + version("1.2") + version("1.1") +""", +) + + +@pytest.fixture +def _create_test_repo(tmpdir, mutable_config): + r""" + a0 d0 + / \ / \ + b0 c0 e0 + """ + yield create_test_repo(tmpdir, [_pkga, _pkgb, _pkgc, _pkgd, _pkge]) + + +@pytest.fixture +def test_repo(_create_test_repo, monkeypatch, mock_stage): + with spack.repo.use_repositories(_create_test_repo) as mock_repo_path: + yield mock_repo_path + + +def test_find_concretized_not_installed( + mutable_mock_env_path, install_mockery, mock_fetch, test_repo, mock_archive +): + """Test queries against installs of specs against fake repo. + + Given A, B, C, D, E, create an environment and install A. + Add and concretize (but do not install) D. + Test a few queries after force uninstalling a dependency of A (but not + A itself). + """ + add = SpackCommand("add") + concretize = SpackCommand("concretize") + uninstall = SpackCommand("uninstall") + + def _query(_e, *args): + return spack.cmd.find._find_query(SpackCommandArgs("find")(*args), _e) + + def _nresults(_qresult): + return len(_qresult[0]), len(_qresult[1]) + + env("create", "test") + with ev.read("test") as e: + install("--fake", "--add", "a0") + + assert _nresults(_query(e)) == (3, 0) + assert _nresults(_query(e, "--explicit")) == (1, 0) + + add("d0") + concretize("--reuse") + + # At this point d0 should use existing c0, but d/e + # are not installed in the env + + # --explicit, --deprecated, --start-date, etc. are all + # filters on records, and therefore don't apply to + # concretized-but-not-installed results + assert _nresults(_query(e, "--explicit")) == (1, 2) + + assert _nresults(_query(e)) == (3, 2) + assert _nresults(_query(e, "-c", "d0")) == (0, 1) + + uninstall("-f", "-y", "b0") + + # b0 is now missing (it is not installed, but has an + # installed parent) + + assert _nresults(_query(e)) == (2, 3) + # b0 is "double-counted" here: it meets the --missing + # criteria, and also now qualifies as a + # concretized-but-not-installed spec + assert _nresults(_query(e, "--missing")) == (3, 3) + assert _nresults(_query(e, "--only-missing")) == (1, 3) + + # Tags are not attached to install records, so they + # can modify the concretized-but-not-installed results + + assert _nresults(_query(e, "--tag=tag0")) == (1, 0) + assert _nresults(_query(e, "--tag=tag1")) == (1, 1) + assert _nresults(_query(e, "--tag=tag2")) == (0, 1) diff --git a/lib/spack/spack/test/cmd/init_py_functions.py b/lib/spack/spack/test/cmd/init_py_functions.py index 4dc000edb9434d..d7245c6ecce824 100644 --- a/lib/spack/spack/test/cmd/init_py_functions.py +++ b/lib/spack/spack/test/cmd/init_py_functions.py @@ -4,10 +4,17 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import pytest +import spack.config +import spack.environment as ev +import spack.error +import spack.solver.asp as asp +import spack.store from spack.cmd import ( CommandNameError, PythonNameError, cmd_name, + matching_specs_from_env, + parse_specs, python_name, require_cmd_name, require_python_name, @@ -34,3 +41,99 @@ def test_require_cmd_name(): with pytest.raises(CommandNameError): require_cmd_name("okey_dokey") require_cmd_name(cmd_name("okey_dokey")) + + +@pytest.mark.parametrize( + "unify,spec_strs,error", + [ + # single spec + (True, ["zmpi"], None), + (False, ["mpileaks"], None), + # multiple specs, some from hash some from file + (True, ["zmpi", "mpileaks^zmpi", "libelf"], None), + (True, ["mpileaks^zmpi", "mpileaks^mpich", "libelf"], spack.error.SpecError), + (False, ["mpileaks^zmpi", "mpileaks^mpich", "libelf"], None), + ], +) +def test_special_cases_concretization_parse_specs( + unify, spec_strs, error, monkeypatch, mutable_config, mutable_database, tmpdir +): + """Test that special cases in parse_specs(concretize=True) bypass solver""" + + # monkeypatch to ensure we do not call the actual concretizer + def _fail(*args, **kwargs): + assert False + + monkeypatch.setattr(asp.SpackSolverSetup, "setup", _fail) + + spack.config.set("concretizer:unify", unify) + + args = [f"/{spack.store.STORE.db.query(s)[0].dag_hash()}" for s in spec_strs] + if len(args) > 1: + # We convert the last one to a specfile input + filename = tmpdir.join("spec.json") + spec = parse_specs(args[-1], concretize=True)[0] + with open(filename, "w") as f: + spec.to_json(f) + args[-1] = str(filename) + + if error: + with pytest.raises(error): + parse_specs(args, concretize=True) + else: + # assertion error from monkeypatch above if test fails + parse_specs(args, concretize=True) + + +@pytest.mark.parametrize( + "unify,spec_strs,error", + [ + # single spec + (True, ["zmpi"], None), + (False, ["mpileaks"], None), + # multiple specs, some from hash some from file + (True, ["zmpi", "mpileaks^zmpi", "libelf"], None), + (True, ["mpileaks^zmpi", "mpileaks^mpich", "libelf"], spack.error.SpecError), + (False, ["mpileaks^zmpi", "mpileaks^mpich", "libelf"], None), + ], +) +def test_special_cases_concretization_matching_specs_from_env( + unify, + spec_strs, + error, + monkeypatch, + mutable_config, + mutable_database, + tmpdir, + mutable_mock_env_path, +): + """Test that special cases in parse_specs(concretize=True) bypass solver""" + + # monkeypatch to ensure we do not call the actual concretizer + def _fail(*args, **kwargs): + assert False + + monkeypatch.setattr(asp.SpackSolverSetup, "setup", _fail) + + spack.config.set("concretizer:unify", unify) + + ev.create("test") + env = ev.read("test") + + args = [f"/{spack.store.STORE.db.query(s)[0].dag_hash()}" for s in spec_strs] + if len(args) > 1: + # We convert the last one to a specfile input + filename = tmpdir.join("spec.json") + spec = parse_specs(args[-1], concretize=True)[0] + with open(filename, "w") as f: + spec.to_json(f) + args[-1] = str(filename) + + with env: + specs = parse_specs(args, concretize=False) + if error: + with pytest.raises(error): + matching_specs_from_env(specs) + else: + # assertion error from monkeypatch above if test fails + matching_specs_from_env(specs) diff --git a/lib/spack/spack/test/cmd/install.py b/lib/spack/spack/test/cmd/install.py index 13721b2a0d52e6..445f376b1b41e4 100644 --- a/lib/spack/spack/test/cmd/install.py +++ b/lib/spack/spack/test/cmd/install.py @@ -906,7 +906,7 @@ def test_cdash_configure_warning(tmpdir, mock_fetch, install_mockery, capfd): specfile = "./spec.json" with open(specfile, "w") as f: f.write(spec.to_json()) - + print(spec.to_json()) install("--log-file=cdash_reports", "--log-format=cdash", specfile) # Verify Configure.xml exists with expected contents. report_dir = tmpdir.join("cdash_reports") diff --git a/lib/spack/spack/test/cmd/mirror.py b/lib/spack/spack/test/cmd/mirror.py index 2a67bc2e1432ed..ee827c05547e8d 100644 --- a/lib/spack/spack/test/cmd/mirror.py +++ b/lib/spack/spack/test/cmd/mirror.py @@ -17,6 +17,7 @@ import spack.version from spack.main import SpackCommand, SpackCommandError +config = SpackCommand("config") mirror = SpackCommand("mirror") env = SpackCommand("env") add = SpackCommand("add") @@ -181,20 +182,122 @@ def test_mirror_crud(mutable_config, capsys): output = mirror("remove", "mirror") assert "Removed mirror" in output - # Test S3 connection info id/key - mirror( - "add", - "--s3-access-key-id", - "foo", - "--s3-access-key-secret", - "bar", - "mirror", - "s3://spack-public", - ) + # Test S3 connection info token as variable + mirror("add", "--s3-access-token-variable", "aaaaaazzzzz", "mirror", "s3://spack-public") output = mirror("remove", "mirror") assert "Removed mirror" in output + def do_add_set_seturl_access_pair( + id_arg, secret_arg, mirror_name="mirror", mirror_url="s3://spack-public" + ): + # Test S3 connection info id/key + output = mirror("add", id_arg, "foo", secret_arg, "bar", mirror_name, mirror_url) + if "variable" not in secret_arg: + assert ( + f"Configuring mirror secrets as plain text with {secret_arg} is deprecated. " + in output + ) + + output = config("blame", "mirrors") + assert all([x in output for x in ("foo", "bar", mirror_name, mirror_url)]) + # Mirror access_pair deprecation warning should not be in blame output + assert "support for plain text secrets" not in output + + output = mirror("set", id_arg, "foo_set", secret_arg, "bar_set", mirror_name) + if "variable" not in secret_arg: + assert "support for plain text secrets" in output + output = config("blame", "mirrors") + assert all([x in output for x in ("foo_set", "bar_set", mirror_name, mirror_url)]) + if "variable" not in secret_arg: + output = mirror( + "set", id_arg, "foo_set", secret_arg + "-variable", "bar_set_var", mirror_name + ) + assert "support for plain text secrets" not in output + output = config("blame", "mirrors") + assert all( + [x in output for x in ("foo_set", "bar_set_var", mirror_name, mirror_url)] + ) + + output = mirror( + "set-url", + id_arg, + "foo_set_url", + secret_arg, + "bar_set_url", + "--push", + mirror_name, + mirror_url + "-push", + ) + output = config("blame", "mirrors") + assert all( + [ + x in output + for x in ("foo_set_url", "bar_set_url", mirror_name, mirror_url + "-push") + ] + ) + + output = mirror("set", id_arg, "a", mirror_name) + assert "No changes made to mirror" not in output + + output = mirror("set", secret_arg, "b", mirror_name) + assert "No changes made to mirror" not in output + + output = mirror("set-url", id_arg, "c", mirror_name, mirror_url) + assert "No changes made to mirror" not in output + + output = mirror("set-url", secret_arg, "d", mirror_name, mirror_url) + assert "No changes made to mirror" not in output + + output = mirror("remove", mirror_name) + assert "Removed mirror" in output + + output = mirror("add", id_arg, "foo", mirror_name, mirror_url) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("set-url", id_arg, "bar", mirror_name, mirror_url) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("set", id_arg, "bar", mirror_name) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("remove", mirror_name) + assert "Removed mirror" in output + + output = mirror("add", secret_arg, "bar", mirror_name, mirror_url) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("set-url", secret_arg, "bar", mirror_name, mirror_url) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("set", secret_arg, "bar", mirror_name) + assert "Expected both parts of the access pair to be specified. " in output + + output = mirror("remove", mirror_name) + assert "Removed mirror" in output + + output = mirror("list") + assert "No mirrors configured" in output + + do_add_set_seturl_access_pair("--s3-access-key-id", "--s3-access-key-secret") + do_add_set_seturl_access_pair("--s3-access-key-id", "--s3-access-key-secret-variable") + do_add_set_seturl_access_pair( + "--s3-access-key-id-variable", "--s3-access-key-secret-variable" + ) + with pytest.raises( + spack.error.SpackError, match="Cannot add mirror with a variable id and text secret" + ): + do_add_set_seturl_access_pair("--s3-access-key-id-variable", "--s3-access-key-secret") + + # Test OCI connection info user/password + do_add_set_seturl_access_pair("--oci-username", "--oci-password") + do_add_set_seturl_access_pair("--oci-username", "--oci-password-variable") + do_add_set_seturl_access_pair("--oci-username-variable", "--oci-password-variable") + with pytest.raises( + spack.error.SpackError, match="Cannot add mirror with a variable id and text secret" + ): + do_add_set_seturl_access_pair("--s3-access-key-id-variable", "--s3-access-key-secret") + # Test S3 connection info with endpoint URL mirror( "add", @@ -218,6 +321,9 @@ def test_mirror_crud(mutable_config, capsys): output = mirror("remove", "mirror") assert "Removed mirror" in output + output = mirror("list") + assert "No mirrors configured" in output + def test_mirror_nonexisting(mutable_config): with pytest.raises(SpackCommandError): diff --git a/lib/spack/spack/test/cmd/pkg.py b/lib/spack/spack/test/cmd/pkg.py index d1f0ed139ecac3..8fdc89b1fd7c4c 100644 --- a/lib/spack/spack/test/cmd/pkg.py +++ b/lib/spack/spack/test/cmd/pkg.py @@ -10,6 +10,7 @@ from llnl.util.filesystem import mkdirp, working_dir +import spack.cmd import spack.cmd.pkg import spack.main import spack.paths @@ -311,7 +312,20 @@ def test_pkg_grep(mock_packages, capfd): output, _ = capfd.readouterr() assert output.strip() == "\n".join( spack.repo.PATH.get_pkg_class(name).module.__file__ - for name in ["splice-a", "splice-h", "splice-t", "splice-vh", "splice-vt", "splice-z"] + for name in [ + "depends-on-manyvariants", + "manyvariants", + "splice-a", + "splice-depends-on-t", + "splice-h", + "splice-t", + "splice-vh", + "splice-vt", + "splice-z", + "virtual-abi-1", + "virtual-abi-2", + "virtual-abi-multi", + ] ) # ensure that this string isn't fouhnd diff --git a/lib/spack/spack/test/cmd/reindex.py b/lib/spack/spack/test/cmd/reindex.py index abaaf4530c0ca7..a7d6d8fda0e195 100644 --- a/lib/spack/spack/test/cmd/reindex.py +++ b/lib/spack/spack/test/cmd/reindex.py @@ -6,6 +6,7 @@ import spack.store from spack.database import Database +from spack.enums import InstallRecordStatus from spack.main import SpackCommand install = SpackCommand("install") @@ -57,18 +58,18 @@ def test_reindex_with_deprecated_packages( db = spack.store.STORE.db - all_installed = db.query(installed=any) + all_installed = db.query(installed=InstallRecordStatus.ANY) non_deprecated = db.query(installed=True) _clear_db(tmp_path) reindex() - assert db.query(installed=any) == all_installed + assert db.query(installed=InstallRecordStatus.ANY) == all_installed assert db.query(installed=True) == non_deprecated old_libelf = db.query_local_by_spec_hash( - db.query_local("libelf@0.8.12", installed=any)[0].dag_hash() + db.query_local("libelf@0.8.12", installed=InstallRecordStatus.ANY)[0].dag_hash() ) new_libelf = db.query_local_by_spec_hash( db.query_local("libelf@0.8.13", installed=True)[0].dag_hash() diff --git a/lib/spack/spack/test/cmd/spec.py b/lib/spack/spack/test/cmd/spec.py index a57c40ec926823..dda48de4df0599 100644 --- a/lib/spack/spack/test/cmd/spec.py +++ b/lib/spack/spack/test/cmd/spec.py @@ -7,6 +7,7 @@ import pytest +import spack.config import spack.environment as ev import spack.error import spack.spec @@ -179,3 +180,43 @@ def test_spec_version_assigned_git_ref_as_version(name, version, error): else: output = spec(name + "@" + version) assert version in output + + +@pytest.mark.parametrize( + "unify, spec_hash_args, match, error", + [ + # success cases with unfiy:true + (True, ["mpileaks_mpich"], "mpich", None), + (True, ["mpileaks_zmpi"], "zmpi", None), + (True, ["mpileaks_mpich", "dyninst"], "mpich", None), + (True, ["mpileaks_zmpi", "dyninst"], "zmpi", None), + # same success cases with unfiy:false + (False, ["mpileaks_mpich"], "mpich", None), + (False, ["mpileaks_zmpi"], "zmpi", None), + (False, ["mpileaks_mpich", "dyninst"], "mpich", None), + (False, ["mpileaks_zmpi", "dyninst"], "zmpi", None), + # cases with unfiy:false + (True, ["mpileaks_mpich", "mpileaks_zmpi"], "callpath, mpileaks", spack.error.SpecError), + (False, ["mpileaks_mpich", "mpileaks_zmpi"], "zmpi", None), + ], +) +def test_spec_unification_from_cli( + install_mockery, mutable_config, mutable_database, unify, spec_hash_args, match, error +): + """Ensure specs grouped together on the CLI are concretized together when unify:true.""" + spack.config.set("concretizer:unify", unify) + + db = spack.store.STORE.db + spec_lookup = { + "mpileaks_mpich": db.query_one("mpileaks ^mpich").dag_hash(), + "mpileaks_zmpi": db.query_one("mpileaks ^zmpi").dag_hash(), + "dyninst": db.query_one("dyninst").dag_hash(), + } + + hashes = [f"/{spec_lookup[name]}" for name in spec_hash_args] + if error: + with pytest.raises(error, match=match): + output = spec(*hashes) + else: + output = spec(*hashes) + assert match in output diff --git a/lib/spack/spack/test/cmd/style.py b/lib/spack/spack/test/cmd/style.py index 208e31f8a2fa5f..ee33de9b4b04a4 100644 --- a/lib/spack/spack/test/cmd/style.py +++ b/lib/spack/spack/test/cmd/style.py @@ -4,8 +4,11 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import filecmp +import io import os +import pathlib import shutil +import sys import pytest @@ -15,7 +18,7 @@ import spack.main import spack.paths import spack.repo -from spack.cmd.style import changed_files +from spack.cmd.style import _run_import_check, changed_files from spack.util.executable import which #: directory with sample style files @@ -292,5 +295,114 @@ def test_style_with_black(flake8_package_with_errors): def test_skip_tools(): - output = style("--skip", "isort,mypy,black,flake8") + output = style("--skip", "import,isort,mypy,black,flake8") assert "Nothing to run" in output + + +@pytest.mark.skipif(sys.version_info < (3, 9), reason="requires Python 3.9+") +def test_run_import_check(tmp_path: pathlib.Path): + file = tmp_path / "issues.py" + contents = ''' +import spack.cmd +import spack.config # do not drop this import because of this comment + +# this comment about spack.error should not be removed +class Example(spack.build_systems.autotools.AutotoolsPackage): + """this is a docstring referencing unused spack.error.SpackError, which is fine""" + pass + +def foo(config: "spack.error.SpackError"): + # the type hint is quoted, so it should not be removed + spack.util.executable.Executable("example") + print(spack.__version__) +''' + file.write_text(contents) + root = str(tmp_path) + output_buf = io.StringIO() + exit_code = _run_import_check( + [str(file)], + fix=False, + out=output_buf, + root_relative=False, + root=spack.paths.prefix, + working_dir=root, + ) + output = output_buf.getvalue() + + assert "issues.py: redundant import: spack.cmd" in output + assert "issues.py: redundant import: spack.config" not in output # comment prevents removal + assert "issues.py: missing import: spack" in output # used by spack.__version__ + assert "issues.py: missing import: spack.build_systems.autotools" in output + assert "issues.py: missing import: spack.util.executable" in output + assert "issues.py: missing import: spack.error" not in output # not directly used + assert exit_code == 1 + assert file.read_text() == contents # fix=False should not change the file + + # run it with --fix, should have the same output. + output_buf = io.StringIO() + exit_code = _run_import_check( + [str(file)], + fix=True, + out=output_buf, + root_relative=False, + root=spack.paths.prefix, + working_dir=root, + ) + output = output_buf.getvalue() + assert exit_code == 1 + assert "issues.py: redundant import: spack.cmd" in output + assert "issues.py: missing import: spack" in output + assert "issues.py: missing import: spack.build_systems.autotools" in output + assert "issues.py: missing import: spack.util.executable" in output + + # after fix a second fix is idempotent + output_buf = io.StringIO() + exit_code = _run_import_check( + [str(file)], + fix=True, + out=output_buf, + root_relative=False, + root=spack.paths.prefix, + working_dir=root, + ) + output = output_buf.getvalue() + assert exit_code == 0 + assert not output + + # check that the file was fixed + new_contents = file.read_text() + assert "import spack.cmd" not in new_contents + assert "import spack\n" in new_contents + assert "import spack.build_systems.autotools\n" in new_contents + assert "import spack.util.executable\n" in new_contents + + +@pytest.mark.skipif(sys.version_info < (3, 9), reason="requires Python 3.9+") +def test_run_import_check_syntax_error_and_missing(tmp_path: pathlib.Path): + (tmp_path / "syntax-error.py").write_text("""this 'is n(ot python code""") + output_buf = io.StringIO() + exit_code = _run_import_check( + [str(tmp_path / "syntax-error.py"), str(tmp_path / "missing.py")], + fix=False, + out=output_buf, + root_relative=True, + root=str(tmp_path), + working_dir=str(tmp_path / "does-not-matter"), + ) + output = output_buf.getvalue() + assert "syntax-error.py: could not parse" in output + assert "missing.py: could not parse" in output + assert exit_code == 1 + + +def test_case_sensitive_imports(tmp_path: pathlib.Path): + # example.Example is a name, while example.example is a module. + (tmp_path / "lib" / "spack" / "example").mkdir(parents=True) + (tmp_path / "lib" / "spack" / "example" / "__init__.py").write_text("class Example:\n pass") + (tmp_path / "lib" / "spack" / "example" / "example.py").write_text("foo = 1") + assert spack.cmd.style._module_part(str(tmp_path), "example.Example") == "example" + + +def test_pkg_imports(): + assert spack.cmd.style._module_part(spack.paths.prefix, "spack.pkg.builtin.boost") is None + assert spack.cmd.style._module_part(spack.paths.prefix, "spack.pkg") is None diff --git a/lib/spack/spack/test/cmd/uninstall.py b/lib/spack/spack/test/cmd/uninstall.py index 35b6a15455aa04..6ac74b8abc6364 100644 --- a/lib/spack/spack/test/cmd/uninstall.py +++ b/lib/spack/spack/test/cmd/uninstall.py @@ -11,6 +11,7 @@ import spack.cmd.uninstall import spack.environment import spack.store +from spack.enums import InstallRecordStatus from spack.main import SpackCommand, SpackCommandError uninstall = SpackCommand("uninstall") @@ -129,10 +130,10 @@ def validate_callpath_spec(installed): specs = spack.store.STORE.db.get_by_hash(dag_hash[:7], installed=installed) assert len(specs) == 1 and specs[0] == callpath_spec - specs = spack.store.STORE.db.get_by_hash(dag_hash, installed=any) + specs = spack.store.STORE.db.get_by_hash(dag_hash, installed=InstallRecordStatus.ANY) assert len(specs) == 1 and specs[0] == callpath_spec - specs = spack.store.STORE.db.get_by_hash(dag_hash[:7], installed=any) + specs = spack.store.STORE.db.get_by_hash(dag_hash[:7], installed=InstallRecordStatus.ANY) assert len(specs) == 1 and specs[0] == callpath_spec specs = spack.store.STORE.db.get_by_hash(dag_hash, installed=not installed) @@ -147,7 +148,7 @@ def validate_callpath_spec(installed): spec = spack.store.STORE.db.query_one("callpath ^mpich", installed=installed) assert spec == callpath_spec - spec = spack.store.STORE.db.query_one("callpath ^mpich", installed=any) + spec = spack.store.STORE.db.query_one("callpath ^mpich", installed=InstallRecordStatus.ANY) assert spec == callpath_spec spec = spack.store.STORE.db.query_one("callpath ^mpich", installed=not installed) diff --git a/lib/spack/spack/test/compilers/basics.py b/lib/spack/spack/test/compilers/basics.py index ee31e50f53893e..14567745fa9f60 100644 --- a/lib/spack/spack/test/compilers/basics.py +++ b/lib/spack/spack/test/compilers/basics.py @@ -3,8 +3,10 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) """Test basic behavior of compilers in Spack""" +import json import os from copy import copy +from typing import Optional import pytest @@ -17,6 +19,7 @@ import spack.util.module_cmd from spack.compiler import Compiler from spack.util.executable import Executable, ProcessError +from spack.util.file_cache import FileCache def test_multiple_conflicting_compiler_definitions(mutable_config): @@ -101,11 +104,14 @@ def verbose_flag(self): @pytest.mark.not_on_windows("Not supported on Windows (yet)") -def test_implicit_rpaths(dirs_with_libfiles): +def test_implicit_rpaths(dirs_with_libfiles, monkeypatch): lib_to_dirs, all_dirs = dirs_with_libfiles - compiler = MockCompiler() - compiler._compile_c_source_output = "ld " + " ".join(f"-L{d}" for d in all_dirs) - retrieved_rpaths = compiler.implicit_rpaths() + monkeypatch.setattr( + MockCompiler, + "_compile_dummy_c_source", + lambda self: "ld " + " ".join(f"-L{d}" for d in all_dirs), + ) + retrieved_rpaths = MockCompiler().implicit_rpaths() assert set(retrieved_rpaths) == set(lib_to_dirs["libstdc++"] + lib_to_dirs["libgfortran"]) @@ -531,22 +537,6 @@ def test_nvhpc_flags(): supported_flag_test("stdcxx_libs", ("-c++libs",), "nvhpc@=20.9") -def test_pgi_flags(): - supported_flag_test("openmp_flag", "-mp", "pgi@=1.0") - supported_flag_test("cxx11_flag", "-std=c++11", "pgi@=1.0") - unsupported_flag_test("c99_flag", "pgi@=12.9") - supported_flag_test("c99_flag", "-c99", "pgi@=12.10") - unsupported_flag_test("c11_flag", "pgi@=15.2") - supported_flag_test("c11_flag", "-c11", "pgi@=15.3") - supported_flag_test("cc_pic_flag", "-fpic", "pgi@=1.0") - supported_flag_test("cxx_pic_flag", "-fpic", "pgi@=1.0") - supported_flag_test("f77_pic_flag", "-fpic", "pgi@=1.0") - supported_flag_test("fc_pic_flag", "-fpic", "pgi@=1.0") - supported_flag_test("stdcxx_libs", ("-pgc++libs",), "pgi@=1.0") - supported_flag_test("debug_flags", ["-g", "-gopt"], "pgi@=1.0") - supported_flag_test("opt_flags", ["-O", "-O0", "-O1", "-O2", "-O3", "-O4"], "pgi@=1.0") - - def test_xl_flags(): supported_flag_test("openmp_flag", "-qsmp=omp", "xl@=1.0") unsupported_flag_test("cxx11_flag", "xl@=13.0") @@ -647,6 +637,7 @@ def test_raising_if_compiler_target_is_over_specific(config): @pytest.mark.not_on_windows("Not supported on Windows (yet)") +@pytest.mark.enable_compiler_execution def test_compiler_get_real_version(working_env, monkeypatch, tmpdir): # Test variables test_version = "2.2.2" @@ -736,6 +727,7 @@ def test_get_compilers(config): ) == [spack.compilers._compiler_from_config_entry(without_suffix)] +@pytest.mark.enable_compiler_execution def test_compiler_get_real_version_fails(working_env, monkeypatch, tmpdir): # Test variables test_version = "2.2.2" @@ -784,15 +776,13 @@ def _call(*args, **kwargs): compilers = spack.compilers.get_compilers([compiler_dict]) assert len(compilers) == 1 compiler = compilers[0] - try: - _ = compiler.get_real_version() - assert False - except ProcessError: - # Confirm environment does not change after failed call - assert "SPACK_TEST_CMP_ON" not in os.environ + assert compiler.get_real_version() == "unknown" + # Confirm environment does not change after failed call + assert "SPACK_TEST_CMP_ON" not in os.environ @pytest.mark.not_on_windows("Bash scripting unsupported on Windows (for now)") +@pytest.mark.enable_compiler_execution def test_compiler_flags_use_real_version(working_env, monkeypatch, tmpdir): # Create compiler gcc = str(tmpdir.join("gcc")) @@ -895,3 +885,57 @@ def test_compiler_environment(working_env): ) with compiler.compiler_environment(): assert os.environ["TEST"] == "yes" + + +class MockCompilerWithoutExecutables(MockCompiler): + def __init__(self): + super().__init__() + self._compile_dummy_c_source_count = 0 + self._get_real_version_count = 0 + + def _compile_dummy_c_source(self) -> Optional[str]: + self._compile_dummy_c_source_count += 1 + return "gcc helloworld.c -o helloworld" + + def get_real_version(self) -> str: + self._get_real_version_count += 1 + return "1.0.0" + + +def test_compiler_output_caching(tmp_path): + """Test that compiler output is cached on the filesystem.""" + # The first call should trigger the cache to updated. + a = MockCompilerWithoutExecutables() + cache = spack.compiler.FileCompilerCache(FileCache(str(tmp_path))) + assert cache.get(a).c_compiler_output == "gcc helloworld.c -o helloworld" + assert cache.get(a).real_version == "1.0.0" + assert a._compile_dummy_c_source_count == 1 + assert a._get_real_version_count == 1 + + # The second call on an equivalent but distinct object should not trigger compiler calls. + b = MockCompilerWithoutExecutables() + cache = spack.compiler.FileCompilerCache(FileCache(str(tmp_path))) + assert cache.get(b).c_compiler_output == "gcc helloworld.c -o helloworld" + assert cache.get(b).real_version == "1.0.0" + assert b._compile_dummy_c_source_count == 0 + assert b._get_real_version_count == 0 + + # Cache schema change should be handled gracefully. + with open(cache.cache.cache_path(cache.name), "w") as f: + for k in cache._data: + cache._data[k] = "corrupted entry" + f.write(json.dumps(cache._data)) + + c = MockCompilerWithoutExecutables() + cache = spack.compiler.FileCompilerCache(FileCache(str(tmp_path))) + assert cache.get(c).c_compiler_output == "gcc helloworld.c -o helloworld" + assert cache.get(c).real_version == "1.0.0" + + # Cache corruption should be handled gracefully. + with open(cache.cache.cache_path(cache.name), "w") as f: + f.write("corrupted cache") + + d = MockCompilerWithoutExecutables() + cache = spack.compiler.FileCompilerCache(FileCache(str(tmp_path))) + assert cache.get(d).c_compiler_output == "gcc helloworld.c -o helloworld" + assert cache.get(d).real_version == "1.0.0" diff --git a/lib/spack/spack/test/concretize_compiler_runtimes.py b/lib/spack/spack/test/concretization/compiler_runtimes.py similarity index 100% rename from lib/spack/spack/test/concretize_compiler_runtimes.py rename to lib/spack/spack/test/concretization/compiler_runtimes.py diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretization/core.py similarity index 93% rename from lib/spack/spack/test/concretize.py rename to lib/spack/spack/test/concretization/core.py index b56f05b6019cee..e33f9761dad728 100644 --- a/lib/spack/spack/test/concretize.py +++ b/lib/spack/spack/test/concretization/core.py @@ -14,6 +14,7 @@ import llnl.util.lang import spack.binary_distribution +import spack.cmd import spack.compiler import spack.compilers import spack.concretize @@ -32,7 +33,6 @@ import spack.store import spack.util.file_cache import spack.variant as vt -from spack.concretize import find_spec from spack.installer import PackageInstaller from spack.spec import CompilerSpec, Spec from spack.version import Version, VersionList, ver @@ -540,21 +540,17 @@ def test_concretize_two_virtuals_with_dual_provider_and_a_conflict(self): @pytest.mark.parametrize( "spec_str,expected_propagation", [ - ("hypre~~shared ^openblas+shared", [("hypre", "~shared"), ("openblas", "+shared")]), # Propagates past a node that doesn't have the variant ("hypre~~shared ^openblas", [("hypre", "~shared"), ("openblas", "~shared")]), + # Propagates from root node to all nodes ( "ascent~~shared +adios2", [("ascent", "~shared"), ("adios2", "~shared"), ("bzip2", "~shared")], ), - # Propagates below a node that uses the other value explicitly + # Propagate from a node that is not the root node ( - "ascent~~shared +adios2 ^adios2+shared", - [("ascent", "~shared"), ("adios2", "+shared"), ("bzip2", "~shared")], - ), - ( - "ascent++shared +adios2 ^adios2~shared", - [("ascent", "+shared"), ("adios2", "~shared"), ("bzip2", "+shared")], + "ascent +adios2 ^adios2~~shared", + [("ascent", "+shared"), ("adios2", "~shared"), ("bzip2", "~shared")], ), ], ) @@ -564,21 +560,109 @@ def test_concretize_propagate_disabled_variant(self, spec_str, expected_propagat for key, expected_satisfies in expected_propagation: spec[key].satisfies(expected_satisfies) - def test_concretize_propagated_variant_is_not_passed_to_dependent(self): - """Test a package variant value was passed from its parent.""" - spec = Spec("ascent~~shared +adios2 ^adios2+shared") + def test_concretize_propagate_variant_not_dependencies(self): + """Test that when propagating a variant it is not propagated to dependencies that + do not have that variant""" + spec = Spec("quantum-espresso~~invino") spec.concretize() - assert spec.satisfies("^adios2+shared") - assert spec.satisfies("^bzip2~shared") + for dep in spec.traverse(root=False): + assert "invino" not in dep.variants.keys() + + def test_concretize_propagate_variant_exclude_dependency_fail(self): + """Tests that a propagating variant cannot be allowed to be excluded by any of + the source package's dependencies""" + spec = Spec("hypre ~~shared ^openblas +shared") + with pytest.raises(spack.error.UnsatisfiableSpecError): + spec.concretize() + + def test_concretize_propagate_same_variant_from_direct_dep_fail(self): + """Test that when propagating a variant from the source package and a direct + dependency also propagates the same variant with a different value. Raises error""" + spec = Spec("ascent +adios2 ++shared ^adios2 ~~shared") + with pytest.raises(spack.error.UnsatisfiableSpecError): + spec.concretize() + + def test_concretize_propagate_same_variant_in_dependency_fail(self): + """Test that when propagating a variant from the source package, none of it's + dependencies can propagate that variant with a different value. Raises error.""" + spec = Spec("ascent +adios2 ++shared ^bzip2 ~~shared") + with pytest.raises(spack.error.UnsatisfiableSpecError): + spec.concretize() + + def test_concretize_propagate_same_variant_virtual_dependency_fail(self): + """Test that when propagating a variant from the source package and a direct + dependency (that is a virtual pkg) also propagates the same variant with a + different value. Raises error""" + spec = Spec("hypre ++shared ^openblas ~~shared") + with pytest.raises(spack.error.UnsatisfiableSpecError): + spec.concretize() + + def test_concretize_propagate_same_variant_multiple_sources_diamond_dep_fail(self): + """Test that fails when propagating the same variant with different values from multiple + sources that share a dependency""" + spec = Spec("parent-foo-bar ^dependency-foo-bar++bar ^direct-dep-foo-bar~~bar") + with pytest.raises(spack.error.UnsatisfiableSpecError): + spec.concretize() def test_concretize_propagate_specified_variant(self): """Test that only the specified variant is propagated to the dependencies""" spec = Spec("parent-foo-bar ~~foo") spec.concretize() - assert spec.satisfies("~foo") and spec.satisfies("^dependency-foo-bar~foo") - assert spec.satisfies("+bar") and not spec.satisfies("^dependency-foo-bar+bar") + assert spec.satisfies("^dependency-foo-bar~foo") + assert spec.satisfies("^second-dependency-foo-bar-fee~foo") + assert spec.satisfies("^direct-dep-foo-bar~foo") + + assert not spec.satisfies("^dependency-foo-bar+bar") + assert not spec.satisfies("^second-dependency-foo-bar-fee+bar") + assert not spec.satisfies("^direct-dep-foo-bar+bar") + + def test_concretize_propagate_one_variant(self): + """Test that you can specify to propagate one variant and not all""" + spec = Spec("parent-foo-bar ++bar ~foo") + spec.concretize() + + assert spec.satisfies("~foo") and not spec.satisfies("^dependency-foo-bar~foo") + assert spec.satisfies("+bar") and spec.satisfies("^dependency-foo-bar+bar") + + def test_concretize_propagate_through_first_level_deps(self): + """Test that boolean valued variants can be propagated past first level + dependecies even if the first level dependency does have the variant""" + spec = Spec("parent-foo-bar-fee ++fee") + spec.concretize() + + assert spec.satisfies("+fee") and not spec.satisfies("dependency-foo-bar+fee") + assert spec.satisfies("^second-dependency-foo-bar-fee+fee") + + def test_concretize_propagate_multiple_variants(self): + """Test that multiple boolean valued variants can be propagated from + the same source package""" + spec = Spec("parent-foo-bar-fee ~~foo ++bar") + spec.concretize() + + assert spec.satisfies("~foo") and spec.satisfies("+bar") + assert spec.satisfies("^dependency-foo-bar ~foo +bar") + assert spec.satisfies("^second-dependency-foo-bar-fee ~foo +bar") + + def test_concretize_propagate_multiple_variants_mulitple_sources(self): + """Test the propagates multiple different variants for multiple sources + in a diamond dependency""" + spec = Spec("parent-foo-bar ^dependency-foo-bar++bar ^direct-dep-foo-bar~~foo") + spec.concretize() + + assert spec.satisfies("^second-dependency-foo-bar-fee+bar") + assert spec.satisfies("^second-dependency-foo-bar-fee~foo") + assert not spec.satisfies("^dependency-foo-bar~foo") + assert not spec.satisfies("^direct-dep-foo-bar+bar") + + def test_concretize_propagate_single_valued_variant(self): + """Test propagation for single valued variants""" + spec = Spec("multivalue-variant libs==static") + spec.concretize() + + assert spec.satisfies("libs=static") + assert spec.satisfies("^pkg-a libs=static") def test_concretize_propagate_multivalue_variant(self): """Test that multivalue variants are propagating the specified value(s) @@ -591,6 +675,46 @@ def test_concretize_propagate_multivalue_variant(self): assert not spec.satisfies("^pkg-a foo=bar") assert not spec.satisfies("^pkg-b foo=bar") + def test_concretize_propagate_multiple_multivalue_variant(self): + """Tests propagating the same mulitvalued variant from different sources allows + the dependents to accept all propagated values""" + spec = Spec("multivalue-variant foo==bar ^pkg-a foo==baz") + spec.concretize() + + assert spec.satisfies("multivalue-variant foo=bar") + assert spec.satisfies("^pkg-a foo=bar,baz") + assert spec.satisfies("^pkg-b foo=bar,baz") + + def test_concretize_propagate_variant_not_in_source(self): + """Test that variant is still propagated even if the source pkg + doesn't have the variant""" + spec = Spec("callpath++debug") + spec.concretize() + + assert spec.satisfies("^mpich+debug") + assert not spec.satisfies("callpath+debug") + assert not spec.satisfies("^dyninst+debug") + + def test_concretize_propagate_variant_multiple_deps_not_in_source(self): + """Test that a variant can be propagated to multiple dependencies + when the variant is not in the source package""" + spec = Spec("netlib-lapack++shared") + spec.concretize() + + assert spec.satisfies("^openblas+shared") + assert spec.satisfies("^perl+shared") + assert not spec.satisfies("netlib-lapack+shared") + + def test_concretize_propagate_variant_second_level_dep_not_in_source(self): + """Test that a variant can be propagated past first level dependencies + when the variant is not in the source package or any of the first level + dependencies""" + spec = Spec("parent-foo-bar ++fee") + spec.concretize() + + assert spec.satisfies("^second-dependency-foo-bar-fee +fee") + assert not spec.satisfies("parent-foo-bar +fee") + def test_no_matching_compiler_specs(self, mock_low_high_config): # only relevant when not building compilers as needed with spack.concretize.enable_compiler_existence_check(): @@ -673,39 +797,6 @@ def test_external_and_virtual(self, mutable_config): assert spec["externaltool"].compiler.satisfies("gcc") assert spec["stuff"].compiler.satisfies("gcc") - def test_find_spec_parents(self): - """Tests the spec finding logic used by concretization.""" - s = Spec.from_literal({"a +foo": {"b +foo": {"c": None, "d+foo": None}, "e +foo": None}}) - - assert "a" == find_spec(s["b"], lambda s: "+foo" in s).name - - def test_find_spec_children(self): - s = Spec.from_literal({"a": {"b +foo": {"c": None, "d+foo": None}, "e +foo": None}}) - - assert "d" == find_spec(s["b"], lambda s: "+foo" in s).name - - s = Spec.from_literal({"a": {"b +foo": {"c+foo": None, "d": None}, "e +foo": None}}) - - assert "c" == find_spec(s["b"], lambda s: "+foo" in s).name - - def test_find_spec_sibling(self): - s = Spec.from_literal({"a": {"b +foo": {"c": None, "d": None}, "e +foo": None}}) - - assert "e" == find_spec(s["b"], lambda s: "+foo" in s).name - assert "b" == find_spec(s["e"], lambda s: "+foo" in s).name - - s = Spec.from_literal({"a": {"b +foo": {"c": None, "d": None}, "e": {"f +foo": None}}}) - - assert "f" == find_spec(s["b"], lambda s: "+foo" in s).name - - def test_find_spec_self(self): - s = Spec.from_literal({"a": {"b +foo": {"c": None, "d": None}, "e": None}}) - assert "b" == find_spec(s["b"], lambda s: "+foo" in s).name - - def test_find_spec_none(self): - s = Spec.from_literal({"a": {"b": {"c": None, "d": None}, "e": None}}) - assert find_spec(s["b"], lambda s: "+foo" in s) is None - def test_compiler_child(self): s = Spec("mpileaks%clang target=x86_64 ^dyninst%gcc") s.concretize() @@ -814,7 +905,7 @@ def test_regression_issue_7941(self): ) def test_simultaneous_concretization_of_specs(self, abstract_specs): abstract_specs = [Spec(x) for x in abstract_specs] - concrete_specs = spack.concretize.concretize_specs_together(*abstract_specs) + concrete_specs = spack.concretize.concretize_specs_together(abstract_specs) # Check there's only one configuration of each package in the DAG names = set(dep.name for spec in concrete_specs for dep in spec.traverse()) @@ -2136,7 +2227,7 @@ def test_external_python_extension_find_unified_python(self): spack.config.set("packages", external_conf) abstract_specs = [Spec(s) for s in ["py-extension1", "python"]] - specs = spack.concretize.concretize_specs_together(*abstract_specs) + specs = spack.concretize.concretize_specs_together(abstract_specs) assert specs[0]["python"] == specs[1]["python"] @pytest.mark.regression("36190") @@ -2225,6 +2316,7 @@ def test_compiler_match_constraints_when_selected(self): @pytest.mark.regression("36339") @pytest.mark.not_on_windows("Not supported on Windows") + @pytest.mark.enable_compiler_execution def test_compiler_with_custom_non_numeric_version(self, mock_executable): """Test that, when a compiler has a completely made up version, we can use its 'real version' to detect targets and don't raise during concretization. @@ -2306,6 +2398,30 @@ def test_explicit_splices( assert "hdf5 ^zmpi" in captured.err assert str(spec) in captured.err + def test_explicit_splice_fails_nonexistent(mutable_config, mock_packages, mock_store): + splice_info = {"target": "mpi", "replacement": "mpich/doesnotexist"} + spack.config.CONFIG.set("concretizer", {"splice": {"explicit": [splice_info]}}) + + with pytest.raises(spack.spec.InvalidHashError): + _ = spack.spec.Spec("hdf5^zmpi").concretized() + + def test_explicit_splice_fails_no_hash(mutable_config, mock_packages, mock_store): + splice_info = {"target": "mpi", "replacement": "mpich"} + spack.config.CONFIG.set("concretizer", {"splice": {"explicit": [splice_info]}}) + + with pytest.raises(spack.solver.asp.InvalidSpliceError, match="must be specified by hash"): + _ = spack.spec.Spec("hdf5^zmpi").concretized() + + def test_explicit_splice_non_match_nonexistent_succeeds( + mutable_config, mock_packages, mock_store + ): + """When we have a nonexistent splice configured but are not using it, don't fail.""" + splice_info = {"target": "will_not_match", "replacement": "nonexistent/doesnotexist"} + spack.config.CONFIG.set("concretizer", {"splice": {"explicit": [splice_info]}}) + spec = spack.spec.Spec("zlib").concretized() + # the main test is that it does not raise + assert not spec.spliced + @pytest.mark.db @pytest.mark.parametrize( "spec_str,mpi_name", @@ -3082,3 +3198,20 @@ def test_reuse_prefers_standard_over_git_versions( test_spec = spack.spec.Spec("git-ref-package@2").concretized() assert git_spec.dag_hash() != test_spec.dag_hash() assert standard_spec.dag_hash() == test_spec.dag_hash() + + +@pytest.mark.parametrize("unify", [True, "when_possible", False]) +def test_spec_unification(unify, mutable_config, mock_packages): + spack.config.set("concretizer:unify", unify) + a = "pkg-a" + a_restricted = "pkg-a^pkg-b foo=baz" + b = "pkg-b foo=none" + + unrestricted = spack.cmd.parse_specs([a, b], concretize=True) + a_concrete_unrestricted = [s for s in unrestricted if s.name == "pkg-a"][0] + b_concrete_unrestricted = [s for s in unrestricted if s.name == "pkg-b"][0] + assert (a_concrete_unrestricted["pkg-b"] == b_concrete_unrestricted) == (unify is not False) + + maybe_fails = pytest.raises if unify is True else llnl.util.lang.nullcontext + with maybe_fails(spack.solver.asp.UnsatisfiableSpecError): + _ = spack.cmd.parse_specs([a_restricted, b], concretize=True) diff --git a/lib/spack/spack/test/concretize_errors.py b/lib/spack/spack/test/concretization/errors.py similarity index 100% rename from lib/spack/spack/test/concretize_errors.py rename to lib/spack/spack/test/concretization/errors.py diff --git a/lib/spack/spack/test/flag_mixing.py b/lib/spack/spack/test/concretization/flag_mixing.py similarity index 99% rename from lib/spack/spack/test/flag_mixing.py rename to lib/spack/spack/test/concretization/flag_mixing.py index 6009ade058e5bd..878c0c71efc85e 100644 --- a/lib/spack/spack/test/flag_mixing.py +++ b/lib/spack/spack/test/concretization/flag_mixing.py @@ -8,6 +8,7 @@ import spack.config import spack.environment as ev +import spack.paths import spack.repo import spack.util.spack_yaml as syaml from spack.spec import Spec diff --git a/lib/spack/spack/test/concretize_preferences.py b/lib/spack/spack/test/concretization/preferences.py similarity index 100% rename from lib/spack/spack/test/concretize_preferences.py rename to lib/spack/spack/test/concretization/preferences.py diff --git a/lib/spack/spack/test/concretize_requirements.py b/lib/spack/spack/test/concretization/requirements.py similarity index 99% rename from lib/spack/spack/test/concretize_requirements.py rename to lib/spack/spack/test/concretization/requirements.py index be66b2b0a82588..9e703be51fe08f 100644 --- a/lib/spack/spack/test/concretize_requirements.py +++ b/lib/spack/spack/test/concretization/requirements.py @@ -10,8 +10,10 @@ import spack.config import spack.error import spack.package_base +import spack.paths import spack.repo import spack.solver.asp +import spack.store import spack.util.spack_yaml as syaml import spack.version from spack.installer import PackageInstaller diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py index be727f1c561e95..52e1cc9e04a613 100644 --- a/lib/spack/spack/test/config.py +++ b/lib/spack/spack/test/config.py @@ -15,6 +15,7 @@ import llnl.util.tty as tty from llnl.util.filesystem import join_path, touch, touchp +import spack import spack.config import spack.directory_layout import spack.environment as ev @@ -472,6 +473,13 @@ def test_substitute_date(mock_low_high_config): assert date.today().strftime("%Y-%m-%d") in new_path +def test_substitute_spack_version(): + version = spack.spack_version_info + assert spack_path.canonicalize_path( + "spack$spack_short_version/test" + ) == spack_path.canonicalize_path(f"spack{version[0]}.{version[1]}/test") + + PAD_STRING = spack_path.SPACK_PATH_PADDING_CHARS MAX_PATH_LEN = spack_path.get_system_path_max() MAX_PADDED_LEN = MAX_PATH_LEN - spack_path.SPACK_MAX_INSTALL_PATH_LENGTH diff --git a/lib/spack/spack/test/conftest.py b/lib/spack/spack/test/conftest.py index 5f461d9d3588a4..b56d75c6faba61 100644 --- a/lib/spack/spack/test/conftest.py +++ b/lib/spack/spack/test/conftest.py @@ -38,7 +38,7 @@ import spack.compiler import spack.compilers import spack.config -import spack.directives +import spack.directives_meta import spack.environment as ev import spack.error import spack.modules.common @@ -973,12 +973,26 @@ def _return_none(*args): return None +def _compiler_output(self): + return "" + + +def _get_real_version(self): + return str(self.version) + + @pytest.fixture(scope="function", autouse=True) def disable_compiler_execution(monkeypatch, request): """Disable compiler execution to determine implicit link paths and libc flavor and version. To re-enable use `@pytest.mark.enable_compiler_execution`""" if "enable_compiler_execution" not in request.keywords: - monkeypatch.setattr(spack.compiler.Compiler, "_compile_dummy_c_source", _return_none) + monkeypatch.setattr(spack.compiler.Compiler, "_compile_dummy_c_source", _compiler_output) + monkeypatch.setattr(spack.compiler.Compiler, "get_real_version", _get_real_version) + + +@pytest.fixture(autouse=True) +def disable_compiler_output_cache(monkeypatch): + monkeypatch.setattr(spack.compiler, "COMPILER_CACHE", spack.compiler.CompilerCache()) @pytest.fixture(scope="function") @@ -1740,7 +1754,7 @@ def clear_directive_functions(): # Make sure any directive functions overidden by tests are cleared before # proceeding with subsequent tests that may depend on the original # functions. - spack.directives.DirectiveMeta._directives_to_be_executed = [] + spack.directives_meta.DirectiveMeta._directives_to_be_executed = [] @pytest.fixture diff --git a/lib/spack/spack/test/data/compiler_verbose_output/pgcc-16.3.txt b/lib/spack/spack/test/data/compiler_verbose_output/pgcc-16.3.txt deleted file mode 100644 index 90413223509951..00000000000000 --- a/lib/spack/spack/test/data/compiler_verbose_output/pgcc-16.3.txt +++ /dev/null @@ -1,11 +0,0 @@ -Export PGI=/usr/tce/packages/pgi/pgi-16.3 - -/usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/bin/pgc test.c -opt 1 -x 119 0xa10000 -x 122 0x40 -x 123 0x1000 -x 127 4 -x 127 17 -x 19 0x400000 -x 28 0x40000 -x 120 0x10000000 -x 70 0x8000 -x 122 1 -x 125 0x20000 -quad -x 59 4 -tp haswell -x 120 0x1000 -astype 0 -stdinc /usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/include-gcc48:/usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/include:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include:/usr/local/include:/usr/include -def unix -def __unix -def __unix__ -def linux -def __linux -def __linux__ -def __NO_MATH_INLINES -def __LP64__ -def __x86_64 -def __x86_64__ -def __LONG_MAX__=9223372036854775807L -def '__SIZE_TYPE__=unsigned long int' -def '__PTRDIFF_TYPE__=long int' -def __THROW= -def __extension__= -def __amd_64__amd64__ -def __k8 -def __k8__ -def __SSE__ -def __MMX__ -def __SSE2__ -def __SSE3__ -def __SSSE3__ -def __STDC_HOSTED__ -predicate '#machine(x86_64) #lint(off) #system(posix) #cpu(x86_64)' -cmdline '+pgcc test.c -v -o test.o' -x 123 0x80000000 -x 123 4 -x 2 0x400 -x 119 0x20 -def __pgnu_vsn=40805 -x 120 0x200000 -x 70 0x40000000 -y 163 0xc0000000 -x 189 0x10 -y 189 0x4000000 -asm /var/tmp/gamblin2/pgccL0MCVCOQsq6l.s -PGC/x86-64 Linux 16.3-0: compilation successful - -/usr/bin/as /var/tmp/gamblin2/pgccL0MCVCOQsq6l.s -o /var/tmp/gamblin2/pgcc10MCFxmYXjgo.o - -/usr/tce/bin/ld /usr/lib64/crt1.o /usr/lib64/crti.o /usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/lib/trace_init.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o /usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/lib/initmp.o --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/lib/pgi.ld -L/usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 /var/tmp/gamblin2/pgcc10MCFxmYXjgo.o -rpath /usr/tce/packages/pgi/pgi-16.3/linux86-64/16.3/lib -o test.o -lpgmp -lnuma -lpthread -lnspgc -lpgc -lm -lgcc -lc -lgcc /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o /usr/lib64/crtn.o -Unlinking /var/tmp/gamblin2/pgccL0MCVCOQsq6l.s -Unlinking /var/tmp/gamblin2/pgccn0MCNcmgIbh8.ll -Unlinking /var/tmp/gamblin2/pgcc10MCFxmYXjgo.o diff --git a/lib/spack/spack/test/data/config/bootstrap.yaml b/lib/spack/spack/test/data/config/bootstrap.yaml index 4757b8729d23a8..43c4405350acf8 100644 --- a/lib/spack/spack/test/data/config/bootstrap.yaml +++ b/lib/spack/spack/test/data/config/bootstrap.yaml @@ -1,5 +1,5 @@ bootstrap: sources: - name: 'github-actions' - metadata: $spack/share/spack/bootstrap/github-actions-v0.5 + metadata: $spack/share/spack/bootstrap/github-actions-v0.6 trusted: {} diff --git a/lib/spack/spack/test/data/modules/tcl/suffix-format.yaml b/lib/spack/spack/test/data/modules/tcl/suffix-format.yaml new file mode 100644 index 00000000000000..00328cb0019a7a --- /dev/null +++ b/lib/spack/spack/test/data/modules/tcl/suffix-format.yaml @@ -0,0 +1,9 @@ +enable: + - tcl +tcl: + all: + autoload: none + mpileaks: + suffixes: + mpileaks: 'debug={variants.debug.value}' + '^mpi': 'mpi={^mpi.name}-v{^mpi.version}' diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py index 7140a502878105..07cbe3dd81fd7e 100644 --- a/lib/spack/spack/test/database.py +++ b/lib/spack/spack/test/database.py @@ -34,6 +34,7 @@ import spack.spec import spack.store import spack.version as vn +from spack.enums import InstallRecordStatus from spack.installer import PackageInstaller from spack.schema.database_index import schema from spack.util.executable import Executable @@ -292,7 +293,7 @@ def _print_ref_counts(): recs = [] def add_rec(spec): - cspecs = spack.store.STORE.db.query(spec, installed=any) + cspecs = spack.store.STORE.db.query(spec, installed=InstallRecordStatus.ANY) if not cspecs: recs.append("[ %-7s ] %-20s-" % ("", spec)) @@ -324,7 +325,7 @@ def add_rec(spec): def _check_merkleiness(): """Ensure the spack database is a valid merkle graph.""" - all_specs = spack.store.STORE.db.query(installed=any) + all_specs = spack.store.STORE.db.query(installed=InstallRecordStatus.ANY) seen = {} for spec in all_specs: @@ -617,7 +618,7 @@ def test_080_root_ref_counts(mutable_database): mutable_database.remove("mpileaks ^mpich") # record no longer in DB - assert mutable_database.query("mpileaks ^mpich", installed=any) == [] + assert mutable_database.query("mpileaks ^mpich", installed=InstallRecordStatus.ANY) == [] # record's deps have updated ref_counts assert mutable_database.get_record("callpath ^mpich").ref_count == 0 @@ -627,7 +628,7 @@ def test_080_root_ref_counts(mutable_database): mutable_database.add(rec.spec) # record is present again - assert len(mutable_database.query("mpileaks ^mpich", installed=any)) == 1 + assert len(mutable_database.query("mpileaks ^mpich", installed=InstallRecordStatus.ANY)) == 1 # dependencies have ref counts updated assert mutable_database.get_record("callpath ^mpich").ref_count == 1 @@ -643,18 +644,21 @@ def test_090_non_root_ref_counts(mutable_database): # record still in DB but marked uninstalled assert mutable_database.query("callpath ^mpich", installed=True) == [] - assert len(mutable_database.query("callpath ^mpich", installed=any)) == 1 + assert len(mutable_database.query("callpath ^mpich", installed=InstallRecordStatus.ANY)) == 1 # record and its deps have same ref_counts - assert mutable_database.get_record("callpath ^mpich", installed=any).ref_count == 1 + assert ( + mutable_database.get_record("callpath ^mpich", installed=InstallRecordStatus.ANY).ref_count + == 1 + ) assert mutable_database.get_record("mpich").ref_count == 2 # remove only dependent of uninstalled callpath record mutable_database.remove("mpileaks ^mpich") # record and parent are completely gone. - assert mutable_database.query("mpileaks ^mpich", installed=any) == [] - assert mutable_database.query("callpath ^mpich", installed=any) == [] + assert mutable_database.query("mpileaks ^mpich", installed=InstallRecordStatus.ANY) == [] + assert mutable_database.query("callpath ^mpich", installed=InstallRecordStatus.ANY) == [] # mpich ref count updated properly. mpich_rec = mutable_database.get_record("mpich") @@ -668,14 +672,14 @@ def fail_while_writing(): raise Exception() with database.read_transaction(): - assert len(database.query("mpileaks ^zmpi", installed=any)) == 1 + assert len(database.query("mpileaks ^zmpi", installed=InstallRecordStatus.ANY)) == 1 with pytest.raises(Exception): fail_while_writing() # reload DB and make sure zmpi is still there. with database.read_transaction(): - assert len(database.query("mpileaks ^zmpi", installed=any)) == 1 + assert len(database.query("mpileaks ^zmpi", installed=InstallRecordStatus.ANY)) == 1 def test_110_no_write_with_exception_on_install(database): @@ -685,14 +689,14 @@ def fail_while_writing(): raise Exception() with database.read_transaction(): - assert database.query("cmake", installed=any) == [] + assert database.query("cmake", installed=InstallRecordStatus.ANY) == [] with pytest.raises(Exception): fail_while_writing() # reload DB and make sure cmake was not written. with database.read_transaction(): - assert database.query("cmake", installed=any) == [] + assert database.query("cmake", installed=InstallRecordStatus.ANY) == [] def test_115_reindex_with_packages_not_in_repo(mutable_database, tmpdir): @@ -1181,3 +1185,20 @@ def test_reindex_with_upstreams(tmp_path, monkeypatch, mock_packages, config): assert not reindexed_local_store.db.query_local("callpath") assert reindexed_local_store.db.query("callpath") == [callpath] assert reindexed_local_store.db.query_local("mpileaks") == [mpileaks] + + +@pytest.mark.regression("47101") +def test_query_with_predicate_fn(database): + all_specs = database.query() + + # Name starts with a string + specs = database.query(predicate_fn=lambda x: x.spec.name.startswith("mpil")) + assert specs and all(x.name.startswith("mpil") for x in specs) + assert len(specs) < len(all_specs) + + # Recipe is currently known/unknown + specs = database.query(predicate_fn=lambda x: spack.repo.PATH.exists(x.spec.name)) + assert specs == all_specs + + specs = database.query(predicate_fn=lambda x: not spack.repo.PATH.exists(x.spec.name)) + assert not specs diff --git a/lib/spack/spack/test/env.py b/lib/spack/spack/test/env.py index 682540361fde1a..a542539899c7cd 100644 --- a/lib/spack/spack/test/env.py +++ b/lib/spack/spack/test/env.py @@ -892,3 +892,32 @@ def test_stack_enforcement_is_strict(tmp_path, matrix_line, config, mock_package with pytest.raises(Exception): with ev.Environment(tmp_path) as e: e.concretize() + + +def test_only_roots_are_explicitly_installed(tmp_path, mock_packages, config, temporary_store): + """When installing specific non-root specs from an environment, we continue to mark them + as implicitly installed. What makes installs explicit is that they are root of the env.""" + env = ev.create_in_dir(tmp_path) + env.add("mpileaks") + env.concretize() + mpileaks = env.concrete_roots()[0] + callpath = mpileaks["callpath"] + env.install_specs([callpath], fake=True) + assert callpath in temporary_store.db.query(explicit=False) + env.install_specs([mpileaks], fake=True) + assert temporary_store.db.query(explicit=True) == [mpileaks] + + +def test_environment_from_name_or_dir(mock_packages, mutable_mock_env_path, tmp_path): + test_env = ev.create("test") + + name_env = ev.environment_from_name_or_dir(test_env.name) + assert name_env.name == test_env.name + assert name_env.path == test_env.path + + dir_env = ev.environment_from_name_or_dir(test_env.path) + assert dir_env.name == test_env.name + assert dir_env.path == test_env.path + + with pytest.raises(ev.SpackEnvironmentError, match="no such environment"): + _ = ev.environment_from_name_or_dir("fake-env") diff --git a/lib/spack/spack/test/graph.py b/lib/spack/spack/test/graph.py index c26363bb46d993..a622e855e55f16 100644 --- a/lib/spack/spack/test/graph.py +++ b/lib/spack/spack/test/graph.py @@ -73,5 +73,18 @@ def test_ascii_graph_mpileaks(config, mock_packages, monkeypatch): o | libdwarf |/ o libelf +""" + or graph_str + == r"""o mpileaks +|\ +| o callpath +|/| +| o dyninst +| |\ +o | | mpich + / / +| o libdwarf +|/ +o libelf """ ) diff --git a/lib/spack/spack/test/installer.py b/lib/spack/spack/test/installer.py index 8df6a1a6eaa00d..38bc1609821bc6 100644 --- a/lib/spack/spack/test/installer.py +++ b/lib/spack/spack/test/installer.py @@ -644,13 +644,12 @@ def test_prepare_for_install_on_installed(install_mockery, monkeypatch): def test_installer_init_requests(install_mockery): """Test of installer initial requests.""" spec_name = "dependent-install" - with spack.config.override("config:install_missing_compilers", True): - installer = create_installer([spec_name], {}) + installer = create_installer([spec_name], {}) - # There is only one explicit request in this case - assert len(installer.build_requests) == 1 - request = installer.build_requests[0] - assert request.pkg.name == spec_name + # There is only one explicit request in this case + assert len(installer.build_requests) == 1 + request = installer.build_requests[0] + assert request.pkg.name == spec_name @pytest.mark.parametrize("transitive", [True, False]) @@ -743,21 +742,20 @@ def _missing(*args, **kwargs): # Set the configuration to ensure _requeue_with_build_spec_tasks actually # does something. - with spack.config.override("config:install_missing_compilers", True): - installer = create_installer(["depb"], {}) - installer._init_queue() - request = installer.build_requests[0] - task = create_build_task(request.pkg) + installer = create_installer(["depb"], {}) + installer._init_queue() + request = installer.build_requests[0] + task = create_build_task(request.pkg) - # Drop one of the specs so its task is missing before _install_task - popped_task = installer._pop_task() - assert inst.package_id(popped_task.pkg.spec) not in installer.build_tasks + # Drop one of the specs so its task is missing before _install_task + popped_task = installer._pop_task() + assert inst.package_id(popped_task.pkg.spec) not in installer.build_tasks - monkeypatch.setattr(task, "execute", _missing) - installer._install_task(task, None) + monkeypatch.setattr(task, "execute", _missing) + installer._install_task(task, None) - # Ensure the dropped task/spec was added back by _install_task - assert inst.package_id(popped_task.pkg.spec) in installer.build_tasks + # Ensure the dropped task/spec was added back by _install_task + assert inst.package_id(popped_task.pkg.spec) in installer.build_tasks def test_release_lock_write_n_exception(install_mockery, tmpdir, capsys): diff --git a/lib/spack/spack/test/link_paths.py b/lib/spack/spack/test/link_paths.py index 2d62c59de61f0d..145203c1ad35cf 100644 --- a/lib/spack/spack/test/link_paths.py +++ b/lib/spack/spack/test/link_paths.py @@ -69,17 +69,6 @@ def test_icc16_link_paths(): ) -def test_pgi_link_paths(): - check_link_paths( - "pgcc-16.3.txt", - [ - os.path.join( - root, "usr", "tce", "packages", "pgi", "pgi-16.3", "linux86-64", "16.3", "lib" - ) - ], - ) - - def test_gcc7_link_paths(): check_link_paths("gcc-7.3.1.txt", []) diff --git a/lib/spack/spack/test/llnl/util/file_list.py b/lib/spack/spack/test/llnl/util/file_list.py index 75ba3ae89d9aca..e2ff5a82109510 100644 --- a/lib/spack/spack/test/llnl/util/file_list.py +++ b/lib/spack/spack/test/llnl/util/file_list.py @@ -9,7 +9,7 @@ import pytest -from llnl.util.filesystem import HeaderList, LibraryList, find, find_headers, find_libraries +from llnl.util.filesystem import HeaderList, LibraryList, find_headers, find_libraries import spack.paths @@ -324,33 +324,3 @@ def test_searching_order(search_fn, search_list, root, kwargs): # List should be empty here assert len(rlist) == 0 - - -@pytest.mark.parametrize( - "root,search_list,kwargs,expected", - [ - ( - search_dir, - "*/*bar.tx?", - {"recursive": False}, - [ - os.path.join(search_dir, os.path.join("a", "foobar.txt")), - os.path.join(search_dir, os.path.join("b", "bar.txp")), - os.path.join(search_dir, os.path.join("c", "bar.txt")), - ], - ), - ( - search_dir, - "*/*bar.tx?", - {"recursive": True}, - [ - os.path.join(search_dir, os.path.join("a", "foobar.txt")), - os.path.join(search_dir, os.path.join("b", "bar.txp")), - os.path.join(search_dir, os.path.join("c", "bar.txt")), - ], - ), - ], -) -def test_find_with_globbing(root, search_list, kwargs, expected): - matches = find(root, search_list, **kwargs) - assert sorted(matches) == sorted(expected) diff --git a/lib/spack/spack/test/llnl/util/filesystem.py b/lib/spack/spack/test/llnl/util/filesystem.py index a0c98747698b20..1a32e5707c735b 100644 --- a/lib/spack/spack/test/llnl/util/filesystem.py +++ b/lib/spack/spack/test/llnl/util/filesystem.py @@ -6,6 +6,7 @@ """Tests for ``llnl/util/filesystem.py``""" import filecmp import os +import pathlib import shutil import stat import sys @@ -14,7 +15,8 @@ import pytest import llnl.util.filesystem as fs -from llnl.util.symlink import islink, readlink, symlink +import llnl.util.symlink +from llnl.util.symlink import _windows_can_symlink, islink, readlink, symlink import spack.paths @@ -1035,3 +1037,215 @@ def test_windows_sfn(tmpdir): assert "d\\LONGER~1" in fs.windows_sfn(d) assert "d\\LONGER~2" in fs.windows_sfn(e) shutil.rmtree(tmpdir.join("d")) + + +@pytest.fixture +def dir_structure_with_things_to_find(tmpdir): + """ + / + dir_one/ + file_one + dir_two/ + dir_three/ + dir_four/ + file_two + file_three + file_four + """ + dir_one = tmpdir.join("dir_one").ensure(dir=True) + tmpdir.join("dir_two").ensure(dir=True) + dir_three = tmpdir.join("dir_three").ensure(dir=True) + dir_four = dir_three.join("dir_four").ensure(dir=True) + + locations = {} + locations["file_one"] = str(dir_one.join("file_one").ensure()) + locations["file_two"] = str(dir_four.join("file_two").ensure()) + locations["file_three"] = str(dir_three.join("file_three").ensure()) + locations["file_four"] = str(tmpdir.join("file_four").ensure()) + + return str(tmpdir), locations + + +def test_find_path_glob_matches(dir_structure_with_things_to_find): + root, locations = dir_structure_with_things_to_find + # both file name and path match + assert ( + fs.find(root, "file_two") + == fs.find(root, "*/*/file_two") + == fs.find(root, "dir_t*/*/*two") + == [locations["file_two"]] + ) + # ensure that * does not match directory separators + assert fs.find(root, "dir*file_two") == [] + # ensure that file name matches after / are matched from the start of the file name + assert fs.find(root, "*/ile_two") == [] + # file name matches exist, but not with these paths + assert fs.find(root, "dir_one/*/*two") == fs.find(root, "*/*/*/*/file_two") == [] + + +def test_find_max_depth(dir_structure_with_things_to_find): + root, locations = dir_structure_with_things_to_find + + # Make sure the paths we use to verify are absolute + assert os.path.isabs(locations["file_one"]) + + assert set(fs.find(root, "file_*", max_depth=0)) == {locations["file_four"]} + assert set(fs.find(root, "file_*", max_depth=1)) == { + locations["file_one"], + locations["file_three"], + locations["file_four"], + } + assert set(fs.find(root, "file_two", max_depth=2)) == {locations["file_two"]} + assert not set(fs.find(root, "file_two", max_depth=1)) + assert set(fs.find(root, "file_two")) == {locations["file_two"]} + assert set(fs.find(root, "file_*")) == set(locations.values()) + + +def test_find_max_depth_relative(dir_structure_with_things_to_find): + """find_max_depth should return absolute paths even if the provided path is relative.""" + root, locations = dir_structure_with_things_to_find + with fs.working_dir(root): + assert set(fs.find(".", "file_*", max_depth=0)) == {locations["file_four"]} + assert set(fs.find(".", "file_two", max_depth=2)) == {locations["file_two"]} + + +@pytest.mark.parametrize("recursive,max_depth", [(False, -1), (False, 1)]) +def test_max_depth_and_recursive_errors(tmpdir, recursive, max_depth): + root = str(tmpdir) + error_str = "cannot be set if recursive is False" + with pytest.raises(ValueError, match=error_str): + fs.find(root, ["some_file"], recursive=recursive, max_depth=max_depth) + + with pytest.raises(ValueError, match=error_str): + fs.find_libraries(["some_lib"], root, recursive=recursive, max_depth=max_depth) + + +@pytest.fixture(params=[True, False]) +def complex_dir_structure(request, tmpdir): + """ + "lx-dy" means "level x, directory y" + "lx-fy" means "level x, file y" + "lx-sy" means "level x, symlink y" + + / + l1-d1/ + l2-d1/ + l3-d2/ + l4-f1 + l3-d4/ + l4-f2 + l3-s1 -> l1-d2 # points to directory above l2-d1 + l3-s3 -> l1-d1 # cyclic link + l1-d2/ + l2-d2/ + l3-f3 + l2-f1 + l2-s3 -> l2-d2 + l1-s3 -> l3-d4 # a link that "skips" a directory level + l1-s4 -> l2-s3 # a link to a link to a dir + """ + use_junctions = request.param + if sys.platform == "win32" and not use_junctions and not _windows_can_symlink(): + pytest.skip("This Windows instance is not configured with symlink support") + elif sys.platform != "win32" and use_junctions: + pytest.skip("Junctions are a Windows-only feature") + + l1_d1 = tmpdir.join("l1-d1").ensure(dir=True) + l2_d1 = l1_d1.join("l2-d1").ensure(dir=True) + l3_d2 = l2_d1.join("l3-d2").ensure(dir=True) + l3_d4 = l2_d1.join("l3-d4").ensure(dir=True) + l1_d2 = tmpdir.join("l1-d2").ensure(dir=True) + l2_d2 = l1_d2.join("l2-d2").ensure(dir=True) + + if use_junctions: + link_fn = llnl.util.symlink._windows_create_junction + else: + link_fn = os.symlink + + link_fn(l1_d2, pathlib.Path(l2_d1) / "l3-s1") + link_fn(l1_d1, pathlib.Path(l2_d1) / "l3-s3") + link_fn(l3_d4, pathlib.Path(tmpdir) / "l1-s3") + l2_s3 = pathlib.Path(l1_d2) / "l2-s3" + link_fn(l2_d2, l2_s3) + link_fn(l2_s3, pathlib.Path(tmpdir) / "l1-s4") + + locations = { + "l4-f1": str(l3_d2.join("l4-f1").ensure()), + "l4-f2-full": str(l3_d4.join("l4-f2").ensure()), + "l4-f2-link": str(pathlib.Path(tmpdir) / "l1-s3" / "l4-f2"), + "l2-f1": str(l1_d2.join("l2-f1").ensure()), + "l2-f1-link": str(pathlib.Path(tmpdir) / "l1-d1" / "l2-d1" / "l3-s1" / "l2-f1"), + "l3-f3-full": str(l2_d2.join("l3-f3").ensure()), + "l3-f3-link-l1": str(pathlib.Path(tmpdir) / "l1-s4" / "l3-f3"), + } + + return str(tmpdir), locations + + +def test_find_max_depth_symlinks(complex_dir_structure): + root, locations = complex_dir_structure + root = pathlib.Path(root) + assert set(fs.find(root, "l4-f1")) == {locations["l4-f1"]} + assert set(fs.find(root / "l1-s3", "l4-f2", max_depth=0)) == {locations["l4-f2-link"]} + assert set(fs.find(root / "l1-d1", "l2-f1")) == {locations["l2-f1-link"]} + # File is accessible via symlink and subdir, the link path will be + # searched first, and the directory will not be searched again when + # it is encountered the second time (via not-link) in the traversal + assert set(fs.find(root, "l4-f2")) == {locations["l4-f2-link"]} + # File is accessible only via the dir, so the full file path should + # be reported + assert set(fs.find(root / "l1-d1", "l4-f2")) == {locations["l4-f2-full"]} + # Check following links to links + assert set(fs.find(root, "l3-f3")) == {locations["l3-f3-link-l1"]} + + +def test_find_max_depth_multiple_and_repeated_entry_points(complex_dir_structure): + root, locations = complex_dir_structure + + fst = str(pathlib.Path(root) / "l1-d1" / "l2-d1") + snd = str(pathlib.Path(root) / "l1-d2") + nonexistent = str(pathlib.Path(root) / "nonexistent") + + assert set(fs.find([fst, snd, fst, snd, nonexistent], ["l*-f*"], max_depth=1)) == { + locations["l2-f1"], + locations["l4-f1"], + locations["l4-f2-full"], + locations["l3-f3-full"], + } + + +def test_multiple_patterns(complex_dir_structure): + root, _ = complex_dir_structure + paths = fs.find(root, ["l2-f1", "l*-d*/l3-f3", "*-f*", "*/*-f*"]) + # There shouldn't be duplicate results with multiple, overlapping patterns + assert len(set(paths)) == len(paths) + # All files should be found + filenames = [os.path.basename(p) for p in paths] + assert set(filenames) == {"l2-f1", "l3-f3", "l4-f1", "l4-f2"} + # They are ordered by first matching pattern (this is a bit of an implementation detail, + # and we could decide to change the exact order in the future) + assert filenames[0] == "l2-f1" + assert filenames[1] == "l3-f3" + + +def test_find_input_types(tmp_path: pathlib.Path): + """test that find only accepts sequences and instances of pathlib.Path and str for root, and + only sequences and instances of str for patterns. In principle mypy catches these issues, but + it is not enabled on all call-sites.""" + (tmp_path / "file.txt").write_text("") + assert ( + fs.find(tmp_path, "file.txt") + == fs.find(str(tmp_path), "file.txt") + == fs.find([tmp_path, str(tmp_path)], "file.txt") + == fs.find((tmp_path, str(tmp_path)), "file.txt") + == fs.find(tmp_path, "file.txt") + == fs.find(tmp_path, ["file.txt"]) + == fs.find(tmp_path, ("file.txt",)) + == [str(tmp_path / "file.txt")] + ) + + with pytest.raises(TypeError): + fs.find(tmp_path, pathlib.Path("file.txt")) # type: ignore + + with pytest.raises(TypeError): + fs.find(1, "file.txt") # type: ignore diff --git a/lib/spack/spack/test/llnl/util/lang.py b/lib/spack/spack/test/llnl/util/lang.py index abf2c5b1346bd3..6926c50cd89e90 100644 --- a/lib/spack/spack/test/llnl/util/lang.py +++ b/lib/spack/spack/test/llnl/util/lang.py @@ -336,3 +336,56 @@ def test_grouped_exception_base_type(): message = h.grouped_message(with_tracebacks=False) assert "catch-runtime-error" in message assert "catch-value-error" not in message + + +def test_class_level_constant_value(): + """Tests that the Const descriptor does not allow overwriting the value from an instance""" + + class _SomeClass: + CONST_VALUE = llnl.util.lang.Const(10) + + with pytest.raises(TypeError, match="not support assignment"): + _SomeClass().CONST_VALUE = 11 + + +def test_deprecated_property(): + """Tests the behavior of the DeprecatedProperty descriptor, which is can be used when + deprecating an attribute. + """ + + class _Deprecated(llnl.util.lang.DeprecatedProperty): + def factory(self, instance, owner): + return 46 + + class _SomeClass: + deprecated = _Deprecated("deprecated") + + # Default behavior is to just return the deprecated value + s = _SomeClass() + assert s.deprecated == 46 + + # When setting error_level to 1 the attribute warns + _SomeClass.deprecated.error_lvl = 1 + with pytest.warns(UserWarning): + assert s.deprecated == 46 + + # When setting error_level to 2 an exception is raised + _SomeClass.deprecated.error_lvl = 2 + with pytest.raises(AttributeError): + _ = s.deprecated + + +def test_fnmatch_multiple(): + named_patterns = {"a": "libf*o.so", "b": "libb*r.so"} + regex = re.compile(llnl.util.lang.fnmatch_translate_multiple(named_patterns)) + + a = regex.match("libfoo.so") + assert a and a.group("a") == "libfoo.so" + + b = regex.match("libbar.so") + assert b and b.group("b") == "libbar.so" + + assert not regex.match("libfoo.so.1") + assert not regex.match("libbar.so.1") + assert not regex.match("libfoo.solibbar.so") + assert not regex.match("libbaz.so") diff --git a/lib/spack/spack/test/mirror.py b/lib/spack/spack/test/mirror.py index 10d375a7fb652b..ce104259fc76ca 100644 --- a/lib/spack/spack/test/mirror.py +++ b/lib/spack/spack/test/mirror.py @@ -8,6 +8,7 @@ import pytest +from llnl.util.filesystem import working_dir from llnl.util.symlink import resolve_link_target_relative_to_the_link import spack.caches @@ -19,6 +20,7 @@ import spack.util.executable import spack.util.spack_json as sjson import spack.util.url as url_util +from spack.cmd.common.arguments import mirror_name_or_url from spack.spec import Spec from spack.util.executable import which from spack.util.spack_yaml import SpackYAMLError @@ -327,9 +329,9 @@ def test_update_4(): @pytest.mark.parametrize("direction", ["fetch", "push"]) -def test_update_connection_params(direction): +def test_update_connection_params(direction, tmpdir, monkeypatch): """Test whether new connection params expand the mirror config to a dict.""" - m = spack.mirror.Mirror("https://example.com") + m = spack.mirror.Mirror("https://example.com", "example") assert m.update( { @@ -352,8 +354,69 @@ def test_update_connection_params(direction): "endpoint_url": "https://example.com", }, } - - assert m.get_access_pair(direction) == ["username", "password"] + assert m.get_access_pair(direction) == ("username", "password") assert m.get_access_token(direction) == "token" assert m.get_profile(direction) == "profile" assert m.get_endpoint_url(direction) == "https://example.com" + + # Expand environment variables + os.environ["_SPACK_TEST_PAIR_USERNAME"] = "expanded_username" + os.environ["_SPACK_TEST_PAIR_PASSWORD"] = "expanded_password" + os.environ["_SPACK_TEST_TOKEN"] = "expanded_token" + + assert m.update( + { + "access_pair": { + "id_variable": "_SPACK_TEST_PAIR_USERNAME", + "secret_variable": "_SPACK_TEST_PAIR_PASSWORD", + } + }, + direction, + ) + + assert m.to_dict() == { + "url": "https://example.com", + direction: { + "url": "http://example.org", + "access_pair": { + "id_variable": "_SPACK_TEST_PAIR_USERNAME", + "secret_variable": "_SPACK_TEST_PAIR_PASSWORD", + }, + "access_token": "token", + "profile": "profile", + "endpoint_url": "https://example.com", + }, + } + + assert m.get_access_pair(direction) == ("expanded_username", "expanded_password") + + assert m.update( + { + "access_pair": {"id": "username", "secret_variable": "_SPACK_TEST_PAIR_PASSWORD"}, + "access_token_variable": "_SPACK_TEST_TOKEN", + }, + direction, + ) + + assert m.to_dict() == { + "url": "https://example.com", + direction: { + "url": "http://example.org", + "access_pair": {"id": "username", "secret_variable": "_SPACK_TEST_PAIR_PASSWORD"}, + "access_token_variable": "_SPACK_TEST_TOKEN", + "profile": "profile", + "endpoint_url": "https://example.com", + }, + } + + assert m.get_access_pair(direction) == ("username", "expanded_password") + assert m.get_access_token(direction) == "expanded_token" + + +def test_mirror_name_or_url_dir_parsing(tmp_path): + curdir = tmp_path / "mirror" + curdir.mkdir() + + with working_dir(curdir): + assert mirror_name_or_url(".").fetch_url == curdir.as_uri() + assert mirror_name_or_url("..").fetch_url == tmp_path.as_uri() diff --git a/lib/spack/spack/test/modules/common.py b/lib/spack/spack/test/modules/common.py index 7190689f824dec..c7f63f64b6de72 100644 --- a/lib/spack/spack/test/modules/common.py +++ b/lib/spack/spack/test/modules/common.py @@ -12,6 +12,7 @@ import spack.cmd.modules import spack.config import spack.error +import spack.modules import spack.modules.common import spack.modules.tcl import spack.package_base diff --git a/lib/spack/spack/test/modules/tcl.py b/lib/spack/spack/test/modules/tcl.py index 6e0fd5c1a5450e..d2a8b18b67aa85 100644 --- a/lib/spack/spack/test/modules/tcl.py +++ b/lib/spack/spack/test/modules/tcl.py @@ -377,6 +377,14 @@ def test_suffixes(self, module_configuration, factory): writer, spec = factory("mpileaks~debug+opt target=x86_64") assert "baz-foo-bar" in writer.layout.use_name + def test_suffixes_format(self, module_configuration, factory): + """Tests adding suffixes as spec format string to module file name.""" + module_configuration("suffix-format") + + writer, spec = factory("mpileaks +debug target=x86_64 ^mpich@3.0.4") + assert "debug=True" in writer.layout.use_name + assert "mpi=mpich-v3.0.4" in writer.layout.use_name + def test_setup_environment(self, modulefile_content, module_configuration): """Tests the internal set-up of run-time environment.""" diff --git a/lib/spack/spack/test/package_class.py b/lib/spack/spack/test/package_class.py index 76ace98049c1f7..72eaa1f739b57f 100644 --- a/lib/spack/spack/test/package_class.py +++ b/lib/spack/spack/test/package_class.py @@ -18,10 +18,10 @@ import llnl.util.filesystem as fs import spack.compilers -import spack.config import spack.deptypes as dt import spack.error import spack.install_test +import spack.package import spack.package_base import spack.repo import spack.spec diff --git a/lib/spack/spack/test/spec_dag.py b/lib/spack/spack/test/spec_dag.py index 0d1fe4abcfccfb..05cc15f3dabbb8 100644 --- a/lib/spack/spack/test/spec_dag.py +++ b/lib/spack/spack/test/spec_dag.py @@ -756,6 +756,48 @@ def test_spec_tree_respect_deptypes(self): out = s.tree(deptypes=("link", "run")) assert "version-test-pkg" not in out + @pytest.mark.parametrize( + "query,expected_length,expected_satisfies", + [ + ({"virtuals": ["mpi"]}, 1, ["mpich", "mpi"]), + ({"depflag": dt.BUILD}, 2, ["mpich", "mpi", "callpath"]), + ({"depflag": dt.BUILD, "virtuals": ["mpi"]}, 1, ["mpich", "mpi"]), + ({"depflag": dt.LINK}, 2, ["mpich", "mpi", "callpath"]), + ({"depflag": dt.BUILD | dt.LINK}, 2, ["mpich", "mpi", "callpath"]), + ({"virtuals": ["lapack"]}, 0, []), + ], + ) + def test_query_dependency_edges( + self, default_mock_concretization, query, expected_length, expected_satisfies + ): + """Tests querying edges to dependencies on the following DAG: + + [ ] mpileaks@=2.3 + [bl ] ^callpath@=1.0 + [bl ] ^dyninst@=8.2 + [bl ] ^libdwarf@=20130729 + [bl ] ^libelf@=0.8.13 + [bl ] ^mpich@=3.0.4 + """ + mpileaks = default_mock_concretization("mpileaks") + edges = mpileaks.edges_to_dependencies(**query) + assert len(edges) == expected_length + for constraint in expected_satisfies: + assert any(x.spec.satisfies(constraint) for x in edges) + + def test_query_dependents_edges(self, default_mock_concretization): + """Tests querying edges from dependents""" + mpileaks = default_mock_concretization("mpileaks") + mpich = mpileaks["mpich"] + + # Recover the root with 2 different queries + edges_of_link_type = mpich.edges_from_dependents(depflag=dt.LINK) + edges_with_mpi = mpich.edges_from_dependents(virtuals=["mpi"]) + assert edges_with_mpi == edges_of_link_type + + # Check a node dependend upon by 2 parents + assert len(mpileaks["libelf"].edges_from_dependents(depflag=dt.LINK)) == 2 + def test_tree_cover_nodes_reduce_deptype(): """Test that tree output with deptypes sticks to the sub-dag of interest, instead of looking diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py index a821c53f2fb934..6fcdcded151f83 100644 --- a/lib/spack/spack/test/spec_semantics.py +++ b/lib/spack/spack/test/spec_semantics.py @@ -159,8 +159,8 @@ class TestSpecSemantics: ("foo%intel", "%intel", "foo%intel"), ("foo%gcc", "%gcc@4.7.2", "foo%gcc@4.7.2"), ("foo%intel", "%intel@4.7.2", "foo%intel@4.7.2"), - ("foo%pgi@4.5", "%pgi@4.4:4.6", "foo%pgi@4.5"), - ("foo@2.0%pgi@4.5", "@1:3%pgi@4.4:4.6", "foo@2.0%pgi@4.5"), + ("foo%gcc@4.5", "%gcc@4.4:4.6", "foo%gcc@4.5"), + ("foo@2.0%gcc@4.5", "@1:3%gcc@4.4:4.6", "foo@2.0%gcc@4.5"), ("foo %gcc@4.7.3", "%gcc@4.7", "foo %gcc@4.7.3"), ("libelf %gcc@4.4.7", "libelf %gcc@4.4.7", "libelf %gcc@4.4.7"), ("libelf", "libelf %gcc@4.4.7", "libelf %gcc@4.4.7"), @@ -231,7 +231,7 @@ class TestSpecSemantics: ("mpich+foo", "mpich foo=True", "mpich+foo"), ("mpich++foo", "mpich foo=True", "mpich+foo"), ("mpich foo=true", "mpich+foo", "mpich+foo"), - ("mpich foo==true", "mpich++foo", "mpich+foo"), + ("mpich foo==true", "mpich++foo", "mpich++foo"), ("mpich~foo", "mpich foo=FALSE", "mpich~foo"), ("mpich~~foo", "mpich foo=FALSE", "mpich~foo"), ("mpich foo=False", "mpich~foo", "mpich~foo"), @@ -271,17 +271,17 @@ class TestSpecSemantics: ("mpich+foo", "mpich", "mpich+foo"), ("mpich~foo", "mpich", "mpich~foo"), ("mpich foo=1", "mpich", "mpich foo=1"), - ("mpich", "mpich++foo", "mpich+foo"), + ("mpich", "mpich++foo", "mpich++foo"), ("libelf+debug", "libelf+foo", "libelf+debug+foo"), ("libelf+debug", "libelf+debug+foo", "libelf+debug+foo"), ("libelf debug=2", "libelf foo=1", "libelf debug=2 foo=1"), ("libelf debug=2", "libelf debug=2 foo=1", "libelf debug=2 foo=1"), ("libelf+debug", "libelf~foo", "libelf+debug~foo"), ("libelf+debug", "libelf+debug~foo", "libelf+debug~foo"), - ("libelf++debug", "libelf+debug+foo", "libelf++debug++foo"), - ("libelf debug==2", "libelf foo=1", "libelf debug==2 foo==1"), - ("libelf debug==2", "libelf debug=2 foo=1", "libelf debug==2 foo==1"), - ("libelf++debug", "libelf++debug~foo", "libelf++debug~~foo"), + ("libelf++debug", "libelf+debug+foo", "libelf+debug+foo"), + ("libelf debug==2", "libelf foo=1", "libelf debug==2 foo=1"), + ("libelf debug==2", "libelf debug=2 foo=1", "libelf debug=2 foo=1"), + ("libelf++debug", "libelf++debug~foo", "libelf++debug~foo"), ("libelf foo=bar,baz", "libelf foo=*", "libelf foo=bar,baz"), ("libelf foo=*", "libelf foo=bar,baz", "libelf foo=bar,baz"), ( @@ -367,19 +367,24 @@ def test_abstract_specs_can_constrain_each_other(self, lhs, rhs, expected): 'mpich cflags="-O3 -g"', 'mpich cflags=="-O3"', 'mpich cflags="-O3 -g"', + 'mpich cflags="-O3 -g"', + [], + [], + ), + ( 'mpich cflags=="-O3 -g"', - [("cflags", "-O3")], - [("cflags", "-O3")], + 'mpich cflags=="-O3"', + 'mpich cflags=="-O3 -g"', + 'mpich cflags=="-O3 -g"', + [("cflags", "-O3"), ("cflags", "-g")], + [("cflags", "-O3"), ("cflags", "-g")], ), ], ) def test_constrain_compiler_flags( self, lhs, rhs, expected_lhs, expected_rhs, propagated_lhs, propagated_rhs ): - """Constraining is asymmetric for compiler flags. Also note that - Spec equality does not account for flag propagation, so the checks - here are manual. - """ + """Constraining is asymmetric for compiler flags.""" lhs, rhs, expected_lhs, expected_rhs = ( Spec(lhs), Spec(rhs), @@ -457,10 +462,10 @@ def test_concrete_specs_which_satisfies_abstract(self, lhs, rhs, default_mock_co ("foo target=x86_64", "platform=test os=redhat6 target=x86"), ("foo arch=test-frontend-frontend", "platform=test os=frontend target=backend"), ("foo%intel", "%gcc"), - ("foo%intel", "%pgi"), - ("foo%pgi@4.3", "%pgi@4.4:4.6"), - ("foo@4.0%pgi", "@1:3%pgi"), - ("foo@4.0%pgi@4.5", "@1:3%pgi@4.4:4.6"), + ("foo%intel", "%gcc"), + ("foo%gcc@4.3", "%gcc@4.4:4.6"), + ("foo@4.0%gcc", "@1:3%gcc"), + ("foo@4.0%gcc@4.5", "@1:3%gcc@4.4:4.6"), ("builtin.mock.mpich", "builtin.mpich"), ("mpileaks ^builtin.mock.mpich", "^builtin.mpich"), ("mpileaks^mpich@1.2", "^mpich@2.0"), @@ -507,9 +512,6 @@ def test_constraining_abstract_specs_with_empty_intersection(self, lhs, rhs): ("mpich", "mpich +foo"), ("mpich", "mpich~foo"), ("mpich", "mpich foo=1"), - ("mpich", "mpich++foo"), - ("mpich", "mpich~~foo"), - ("mpich", "mpich foo==1"), ("multivalue-variant foo=bar", "multivalue-variant +foo"), ("multivalue-variant foo=bar", "multivalue-variant ~foo"), ("multivalue-variant fee=bar", "multivalue-variant fee=baz"), @@ -531,6 +533,58 @@ def test_concrete_specs_which_do_not_satisfy_abstract( with pytest.raises(UnsatisfiableSpecError): assert rhs.constrain(lhs) + @pytest.mark.parametrize( + "lhs,rhs", [("mpich", "mpich++foo"), ("mpich", "mpich~~foo"), ("mpich", "mpich foo==1")] + ) + def test_concrete_specs_which_satisfy_abstract(self, lhs, rhs, default_mock_concretization): + lhs, rhs = default_mock_concretization(lhs), Spec(rhs) + + assert lhs.intersects(rhs) + assert rhs.intersects(lhs) + assert lhs.satisfies(rhs) + + s1 = lhs.copy() + s1.constrain(rhs) + assert s1 == lhs and s1.satisfies(lhs) + + s2 = rhs.copy() + s2.constrain(lhs) + assert s2 == lhs and s2.satisfies(lhs) + + @pytest.mark.parametrize( + "lhs,rhs,expected,constrained", + [ + # hdf5++mpi satisfies hdf5, and vice versa, because of the non-contradiction semantic + ("hdf5++mpi", "hdf5", True, "hdf5++mpi"), + ("hdf5", "hdf5++mpi", True, "hdf5++mpi"), + # Same holds true for arbitrary propagated variants + ("hdf5++mpi", "hdf5++shared", True, "hdf5++mpi++shared"), + # Here hdf5+mpi satisfies hdf5++mpi but not vice versa + ("hdf5++mpi", "hdf5+mpi", False, "hdf5+mpi"), + ("hdf5+mpi", "hdf5++mpi", True, "hdf5+mpi"), + # Non contradiction is violated + ("hdf5 ^foo~mpi", "hdf5++mpi", False, "hdf5++mpi ^foo~mpi"), + ("hdf5++mpi", "hdf5 ^foo~mpi", False, "hdf5++mpi ^foo~mpi"), + ], + ) + def test_abstract_specs_with_propagation(self, lhs, rhs, expected, constrained): + """Tests (and documents) behavior of variant propagation on abstract specs. + + Propagated variants do not comply with subset semantic, making it difficult to give + precise definitions. Here we document the behavior that has been decided for the + practical cases we face. + """ + lhs, rhs, constrained = Spec(lhs), Spec(rhs), Spec(constrained) + assert lhs.satisfies(rhs) is expected + + c = lhs.copy() + c.constrain(rhs) + assert c == constrained + + c = rhs.copy() + c.constrain(lhs) + assert c == constrained + def test_satisfies_single_valued_variant(self): """Tests that the case reported in https://github.com/spack/spack/pull/2386#issuecomment-282147639 @@ -1709,8 +1763,8 @@ def test_package_hash_affects_dunder_and_dag_hash(mock_packages, default_mock_co assert a1.dag_hash() == a2.dag_hash() assert a1.process_hash() == a2.process_hash() - a1.clear_cached_hashes() - a2.clear_cached_hashes() + a1.clear_caches() + a2.clear_caches() # tweak the dag hash of one of these specs new_hash = "00000000000000000000000000000000" @@ -1904,3 +1958,24 @@ def test_old_format_strings_trigger_error(default_mock_concretization): s = Spec("pkg-a").concretized() with pytest.raises(SpecFormatStringError): s.format("${PACKAGE}-${VERSION}-${HASH}") + + +@pytest.mark.regression("47362") +@pytest.mark.parametrize( + "lhs,rhs", + [ + ("hdf5 +mpi", "hdf5++mpi"), + ("hdf5 cflags==-g", "hdf5 cflags=-g"), + ("hdf5 +mpi ++shared", "hdf5+mpi +shared"), + ("hdf5 +mpi cflags==-g", "hdf5++mpi cflag=-g"), + ], +) +def test_equality_discriminate_on_propagation(lhs, rhs): + """Tests that == can discriminate abstract specs based on their 'propagation' status""" + s, t = Spec(lhs), Spec(rhs) + assert s != t + assert len({s, t}) == 2 + + +def test_comparison_multivalued_variants(): + assert Spec("x=a") < Spec("x=a,b") < Spec("x==a,b") < Spec("x==a,b,c") diff --git a/lib/spack/spack/test/spec_yaml.py b/lib/spack/spack/test/spec_yaml.py index 5b64822b38268a..79f128e94833cd 100644 --- a/lib/spack/spack/test/spec_yaml.py +++ b/lib/spack/spack/test/spec_yaml.py @@ -16,6 +16,7 @@ import io import json import os +import pickle import pytest import ruamel.yaml @@ -551,3 +552,26 @@ def test_anchorify_2(): e: *id002 """ ) + + +@pytest.mark.parametrize( + "spec_str", + [ + "hdf5 ++mpi", + "hdf5 cflags==-g", + "hdf5 foo==bar", + "hdf5~~mpi++shared", + "hdf5 cflags==-g foo==bar cxxflags==-O3", + "hdf5 cflags=-g foo==bar cxxflags==-O3", + ], +) +def test_pickle_roundtrip_for_abstract_specs(spec_str): + """Tests that abstract specs correctly round trip when pickled. + + This test compares both spec objects and their string representation, due to some + inconsistencies in how `Spec.__eq__` is implemented. + """ + s = spack.spec.Spec(spec_str) + t = pickle.loads(pickle.dumps(s)) + assert s == t + assert str(s) == str(t) diff --git a/lib/spack/spack/test/test_suite.py b/lib/spack/spack/test/test_suite.py index 60a54e7171bba2..3ed4e30d42c740 100644 --- a/lib/spack/spack/test/test_suite.py +++ b/lib/spack/spack/test/test_suite.py @@ -501,18 +501,20 @@ def test_find_required_file(tmpdir): # First just find a single path results = spack.install_test.find_required_file( - tmpdir.join("c"), filename, expected=1, recursive=True + str(tmpdir.join("c")), filename, expected=1, recursive=True ) assert isinstance(results, str) # Ensure none file if do not recursively search that directory with pytest.raises(spack.install_test.SkipTest, match="Expected 1"): spack.install_test.find_required_file( - tmpdir.join("c"), filename, expected=1, recursive=False + str(tmpdir.join("c")), filename, expected=1, recursive=False ) # Now make sure we get all of the files - results = spack.install_test.find_required_file(tmpdir, filename, expected=3, recursive=True) + results = spack.install_test.find_required_file( + str(tmpdir), filename, expected=3, recursive=True + ) assert isinstance(results, list) and len(results) == 3 diff --git a/lib/spack/spack/test/traverse.py b/lib/spack/spack/test/traverse.py index 79e05c0b2c369c..62ce24d366ee1b 100644 --- a/lib/spack/spack/test/traverse.py +++ b/lib/spack/spack/test/traverse.py @@ -431,3 +431,26 @@ def test_traverse_nodes_no_deps(abstract_specs_dtuse): ] outputs = [x for x in traverse.traverse_nodes(inputs, deptype=dt.NONE)] assert outputs == [abstract_specs_dtuse["dtuse"], abstract_specs_dtuse["dtlink5"]] + + +@pytest.mark.parametrize("cover", ["nodes", "edges"]) +def test_topo_is_bfs_for_trees(cover): + """For trees, both DFS and BFS produce a topological order, but BFS is the most sensible for + our applications, where we typically want to avoid that transitive dependencies shadow direct + depenencies in global search paths, etc. This test ensures that for trees, the default topo + order coincides with BFS.""" + binary_tree = create_dag( + nodes=["A", "B", "C", "D", "E", "F", "G"], + edges=( + ("A", "B", "all"), + ("A", "C", "all"), + ("B", "D", "all"), + ("B", "E", "all"), + ("C", "F", "all"), + ("C", "G", "all"), + ), + ) + + assert list(traverse.traverse_nodes([binary_tree["A"]], order="topo", cover=cover)) == list( + traverse.traverse_nodes([binary_tree["A"]], order="breadth", cover=cover) + ) diff --git a/lib/spack/spack/test/util/file_cache.py b/lib/spack/spack/test/util/file_cache.py index cd9ce1c5b8defb..4af8a1ed0391d2 100644 --- a/lib/spack/spack/test/util/file_cache.py +++ b/lib/spack/spack/test/util/file_cache.py @@ -31,6 +31,11 @@ def test_write_and_read_cache_file(file_cache): assert text == "foobar\n" +def test_read_before_init(file_cache): + with file_cache.read_transaction("test.yaml") as stream: + assert stream is None + + @pytest.mark.not_on_windows("Locks not supported on Windows") def test_failed_write_and_read_cache_file(file_cache): """Test failing to write then attempting to read a cached file.""" @@ -46,11 +51,6 @@ def test_failed_write_and_read_cache_file(file_cache): # File does not exist assert not file_cache.init_entry("test.yaml") - # Attempting to read will cause a FileNotFoundError - with pytest.raises(FileNotFoundError, match=r"test\.yaml"): - with file_cache.read_transaction("test.yaml"): - pass - def test_write_and_remove_cache_file(file_cache): """Test two write transactions on a cached file. Then try to remove an diff --git a/lib/spack/spack/test/utilities.py b/lib/spack/spack/test/utilities.py new file mode 100644 index 00000000000000..5e83db9da27939 --- /dev/null +++ b/lib/spack/spack/test/utilities.py @@ -0,0 +1,32 @@ +# Copyright 2013-2024 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) + +"""Non-fixture utilities for test code. Must be imported. +""" +from spack.main import make_argument_parser + + +class SpackCommandArgs: + """Use this to get an Args object like what is passed into + a command. + + Useful for emulating args in unit tests that want to check + helper functions in Spack commands. Ensures that you get all + the default arg values established by the parser. + + Example usage:: + + install_args = SpackCommandArgs("install")("-v", "mpich") + """ + + def __init__(self, command_name): + self.parser = make_argument_parser() + self.command_name = command_name + + def __call__(self, *argv, **kwargs): + self.parser.add_command(self.command_name) + prepend = kwargs["global_args"] if "global_args" in kwargs else [] + args, unknown = self.parser.parse_known_args(prepend + [self.command_name] + list(argv)) + return args diff --git a/lib/spack/spack/test/variant.py b/lib/spack/spack/test/variant.py index c4c439b86f8991..518110d52534d0 100644 --- a/lib/spack/spack/test/variant.py +++ b/lib/spack/spack/test/variant.py @@ -762,7 +762,7 @@ def test_disjoint_set_fluent_methods(): @pytest.mark.regression("32694") @pytest.mark.parametrize("other", [True, False]) def test_conditional_value_comparable_to_bool(other): - value = spack.variant.Value("98", when="@1.0") + value = spack.variant.ConditionalValue("98", when=Spec("@1.0")) comparison = value == other assert comparison is False diff --git a/lib/spack/spack/traverse.py b/lib/spack/spack/traverse.py index f6c5589b2aeaf7..158f4d892e3017 100644 --- a/lib/spack/spack/traverse.py +++ b/lib/spack/spack/traverse.py @@ -115,70 +115,6 @@ def neighbors(self, item): return self.visitor.neighbors(item) -class TopoVisitor: - """Visitor that can be used in :py:func:`depth-first traversal - ` to generate - a topologically ordered list of specs. - - Algorithm based on "Section 22.4: Topological sort", Introduction to Algorithms - (2001, 2nd edition) by Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; - Stein, Clifford. - - Summary of the algorithm: prepend each vertex to a list in depth-first post-order, - not following edges to nodes already seen. This ensures all descendants occur after - their parent, yielding a topological order. - - Note: in this particular implementation we collect the *edges* through which the - vertices are discovered, meaning that a topological order of *vertices* is obtained - by taking the specs pointed to: ``map(lambda edge: edge.spec, visitor.edges)``. - Lastly, ``all_edges=True`` can be used to retrieve a list of all reachable - edges, with the property that for each vertex all in-edges precede all out-edges. - """ - - def __init__(self, visitor, key=id, root=True, all_edges=False): - """ - Arguments: - visitor: visitor that implements accept(), pre(), post() and neighbors() - key: uniqueness key for nodes - root (bool): Whether to include the root node. - all_edges (bool): when ``False`` (default): Each node is reached once, - and ``map(lambda edge: edge.spec, visitor.edges)`` is topologically - ordered. When ``True``, every edge is listed, ordered such that for - each node all in-edges precede all out-edges. - """ - self.visited = set() - self.visitor = visitor - self.key = key - self.root = root - self.reverse_order = [] - self.all_edges = all_edges - - def accept(self, item): - if self.key(item.edge.spec) not in self.visited: - return True - if self.all_edges and (self.root or item.depth > 0): - self.reverse_order.append(item.edge) - return False - - def pre(self, item): - # You could add a temporary marker for cycle detection - # that's cleared in `post`, but we assume no cycles. - pass - - def post(self, item): - self.visited.add(self.key(item.edge.spec)) - if self.root or item.depth > 0: - self.reverse_order.append(item.edge) - - def neighbors(self, item): - return self.visitor.neighbors(item) - - @property - def edges(self): - """Return edges in topological order (in-edges precede out-edges).""" - return list(reversed(self.reverse_order)) - - def get_visitor_from_args( cover, direction, depflag: Union[dt.DepFlag, dt.DepTypes], key=id, visited=None, visitor=None ): @@ -381,39 +317,54 @@ def traverse_breadth_first_tree_nodes(parent_id, edges, key=id, depth=0): yield item -# Topologic order -def traverse_edges_topo( - specs, - direction="children", - deptype: Union[dt.DepFlag, dt.DepTypes] = "all", - key=id, - root=True, - all_edges=False, -): +def traverse_topo_edges_generator(edges, visitor, key=id, root=True, all_edges=False): """ - Returns a list of edges in topological order, in the sense that all in-edges of a - vertex appear before all out-edges. By default with direction=children edges are - directed from dependent to dependency. With directions=parents, the edges are - directed from dependency to dependent. + Returns a list of edges in topological order, in the sense that all in-edges of a vertex appear + before all out-edges. Arguments: - specs (list): List of root specs (considered to be depth 0) - direction (str): ``children`` (edges are directed from dependent to dependency) - or ``parents`` (edges are flipped / directed from dependency to dependent) - deptype: allowed dependency types + edges (list): List of EdgeAndDepth instances + visitor: visitor instance that defines the sub-DAG to traverse key: function that takes a spec and outputs a key for uniqueness test. root (bool): Yield the root nodes themselves all_edges (bool): When ``False`` only one in-edge per node is returned, when ``True`` all reachable edges are returned. """ - if not isinstance(deptype, dt.DepFlag): - deptype = dt.canonicalize(deptype) - visitor: Union[BaseVisitor, ReverseVisitor, TopoVisitor] = BaseVisitor(deptype) - if direction == "parents": - visitor = ReverseVisitor(visitor, deptype) - visitor = TopoVisitor(visitor, key=key, root=root, all_edges=all_edges) - traverse_depth_first_with_visitor(with_artificial_edges(specs), visitor) - return visitor.edges + # Topo order used to be implemented using a DFS visitor, which was relatively efficient in that + # it would visit nodes only once, and it was composable. In practice however it would yield a + # DFS order on DAGs that are trees, which is undesirable in many cases. For example, a list of + # search paths for trees is better in BFS order, so that direct dependencies are listed first. + # That way a transitive dependency cannot shadow a direct one. So, here we collect the sub-DAG + # of interest and then compute a topological order that is the most breadth-first possible. + + # maps node identifier to the number of remaining in-edges + in_edge_count = defaultdict(int) + # maps parent identifier to a list of edges, where None is a special identifier + # for the artificial root/source. + node_to_edges = defaultdict(list) + for edge in traverse_breadth_first_edges_generator( + edges, CoverEdgesVisitor(visitor, key=key), root=True, depth=False + ): + in_edge_count[key(edge.spec)] += 1 + parent_id = key(edge.parent) if edge.parent is not None else None + node_to_edges[parent_id].append(edge) + + queue = [None] + + while queue: + for edge in node_to_edges[queue.pop(0)]: + child_id = key(edge.spec) + in_edge_count[child_id] -= 1 + + should_yield = root or edge.parent is not None + + if all_edges and should_yield: + yield edge + + if in_edge_count[child_id] == 0: + if not all_edges and should_yield: + yield edge + queue.append(key(edge.spec)) # High-level API: traverse_edges, traverse_nodes, traverse_tree. @@ -462,20 +413,20 @@ def traverse_edges( A generator that yields ``DependencySpec`` if depth is ``False`` or a tuple of ``(depth, DependencySpec)`` if depth is ``True``. """ - + # validate input if order == "topo": if cover == "paths": raise ValueError("cover=paths not supported for order=topo") - # TODO: There is no known need for topological ordering of traversals (edge or node) - # with an initialized "visited" set. Revisit if needed. if visited is not None: raise ValueError("visited set not implemented for order=topo") - return traverse_edges_topo( - specs, direction, deptype, key, root, all_edges=cover == "edges" - ) + elif order not in ("post", "pre", "breadth"): + raise ValueError(f"Unknown order {order}") + # In topo traversal we need to construct a sub-DAG including all edges even if we are yielding + # a subset of them, hence "paths". + _cover = "paths" if order == "topo" else cover + visitor = get_visitor_from_args(_cover, direction, deptype, key, visited) root_edges = with_artificial_edges(specs) - visitor = get_visitor_from_args(cover, direction, deptype, key, visited) # Depth-first if order in ("pre", "post"): @@ -484,8 +435,10 @@ def traverse_edges( ) elif order == "breadth": return traverse_breadth_first_edges_generator(root_edges, visitor, root, depth) - - raise ValueError("Unknown order {}".format(order)) + elif order == "topo": + return traverse_topo_edges_generator( + root_edges, visitor, key, root, all_edges=cover == "edges" + ) def traverse_nodes( diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py index 0c1901cb1a9368..83534f80008d16 100644 --- a/lib/spack/spack/util/executable.py +++ b/lib/spack/spack/util/executable.py @@ -12,9 +12,9 @@ import llnl.util.tty as tty import spack.error -from spack.util.environment import EnvironmentModifications +import spack.util.environment -__all__ = ["Executable", "which", "ProcessError"] +__all__ = ["Executable", "which", "which_string", "ProcessError"] class Executable: @@ -29,7 +29,7 @@ def __init__(self, name): self.default_env = {} - self.default_envmod = EnvironmentModifications() + self.default_envmod = spack.util.environment.EnvironmentModifications() self.returncode = None self.ignore_quotes = False @@ -168,17 +168,15 @@ def process_cmd_output(out, err): self.default_envmod.apply_modifications(env) env.update(self.default_env) - from spack.util.environment import EnvironmentModifications # no cycle - # Apply env argument - if isinstance(env_arg, EnvironmentModifications): + if isinstance(env_arg, spack.util.environment.EnvironmentModifications): env_arg.apply_modifications(env) elif env_arg: env.update(env_arg) # Apply extra env extra_env = kwargs.get("extra_env", {}) - if isinstance(extra_env, EnvironmentModifications): + if isinstance(extra_env, spack.util.environment.EnvironmentModifications): extra_env.apply_modifications(env) else: env.update(extra_env) diff --git a/lib/spack/spack/util/file_cache.py b/lib/spack/spack/util/file_cache.py index bc75704d757870..e72d431f978657 100644 --- a/lib/spack/spack/util/file_cache.py +++ b/lib/spack/spack/util/file_cache.py @@ -7,6 +7,7 @@ import math import os import shutil +from typing import IO, Optional, Tuple from llnl.util.filesystem import mkdirp, rename @@ -14,6 +15,51 @@ from spack.util.lock import Lock, ReadTransaction, WriteTransaction +def _maybe_open(path: str) -> Optional[IO[str]]: + try: + return open(path, "r") + except OSError as e: + if e.errno != errno.ENOENT: + raise + return None + + +class ReadContextManager: + def __init__(self, path: str) -> None: + self.path = path + + def __enter__(self) -> Optional[IO[str]]: + """Return a file object for the cache if it exists.""" + self.cache_file = _maybe_open(self.path) + return self.cache_file + + def __exit__(self, type, value, traceback): + if self.cache_file: + self.cache_file.close() + + +class WriteContextManager: + def __init__(self, path: str) -> None: + self.path = path + self.tmp_path = f"{self.path}.tmp" + + def __enter__(self) -> Tuple[Optional[IO[str]], IO[str]]: + """Return (old_file, new_file) file objects, where old_file is optional.""" + self.old_file = _maybe_open(self.path) + self.new_file = open(self.tmp_path, "w") + return self.old_file, self.new_file + + def __exit__(self, type, value, traceback): + if self.old_file: + self.old_file.close() + self.new_file.close() + + if value: + os.remove(self.tmp_path) + else: + rename(self.tmp_path, self.path) + + class FileCache: """This class manages cached data in the filesystem. @@ -107,7 +153,8 @@ def read_transaction(self, key): cache_file.read() """ - return ReadTransaction(self._get_lock(key), acquire=lambda: open(self.cache_path(key))) + path = self.cache_path(key) + return ReadTransaction(self._get_lock(key), acquire=lambda: ReadContextManager(path)) def write_transaction(self, key): """Get a write transaction on a file cache item. @@ -117,40 +164,11 @@ def write_transaction(self, key): moves the file into place on top of the old file atomically. """ - filename = self.cache_path(key) - if os.path.exists(filename) and not os.access(filename, os.W_OK): - raise CacheError( - "Insufficient permissions to write to file cache at {0}".format(filename) - ) - - # TODO: this nested context manager adds a lot of complexity and - # TODO: is pretty hard to reason about in llnl.util.lock. At some - # TODO: point we should just replace it with functions and simplify - # TODO: the locking code. - class WriteContextManager: - def __enter__(cm): - cm.orig_filename = self.cache_path(key) - cm.orig_file = None - if os.path.exists(cm.orig_filename): - cm.orig_file = open(cm.orig_filename, "r") - - cm.tmp_filename = self.cache_path(key) + ".tmp" - cm.tmp_file = open(cm.tmp_filename, "w") - - return cm.orig_file, cm.tmp_file - - def __exit__(cm, type, value, traceback): - if cm.orig_file: - cm.orig_file.close() - cm.tmp_file.close() - - if value: - os.remove(cm.tmp_filename) - - else: - rename(cm.tmp_filename, cm.orig_filename) - - return WriteTransaction(self._get_lock(key), acquire=WriteContextManager) + path = self.cache_path(key) + if os.path.exists(path) and not os.access(path, os.W_OK): + raise CacheError(f"Insufficient permissions to write to file cache at {path}") + + return WriteTransaction(self._get_lock(key), acquire=lambda: WriteContextManager(path)) def mtime(self, key) -> float: """Return modification time of cache file, or -inf if it does not exist. diff --git a/lib/spack/spack/util/libc.py b/lib/spack/spack/util/libc.py index 55e8e3d26b6e48..d842cd102212d8 100644 --- a/lib/spack/spack/util/libc.py +++ b/lib/spack/spack/util/libc.py @@ -9,20 +9,32 @@ import shlex import sys from subprocess import PIPE, run -from typing import List, Optional +from typing import Dict, List, Optional + +from llnl.util.lang import memoized import spack.spec import spack.util.elf +#: Pattern to distinguish glibc from other libc implementations +GLIBC_PATTERN = r"\b(?:Free Software Foundation|Roland McGrath|Ulrich Depper)\b" + + +def _env() -> Dict[str, str]: + """Currently only set LC_ALL=C without clearing further environment variables""" + return {**os.environ, "LC_ALL": "C"} + def _libc_from_ldd(ldd: str) -> Optional["spack.spec.Spec"]: try: - result = run([ldd, "--version"], stdout=PIPE, stderr=PIPE, check=False) + result = run([ldd, "--version"], stdout=PIPE, stderr=PIPE, check=False, env=_env()) stdout = result.stdout.decode("utf-8") except Exception: return None - if not re.search(r"\bFree Software Foundation\b", stdout): + # The string "Free Software Foundation" is sometimes translated and not detected, but the names + # of the authors are typically present. + if not re.search(GLIBC_PATTERN, stdout): return None version_str = re.match(r".+\(.+\) (.+)", stdout) @@ -38,7 +50,7 @@ def default_search_paths_from_dynamic_linker(dynamic_linker: str) -> List[str]: """If the dynamic linker is glibc at a certain version, we can query the hard-coded library search paths""" try: - result = run([dynamic_linker, "--help"], stdout=PIPE, stderr=PIPE, check=False) + result = run([dynamic_linker, "--help"], stdout=PIPE, stderr=PIPE, check=False, env=_env()) assert result.returncode == 0 out = result.stdout.decode("utf-8") except Exception: @@ -51,6 +63,14 @@ def default_search_paths_from_dynamic_linker(dynamic_linker: str) -> List[str]: def libc_from_dynamic_linker(dynamic_linker: str) -> Optional["spack.spec.Spec"]: + maybe_spec = _libc_from_dynamic_linker(dynamic_linker) + if maybe_spec: + return maybe_spec.copy() + return None + + +@memoized +def _libc_from_dynamic_linker(dynamic_linker: str) -> Optional["spack.spec.Spec"]: if not os.path.exists(dynamic_linker): return None @@ -74,7 +94,9 @@ def libc_from_dynamic_linker(dynamic_linker: str) -> Optional["spack.spec.Spec"] # Now try to figure out if glibc or musl, which is the only ones we support. # In recent glibc we can simply execute the dynamic loader. In musl that's always the case. try: - result = run([dynamic_linker, "--version"], stdout=PIPE, stderr=PIPE, check=False) + result = run( + [dynamic_linker, "--version"], stdout=PIPE, stderr=PIPE, check=False, env=_env() + ) stdout = result.stdout.decode("utf-8") stderr = result.stderr.decode("utf-8") except Exception: @@ -91,7 +113,7 @@ def libc_from_dynamic_linker(dynamic_linker: str) -> Optional["spack.spec.Spec"] return spec except Exception: return None - elif re.search(r"\bFree Software Foundation\b", stdout): + elif re.search(GLIBC_PATTERN, stdout): # output is like "ld.so (...) stable release version 2.33." match = re.search(r"version (\d+\.\d+(?:\.\d+)?)", stdout) if not match: diff --git a/lib/spack/spack/util/path.py b/lib/spack/spack/util/path.py index 56dcd2d0e38ee8..5967c595b4a1f4 100644 --- a/lib/spack/spack/util/path.py +++ b/lib/spack/spack/util/path.py @@ -55,6 +55,7 @@ def get_user(): # Substitutions to perform def replacements(): # break circular imports + import spack import spack.environment as ev import spack.paths @@ -74,6 +75,7 @@ def replacements(): "target_family": lambda: arch.target.family, "date": lambda: date.today().strftime("%Y-%m-%d"), "env": lambda: ev.active_environment().path if ev.active_environment() else NOMATCH, + "spack_short_version": lambda: spack.get_short_version(), } @@ -154,19 +156,20 @@ def substitute_config_variables(path): Spack allows paths in configs to have some placeholders, as follows: - - $env The active Spack environment. - - $spack The Spack instance's prefix - - $tempdir Default temporary directory returned by tempfile.gettempdir() - - $user The current user's username - - $user_cache_path The user cache directory (~/.spack, unless overridden) - - $architecture The spack architecture triple for the current system - - $arch The spack architecture triple for the current system - - $platform The spack platform for the current system - - $os The OS of the current system - - $operating_system The OS of the current system - - $target The ISA target detected for the system - - $target_family The family of the target detected for the system - - $date The current date (YYYY-MM-DD) + - $env The active Spack environment. + - $spack The Spack instance's prefix + - $tempdir Default temporary directory returned by tempfile.gettempdir() + - $user The current user's username + - $user_cache_path The user cache directory (~/.spack, unless overridden) + - $architecture The spack architecture triple for the current system + - $arch The spack architecture triple for the current system + - $platform The spack platform for the current system + - $os The OS of the current system + - $operating_system The OS of the current system + - $target The ISA target detected for the system + - $target_family The family of the target detected for the system + - $date The current date (YYYY-MM-DD) + - $spack_short_version The spack short version These are substituted case-insensitively into the path, and users can use either ``$var`` or ``${var}`` syntax for the variables. $env is only diff --git a/lib/spack/spack/util/s3.py b/lib/spack/spack/util/s3.py index 5457abdca58453..700db07135704c 100644 --- a/lib/spack/spack/util/s3.py +++ b/lib/spack/spack/util/s3.py @@ -94,20 +94,17 @@ def get_mirror_s3_connection_info(mirror, method): # access token if isinstance(mirror, Mirror): - access_token = mirror.get_access_token(method) - if access_token: - s3_connection["aws_session_token"] = access_token - - # access pair - access_pair = mirror.get_access_pair(method) - if access_pair and access_pair[0] and access_pair[1]: - s3_connection["aws_access_key_id"] = access_pair[0] - s3_connection["aws_secret_access_key"] = access_pair[1] - - # profile - profile = mirror.get_profile(method) - if profile: - s3_connection["profile_name"] = profile + credentials = mirror.get_credentials(method) + if credentials: + if "access_token" in credentials: + s3_connection["aws_session_token"] = credentials["access_token"] + + if "access_pair" in credentials: + s3_connection["aws_access_key_id"] = credentials["access_pair"][0] + s3_connection["aws_secret_access_key"] = credentials["access_pair"][1] + + if "profile" in credentials: + s3_connection["profile_name"] = credentials["profile"] # endpoint url endpoint_url = mirror.get_endpoint_url(method) or os.environ.get("S3_ENDPOINT_URL") diff --git a/lib/spack/spack/util/web.py b/lib/spack/spack/util/web.py index 892b64d333d22e..717562925429bf 100644 --- a/lib/spack/spack/util/web.py +++ b/lib/spack/spack/util/web.py @@ -26,6 +26,7 @@ from llnl.util import lang, tty from llnl.util.filesystem import mkdirp, rename, working_dir +import spack import spack.config import spack.error import spack.util.executable diff --git a/lib/spack/spack/variant.py b/lib/spack/spack/variant.py index 0756841a638135..0dc82b2ff7b381 100644 --- a/lib/spack/spack/variant.py +++ b/lib/spack/spack/variant.py @@ -251,7 +251,7 @@ def implicit_variant_conversion(method): def convert(self, other): # We don't care if types are different as long as I can convert other to type(self) try: - other = type(self)(other.name, other._original_value) + other = type(self)(other.name, other._original_value, propagate=other.propagate) except (error.SpecError, ValueError): return False return method(self, other) @@ -266,7 +266,7 @@ def _flatten(values) -> Collection: flattened: List = [] for item in values: - if isinstance(item, _ConditionalVariantValues): + if isinstance(item, ConditionalVariantValues): flattened.extend(item) else: flattened.append(item) @@ -307,19 +307,21 @@ def __init__(self, name: str, value: Any, propagate: bool = False): self.value = value @staticmethod - def from_node_dict(name: str, value: Union[str, List[str]]) -> "AbstractVariant": + def from_node_dict( + name: str, value: Union[str, List[str]], *, propagate: bool = False + ) -> "AbstractVariant": """Reconstruct a variant from a node dict.""" if isinstance(value, list): # read multi-value variants in and be faithful to the YAML - mvar = MultiValuedVariant(name, ()) + mvar = MultiValuedVariant(name, (), propagate=propagate) mvar._value = tuple(value) mvar._original_value = mvar._value return mvar elif str(value).upper() == "TRUE" or str(value).upper() == "FALSE": - return BoolValuedVariant(name, value) + return BoolValuedVariant(name, value, propagate=propagate) - return SingleValuedVariant(name, value) + return SingleValuedVariant(name, value, propagate=propagate) def yaml_entry(self) -> Tuple[str, SerializedValueType]: """Returns a key, value tuple suitable to be an entry in a yaml dict. @@ -376,6 +378,7 @@ def _value_setter(self, value: ValueType) -> None: def _cmp_iter(self) -> Iterable: yield self.name + yield self.propagate yield from (str(v) for v in self.value_as_tuple) def copy(self) -> "AbstractVariant": @@ -451,6 +454,7 @@ def constrain(self, other: "AbstractVariant") -> bool: values.remove("*") self._value_setter(",".join(str(v) for v in values)) + self.propagate = self.propagate and other.propagate return old_value != self.value def __contains__(self, item: Union[str, bool]) -> bool: @@ -555,6 +559,7 @@ def constrain(self, other: "AbstractVariant") -> bool: if self.value != other.value: raise UnsatisfiableVariantSpecError(other.value, self.value) + self.propagate = self.propagate and other.propagate return False def __contains__(self, item: ValueType) -> bool: @@ -770,18 +775,21 @@ def disjoint_sets(*sets): @functools.total_ordering -class Value: - """Conditional value that might be used in variants.""" +class ConditionalValue: + """Conditional value for a variant.""" value: Any - when: Optional["spack.spec.Spec"] # optional b/c we need to know about disabled values + + # optional because statically disabled values (when=False) are set to None + # when=True results in spack.spec.Spec() + when: Optional["spack.spec.Spec"] def __init__(self, value: Any, when: Optional["spack.spec.Spec"]): self.value = value self.when = when def __repr__(self): - return f"Value({self.value}, when={self.when})" + return f"ConditionalValue({self.value}, when={self.when})" def __str__(self): return str(self.value) @@ -825,7 +833,7 @@ def prevalidate_variant_value( only if the variant is a reserved variant. """ # don't validate wildcards or variants with reserved names - if variant.value == ("*",) or variant.name in reserved_names: + if variant.value == ("*",) or variant.name in reserved_names or variant.propagate: return [] # raise if there is no definition at all @@ -879,17 +887,10 @@ def prevalidate_variant_value( ) -class _ConditionalVariantValues(lang.TypedMutableSequence): +class ConditionalVariantValues(lang.TypedMutableSequence): """A list, just with a different type""" -def conditional(*values: List[Any], when: Optional["spack.directives.WhenType"] = None): - """Conditional values that can be used in variant declarations.""" - # _make_when_spec returns None when the condition is statically false. - when = spack.directives._make_when_spec(when) - return _ConditionalVariantValues([Value(x, when=when) for x in values]) - - class DuplicateVariantError(error.SpecError): """Raised when the same variant occurs in a spec twice.""" diff --git a/share/spack/bootstrap/github-actions-v0.4/clingo.json b/share/spack/bootstrap/github-actions-v0.4/clingo.json deleted file mode 100644 index 1fa83eef1c02f4..00000000000000 --- a/share/spack/bootstrap/github-actions-v0.4/clingo.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "verified": [ - { - "binaries": [ - [ - "clingo-bootstrap", - "fk6k6buvgbwhwtigvpvi3266gllv7z2o", - "003eb7b2c62debc0bac4a7f3a3933d6a955520199b37e00c8c0761036d8dc63a" - ] - ], - "python": "python@3.10", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "2ezozohyngzmq74eeclsjupcawg6slse", - "bf3c559d655d5f04a2b080c640996086db2bb6bbf49f4139eed225a77b574923" - ] - ], - "python": "python@3.11", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "okjsfmgareef7laq432tdtgyu7bshmv2", - "7beed9fe21b52df6b56d8242b79becab7ed953af16612d6e09c595ef39591ac3" - ] - ], - "python": "python@3.6", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "cv7nf5ti72ywciapdy6mn7cemqv766zy", - "6af9e548044e4849794ee85008c8b19539b63857510c6fff544de7ccb6e53ee8" - ] - ], - "python": "python@3.7", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "ing4swsz5bj7guqffc277zitcky4uhu4", - "4d9008372c73797fc0bd47c92c922f810e1b3fd44dc373682a7a0780b711058c" - ] - ], - "python": "python@3.8", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "p2cyqcsow6k6prfryoqb7usv27hhofuq", - "5e4fd1fc552d815ce8db8b8917d9089c7782a92269754f8ca5d4f01a9406244d" - ] - ], - "python": "python@3.9", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "5bfjmclf6sktj4drclxe7rdwdthlkxw3", - "b811e62f82b564e9cd5e12fc3cdb19b3d4e5f2bdb98985e1bbe3d1bbd5dd3d5c" - ] - ], - "python": "python@3.10", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "bwmaj7wyyiivvkq5j72mholmhmytb2fl", - "468da2198479514bbbf66f4268716bce38cace1004a612bc669d21d97c596f85" - ] - ], - "python": "python@3.11", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "ewhsk7bcohduujp5t7hljb5uk2mfbk7k", - "919cbfc82bbb08da207e22bec4d8047c34042b90d58b9c6b438b5dcef0046e39" - ] - ], - "python": "python@3.6", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "263aqtzhrgzmzgpfekda7uk6wdqez76j", - "b9e579ee2a848f7287a8b625459ac5b8ce19e9e6858a86b53effaa4ae712d1b6" - ] - ], - "python": "python@3.7", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "yqqiddbmi2pyxgu757qfvts6hlt6525q", - "254ab94d48543472ad8a32f598dc869c49051a0b890951d7de8425c7549caa26" - ] - ], - "python": "python@3.8", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "plv3woz7rwmixdo42ew27imtqqjqnnv5", - "ec494e7043433fac6f8f404e023eea397197ff0928bf1c3f3cc0bc62d549334c" - ] - ], - "python": "python@3.9", - "spec": "clingo-bootstrap%apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "domcqyr4qx2yl3433l5dycnehastl7zc", - "fbfc1fc14f27bbabe36a438dd70515067dbd7e0873bc748b9f34d576d5400cb4" - ] - ], - "python": "python@3.10", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "b5m7ectjiuucgaoyry24hhop44edjvg7", - "5412e2b3f45d251acd976c12d238549e0c324e6481bf328f9547fafc0e810daf" - ] - ], - "python": "python@3.11", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "h2uxdiwlbvrfsz5mlt2s2xvnefbuk7qx", - "4cf26cd903fe0034522e1d8a712ab7a6ae936961c1c010473ff15566665cef6b" - ] - ], - "python": "python@3.6", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "4ksotxknsesu4mv2bio5ndtilo423cpy", - "9281ca638e2ec5c0b6d3ae050827a1c3696251a6274e96f3a8a89a1fdf7f0ba2" - ] - ], - "python": "python@3.7", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "ho7jg4bl7degmnnnj6x6fatbcno37kqo", - "0e78a555839fbd3752473ed80c76be9007b6ce3f152fa69d8014b172e339b92f" - ] - ], - "python": "python@3.8", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "oztu77xbgiige4pp2epmbqrmxt4vwnla", - "5271b271a2f6ae26838614477b2b8e5f230bceda7e0eb63f2cc36b18da3ba53d" - ] - ], - "python": "python@3.9", - "spec": "clingo-bootstrap%gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "33qaxq2adjrlv6ttxbu6bmueundhns2w", - "5fa731b84e354b8108ac4b7205d40e8c1a74cb2dfd590dd2d648d744a8556a1d" - ] - ], - "python": "python@3.10", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "vwhszkap6e2zbzb74ywgyggflkmtavwz", - "09eed0c9b98681173f512385675f44d070cb5ebc3e08aac659a12ea1ec41d05a" - ] - ], - "python": "python@3.11", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "3pst4dqux2clmm3mpjj4jkowv3s2ixv6", - "f9d9ade557ed426f55308dd14b43c59e1b51b8f40c9847d00994a3a89182a846" - ] - ], - "python": "python@3.6", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "6wk7qj2hdglt2sjtec4mv7ibsvhw53ge", - "e06a3190e60b1d0c4d4b8f01b7a2ade9d2d3d8fdaf84757cc9741e81a5ad59a3" - ] - ], - "python": "python@3.7", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "k2kch7a6j7ilikuklhyffkqhdqb46yt5", - "2547727ce0b8295594dfa56b711631b8ab221a19c4cbd19341539b929693b0cb" - ] - ], - "python": "python@3.8", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "ivzizagt74uqxrp2mri5lbqiqkhab77p", - "2ddd5daeeabfc3b2a211f7efb3cc700991c5817b08b19c2d315084198f7d2bc8" - ] - ], - "python": "python@3.9", - "spec": "clingo-bootstrap%gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "idkenmhnscjlu5gjqhpcqa4h7o2a7aow", - "44c88094abb239dd33b75c02c24fefe7f4f5646c2371f50a5bfb47b23805760b" - ] - ], - "python": "python@3.10", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "cizcjj3tx4irs3uzoktrgybq73sz545f", - "d8c8d4accece4e10a4339b263ff42f0f0adc77b3fbeea1010b3d7fc48aead5b3" - ] - ], - "python": "python@3.11", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "prqkzynv2nwko5mktitebgkeumuxkveu", - "3059fb60ff3b2dd5b36a46af37972b479fbfad348c30ec2e6b59729d93f07eed" - ] - ], - "python": "python@3.6", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "axtxtavfahxuazw2wueu3tjwwu6ttdfo", - "281cf24d0a8f2372b348bb1a38a9bfd1516063f597ffdecfde6e8e3aa4e2139f" - ] - ], - "python": "python@3.7", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "ba5ijauisd3uuixtmactc36vps7yfsrl", - "ea5960f47f48daeb62e6ebf7d8574ceb4bfccff6e2bae17571b0857bfd7a0bbc" - ] - ], - "python": "python@3.8", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - }, - { - "binaries": [ - [ - "clingo-bootstrap", - "gqcctd2ejbgvyvyt4umqpetfoogfycwu", - "8358d72dd5de00a1b7a7ffb88ba366a01ce9b700245d2940eae7395fec0e6fda" - ] - ], - "python": "python@3.9", - "spec": "clingo-bootstrap%gcc platform=linux target=x86_64" - } - ] -} \ No newline at end of file diff --git a/share/spack/bootstrap/github-actions-v0.4/gnupg.json b/share/spack/bootstrap/github-actions-v0.4/gnupg.json deleted file mode 100644 index 5237d8729af642..00000000000000 --- a/share/spack/bootstrap/github-actions-v0.4/gnupg.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "verified": [ - { - "binaries": [ - [ - "zlib", - "azrxnl6yp7xeapfy7nljiopucaelofuh", - "c3f28571947a41d3c9fb0da0b340b51bdef6b9e05a59e6df7c9bc5838bacd81a" - ], - [ - "libiconv", - "id44zneq3nh4grvtekqoefl24okct4ak", - "8cf48050c8d58dc0e1d11c8b3b9d970586e1f62933f8655982f4312d1e4426ea" - ], - [ - "npth", - "lp7fobvpwlk3xugo7th2kmcnrvqqxb3b", - "ec4dda80a2485e0eda5b1ef09e6b8b020283b00ab6252981722979af04ce2ba8" - ], - [ - "libassuan", - "trhqsquxpocecfgkeif5bh2dwgu4njbp", - "33f15821d6e41238de58f2237d3e1be46b657e3337cbe73f87973fe970ab36fd" - ], - [ - "libgcrypt", - "eadvdhou2xjdhf47x3q5x2ypa4qhfqjy", - "f0d1d6b3cef5794933b78df3446ac71bdd0cc79b81a26fc33153ef13819e6b09" - ], - [ - "libgpg-error", - "yg67vozcaac75p3dnhd6c3cjpa5nsfjo", - "fe907bce097dec72a92a1973d73253d9e4ce4bd78ed14f8d6e647dd8e77eef15" - ], - [ - "libksba", - "m7o6qwsu2gxvlka2jbd5puzwj3z553ob", - "69d324a77b550a6c7a201f3f39835df4f14534fcf5fa28628c14039bfdb39dda" - ], - [ - "pinentry", - "6m36xv6ft3yterimp6xoozz66ych5eew", - "0b82a4b52a6bc5e6fd4913f585455ea703e0fa5c85fd9f4bb1eb5819af5084e1" - ], - [ - "gnupg", - "pyrfgqkgltgfk4yljfw2myxn6vqen2j6", - "3c41b0cf2db01ad2675f27d51edb4cf7f798be9ca0e3ac781990ff8b462cd8f6" - ] - ], - "spec": "gnupg@2.3: %apple-clang platform=darwin target=aarch64" - }, - { - "binaries": [ - [ - "libiconv", - "f6om5cmewxrhzpowei3m2g2qnijvlep4", - "ab891ac21bc9cf44723993232ce3fff6fe75d003dfb88077dea630e532db123f" - ], - [ - "npth", - "tvebgs23dhejixfe36dufivhkwnyxh3t", - "95b9852c2e69f18fb8eff3dc6fc2bb9efe38821314cac6c310523da89c8346a2" - ], - [ - "zlib", - "rlzphstv75due7yzcicuu7nfos5zuk2q", - "e5ee87fab6e51b46ab1fb1cedafc4edee380a810947d52e669a185b52636aa37" - ], - [ - "libassuan", - "ow5h7we5zrgoknsvss3yjjs4g3aci4b2", - "44cf47134b4e4cbad30b8f4ef5ac1e7e25ead1d4dc64bd44fe807a4f173977ad" - ], - [ - "libgcrypt", - "nuy3jjihjlktwggpwdrert2q5xoqk4ic", - "ebb85da4d0b4ea93e073b8faf11e4ec955752a589b0ee47cd46b825ef685e536" - ], - [ - "libgpg-error", - "w7xfbrbfdnssbfoxrsz4emt6aildxsfy", - "6973cd597db96830822a8111fe3b3cff271e8cedc26fb0cb48443c2de2cc50ad" - ], - [ - "libksba", - "74h62c57ojgmqqp6xrrrzmzgftmcv22c", - "73afeb0bfdf57623d694ea16b52e1d73bfca61954583d6737f4ab6ab05c92ca8" - ], - [ - "pinentry", - "dv7sj3xesjfhqbrcxorvbzoxzlqpac4e", - "509d6881145a33b7de69db63af84fe887e7c995ffd4e89003a25fafa45b5874b" - ], - [ - "gnupg", - "hrv7rjtbvuxkt4trjdnzovegwutciunv", - "bf39c84047508556e142b9a9808007bbcc9aa80b2b9936a3598530f5acc7c75a" - ] - ], - "spec": "gnupg@2.3: %apple-clang platform=darwin target=x86_64" - }, - { - "binaries": [ - [ - "zlib", - "mrdyh4e34orgypetqhru6romj6wlvyxm", - "ecd344c5dcae7377d8b20f14248a73d1fe350e54364f2f1e70aa4fccf1c219ed" - ], - [ - "libiconv", - "iuparzfnzuwmmhj5ytlhaobn4nz3cct4", - "58ef399a4bd8794a00314440e02de8c685c9c02d1b02a751923ae669556a1a91" - ], - [ - "npth", - "eltd4b6tq4gsnboeidmr7mykezykcho5", - "89b3e0c7f573009d4816b219413a07a9917758836befdfeb6c33a9e87d846b6f" - ], - [ - "libassuan", - "xfaguxawrc6z73draba5fccjxtxjvzmz", - "59ebe715532a2671cde9783aceebb1448062e7adb7307da30b0d6245529d897f" - ], - [ - "libgcrypt", - "ntb2fzwckdgb77eubdcvvj2xm5eilavw", - "92fb1ef0d57c98b16e172c6afbc995dd163f0bac1484eb11eef5305f434a5cd1" - ], - [ - "libgpg-error", - "utzxfplsbueqmj7ksxaykk6tk3xi5dmr", - "74aa95bc48c42eab0a8ca0afab51074811bf79477271123af13398029ac7394f" - ], - [ - "libksba", - "jzxmzebonsgrw5e6ij446azzocvko2vi", - "bfc11401fc94d3f6d3176fa4b95dd866ad355c0b77b9c5787acbfdffe42915b9" - ], - [ - "pinentry", - "wsjzc3l5zgieowd24p2paccrporun5cv", - "db3e475b2113ad9587017a76c9df57fc537d2dd6c5d3323119c30723b5b51330" - ], - [ - "gnupg", - "zigabpppmz5ctktqwdj5ueaxjuvm6syh", - "fd8a681dfa919d8faff256fabafe1f08238cc75c74cbcfc44acce23cf0afb34c" - ] - ], - "spec": "gnupg@2.3: %gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "zlib", - "c4kbhgxjlko6a367d3zl6b5qcm5swiew", - "49747756dea8dd15fc3ea8f73d03b24724fa6b22103f04b557152db59c17f799" - ], - [ - "libiconv", - "5l5cq7de7iwagndyyphpdmvdvp3pepe6", - "a46d2a89cab00d8196e6226f3831bc3ff8b7f728844d6d29013cc8999d7b7f78" - ], - [ - "npth", - "b6ifa47mma7n7mxl36yg73uwjqezbde5", - "1b16e28e692ca91a096da4976f7df451df5e3ea9aa2f03cc2d39f62646a9399b" - ], - [ - "libassuan", - "phds2cjgeo3sbluuvdj6ebdkuom6un6p", - "482bf3a4975e21e03b7d34ff69031071a2822fb182774421f648ed7ccc99f24d" - ], - [ - "libgcrypt", - "7hgqgoekgh4jiml2u55rg2zec3ouyq7z", - "edfa277010de9f060bbcb11c2011dd66fb6e714c28a189d7cd7ef2d825e85180" - ], - [ - "libgpg-error", - "th2tzwwoz7ddrygkjrxzzv4yvznxglmx", - "e7c645287270ae2ac08ff5d400bf44b2e79203e752c3ff32aed07200638a6fe0" - ], - [ - "libksba", - "ex5gt36shiwt54jg7mbgxysnwu7jjy6a", - "8cf350544821bfec19e2b52a47896ca9258fc56680e4bb0d12715416169ead4a" - ], - [ - "pinentry", - "aowc7abd6kvohdohxz4j225q2hh743cq", - "ad336a7eee41eebd6b8e667e7ef673b64088c0553492567245653ac6c07fdb46" - ], - [ - "gnupg", - "7i7j24llnlzwpwrfumulorq6ucx2ku2f", - "a743ffd0698db5329a8231d25fa2e13b88f63cf85198664794a91df7a2c48632" - ] - ], - "spec": "gnupg@2.3: %gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "libiconv", - "vyvyow3bnokashj3wntl7pgm5nc4h7vw", - "4fb8c1a563975f339b2e98e4c5c6cd98d629bc94fcf57b8e92beedae17a4584d" - ], - [ - "npth", - "opncvl75zv6njawkgtxgt4yhii65f5nx", - "24b442a6f2cc28176a4f742d961807e5ffd853d2f9d65175944b6aa8b47d91e2" - ], - [ - "zlib", - "dcixs2nytw7vlthk55mwvog7veypnuor", - "6ab7018b621783c971192e46b6a3e2764b638b5ab5c2f3c62af24afd5a9039e0" - ], - [ - "libassuan", - "yk2555moxgj3dro6edznumguezecriso", - "ebde470fee06e5ad7527dca0eb3689ae13b7299229b51e64f97ff87b9daf9160" - ], - [ - "libgcrypt", - "imws5ss7coeeo45zr6w54xnwjfjm4cc6", - "ad20c2974c90717efa8a4c27781e5f4c14d60527dc1c224fd2e113fe52d3e958" - ], - [ - "libgpg-error", - "nbhvf75esgtjeu6nh57gu6mnikiazmjt", - "ec9f59c684dc4054706217952b8ddf610e4277ec8031c92640f086959dcf756e" - ], - [ - "libksba", - "cx425tk5tnod3523zj4izloqibr44frz", - "b2465fecbca3d022cf068766a9c01c72f6a68f9b58e78375f687b1273f6c683c" - ], - [ - "pinentry", - "pto3uq53xwl7dtbvycdp4qccacrrzs3r", - "bd9ae21dff99c34165baa680df4b4b36339e207fec2ac4fcc80103d774a1dd84" - ], - [ - "gnupg", - "5mhxefklns5hpdai3jn3rsf23kz4nol6", - "8a21155078dc51fdee7990326335e9f99192da0eb4b3490260a7399e30f20243" - ] - ], - "spec": "gnupg@2.3: %gcc platform=linux target=x86_64" - } - ] -} \ No newline at end of file diff --git a/share/spack/bootstrap/github-actions-v0.4/patchelf.json b/share/spack/bootstrap/github-actions-v0.4/patchelf.json deleted file mode 100644 index cab42851089392..00000000000000 --- a/share/spack/bootstrap/github-actions-v0.4/patchelf.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "verified": [ - { - "binaries": [ - [ - "patchelf", - "kjmrsrd7akfwzlejzsdyoun7fwgmvjgk", - "2c1975adb6fbd42bdb960b67fa6b32bc2846a28e5d293d2ca7b44a38f49ecf4f" - ] - ], - "spec": "patchelf@0.13: %gcc platform=linux target=aarch64" - }, - { - "binaries": [ - [ - "patchelf", - "gxxogiws7fmzkbdc26k24id3aplly6wi", - "d45ac6b9045d510861fda0cfaa5c04d71f316df5784376f2d2915ab134619c1b" - ] - ], - "spec": "patchelf@0.13: %gcc platform=linux target=ppc64le" - }, - { - "binaries": [ - [ - "patchelf", - "p72zyan5wrzuabtmzq7isa5mzyh6ahdp", - "ed7ebae3399d96c8d2f4b38ce6f2da52d8b73b312c73babae880ed3467b464b4" - ] - ], - "spec": "patchelf@0.13: %gcc platform=linux target=x86_64" - } - ] -} \ No newline at end of file diff --git a/share/spack/bootstrap/github-actions-v0.6/clingo.json b/share/spack/bootstrap/github-actions-v0.6/clingo.json new file mode 100644 index 00000000000000..6db902e1bc9783 --- /dev/null +++ b/share/spack/bootstrap/github-actions-v0.6/clingo.json @@ -0,0 +1,384 @@ +{ + "verified": [ + { + "binaries": [ + [ + "clingo-bootstrap", + "54jmcv6ecepywqv7bdpbfm2mrsarrjio", + "ff7f45db1645d1d857a315bf8d63c31447330552528bdf1fccdcf50735e62166" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.10" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "i2cye2tc752emxaeovjnrljbcz4gjr7j", + "e7491ac297cbb3f45c80aaf4ca5102e2b655b731e7b6ce7682807d302cb61f1c" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.11" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "5bsjop6yb3oqfi2mopjaufprqy5xaqtv", + "91214626a86c21fc0d76918884ec819050d4d52b4f78df7cc9769a83fbee2f71" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.12" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "unriyx5k5mu2o6nqwtaj254heazbiwyk", + "db596d9e6d8970d659f4be4cb510f9ba5dc2ec4ea42ecf2aed1325ec5ad72b45" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.13" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "6ikikftldgnbrirhbo27v4flseuo34j3", + "a7ed91aee1f8d5cfe2ca5ef2e3e74215953ffd2d8b5c722a670f2c303610e90c" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.8" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "pl5t4qtmufwrvek37mrorllf6ivnwztc", + "c856a98f92b9fa218377cea9272dffa736e93251d987b6386e6abf40058333dc" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=aarch64 ^python@3.9" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "cvxik6sx7niravyolfrrxayo2jywhv5p", + "d74cc0b44faa69473816dca16a3806123790e6eb9a59f611b1d80da7843f474a" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.10" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "chkx4n66gfa7ocewytj4bdqafp2czdwm", + "2cb12477504ca8e112522b6d56325ce32024c9466de5b8427fd70a1a81b15020" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.11" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "agrdoajzabs2am6q36lcrquihfb4d5xv", + "4e73426599fa61df1a4faceafa38ade170a3dec45b6d8f333e6c2b6bfe697724" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.12" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "56am5pmigql665hjjc2rnvtqd6dteni6", + "4309b42e5642bc5c83ede90759b1a0b5d66fffa8991b6213208577626b588cde" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.13" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "s727fhuqz2vgtlhmgviyihlqcm3vbgkx", + "1feeab9e1a81ca56de838ccc234d60957e9ab14da038e38b6687732b7bae1ff6" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.6" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "zo56jqvyt4y3udj6tsksbpm7bqoxob5g", + "1149ab7d5f1c82d8de53f048af8aa5c5dbf0d21da4e4780c06e54b8ee902085b" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.7" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "zkox3jrbdmbpu7j52ftcvqctjmymgp5j", + "d6aeae2dbd7fa3c1d1c62f840a5c01f8e71b64afe2bdc9c90d4087694f7d3443" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.8" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "scm5ujivfo5tt2dzurxcjf6qbme6dvol", + "81ef2beef78f46979965e5e69cd92b68ff4d2a59dbae1331c648d18b6ded1444" + ] + ], + "spec": "clingo-bootstrap@spack%apple-clang platform=darwin target=x86_64 ^python@3.9" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "7utceuvi4eofoi2qr5vizbiv27fqewgi", + "3d0830654f9e327fd7ec6dab214050295dbf0832f493937c0c133e516dd2a95a" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.10" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "tipiheccz3kpqwmcmqdc6jwuedv4z4ip", + "941b93cd89d5271c740d1b1c870e85f32e5970f9f7b842ad99870399215a93db" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.11" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "jxz7beqjkrpd6d2fcbsxh6etf42e5jmu", + "8ca78e345da732643e3d1b077d8156ce89863c25095e4958d4ac6d1a458ae74b" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.12" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "qy5ak2wdmlepkuoygweyzbh42njy6yhc", + "f6ced988b515494d86a1069f13ae9030caeb40fe951c2460f532123c80399154" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.13" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "klvkzwpf5dzfa3s47zabngev6wehsnvw", + "c00855b5cda99639b87c3912ee9c734c0b609dfe7d2c47ea947738c32bab6f03" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.6" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "udskqrr4z7wden3yimui65ulo47j6ytf", + "aa861cfdf6001fc2da6e83eecc9ad35df424d86d71f6d73e480818942405ce4e" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.7" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "4oeblhznejucmsdqpqa4uyh7txgyqxol", + "cb7807cd31fc5e0efe2acc1de1f74c7cef962bcadfc656b09ff853bc33c11bd0" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.8" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "a5mztd53ktxnhvzkr3lqaceuw2tmi3bv", + "36e5efb6b15b431b661e9e272904ab3c29ae7b87bf6250c158d545ccefc2f424" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=aarch64 ^python@3.9" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "kavipyeuasn4om6jokka3kcdhgdtrhvi", + "bd492c078b2cdaf327148eee5b0abd5b068dbb3ffa5dae0ec5d53257f471f7f7" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.10" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "5v5c245vawyuc6urmp3roehey2kubd6h", + "0ebe5e05246c33fc8529e90e21529b29742b5dd6756dbc07534577a90394c0e6" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.11" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "whdxnb2jug463enpge2hevrjwhv7hbhg", + "9f97d3bf78b7642a775f12feb43781d46110793f58a7e69b0b68ac4fff47655c" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.12" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "6enkeu44ymdslkubguw4qyfvreg57j42", + "e7295bb4bcb11a936f39665632ce68c751c9f6cddc44904392a1b33a5290bbbe" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.13" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "rvr5ybhzcowbbjeyxlmkltdxxaua6ffh", + "c44e7fbf721383aa8ee57d2305f41377e64a42ab8e02a9d3d6fc792d9b29ad08" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.6" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "u5hxe3p62gynloaxhw2mjjgyvdgbrxvb", + "965ba5c1a42f436001162a3f3a0d1715424f2ec8f65c42d6b66efcd4f4566b77" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.7" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "vhj724hodvecmzic5us422o5gc4vlkuc", + "c8d31089d8f91718a5bde9c6b28cc67bdbadab401c8fdd07b296d588ece4ddfe" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.8" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "l2il7xee3xm5x7xpzz7mnslw7kcxcmk6", + "ef3f05d30333a39fd18714b87ee22605679f52fda97f5e592764d1591527bbf3" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=ppc64le ^python@3.9" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "4pi6zqqe2vm6ehc7qb4se3ql53m6relx", + "a4abec667660307ad5cff0a616d6651e187cc7b1386fd8cd4b6b288a01614076" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.10" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "4ojfyzobwptp3numvphbxpgp3okdolur", + "a572ab6db954f4a850d1292bb1ef6d6055916784a894d149d657996fa98d0367" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.11" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "et3twemsecqryfzl23e3cmsbca534dlo", + "97f8ea17f3df3fb38904450114cbef9b4b0ea9c94da9de7a49b70b707012277a" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.12" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "adriuktssyp63nfzum5e33vpu645oq4m", + "6599ac06ade0cb3e80695f36492ea94a306f8bde0537482521510076c5981aa0" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.13" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "a4oyom2bc4go3floq7jlymc2l745w7vl", + "90b7cf4dd98e26c58578ad8604738cc32dfbb228cfb981bdfe103c99d0e7b5dd" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.6" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "nzya47loljbytn5utgbeaa2zmcvnfc6o", + "dc5dbfd9c05b43c4992bf6666638ae96cee5548921e94eb793ba85727b25ec59" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.7" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "hnnz6aop244yvwkx6vahauz3wprb26s3", + "e8518de25baff7a74bdb42193e6e4b0496e7d0688434c42ce4bdc92fe4293a09" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.8" + }, + { + "binaries": [ + [ + "clingo-bootstrap", + "fs2aukvaiwysb3ob4zosvuwnkmfwxyoq", + "0c5831932608e7b4084fc6ce60e2b67b77dab76e5515303a049d4d30cd772321" + ] + ], + "spec": "clingo-bootstrap@spack%gcc platform=linux target=x86_64 ^python@3.9" + } + ] +} \ No newline at end of file diff --git a/share/spack/bootstrap/github-actions-v0.6/gnupg.json b/share/spack/bootstrap/github-actions-v0.6/gnupg.json new file mode 100644 index 00000000000000..c6e5808dab13d4 --- /dev/null +++ b/share/spack/bootstrap/github-actions-v0.6/gnupg.json @@ -0,0 +1,269 @@ +{ + "verified": [ + { + "binaries": [ + [ + "libgpg-error", + "lwnk6k2j2pthv4zq3bl6cu2rbr5lqkp7", + "221b34bd62482f8afa64daa95466a61300674c81ed31aebb7f870f4e516407a1" + ], + [ + "libassuan", + "gknfboyunz7tbc5j3nbdwft2s77tzmv2", + "47c742a837ff2d6e920a89a1e2556f996c3c22a1e098f9b0e0f7cc3f9e675222" + ], + [ + "libgcrypt", + "2zniebgjgx44waicsbfmh2ywz72gw2hi", + "6eaed68c849c65d3f5351b67fd8c323a51caddc52918281b71706c472f281b26" + ], + [ + "libiconv", + "l6yjt5xint3rspq7yytsl7iwvn5tuey3", + "26ceaa73955e9f335bbbfd8aafc043605475154eb98d8118992224ed6696c1ad" + ], + [ + "libksba", + "xh7k7t5lqz6vjfugrpd4pjfdsom75trx", + "e3f617fcf144639b8fb3cd1e4d32f7fcdb38d345ab26ffc920732d731b991625" + ], + [ + "npth", + "pbgogmpojgqzgpzzci7gk7hloorinxew", + "3c3b6a2f008b5eec639382e384735203675600d06b4de89d58c36428016e4465" + ], + [ + "pinentry", + "66hrxsdpjdqt6wmnpmi5mh5ifeyb7cgg", + "d9843ab0324bea08d83455b6117a6fe82a6dcaa2106ba305e72c25c3bb26a17e" + ], + [ + "zlib-ng", + "cjfe7flqc6o2bfacxxwgqx4lpgqsv55e", + "7c02ff1bbac5dc24863cea28f15d06772c5434ee99a85a31a3475ae3c4f2d4b0" + ], + [ + "gnupg", + "eoavahhxqjlexz4wr3aanix724gamayu", + "61bcb83dc3fc2ae06fde30b9f79c2596bd0457cf56b4d339c8c562a38ca1c31f" + ] + ], + "spec": "gnupg@2.4.5%apple-clang platform=darwin target=aarch64" + }, + { + "binaries": [ + [ + "libgpg-error", + "op3m3ketzr2qqzazpoe35uc3c53tceqo", + "9345e8709a34591cb8ed70441ff5b95fd0de62f5038b3ff72aa21efeea882c14" + ], + [ + "libassuan", + "x7mrkmkxj3x5mcajpk36xroktc2vqhbb", + "60a19ab82bbd3b69bcd53287621617e0223bfefa7568572e247f3dfbac863717" + ], + [ + "libgcrypt", + "at6lwhcuxttxx2erckiwee4fb7txsupd", + "88d2ff68b041ca4d3923c1d657a670115f88735ef99a48d2bb1ea47420a183c1" + ], + [ + "libiconv", + "clwajtbwgb23uzaci26bcisj64jas33d", + "d5af1715ca62225765980389e79cae4a1347bd7e8a9e0ad29f53a2ff1e3fba7a" + ], + [ + "libksba", + "x3h5xtrsmdhcv5rwsbrn6cwdt7kynxkl", + "be0748d370f38a55ccb458e43a95739b0494d1755189a87a062d99508ca4c756" + ], + [ + "npth", + "c3yv6do52jtfeqtxbcdssxslbwh2l67c", + "c19dab06efd6ef9476e299b009d41bbe0d0c3df634d4bc55db18c78f3036afde" + ], + [ + "pinentry", + "a25ckvveduyxqrrmaybwnn65dh35eusc", + "fc1af850dcc056c14aba5595ccb2d48ccc4d14ddedbc85cf20928ef2805b213e" + ], + [ + "zlib-ng", + "uum7mskvdekjxwozkmdqk3joy6hnan3g", + "de2faff7c427305a00a62d66bba39393591841044a2feb861045c7961595d0fc" + ], + [ + "gnupg", + "7bmrigo4rsorm5d6byrcgxqerxofugoj", + "3d36bce8bbd06134445aa3cefa00a80068317b6d082d2b43bb1e3be81ede5849" + ] + ], + "spec": "gnupg@2.4.5%apple-clang platform=darwin target=x86_64" + }, + { + "binaries": [ + [ + "gcc-runtime", + "vytidi6v26yjvwdbycga2asyx5363kf3", + "8c0b786bed22505e2360fb0eaf1f38f9cdd8a96ff19a9bea84e4acbbad1e32f6" + ], + [ + "libgpg-error", + "cuagrnba4umsm33umta5rmjpkazt2i5u", + "794fed3932cee4e0b48e27cf2d8627135b88c0961730b384e10af1b484db0e6d" + ], + [ + "libassuan", + "uuxij4hqsvuv5h54iaofcr3tpv44thks", + "72c9cfccf2d01ad9fb495da573de49a08673e751ba059d20c8e519f9aa83ef20" + ], + [ + "libgcrypt", + "lfy732fms7q3j2fpvr3g2gg5lxmgs6jg", + "dae98b98735a10c8ef83fc03e0e878a157775c23d5d985266ddca6208cc988ca" + ], + [ + "libiconv", + "fcsxxmy4hiu3x6hjeh7y3mp4qxmvbcrh", + "29084a2aae8e11df683baf12203804d16aba6fd5dff02725654e6ee617bd2994" + ], + [ + "libksba", + "7kbtasg2faihsxceqpp4jpaf4ec7cgq7", + "35065817952b1114ffd9b6ccdd4095c1141eccdd481c4ac5a5f878ba0191ec33" + ], + [ + "npth", + "jsvxvvflvljwkewvxbebmoc3asos54f5", + "79b07e334e9b6d135be42a5b4cf0eb1bf5dcde98b8c3ce6c154bfa4e11abfb95" + ], + [ + "pinentry", + "erpvp4zmkqmeatet3fxwkrugwjp4nyxc", + "91fa16a16ca995ab663b1551f172e5aa91ed15853e37aa7776ce40d08a2fc3e9" + ], + [ + "zlib-ng", + "j3puqviz7nl3qr3sqwrg7vdb3i4ulqff", + "b8190c6af8fda6d5aeaff40e7d0ce11e80f412269706b68e1cf04c97f34b9e83" + ], + [ + "gnupg", + "iwnwfoopb5rtn45dbsecwoe3w6fsjv6d", + "8398592ab0812d8c76a21deca06da4277d05f4db784e129ead7535bb8988faa2" + ] + ], + "spec": "gnupg@2.4.5%gcc platform=linux target=aarch64" + }, + { + "binaries": [ + [ + "gcc-runtime", + "o6nx7ce6pg2fzah2fbwbpbwb6rkhdwc2", + "c942c0fb5d4ae8d875b036c1ab6bc09077dad6f2b43fe0621dee84fd47fcdec3" + ], + [ + "libgpg-error", + "pxc5a72op7zaahwquririwlea5lcowd2", + "56dc827ee7db3e1b0a0f2673165d9694d35df82b09e8984a03a21f6a275fb25c" + ], + [ + "libassuan", + "wjypew3o5cmejlrhsj24kkkh3jxrn35z", + "32f056147ca5c240ad10ffd8f36f60d84106bba46f4503a28d0649611f485381" + ], + [ + "libgcrypt", + "aaodehivfgu6ggtzf3r4vk6do5gt7qg2", + "af22cdf4b3ffca0b14c00849a2ad35e2f5c60024214ccc1f733481c7d1535d13" + ], + [ + "libiconv", + "bv2plgtibp6l6g5eqwupejoaihwjqk3z", + "c43ae303cbbc769ea4eb9740728970726fa87fe4e482ca7feb7b909ecba217ab" + ], + [ + "libksba", + "4zm4wcxegjycsez4jxgfdeyyne6xqb4t", + "2623edd57b13b98f83b7bf6a3419bbd29c7574bb72a99c948ff32d9a6b95d6f8" + ], + [ + "npth", + "4mdvxsguwekd4nus4lczdmcdwo4xpm7h", + "1c150c7e99a06cfad733b60c776a06c537ce925234cc567657f3ca79bf668010" + ], + [ + "pinentry", + "jli5etdru7erjbneygpiinlgbu6hqyiw", + "be2f63bb8a6d87a2d6e65699a688200939406f42b93a74e55ae4437b9936d75b" + ], + [ + "zlib-ng", + "olulf6vptgcleno3kfc3qbfqss4p6dcv", + "248e8295fc8af4ced8383846c292c2298248ee7afd20a36195891cfdc3d75363" + ], + [ + "gnupg", + "5ntq7qgiciy4lwhhqekglg7c7qjlfum6", + "cc7e4833af58913fa4ab2b7ce3fdb86d214594d54327c7e4eb4ca3f0784c046f" + ] + ], + "spec": "gnupg@2.4.5%gcc platform=linux target=ppc64le" + }, + { + "binaries": [ + [ + "gcc-runtime", + "7rv2b76tgxqmkwtmngiamwac632cjjba", + "b76a4eaef54b24d0ea9b8dfa9392f7ab519f918ae7e1a8bb919539d9adeddbcb" + ], + [ + "libgpg-error", + "t6pohmnim5vwnysjzc6c2x5xrq34arav", + "89976fae1b4d47325d03e6a4b37872b141ac2da77dc8a531afc7d207d86b3dc9" + ], + [ + "libassuan", + "urbnck3somrr5pmrhf4ifkfxcxgzrq4f", + "8feaab6bb0802d799e8e572ea7c903f5827a8af807010e288bbe043ec0b88779" + ], + [ + "libgcrypt", + "52zd4jcxeilrmlu4tugwkxqd6h6znbj6", + "50bb10f9e0317637dcb6f17de59c8c644d259ac15529c8355b9477e323e45cc6" + ], + [ + "libiconv", + "dy5pmiqcwlvb6yzozs5ajqtox3cfygif", + "385fa3a46f1c588aab24bcea3dfc5221dfa143808a2a731aef87a923c2cf05df" + ], + [ + "libksba", + "dls4psvcy54plnficveje3pisbznkznt", + "b565c5439feefe4e40694dfa2f98332a3f16f00d57bb355ad9ffde7c911b23de" + ], + [ + "npth", + "mldfiqqsswoo4l3ln7vkwpekgji4zwl4", + "cb4a08118709bd4cd4f0833f64e143914f0b81e8ae24c0d8a1bdf3a58a768b59" + ], + [ + "pinentry", + "2ayqizbaee43awjxjdpzmrangyklffp2", + "8fe10eddb2bf9cdda7329d098c42c2443d31b041416192eec5fec547d3cb8b84" + ], + [ + "zlib-ng", + "qodit36c7pa2afqavjguuuyxmur4tels", + "d90039074ce13e7ba1708d645bc48a832af78cfb5a197818ff53a45cec628855" + ], + [ + "gnupg", + "ielaznyuce3qu77r34nwnfjqkk5p3fdz", + "418b582f84547504b6464913fba5ba196482e86258081bdeb21af519fe8a2933" + ] + ], + "spec": "gnupg@2.4.5%gcc platform=linux target=x86_64" + } + ] +} \ No newline at end of file diff --git a/share/spack/bootstrap/github-actions-v0.4/metadata.yaml b/share/spack/bootstrap/github-actions-v0.6/metadata.yaml similarity index 61% rename from share/spack/bootstrap/github-actions-v0.4/metadata.yaml rename to share/spack/bootstrap/github-actions-v0.6/metadata.yaml index 0b483b547b2e86..ca2e9db88f14d8 100644 --- a/share/spack/bootstrap/github-actions-v0.4/metadata.yaml +++ b/share/spack/bootstrap/github-actions-v0.6/metadata.yaml @@ -1,8 +1,8 @@ type: buildcache description: | - Buildcache generated from a public workflow using Github Actions. + Buildcache generated from a public workflow using GitHub Actions hosted on GitHub Packages. The sha256 checksum of binaries is checked before installation. info: - url: https://mirror.spack.io/bootstrap/github-actions/v0.4 + url: oci://ghcr.io/spack/bootstrap-buildcache-v1 homepage: https://github.com/spack/spack-bootstrap-mirrors releases: https://github.com/spack/spack-bootstrap-mirrors/releases diff --git a/share/spack/bootstrap/github-actions-v0.6/patchelf.json b/share/spack/bootstrap/github-actions-v0.6/patchelf.json new file mode 100644 index 00000000000000..4d61766f236739 --- /dev/null +++ b/share/spack/bootstrap/github-actions-v0.6/patchelf.json @@ -0,0 +1,49 @@ +{ + "verified": [ + { + "binaries": [ + [ + "gcc-runtime", + "vytidi6v26yjvwdbycga2asyx5363kf3", + "8c0b786bed22505e2360fb0eaf1f38f9cdd8a96ff19a9bea84e4acbbad1e32f6" + ], + [ + "patchelf", + "mabcw7ya2bjav54wiknzyoftwtkkx2s3", + "820b8013b0b918ad85caa953740497e6c31c09d812bd34d087fc57128bfbdacb" + ] + ], + "spec": "patchelf@0.17.2%gcc platform=linux target=aarch64" + }, + { + "binaries": [ + [ + "gcc-runtime", + "o6nx7ce6pg2fzah2fbwbpbwb6rkhdwc2", + "c942c0fb5d4ae8d875b036c1ab6bc09077dad6f2b43fe0621dee84fd47fcdec3" + ], + [ + "patchelf", + "hz6j4rmzm65wov77f7t335tbywy5ebnq", + "1569df037ea1ea316a50e89f5a0cafa0ce8e20629bbd07fcc3846d9fecd2451c" + ] + ], + "spec": "patchelf@0.17.2%gcc platform=linux target=ppc64le" + }, + { + "binaries": [ + [ + "gcc-runtime", + "7rv2b76tgxqmkwtmngiamwac632cjjba", + "b76a4eaef54b24d0ea9b8dfa9392f7ab519f918ae7e1a8bb919539d9adeddbcb" + ], + [ + "patchelf", + "o6soxsz4hwdhzzbu4j56zwcclqhram25", + "79dfb7064e7993a97474c5f6b7560254fe19465a6c4cfc44569852e5a6ab542b" + ] + ], + "spec": "patchelf@0.17.2%gcc platform=linux target=x86_64" + } + ] +} \ No newline at end of file diff --git a/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml b/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml index bdd87a974410b9..f082b3b413dd02 100644 --- a/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml +++ b/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml @@ -75,8 +75,6 @@ default: .base-job: variables: PIPELINE_MIRROR_TEMPLATE: "single-src-protected-mirrors.yaml.in" - # TODO: We can remove this when we drop the "deprecated" stack - PUSH_BUILDCACHE_DEPRECATED: "${PROTECTED_MIRROR_PUSH_DOMAIN}/${CI_COMMIT_REF_NAME}/${SPACK_CI_STACK_NAME}" SPACK_CI_CONFIG_ROOT: "${CI_PROJECT_DIR}/share/spack/gitlab/cloud_pipelines/configs" SPACK_CI_SCRIPTS_ROOT: "${CI_PROJECT_DIR}/share/spack/gitlab/cloud_pipelines/scripts" @@ -106,8 +104,6 @@ default: when: always variables: SPACK_PIPELINE_TYPE: "spack_pull_request" - # TODO: We can remove this when we drop the "deprecated" stack - PUSH_BUILDCACHE_DEPRECATED: "${PR_MIRROR_PUSH_DOMAIN}/${CI_COMMIT_REF_NAME}/${SPACK_CI_STACK_NAME}" SPACK_PRUNE_UNTOUCHED: "True" SPACK_PRUNE_UNTOUCHED_DEPENDENT_DEPTH: "1" # TODO: Change sync script to include target in branch name. Then we could @@ -221,41 +217,6 @@ default: tags: ["spack", "public", "medium", "x86_64-win"] image: "ghcr.io/johnwparent/windows-server21h2:sha-1c12b61" -.generate-deprecated: - extends: [ ".base-job" ] - stage: generate - script: - - uname -a || true - - grep -E 'vendor|model name' /proc/cpuinfo 2>/dev/null | sort -u || head -n10 /proc/cpuinfo 2>/dev/null || true - - nproc || true - - cat /proc/loadavg || true - - cat /proc/meminfo | grep 'MemTotal\|MemFree' || true - - . "./share/spack/setup-env.sh" - - spack --version - - cd share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME} - - spack env activate --without-view . - - spack -v --color=always - ci generate --check-index-only - --buildcache-destination "${PUSH_BUILDCACHE_DEPRECATED}" - --artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir" - --output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml" - after_script: - - cat /proc/loadavg || true - - cat /proc/meminfo | grep 'MemTotal\|MemFree' || true - artifacts: - paths: - - "${CI_PROJECT_DIR}/jobs_scratch_dir" - variables: - KUBERNETES_CPU_REQUEST: 4000m - KUBERNETES_MEMORY_REQUEST: 16G - interruptible: true - timeout: 60 minutes - retry: - max: 2 - when: - - always - tags: ["spack", "public", "medium", "x86_64"] - .build: extends: [ ".base-job" ] stage: build @@ -377,7 +338,7 @@ e4s-neoverse_v1-build: e4s-rocm-external-generate: extends: [ ".e4s-rocm-external", ".generate-x86_64"] - image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4-rocm6.2.0:2024.09.11 + image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4-rocm6.2.1:2024.10.08 e4s-rocm-external-build: extends: [ ".e4s-rocm-external", ".build" ] @@ -508,6 +469,30 @@ developer-tools-manylinux2014-build: - artifacts: True job: developer-tools-manylinux2014-generate +########################################### +# Build tests for different developer tools +# darwin +########################################### +.developer-tools-darwin: + extends: [ ".darwin_aarch64" ] + variables: + SPACK_CI_STACK_NAME: developer-tools-darwin + +developer-tools-darwin-generate: + tags: [ "macos-ventura", "apple-clang-15", "aarch64-macos" ] + extends: [ ".developer-tools-darwin", ".generate-base"] + +developer-tools-darwin-build: + extends: [ ".developer-tools-darwin", ".build" ] + trigger: + include: + - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml + job: developer-tools-darwin-generate + strategy: depend + needs: + - artifacts: True + job: developer-tools-darwin-generate + ######################################### # RADIUSS ######################################### @@ -750,6 +735,52 @@ ml-linux-x86_64-rocm-build: - artifacts: True job: ml-linux-x86_64-rocm-generate +######################################## +# Machine Learning - Linux aarch64 (CPU) +######################################## +.ml-linux-aarch64-cpu: + extends: [ ".linux_aarch64" ] + variables: + SPACK_CI_STACK_NAME: ml-linux-aarch64-cpu + +ml-linux-aarch64-cpu-generate: + extends: [ ".generate-aarch64", .ml-linux-aarch64-cpu ] + image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2 + +ml-linux-aarch64-cpu-build: + extends: [ ".build", ".ml-linux-aarch64-cpu" ] + trigger: + include: + - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml + job: ml-linux-aarch64-cpu-generate + strategy: depend + needs: + - artifacts: True + job: ml-linux-aarch64-cpu-generate + +######################################### +# Machine Learning - Linux aarch64 (CUDA) +######################################### +.ml-linux-aarch64-cuda: + extends: [ ".linux_aarch64" ] + variables: + SPACK_CI_STACK_NAME: ml-linux-aarch64-cuda + +ml-linux-aarch64-cuda-generate: + extends: [ ".generate-aarch64", .ml-linux-aarch64-cuda ] + image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2 + +ml-linux-aarch64-cuda-build: + extends: [ ".build", ".ml-linux-aarch64-cuda" ] + trigger: + include: + - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml + job: ml-linux-aarch64-cuda-generate + strategy: depend + needs: + - artifacts: True + job: ml-linux-aarch64-cuda-generate + ######################################### # Machine Learning - Darwin aarch64 (MPS) ######################################### @@ -773,27 +804,6 @@ ml-darwin-aarch64-mps-build: - artifacts: True job: ml-darwin-aarch64-mps-generate -######################################## -# Deprecated CI testing -######################################## -.deprecated-ci: - variables: - SPACK_CI_STACK_NAME: deprecated - -deprecated-ci-generate: - extends: [ ".generate-deprecated", ".deprecated-ci" ] - -deprecated-ci-build: - extends: [ ".build", ".deprecated-ci" ] - trigger: - include: - - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml - job: deprecated-ci-generate - strategy: depend - needs: - - artifacts: True - job: deprecated-ci-generate - ######################################## # AWS ParallelCluster ######################################## diff --git a/share/spack/gitlab/cloud_pipelines/configs/concretizer.yaml b/share/spack/gitlab/cloud_pipelines/configs/concretizer.yaml index 3e98ced6fdd05f..9006e2ec56a81f 100644 --- a/share/spack/gitlab/cloud_pipelines/configs/concretizer.yaml +++ b/share/spack/gitlab/cloud_pipelines/configs/concretizer.yaml @@ -1,4 +1,3 @@ concretizer: reuse: false unify: false - diff --git a/share/spack/gitlab/cloud_pipelines/configs/linux/ppc64le/concretizer.yaml b/share/spack/gitlab/cloud_pipelines/configs/linux/ppc64le/concretizer.yaml new file mode 100644 index 00000000000000..3050c32a17c7f8 --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/configs/linux/ppc64le/concretizer.yaml @@ -0,0 +1,3 @@ +concretizer: + targets: + granularity: generic diff --git a/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v3/concretizer.yaml b/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v3/concretizer.yaml new file mode 100644 index 00000000000000..3050c32a17c7f8 --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v3/concretizer.yaml @@ -0,0 +1,3 @@ +concretizer: + targets: + granularity: generic diff --git a/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v4/concretizer.yaml b/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v4/concretizer.yaml new file mode 100644 index 00000000000000..3050c32a17c7f8 --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/configs/linux/x86_64_v4/concretizer.yaml @@ -0,0 +1,3 @@ +concretizer: + targets: + granularity: generic diff --git a/share/spack/gitlab/cloud_pipelines/stacks/aws-pcluster-x86_64_v4/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/aws-pcluster-x86_64_v4/spack.yaml index 23cc11d9089de6..f81bbf25376b44 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/aws-pcluster-x86_64_v4/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/aws-pcluster-x86_64_v4/spack.yaml @@ -9,12 +9,10 @@ spack: # - mpas-model %oneapi - openfoam %gcc - palace %oneapi ^superlu-dist%oneapi # hack: force fortran-rt provider through superlu-dist - # Latest version qunatum-espresso@7.3.1 does not build with oneapi, see https://github.com/spack/spack/pull/46456#issuecomment-2363159511 + # TODO: Find out how to make +ipo cmake flag work. # - quantum-espresso %oneapi - openmpi %oneapi - # TODO: oneapi patch in WRF is broken. It uses link time optimization but the gnu linker. Need to check whether the WRF recipe (in later releases) is better. - # WRf can only run if https://github.com/spack/spack/pull/46589 is merged. - # - wrf %oneapi + - wrf %oneapi - targets: - 'target=x86_64_v4' diff --git a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml index be0ec9b235f137..02594f3b611e34 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/data-vis-sdk/spack.yaml @@ -6,35 +6,45 @@ spack: cmake: variants: ~ownlibs ecp-data-vis-sdk: - require: "+ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs +veloc +vtkm +zfp" + require: + - "+ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf +sensei +sz +unifyfs +veloc +vtkm +zfp" hdf5: require: - - one_of: ['@1.14', '@1.12'] + - "@1.14" mesa: - require: "+glx +osmesa +opengl ~opengles +llvm" + require: + - "+glx +osmesa +opengl ~opengles +llvm" libglx: require: "mesa +glx" ospray: - require: '@2.8.0 +denoiser +mpi' + require: + - "@2.8.0" + - "+denoiser +mpi" llvm: - require: '@14:' + require: ["@14:"] # Minimize LLVM variants: ~lldb~lld~libomptarget~polly~gold libunwind=none compiler-rt=none + libllvm: + require: ["^llvm"] + visit: + require: ["@3.4.1"] + + concretizer: + unify: when_possible definitions: - paraview_specs: - matrix: - - - paraview +raytracing + - - paraview +raytracing +adios2 +fides - - +qt ^[virtuals=gl] glx # GUI Support w/ GLX Rendering - ~qt ^[virtuals=gl] glx # GLX Rendering - ^[virtuals=gl] osmesa # OSMesa Rendering - visit_specs: - matrix: - - - visit~gui - - - ^[virtuals=gl] glx # GLX Rendering - - ^[virtuals=gl] osmesa # OSMesa Rendering - # VisIt GUI does not work with Qt 5.14.2 - # - +gui ^[virtuals=gl] glx # GUI Support w/ GLX Rendering + - - visit + - - ~gui ^[virtuals=gl] glx + - ~gui ^[virtuals=gl] osmesa + - +gui ^[virtuals=gl] glx # GUI Support w/ GLX Rendering - sdk_base_spec: - matrix: - - ecp-data-vis-sdk +ascent +adios2 +cinema +darshan +faodel +hdf5 +pnetcdf diff --git a/share/spack/gitlab/cloud_pipelines/stacks/deprecated/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/deprecated/spack.yaml deleted file mode 100644 index a97606302dcb11..00000000000000 --- a/share/spack/gitlab/cloud_pipelines/stacks/deprecated/spack.yaml +++ /dev/null @@ -1,100 +0,0 @@ -### -# Spack pipeline for testing deprecated gitlab-ci configuration -### -spack: - view: false - concretizer: - reuse: false - unify: false - config: - db_lock_timeout: 120 - install_tree: - padded_length: 256 - projections: - all: '{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}' - deprecated: true - packages: - all: - require: target=x86_64 - specs: - - readline - - mirrors: - mirror: s3://spack-binaries/develop/deprecated - gitlab-ci: - broken-tests-packages: - - gptune - broken-specs-url: s3://spack-binaries/broken-specs - image: ghcr.io/spack/tutorial-ubuntu-18.04:v2021-11-02 - before_script: - - uname -a || true - - grep -E "vendor|model name" /proc/cpuinfo 2>/dev/null | sort -u || head -n10 - /proc/cpuinfo 2>/dev/null || true - - nproc - - . "./share/spack/setup-env.sh" - - spack --version - - spack arch - - cat /proc/loadavg || true - - cat /proc/meminfo | grep 'MemTotal\|MemFree' || true - script: - - spack compiler find - - cd ${SPACK_CONCRETE_ENV_DIR} - - spack env activate --without-view . - - if [ -n "$SPACK_BUILD_JOBS" ]; then spack config add "config:build_jobs:$SPACK_BUILD_JOBS"; - fi - - spack config add "config:install_tree:projections:${SPACK_JOB_SPEC_PKG_NAME}:'morepadding/{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}'" - - mkdir -p ${SPACK_ARTIFACTS_ROOT}/user_data - # AWS runners mount E4S public key (verification), UO runners mount public/private (signing/verification) - - if [[ -r /mnt/key/e4s.gpg ]]; then spack gpg trust /mnt/key/e4s.gpg; fi - # UO runners mount intermediate ci public key (verification), AWS runners mount public/private (signing/verification) - - if [[ -r /mnt/key/intermediate_ci_signing_key.gpg ]]; then spack gpg trust /mnt/key/intermediate_ci_signing_key.gpg; - fi - - if [[ -r /mnt/key/spack_public_key.gpg ]]; then spack gpg trust /mnt/key/spack_public_key.gpg; - fi - - spack --color=always --backtrace ci rebuild --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) - 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2) - after_script: - - cat /proc/loadavg || true - - cat /proc/meminfo | grep 'MemTotal\|MemFree' || true - match_behavior: first - mappings: - - match: - - '@:' - runner-attributes: - id_tokens: - GITLAB_OIDC_TOKEN: - aud: "${OIDC_TOKEN_AUDIENCE}" - tags: [spack, public, small, x86_64] - variables: - CI_JOB_SIZE: small - SPACK_BUILD_JOBS: '1' - KUBERNETES_CPU_REQUEST: 500m - KUBERNETES_MEMORY_REQUEST: 500M - signing-job-attributes: - id_tokens: - GITLAB_OIDC_TOKEN: - aud: "${OIDC_TOKEN_AUDIENCE}" - image: {name: 'ghcr.io/spack/notary:latest', entrypoint: ['']} - tags: [aws] - script: - - aws s3 sync --exclude "*" --include "*spec.json*" ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache - /tmp - - /sign.sh - - aws s3 sync --exclude "*" --include "*spec.json.sig*" /tmp ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache - - aws s3 cp /tmp/public_keys ${SPACK_REMOTE_MIRROR_OVERRIDE}/build_cache/_pgp - --recursive --exclude "*" --include "*.pub" - - service-job-attributes: - id_tokens: - GITLAB_OIDC_TOKEN: - aud: "${OIDC_TOKEN_AUDIENCE}" - image: ghcr.io/spack/tutorial-ubuntu-18.04:v2021-11-02 - before_script: - - . "./share/spack/setup-env.sh" - - spack --version - tags: [spack, public, x86_64] - cdash: - build-group: Spack Deprecated CI - url: https://cdash.spack.io - project: Spack Testing - site: Cloud Gitlab Infrastructure diff --git a/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-darwin/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-darwin/spack.yaml new file mode 100644 index 00000000000000..48ab265a51211c --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-darwin/spack.yaml @@ -0,0 +1,75 @@ +spack: + view: false + packages: + all: + require: + - target=aarch64 + concretizer: + unify: true + reuse: false + specs: + # editors + - neovim~no_luajit + - py-pynvim + - emacs+json~native+treesitter # TODO native not supported until gcc builds on darwin + # - tree-sitter is a dep, should also have cli but no package + - nano # just in case + # tags and scope search helpers + - universal-ctags # only maintained ctags, works better with c++ + - direnv + # runtimes and compilers + - python + - llvm+link_llvm_dylib+lld~lldb~polly+python build_type=MinSizeRel # for clangd, clang-format + - node-js # for editor plugins etc., pyright language server + - npm + - cmake + - libtool + - go # to build fzf, gh, hub + - rust+dev # fd, ripgrep, hyperfine, exa, rust-analyzer + # styling and lints + - astyle + - cppcheck + - uncrustify + - py-fprettify + - py-fortran-language-server + - py-python-lsp-server + # cli dev tools + - ripgrep + - gh + - fd + # - bfs # liburing: /usr/include/linux/ipv6.h:19:8: error: redefinition of 'struct in6_pktinfo' + - fzf + - tree + - jq + - py-yq + - hub + - ncdu + - eza + - lsd + - hyperfine + - htop + - tmux + - ccache + # ensure we can use a jobserver build and do this fast + - gmake + - ninja # should be @kitware, can't be because of meson requirement + - libtree + - sed + - which + - flex + - graphviz + - doxygen + - meson + - lima + + ci: + pipeline-gen: + - build-job-remove: + tags: [ spack, public ] + - build-job: + variables: + CI_GPG_KEY_ROOT: /etc/protected-runner + tags: [ "macos-ventura", "apple-clang-15", "aarch64-macos" ] + + cdash: + build-group: Developer Tools Darwin diff --git a/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-manylinux2014/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-manylinux2014/spack.yaml index 97f408080fe7b9..e2a3c0bf5ecf45 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-manylinux2014/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/developer-tools-manylinux2014/spack.yaml @@ -5,6 +5,7 @@ spack: require: target=x86_64_v3 concretizer: unify: true + reuse: false definitions: - default_specs: # editors diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse-v2/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse-v2/spack.yaml index 531b02663d474c..1eb61ec5e93d23 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse-v2/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse-v2/spack.yaml @@ -14,14 +14,10 @@ spack: variants: +mpi binutils: variants: +ld +gold +headers +libiberty ~nls - elfutils: - variants: ~nls hdf5: variants: +fortran +hl +shared libfabric: variants: fabrics=sockets,tcp,udp,rxm - libunwind: - variants: +pic +xz openblas: variants: threads=openmp trilinos: @@ -29,25 +25,14 @@ spack: +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long - xz: - variants: +pic mpi: require: mpich mpich: require: '~wrapperrpath ~hwloc %gcc target=neoverse_v2' tbb: require: intel-tbb - boost: - variants: +atomic +chrono +container +date_time +exception +filesystem +graph - +iostreams +locale +log +math +mpi +multithreaded +program_options +random - +regex +serialization +shared +signals +stacktrace +system +test +thread +timer - cxxstd=17 visibility=global - libffi: - require: "@3.4.4 %gcc target=neoverse_v2" vtk-m: require: "+examples %gcc target=neoverse_v2" - cuda: - version: [11.8.0] paraview: require: "+examples %gcc target=neoverse_v2" @@ -74,6 +59,7 @@ spack: - dyninst - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 ~paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +visit: ? - exaworks + - fftx - flecsi # - flit # - flux-core @@ -113,6 +99,7 @@ spack: - netlib-scalapack - nrm # - nvhpc + - nwchem - omega-h - openfoam # - openmpi @@ -197,6 +184,7 @@ spack: - cabana +cuda cuda_arch=90 ^kokkos +wrapper +cuda_lambda +cuda cuda_arch=90 - caliper +cuda cuda_arch=90 - chai +cuda cuda_arch=90 ^umpire ~shared + - fftx +cuda cuda_arch=90 - flecsi +cuda cuda_arch=90 - ginkgo +cuda cuda_arch=90 - gromacs +cuda cuda_arch=90 diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse_v1/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse_v1/spack.yaml index bc47085c8dd7ba..886699b54a64f3 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse_v1/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-neoverse_v1/spack.yaml @@ -14,14 +14,10 @@ spack: variants: +mpi binutils: variants: +ld +gold +headers +libiberty ~nls - elfutils: - variants: ~nls hdf5: variants: +fortran +hl +shared libfabric: variants: fabrics=sockets,tcp,udp,rxm - libunwind: - variants: +pic +xz openblas: variants: threads=openmp trilinos: @@ -29,27 +25,16 @@ spack: +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long - xz: - variants: +pic mpi: require: mpich mpich: require: '~wrapperrpath ~hwloc %gcc target=neoverse_v1' tbb: require: intel-tbb - boost: - variants: +atomic +chrono +container +date_time +exception +filesystem +graph - +iostreams +locale +log +math +mpi +multithreaded +program_options +random - +regex +serialization +shared +signals +stacktrace +system +test +thread +timer - cxxstd=17 visibility=global - libffi: - require: "@3.4.4 %gcc target=neoverse_v1" vtk-m: require: "+examples %gcc target=neoverse_v1" paraview: require: "+examples %gcc target=neoverse_v1" - cuda: - version: [11.8.0] specs: # CPU @@ -74,6 +59,7 @@ spack: - dyninst - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +visit: ? - exaworks + - fftx - flecsi - flit - flux-core @@ -114,6 +100,7 @@ spack: - netlib-scalapack - nrm - nvhpc + - nwchem - omega-h - openfoam - openmpi @@ -224,8 +211,8 @@ spack: - chai +cuda cuda_arch=75 ^umpire ~shared - chapel +cuda cuda_arch=75 - cusz +cuda cuda_arch=75 - - dealii +cuda cuda_arch=75 - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp ~paraview +cuda cuda_arch=75 # # +paraview: job killed oom? + - fftx +cuda cuda_arch=75 - flecsi +cuda cuda_arch=75 - ginkgo +cuda cuda_arch=75 - gromacs +cuda cuda_arch=75 @@ -257,6 +244,7 @@ spack: - zfp +cuda cuda_arch=75 # -- # - cp2k +mpi +cuda cuda_arch=75 # cp2k: cp2k only supports cuda_arch ('35', '37', '60', '70', '80') + # - dealii +cuda cuda_arch=75 ~vtk # include/deal.II/base/vectorization.h(1498): error: identifier "vaddvq_f32" is undefined; +vtk: https://github.com/spack/spack/pull/45554#issuecomment-2457255720 # - lammps +cuda cuda_arch=75 # lammps: needs NVIDIA driver # - lbann +cuda cuda_arch=75 # aluminum: include/aluminum/base.hpp:53: multiple definition of `cub::CUB_200400___CUDA_ARCH_LIST___NS::Debug(cudaError,char const*, int)'; lbann: https://github.com/spack/spack/issues/38788 # - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf ~cusz +mgard +cuda cuda_arch=75 # libpressio: CMake Error at CMakeLists.txt:498 (find_library): Could not find CUFile_LIBRARY using the following names: cufile ; +cusz: https://github.com/spack/spack/issues/38787 @@ -272,8 +260,8 @@ spack: - chai +cuda cuda_arch=80 ^umpire ~shared - chapel +cuda cuda_arch=80 - cusz +cuda cuda_arch=80 - - dealii +cuda cuda_arch=80 - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp ~paraview +cuda cuda_arch=80 # +paraview: job killed oom? + - fftx +cuda cuda_arch=80 - flecsi +cuda cuda_arch=80 - ginkgo +cuda cuda_arch=80 - gromacs +cuda cuda_arch=80 @@ -305,6 +293,7 @@ spack: - zfp +cuda cuda_arch=80 # -- # - cp2k +mpi +cuda cuda_arch=80 # cp2k: Error: KeyError: 'Point environment variable LIBSMM_PATH to the absolute path of the libsmm.a file' + # - dealii +cuda cuda_arch=80 ~vtk # include/deal.II/base/vectorization.h(1498): error: identifier "vaddvq_f32" is undefined; +vtk: https://github.com/spack/spack/pull/45554#issuecomment-2457255720 # - lammps +cuda cuda_arch=80 # lammps: needs NVIDIA driver # - lbann +cuda cuda_arch=80 # aluminum: include/aluminum/base.hpp:53: multiple definition of `cub::CUB_200400___CUDA_ARCH_LIST___NS::Debug(cudaError,char const*, int)'; lbann: https://github.com/spack/spack/issues/38788 # - libpressio +bitgrooming +bzip2 +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp +json +remote +netcdf ~cusz +mgard +cuda cuda_arch=80 # libpressio: CMake Error at CMakeLists.txt:498 (find_library): Could not find CUFile_LIBRARY using the following names: cufile ; +cusz: https://github.com/spack/spack/issues/38787 @@ -320,6 +309,7 @@ spack: - chai +cuda cuda_arch=90 ^umpire ~shared - chapel +cuda cuda_arch=90 - ecp-data-vis-sdk +adios2 +hdf5 +vtkm +zfp ~paraview +cuda cuda_arch=90 # +paraview: vtkm/exec/cuda/internal/ThrustPatches.h(213): error: this declaration has no storage class or type specifier + - fftx +cuda cuda_arch=90 - flecsi +cuda cuda_arch=90 - ginkgo +cuda cuda_arch=90 - gromacs +cuda cuda_arch=90 diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml index 4cc86363881b0b..0095fd3ec1ab01 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml @@ -84,7 +84,7 @@ spack: - charliecloud - conduit - datatransferkit - - dealii + - dealii ~vtk ~taskflow cflags=-O0 cxxflags=-O0 # +vtk +taskflow: ^taskflow: CMake Error at CMakeLists.txt:81 (message): Taskflow currently supports the following compilers: g++ v7.0 or above, clang++ v6.0 or above; use -O0 to work around compiler failure - drishti - dxt-explorer - ecp-data-vis-sdk ~cuda ~rocm +adios2 ~ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc ~visit +vtkm +zfp # +ascent: fides: fides/xgc/XGCCommon.cxx:233:10: error: no member named 'iota' in namespace 'std'; +visit: visit_vtk/lightweight/vtkSkewLookupTable.C:32:10: error: cannot initialize return object of type 'unsigned char *' with an rvalue of type 'const unsigned char *' @@ -128,6 +128,7 @@ spack: - nco - netlib-scalapack - nrm + - nwchem - omega-h - openfoam - openmpi @@ -192,6 +193,7 @@ spack: # -- # - chapel ~cuda ~rocm # llvm: closures.c:(.text+0x305e): undefined reference to `_intel_fast_memset' # - cp2k +mpi # dbcsr: dbcsr_api.F(973): #error: incomplete macro call DBCSR_ABORT. + # - fftx # fftx: https://github.com/spack/spack/issues/47048 # - geopm-runtime # libelf: configure: error: installation or configuration problem: C compiler cannot create executables. # - hpctoolkit # dyninst@13.0.0%gcc: libiberty/./d-demangle.c:142: undefined reference to `_intel_fast_memcpy' # - lbann # 2024.2 internal compiler error diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s-power/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s-power/spack.yaml index f46fe4f2f2cbbc..a770b0a299a13d 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-power/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-power/spack.yaml @@ -15,14 +15,10 @@ spack: variants: +mpi cuda_arch=70 binutils: variants: +ld +gold +headers +libiberty ~nls - elfutils: - variants: ~nls hdf5: variants: +fortran +hl +shared libfabric: variants: fabrics=sockets,tcp,udp,rxm - libunwind: - variants: +pic +xz openblas: variants: threads=openmp trilinos: @@ -42,8 +38,6 @@ spack: require: "~tcmalloc %gcc@9.4.0 target=ppc64le" tbb: require: intel-tbb - libffi: - require: "@3.4.4 %gcc@9.4.0 target=ppc64le" vtk-m: require: "+examples %gcc@9.4.0 target=ppc64le" cuda: @@ -77,6 +71,7 @@ spack: - dxt-explorer - dyninst - exaworks + - fftx - flecsi - flit - flux-core @@ -117,6 +112,7 @@ spack: - netlib-scalapack - nrm - nvhpc + - nwchem - omega-h - openfoam - openmpi diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s-rocm-external/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s-rocm-external/spack.yaml index 43e792d52d6601..2098645d1b1291 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-rocm-external/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-rocm-external/spack.yaml @@ -27,186 +27,186 @@ spack: comgr: buildable: false externals: - - spec: comgr@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: comgr@6.2.1 + prefix: /opt/rocm-6.2.1/ hip-rocclr: buildable: false externals: - - spec: hip-rocclr@6.2.0 - prefix: /opt/rocm-6.2.0/hip + - spec: hip-rocclr@6.2.1 + prefix: /opt/rocm-6.2.1/hip hipblas: buildable: false externals: - - spec: hipblas@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hipblas@6.2.1 + prefix: /opt/rocm-6.2.1/ hipcub: buildable: false externals: - - spec: hipcub@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hipcub@6.2.1 + prefix: /opt/rocm-6.2.1/ hipfft: buildable: false externals: - - spec: hipfft@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hipfft@6.2.1 + prefix: /opt/rocm-6.2.1/ hipsparse: buildable: false externals: - - spec: hipsparse@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hipsparse@6.2.1 + prefix: /opt/rocm-6.2.1/ miopen-hip: buildable: false externals: - - spec: miopen-hip@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: miopen-hip@6.2.1 + prefix: /opt/rocm-6.2.1/ miopengemm: buildable: false externals: - - spec: miopengemm@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: miopengemm@6.2.1 + prefix: /opt/rocm-6.2.1/ rccl: buildable: false externals: - - spec: rccl@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rccl@6.2.1 + prefix: /opt/rocm-6.2.1/ rocblas: buildable: false externals: - - spec: rocblas@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocblas@6.2.1 + prefix: /opt/rocm-6.2.1/ rocfft: buildable: false externals: - - spec: rocfft@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocfft@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-clang-ocl: buildable: false externals: - - spec: rocm-clang-ocl@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-clang-ocl@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-cmake: buildable: false externals: - - spec: rocm-cmake@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-cmake@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-dbgapi: buildable: false externals: - - spec: rocm-dbgapi@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-dbgapi@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-debug-agent: buildable: false externals: - - spec: rocm-debug-agent@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-debug-agent@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-device-libs: buildable: false externals: - - spec: rocm-device-libs@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-device-libs@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-gdb: buildable: false externals: - - spec: rocm-gdb@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-gdb@6.2.1 + prefix: /opt/rocm-6.2.1/ rocm-opencl: buildable: false externals: - - spec: rocm-opencl@6.2.0 - prefix: /opt/rocm-6.2.0/opencl + - spec: rocm-opencl@6.2.1 + prefix: /opt/rocm-6.2.1/opencl rocm-smi-lib: buildable: false externals: - - spec: rocm-smi-lib@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: rocm-smi-lib@6.2.1 + prefix: /opt/rocm-6.2.1/ hip: buildable: false externals: - - spec: hip@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: hip@6.2.1 + prefix: /opt/rocm-6.2.1 extra_attributes: compilers: - c: /opt/rocm-6.2.0/llvm/bin/clang++ - c++: /opt/rocm-6.2.0/llvm/bin/clang++ - hip: /opt/rocm-6.2.0/hip/bin/hipcc + c: /opt/rocm-6.2.1/llvm/bin/clang++ + c++: /opt/rocm-6.2.1/llvm/bin/clang++ + hip: /opt/rocm-6.2.1/hip/bin/hipcc hipify-clang: buildable: false externals: - - spec: hipify-clang@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: hipify-clang@6.2.1 + prefix: /opt/rocm-6.2.1 llvm-amdgpu: buildable: false externals: - - spec: llvm-amdgpu@6.2.0 - prefix: /opt/rocm-6.2.0/llvm + - spec: llvm-amdgpu@6.2.1 + prefix: /opt/rocm-6.2.1/llvm extra_attributes: compilers: - c: /opt/rocm-6.2.0/llvm/bin/clang++ - cxx: /opt/rocm-6.2.0/llvm/bin/clang++ + c: /opt/rocm-6.2.1/llvm/bin/clang++ + cxx: /opt/rocm-6.2.1/llvm/bin/clang++ hsakmt-roct: buildable: false externals: - - spec: hsakmt-roct@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hsakmt-roct@6.2.1 + prefix: /opt/rocm-6.2.1/ hsa-rocr-dev: buildable: false externals: - - spec: hsa-rocr-dev@6.2.0 - prefix: /opt/rocm-6.2.0/ + - spec: hsa-rocr-dev@6.2.1 + prefix: /opt/rocm-6.2.1/ extra_atributes: compilers: - c: /opt/rocm-6.2.0/llvm/bin/clang++ - cxx: /opt/rocm-6.2.0/llvm/bin/clang++ + c: /opt/rocm-6.2.1/llvm/bin/clang++ + cxx: /opt/rocm-6.2.1/llvm/bin/clang++ roctracer-dev-api: buildable: false externals: - - spec: roctracer-dev-api@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: roctracer-dev-api@6.2.1 + prefix: /opt/rocm-6.2.1 roctracer-dev: buildable: false externals: - spec: roctracer-dev@4.5.3 - prefix: /opt/rocm-6.2.0 + prefix: /opt/rocm-6.2.1 rocprim: buildable: false externals: - - spec: rocprim@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocprim@6.2.1 + prefix: /opt/rocm-6.2.1 rocrand: buildable: false externals: - - spec: rocrand@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocrand@6.2.1 + prefix: /opt/rocm-6.2.1 hipsolver: buildable: false externals: - - spec: hipsolver@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: hipsolver@6.2.1 + prefix: /opt/rocm-6.2.1 rocsolver: buildable: false externals: - - spec: rocsolver@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocsolver@6.2.1 + prefix: /opt/rocm-6.2.1 rocsparse: buildable: false externals: - - spec: rocsparse@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocsparse@6.2.1 + prefix: /opt/rocm-6.2.1 rocthrust: buildable: false externals: - - spec: rocthrust@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocthrust@6.2.1 + prefix: /opt/rocm-6.2.1 rocprofiler-dev: buildable: false externals: - - spec: rocprofiler-dev@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocprofiler-dev@6.2.1 + prefix: /opt/rocm-6.2.1 rocm-core: buildable: false externals: - - spec: rocm-core@6.2.0 - prefix: /opt/rocm-6.2.0 + - spec: rocm-core@6.2.1 + prefix: /opt/rocm-6.2.1 specs: # ROCM NOARCH @@ -221,6 +221,7 @@ spack: - caliper +rocm amdgpu_target=gfx908 - chai +rocm amdgpu_target=gfx908 - ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx908 + - fftx +rocm amdgpu_target=gfx908 - gasnet +rocm amdgpu_target=gfx908 - ginkgo +rocm amdgpu_target=gfx908 - heffte +rocm amdgpu_target=gfx908 @@ -264,6 +265,7 @@ spack: - caliper +rocm amdgpu_target=gfx90a - chai +rocm amdgpu_target=gfx90a - ecp-data-vis-sdk +paraview +vtkm +rocm amdgpu_target=gfx90a + - fftx +rocm amdgpu_target=gfx90a - gasnet +rocm amdgpu_target=gfx90a - ginkgo +rocm amdgpu_target=gfx90a - heffte +rocm amdgpu_target=gfx90a @@ -302,7 +304,7 @@ spack: ci: pipeline-gen: - build-job: - image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4-rocm6.2.0:2024.09.11 + image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4-rocm6.2.1:2024.10.08 cdash: build-group: E4S ROCm External diff --git a/share/spack/gitlab/cloud_pipelines/stacks/e4s/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/e4s/spack.yaml index 8928db97ab9a84..29d5f63a16738c 100644 --- a/share/spack/gitlab/cloud_pipelines/stacks/e4s/spack.yaml +++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s/spack.yaml @@ -14,8 +14,6 @@ spack: variants: +mpi binutils: variants: +ld +gold +headers +libiberty ~nls - elfutils: - variants: ~nls hdf5: variants: +fortran +hl +shared libfabric: @@ -29,30 +27,19 @@ spack: +ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu +stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long - xz: - variants: +pic mpi: require: mpich mpich: - require: '~wrapperrpath ~hwloc' + require: '~wrapperrpath ~hwloc target=x86_64_v3' tbb: require: intel-tbb - boost: - variants: +atomic +chrono +container +date_time +exception +filesystem +graph - +iostreams +locale +log +math +mpi +multithreaded +program_options +random - +regex +serialization +shared +signals +stacktrace +system +test +thread +timer - cxxstd=17 visibility=global - libffi: - require: "@3.4.4" vtk-m: - require: "+examples" + require: "+examples target=x86_64_v3" visit: - require: "~gui" - cuda: - version: [11.8.0] + require: "~gui target=x86_64_v3" paraview: # Don't build GUI support or GLX rendering for HPC/container deployments - require: "@5.11 +examples ~qt ^[virtuals=gl] osmesa" + require: "@5.11 +examples ~qt ^[virtuals=gl] osmesa target=x86_64_v3" specs: # CPU @@ -75,13 +62,14 @@ spack: - conduit - cp2k +mpi - datatransferkit - - dealii + - dealii ~vtk # https://github.com/spack/spack/pull/45554#issuecomment-2457255720 - drishti - dxt-explorer - dyninst - e4s-cl - ecp-data-vis-sdk ~cuda ~rocm +adios2 +ascent +cinema +darshan +faodel +hdf5 +paraview +pnetcdf +sz +unifyfs +veloc +visit +vtkm +zfp # adios2~cuda, ascent~cuda, darshan-runtime, darshan-util, faodel, hdf5, libcatalyst, parallel-netcdf, paraview~cuda, py-cinemasci, sz, unifyfs, veloc, visit, vtk-m, zfp - exaworks + - fftx - flecsi - flit - flux-core @@ -128,6 +116,7 @@ spack: - netlib-scalapack - nrm - nvhpc + - nwchem - omega-h - openfoam - openmpi @@ -238,6 +227,7 @@ spack: - cusz +cuda cuda_arch=80 - ecp-data-vis-sdk ~rocm +adios2 ~ascent +hdf5 +vtkm +zfp +paraview +cuda cuda_arch=80 # +ascent fails because fides fetch error - exago +mpi +python +raja +hiop ~rocm +cuda cuda_arch=80 ~ipopt ^hiop@1.0.0 ~sparse +mpi +raja ~rocm +cuda cuda_arch=80 #^raja@0.14.0 + - fftx +cuda cuda_arch=80 - flecsi +cuda cuda_arch=80 - ginkgo +cuda cuda_arch=80 - gromacs +cuda cuda_arch=80 @@ -283,6 +273,7 @@ spack: - caliper +cuda cuda_arch=90 - chai +cuda cuda_arch=90 ^umpire ~shared - chapel +cuda cuda_arch=90 + - fftx +cuda cuda_arch=90 - flecsi +cuda cuda_arch=90 - ginkgo +cuda cuda_arch=90 - gromacs +cuda cuda_arch=90 @@ -361,6 +352,7 @@ spack: # - cabana +rocm amdgpu_target=gfx90a # kokkos: https://github.com/spack/spack/issues/44832 # - chapel +rocm amdgpu_target=gfx90a # chapel: need chapel >= 2.2 to support ROCm >5.4 # - exago +mpi +python +raja +hiop +rocm amdgpu_target=gfx90a ~ipopt cxxflags="-Wno-error=non-pod-varargs" ^hiop@1.0.0 ~sparse +mpi +raja +rocm amdgpu_target=gfx90a # hiop: CMake Error at cmake/FindHiopHipLibraries.cmake:23 (find_package) + # - fftx +rocm amdgpu_target=gfx90a # fftx: https://github.com/spack/spack/issues/47034 # - kokkos +rocm amdgpu_target=gfx90a # kokkos: https://github.com/spack/spack/issues/44832 # - lbann ~cuda +rocm amdgpu_target=gfx90a # aluminum: https://github.com/spack/spack/issues/38807 # - legion +rocm amdgpu_target=gfx90a # kokkos: https://github.com/spack/spack/issues/44832 diff --git a/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cpu/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cpu/spack.yaml new file mode 100644 index 00000000000000..23ed6aa665e2fd --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cpu/spack.yaml @@ -0,0 +1,85 @@ +spack: + view: false + packages: + all: + require: + - target=aarch64 + - ~cuda + - ~rocm + mpi: + require: openmpi + + specs: + # Horovod + - py-horovod + + # Hugging Face + - py-transformers + + # JAX + - py-jax + - py-jaxlib + + # Keras + - py-keras backend=tensorflow + - py-keras backend=jax + - py-keras backend=torch + - py-keras-applications + - py-keras-preprocessing + - py-keras2onnx + + # PyTorch + - py-botorch + - py-efficientnet-pytorch + - py-gpytorch + - py-kornia + - py-lightning + - py-pytorch-gradual-warmup-lr + - py-pytorch-lightning + - py-segmentation-models-pytorch + - py-timm + - py-torch + - py-torch-cluster + - py-torch-geometric + - py-torch-nvidia-apex + - py-torch-scatter + - py-torch-sparse + - py-torch-spline-conv + - py-torchaudio + - py-torchdata + - py-torchfile + - py-torchgeo + - py-torchmetrics + - py-torchtext + - py-torchvision + - py-vector-quantize-pytorch + + # scikit-learn + - py-scikit-learn + - py-scikit-learn-extra + + # TensorBoard + - py-tensorboard + - py-tensorboard-data-server + - py-tensorboard-plugin-wit + - py-tensorboardx + + # TensorFlow + - py-tensorflow + - py-tensorflow-datasets + - py-tensorflow-hub + - py-tensorflow-metadata + - py-tensorflow-probability + + # XGBoost + - py-xgboost + + ci: + pipeline-gen: + - build-job: + image: + name: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2 + entrypoint: [''] + + cdash: + build-group: Machine Learning diff --git a/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cuda/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cuda/spack.yaml new file mode 100644 index 00000000000000..47f4eda0f12d0c --- /dev/null +++ b/share/spack/gitlab/cloud_pipelines/stacks/ml-linux-aarch64-cuda/spack.yaml @@ -0,0 +1,91 @@ +spack: + view: false + packages: + all: + require: + - target=aarch64 + - ~rocm + - +cuda + - cuda_arch=80 + llvm: + # https://github.com/spack/spack/issues/27999 + require: ~cuda + mpi: + require: openmpi + + specs: + # Horovod + - py-horovod + + # Hugging Face + - py-transformers + + # JAX + - py-jax + - py-jaxlib + + # Keras + - py-keras backend=tensorflow + - py-keras backend=jax + - py-keras backend=torch + - py-keras-applications + - py-keras-preprocessing + - py-keras2onnx + + # PyTorch + - py-botorch + - py-efficientnet-pytorch + - py-gpytorch + - py-kornia + - py-lightning + - py-pytorch-gradual-warmup-lr + - py-pytorch-lightning + - py-segmentation-models-pytorch + - py-timm + - py-torch + - py-torch-cluster + - py-torch-geometric + - py-torch-nvidia-apex + - py-torch-scatter + - py-torch-sparse + - py-torch-spline-conv + - py-torchaudio + - py-torchdata + - py-torchfile + - py-torchgeo + - py-torchmetrics + # torchtext requires older pytorch, which requires older cuda, which doesn't support newer GCC + # - py-torchtext + - py-torchvision + - py-vector-quantize-pytorch + + # scikit-learn + - py-scikit-learn + - py-scikit-learn-extra + + # TensorBoard + - py-tensorboard + - py-tensorboard-data-server + - py-tensorboard-plugin-wit + - py-tensorboardx + + # TensorFlow + - py-tensorflow + - py-tensorflow-datasets + - py-tensorflow-hub + - py-tensorflow-metadata + - py-tensorflow-probability + + # XGBoost + # xgboost requires older cuda, which doesn't support newer GCC + # - py-xgboost + + ci: + pipeline-gen: + - build-job: + image: + name: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2 + entrypoint: [''] + + cdash: + build-group: Machine Learning diff --git a/share/spack/qa/config_state.py b/share/spack/qa/config_state.py new file mode 100644 index 00000000000000..0c77c31cc6ac28 --- /dev/null +++ b/share/spack/qa/config_state.py @@ -0,0 +1,36 @@ +# Copyright 2013-2024 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) +"""Used to test correct application of config line scopes in various cases. + +The option `config:cache` is supposed to be False, and overridden to True +from the command line. +""" +import multiprocessing as mp + +import spack.config +import spack.subprocess_context + + +def show_config(serialized_state): + _ = serialized_state.restore() + result = spack.config.CONFIG.get("config:ccache") + if result is not True: + raise RuntimeError(f"Expected config:ccache:true, but got {result}") + + +if __name__ == "__main__": + print("Testing spawn") + ctx = mp.get_context("spawn") + serialized_state = spack.subprocess_context.PackageInstallContext(None, ctx=ctx) + p = ctx.Process(target=show_config, args=(serialized_state,)) + p.start() + p.join() + + print("Testing fork") + ctx = mp.get_context("fork") + serialized_state = spack.subprocess_context.PackageInstallContext(None, ctx=ctx) + p = ctx.Process(target=show_config, args=(serialized_state,)) + p.start() + p.join() diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests index 28e34a71208995..71d2979ead22ab 100755 --- a/share/spack/qa/run-unit-tests +++ b/share/spack/qa/run-unit-tests @@ -52,7 +52,7 @@ if [[ "$UNIT_TEST_COVERAGE" != "true" ]] && python -m pytest -VV 2>&1 | grep xdi fi # We are running pytest-cov after the addition of pytest-xdist, since it integrates -# other pugins for pytest automatically. We still need to use "coverage" explicitly +# other plugins for pytest automatically. We still need to use "coverage" explicitly # for the commands above. # # There is a need to pass the configuration file explicitly due to a bug: diff --git a/share/spack/qa/setup-env-test.sh b/share/spack/qa/setup-env-test.sh index ec24166d52dae6..734835e07aafd0 100755 --- a/share/spack/qa/setup-env-test.sh +++ b/share/spack/qa/setup-env-test.sh @@ -207,3 +207,20 @@ fails spack env deactivate echo "Correct error exit codes for unit-test when it fails" fails spack unit-test fail + +title "Testing config override from command line, outside of an environment" +contains 'True' spack -c config:ccache:true python -c "import spack.config;print(spack.config.CONFIG.get('config:ccache'))" +contains 'True' spack -C "$SHARE_DIR/qa/configuration" python -c "import spack.config;print(spack.config.CONFIG.get('config:ccache'))" +succeeds spack -c config:ccache:true python "$SHARE_DIR/qa/config_state.py" +succeeds spack -C "$SHARE_DIR/qa/configuration" python "$SHARE_DIR/qa/config_state.py" + +title "Testing config override from command line, inside an environment" +spack env activate --temp +spack config add "config:ccache:false" + +contains 'True' spack -c config:ccache:true python -c "import spack.config;print(spack.config.CONFIG.get('config:ccache'))" +contains 'True' spack -C "$SHARE_DIR/qa/configuration" python -c "import spack.config;print(spack.config.CONFIG.get('config:ccache'))" +succeeds spack -c config:ccache:true python "$SHARE_DIR/qa/config_state.py" +succeeds spack -C "$SHARE_DIR/qa/configuration" python "$SHARE_DIR/qa/config_state.py" + +spack env deactivate diff --git a/share/spack/setup-env.bat b/share/spack/setup-env.bat new file mode 100644 index 00000000000000..c3b91ece1fccdf --- /dev/null +++ b/share/spack/setup-env.bat @@ -0,0 +1,77 @@ +@ECHO OFF +setlocal EnableDelayedExpansion +:: (c) 2021 Lawrence Livermore National Laboratory +:: To use this file independently of Spack's installer, execute this script in its directory, or add the +:: associated bin directory to your PATH. Invoke to launch Spack Shell. +:: +:: source_dir/spack/bin/spack_cmd.bat +:: +pushd %~dp0..\.. +set SPACK_ROOT=%CD% +pushd %CD%\.. +set spackinstdir=%CD% +popd + + +:: Check if Python is on the PATH +if not defined python_pf_ver ( +(for /f "delims=" %%F in ('where python.exe') do ( + set "python_pf_ver=%%F" + goto :found_python + ) ) 2> NUL +) +:found_python +if not defined python_pf_ver ( + :: If not, look for Python from the Spack installer + :get_builtin + (for /f "tokens=*" %%g in ('dir /b /a:d "!spackinstdir!\Python*"') do ( + set "python_ver=%%g")) 2> NUL + + if not defined python_ver ( + echo Python was not found on your system. + echo Please install Python or add Python to your PATH. + ) else ( + set "py_path=!spackinstdir!\!python_ver!" + set "py_exe=!py_path!\python.exe" + ) + goto :exitpoint +) else ( + :: Python is already on the path + set "py_exe=!python_pf_ver!" + (for /F "tokens=* USEBACKQ" %%F in ( + `"!py_exe!" --version`) do (set "output=%%F")) 2>NUL + if not "!output:Microsoft Store=!"=="!output!" goto :get_builtin + goto :exitpoint +) +:exitpoint +endlocal & ( + set "SPACK_ROOT=%SPACK_ROOT%" + set "spackinstdir=%spackinstdir%" + set "py_path=%py_path%" + set "py_exe=%py_exe%" +) + +set "PATH=%SPACK_ROOT%\bin\;%PATH%" +if defined py_path ( + set "PATH=%py_path%;%PATH%" +) + +if defined py_exe ( + "%py_exe%" "%SPACK_ROOT%\bin\haspywin.py" +) + +if not defined EDITOR ( + set EDITOR=notepad +) + +@echo ********************************************************************** +@echo ** Spack Package Manager +@echo ********************************************************************** + +IF "%1"=="" GOTO CONTINUE +set +GOTO:EOF + +:continue +title Spack +set PROMPT=[spack] %PROMPT% diff --git a/share/spack/setup-env.ps1 b/share/spack/setup-env.ps1 index d67e39f85bc471..88f91f261d07f4 100644 --- a/share/spack/setup-env.ps1 +++ b/share/spack/setup-env.ps1 @@ -60,5 +60,6 @@ function global:prompt $pth = $(Convert-Path $(Get-Location)) | Split-Path -leaf "[spack] PS $pth>" } +[system.console]::title = "Spack" Pop-Location diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash index 63fe311af6ee17..6786b1bef841de 100644 --- a/share/spack/spack-completion.bash +++ b/share/spack/spack-completion.bash @@ -399,7 +399,7 @@ SPACK_ALIASES="concretise:concretize;containerise:containerize;rm:remove" _spack() { if $list_options then - SPACK_COMPREPLY="-h --help -H --all-help --color -c --config -C --config-scope -d --debug --timestamp --pdb -e --env -D --env-dir -E --no-env --use-env-repo -k --insecure -l --enable-locks -L --disable-locks -m --mock -b --bootstrap -p --profile --sorted-profile --lines -v --verbose --stacktrace --backtrace -V --version --print-shell-vars" + SPACK_COMPREPLY="-h --help -H --all-help --color -c --config -C --config-scope -d --debug --timestamp --pdb -e --env -D --env-dir -E --no-env --use-env-repo -k --insecure -l --enable-locks -L --disable-locks -m --mock -b --bootstrap -p --profile --sorted-profile --lines -v --verbose --stacktrace -t --backtrace -V --version --print-shell-vars" else SPACK_COMPREPLY="add arch audit blame bootstrap build-env buildcache cd change checksum ci clean clone commands compiler compilers concretize concretise config containerize containerise create debug deconcretize dependencies dependents deprecate dev-build develop diff docs edit env extensions external fetch find gc gpg graph help info install license list load location log-parse logs maintainers make-installer mark mirror module patch pkg providers pydoc python reindex remove rm repo resource restage solve spec stage style tags test test-env tutorial undevelop uninstall unit-test unload url verify versions view" fi @@ -415,7 +415,7 @@ _spack_add() { } _spack_arch() { - SPACK_COMPREPLY="-h --help -g --generic-target --known-targets -p --platform -o --operating-system -t --target -f --frontend -b --backend" + SPACK_COMPREPLY="-h --help -g --generic-target --known-targets --family --generic -p --platform -o --operating-system -t --target -f --frontend -b --backend" } _spack_audit() { @@ -693,7 +693,7 @@ _spack_ci() { } _spack_ci_generate() { - SPACK_COMPREPLY="-h --help --output-file --copy-to --optimize --dependencies --buildcache-destination --prune-dag --no-prune-dag --check-index-only --artifacts-root" + SPACK_COMPREPLY="-h --help --output-file --optimize --dependencies --prune-dag --no-prune-dag --check-index-only --artifacts-root" } _spack_ci_rebuild_index() { @@ -1027,14 +1027,14 @@ _spack_env() { then SPACK_COMPREPLY="-h --help" else - SPACK_COMPREPLY="activate deactivate create remove rm rename mv list ls status st loads view update revert depfile" + SPACK_COMPREPLY="activate deactivate create remove rm rename mv list ls status st loads view update revert depfile track untrack" fi } _spack_env_activate() { if $list_options then - SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh --with-view -v --without-view -V -p --prompt --temp --create --envfile --keep-relative -d --dir" + SPACK_COMPREPLY="-h --help --sh --csh --fish --bat --pwsh -v --with-view -V --without-view -p --prompt --temp --create --envfile --keep-relative -d --dir" else _environments fi @@ -1145,6 +1145,24 @@ _spack_env_depfile() { fi } +_spack_env_track() { + if $list_options + then + SPACK_COMPREPLY="-h --help -n --name -y --yes-to-all" + else + SPACK_COMPREPLY="" + fi +} + +_spack_env_untrack() { + if $list_options + then + SPACK_COMPREPLY="-h --help -f --force -y --yes-to-all" + else + _environments + fi +} + _spack_extensions() { if $list_options then @@ -1192,7 +1210,7 @@ _spack_fetch() { _spack_find() { if $list_options then - SPACK_COMPREPLY="-h --help --format -H --hashes --json -I --install-status -d --deps -p --paths --groups --no-groups -l --long -L --very-long -t --tag -N --namespaces -r --only-roots -c --show-concretized -f --show-flags --show-full-compiler -x --explicit -X --implicit -u --unknown -m --missing -v --variants --loaded -M --only-missing --deprecated --only-deprecated --install-tree --start-date --end-date" + SPACK_COMPREPLY="-h --help --format -H --hashes --json -I --install-status -d --deps -p --paths --groups --no-groups -l --long -L --very-long -t --tag -N --namespaces -r --only-roots -c --show-concretized -f --show-flags --show-full-compiler -x --explicit -X --implicit -u --unknown -m --missing -v --variants --loaded -M --only-missing --only-deprecated --deprecated --install-tree --start-date --end-date" else _installed_packages fi @@ -1441,7 +1459,7 @@ _spack_mirror_destroy() { _spack_mirror_add() { if $list_options then - SPACK_COMPREPLY="-h --help --scope --type --autopush --unsigned --signed --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" + SPACK_COMPREPLY="-h --help --scope --type --autopush --unsigned --signed --s3-access-key-id --s3-access-key-id-variable --s3-access-key-secret --s3-access-key-secret-variable --s3-access-token --s3-access-token-variable --s3-profile --s3-endpoint-url --oci-username --oci-username-variable --oci-password --oci-password-variable" else _mirrors fi @@ -1468,7 +1486,7 @@ _spack_mirror_rm() { _spack_mirror_set_url() { if $list_options then - SPACK_COMPREPLY="-h --help --push --fetch --scope --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" + SPACK_COMPREPLY="-h --help --push --fetch --scope --s3-access-key-id --s3-access-key-id-variable --s3-access-key-secret --s3-access-key-secret-variable --s3-access-token --s3-access-token-variable --s3-profile --s3-endpoint-url --oci-username --oci-username-variable --oci-password --oci-password-variable" else _mirrors fi @@ -1477,7 +1495,7 @@ _spack_mirror_set_url() { _spack_mirror_set() { if $list_options then - SPACK_COMPREPLY="-h --help --push --fetch --type --url --autopush --no-autopush --unsigned --signed --scope --s3-access-key-id --s3-access-key-secret --s3-access-token --s3-profile --s3-endpoint-url --oci-username --oci-password" + SPACK_COMPREPLY="-h --help --push --fetch --type --url --autopush --no-autopush --unsigned --signed --scope --s3-access-key-id --s3-access-key-id-variable --s3-access-key-secret --s3-access-key-secret-variable --s3-access-token --s3-access-token-variable --s3-profile --s3-endpoint-url --oci-username --oci-username-variable --oci-password --oci-password-variable" else _mirrors fi @@ -1835,7 +1853,7 @@ _spack_restage() { _spack_solve() { if $list_options then - SPACK_COMPREPLY="-h --help --show -l --long -L --very-long -N --namespaces -I --install-status --no-install-status -y --yaml -j --json -c --cover -t --types --timers --stats -U --fresh --reuse --fresh-roots --reuse-deps --deprecated" + SPACK_COMPREPLY="-h --help --show --timers --stats -l --long -L --very-long -N --namespaces -I --install-status --no-install-status -y --yaml -j --json --format -c --cover -t --types -U --fresh --reuse --fresh-roots --reuse-deps --deprecated" else _all_packages fi diff --git a/share/spack/spack-completion.fish b/share/spack/spack-completion.fish index 538823852ad88a..a7f1a5326e7ade 100644 --- a/share/spack/spack-completion.fish +++ b/share/spack/spack-completion.fish @@ -347,7 +347,7 @@ complete -c spack --erase # Everything below here is auto-generated. # spack -set -g __fish_spack_optspecs_spack h/help H/all-help color= c/config= C/config-scope= d/debug timestamp pdb e/env= D/env-dir= E/no-env use-env-repo k/insecure l/enable-locks L/disable-locks m/mock b/bootstrap p/profile sorted-profile= lines= v/verbose stacktrace backtrace V/version print-shell-vars= +set -g __fish_spack_optspecs_spack h/help H/all-help color= c/config= C/config-scope= d/debug timestamp pdb e/env= D/env-dir= E/no-env use-env-repo k/insecure l/enable-locks L/disable-locks m/mock b/bootstrap p/profile sorted-profile= lines= v/verbose stacktrace t/backtrace V/version print-shell-vars= complete -c spack -n '__fish_spack_using_command_pos 0 ' -f -a add -d 'add a spec to an environment' complete -c spack -n '__fish_spack_using_command_pos 0 ' -f -a arch -d 'print architecture information about this machine' complete -c spack -n '__fish_spack_using_command_pos 0 ' -f -a audit -d 'audit configuration files, packages, etc.' @@ -473,8 +473,8 @@ complete -c spack -n '__fish_spack_using_command ' -s v -l verbose -f -a verbose complete -c spack -n '__fish_spack_using_command ' -s v -l verbose -d 'print additional output during builds' complete -c spack -n '__fish_spack_using_command ' -l stacktrace -f -a stacktrace complete -c spack -n '__fish_spack_using_command ' -l stacktrace -d 'add stacktraces to all printed statements' -complete -c spack -n '__fish_spack_using_command ' -l backtrace -f -a backtrace -complete -c spack -n '__fish_spack_using_command ' -l backtrace -d 'always show backtraces for exceptions' +complete -c spack -n '__fish_spack_using_command ' -s t -l backtrace -f -a backtrace +complete -c spack -n '__fish_spack_using_command ' -s t -l backtrace -d 'always show backtraces for exceptions' complete -c spack -n '__fish_spack_using_command ' -s V -l version -f -a version complete -c spack -n '__fish_spack_using_command ' -s V -l version -d 'show version number and exit' complete -c spack -n '__fish_spack_using_command ' -l print-shell-vars -r -f -a print_shell_vars @@ -489,13 +489,17 @@ complete -c spack -n '__fish_spack_using_command add' -s l -l list-name -r -f -a complete -c spack -n '__fish_spack_using_command add' -s l -l list-name -r -d 'name of the list to add specs to' # spack arch -set -g __fish_spack_optspecs_spack_arch h/help g/generic-target known-targets p/platform o/operating-system t/target f/frontend b/backend +set -g __fish_spack_optspecs_spack_arch h/help g/generic-target known-targets family generic p/platform o/operating-system t/target f/frontend b/backend complete -c spack -n '__fish_spack_using_command arch' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command arch' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command arch' -s g -l generic-target -f -a generic_target -complete -c spack -n '__fish_spack_using_command arch' -s g -l generic-target -d 'show the best generic target' +complete -c spack -n '__fish_spack_using_command arch' -s g -l generic-target -d 'show the best generic target (deprecated)' complete -c spack -n '__fish_spack_using_command arch' -l known-targets -f -a known_targets complete -c spack -n '__fish_spack_using_command arch' -l known-targets -d 'show a list of all known targets and exit' +complete -c spack -n '__fish_spack_using_command arch' -l family -f -a family +complete -c spack -n '__fish_spack_using_command arch' -l family -d 'print generic ISA (x86_64, aarch64, ppc64le, ...)' +complete -c spack -n '__fish_spack_using_command arch' -l generic -f -a generic +complete -c spack -n '__fish_spack_using_command arch' -l generic -d 'print feature level (x86_64_v3, armv8.4a, ...)' complete -c spack -n '__fish_spack_using_command arch' -s p -l platform -f -a platform complete -c spack -n '__fish_spack_using_command arch' -s p -l platform -d 'print only the platform' complete -c spack -n '__fish_spack_using_command arch' -s o -l operating-system -f -a operating_system @@ -951,19 +955,15 @@ complete -c spack -n '__fish_spack_using_command ci' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command ci' -s h -l help -d 'show this help message and exit' # spack ci generate -set -g __fish_spack_optspecs_spack_ci_generate h/help output-file= copy-to= optimize dependencies buildcache-destination= prune-dag no-prune-dag check-index-only artifacts-root= +set -g __fish_spack_optspecs_spack_ci_generate h/help output-file= optimize dependencies prune-dag no-prune-dag check-index-only artifacts-root= complete -c spack -n '__fish_spack_using_command ci generate' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command ci generate' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command ci generate' -l output-file -r -f -a output_file complete -c spack -n '__fish_spack_using_command ci generate' -l output-file -r -d 'pathname for the generated gitlab ci yaml file' -complete -c spack -n '__fish_spack_using_command ci generate' -l copy-to -r -f -a copy_to -complete -c spack -n '__fish_spack_using_command ci generate' -l copy-to -r -d 'path to additional directory for job files' complete -c spack -n '__fish_spack_using_command ci generate' -l optimize -f -a optimize complete -c spack -n '__fish_spack_using_command ci generate' -l optimize -d '(DEPRECATED) optimize the gitlab yaml file for size' complete -c spack -n '__fish_spack_using_command ci generate' -l dependencies -f -a dependencies complete -c spack -n '__fish_spack_using_command ci generate' -l dependencies -d '(DEPRECATED) disable DAG scheduling (use '"'"'plain'"'"' dependencies)' -complete -c spack -n '__fish_spack_using_command ci generate' -l buildcache-destination -r -f -a buildcache_destination -complete -c spack -n '__fish_spack_using_command ci generate' -l buildcache-destination -r -d 'override the mirror configured in the environment' complete -c spack -n '__fish_spack_using_command ci generate' -l prune-dag -f -a prune_dag complete -c spack -n '__fish_spack_using_command ci generate' -l prune-dag -d 'skip up-to-date specs' complete -c spack -n '__fish_spack_using_command ci generate' -l no-prune-dag -f -a prune_dag @@ -1482,22 +1482,24 @@ complete -c spack -n '__fish_spack_using_command edit' -s N -l namespace -r -d ' # spack env set -g __fish_spack_optspecs_spack_env h/help -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a activate -d 'set the current environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a deactivate -d 'deactivate any active environment in the shell' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a activate -d 'set the active environment' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a deactivate -d 'deactivate the active environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a create -d 'create a new environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a remove -d 'remove an existing environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rm -d 'remove an existing environment' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a remove -d 'remove managed environment(s)' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rm -d 'remove managed environment(s)' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a rename -d 'rename an existing environment' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a mv -d 'rename an existing environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a list -d 'list managed environments' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a ls -d 'list managed environments' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a status -d 'print whether there is an active environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a st -d 'print whether there is an active environment' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a list -d 'list all managed environments' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a ls -d 'list all managed environments' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a status -d 'print active environment status' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a st -d 'print active environment status' complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a loads -d 'list modules for an installed environment '"'"'(see spack module loads)'"'"'' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a view -d 'manage a view associated with the environment' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a update -d 'update environments to the latest format' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a revert -d 'restore environments to their state before update' -complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a depfile -d 'generate a depfile from the concrete environment specs' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a view -d 'manage the environment'"'"'s view' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a update -d 'update the environment manifest to the latest schema format' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a revert -d 'restore the environment manifest to its previous format' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a depfile -d 'generate a depfile to exploit parallel builds across specs' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a track -d 'track an environment from a directory in Spack' +complete -c spack -n '__fish_spack_using_command_pos 0 env' -f -a untrack -d 'track an environment from a directory in Spack' complete -c spack -n '__fish_spack_using_command env' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env' -s h -l help -d 'show this help message and exit' @@ -1516,20 +1518,20 @@ complete -c spack -n '__fish_spack_using_command env activate' -l bat -f -a shel complete -c spack -n '__fish_spack_using_command env activate' -l bat -d 'print bat commands to activate the environment' complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -f -a shell complete -c spack -n '__fish_spack_using_command env activate' -l pwsh -d 'print powershell commands to activate environment' -complete -c spack -n '__fish_spack_using_command env activate' -l with-view -s v -r -f -a with_view -complete -c spack -n '__fish_spack_using_command env activate' -l with-view -s v -r -d 'set runtime environment variables for specific view' -complete -c spack -n '__fish_spack_using_command env activate' -l without-view -s V -f -a without_view -complete -c spack -n '__fish_spack_using_command env activate' -l without-view -s V -d 'do not set runtime environment variables for any view' +complete -c spack -n '__fish_spack_using_command env activate' -s v -l with-view -r -f -a with_view +complete -c spack -n '__fish_spack_using_command env activate' -s v -l with-view -r -d 'set runtime environment variables for the named view' +complete -c spack -n '__fish_spack_using_command env activate' -s V -l without-view -f -a without_view +complete -c spack -n '__fish_spack_using_command env activate' -s V -l without-view -d 'do not set runtime environment variables for any view' complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -f -a prompt -complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -d 'decorate the command line prompt when activating' +complete -c spack -n '__fish_spack_using_command env activate' -s p -l prompt -d 'add the active environment to the command line prompt' complete -c spack -n '__fish_spack_using_command env activate' -l temp -f -a temp -complete -c spack -n '__fish_spack_using_command env activate' -l temp -d 'create and activate an environment in a temporary directory' +complete -c spack -n '__fish_spack_using_command env activate' -l temp -d 'create and activate in a temporary directory' complete -c spack -n '__fish_spack_using_command env activate' -l create -f -a create complete -c spack -n '__fish_spack_using_command env activate' -l create -d 'create and activate the environment if it doesn'"'"'t exist' complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -f -a envfile -complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -d 'either a lockfile (must end with '"'"'.json'"'"' or '"'"'.lock'"'"') or a manifest file' +complete -c spack -n '__fish_spack_using_command env activate' -l envfile -r -d 'manifest or lock file (ends with '"'"'.json'"'"' or '"'"'.lock'"'"')' complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -f -a keep_relative -complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -d 'copy relative develop paths verbatim into the new environment when initializing from envfile' +complete -c spack -n '__fish_spack_using_command env activate' -l keep-relative -d 'copy envfile'"'"'s relative develop paths verbatim when create' complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env activate' -s d -l dir -d 'activate environment based on the directory supplied' @@ -1556,13 +1558,13 @@ complete -c spack -n '__fish_spack_using_command env create' -s h -l help -d 'sh complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -f -a dir complete -c spack -n '__fish_spack_using_command env create' -s d -l dir -d 'create an environment in a specific directory' complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -f -a keep_relative -complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -d 'copy relative develop paths verbatim into the new environment when initializing from envfile' +complete -c spack -n '__fish_spack_using_command env create' -l keep-relative -d 'copy envfile'"'"'s relative develop paths verbatim' complete -c spack -n '__fish_spack_using_command env create' -l without-view -f -a without_view complete -c spack -n '__fish_spack_using_command env create' -l without-view -d 'do not maintain a view for this environment' complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -f -a with_view -complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -d 'specify that this environment should maintain a view at the specified path (by default the view is maintained in the environment directory)' +complete -c spack -n '__fish_spack_using_command env create' -l with-view -r -d 'maintain view at WITH_VIEW (vs. environment'"'"'s directory)' complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -f -a include_concrete -complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -d 'name of old environment to copy specs from' +complete -c spack -n '__fish_spack_using_command env create' -l include-concrete -r -d 'copy concrete specs from INCLUDE_CONCRETE'"'"'s environment' # spack env remove set -g __fish_spack_optspecs_spack_env_remove h/help y/yes-to-all f/force @@ -1572,7 +1574,7 @@ complete -c spack -n '__fish_spack_using_command env remove' -s h -l help -d 'sh complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -f -a yes_to_all complete -c spack -n '__fish_spack_using_command env remove' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -f -a force -complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -d 'remove the environment even if it is included in another environment' +complete -c spack -n '__fish_spack_using_command env remove' -s f -l force -d 'force removal even when included in other environment(s)' # spack env rm set -g __fish_spack_optspecs_spack_env_rm h/help y/yes-to-all f/force @@ -1582,7 +1584,7 @@ complete -c spack -n '__fish_spack_using_command env rm' -s h -l help -d 'show t complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -f -a yes_to_all complete -c spack -n '__fish_spack_using_command env rm' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -f -a force -complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -d 'remove the environment even if it is included in another environment' +complete -c spack -n '__fish_spack_using_command env rm' -s f -l force -d 'force removal even when included in other environment(s)' # spack env rename set -g __fish_spack_optspecs_spack_env_rename h/help d/dir f/force @@ -1590,9 +1592,9 @@ set -g __fish_spack_optspecs_spack_env_rename h/help d/dir f/force complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env rename' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -f -a dir -complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -d 'the specified arguments correspond to directory paths' +complete -c spack -n '__fish_spack_using_command env rename' -s d -l dir -d 'positional arguments are environment directory paths' complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -f -a force -complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -d 'allow overwriting of an existing environment' +complete -c spack -n '__fish_spack_using_command env rename' -s f -l force -d 'force renaming even if overwriting an existing environment' # spack env mv set -g __fish_spack_optspecs_spack_env_mv h/help d/dir f/force @@ -1600,9 +1602,9 @@ set -g __fish_spack_optspecs_spack_env_mv h/help d/dir f/force complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env mv' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -f -a dir -complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -d 'the specified arguments correspond to directory paths' +complete -c spack -n '__fish_spack_using_command env mv' -s d -l dir -d 'positional arguments are environment directory paths' complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -f -a force -complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -d 'allow overwriting of an existing environment' +complete -c spack -n '__fish_spack_using_command env mv' -s f -l force -d 'force renaming even if overwriting an existing environment' # spack env list set -g __fish_spack_optspecs_spack_env_list h/help @@ -1669,15 +1671,35 @@ complete -c spack -n '__fish_spack_using_command_pos_remainder 0 env depfile' -f complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command env depfile' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -f -a make_prefix -complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -d 'prefix Makefile targets (and variables) with /' +complete -c spack -n '__fish_spack_using_command env depfile' -l make-prefix -l make-target-prefix -r -d 'prefix Makefile targets/variables with /,' complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -f -a jobserver complete -c spack -n '__fish_spack_using_command env depfile' -l make-disable-jobserver -d 'disable POSIX jobserver support' complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -f -a use_buildcache -complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -d 'when using `only`, redundant build dependencies are pruned from the DAG' +complete -c spack -n '__fish_spack_using_command env depfile' -l use-buildcache -r -d 'use `only` to prune redundant build dependencies' complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -f -a output complete -c spack -n '__fish_spack_using_command env depfile' -s o -l output -r -d 'write the depfile to FILE rather than to stdout' complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -f -a make -complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -d 'specify the depfile type' +complete -c spack -n '__fish_spack_using_command env depfile' -s G -l generator -r -d 'specify the depfile type (only supports `make`)' + +# spack env track +set -g __fish_spack_optspecs_spack_env_track h/help n/name= y/yes-to-all +complete -c spack -n '__fish_spack_using_command_pos 0 env track' -f -a '(__fish_spack_environments)' +complete -c spack -n '__fish_spack_using_command env track' -s h -l help -f -a help +complete -c spack -n '__fish_spack_using_command env track' -s h -l help -d 'show this help message and exit' +complete -c spack -n '__fish_spack_using_command env track' -s n -l name -r -f -a name +complete -c spack -n '__fish_spack_using_command env track' -s n -l name -r -d 'custom environment name' +complete -c spack -n '__fish_spack_using_command env track' -s y -l yes-to-all -f -a yes_to_all +complete -c spack -n '__fish_spack_using_command env track' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' + +# spack env untrack +set -g __fish_spack_optspecs_spack_env_untrack h/help f/force y/yes-to-all +complete -c spack -n '__fish_spack_using_command_pos_remainder 0 env untrack' -f -a '(__fish_spack_environments)' +complete -c spack -n '__fish_spack_using_command env untrack' -s h -l help -f -a help +complete -c spack -n '__fish_spack_using_command env untrack' -s h -l help -d 'show this help message and exit' +complete -c spack -n '__fish_spack_using_command env untrack' -s f -l force -f -a force +complete -c spack -n '__fish_spack_using_command env untrack' -s f -l force -d 'force unlink even when environment is active' +complete -c spack -n '__fish_spack_using_command env untrack' -s y -l yes-to-all -f -a yes_to_all +complete -c spack -n '__fish_spack_using_command env untrack' -s y -l yes-to-all -d 'assume "yes" is the answer to every confirmation request' # spack extensions set -g __fish_spack_optspecs_spack_extensions h/help l/long L/very-long d/deps p/paths s/show= @@ -1764,7 +1786,7 @@ complete -c spack -n '__fish_spack_using_command fetch' -l deprecated -f -a conf complete -c spack -n '__fish_spack_using_command fetch' -l deprecated -d 'allow concretizer to select deprecated versions' # spack find -set -g __fish_spack_optspecs_spack_find h/help format= H/hashes json I/install-status d/deps p/paths groups no-groups l/long L/very-long t/tag= N/namespaces r/only-roots c/show-concretized f/show-flags show-full-compiler x/explicit X/implicit u/unknown m/missing v/variants loaded M/only-missing deprecated only-deprecated install-tree= start-date= end-date= +set -g __fish_spack_optspecs_spack_find h/help format= H/hashes json I/install-status d/deps p/paths groups no-groups l/long L/very-long t/tag= N/namespaces r/only-roots c/show-concretized f/show-flags show-full-compiler x/explicit X/implicit u/unknown m/missing v/variants loaded M/only-missing only-deprecated deprecated install-tree= start-date= end-date= complete -c spack -n '__fish_spack_using_command_pos_remainder 0 find' -f -a '(__fish_spack_installed_specs)' complete -c spack -n '__fish_spack_using_command find' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command find' -s h -l help -d 'show this help message and exit' @@ -1814,10 +1836,10 @@ complete -c spack -n '__fish_spack_using_command find' -l loaded -f -a loaded complete -c spack -n '__fish_spack_using_command find' -l loaded -d 'show only packages loaded in the user environment' complete -c spack -n '__fish_spack_using_command find' -s M -l only-missing -f -a only_missing complete -c spack -n '__fish_spack_using_command find' -s M -l only-missing -d 'show only missing dependencies' -complete -c spack -n '__fish_spack_using_command find' -l deprecated -f -a deprecated -complete -c spack -n '__fish_spack_using_command find' -l deprecated -d 'show deprecated packages as well as installed specs' complete -c spack -n '__fish_spack_using_command find' -l only-deprecated -f -a only_deprecated complete -c spack -n '__fish_spack_using_command find' -l only-deprecated -d 'show only deprecated packages' +complete -c spack -n '__fish_spack_using_command find' -l deprecated -f -a deprecated +complete -c spack -n '__fish_spack_using_command find' -l deprecated -d 'show deprecated packages as well as installed specs' complete -c spack -n '__fish_spack_using_command find' -l install-tree -r -f -a install_tree complete -c spack -n '__fish_spack_using_command find' -l install-tree -r -d 'Install trees to query: '"'"'all'"'"' (default), '"'"'local'"'"', '"'"'upstream'"'"', upstream name or path' complete -c spack -n '__fish_spack_using_command find' -l start-date -r -f -a start_date @@ -2283,7 +2305,7 @@ complete -c spack -n '__fish_spack_using_command mirror destroy' -l mirror-url - complete -c spack -n '__fish_spack_using_command mirror destroy' -l mirror-url -r -d 'find mirror to destroy by url' # spack mirror add -set -g __fish_spack_optspecs_spack_mirror_add h/help scope= type= autopush unsigned signed s3-access-key-id= s3-access-key-secret= s3-access-token= s3-profile= s3-endpoint-url= oci-username= oci-password= +set -g __fish_spack_optspecs_spack_mirror_add h/help scope= type= autopush unsigned signed s3-access-key-id= s3-access-key-id-variable= s3-access-key-secret= s3-access-key-secret-variable= s3-access-token= s3-access-token-variable= s3-profile= s3-endpoint-url= oci-username= oci-username-variable= oci-password= oci-password-variable= complete -c spack -n '__fish_spack_using_command_pos 0 mirror add' -f complete -c spack -n '__fish_spack_using_command mirror add' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command mirror add' -s h -l help -d 'show this help message and exit' @@ -2299,18 +2321,28 @@ complete -c spack -n '__fish_spack_using_command mirror add' -l signed -f -a sig complete -c spack -n '__fish_spack_using_command mirror add' -l signed -d 'require signing and signature verification when pushing and installing from this build cache' complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-id -r -f -a s3_access_key_id complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-id -r -d 'ID string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-id-variable -r -f -a s3_access_key_id_variable +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-id-variable -r -d 'environment variable containing ID string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-secret -r -f -a s3_access_key_secret complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-secret -r -d 'secret string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-secret-variable -r -f -a s3_access_key_secret_variable +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-key-secret-variable -r -d 'environment variable containing secret string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-token -r -f -a s3_access_token complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-token -r -d 'access token to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-token-variable -r -f -a s3_access_token_variable +complete -c spack -n '__fish_spack_using_command mirror add' -l s3-access-token-variable -r -d 'environment variable containing access token to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l s3-profile -r -f -a s3_profile complete -c spack -n '__fish_spack_using_command mirror add' -l s3-profile -r -d 'S3 profile name to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l s3-endpoint-url -r -f -a s3_endpoint_url complete -c spack -n '__fish_spack_using_command mirror add' -l s3-endpoint-url -r -d 'endpoint URL to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l oci-username -r -f -a oci_username complete -c spack -n '__fish_spack_using_command mirror add' -l oci-username -r -d 'username to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror add' -l oci-username-variable -r -f -a oci_username_variable +complete -c spack -n '__fish_spack_using_command mirror add' -l oci-username-variable -r -d 'environment variable containing username to use to connect to this OCI mirror' complete -c spack -n '__fish_spack_using_command mirror add' -l oci-password -r -f -a oci_password complete -c spack -n '__fish_spack_using_command mirror add' -l oci-password -r -d 'password to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror add' -l oci-password-variable -r -f -a oci_password_variable +complete -c spack -n '__fish_spack_using_command mirror add' -l oci-password-variable -r -d 'environment variable containing password to use to connect to this OCI mirror' # spack mirror remove set -g __fish_spack_optspecs_spack_mirror_remove h/help scope= @@ -2329,7 +2361,7 @@ complete -c spack -n '__fish_spack_using_command mirror rm' -l scope -r -f -a '_ complete -c spack -n '__fish_spack_using_command mirror rm' -l scope -r -d 'configuration scope to modify' # spack mirror set-url -set -g __fish_spack_optspecs_spack_mirror_set_url h/help push fetch scope= s3-access-key-id= s3-access-key-secret= s3-access-token= s3-profile= s3-endpoint-url= oci-username= oci-password= +set -g __fish_spack_optspecs_spack_mirror_set_url h/help push fetch scope= s3-access-key-id= s3-access-key-id-variable= s3-access-key-secret= s3-access-key-secret-variable= s3-access-token= s3-access-token-variable= s3-profile= s3-endpoint-url= oci-username= oci-username-variable= oci-password= oci-password-variable= complete -c spack -n '__fish_spack_using_command_pos 0 mirror set-url' -f -a '(__fish_spack_mirrors)' complete -c spack -n '__fish_spack_using_command mirror set-url' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command mirror set-url' -s h -l help -d 'show this help message and exit' @@ -2341,21 +2373,31 @@ complete -c spack -n '__fish_spack_using_command mirror set-url' -l scope -r -f complete -c spack -n '__fish_spack_using_command mirror set-url' -l scope -r -d 'configuration scope to modify' complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-id -r -f -a s3_access_key_id complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-id -r -d 'ID string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-id-variable -r -f -a s3_access_key_id_variable +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-id-variable -r -d 'environment variable containing ID string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-secret -r -f -a s3_access_key_secret complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-secret -r -d 'secret string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-secret-variable -r -f -a s3_access_key_secret_variable +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-key-secret-variable -r -d 'environment variable containing secret string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-token -r -f -a s3_access_token complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-token -r -d 'access token to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-token-variable -r -f -a s3_access_token_variable +complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-access-token-variable -r -d 'environment variable containing access token to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-profile -r -f -a s3_profile complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-profile -r -d 'S3 profile name to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-endpoint-url -r -f -a s3_endpoint_url complete -c spack -n '__fish_spack_using_command mirror set-url' -l s3-endpoint-url -r -d 'endpoint URL to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-username -r -f -a oci_username complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-username -r -d 'username to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-username-variable -r -f -a oci_username_variable +complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-username-variable -r -d 'environment variable containing username to use to connect to this OCI mirror' complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-password -r -f -a oci_password complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-password -r -d 'password to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-password-variable -r -f -a oci_password_variable +complete -c spack -n '__fish_spack_using_command mirror set-url' -l oci-password-variable -r -d 'environment variable containing password to use to connect to this OCI mirror' # spack mirror set -set -g __fish_spack_optspecs_spack_mirror_set h/help push fetch type= url= autopush no-autopush unsigned signed scope= s3-access-key-id= s3-access-key-secret= s3-access-token= s3-profile= s3-endpoint-url= oci-username= oci-password= +set -g __fish_spack_optspecs_spack_mirror_set h/help push fetch type= url= autopush no-autopush unsigned signed scope= s3-access-key-id= s3-access-key-id-variable= s3-access-key-secret= s3-access-key-secret-variable= s3-access-token= s3-access-token-variable= s3-profile= s3-endpoint-url= oci-username= oci-username-variable= oci-password= oci-password-variable= complete -c spack -n '__fish_spack_using_command_pos 0 mirror set' -f -a '(__fish_spack_mirrors)' complete -c spack -n '__fish_spack_using_command mirror set' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command mirror set' -s h -l help -d 'show this help message and exit' @@ -2379,18 +2421,28 @@ complete -c spack -n '__fish_spack_using_command mirror set' -l scope -r -f -a ' complete -c spack -n '__fish_spack_using_command mirror set' -l scope -r -d 'configuration scope to modify' complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-id -r -f -a s3_access_key_id complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-id -r -d 'ID string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-id-variable -r -f -a s3_access_key_id_variable +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-id-variable -r -d 'environment variable containing ID string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-secret -r -f -a s3_access_key_secret complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-secret -r -d 'secret string to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-secret-variable -r -f -a s3_access_key_secret_variable +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-key-secret-variable -r -d 'environment variable containing secret string to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-token -r -f -a s3_access_token complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-token -r -d 'access token to use to connect to this S3 mirror' +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-token-variable -r -f -a s3_access_token_variable +complete -c spack -n '__fish_spack_using_command mirror set' -l s3-access-token-variable -r -d 'environment variable containing access token to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l s3-profile -r -f -a s3_profile complete -c spack -n '__fish_spack_using_command mirror set' -l s3-profile -r -d 'S3 profile name to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l s3-endpoint-url -r -f -a s3_endpoint_url complete -c spack -n '__fish_spack_using_command mirror set' -l s3-endpoint-url -r -d 'endpoint URL to use to connect to this S3 mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l oci-username -r -f -a oci_username complete -c spack -n '__fish_spack_using_command mirror set' -l oci-username -r -d 'username to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror set' -l oci-username-variable -r -f -a oci_username_variable +complete -c spack -n '__fish_spack_using_command mirror set' -l oci-username-variable -r -d 'environment variable containing username to use to connect to this OCI mirror' complete -c spack -n '__fish_spack_using_command mirror set' -l oci-password -r -f -a oci_password complete -c spack -n '__fish_spack_using_command mirror set' -l oci-password -r -d 'password to use to connect to this OCI mirror' +complete -c spack -n '__fish_spack_using_command mirror set' -l oci-password-variable -r -f -a oci_password_variable +complete -c spack -n '__fish_spack_using_command mirror set' -l oci-password-variable -r -d 'environment variable containing password to use to connect to this OCI mirror' # spack mirror list set -g __fish_spack_optspecs_spack_mirror_list h/help scope= @@ -2757,12 +2809,16 @@ complete -c spack -n '__fish_spack_using_command restage' -s h -l help -f -a hel complete -c spack -n '__fish_spack_using_command restage' -s h -l help -d 'show this help message and exit' # spack solve -set -g __fish_spack_optspecs_spack_solve h/help show= l/long L/very-long N/namespaces I/install-status no-install-status y/yaml j/json c/cover= t/types timers stats U/fresh reuse fresh-roots deprecated +set -g __fish_spack_optspecs_spack_solve h/help show= timers stats l/long L/very-long N/namespaces I/install-status no-install-status y/yaml j/json format= c/cover= t/types U/fresh reuse fresh-roots deprecated complete -c spack -n '__fish_spack_using_command_pos_remainder 0 solve' -f -k -a '(__fish_spack_specs_or_id)' complete -c spack -n '__fish_spack_using_command solve' -s h -l help -f -a help complete -c spack -n '__fish_spack_using_command solve' -s h -l help -d 'show this help message and exit' complete -c spack -n '__fish_spack_using_command solve' -l show -r -f -a show complete -c spack -n '__fish_spack_using_command solve' -l show -r -d 'select outputs' +complete -c spack -n '__fish_spack_using_command solve' -l timers -f -a timers +complete -c spack -n '__fish_spack_using_command solve' -l timers -d 'print out timers for different solve phases' +complete -c spack -n '__fish_spack_using_command solve' -l stats -f -a stats +complete -c spack -n '__fish_spack_using_command solve' -l stats -d 'print out statistics from clingo' complete -c spack -n '__fish_spack_using_command solve' -s l -l long -f -a long complete -c spack -n '__fish_spack_using_command solve' -s l -l long -d 'show dependency hashes as well as versions' complete -c spack -n '__fish_spack_using_command solve' -s L -l very-long -f -a very_long @@ -2774,17 +2830,15 @@ complete -c spack -n '__fish_spack_using_command solve' -s I -l install-status - complete -c spack -n '__fish_spack_using_command solve' -l no-install-status -f -a install_status complete -c spack -n '__fish_spack_using_command solve' -l no-install-status -d 'do not show install status annotations' complete -c spack -n '__fish_spack_using_command solve' -s y -l yaml -f -a format -complete -c spack -n '__fish_spack_using_command solve' -s y -l yaml -d 'print concrete spec as yaml' +complete -c spack -n '__fish_spack_using_command solve' -s y -l yaml -d 'print concrete spec as YAML' complete -c spack -n '__fish_spack_using_command solve' -s j -l json -f -a format -complete -c spack -n '__fish_spack_using_command solve' -s j -l json -d 'print concrete spec as json' +complete -c spack -n '__fish_spack_using_command solve' -s j -l json -d 'print concrete spec as JSON' +complete -c spack -n '__fish_spack_using_command solve' -l format -r -f -a format +complete -c spack -n '__fish_spack_using_command solve' -l format -r -d 'print concrete spec with the specified format string' complete -c spack -n '__fish_spack_using_command solve' -s c -l cover -r -f -a 'nodes edges paths' complete -c spack -n '__fish_spack_using_command solve' -s c -l cover -r -d 'how extensively to traverse the DAG (default: nodes)' complete -c spack -n '__fish_spack_using_command solve' -s t -l types -f -a types complete -c spack -n '__fish_spack_using_command solve' -s t -l types -d 'show dependency types' -complete -c spack -n '__fish_spack_using_command solve' -l timers -f -a timers -complete -c spack -n '__fish_spack_using_command solve' -l timers -d 'print out timers for different solve phases' -complete -c spack -n '__fish_spack_using_command solve' -l stats -f -a stats -complete -c spack -n '__fish_spack_using_command solve' -l stats -d 'print out statistics from clingo' complete -c spack -n '__fish_spack_using_command solve' -s U -l fresh -f -a concretizer_reuse complete -c spack -n '__fish_spack_using_command solve' -s U -l fresh -d 'do not reuse installed deps; build newest configuration' complete -c spack -n '__fish_spack_using_command solve' -l reuse -f -a concretizer_reuse @@ -2864,9 +2918,9 @@ complete -c spack -n '__fish_spack_using_command style' -s f -l fix -d 'format a complete -c spack -n '__fish_spack_using_command style' -l root -r -f -a root complete -c spack -n '__fish_spack_using_command style' -l root -r -d 'style check a different spack instance' complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -f -a tool -complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -d 'specify which tools to run (default: isort,black,flake8,mypy)' +complete -c spack -n '__fish_spack_using_command style' -s t -l tool -r -d 'specify which tools to run (default: import, isort, black, flake8, mypy)' complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -f -a skip -complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -d 'specify tools to skip (choose from isort,black,flake8,mypy)' +complete -c spack -n '__fish_spack_using_command style' -s s -l skip -r -d 'specify tools to skip (choose from import, isort, black, flake8, mypy)' # spack tags set -g __fish_spack_optspecs_spack_tags h/help i/installed a/all diff --git a/var/spack/repos/builder.test/packages/builder-and-mixins/package.py b/var/spack/repos/builder.test/packages/builder-and-mixins/package.py index 2e12b0e8061230..354f1bcd1afacd 100644 --- a/var/spack/repos/builder.test/packages/builder-and-mixins/package.py +++ b/var/spack/repos/builder.test/packages/builder-and-mixins/package.py @@ -2,7 +2,7 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import spack.builder +import spack.phase_callbacks from spack.build_systems import generic from spack.package import * @@ -17,7 +17,7 @@ class BuilderAndMixins(Package): version("1.0", md5="0123456789abcdef0123456789abcdef") -class BuilderMixin(metaclass=spack.builder.PhaseCallbacksMeta): +class BuilderMixin(metaclass=spack.phase_callbacks.PhaseCallbacksMeta): @run_before("install") def before_install(self): pass diff --git a/var/spack/repos/builtin.mock/packages/attributes-foo/package.py b/var/spack/repos/builtin.mock/packages/attributes-foo/package.py index 31c88f4b08564a..b882fc9b6595b6 100644 --- a/var/spack/repos/builtin.mock/packages/attributes-foo/package.py +++ b/var/spack/repos/builtin.mock/packages/attributes-foo/package.py @@ -44,7 +44,7 @@ def libs(self): # Header provided by the bar virutal package @property def bar_headers(self): - return find_headers("bar/bar", root=self.home.include, recursive=False) + return find_headers("bar", root=self.home.include, recursive=True) # Libary provided by the bar virtual package @property @@ -59,7 +59,7 @@ def baz_home(self): # Header provided by the baz virtual package @property def baz_headers(self): - return find_headers("baz/baz", root=self.baz_home.include, recursive=False) + return find_headers("baz", root=self.baz_home.include, recursive=True) # Library provided by the baz virtual package @property diff --git a/var/spack/repos/builtin.mock/packages/dependency-foo-bar/package.py b/var/spack/repos/builtin.mock/packages/dependency-foo-bar/package.py index 5d7f5e98170c78..9a8646baece5ed 100644 --- a/var/spack/repos/builtin.mock/packages/dependency-foo-bar/package.py +++ b/var/spack/repos/builtin.mock/packages/dependency-foo-bar/package.py @@ -18,3 +18,5 @@ class DependencyFooBar(Package): variant("foo", default=True, description="") variant("bar", default=False, description="") + + depends_on("second-dependency-foo-bar-fee") diff --git a/var/spack/repos/builtin.mock/packages/depends-on-manyvariants/package.py b/var/spack/repos/builtin.mock/packages/depends-on-manyvariants/package.py new file mode 100644 index 00000000000000..f1314471f917b2 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/depends-on-manyvariants/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class DependsOnManyvariants(Package): + """ + A package with a dependency on `manyvariants`, so that `manyvariants` can + be spliced in tests. + """ + + homepage = "https://www.test.com" + has_code = False + + version("1.0") + version("2.0") + + depends_on("manyvariants@1.0", when="@1.0") + depends_on("manyvariants@2.0", when="@2.0") + + def install(self, spec, prefix): + touch(prefix.bar) diff --git a/var/spack/repos/builtin.mock/packages/depends-on-virtual-with-abi/package.py b/var/spack/repos/builtin.mock/packages/depends-on-virtual-with-abi/package.py new file mode 100644 index 00000000000000..9f281f337b2d35 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/depends-on-virtual-with-abi/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class DependsOnVirtualWithAbi(Package): + """ + This has a virtual dependency on `virtual-with-abi`, mostly for testing + automatic splicing of providers. + """ + + homepage = "https://www.example.com" + has_code = False + + version("1.0") + depends_on("virtual-with-abi") diff --git a/var/spack/repos/builtin.mock/packages/direct-dep-foo-bar/package.py b/var/spack/repos/builtin.mock/packages/direct-dep-foo-bar/package.py new file mode 100644 index 00000000000000..9f4fc5d8034da5 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/direct-dep-foo-bar/package.py @@ -0,0 +1,22 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class DirectDepFooBar(Package): + """This package has a variant "bar", which is False by default, and + variant "foo" which is True by default. + """ + + homepage = "http://www.example.com" + url = "http://www.example.com/direct-dep-foo-bar-1.0.tar.gz" + + version("1.0", md5="567890abcdefg12345678900987654321") + + variant("foo", default=True, description="") + variant("bar", default=False, description="") + + depends_on("second-dependency-foo-bar-fee") diff --git a/var/spack/repos/builtin.mock/packages/find-externals1/package.py b/var/spack/repos/builtin.mock/packages/find-externals1/package.py index b8adbac19cdc1c..d6ddb320f91242 100644 --- a/var/spack/repos/builtin.mock/packages/find-externals1/package.py +++ b/var/spack/repos/builtin.mock/packages/find-externals1/package.py @@ -5,7 +5,6 @@ import os import re -import spack.package_base from spack.package import * @@ -26,7 +25,7 @@ def determine_spec_details(cls, prefix, exes_in_prefix): exes = [x for x in exe_to_path.keys() if "find-externals1-exe" in x] if not exes: return - exe = spack.util.executable.Executable(exe_to_path[exes[0]]) + exe = Executable(exe_to_path[exes[0]]) output = exe("--version", output=str) if output: match = re.search(r"find-externals1.*version\s+(\S+)", output) diff --git a/var/spack/repos/builtin.mock/packages/manyvariants/package.py b/var/spack/repos/builtin.mock/packages/manyvariants/package.py new file mode 100644 index 00000000000000..4747fab53f8d3d --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/manyvariants/package.py @@ -0,0 +1,33 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Manyvariants(Package): + """ + A package with 4 different variants of different arities to test the + `match_variants` argument to `can_splice` + """ + + homepage = "https://www.test.com" + has_code = False + + version("2.0.1") + version("2.0.0") + version("1.0.1") + version("1.0.0") + + variant("a", default=True) + variant("b", default=False) + variant("c", values=("v1", "v2", "v3"), multi=False, default="v1") + variant("d", values=("v1", "v2", "v3"), multi=False, default="v1") + + can_splice("manyvariants@1.0.0", when="@1.0.1", match_variants="*") + can_splice("manyvariants@2.0.0+a~b", when="@2.0.1~a+b", match_variants=["c", "d"]) + can_splice("manyvariants@2.0.0 c=v1 d=v1", when="@2.0.1+a+b") + + def install(self, spec, prefix): + touch(prefix.bar) diff --git a/var/spack/repos/builtin.mock/packages/openblas/package.py b/var/spack/repos/builtin.mock/packages/openblas/package.py index db288b9a3b62e5..d6ecb25019aa4c 100644 --- a/var/spack/repos/builtin.mock/packages/openblas/package.py +++ b/var/spack/repos/builtin.mock/packages/openblas/package.py @@ -25,4 +25,6 @@ class Openblas(Package): # To ensure test works with newer gcc versions conflicts("%gcc@:10.1", when="@0.2.16:") + depends_on("perl") + provides("blas") diff --git a/var/spack/repos/builtin.mock/packages/parent-foo-bar-fee/package.py b/var/spack/repos/builtin.mock/packages/parent-foo-bar-fee/package.py new file mode 100644 index 00000000000000..32636df6ab599b --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/parent-foo-bar-fee/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class ParentFooBarFee(Package): + """This package has a variant "bar", which is True by default, and depends on another + package which has the same variant defaulting to False. + """ + + homepage = "http://www.example.com" + url = "http://www.example.com/parent-foo-bar-fee-1.0.tar.gz" + + version("1.0", md5="abcdefg01234567890123abcdefghfed") + + variant("foo", default=True, description="") + variant("bar", default=True, description="") + variant("fee", default=False, description="") + + depends_on("dependency-foo-bar") diff --git a/var/spack/repos/builtin.mock/packages/parent-foo-bar/package.py b/var/spack/repos/builtin.mock/packages/parent-foo-bar/package.py index 064c5740571140..a03d09da2fbd8e 100644 --- a/var/spack/repos/builtin.mock/packages/parent-foo-bar/package.py +++ b/var/spack/repos/builtin.mock/packages/parent-foo-bar/package.py @@ -19,4 +19,5 @@ class ParentFooBar(Package): variant("foo", default=True, description="") variant("bar", default=True, description="") + depends_on("direct-dep-foo-bar") depends_on("dependency-foo-bar") diff --git a/var/spack/repos/builtin.mock/packages/perl/package.py b/var/spack/repos/builtin.mock/packages/perl/package.py index 8d86dec8f32017..2c3f810e036de2 100644 --- a/var/spack/repos/builtin.mock/packages/perl/package.py +++ b/var/spack/repos/builtin.mock/packages/perl/package.py @@ -14,3 +14,5 @@ class Perl(Package): extendable = True version("0.0.0", md5="abcdef1234567890abcdef1234567890") + + variant("shared", default=True, description="Build shared libraries") diff --git a/var/spack/repos/builtin.mock/packages/pkg-a/package.py b/var/spack/repos/builtin.mock/packages/pkg-a/package.py index d1ecba835dfc20..646172b778d129 100644 --- a/var/spack/repos/builtin.mock/packages/pkg-a/package.py +++ b/var/spack/repos/builtin.mock/packages/pkg-a/package.py @@ -25,6 +25,14 @@ class PkgA(AutotoolsPackage): variant("bvv", default=True, description="The good old BV variant") + variant( + "libs", + default="shared", + values=("shared", "static"), + multi=True, + description="Type of libraries to install", + ) + depends_on("pkg-b", when="foobar=bar") depends_on("test-dependency", type="test") diff --git a/var/spack/repos/builtin.mock/packages/py-test-callback/package.py b/var/spack/repos/builtin.mock/packages/py-test-callback/package.py index b152490895f5e3..74744e0f16f841 100644 --- a/var/spack/repos/builtin.mock/packages/py-test-callback/package.py +++ b/var/spack/repos/builtin.mock/packages/py-test-callback/package.py @@ -3,8 +3,9 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.builder import spack.pkg.builtin.mock.python as mp -from spack.build_systems._checks import BaseBuilder, execute_install_time_tests +from spack.build_systems._checks import BuilderWithDefaults, execute_install_time_tests from spack.package import * @@ -31,7 +32,7 @@ def test_callback(self): @spack.builder.builder("testcallback") -class MyBuilder(BaseBuilder): +class MyBuilder(BuilderWithDefaults): phases = ("install",) #: Callback names for install-time test @@ -40,7 +41,7 @@ class MyBuilder(BaseBuilder): def install(self, pkg, spec, prefix): pkg.install(spec, prefix) - spack.builder.run_after("install")(execute_install_time_tests) + run_after("install")(execute_install_time_tests) def test_callback(self): self.pkg.test_callback() diff --git a/var/spack/repos/builtin.mock/packages/second-dependency-foo-bar-fee/package.py b/var/spack/repos/builtin.mock/packages/second-dependency-foo-bar-fee/package.py new file mode 100644 index 00000000000000..4439639bf0863d --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/second-dependency-foo-bar-fee/package.py @@ -0,0 +1,21 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class SecondDependencyFooBarFee(Package): + """This package has a variant "foo", which is True by default, a variant "bar" which + is False by default, and variant "foo" which is True by default. + """ + + homepage = "http://www.example.com" + url = "http://www.example.com/second-dependency-foo-bar-fee-1.0.tar.gz" + + version("1.0", md5="2101234567890abcdefg1234567890abc") + + variant("foo", default=True, description="") + variant("bar", default=False, description="") + variant("fee", default=False, description="") diff --git a/var/spack/repos/builtin.mock/packages/splice-depends-on-t/package.py b/var/spack/repos/builtin.mock/packages/splice-depends-on-t/package.py new file mode 100644 index 00000000000000..9f38da0daa04f0 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/splice-depends-on-t/package.py @@ -0,0 +1,22 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class SpliceDependsOnT(Package): + """Package that depends on splice-t""" + + homepage = "http://www.example.com" + url = "http://www.example.com/splice-depends-on-t-1.0.tar.gz" + + version("1.0", md5="0123456789abcdef0123456789abcdef") + + depends_on("splice-t") + + def install(self, spec, prefix): + with open(prefix.join("splice-depends-on-t"), "w") as f: + f.write("splice-depends-on-t: {0}".format(prefix)) + f.write("splice-t: {0}".format(spec["splice-t"].prefix)) diff --git a/var/spack/repos/builtin.mock/packages/splice-h/package.py b/var/spack/repos/builtin.mock/packages/splice-h/package.py index a54f1e7f7d683a..6f86f09f92e16d 100644 --- a/var/spack/repos/builtin.mock/packages/splice-h/package.py +++ b/var/spack/repos/builtin.mock/packages/splice-h/package.py @@ -12,17 +12,24 @@ class SpliceH(Package): homepage = "http://www.example.com" url = "http://www.example.com/splice-h-1.0.tar.gz" - version("1.0", md5="0123456789abcdef0123456789abcdef") + version("1.0.2") + version("1.0.1") + version("1.0.0") variant("foo", default=False, description="nope") variant("bar", default=False, description="nope") variant("baz", default=False, description="nope") + variant("compat", default=True, description="nope") depends_on("splice-z") depends_on("splice-z+foo", when="+foo") provides("something") provides("somethingelse") + provides("virtual-abi") + + can_splice("splice-h@1.0.0 +compat", when="@1.0.1 +compat") + can_splice("splice-h@1.0.0:1.0.1 +compat", when="@1.0.2 +compat") def install(self, spec, prefix): with open(prefix.join("splice-h"), "w") as f: diff --git a/var/spack/repos/builtin.mock/packages/splice-z/package.py b/var/spack/repos/builtin.mock/packages/splice-z/package.py index ff73fbaa03701e..bac33be6000927 100644 --- a/var/spack/repos/builtin.mock/packages/splice-z/package.py +++ b/var/spack/repos/builtin.mock/packages/splice-z/package.py @@ -12,10 +12,16 @@ class SpliceZ(Package): homepage = "http://www.example.com" url = "http://www.example.com/splice-z-1.0.tar.gz" - version("1.0", md5="0123456789abcdef0123456789abcdef") + version("1.0.2") + version("1.0.1") + version("1.0.0") variant("foo", default=False, description="nope") variant("bar", default=False, description="nope") + variant("compat", default=True, description="nope") + + can_splice("splice-z@1.0.0 +compat", when="@1.0.1 +compat") + can_splice("splice-z@1.0.0:1.0.1 +compat", when="@1.0.2 +compat") def install(self, spec, prefix): with open(prefix.join("splice-z"), "w") as f: diff --git a/var/spack/repos/builtin.mock/packages/virtual-abi-1/package.py b/var/spack/repos/builtin.mock/packages/virtual-abi-1/package.py new file mode 100644 index 00000000000000..60a4c64f9e298a --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/virtual-abi-1/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class VirtualAbi1(Package): + """ + This package provides `virtual-with-abi` and is conditionally ABI + compatible with `virtual-abi-multi` + """ + + homepage = "https://www.example.com" + has_code = False + + version("1.0") + + provides("virtual-with-abi") + + can_splice("virtual-abi-multi@1.0 abi=one", when="@1.0") + + def install(self, spec, prefix): + touch(prefix.foo) diff --git a/var/spack/repos/builtin.mock/packages/virtual-abi-2/package.py b/var/spack/repos/builtin.mock/packages/virtual-abi-2/package.py new file mode 100644 index 00000000000000..5725bf504c433d --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/virtual-abi-2/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class VirtualAbi2(Package): + """ + This package provides `virtual-with-abi` and is conditionally ABI + compatible with `virtual-abi-multi` + """ + + homepage = "https://www.example.com" + has_code = False + + version("1.0") + + provides("virtual-with-abi") + + can_splice("virtual-abi-multi@1.0 abi=two", when="@1.0") + + def install(self, spec, prefix): + touch(prefix.foo) diff --git a/var/spack/repos/builtin.mock/packages/virtual-abi-multi/package.py b/var/spack/repos/builtin.mock/packages/virtual-abi-multi/package.py new file mode 100644 index 00000000000000..87cfd31544aeef --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/virtual-abi-multi/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class VirtualAbiMulti(Package): + """ + This package provides `virtual-with-abi` is ABI compatible with either + `virtual-abi-1` or `virtual-abi-2` depending on the value of its `abi` + variant + """ + + homepage = "https://www.example.com" + has_code = False + + version("1.0") + + variant("abi", default="custom", multi=False, values=("one", "two", "custom")) + + provides("virtual-with-abi") + + can_splice("virtual-abi-1@1.0", when="@1.0 abi=one") + can_splice("virtual-abi-2@1.0", when="@1.0 abi=two") + + def install(self, spec, prefix): + touch(prefix.foo) diff --git a/var/spack/repos/builtin.mock/packages/virtual-with-abi/package.py b/var/spack/repos/builtin.mock/packages/virtual-with-abi/package.py new file mode 100644 index 00000000000000..1147efd20219e5 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/virtual-with-abi/package.py @@ -0,0 +1,16 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class VirtualWithAbi(Package): + """Virtual package for mocking an interface with stable ABI .""" + + homepage = "https://www.abi.org/" + virtual = True + + def test_hello(self): + print("Hello there!") diff --git a/var/spack/repos/builtin/packages/acfl/package.py b/var/spack/repos/builtin/packages/acfl/package.py index b1e30fd767906e..6e1d9fa618c1e6 100644 --- a/var/spack/repos/builtin/packages/acfl/package.py +++ b/var/spack/repos/builtin/packages/acfl/package.py @@ -2,7 +2,9 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os +import spack.platforms from spack.package import * _os_map_before_23 = { @@ -24,9 +26,7 @@ "ubuntu22.04": "Ubuntu-22.04", "debian12": "Ubuntu-22.04", "sles15": "SLES-15", - "centos7": "RHEL-7", "centos8": "RHEL-8", - "rhel7": "RHEL-7", "rhel8": "RHEL-8", "rhel9": "RHEL-9", "rocky8": "RHEL-8", @@ -36,6 +36,66 @@ } _versions = { + "24.10.1": { + "RHEL-8": ( + "0e894ce2a9d7af8fabe21368a44e9f71d25bda80413fb8dd22f389c3c5e36100", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_RHEL-8_aarch64.tar", + ), + "RHEL-9": ( + "5c2cd9c6f505050a39012f180a5c739065f140fe45b9c3039f3e6e6b7c911002", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_RHEL-9_aarch64.tar", + ), + "SLES-15": ( + "3b33b397b253a14994b6341f219ed6af5cf79ba8fc5acb99fa028deb4344fbaf", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_SLES-15_aarch64.tar", + ), + "Ubuntu-20.04": ( + "5a5e47cbb1a28f633961a418ff990f72bdd76c2854da80aa3dcf7619bb0fcc8c", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_Ubuntu-20.04_aarch64.tar", + ), + "Ubuntu-22.04": ( + "d1da0469a0c6df62911edd2bbe49525aa56fffe9a9f419aa19e9aaa9a8bd0295", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_Ubuntu-22.04_aarch64.tar", + ), + "AmazonLinux-2": ( + "bfcb0de00be5b65a37d41473a9f85ac49b29ccb83e0338e57910fa0a9ffef79d", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_AmazonLinux-2_aarch64.tar", + ), + "AmazonLinux-2023": ( + "56a292dd2283c842d5bcfbeaa9bdb81d28f30f7500a7fd113487ecc456652fe9", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_AmazonLinux-2023_aarch64.tar", + ), + }, + "24.10": { + "RHEL-8": ( + "7c685c5393345baff573dc53ea3bb84e6293f9e51808e168ececcf51efb45813", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_RHEL-8_aarch64.tar", + ), + "RHEL-9": ( + "52767ec236098aec410b1d9899c4ba2c3dc2bcc3c2b500dbf2f4b7b3cfacf16d", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_RHEL-9_aarch64.tar", + ), + "SLES-15": ( + "ab118af1150931d59e7ec89f9c235a89bf604700ace53f549d3898677e7e76a4", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_SLES-15_aarch64.tar", + ), + "Ubuntu-20.04": ( + "defe9b8bd31d28aba1c8b8026295b6e277f221d1e387b16d8d86f4dea9b75c27", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_Ubuntu-20.04_aarch64.tar", + ), + "Ubuntu-22.04": ( + "10c0fad1ff3628f505ada90359c68b046676a4c6cab1131d76ae0429d3694415", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_Ubuntu-22.04_aarch64.tar", + ), + "AmazonLinux-2": ( + "8abd35c455adb94812aaa55853f72ac55e142940e775e985eeedbbbe17902d8f", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_AmazonLinux-2_aarch64.tar", + ), + "AmazonLinux-2023": ( + "6b1cf34240af15ae9a7c767d7f484f2fa79c4633571b613e3d65e20b8d3ba65a", + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10/arm-compiler-for-linux_24.10_AmazonLinux-2023_aarch64.tar", + ), + }, "24.04": { "RHEL-7": ( "064c3ecfd71cba3d8bf639448e899388f58eb7faef4b38f3c1aace625ace8b1e", @@ -209,10 +269,11 @@ def get_os(ver): spack_os = spack.platforms.host().default_os - if ver.startswith("22."): + if ver.startswith("22"): return _os_map_before_23.get(spack_os, "") - else: - return _os_map.get(spack_os, "RHEL-7") + if ver.startswith("23") or ver == "24.04": + return {**_os_map, "centos7": "RHEL-7", "rhel7": "RHEL-7"}.get(spack_os, "RHEL-7") + return _os_map.get(spack_os, "RHEL-8") def get_armpl_version_to_3(spec): @@ -234,6 +295,11 @@ def get_armpl_prefix(spec): return join_path(spec.prefix, f"armpl-{ver}_{os}_arm-linux-compiler") +def get_gcc_prefix(spec): + dirlist = next(os.walk(spec.prefix))[1] + return join_path(spec.prefix, next(dir for dir in dirlist if dir.startswith("gcc"))) + + def get_acfl_prefix(spec): os = get_os(spec.version.string) if spec.version.string.startswith("22."): @@ -260,7 +326,6 @@ class Acfl(Package, CompilerPackage): """ homepage = "https://developer.arm.com/Tools%20and%20Software/Arm%20Compiler%20for%20Linux" - url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-compiler-for-linux/23-10/arm-compiler-for-linux_23.10_Ubuntu-22.04_aarch64.tar" maintainers("paolotricerri") @@ -402,6 +467,7 @@ def setup_run_environment(self, env): def check_install(self): arm_dir = get_acfl_prefix(self.spec) armpl_dir = get_armpl_prefix(self.spec) + gcc_dir = get_gcc_prefix(self.spec) suffix = get_armpl_suffix(self.spec) armpl_example_dir = join_path(armpl_dir, f"examples{suffix}") # run example makefile @@ -411,6 +477,7 @@ def check_install(self): "CC=" + self.cc, "F90=" + self.fortran, "CPATH=" + join_path(arm_dir, "include"), + "COMPILER_PATH=" + gcc_dir, "ARMPL_DIR=" + armpl_dir, ) # clean up diff --git a/var/spack/repos/builtin/packages/acts/package.py b/var/spack/repos/builtin/packages/acts/package.py index 1a0ef352dc39df..c2c158a17cca78 100644 --- a/var/spack/repos/builtin/packages/acts/package.py +++ b/var/spack/repos/builtin/packages/acts/package.py @@ -41,6 +41,10 @@ class Acts(CMakePackage, CudaPackage): # Supported Acts versions version("main", branch="main") version("master", branch="main", deprecated=True) # For compatibility + version("37.4.0", commit="4ae9a44f54c854599d1d753222ec36e0b5b4e9c7", submodules=True) + version("37.3.0", commit="b3e856d4dadcda7d1a88a9b846ce5a7acd8410c4", submodules=True) + version("37.2.0", commit="821144dc40d35b44aee0d7857a0bd1c99e4a3932", submodules=True) + version("37.1.0", commit="fa6ad4d52e0bd09cf8c78507fcbb18e9ac2c87a3", submodules=True) version("37.0.1", commit="998b9c9dd42d5160c2540f8fa820505869bfdb79", submodules=True) version("37.0.0", commit="117feaaadc7a2336755274e0cd70ba58a047a1de", submodules=True) version("36.3.2", commit="01e124d253a3c9c9b9f5d2fde16682ce9d4599cd", submodules=True) @@ -335,7 +339,7 @@ class Acts(CMakePackage, CudaPackage): "tbb", default=True, description="Build the examples with Threading Building Blocks library", - when="@19.8:19,20.1: +examples", + when="@19.8:19,20.1:37.2 +examples", ) variant("analysis", default=False, description="Build analysis applications in the examples") @@ -380,6 +384,7 @@ class Acts(CMakePackage, CudaPackage): depends_on("hepmc3 @3.2.1:", when="+hepmc3") depends_on("heppdt", when="+hepmc3 @:4.0") depends_on("intel-tbb @2020.1:", when="+examples +tbb") + depends_on("intel-tbb @2020.1:", when="+examples @37.3:") depends_on("mlpack@3.1.1:", when="+mlpack") depends_on("nlohmann-json @3.9.1:", when="@0.14: +json") depends_on("nlohmann-json @3.10.5:", when="@37: +json") diff --git a/var/spack/repos/builtin/packages/adiak/package.py b/var/spack/repos/builtin/packages/adiak/package.py index e1ad9344c17153..66aaa0a18c52e0 100644 --- a/var/spack/repos/builtin/packages/adiak/package.py +++ b/var/spack/repos/builtin/packages/adiak/package.py @@ -22,8 +22,9 @@ class Adiak(CMakePackage): license("MIT") version( - "0.4.0", commit="7e8b7233f8a148b402128ed46b2f0c643e3b397e", submodules=True, preferred=True + "0.4.1", commit="7ac997111785bee6d9391664b1d18ebc2b3c557b", submodules=True, preferred=True ) + version("0.4.0", commit="7e8b7233f8a148b402128ed46b2f0c643e3b397e", submodules=True) version("0.2.2", commit="3aedd494c81c01df1183af28bc09bade2fabfcd3", submodules=True) version( "0.3.0-alpha", diff --git a/var/spack/repos/builtin/packages/adios2/package.py b/var/spack/repos/builtin/packages/adios2/package.py index a5baeb0cbde5ad..8d9a0425faba61 100644 --- a/var/spack/repos/builtin/packages/adios2/package.py +++ b/var/spack/repos/builtin/packages/adios2/package.py @@ -6,6 +6,7 @@ import os import tempfile +from spack.build_systems.cmake import CMakeBuilder from spack.package import * @@ -26,10 +27,11 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): version("master", branch="master") version( - "2.10.1", - sha256="ce776f3a451994f4979c6bd6d946917a749290a37b7433c0254759b02695ad85", + "2.10.2", + sha256="14cf0bcd94772194bce0f2c0e74dba187965d1cffd12d45f801c32929158579e", preferred=True, ) + version("2.10.1", sha256="ce776f3a451994f4979c6bd6d946917a749290a37b7433c0254759b02695ad85") version("2.10.0", sha256="e5984de488bda546553dd2f46f047e539333891e63b9fe73944782ba6c2d95e4") version("2.9.2", sha256="78309297c82a95ee38ed3224c98b93d330128c753a43893f63bbe969320e4979") version("2.9.1", sha256="ddfa32c14494250ee8a48ef1c97a1bf6442c15484bbbd4669228a0f90242f4f9") @@ -39,15 +41,14 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): version("2.8.1", sha256="3f515b442bbd52e3189866b121613fe3b59edb8845692ea86fad83d1eba35d93") version("2.8.0", sha256="5af3d950e616989133955c2430bd09bcf6bad3a04cf62317b401eaf6e7c2d479") version("2.7.1", sha256="c8e237fd51f49d8a62a0660db12b72ea5067512aa7970f3fcf80b70e3f87ca3e") - version("2.7.0", sha256="4b5df1a1f92d7ff380416dec7511cfcfe3dc44da27e486ed63c3e6cffb173924") - version("2.6.0", sha256="45b41889065f8b840725928db092848b8a8b8d1bfae1b92e72f8868d1c76216c") - version("2.5.0", sha256="7c8ff3bf5441dd662806df9650c56a669359cb0185ea232ecb3578de7b065329") - version("2.4.0", sha256="50ecea04b1e41c88835b4b3fd4e7bf0a0a2a3129855c9cc4ba6cf6a1575106e2") - version("2.3.1", sha256="3bf81ccc20a7f2715935349336a76ba4c8402355e1dc3848fcd6f4c3c5931893") + with default_args(deprecated=True): + version("2.7.0", sha256="4b5df1a1f92d7ff380416dec7511cfcfe3dc44da27e486ed63c3e6cffb173924") + version("2.6.0", sha256="45b41889065f8b840725928db092848b8a8b8d1bfae1b92e72f8868d1c76216c") + version("2.5.0", sha256="7c8ff3bf5441dd662806df9650c56a669359cb0185ea232ecb3578de7b065329") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") # There's not really any consistency about how static and shared libs are # implemented across spack. What we're trying to support is specifically three @@ -76,7 +77,7 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): variant("bzip2", default=True, when="@2.4:", description="Enable BZip2 compression") variant("zfp", default=True, description="Enable ZFP compression") variant("png", default=True, when="@2.4:", description="Enable PNG compression") - variant("sz", default=True, description="Enable SZ compression") + variant("sz", default=True, when="@2.6:", description="Enable SZ compression") variant("mgard", default=True, when="@2.8:", description="Enable MGARD compression") # Rransport engines @@ -113,7 +114,6 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): # Requires mature C++11 implementations conflicts("%gcc@:4.7") conflicts("%intel@:15") - conflicts("%pgi@:14") # ifx does not support submodules in separate files conflicts("%oneapi@:2022.1.0", when="+fortran") @@ -188,18 +188,26 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): depends_on("libpng@1.6:", when="+png") depends_on("zfp@0.5.1:0.5", when="+zfp") depends_on("sz@2.0.2.0:", when="+sz") - depends_on("mgard", when="+mgard") + depends_on("mgard@2022-11-18:", when="+mgard") + depends_on("mgard@2023-01-10:", when="@2.9: +mgard") extends("python", when="+python") - depends_on("python@2.7:2.8,3.5:", when="@:2.4.0 +python", type=("build", "run")) - depends_on("python@2.7:2.8,3.5:", when="@:2.4.0", type="test") - depends_on("python@3.5:", when="@2.5.0: +python", type=("build", "run")) - depends_on("python@3.5:", when="@2.5.0:", type="test") + depends_on("python", when="+python", type=("build", "run")) + depends_on("python@2.7:2.8,3.5:3.10", when="@:2.4.0 +python", type=("build", "run")) + depends_on("python@3.5:3.10", when="@2.5.0:2.7 +python", type=("build", "run")) + + depends_on("python", type="test") + depends_on("python@2.7:2.8,3.5:3.10", when="@:2.4.0", type="test") + depends_on("python@3.5:3.10", when="@2.5.0:2.7", type="test") + depends_on("py-numpy@1.6.1:", when="+python", type=("build", "run")) depends_on("py-mpi4py@2.0.0:", when="+mpi +python", type=("build", "run")) depends_on("aws-sdk-cpp", when="+aws") depends_on("libcatalyst@2", when="+libcatalyst") + # error: invalid use of incomplete type 'PyFrameObject' {aka 'struct _frame'} + conflicts("^python@3.11:", when="@:2.7") + # Fix findmpi when called by dependees # See https://github.com/ornladios/ADIOS2/pull/1632 patch("cmake-update-findmpi.patch", when="@2.4.0") @@ -211,7 +219,7 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): # Fix an unnecessary python dependency when testing is disabled # See https://github.com/ornladios/ADIOS2/pull/2596 - patch("2.7-fix-python-test-deps.patch", when="@2.5.0:2.7.0") + patch("2.7-fix-python-test-deps.patch", when="@2.7.0") # Fix unresolved symbols when built with gcc10. # See https://github.com/ornladios/ADIOS2/pull/2714 @@ -224,7 +232,7 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): # https://github.com/ornladios/adios2/pull/2710 patch( "https://github.com/ornladios/adios2/pull/2710.patch?full_index=1", - when="@:2.7.1", + when="@2.5:2.7.1", sha256="8221073d1b2f8944395a88a5d60a15c7370646b62f5fc6309867bbb6a8c2096c", ) @@ -238,7 +246,7 @@ class Adios2(CMakePackage, CudaPackage, ROCmPackage): # ROCM: enable support for rocm >= 6 # https://github.com/ornladios/ADIOS2/pull/4214 - patch("2.10-enable-rocm6.patch", when="@2.9.1:") + patch("2.10-enable-rocm6.patch", when="@2.9.1:2.10.1") @when("%fj") def patch(self): @@ -271,6 +279,7 @@ def cmake_args(self): from_variant("ADIOS2_USE_DataSpaces", "dataspaces"), from_variant("ADIOS2_USE_Fortran", "fortran"), from_variant("ADIOS2_USE_HDF5", "hdf5"), + from_variant("ADIOS2_USE_MGARD", "mgard"), from_variant("ADIOS2_USE_MPI", "mpi"), from_variant("ADIOS2_USE_PNG", "png"), from_variant("ADIOS2_USE_Python", "python"), @@ -289,7 +298,6 @@ def cmake_args(self): self.define("ADIOS2_BUILD_EXAMPLES", False), self.define("ADIOS2_USE_Endian_Reverse", True), self.define("ADIOS2_USE_IME", False), - self.define("ADIOS2_USE_MGARD", False), ] if spec.satisfies("+sst"): @@ -310,11 +318,11 @@ def cmake_args(self): # hip support if spec.satisfies("+cuda"): - args.append(self.builder.define_cuda_architectures(self)) + args.append(CMakeBuilder.define_cuda_architectures(self)) # hip support if spec.satisfies("+rocm"): - args.append(self.builder.define_hip_architectures(self)) + args.append(CMakeBuilder.define_hip_architectures(self)) return args diff --git a/var/spack/repos/builtin/packages/aespipe/package.py b/var/spack/repos/builtin/packages/aespipe/package.py index 3f34992709acc5..3c7cfa415b5252 100644 --- a/var/spack/repos/builtin/packages/aespipe/package.py +++ b/var/spack/repos/builtin/packages/aespipe/package.py @@ -10,7 +10,7 @@ class Aespipe(AutotoolsPackage): """aespipe program is AES encrypting or decrypting pipe. It reads from standard input and writes to standard output.""" - homepage = "https//loop-aes.sourceforge.net/" + homepage = "https://sourceforge.net/projects/loop-aes/" url = "https://sourceforge.net/projects/loop-aes/files/aespipe/v2.4f/aespipe-v2.4f.tar.bz2" license("Intel") diff --git a/var/spack/repos/builtin/packages/all/package.py b/var/spack/repos/builtin/packages/all-library/package.py similarity index 98% rename from var/spack/repos/builtin/packages/all/package.py rename to var/spack/repos/builtin/packages/all-library/package.py index c30254cc95c4e1..8841584194b591 100644 --- a/var/spack/repos/builtin/packages/all/package.py +++ b/var/spack/repos/builtin/packages/all-library/package.py @@ -6,7 +6,7 @@ from spack.package import * -class All(CMakePackage): +class AllLibrary(CMakePackage): """A Load Balancing Library (ALL) The library aims to provide an easy way to include dynamic domain-based diff --git a/var/spack/repos/builtin/packages/allpaths-lg/package.py b/var/spack/repos/builtin/packages/allpaths-lg/package.py index 2a325cd3b7f5af..337ea8b7ac0da8 100644 --- a/var/spack/repos/builtin/packages/allpaths-lg/package.py +++ b/var/spack/repos/builtin/packages/allpaths-lg/package.py @@ -24,6 +24,5 @@ class AllpathsLg(AutotoolsPackage): conflicts("%clang") conflicts("%intel") conflicts("%nag") - conflicts("%pgi") conflicts("%xl") conflicts("%xl_r") diff --git a/var/spack/repos/builtin/packages/amber/package.py b/var/spack/repos/builtin/packages/amber/package.py index f72ce9bc4da690..1eb8ca557db328 100644 --- a/var/spack/repos/builtin/packages/amber/package.py +++ b/var/spack/repos/builtin/packages/amber/package.py @@ -148,7 +148,6 @@ class Amber(Package, CudaPackage): conflicts( "+openmp", when="%apple-clang", msg="OpenMP not available for the Apple clang compiler" ) - conflicts("+openmp", when="%pgi", msg="OpenMP not available for the pgi compiler") def url_for_version(self, version): url = "file://{0}/Amber{1}.tar.bz2".format(os.getcwd(), version) @@ -182,8 +181,6 @@ def install(self, spec, prefix): compiler = "gnu" elif self.spec.satisfies("%intel"): compiler = "intel" - elif self.spec.satisfies("%pgi"): - compiler = "pgi" elif self.spec.satisfies("%nvhpc"): compiler = "pgi" elif self.spec.satisfies("%clang"): diff --git a/var/spack/repos/builtin/packages/amd-aocl/package.py b/var/spack/repos/builtin/packages/amd-aocl/package.py index 9026dd74e2fad2..85f7148c818719 100644 --- a/var/spack/repos/builtin/packages/amd-aocl/package.py +++ b/var/spack/repos/builtin/packages/amd-aocl/package.py @@ -24,7 +24,8 @@ class AmdAocl(BundlePackage): maintainers("amd-toolchain-support") - version("4.2", preferred=True) + version("5.0", preferred=True) + version("4.2") version("4.1") version("4.0") version("3.2") @@ -38,21 +39,32 @@ class AmdAocl(BundlePackage): depends_on("amdblis threads=openmp") depends_on("amdfftw +openmp") depends_on("amdlibflame threads=openmp") + depends_on("aocl-sparse +openmp") + depends_on("aocl-da +openmp") + depends_on("aocl-compression +openmp") with when("~openmp"): depends_on("amdblis threads=none") depends_on("amdfftw ~openmp") depends_on("amdlibflame threads=none") + depends_on("aocl-sparse ~openmp") + depends_on("aocl-da ~openmp") + depends_on("aocl-compression ~openmp") - for vers in ["2.2", "3.0", "3.1", "3.2", "4.0", "4.1", "4.2"]: + for vers in ["2.2", "3.0", "3.1", "3.2", "4.0", "4.1", "4.2", "5.0"]: with when(f"@={vers}"): depends_on(f"amdblis@={vers}") depends_on(f"amdfftw@={vers}") depends_on(f"amdlibflame@={vers}") + depends_on("amdlibflame ^[virtuals=blas] amdblis") depends_on(f"amdlibm@={vers}") depends_on(f"amdscalapack@={vers}") + depends_on("amdscalapack ^[virtuals=blas] amdblis") + depends_on("amdscalapack ^[virtuals=lapack] amdlibflame") depends_on(f"aocl-sparse@={vers}") if Version(vers) >= Version("4.2"): depends_on(f"aocl-compression@={vers}") depends_on(f"aocl-crypto@={vers}") depends_on(f"aocl-libmem@={vers}") + if Version(vers) >= Version("5.0"): + depends_on(f"aocl-da@={vers}") diff --git a/var/spack/repos/builtin/packages/amdblis/package.py b/var/spack/repos/builtin/packages/amdblis/package.py index 27e713845fbb59..85264dcf35b46e 100644 --- a/var/spack/repos/builtin/packages/amdblis/package.py +++ b/var/spack/repos/builtin/packages/amdblis/package.py @@ -5,8 +5,6 @@ import os -from llnl.util import tty - from spack.package import * from spack.pkg.builtin.blis import BlisBase @@ -39,10 +37,11 @@ class Amdblis(BlisBase): license("BSD-3-Clause") version( - "4.2", - sha256="0e1baf850ba0e6f99e79f64bbb0a59fcb838ddb5028e24527f52b407c3c62963", + "5.0", + sha256="5abb34972b88b2839709d0af8785662bc651c7806ccfa41d386d93c900169bc2", preferred=True, ) + version("4.2", sha256="0e1baf850ba0e6f99e79f64bbb0a59fcb838ddb5028e24527f52b407c3c62963") version("4.1", sha256="a05c6c7d359232580d1d599696053ad0beeedf50f3b88d5d22ee7d34375ab577") version("4.0", sha256="cddd31176834a932753ac0fc4c76332868feab3e9ac607fa197d8b44c1e74a41") version("3.2", sha256="5a400ee4fc324e224e12f73cc37b915a00f92b400443b15ce3350278ad46fff6") @@ -66,18 +65,6 @@ def configure_args(self): spec = self.spec args = super().configure_args() - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - if spec.satisfies("+ilp64"): args.append("--blas-int-size=64") @@ -99,7 +86,7 @@ def configure_args(self): elif spec.satisfies("@3.0.1: %aocc"): args.append("--complex-return=intel") - if spec.satisfies("@3.1:"): + if spec.satisfies("@3.1"): args.append("--disable-aocl-dynamic") if spec.satisfies("+logging"): @@ -125,3 +112,12 @@ def create_symlink(self): os.symlink("libblis-mt.a", "libblis.a") if os.path.isfile("libblis-mt.so"): os.symlink("libblis-mt.so", "libblis.so") + + @property + def libs(self): + return find_libraries( + ["libblis"] if self.spec.satisfies("threads=none") else ["libblis-mt"], + root=self.prefix, + shared=self.spec.satisfies("libs=shared"), + recursive=True, + ) diff --git a/var/spack/repos/builtin/packages/amdfftw/package.py b/var/spack/repos/builtin/packages/amdfftw/package.py index f508c4162b6123..56089c214b8374 100644 --- a/var/spack/repos/builtin/packages/amdfftw/package.py +++ b/var/spack/repos/builtin/packages/amdfftw/package.py @@ -5,8 +5,6 @@ import os -from llnl.util import tty - from spack.build_environment import optimization_flags from spack.package import * from spack.pkg.builtin.fftw import FftwBase @@ -43,10 +41,11 @@ class Amdfftw(FftwBase): license("GPL-2.0-only") version( - "4.2", - sha256="391ef7d933e696762e3547a35b58ab18d22a6cf3e199c74889bcf25a1d1fc89b", + "5.0", + sha256="bead6c08309a206f8a6258971272affcca07f11eb57b5ecd8496e2e7e3ead877", preferred=True, ) + version("4.2", sha256="391ef7d933e696762e3547a35b58ab18d22a6cf3e199c74889bcf25a1d1fc89b") version("4.1", sha256="f1cfecfcc0729f96a5bd61c6b26f3fa43bb0662d3fff370d4f73490c60cf4e59") version("4.0", sha256="5f02cb05f224bd86bd88ec6272b294c26dba3b1d22c7fb298745fd7b9d2271c0") version("3.2", sha256="31cab17a93e03b5b606e88dd6116a1055b8f49542d7d0890dbfcca057087b8d0") @@ -158,6 +157,13 @@ class Amdfftw(FftwBase): requires("target=x86_64:", msg="AMD FFTW available only on x86_64") + def flag_handler(self, name, flags): + (flags, _, _) = super().flag_handler(name, flags) + if name == "cflags": + if self.spec.satisfies("%gcc@14:"): + flags.append("-Wno-incompatible-pointer-types") + return (flags, None, None) + def configure(self, spec, prefix): """Configure function""" # Base options @@ -175,18 +181,6 @@ def configure(self, spec, prefix): options.append("FC={0}".format(os.path.basename(spack_fc))) options.append("F77={0}".format(os.path.basename(spack_fc))) - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - if spec.satisfies("+debug"): options.append("--enable-debug") diff --git a/var/spack/repos/builtin/packages/amdlibflame/libflame-pkgconfig.patch b/var/spack/repos/builtin/packages/amdlibflame/libflame-pkgconfig.patch new file mode 100644 index 00000000000000..579d2e6720093f --- /dev/null +++ b/var/spack/repos/builtin/packages/amdlibflame/libflame-pkgconfig.patch @@ -0,0 +1,29 @@ +diff -Naru a/CMakeLists.txt b/CMakeLists.txt +--- a/CMakeLists.txt 2024-02-26 18:26:37.000000000 +0000 ++++ b/CMakeLists.txt 2024-03-19 20:48:44.099094687 +0000 +@@ -1197,3 +1197,12 @@ + PROPERTY ADDITIONAL_CLEAN_FILES + ${CMAKE_SOURCE_DIR}/build/FLA_config.h ${CMAKE_SOURCE_DIR}/include/ + ) ++ ++# pkgconfig file ++set (prefix ${CMAKE_INSTALL_PREFIX}) ++set (VERSION 4.2) ++configure_file (flame.pc.in flame.pc @ONLY) ++install (FILES ++ ${CMAKE_CURRENT_BINARY_DIR}/flame.pc ++ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig ++ COMPONENT Development) +diff -Naru a/flame.pc.in b/flame.pc.in +--- a/flame.pc.in 1970-01-01 00:00:00.000000000 +0000 ++++ b/flame.pc.in 2024-03-19 20:48:51.112058421 +0000 +@@ -0,0 +1,9 @@ ++prefix=@prefix@ ++libdir=${prefix}/lib ++includedir=${prefix}/include ++ ++Name: libFLAME ++Description: AMD-optimized libFLAME library ++Version: @VERSION@ ++Libs: -L${libdir} -lflame ++Cflags: -I${includedir} diff --git a/var/spack/repos/builtin/packages/amdlibflame/package.py b/var/spack/repos/builtin/packages/amdlibflame/package.py index 2fed863a23bbfd..d74fc4be911a12 100644 --- a/var/spack/repos/builtin/packages/amdlibflame/package.py +++ b/var/spack/repos/builtin/packages/amdlibflame/package.py @@ -4,8 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) # ----------------------------------------------------------------------------\ -from llnl.util import tty - import spack.build_systems.autotools import spack.build_systems.cmake from spack.package import * @@ -49,11 +47,13 @@ class Amdlibflame(CMakePackage, LibflameBase): maintainers("amd-toolchain-support") license("BSD-3-Clause") + version( - "4.2", - sha256="93a433c169528ffba74a99df0ba3ce3d5b1fab9bf06ce8d2fd72ee84768ed84c", + "5.0", + sha256="3bee3712459a8c5bd728a521d8a4c8f46735730bf35d48c878d2fc45fc000918", preferred=True, ) + version("4.2", sha256="93a433c169528ffba74a99df0ba3ce3d5b1fab9bf06ce8d2fd72ee84768ed84c") version("4.1", sha256="8aed69c60d11cc17e058cabcb8a931cee4f343064ade3e73d3392b7214624b61") version("4.0", sha256="bcb05763aa1df1e88f0da5e43ff86d956826cbea1d9c5ff591d78a3e091c66a4") version("3.2", sha256="6b5337fb668b82d0ed0a4ab4b5af4e2f72e4cedbeeb4a8b6eb9a3ef057fb749a") @@ -67,13 +67,6 @@ class Amdlibflame(CMakePackage, LibflameBase): depends_on("fortran", type="build") # generated variant("ilp64", default=False, when="@3.0.1: ", description="Build with ILP64 support") - variant( - "enable-aocl-blas", - default=False, - when="@4.1.0:", - description="Enables tight coupling with AOCL-BLAS library in order to use AOCL-BLAS\ - internal routines", - ) variant( "vectorization", default="auto", @@ -94,7 +87,7 @@ class Amdlibflame(CMakePackage, LibflameBase): # Required dependencies with when("build_system=cmake"): generator("make") - depends_on("cmake@3.15.0:", type="build") + depends_on("cmake@3.22:", type="build") conflicts("threads=pthreads", msg="pthread is not supported") conflicts("threads=openmp", when="@:3", msg="openmp is not supported by amdlibflame < 4.0") @@ -103,12 +96,14 @@ class Amdlibflame(CMakePackage, LibflameBase): patch("aocc-2.2.0.patch", when="@:2", level=1) patch("cray-compiler-wrapper.patch", when="@:3.0.0", level=1) patch("supermat.patch", when="@4.0:4.1", level=1) + patch("libflame-pkgconfig.patch", when="@4.2") provides("flame@5.2", when="@2:") depends_on("python+pythoncmd", type="build") depends_on("gmake@4:", when="@3.0.1,3.1:", type="build") - for vers in ["4.1", "4.2"]: + + for vers in ["4.1", "4.2", "5.0"]: with when(f"@{vers}"): depends_on(f"aocl-utils@{vers}") @@ -128,9 +123,14 @@ def libs(self): def flag_handler(self, name, flags): if name == "cflags": + if ( + self.spec.satisfies("%clang@16:") + or self.spec.satisfies("%aocc@4.1.0:") + or self.spec.satisfies("%gcc@14:") + ): + flags.append("-Wno-implicit-function-declaration") if self.spec.satisfies("%clang@16:") or self.spec.satisfies("%aocc@4.1.0:"): flags.append("-Wno-error=incompatible-function-pointer-types") - flags.append("-Wno-implicit-function-declaration") flags.append("-Wno-sometimes-uninitialized") if name == "ldflags": if self.spec.satisfies("^aocl-utils~shared"): @@ -153,10 +153,13 @@ def cmake_args(self): else: args.append(self.define("ENABLE_AMD_FLAGS", True)) + if spec.satisfies("threads=none"): + args.append(self.define("ENABLE_MULTITHREADING", False)) + if spec.satisfies("@3.0.1: +ilp64"): args.append(self.define("ENABLE_ILP64", True)) - if spec.satisfies("@4.1.0: +enable-aocl-blas"): + if spec.satisfies("@4.2: ^[virtuals=blas] amdblis"): args.append(self.define("ENABLE_AOCL_BLAS", True)) args.append("-DAOCL_ROOT:PATH={0}".format(spec["blas"].prefix)) @@ -170,6 +173,8 @@ def cmake_args(self): else: args.append(self.define("LF_ISA_CONFIG", spec.variants["vectorization"].value)) + args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) + return args @@ -179,18 +184,6 @@ def configure_args(self): args = self.pkg.configure_args() spec = self.spec - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - # From 3.2 version, amd optimized flags are encapsulated under: # enable-amd-aocc-flags for AOCC compiler # enable-amd-flags for all other compilers diff --git a/var/spack/repos/builtin/packages/amdlibm/package.py b/var/spack/repos/builtin/packages/amdlibm/package.py index 4ec7cd850c7d6b..f1d194f535bf48 100644 --- a/var/spack/repos/builtin/packages/amdlibm/package.py +++ b/var/spack/repos/builtin/packages/amdlibm/package.py @@ -5,8 +5,6 @@ import os -from llnl.util import tty - from spack.package import * @@ -28,16 +26,17 @@ class Amdlibm(SConsPackage): _name = "amdlibm" homepage = "https://www.amd.com/en/developer/aocl/libm.html" git = "https://github.com/amd/aocl-libm-ose.git" - url = "https://github.com/amd/aocl-libm-ose/archive/refs/tags/3.0.tar.gz" + url = "https://github.com/amd/aocl-libm-ose/archive/3.0.tar.gz" maintainers("amd-toolchain-support") license("BSD-3-Clause") version( - "4.2", - sha256="58847b942e998b3f52eb41ae26403c7392d244fcafa707cbf23165aac24edd9e", + "5.0", + sha256="ba1d50c068938c9a927e37e5630f683b6149d7d5a95efffeb76e7c9a8bcb2b5e", preferred=True, ) + version("4.2", sha256="58847b942e998b3f52eb41ae26403c7392d244fcafa707cbf23165aac24edd9e") version("4.1", sha256="5bbbbc6bc721d9a775822eab60fbc11eb245e77d9f105b4fcb26a54d01456122") version("4.0", sha256="038c1eab544be77598eccda791b26553d3b9e2ee4ab3f5ad85fdd2a77d015a7d") version("3.2", sha256="c75b287c38a3ce997066af1f5c8d2b19fc460d5e56678ea81f3ac33eb79ec890") @@ -54,7 +53,7 @@ class Amdlibm(SConsPackage): depends_on("python@3.6.1:", type=("build", "run")) depends_on("scons@3.1.2:", type=("build")) depends_on("mpfr", type=("link")) - for vers in ["4.1", "4.2"]: + for vers in ["4.1", "4.2", "5.0"]: with when(f"@{vers}"): depends_on(f"aocl-utils@{vers}") @@ -66,10 +65,14 @@ class Amdlibm(SConsPackage): patch("libm-ose-SconsSpack.patch", when="@3.1:4.2") conflicts("%gcc@:9.1.0", msg="Minimum supported GCC version is 9.2.0") - conflicts("%gcc@13.2.0:", msg="Maximum supported GCC version is 13.1.0") - conflicts("%clang@9.0:16.0", msg="supported Clang version is from 9 to 16") + conflicts("%clang@:9.0", msg="Minimum supported Clang version is 9") + conflicts("%clang@17.0.0:", msg="Maximum supported Clang version is 17.0.0") + conflicts("%gcc@14.3.0:", msg="Maximum supported GCC version is 14.2.0") conflicts("%aocc@3.2.0", msg="dependency on python@3.6.2") + def patch(self): + filter_file("14.1", "14.2", "scripts/site_scons/alm/check.py") + def build_args(self, spec, prefix): """Setting build arguments for amdlibm""" args = [f"-j{determine_number_of_jobs(parallel=True)}", f"--prefix={prefix}"] @@ -77,18 +80,6 @@ def build_args(self, spec, prefix): if self.spec.satisfies("@4.1: "): args.append("--aocl_utils_install_path={0}".format(self.spec["aocl-utils"].prefix)) - if not ( - self.spec.satisfies(r"%aocc@3.2:4.2") - or self.spec.satisfies(r"%gcc@12.2:13.1") - or self.spec.satisfies(r"%clang@15:16") - ): - tty.warn( - "AOCL has been tested to work with the following compilers\ - versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:16\ - see the following aocl userguide for details: \ - https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - # we are circumventing the use of # Spacks compiler wrappers because # SCons wipes out all environment variables. diff --git a/var/spack/repos/builtin/packages/amdscalapack/package.py b/var/spack/repos/builtin/packages/amdscalapack/package.py index 5f25811f6f451e..52736eb2fabba1 100644 --- a/var/spack/repos/builtin/packages/amdscalapack/package.py +++ b/var/spack/repos/builtin/packages/amdscalapack/package.py @@ -3,8 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from llnl.util import tty - from spack.package import * from spack.pkg.builtin.netlib_scalapack import ScalapackBase @@ -34,10 +32,11 @@ class Amdscalapack(ScalapackBase): license("BSD-3-Clause-Open-MPI") version( - "4.2", - sha256="c6e9a846c05cdc05252b0b5f264164329812800bf13f9d97c77114dc138e6ccb", + "5.0", + sha256="a33cf16c51cfd65c7acb5fbdb8884a5c147cdefea73931b07863c56d54f812cc", preferred=True, ) + version("4.2", sha256="c6e9a846c05cdc05252b0b5f264164329812800bf13f9d97c77114dc138e6ccb") version("4.1", sha256="b2e51c3604e5869d1faaef2e52c92071fcb3de1345aebb2ea172206622067ad9") version("4.0", sha256="f02913b5984597b22cdb9a36198ed61039a1bf130308e778dc31b2a7eb88b33b") version("3.2", sha256="9e00979bb1be39d627bdacb01774bc043029840d542fafc934d16fec3e3b0892") @@ -47,18 +46,27 @@ class Amdscalapack(ScalapackBase): depends_on("c", type="build") # generated depends_on("fortran", type="build") # generated + depends_on("amdblis", when="^[virtuals=blas] amdblis") + depends_on("amdlibflame", when="^[virtuals=lapack] amdlibflame") variant("ilp64", default=False, description="Build with ILP64 support") conflicts("+ilp64", when="@:3.0", msg="ILP64 is supported from 3.1 onwards") requires("target=x86_64:", msg="AMD scalapack available only on x86_64") - patch("clang-hollerith.patch", when="%clang@16:") + patch("clang-hollerith.patch", when="@=4.0 %clang@16:") def patch(self): # Flang-New gets confused and thinks it finds Hollerith constants if self.spec.satisfies("%clang@16:"): filter_file("-cpp", "", "CMakeLists.txt") + # remove the C-style comments in header file that cause issues with flang + if self.spec.satisfies("@4.2: %clang@18:"): + which("sed")( + "-i", + "1,23d", + join_path(self.stage.source_path, "FRAMEWORK", "SL_Context_fortran_include.h"), + ) def url_for_version(self, version): vers = "https://github.com/amd/{0}/archive/{1}.tar.gz" @@ -67,28 +75,29 @@ def url_for_version(self, version): else: return vers.format("scalapack", version) + def flag_handler(self, name, flags): + (flags, _, _) = super().flag_handler(name, flags) + # remove a flag set in ScalapackBase that is not working + if self.spec.satisfies("%gcc@14:"): + if "-std=gnu89" in flags: + flags.remove("-std=gnu89") + return (flags, None, None) + def cmake_args(self): """cmake_args function""" args = super().cmake_args() spec = self.spec - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - if spec.satisfies("%gcc@10:"): args.extend(["-DCMAKE_Fortran_FLAGS={0}".format("-fallow-argument-mismatch")]) if spec.satisfies("%clang@16:"): - args.extend(["-DCMAKE_Fortran_FLAGS={0}".format("-cpp -fno-implicit-none")]) + flags = "-cpp -fno-implicit-none" + if spec.satisfies("%clang@18"): + flags += " -flang-experimental-polymorphism" + if spec.satisfies("%clang@18:"): + flags += " -I{0}".format(join_path(self.stage.source_path, "FRAMEWORK")) + args.extend(["-DCMAKE_Fortran_FLAGS={0}".format(flags)]) if spec.satisfies("@2.2"): args.extend( @@ -110,6 +119,8 @@ def cmake_args(self): c_flags.append("-Wno-deprecated-non-prototype") c_flags.append("-Wno-incompatible-pointer-types") args.append(self.define("CMAKE_C_FLAGS", " ".join(c_flags))) + elif self.spec.satisfies("%gcc@14:"): + args.append(self.define("CMAKE_C_FLAGS", "-Wno-incompatible-pointer-types")) # link libflame library args.extend(["-DLAPACK_LIBRARIES={0}".format(self.spec["lapack"].libs)]) @@ -117,6 +128,7 @@ def cmake_args(self): args.extend( [ "-DLAPACK_FOUND=true", + "-DUSE_OPTIMIZED_LAPACK_BLAS=true", "-DCMAKE_C_COMPILER=%s" % spec["mpi"].mpicc, "-DCMAKE_Fortran_COMPILER=%s" % spec["mpi"].mpifc, ] diff --git a/var/spack/repos/builtin/packages/amduprof/package.py b/var/spack/repos/builtin/packages/amduprof/package.py index ffd9ba5ccadba8..dc9f4b7e9d2b30 100644 --- a/var/spack/repos/builtin/packages/amduprof/package.py +++ b/var/spack/repos/builtin/packages/amduprof/package.py @@ -16,16 +16,29 @@ class Amduprof(Package): understand the limiters of application performance and evaluate improvements.""" - homepage = "https://developer.amd.com/amd-uprof/" - url = f"file://{os.getcwd()}/AMDuProf_Linux_x64_4.2.850.tar.bz2" + homepage = "https://www.amd.com/en/developer/uprof.html" manual_download = True maintainers("amd-toolchain-support") - version("4.2.850", sha256="f2d7c4eb9ec9c32845ff8f19874c1e6bcb0fa8ab2c12e73addcbf23a6d1bd623") + version( + "5.0.1479", + sha256="065d24d9b84d2ef94ae8a360bf55c74a0f3fe9250b01cc7fb2642495028130d5", + url="file://{0}/AMDuProf_Linux_x64_5.0.1479.tar.bz2".format(os.getcwd()), + preferred=True, + ) + version( + "4.2.850", + sha256="f2d7c4eb9ec9c32845ff8f19874c1e6bcb0fa8ab2c12e73addcbf23a6d1bd623", + url="file://{0}/AMDuProf_Linux_x64_4.2.850.tar.bz2".format(os.getcwd()), + ) depends_on("binutils@2.27:", type="run") + # Licensing + license_required = True + license_url = "https://www.amd.com/en/developer/uprof/uprof-eula.html" + conflicts("platform=darwin") requires("target=x86_64:", msg="AMD uProf available only on x86_64") diff --git a/var/spack/repos/builtin/packages/amr-wind/package.py b/var/spack/repos/builtin/packages/amr-wind/package.py index a9657f4db7c271..c2b96b163bc81b 100644 --- a/var/spack/repos/builtin/packages/amr-wind/package.py +++ b/var/spack/repos/builtin/packages/amr-wind/package.py @@ -21,103 +21,43 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("main", branch="main", submodules=True) - version( - "3.1.5", tag="v3.1.5", commit="554f8aa1ac36c2bae17565c64d5bc33333cee396", submodules=True - ) - version( - "3.1.4", tag="v3.1.4", commit="e10f5ebd3141b9990a65ebe9f1bdca8554b59472", submodules=True - ) - version( - "3.1.3", tag="v3.1.3", commit="af8231ace69119133c4c8a906e98946ec5aa79c8", submodules=True - ) - version( - "3.1.2", tag="v3.1.2", commit="5edcac4496e30e450c0f21e7fa74f8b590dc3860", submodules=True - ) - version( - "3.1.1", tag="v3.1.1", commit="8ae06194fa47bf473615988f97a7b423d467b023", submodules=True - ) - version( - "3.1.0", tag="v3.1.0", commit="3e23581b132532bf70b09c38217ff9c46204f047", submodules=True - ) - version( - "3.0.2", tag="v3.0.2", commit="f867288dffecc6404189afa965189c2558cf9922", submodules=True - ) - version( - "3.0.1", tag="v3.0.1", commit="65aa85db5cb3bbabc767d5dde4b106b7022a0f90", submodules=True - ) - version( - "3.0.0", tag="v3.0.0", commit="2fbd345cfa7cb7277c1cb6a1323247579e1bbc32", submodules=True - ) - version( - "2.6.0", tag="v2.6.0", commit="31ef1137b00b304b62b84edaa5b819c0bf0b7436", submodules=True - ) - version( - "2.5.0", tag="v2.5.0", commit="f9f499b6926339f96b3ff260495b8782c045555c", submodules=True - ) - version( - "2.4.3", tag="v2.4.3", commit="4be85f376d4939f8e5534b7985917e4cfccedfaf", submodules=True - ) - version( - "2.4.2", tag="v2.4.2", commit="5ebb2abf2df9c87e6086d8f55a4d929ff0cdb37b", submodules=True - ) - version( - "2.4.1", tag="v2.4.1", commit="40accd372f850e10fcbeee6ddecc4d15fd6364c6", submodules=True - ) - version( - "2.4.0", tag="v2.4.0", commit="b8ab898b7e9e8e78455b61e303940b80d00d18ca", submodules=True - ) - version( - "2.3.2", tag="v2.3.2", commit="61cbb21e8dfdeea47a0add772cd52abac33c4901", submodules=True - ) - version( - "2.3.1", tag="v2.3.1", commit="cc51dadb34de9f333605a5bfb83b72c9310f676a", submodules=True - ) - version( - "2.3.0", tag="v2.3.0", commit="6ba000b628aa3178545cdbbea508cc2cb2e5c76c", submodules=True - ) - version( - "2.2.1", tag="v2.2.1", commit="e131a79f8e68be181390a2656f54268f90a9e78a", submodules=True - ) - version( - "2.2.0", tag="v2.2.0", commit="bc787f21deca9239928182e27400133934c62658", submodules=True - ) - version( - "2.1.0", tag="v2.1.0", commit="13e15b52f4a1651a3d72324a71ba1e18255663e7", submodules=True - ) - version( - "2.0.0", tag="v2.0.0", commit="ea448365033fc6bc9ee0febeb369b377f4fd8240", submodules=True - ) - version( - "1.4.0", tag="v1.4.0", commit="bdddf133e41a9b7b4c8ce28f1ea1bebec47678f5", submodules=True - ) - version( - "1.3.1", tag="v1.3.1", commit="63692889143599de57232e64a9c7e4af8f0a2e1e", submodules=True - ) - version( - "1.3.0", tag="v1.3.0", commit="f74d7b3801f0492e586d440fac729d9dec595a8b", submodules=True - ) - version( - "1.2.1", tag="v1.2.1", commit="7291737434ca339ecc765355eab88ddd529ff68f", submodules=True - ) - version( - "1.2.0", tag="v1.2.0", commit="db9add5c1c68583a9019cb7ba6776bd580b0ab3e", submodules=True - ) - version( - "1.1.0", tag="v1.1.0", commit="30396bf70f0bd5ac65dd0f7b29757b0e02b22459", submodules=True - ) - version( - "1.0.1", tag="v1.0.1", commit="aa9b7e8e63833e6ac1cc3f60fcba5140416cc139", submodules=True - ) - version( - "1.0.0", tag="v1.0.0", commit="885f4137ce7b9e6c60f48aa5e4c1a54f1418ea9e", submodules=True - ) - version( - "0.9.0", tag="v0.9.0", commit="cf66ebe31fd5f27b76a83451cd22f346e7a67160", submodules=True - ) - - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + version("3.2.0", tag="v3.2.0", submodules=True) + version("3.1.7", tag="v3.1.7", submodules=True) + version("3.1.6", tag="v3.1.6", submodules=True) + version("3.1.5", tag="v3.1.5", submodules=True) + version("3.1.4", tag="v3.1.4", submodules=True) + version("3.1.3", tag="v3.1.3", submodules=True) + version("3.1.2", tag="v3.1.2", submodules=True) + version("3.1.1", tag="v3.1.1", submodules=True) + version("3.1.0", tag="v3.1.0", submodules=True) + version("3.0.2", tag="v3.0.2", submodules=True) + version("3.0.1", tag="v3.0.1", submodules=True) + version("3.0.0", tag="v3.0.0", submodules=True) + version("2.6.0", tag="v2.6.0", submodules=True) + version("2.5.0", tag="v2.5.0", submodules=True) + version("2.4.3", tag="v2.4.3", submodules=True) + version("2.4.2", tag="v2.4.2", submodules=True) + version("2.4.1", tag="v2.4.1", submodules=True) + version("2.4.0", tag="v2.4.0", submodules=True) + version("2.3.2", tag="v2.3.2", submodules=True) + version("2.3.1", tag="v2.3.1", submodules=True) + version("2.3.0", tag="v2.3.0", submodules=True) + version("2.2.1", tag="v2.2.1", submodules=True) + version("2.2.0", tag="v2.2.0", submodules=True) + version("2.1.0", tag="v2.1.0", submodules=True) + version("2.0.0", tag="v2.0.0", submodules=True) + version("1.4.0", tag="v1.4.0", submodules=True) + version("1.3.1", tag="v1.3.1", submodules=True) + version("1.3.0", tag="v1.3.0", submodules=True) + version("1.2.1", tag="v1.2.1", submodules=True) + version("1.2.0", tag="v1.2.0", submodules=True) + version("1.1.0", tag="v1.1.0", submodules=True) + version("1.0.1", tag="v1.0.1", submodules=True) + version("1.0.0", tag="v1.0.0", submodules=True) + version("0.9.0", tag="v0.9.0", submodules=True) + + depends_on("c", type="build") + depends_on("cxx", type="build") variant("hypre", default=False, description="Enable Hypre integration") variant("ascent", default=False, description="Enable Ascent integration") diff --git a/var/spack/repos/builtin/packages/amrex/package.py b/var/spack/repos/builtin/packages/amrex/package.py index 724b5130c19169..b524b6af812cbd 100644 --- a/var/spack/repos/builtin/packages/amrex/package.py +++ b/var/spack/repos/builtin/packages/amrex/package.py @@ -26,6 +26,7 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("develop", branch="development") + version("24.11", sha256="31cc37b39f15e02252875815f6066046fc56a479bf459362b9889b0d6a202df6") version("24.10", sha256="a2d15e417bd7c41963749338e884d939c80c5f2fcae3279fe3f1b463e3e4208a") version("24.09", sha256="a1435d16532d04a1facce9a9ae35d68a57f7cd21a5f22a6590bde3c265ea1449") version("24.08", sha256="e09623e715887a19a1f86ed6fdb8335022fd6c03f19372d8f13b55cdeeadf5de") @@ -134,6 +135,7 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): ) variant("eb", default=True, description="Build Embedded Boundary classes", when="@24.10:") variant("eb", default=False, description="Build Embedded Boundary classes", when="@:24.09") + variant("fft", default=False, description="Build FFT support", when="@24.11:") variant("fortran", default=False, description="Build Fortran API") variant("linear_solvers", default=True, description="Build linear solvers") variant("amrdata", default=False, description="Build data services") @@ -149,6 +151,9 @@ class Amrex(CMakePackage, CudaPackage, ROCmPackage): # Build dependencies depends_on("mpi", when="+mpi") + with when("+fft"): + depends_on("rocfft", when="+rocm") + depends_on("fftw@3", when="~cuda ~rocm ~sycl") with when("+ascent"): depends_on("ascent") depends_on("ascent +cuda", when="+cuda") @@ -329,6 +334,9 @@ def cmake_args(self): self.define_from_variant("AMReX_PIC", "pic"), ] + if self.spec.satisfies("+fft"): + args.append("-DAMReX_FFT=ON") + if self.spec.satisfies("%fj"): args.append("-DCMAKE_Fortran_MODDIR_FLAG=-M") diff --git a/var/spack/repos/builtin/packages/amrvis/package.py b/var/spack/repos/builtin/packages/amrvis/package.py index e05668483d1844..8ca075cda54335 100644 --- a/var/spack/repos/builtin/packages/amrvis/package.py +++ b/var/spack/repos/builtin/packages/amrvis/package.py @@ -57,7 +57,7 @@ class Amrvis(MakefilePackage): # Only doing gcc and clang at the moment. # Intel currently fails searching for mpiicc, mpiicpc, etc. - for comp in ["%intel", "%cce", "%nag", "%pgi", "%xl", "%xl_r"]: + for comp in ["%intel", "%cce", "%nag", "%xl", "%xl_r"]: conflicts(comp, msg="Amrvis currently only builds with gcc and clang") # Need to clone AMReX into Amrvis because Amrvis uses AMReX's source diff --git a/var/spack/repos/builtin/packages/aocl-compression/package.py b/var/spack/repos/builtin/packages/aocl-compression/package.py index b40854b23f7320..eb0d1c6c9a24c4 100644 --- a/var/spack/repos/builtin/packages/aocl-compression/package.py +++ b/var/spack/repos/builtin/packages/aocl-compression/package.py @@ -4,8 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) # ---------------------------------------------------------------------------- -from llnl.util import tty - from spack.package import * @@ -41,15 +39,16 @@ class AoclCompression(CMakePackage): _name = "aocl-compression" homepage = "https://www.amd.com/en/developer/aocl/compression.html" git = "https://github.com/amd/aocl-compression.git" - url = "https://github.com/amd/aocl-compression/archive/refs/tags/4.2.tar.gz" + url = "https://github.com/amd/aocl-compression/archive/4.2.tar.gz" maintainers("amd-toolchain-support") version( - "4.2", - sha256="a18b3e7f64a8105c1500dda7b4c343e974b5e26bfe3dd838a1c1acf82a969c6f", + "5.0", + sha256="50bfb2c4a4738b96ed6d45627062b17bb9d0e1787c7d83ead2841da520327fa4", preferred=True, ) + version("4.2", sha256="a18b3e7f64a8105c1500dda7b4c343e974b5e26bfe3dd838a1c1acf82a969c6f") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated @@ -67,28 +66,25 @@ class AoclCompression(CMakePackage): default=False, description="openmp based multi-threaded compression and decompression", ) + variant( + "decompress_fast", + default="OFF", + values=("OFF", "1", "2"), + description="Enable fast decompression modes", + multi=False, + ) + variant("enable_fast_math", default=False, description="Enable fast-math optimizations") - depends_on("cmake@3.15:", type="build") + depends_on("cmake@3.22:", type="build") def cmake_args(self): """Runs ``cmake`` in the build directory""" spec = self.spec args = [] - if not ( - spec.satisfies(r"%aocc@4.1:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@16:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@4.1:4.2, and clang@16:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - args = [ self.define_from_variant("AOCL_ENABLE_THREADS", "openmp"), + self.define_from_variant("ENABLE_FAST_MATH", "enable_fast_math"), "-DLZ4_FRAME_FORMAT_SUPPORT=ON", "-DAOCL_LZ4HC_DISABLE_PATTERN_ANALYSIS=ON", ] @@ -109,4 +105,5 @@ def cmake_args(self): if spec.satisfies("~lz4hc"): args.append("-DAOCL_EXCLUDE_LZ4HC=ON") + args.append("-DAOCL_DECOMPRESS_FAST={}".format(spec.variants["decompress_fast"].value)) return args diff --git a/var/spack/repos/builtin/packages/aocl-crypto/lsb_release.patch b/var/spack/repos/builtin/packages/aocl-crypto/lsb_release.patch new file mode 100644 index 00000000000000..6043876c41db6a --- /dev/null +++ b/var/spack/repos/builtin/packages/aocl-crypto/lsb_release.patch @@ -0,0 +1,153 @@ +diff --git a/cmake/CompilerLinux.cmake b/cmake/CompilerLinux.cmake +index f54bea37..8541e343 100644 +--- a/cmake/CompilerLinux.cmake ++++ b/cmake/CompilerLinux.cmake +@@ -32,22 +32,11 @@ function(alcp_get_build_environment) + set (ALCP_BUILD_COMPILER "Clang_v${CMAKE_CXX_COMPILER_VERSION}") + endif() + +- # uses lsb_release utility on linux, as cmake doesnt have a variable which has the Linux flavor information +- find_program(LSB_RELEASE_EXEC lsb_release) +- if(NOT LSB_RELEASE_EXEC) +- MESSAGE(FATAL_ERROR "LSB Release is missing from the machine, please install lsb_release!") +- endif() +- execute_process(COMMAND ${LSB_RELEASE_EXEC} -r -s +- OUTPUT_VARIABLE OS_VERSION +- OUTPUT_STRIP_TRAILING_WHITESPACE +- ) +- execute_process(COMMAND ${LSB_RELEASE_EXEC} -i -s +- OUTPUT_VARIABLE OS_VENDOR +- OUTPUT_STRIP_TRAILING_WHITESPACE +- ) +- ++ cmake_host_system_information(RESULT OS_VERSION QUERY DISTRIB_PRETTY_NAME) ++ message(STATUS "OS Information: ${OS_VERSION}") ++ + # final build env string will contain compiler and system environment details where the binary was created +- set (ALCP_BUILD_ENV ${ALCP_BUILD_COMPILER}_${OS_VENDOR}_${OS_VERSION} PARENT_SCOPE) ++ set (ALCP_BUILD_ENV ${ALCP_BUILD_COMPILER}_${OS_VERSION} PARENT_SCOPE) + endfunction(alcp_get_build_environment) + + +diff --git a/docs/resources/Quick_Start.md b/docs/resources/Quick_Start.md +index 17bc025a..278a3d1f 100644 +--- a/docs/resources/Quick_Start.md ++++ b/docs/resources/Quick_Start.md +@@ -141,47 +141,6 @@ AOCL_CRYPTO_REPO="https://github.com/amd/aocl-crypto.git" + AOCL_UTILS_REPO="https://github.com/amd/aocl-utils.git" + AOCL_BRANCH="amd-main" + +-# Function to check if lsb_release is installed +-ensure_lsb_release(){ +- if ! type "lsb_release" > /dev/null; then +- if type "apt" > /dev/null; then +- if type "sudo" > /dev/null; then +- sudo apt update +- sudo apt install lsb-release +- else +- echo "lsb-release not found, cannot install! missing \"sudo\" binary" +- exit -1; # We cannot do anything anymore +- fi +- else +- echo "lsb-release not found, cannot install! missing \"apt\" binary" +- fi +- fi +- +- type lsb_release > /dev/null +- if [ $? -ne 0 ]; then +- echo "lsb_release not found!" +- exit -1; +- else +- echo "lsb_release found" +- fi +-} +- +-# Function to check if OS is ubuntu with a specific version +-detect_ubuntu(){ +- +- lsb_release --id | grep "Ubuntu" > /dev/null +- if [ $? -eq 0 ]; then +- # Detected Ubuntu +- echo "Detected Ubuntu" +- lsb_release --release | grep $1 > /dev/null +- if [ $? -eq 0 ]; then +- echo "Detected OS Release Version $1" +- return 0 +- fi +- fi +- return 1 # Return error +-} +- + # Function to exit with an error if some execution failed + quit_if_status_not_zero(){ + if [ $1 -ne 0 ]; then +@@ -338,8 +297,6 @@ run_example_cfb(){ + + # Make sure we dont destroy anything + ensure_no_directory_conflict +-# Make sure we can detect the OS +-ensure_lsb_release + # Make sure all the needed packages (dependancies) are installed + ensure_packages + # Clone Utils and Crypto +diff --git a/scripts/Clone_Build.sh b/scripts/Clone_Build.sh +index 89a7cd2f..1ed2f3cf 100755 +--- a/scripts/Clone_Build.sh ++++ b/scripts/Clone_Build.sh +@@ -36,47 +36,6 @@ AOCL_CRYPTO_REPO="git@er.github.amd.com:AOCL/aocl-crypto" + AOCL_UTILS_REPO="git@github.amd.com:AOCL/aocl-utils" + AOCL_BRANCH="amd-main" + +-# Function to check if lsb_release is installed +-ensure_lsb_release(){ +- if ! type "lsb_release" > /dev/null; then +- if type "apt" > /dev/null; then +- if type "sudo" > /dev/null; then +- sudo apt update +- sudo apt install lsb-release +- else +- echo "lsb-release not found, cannot install! missing \"sudo\" binary" +- exit -1; # We cannot do anything anymore +- fi +- else +- echo "lsb-release not found, cannot install! missing \"apt\" binary" +- fi +- fi +- +- type lsb_release > /dev/null +- if [ $? -ne 0 ]; then +- echo "lsb_release not found!" +- exit -1; +- else +- echo "lsb_release found" +- fi +-} +- +-# Function to check if OS is ubuntu with a specific version +-detect_ubuntu(){ +- +- lsb_release --id | grep "Ubuntu" > /dev/null +- if [ $? -eq 0 ]; then +- # Detected Ubuntu +- echo "Detected Ubuntu" +- lsb_release --release | grep $1 > /dev/null +- if [ $? -eq 0 ]; then +- echo "Detected OS Release Version $1" +- return 0 +- fi +- fi +- return 1 # Return error +-} +- + # Function to exit with an error if some execution failed + quit_if_status_not_zero(){ + if [ $1 -ne 0 ]; then +@@ -233,8 +192,6 @@ run_example_cfb(){ + + # Make sure we dont destroy anything + ensure_no_directory_conflict +-# Make sure we can detect the OS +-ensure_lsb_release + # Make sure all the needed packages (dependancies) are installed + ensure_packages + # Clone Utils and Crypto diff --git a/var/spack/repos/builtin/packages/aocl-crypto/package.py b/var/spack/repos/builtin/packages/aocl-crypto/package.py index 65a687cb27c82f..4de7a3a439b57d 100644 --- a/var/spack/repos/builtin/packages/aocl-crypto/package.py +++ b/var/spack/repos/builtin/packages/aocl-crypto/package.py @@ -2,10 +2,7 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) - # ---------------------------------------------------------------------------- -from llnl.util import tty - from spack.package import * @@ -35,24 +32,35 @@ class AoclCrypto(CMakePackage): _name = "aocl-crypto" homepage = "https://www.amd.com/en/developer/aocl/cryptography.html" - git = "https://github.com/amd/aocl-crypto" - url = "https://github.com/amd/aocl-crypto/archive/refs/tags/4.2.tar.gz" + url = "https://github.com/amd/aocl-crypto/archive/4.2.tar.gz" + git = "https://github.com/amd/aocl-crypto/" maintainers("amd-toolchain-support") + version( - "4.2", - sha256="2bdbedd8ab1b28632cadff237f4abd776e809940ad3633ad90fc52ce225911fe", + "5.0", + sha256="b15e609943f9977e13f2d5839195bb7411c843839a09f0ad47f78f57e8821c23", preferred=True, ) + version("4.2", sha256="2bdbedd8ab1b28632cadff237f4abd776e809940ad3633ad90fc52ce225911fe") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated variant("examples", default=False, description="Build examples") + variant("ipp", default=False, description="Build Intel IPP library") + + # Removed dependency on lsb_release + patch( + "lsb_release.patch", + sha256="b61d6d2518276c56d37e8c64d18488081af70f29a62f315ecbd23664e0e440b9", + when="@5.0", + ) - depends_on("cmake@3.15:", type="build") - depends_on("openssl@3.0.0:") + depends_on("cmake@3.22:", type="build") + depends_on("openssl@3.1.5:") + depends_on("intel-oneapi-ippcp@2021.12.0:", when="+ipp") depends_on("p7zip", type="build") - for vers in ["4.2"]: + for vers in ["4.2", "5.0"]: with when(f"@={vers}"): depends_on(f"aocl-utils@={vers}") @@ -75,22 +83,22 @@ def build_directory(self): def cmake_args(self): """Runs ``cmake`` in the build directory""" spec = self.spec - if not ( - spec.satisfies(r"%aocc@4.1:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@16:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@4.1:4.2, and clang@16:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - - args = ["-DCMAKE_C_COMPILER=%s" % spack_cc, "-DCMAKE_CXX_COMPILER=%s" % spack_cxx] - args.append(self.define_from_variant("ALCP_ENABLE_EXAMPLES", "examples")) - args.append("-DOPENSSL_INSTALL_DIR=" + spec["openssl"].prefix) - args.append("-DENABLE_AOCL_UTILS=ON") - args.append("-DAOCL_UTILS_INSTALL_DIR=" + spec["aocl-utils"].prefix) + + args = [ + self.define_from_variant("ALCP_ENABLE_EXAMPLES", "examples"), + self.define("ENABLE_AOCL_UTILS", True), + self.define("AOCL_UTILS_INSTALL_DIR", spec["aocl-utils"].prefix), + self.define("CMAKE_INSTALL_LIBDIR", "lib"), + self.define("ALCP_ENABLE_DYNAMIC_COMPILER_PICK", False), + ] + + compat_libs = ["openssl"] + args.append(self.define("OPENSSL_INSTALL_DIR", spec["openssl"].prefix)) + + if "+ipp" in spec: + compat_libs.append("ipp") + args.append(self.define("IPP_INSTALL_DIR", spec["intel-oneapi-ippcp"].prefix)) + + args.append(self.define("AOCL_COMPAT_LIBS", ",".join(compat_libs))) return args diff --git a/var/spack/repos/builtin/packages/aocl-da/0001-Fix-to-enable-cmake-to-be-configured-with-examples-o.patch b/var/spack/repos/builtin/packages/aocl-da/0001-Fix-to-enable-cmake-to-be-configured-with-examples-o.patch new file mode 100644 index 00000000000000..95fbe82b44d044 --- /dev/null +++ b/var/spack/repos/builtin/packages/aocl-da/0001-Fix-to-enable-cmake-to-be-configured-with-examples-o.patch @@ -0,0 +1,27 @@ +From 961ce9edbba7e18eca97cf3725515e627bbe39e1 Mon Sep 17 00:00:00 2001 +From: Edvin Hopkins +Date: Wed, 16 Oct 2024 11:38:28 +0100 +Subject: [PATCH] Fix to enable cmake to be configured with examples off but + gtests on + +--- + tests/unit_tests/CMakeLists.txt | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt +index e5e05c6..e479c7d 100644 +--- a/tests/unit_tests/CMakeLists.txt ++++ b/tests/unit_tests/CMakeLists.txt +@@ -107,9 +107,6 @@ add_executable(kmeans_tests kmeans_tests.cpp) + add_executable(nlls_tests nlls_tests.cpp) + + add_executable(pca_tests pca_tests.cpp) +-target_compile_definitions( +- pca +- PRIVATE DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/../data/factorization_data/") + target_link_libraries(pca_tests PRIVATE ${BLAS}) + + add_executable(data data_tests.cpp) +-- +2.34.1 + diff --git a/var/spack/repos/builtin/packages/aocl-da/package.py b/var/spack/repos/builtin/packages/aocl-da/package.py new file mode 100644 index 00000000000000..067cb8d03d89cb --- /dev/null +++ b/var/spack/repos/builtin/packages/aocl-da/package.py @@ -0,0 +1,130 @@ +# Copyright 2013-2024 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) + +import os + +from spack.package import * +from spack.util.environment import EnvironmentModifications + + +class AoclDa(CMakePackage): + """ + The AOCL Data Analytics Library (AOCL-DA) is a data analytics library + providing optimized building blocks for data analysis. It is written with a + C-compatible interface to make it as seamless as possible to integrate + with the library from whichever programming language you are using. + The intended workflow for using the library is as follows: + • load data from memory by reading CSV files or using the in-built + da_datastore object + • preprocess the data by removing missing values, standardizing, and + selecting certain subsets of the data, before extracting contiguous + arrays of data from the da_datastore objects + • data processing (e.g. principal component analysis, linear model + fitting, etc.) + C++ example programs can be found in the examples folder of your + installation. + """ + + _name = "aocl-da" + homepage = "https://www.amd.com/en/developer/aocl/data-analytics.html" + git = "https://github.com/amd/aocl-data-analytics" + url = "https://github.com/amd/aocl-data-analytics/archive/5.0.tar.gz" + + maintainers("amd-toolchain-support") + + version("5.0", sha256="3458adc7be39c78a08232c887f32838633149df0a69ccea024327c3edc5a5c1d") + + variant("examples", default=True, description="Build examples") + variant("gtest", default=False, description="Build and install Googletest") + variant("ilp64", default=False, description="Build with ILP64 support") + variant( + "openmp", + default=True, + description="Build using OpenMP and link to threaded BLAS and LAPACK", + ) + variant("shared", default=True, description="Build shared libraries") + variant("python", default=True, description="Build with Python bindings") + + # Fix to enable cmake to be configured with examples off but gtest on + patch( + "0001-Fix-to-enable-cmake-to-be-configured-with-examples-o.patch", + sha256="65be59e99d52816cb77d3e887cd4816870576b46748b53073658caa9ca07d127", + when="@5.0", + ) + + depends_on("cmake@3.22:", type="build") + for vers in ["5.0"]: + with when(f"@={vers}"): + depends_on(f"aocl-utils@={vers} +shared", when="+shared") + depends_on(f"aocl-utils@={vers} ~shared", when="~shared") + depends_on(f"amdblis@={vers} libs=shared", when="+shared") + depends_on(f"amdblis@={vers} libs=static", when="~shared") + depends_on(f"amdlibflame@={vers} +shared", when="+shared") + depends_on(f"amdlibflame@={vers} ~shared", when="~shared") + depends_on(f"aocl-sparse@={vers} +shared", when="+shared") + depends_on(f"aocl-sparse@={vers} ~shared", when="~shared") + + depends_on("amdblis threads=openmp", when="+openmp") + depends_on("amdlibflame threads=openmp", when="+openmp") + depends_on("amdblis threads=none", when="~openmp") + depends_on("amdlibflame threads=none", when="~openmp") + depends_on("aocl-sparse +openmp", when="+openmp") + depends_on("aocl-sparse ~openmp", when="~openmp") + + with when("+python"): + depends_on("python", type=("build", "run")) + depends_on("py-wheel", type=("build", "run")) + depends_on("py-setuptools", type=("build", "run")) + depends_on("py-pybind11", type=("build", "link", "run")) + depends_on("py-numpy", type=("build", "run")) + depends_on("py-pip", type=("build", "run")) + depends_on("patchelf", type="build") + depends_on("py-pytest", type="test") + depends_on("py-scikit-learn", type=("test", "run")) + + def setup_build_environment(self, env): + if self.spec.satisfies("%aocc"): + cc = self.compiler.cc + compiler_install_dir = os.path.dirname(os.path.dirname(cc)) + env.append_path("LD_LIBRARY_PATH", join_path(compiler_install_dir, "lib")) + + def setup_run_environment(self, env): + env.prepend_path("PYTHONPATH", join_path(self.prefix, "python_package")) + + def cmake_args(self): + """Runs ``cmake`` in the build directory""" + spec = self.spec + args = [] + args.append(f"-DUTILS_LIB={spec['aocl-utils'].libs}") + args.append(f"-DUTILS_CPUID_LIB={spec['aocl-utils'].libs}") + args.append(f"-DUTILS_CORE_LIB={spec['aocl-utils'].libs}") + args.append(f"-DBLAS_LIB={spec['amdblis'].libs}") + args.append("-DBLAS_INCLUDE_DIR={0}/blis".format(spec["amdblis"].prefix.include)) + args.append(f"-DLAPACK_LIB={spec['amdlibflame'].libs}") + args.append("-DLAPACK_INCLUDE_DIR={0}".format(spec["amdlibflame"].prefix.include)) + args.append(f"-DSPARSE_LIB={spec['aocl-sparse'].libs}") + args.append("-DSPARSE_INCLUDE_DIR={0}".format(spec["aocl-sparse"].prefix.include)) + args.append(self.define_from_variant("BUILD_EXAMPLES", "examples")) + args.append(self.define_from_variant("BUILD_GTEST", "gtest")) + args.append(self.define_from_variant("BUILD_ILP64", "ilp64")) + args.append(self.define_from_variant("BUILD_SMP", "openmp")) + args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) + args.append(self.define_from_variant("BUILD_PYTHON", "python")) + + return args + + @run_after("install") + @on_package_attributes(run_tests=True) + def test_python(self): + """Perform smoke tests on the installed package.""" + pytest = which("pytest") + envmod = EnvironmentModifications() + envmod.append_path("PYTHONPATH", join_path(self.prefix, "python_package")) + pytest.add_default_envmod(envmod) + pytest( + join_path( + install_test_root(self), join_path(self.stage.source_path, "python_interface") + ) + ) diff --git a/var/spack/repos/builtin/packages/aocl-libmem/cmake.patch b/var/spack/repos/builtin/packages/aocl-libmem/cmake.patch new file mode 100644 index 00000000000000..733ef7c048c5a6 --- /dev/null +++ b/var/spack/repos/builtin/packages/aocl-libmem/cmake.patch @@ -0,0 +1,46 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 74b7bd8..d787a7d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -32,7 +32,7 @@ endif() + # set the project name and version + set(LIBMEM_VERSION_STRING 5.0) + +-project(aocl-libmem VERSION ${LIBMEM_VERSION_STRING} LANGUAGES C DESCRIPTION ++project(aocl-libmem VERSION ${LIBMEM_VERSION_STRING} LANGUAGES C CXX DESCRIPTION + "Library of AMD optimized string/memory functions") + + string(TIMESTAMP BUILD_DATE "%Y%m%d") +@@ -45,7 +45,7 @@ add_definitions(-DLIBMEM_BUILD_VERSION="${LIBMEM_BUILD_VERSION_STR}") + set(DEFAULT_BUILD_TYPE "Release") + + set(CMAKE_C_STANDARD 99) +- ++set(CMAKE_CXX_STANDARD 17) + option(ENABLE_LOGGING "Enable Logger" OFF) + + option(ENABLE_TUNABLES "Enable user input" OFF) +@@ -100,6 +100,22 @@ endif () + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src) + + # let the build system know the tools directory +-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools) ++include(CheckCXXSourceRuns) ++check_cxx_source_runs(" ++#include ++int main() { ++ unsigned int eax, ebx, ecx, edx; ++ if (__get_cpuid(0, &eax, &ebx, &ecx, &edx)) { ++ // The 'AuthenticAMD' string is EBX, EDX, ECX after calling cpuid with eax=0 ++ if (ebx == 0x68747541 && edx == 0x69746E65 && ecx == 0x444D4163) { ++ return 0; // AMD CPU detected ++ } ++ } ++ return 1; // Non-AMD CPU ++} ++" AMD_Tools) ++if(AMD_Tools) ++ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tools) ++endif() + + file(WRITE ${CMAKE_BINARY_DIR}/version.h ${LIBMEM_BUILD_VERSION_STR}) diff --git a/var/spack/repos/builtin/packages/aocl-libmem/package.py b/var/spack/repos/builtin/packages/aocl-libmem/package.py index c01365db7dd717..d01693622556fb 100644 --- a/var/spack/repos/builtin/packages/aocl-libmem/package.py +++ b/var/spack/repos/builtin/packages/aocl-libmem/package.py @@ -4,8 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) # ---------------------------------------------------------------------------- -from llnl.util import tty - from spack.package import * @@ -31,15 +29,16 @@ class AoclLibmem(CMakePackage): _name = "aocl-libmem" homepage = "https://www.amd.com/en/developer/aocl/libmem.html" git = "https://github.com/amd/aocl-libmem" - url = "https://github.com/amd/aocl-libmem/archive/refs/tags/4.2.tar.gz" + url = "https://github.com/amd/aocl-libmem/archive/4.2.tar.gz" maintainers("amd-toolchain-support") version( - "4.2", - sha256="4ff5bd8002e94cc2029ef1aeda72e7cf944b797c7f07383656caa93bcb447569", + "5.0", + sha256="d3148db1a57fec4f3468332c775cade356e8133bf88385991964edd7534b7e22", preferred=True, ) + version("4.2", sha256="4ff5bd8002e94cc2029ef1aeda72e7cf944b797c7f07383656caa93bcb447569") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated @@ -55,7 +54,14 @@ class AoclLibmem(CMakePackage): multi=False, ) - depends_on("cmake@3.15:", type="build") + # validator needs to be built only for AuthenticAMD targets + patch( + "cmake.patch", + sha256="43453a83f322de7c89264439b2e9cbde855e50f550e13ebc884d13d959002092", + when="@5.0", + ) + + depends_on("cmake@3.22:", type="build") @property def libs(self): @@ -67,18 +73,6 @@ def cmake_args(self): """Runs ``cmake`` in the build directory""" spec = self.spec - if not ( - spec.satisfies(r"%aocc@4.1:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@16:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@4.1:4.2, and clang@16:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - args = [] args.append(self.define_from_variant("ENABLE_LOGGING", "logging")) args.append(self.define_from_variant("ENABLE_TUNABLES", "tunables")) diff --git a/var/spack/repos/builtin/packages/aocl-sparse/package.py b/var/spack/repos/builtin/packages/aocl-sparse/package.py index 7d37966e25788c..eb438a130c5bf3 100644 --- a/var/spack/repos/builtin/packages/aocl-sparse/package.py +++ b/var/spack/repos/builtin/packages/aocl-sparse/package.py @@ -5,8 +5,6 @@ import os -from llnl.util import tty - from spack.package import * @@ -33,10 +31,11 @@ class AoclSparse(CMakePackage): license("MIT") version( - "4.2", - sha256="03cd67adcfea4a574fece98b60b4aba0a6e5a9c8f608ff1ccc1fb324a7185538", + "5.0", + sha256="7528970f41ae60563df9fe1f8cc74a435be1566c01868a603ab894e9956c3c94", preferred=True, ) + version("4.2", sha256="03cd67adcfea4a574fece98b60b4aba0a6e5a9c8f608ff1ccc1fb324a7185538") version("4.1", sha256="35ef437210bc25fdd802b462eaca830bfd928f962569b91b592f2866033ef2bb") version("4.0", sha256="68524e441fdc7bb923333b98151005bed39154d9f4b5e8310b5c37de1d69c2c3") version("3.2", sha256="db7d681a8697d6ef49acf3e97e8bec35b048ce0ad74549c3b738bbdff496618f") @@ -58,16 +57,29 @@ class AoclSparse(CMakePackage): when="@4.0: target=zen4:", description="Enable experimental AVX512 support", ) + variant("openmp", default=True, when="@4.2:", description="Enable OpenMP support") - for vers in ["4.1", "4.2"]: + for vers in ["4.1", "4.2", "5.0"]: with when(f"@={vers}"): depends_on(f"amdblis@={vers}") depends_on(f"amdlibflame@={vers}") if Version(vers) >= Version("4.2"): depends_on(f"aocl-utils@={vers}") + + depends_on("amdblis threads=openmp", when="+openmp") + depends_on("amdlibflame threads=openmp", when="+openmp") + depends_on("amdblis threads=none", when="~openmp") + depends_on("amdlibflame threads=none", when="~openmp") depends_on("boost", when="+benchmarks") depends_on("boost", when="@2.2") - depends_on("cmake@3.15:", type="build") + depends_on("cmake@3.22:", type="build") + + @property + def libs(self): + """find libaoclsparse libs function""" + return find_libraries( + "libaoclsparse", root=self.prefix, shared="+shared" in self.spec, recursive=True + ) @property def build_directory(self): @@ -89,18 +101,6 @@ def cmake_args(self): """Runs ``cmake`` in the build directory""" spec = self.spec - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" - ) - args = [] args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) args.append(self.define_from_variant("BUILD_CLIENTS_SAMPLES", "examples")) @@ -111,21 +111,19 @@ def cmake_args(self): if spec.satisfies("@3.0:"): args.append(self.define_from_variant("BUILD_ILP64", "ilp64")) - if self.spec.satisfies("@4.1:"): + if spec.satisfies("@4.0:"): args.append(f"-DAOCL_BLIS_LIB={self.spec['amdblis'].libs}") + args.append("-DAOCL_BLIS_INCLUDE_DIR={0}/blis".format(spec["amdblis"].prefix.include)) + args.append(f"-DAOCL_LIBFLAME={spec['amdlibflame'].libs}") args.append( - "-DAOCL_BLIS_INCLUDE_DIR={0}/blis".format(self.spec["amdblis"].prefix.include) - ) - args.append(f"-DAOCL_LIBFLAME={self.spec['amdlibflame'].libs}") - args.append( - "-DAOCL_LIBFLAME_INCLUDE_DIR={0}".format(self.spec["amdlibflame"].prefix.include) + "-DAOCL_LIBFLAME_INCLUDE_DIR={0}".format(spec["amdlibflame"].prefix.include) ) - if self.spec.satisfies("@4.2:"): - args.append(f"-DAOCL_UTILS_LIB={self.spec['aocl-utils'].libs}") - args.append( - "-DAOCL_UTILS_INCLUDE_DIR={0}".format(self.spec["aocl-utils"].prefix.include) - ) + if spec.satisfies("@4.2:"): + args.append(f"-DAOCL_UTILS_LIB={spec['aocl-utils'].libs}") + args.append("-DAOCL_UTILS_INCLUDE_DIR={0}".format(spec["aocl-utils"].prefix.include)) + + args.append(self.define_from_variant("SUPPORT_OMP", "openmp")) return args diff --git a/var/spack/repos/builtin/packages/aocl-utils/package.py b/var/spack/repos/builtin/packages/aocl-utils/package.py index 693228ba9adec3..343b4eb11ebf4c 100644 --- a/var/spack/repos/builtin/packages/aocl-utils/package.py +++ b/var/spack/repos/builtin/packages/aocl-utils/package.py @@ -3,8 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from llnl.util import tty - from spack.package import * @@ -38,10 +36,11 @@ class AoclUtils(CMakePackage): license("BSD-3-Clause") version( - "4.2", - sha256="1294cdf275de44d3a22fea6fc4cd5bf66260d0a19abb2e488b898aaf632486bd", + "5.0", + sha256="ee2e5d47f33a3f673b3b6fcb88a7ef1a28648f407485ad07b6e9bf1b86159c59", preferred=True, ) + version("4.2", sha256="1294cdf275de44d3a22fea6fc4cd5bf66260d0a19abb2e488b898aaf632486bd") version("4.1", sha256="660746e7770dd195059ec25e124759b126ee9f060f43302d13354560ca76c02c") depends_on("cxx", type="build") # generated @@ -51,6 +50,7 @@ class AoclUtils(CMakePackage): variant("shared", default=True, when="@4.2:", description="build shared library") variant("examples", default=False, description="enable examples") + depends_on("cmake@3.22:", type="build") depends_on("doxygen", when="+doc") @property @@ -60,23 +60,26 @@ def libs(self): return find_libraries("libaoclutils", root=self.prefix, recursive=True, shared=shared) def cmake_args(self): - spec = self.spec - if not ( - spec.satisfies(r"%aocc@3.2:4.2") - or spec.satisfies(r"%gcc@12.2:13.1") - or spec.satisfies(r"%clang@15:17") - ): - tty.warn( - "AOCL has been tested to work with the following compilers " - "versions - gcc@12.2:13.1, aocc@3.2:4.2, and clang@15:17 " - "see the following aocl userguide for details: " - "https://www.amd.com/content/dam/amd/en/documents/developer/version-4-2-documents/aocl/aocl-4-2-user-guide.pdf" + args = [ + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define("CMAKE_INSTALL_LIBDIR", "lib"), + ] + + if self.spec.satisfies("@5.0:"): + args.extend( + [ + self.define_from_variant("AU_BUILD_DOCS", "doc"), + self.define_from_variant("AU_BUILD_TESTS", "tests"), + self.define_from_variant("AU_BUILD_EXAMPLES", "examples"), + ] + ) + else: + args.extend( + [ + self.define_from_variant("ALCI_DOCS", "doc"), + self.define_from_variant("ALCI_TESTS", "tests"), + self.define_from_variant("ALCI_EXAMPLES", "examples"), + ] ) - - args = [] - args.append(self.define_from_variant("ALCI_DOCS", "doc")) - args.append(self.define_from_variant("ALCI_TESTS", "tests")) - args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) - args.append(self.define_from_variant("ALCI_EXAMPLES", "examples")) return args diff --git a/var/spack/repos/builtin/packages/apex/package.py b/var/spack/repos/builtin/packages/apex/package.py index 24aa59a10f3ace..0fec0eead5e2d3 100644 --- a/var/spack/repos/builtin/packages/apex/package.py +++ b/var/spack/repos/builtin/packages/apex/package.py @@ -18,6 +18,7 @@ class Apex(CMakePackage): version("develop", branch="develop") version("master", branch="master") + version("2.7.0", sha256="81cd7e8dbea35cec2360d6404e20f7527f66410614f06a73c8c782ac2cfdb0b0") version("2.6.5", sha256="2ba29a1198c904ac209fc6bc02962304a1416443b249f34ef96889aff39644ce") version("2.6.4", sha256="281a673f447762a488577beaa60e48d88cb6354f220457cf8f05c1de2e1fce70") version("2.6.3", sha256="7fef12937d3bd1271a01abe44cb931b1d63823fb5c74287a332f3012ed7297d5") diff --git a/var/spack/repos/builtin/packages/aqlprofile/package.py b/var/spack/repos/builtin/packages/aqlprofile/package.py index 199ed72d0f2352..ca5a74b21160cb 100644 --- a/var/spack/repos/builtin/packages/aqlprofile/package.py +++ b/var/spack/repos/builtin/packages/aqlprofile/package.py @@ -5,6 +5,7 @@ import os +import spack.platforms from spack.package import * _versions = { diff --git a/var/spack/repos/builtin/packages/arborx/package.py b/var/spack/repos/builtin/packages/arborx/package.py index b5fc91a175d542..c3f2864ded4e74 100644 --- a/var/spack/repos/builtin/packages/arborx/package.py +++ b/var/spack/repos/builtin/packages/arborx/package.py @@ -38,7 +38,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): deprecated=True, ) - depends_on("cxx", type="build") # generated + depends_on("cxx", type="build") # Allowed C++ standard variant( @@ -63,7 +63,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): for backend in kokkos_backends: deflt, descr = kokkos_backends[backend] variant(backend.lower(), default=deflt, description=descr) - variant("trilinos", default=False, description="use Kokkos from Trilinos") + variant("trilinos", default=False, when="@:1.5", description="use Kokkos from Trilinos") depends_on("cmake@3.12:", type="build") depends_on("cmake@3.16:", type="build", when="@1.0:") @@ -77,8 +77,8 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): depends_on("kokkos@3.6.00:", when="@1.3~trilinos") depends_on("kokkos@3.7.01:", when="@1.4:1.4.1~trilinos") depends_on("kokkos@4.0.00:", when="@1.5~trilinos") - depends_on("kokkos@4.1.00:", when="@1.6~trilinos") - depends_on("kokkos@4.2.00:", when="@1.7:~trilinos") + depends_on("kokkos@4.1.00:", when="@1.6") + depends_on("kokkos@4.2.00:", when="@1.7:") for backend in kokkos_backends: depends_on("kokkos+%s" % backend.lower(), when="~trilinos+%s" % backend.lower()) @@ -96,8 +96,9 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): conflicts("^kokkos", when="+trilinos") depends_on("kokkos+cuda_lambda", when="~trilinos+cuda") - # Trilinos/Kokkos + # Trilinos with internal Kokkos # Notes: + # - starting with Trilinos 14.4, Trilinos' spack package uses external Kokkos # - current version of Trilinos package does not allow disabling Serial # - current version of Trilinos package does not allow enabling CUDA depends_on("trilinos+kokkos", when="+trilinos") @@ -106,18 +107,16 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage): depends_on("trilinos@13.4.0:", when="@1.3+trilinos") depends_on("trilinos@14.0.0:", when="@1.4:1.4.1+trilinos") depends_on("trilinos@14.2.0:", when="@1.5+trilinos") - depends_on("trilinos@14.4.0:", when="@1.6+trilinos") - depends_on("trilinos@15.1.0:", when="@1.7:+trilinos") patch("trilinos14.0-kokkos-major-version.patch", when="@1.4+trilinos ^trilinos@14.0.0") conflicts("~serial", when="+trilinos") def cmake_args(self): spec = self.spec - if "~trilinos" in spec: - kokkos_spec = spec["kokkos"] - else: + if "+trilinos" in spec: kokkos_spec = spec["trilinos"] + else: + kokkos_spec = spec["kokkos"] options = [ f"-DKokkos_ROOT={kokkos_spec.prefix}", diff --git a/var/spack/repos/builtin/packages/armadillo/package.py b/var/spack/repos/builtin/packages/armadillo/package.py index 0f723296caf920..cd71d9365638d9 100644 --- a/var/spack/repos/builtin/packages/armadillo/package.py +++ b/var/spack/repos/builtin/packages/armadillo/package.py @@ -17,6 +17,7 @@ class Armadillo(CMakePackage): license("Apache-2.0") + version("14.0.3", sha256="ebd6215eeb01ee412fed078c8a9f7f87d4e1f6187ebcdc1bc09f46095a4f4003") version("14.0.2", sha256="248e2535fc092add6cb7dea94fc86ae1c463bda39e46fd82d2a7165c1c197dff") version("12.8.4", sha256="558fe526b990a1663678eff3af6ec93f79ee128c81a4c8aef27ad328fae61138") version("12.8.3", sha256="2922589f6387796504b340da6bb954bef3d87574c298515893289edd2d890151") @@ -30,7 +31,8 @@ class Armadillo(CMakePackage): version("8.100.1", sha256="54773f7d828bd3885c598f90122b530ded65d9b195c9034e082baea737cd138d") version("7.950.1", sha256="a32da32a0ea420b8397a53e4b40ed279c1a5fc791dd492a2ced81ffb14ad0d1b") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("hdf5", default=False, description="Include HDF5 support") @@ -87,4 +89,9 @@ def cmake_args(self): self.define("SuperLU_LIBRARY", spec["superlu"].libs.joined(";")), # HDF5 support self.define("DETECT_HDF5", "ON" if spec.satisfies("+hdf5") else "OFF"), + # disable flexiblas support because armadillo will possibly detect system + # flexiblas which causes problems. If this is removed, then SuperLU and ARPACK must + # also link with Flexiblas. As this does not seem to be needed with the spack + # blas and lapack, it is easier to disable + self.define("ALLOW_FLEXIBLAS_LINUX", "OFF"), ] diff --git a/var/spack/repos/builtin/packages/armpl-gcc/package.py b/var/spack/repos/builtin/packages/armpl-gcc/package.py index b6dffafb85a671..3da17ef3e42551 100644 --- a/var/spack/repos/builtin/packages/armpl-gcc/package.py +++ b/var/spack/repos/builtin/packages/armpl-gcc/package.py @@ -5,6 +5,8 @@ import os +import spack.error +import spack.platforms from spack.package import * _os_map_before_23 = { @@ -54,6 +56,11 @@ } _versions = { + "24.10": { + "deb": ("2be772d41c0e8646e24c4f57e188e96f2dd8934966ae560c74fa905cbde5e1bc"), + "macOS": ("04e794409867e6042ed0f487bbaf47cc6edd527dc6ddad67160f1dba83906969"), + "rpm": ("055d4b3c63d990942d453a8720d029be7e604646218ffc3262321683f51f23aa"), + }, "24.04": { "deb": ("a323074cd08af82f4d79988cc66088b18e47dea4b93323b1b8a0f994f769f2f0"), "macOS": ("228bf3a2c25dbd45c2f89c78f455ee3c7dfb25e121c20d2765138b5174e688dc"), @@ -261,7 +268,8 @@ def get_os_or_pkg_manager(ver): return _os_pkg_map.get(platform.default_os, "rpm") -def get_package_url_before_24(base_url, version): +def get_package_url_before_24(version): + base_url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-performance-libraries" armpl_version = version.split("_")[0] armpl_version_dashed = armpl_version.replace(".", "-") compiler_version = version.split("_", 1)[1] @@ -270,7 +278,7 @@ def get_package_url_before_24(base_url, version): if armpl_version.startswith("23.06"): return ( f"{base_url}/{armpl_version_dashed}/" - + f"armpl_{armpl_version}_{compiler_version}.dmg" + f"armpl_{armpl_version}_{compiler_version}.dmg" ) else: filename = f"arm-performance-libraries_{armpl_version}_macOS.dmg" @@ -286,9 +294,11 @@ def get_package_url_before_24(base_url, version): return f"{base_url}/{armpl_version_dashed}/{os_short}/{filename}" -def get_package_url_from_24(base, version): +def get_package_url_from_24(version): + base_url = ( + "https://developer.arm.com/-/cdn-downloads/permalink/Arm-Performance-Libraries/Version" + ) pkg_system = get_os_or_pkg_manager(version) - os = "macOS" if pkg_system == "macOS" else "linux" extension = "tgz" if pkg_system == "macOS" else "tar" @@ -298,17 +308,15 @@ def get_package_url_from_24(base, version): full_name_library = f"{full_name_library}_gcc" file_name = f"{full_name_library}.{extension}" - vn = version.replace(".", "-") - url_parts = f"{base}/{vn}/{os}/{file_name}" + url_parts = f"{base_url}_{version}/{file_name}" return url_parts def get_package_url(version): - base_url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-performance-libraries" if version[:2] >= "24": - return get_package_url_from_24(base_url, version) + return get_package_url_from_24(version) else: - return get_package_url_before_24(base_url, version) + return get_package_url_before_24(version) def get_armpl_prefix(spec): @@ -335,8 +343,6 @@ class ArmplGcc(Package): high-performance computing applications on Arm processors.""" homepage = "https://developer.arm.com/tools-and-software/server-and-hpc/downloads/arm-performance-libraries" - url = "https://developer.arm.com/-/media/Files/downloads/hpc/arm-performance-libraries/24-04/linux/arm-performance-libraries_24.04_deb_gcc.tar" - maintainers("paolotricerri") for ver, packages in _versions.items(): @@ -434,7 +440,7 @@ def install(self, spec, prefix): exe = Executable( f"./arm-performance-libraries_{armpl_version}_" - + f"{get_os_or_pkg_manager(armpl_version)}.sh" + f"{get_os_or_pkg_manager(armpl_version)}.sh" ) exe("--accept", "--force", "--install-to", prefix) diff --git a/var/spack/repos/builtin/packages/arrow/package.py b/var/spack/repos/builtin/packages/arrow/package.py index 994579cdb9d297..31abcd702380ee 100644 --- a/var/spack/repos/builtin/packages/arrow/package.py +++ b/var/spack/repos/builtin/packages/arrow/package.py @@ -17,6 +17,7 @@ class Arrow(CMakePackage, CudaPackage): license("Apache-2.0") + version("18.0.0", sha256="9c473f2c9914c59ab571761c9497cf0e5cfd3ea335f7782ccc6121f5cb99ae9b") version("16.1.0", sha256="9762d9ecc13d09de2a03f9c625a74db0d645cb012de1e9a10dfed0b4ddc09524") version("15.0.2", sha256="4735b349845bff1fe95ed11abbfed204eb092cabc37523aa13a80cb830fe5b5e") version("14.0.2", sha256="07cdb4da6795487c800526b2865c150ab7d80b8512a31793e6a7147c8ccd270f") @@ -53,7 +54,12 @@ class Arrow(CMakePackage, CudaPackage): depends_on("llvm@:11 +clang", when="+gandiva @:3", type="build") depends_on("llvm@:12 +clang", when="+gandiva @:4", type="build") depends_on("llvm@:13 +clang", when="+gandiva @:7", type="build") - depends_on("llvm@:14 +clang", when="+gandiva @8:", type="build") + depends_on("llvm@:14 +clang", when="+gandiva @:9", type="build") + depends_on("llvm@:15 +clang", when="+gandiva @:11", type="build") + depends_on("llvm@:16 +clang", when="+gandiva @:13", type="build") + depends_on("llvm@:17 +clang", when="+gandiva @:15.0.1", type="build") + depends_on("llvm@:18.1 +clang", when="+gandiva @:16.0.1", type="build") + depends_on("llvm@:19.1 +clang", when="+gandiva", type="build") depends_on("lz4", when="+lz4") depends_on("ninja", type="build") depends_on("openssl", when="+gandiva @6.0.0:") diff --git a/var/spack/repos/builtin/packages/asio/package.py b/var/spack/repos/builtin/packages/asio/package.py index 27d1acb3e79a4c..c5e89f5b031a1d 100644 --- a/var/spack/repos/builtin/packages/asio/package.py +++ b/var/spack/repos/builtin/packages/asio/package.py @@ -62,6 +62,7 @@ class Asio(AutotoolsPackage): version("1.16.1", sha256="e40bbd531530f08318b7c7d7e84e457176d8eae6f5ad2e3714dc27b9131ecd35") version("1.16.0", sha256="c87410ea62de6245aa239b9ed2057edf01d7f66acc3f5e50add9a29343c87512") + depends_on("c", type="build") depends_on("cxx", type="build") depends_on("autoconf", type="build") diff --git a/var/spack/repos/builtin/packages/assimp/package.py b/var/spack/repos/builtin/packages/assimp/package.py index 2e51f75e53e11e..ec8f239e4c59cd 100644 --- a/var/spack/repos/builtin/packages/assimp/package.py +++ b/var/spack/repos/builtin/packages/assimp/package.py @@ -70,7 +70,7 @@ def flag_handler(self, name, flags): return (None, None, flags) def check(self): - unit = Executable(join_path(self.builder.build_directory, "bin", "unit")) + unit = Executable(join_path(self.build_directory, "bin", "unit")) skipped_tests = [ "AssimpAPITest_aiMatrix3x3.aiMatrix3FromToTest", "AssimpAPITest_aiMatrix4x4.aiMatrix4FromToTest", diff --git a/var/spack/repos/builtin/packages/at-spi2-atk/package.py b/var/spack/repos/builtin/packages/at-spi2-atk/package.py index 85233ec111fcf1..584d008a5d4a6d 100644 --- a/var/spack/repos/builtin/packages/at-spi2-atk/package.py +++ b/var/spack/repos/builtin/packages/at-spi2-atk/package.py @@ -25,7 +25,7 @@ class AtSpi2Atk(MesonPackage): depends_on("c", type="build") # generated depends_on("pkgconfig", type="build") - depends_on("at-spi2-core@2.28.0:") + depends_on("at-spi2-core@2.28.0:2.45.1") depends_on("atk@2.28.1:") def url_for_version(self, version): diff --git a/var/spack/repos/builtin/packages/atk/package.py b/var/spack/repos/builtin/packages/atk/package.py index 6bebc59054cc2f..50fb042771c07a 100644 --- a/var/spack/repos/builtin/packages/atk/package.py +++ b/var/spack/repos/builtin/packages/atk/package.py @@ -6,7 +6,7 @@ from spack.package import * -class Atk(Package): +class Atk(MesonPackage): """ATK provides the set of accessibility interfaces that are implemented by other toolkits and applications. Using the ATK interfaces, accessibility tools have full access to view and @@ -23,20 +23,10 @@ class Atk(Package): version("2.36.0", sha256="fb76247e369402be23f1f5c65d38a9639c1164d934e40f6a9cf3c9e96b652788") version("2.30.0", sha256="dd4d90d4217f2a0c1fee708a555596c2c19d26fef0952e1ead1938ab632c027b") version("2.28.1", sha256="cd3a1ea6ecc268a2497f0cd018e970860de24a6d42086919d6bf6c8e8d53f4fc") - version( - "2.20.0", - sha256="493a50f6c4a025f588d380a551ec277e070b28a82e63ef8e3c06b3ee7c1238f0", - deprecated=True, - ) - version( - "2.14.0", - sha256="2875cc0b32bfb173c066c22a337f79793e0c99d2cc5e81c4dac0d5a523b8fbad", - deprecated=True, - ) - depends_on("c", type="build") # generated + depends_on("c", type="build") - depends_on("meson@0.40.1:", type="build", when="@2.28:") + depends_on("meson@0.40.1:", type="build") depends_on("meson@0.46.0:", type="build", when="@2.29:") depends_on("glib") depends_on("gettext") @@ -45,33 +35,15 @@ class Atk(Package): depends_on("libffi") def url_for_version(self, version): - """Handle gnome's version-based custom URLs.""" - url = "http://ftp.gnome.org/pub/gnome/sources/atk" - return url + f"/{version.up_to(2)}/atk-{version}.tar.xz" + return ( + f"http://ftp.gnome.org/pub/gnome/sources/atk/" + f"{version.up_to(2)}/atk-{version}.tar.xz" + ) def setup_run_environment(self, env): - env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - - def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - def setup_dependent_run_environment(self, env, dependent_spec): + def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - - def install(self, spec, prefix): - with working_dir("spack-build", create=True): - meson("..", *std_meson_args) - ninja("-v") - ninja("install") - - @when("@:2.27") - def install(self, spec, prefix): - configure(f"--prefix={prefix}") - make() - if self.run_tests: - make("check") - make("install") - if self.run_tests: - make("installcheck") diff --git a/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py b/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py index adb7474869c4f3..ed1c0d7ed7b09e 100644 --- a/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py +++ b/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py @@ -18,6 +18,16 @@ class AwsOfiNccl(AutotoolsPackage): maintainers("bvanessen") version("master", branch="master") + version("1.13.0", sha256="50dd231a0a99cec29300df46b8e828139ced15322a3c3c41b1d22dcc9a62ec02") + version("1.12.1", sha256="821f0929c016e5448785bbc6795af5096559ecfc6c9479eb3818cafa61424576") + version("1.12.0", sha256="93029207103b75f4dc15f023b3b8692851202b52b7e2824723dd5d328f0ea65b") + version("1.11.1", sha256="a300e620e03ba3cc0915f9d466232ff0bf6c84edf4e2cd93592d53cf2a62741b") + version("1.11.0", sha256="45d935133b183c945c16b70d8428d676a554faf5bd922b7909e9f1ec55ba6168") + version("1.10.0", sha256="ed63f627b42c7b0f7312ce2916a3c4dfeb5145f78b492c0d1e0d0a6828a0474c") + version("1.9.2", sha256="f763771e511ae3bc7bb708795f9802867a4a2bc4e4df6a265c7f6a033e9a8b9a") + version("1.9.1", sha256="3ee01258674e70d6966eb6d319461f9b882afae618e217e0ae7ec03d26169b35") + version("1.9.0", sha256="8d6d0469110a89b5431836d263860fb60fde7beccb26f553de41dca1feb61b51") + version("1.8.1", sha256="beb59959be0f60b891f9549f4df51b394e97e739416c88c3436e75516fe067c8") version("1.8.1", sha256="beb59959be0f60b891f9549f4df51b394e97e739416c88c3436e75516fe067c8") version("1.8.0", sha256="a2f1750d4908924985335e513186353d0c4d9a5d27b1a759f6aa31a10e74c06d") version("1.7.4", sha256="472bbc977ce37d0cf9239b8e366f4f247226a984eb8c487aadd884af53f00e13") diff --git a/var/spack/repos/builtin/packages/awscli-v2/package.py b/var/spack/repos/builtin/packages/awscli-v2/package.py index ea9973c1257db5..51b80388946b0a 100644 --- a/var/spack/repos/builtin/packages/awscli-v2/package.py +++ b/var/spack/repos/builtin/packages/awscli-v2/package.py @@ -15,24 +15,31 @@ class AwscliV2(PythonPackage): maintainers("climbfuji", "teaguesterling") + version("2.22.4", sha256="56c6170f3be830afef2dea60fc3fd7ed14cf2ca2efba055c085fe6a7c4de358e") version("2.15.53", sha256="a4f5fd4e09b8f2fb3d2049d0610c7b0993f9aafaf427f299439f05643b25eb4b") version("2.13.22", sha256="dd731a2ba5973f3219f24c8b332a223a29d959493c8a8e93746d65877d02afc1") + with default_args(type="build"): + depends_on("py-flit-core@3.7.1:3.9.0", when="@2.22:") + depends_on("py-flit-core@3.7.1:3.8.0", when="@:2.15") + with default_args(type=("build", "run")): - depends_on("python@3.8:") - depends_on("py-flit-core@3.7.1:3.8.0") depends_on("py-colorama@0.2.5:0.4.6") depends_on("py-docutils@0.10:0.19") - # Remove upper bound to enable Python 3.12 support - # depends_on("py-cryptography@3.3.2:40.0.1") - depends_on("py-cryptography@3.3.2:") + depends_on("py-cryptography@40:43.0.1", when="@2.22:") + depends_on("py-cryptography@3.3.2:40.0.1", when="@:2.15") depends_on("py-ruamel-yaml@0.15:0.17.21") - depends_on("py-ruamel-yaml-clib@0.2:0.2.7", when="^python@:3.9") + depends_on("py-ruamel-yaml-clib@0.2:", when="@2.22:") + # Upper bound relaxed for Python 3.13 support + # depends_on("py-ruamel-yaml-clib@0.2:0.2.8", when="@2.22:") + depends_on("py-ruamel-yaml-clib@0.2:0.2.7", when="@:2.15") depends_on("py-prompt-toolkit@3.0.24:3.0.38") depends_on("py-distro@1.5:1.8") - depends_on("py-awscrt@0.16.4:0.16.16", when="@2.13") + depends_on("py-awscrt@0.19.18:0.22.0", when="@2.22:") depends_on("py-awscrt@0.19.18:0.19.19", when="@2.15") - depends_on("py-python-dateutil@2.1:2.8.2") + depends_on("py-awscrt@0.16.4:0.16.16", when="@2.13") + depends_on("py-python-dateutil@2.1:2.9.0", when="@2.22:") + depends_on("py-python-dateutil@2.1:2.8.2", when="@:2.15") depends_on("py-jmespath@0.7.1:1.0") depends_on("py-urllib3@1.25.4:1.26") diff --git a/var/spack/repos/builtin/packages/axl/package.py b/var/spack/repos/builtin/packages/axl/package.py index 998cdc8cd184d2..ebf05863f8c253 100644 --- a/var/spack/repos/builtin/packages/axl/package.py +++ b/var/spack/repos/builtin/packages/axl/package.py @@ -27,6 +27,7 @@ class Axl(CMakePackage): license("MIT") version("main", branch="main") + version("0.9.0", sha256="da2d74092fb230754a63db3cd5ba72a233ee8153dec28cc604fa8465280299ba") version("0.8.0", sha256="9fcd4eae143a67ff02622feda2a541b85e9a108749c039faeb473cbbc2330459") version("0.7.1", sha256="526a055c072c85cc989beca656717e06b128f148fda8eb19d1d9b43a3325b399") version("0.7.0", sha256="840ef61eadc9aa277d128df08db4cdf6cfa46b8fcf47b0eee0972582a61fbc50") @@ -45,7 +46,8 @@ class Axl(CMakePackage): deprecated=True, ) - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("kvtree") depends_on("zlib-api", type="link") @@ -64,6 +66,9 @@ class Axl(CMakePackage): validator=async_api_validator, ) + variant("mpi", default=True, description="Build with MPI support", when="@0.7.1:") + depends_on("mpi", when="@0.7.1: +mpi") + variant("pthreads", default=True, description="Enable Pthread support", when="@0.6:") variant("bbapi", default=True, description="Enable IBM BBAPI support") @@ -86,6 +91,10 @@ def cmake_args(self): args = [] args.append(self.define("WITH_KVTREE_PREFIX", spec["kvtree"].prefix)) + args.append(self.define_from_variant("MPI")) + if spec.satisfies("+mpi"): + args.append(self.define("MPI_C_COMPILER", spec["mpi"].mpicc)) + if spec.satisfies("@:0.3.0"): apis = list(spec.variants["async_api"].value) if "daemon" in apis: diff --git a/var/spack/repos/builtin/packages/axom/package.py b/var/spack/repos/builtin/packages/axom/package.py index f176556e2516d4..a4249ba56726d3 100644 --- a/var/spack/repos/builtin/packages/axom/package.py +++ b/var/spack/repos/builtin/packages/axom/package.py @@ -9,7 +9,6 @@ from os.path import join as pjoin from spack.package import * -from spack.util.executable import which_string def get_spec_path(spec, package_name, path_replacements={}, use_bin=False): diff --git a/var/spack/repos/builtin/packages/babelstream/package.py b/var/spack/repos/builtin/packages/babelstream/package.py index ec85b2d3569bc4..d4d94d078e9e8f 100644 --- a/var/spack/repos/builtin/packages/babelstream/package.py +++ b/var/spack/repos/builtin/packages/babelstream/package.py @@ -3,65 +3,107 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import re # To get the variant name after (+) - +import spack.build_systems.cmake +import spack.build_systems.makefile from spack.package import * -def find_model_flag(str): - res = re.findall(r"\+(\w+)", str) - if not res: - return "" - return res - - -class Babelstream(CMakePackage, CudaPackage, ROCmPackage): +class Babelstream(CMakePackage, CudaPackage, ROCmPackage, MakefilePackage): """Measure memory transfer rates to/from global device memory on GPUs. This benchmark is similar in spirit, and based on, the STREAM benchmark for CPUs.""" homepage = "https://github.com/UoB-HPC/BabelStream" - url = "https://github.com/UoB-HPC/BabelStream/archive/refs/tags/v4.0.tar.gz" + url = "https://github.com/UoB-HPC/BabelStream/archive/refs/tags/v5.0.tar.gz" git = "https://github.com/UoB-HPC/BabelStream.git" + version("5.0", sha256="1a418203fbfd95595bdc66047e2e39d8f1bba95a49725c9ecb907caf1af2521f") version("4.0", sha256="a9cd39277fb15d977d468435eb9b894f79f468233f0131509aa540ffda4f5953") + version("3.4", sha256="e34ee9d5ccdead019e3ea478333bcb7886117d600e5da8579a626f6ee34209cf") + version("3.3", sha256="4c89c805b277d52776feeb7a8eef7985a0d9295ce3e0bb2333bf715f724723cf") + version("3.2", sha256="20309b27ddd09ea37406bcc6f46fd32e9372bf3d145757e55938d19d69cdc49d") + version("3.1", sha256="be69e6085e8966e12aa2df897eea6254b172e5adfa03de0adbb89bc3065f4fbe") + version("3.0", sha256="776219c72e0fdc36f134e6975b68c7ab25f38206f8f8af84a6f9630648c24800") + version("1.0", sha256="3cfb9e45601f1f249878355c72baa6e6a61f6c811f8716d60b83c7fb544e1d5c") version("main", branch="main") - version("develop", branch="develop") - - depends_on("cxx", type="build") # generated - - maintainers("tomdeakin", "kaanolgu", "tom91136", "robj0nes") - + maintainers("tomdeakin", "kaanolgu", "tom91136") + # Previous maintainers: "robj0nes" + depends_on("cxx", type="build", when="languages=cxx") + depends_on("fortran", type="build", when="languages=fortran") # Languages - # Also supported variants are cuda and rocm (for HIP) - variant("sycl", default=False, description="Enable SYCL support") - variant("sycl2020", default=False, description="Enable SYCL support") - variant("omp", default=False, description="Enable OpenMP support") - variant("ocl", default=False, description="Enable OpenCL support") - variant("tbb", default=False, description="Enable TBB support") - variant("acc", default=False, description="Enable OpenACC support") - variant("thrust", default=False, description="Enable THRUST support") - variant("raja", default=False, description="Enable RAJA support") - variant("stddata", default=False, description="Enable STD-data support") - variant("stdindices", default=False, description="Enable STD-indices support") - variant("stdranges", default=False, description="Enable STD-ranges support") + # in the future it could be possible to add other languages too + variant( + "languages", + default="cxx", + values=("cxx", "fortran"), + description="Languages Babelstream Spack Package Support", + ) + # Build System + build_system( + conditional("cmake", when="languages=cxx"), + conditional("makefile", when="languages=fortran"), + default="cmake", + ) + with when("languages=cxx"): + # Also supported variants are cuda and rocm (for HIP) + # not included here because they are supplied via respective packages + variant("sycl", default=False, description="Enable SYCL support") + variant("sycl2020", default=False, description="Enable SYCL support") + variant("omp", default=False, description="Enable OpenMP support") + variant("ocl", default=False, description="Enable OpenCL support") + variant("tbb", default=False, description="Enable TBB support") + variant("acc", default=False, description="Enable OpenACC support") + variant("hip", default=False, description="Enable HIP support") + variant("thrust", default=False, description="Enable THRUST support") + variant("raja", default=False, description="Enable RAJA support") + variant("std", default=False, description="Enable STD support") # Some models need to have the programming model abstraction downloaded - # this variant enables a path to be provided. variant("dir", values=str, default="none", description="Enable Directory support") + variant( + "sycl2020_submodel", + values=("usm", "acc"), + when="+sycl2020", + default="usm", + description="SYCL2020 -> choose between usm and acc methods", + ) + variant( + "std_submodel", + values=("data", "indices", "ranges"), + when="+std", + default="data", + description="STD -> choose between data, indices and ranges models", + ) - # Kokkos conflict and variant - conflicts( - "dir=none", when="+kokkos", msg="KOKKKOS requires architecture to be specfied by dir=" + variant( + "sycl2020_offload", + values=("nvidia", "intel"), + default="intel", + when="+sycl2020", + description="Offloading to NVIDIA GPU or not", + ) + + variant( + "thrust_submodel", + values=("cuda", "rocm"), + default="cuda", + when="+thrust", + description="Which THRUST implementation to use, supported options include option= \ + - CUDA (via https://github.com/NVIDIA/thrust)\ + - ROCM (via https://github.com/ROCmSoftwarePlatform/rocThrust)", + ) + variant( + "thrust_backend", + values=("cuda", "omp", "tbb"), + default="cuda", + when="+thrust", + description="Which THRUST implementation to use, supported options include option", ) - variant("kokkos", default=False, description="Enable KOKKOS support") - # ACC conflict - variant("cpu_arch", values=str, default="none", description="Enable CPU Target for ACC") - variant("acc_target", values=str, default="none", description="Enable CPU Target for ACC") + # Kokkos variant + variant("kokkos", default=False, description="Enable KOKKOS support") # STD conflicts - conflicts("+stddata", when="%gcc@:10.1.0", msg="STD-data requires newer version of GCC") - conflicts("+stdindices", when="%gcc@:10.1.0", msg="STD-indices requires newer version of GCC") - conflicts("+stdranges", when="%gcc@:10.1.0", msg="STD-ranges requires newer version of GCC") + conflicts("+std", when="%gcc@:10.1.0", msg="STD requires newer version of GCC") # CUDA conflict conflicts( @@ -69,349 +111,760 @@ class Babelstream(CMakePackage, CudaPackage, ROCmPackage): when="+cuda", msg="CUDA requires architecture to be specfied by cuda_arch=", ) - variant("mem", values=str, default="DEFAULT", description="Enable MEM Target for CUDA") - # Raja Conflict variant( - "offload", values=str, default="none", description="Enable RAJA Target [CPU or NVIDIA]" - ) - conflicts( - "offload=none", - when="+raja", - msg="RAJA requires architecture to be specfied by acc_target=[CPU,NVIDIA]", + "cuda_memory_mode", + values=("default", "managed", "pagefault"), + default="default", + when="+cuda", + description="Enable MEM Target for CUDA", ) - # download raja from https://github.com/LLNL/RAJA + # OMP offload + variant("omp_offload", default=False, when="+omp", description="Enable OpenMP Target") + variant( + "omp_flags", + values=str, + default="none", + when="+omp", + description="If OFFLOAD is enabled, this *overrides* the default offload flags", + ) conflicts( - "dir=none", + "omp_flags=none", + when="+omp_offload", + msg="OpenMP requires offload flags to be specfied by omp_flags=", + ) + # Raja offload + variant( + "raja_offload", + values=("cpu", "nvidia"), + default="cpu", when="+raja", - msg="RAJA implementation requires architecture to be specfied by dir=", + description="Enable RAJA Target [CPU or NVIDIA] / Offload with custom settings for OpenMP", + ) + # std-* offload + variant( + "std_offload", + values=("nvhpc", "none"), + default="none", + when="+std", + description="Enable offloading support (via the non-standard `-stdpar`)\ + for the new NVHPC SDK", + ) + variant( + "std_onedpl_backend", + values=("openmp", "tbb", "dpcpp", "none"), + default="none", + when="+std", + description="Implements policies using OpenMP,TBB or dpc++", + ) + variant( + "std_use_tbb", + values=(True, False), + default=False, + when="+std", + description="No-op if ONE_TBB_DIR is set. Link against an in-tree oneTBB\ + via FetchContent_Declare, see top level CMakeLists.txt for details", + ) + variant( + "std_use_onedpl", + values=(True, False), + default=False, + when="+std", + description="Link oneDPL which implements C++17 executor policies\ + (via execution_policy_tag) for different backends", + ) + # hip memory mode + variant( + "hip_mem_mode", + values=("default", "managed", "pagefault"), + default="default", + when="+hip", + description="Enable MEM Target for HIP", + ) + # tbb use vector + variant( + "tbb_use_vector", + values=(True, False), + default=False, + when="+tbb", + description="Whether to use std::vector for storage or use aligned_alloc. \ + C++ vectors are *zero* initialised where as aligned_alloc is \ + uninitialised before first use.", ) # Thrust Conflict - # conflicts("~cuda", when="+thrust", msg="Thrust requires +cuda variant") depends_on("thrust", when="+thrust") - depends_on("rocthrust", when="+thrust implementation=rocm") - + depends_on("cuda", when="thrust_submodel=cuda") + depends_on("cuda", when="+raja raja_offload=nvidia") + depends_on("hip", when="+hip") + depends_on("rocthrust", when="thrust_submodel=rocm") + depends_on("intel-tbb", when="+std +std_use_tbb") + depends_on("intel-oneapi-dpl", when="+std +std_use_onedpl") + depends_on("intel-tbb", when="+std +std_use_onedpl") # TBB Dependency - depends_on("intel-oneapi-tbb", when="+tbb") - partitioner_vals = ["auto", "affinity", "static", "simple"] + depends_on("intel-tbb", when="+tbb") + variant( - "partitioner", - values=partitioner_vals, + "tbb_partitioner", + values=("auto", "affinity", "static", "simple"), default="auto", + when="+tbb", description="Partitioner specifies how a loop template should partition its work among threads.\ Possible values are:\ AUTO - Optimize range subdivision based on work-stealing events.\ AFFINITY - Proportional splitting that optimizes for cache affinity.\ STATIC - Distribute work uniformly with no additional load balancing.\ SIMPLE - Recursively split its range until it cannot be further subdivided.\ - See https://spec.oneapi.com/versions/latest/elements/oneTBB/source/algorithms.html#partitioners for more details.", + See https://spec.oneapi.com/versions/latest/elements/oneTBB/source/algorithms.html#partitioners", ) - # Kokkos Dependency - depends_on("kokkos@3.7.1", when="+kokkos") + # Kokkos & RAJA Dependency + cuda_archs = CudaPackage.cuda_arch_values + for sm_ in cuda_archs: + depends_on( + "kokkos +cuda +wrapper cuda_arch={0}".format(sm_), + when="kokkos_backend=cuda cuda_arch={0}".format(sm_), + ) + depends_on( + "raja +cuda cuda_arch={0}".format(sm_), + when="raja_offload=nvidia cuda_arch={0}".format(sm_), + ) + depends_on("kokkos +openmp", when="kokkos_backend=omp") + depends_on("raja +openmp", when="raja_offload=cpu") # OpenCL Dependency - - backends = { - "ocl": [ - ("amd", "rocm-opencl", "enable ROCM backend"), - ("cuda", "cuda", "enable Cuda backend"), - ("intel", "intel-oneapi-compilers", "enable Intel backend"), - ("pocl", "pocl@1.5", "enable POCL backend"), - ], - "kokkos": [ - ("cuda", "cuda", "enable Cuda backend"), - ("omp", "none", "enable Cuda backend"), - ], - } - backend_vals = ["none"] - for lang in backends: - for item in backends[lang]: - backend, dpdncy, descr = item - backend_vals.append(backend.lower()) - - variant("backend", values=backend_vals, default="none", description="Enable backend support") - - for lang in backends: - for item in backends[lang]: - backend, dpdncy, descr = item - if dpdncy.lower() != "none": - depends_on("%s" % dpdncy.lower(), when="backend=%s" % backend.lower()) - # this flag could be used in all required languages - variant("flags", values=str, default="none", description="Additional CXX flags to be provided") - - # comp_impl_vals=["ONEAPI-DPCPP","DPCPP","HIPSYCL","COMPUTECPP"] variant( - "implementation", - values=str, + "ocl_backend", + values=("amd", "cuda", "intel", "pocl", "none"), default="none", - description="Compile using the specified SYCL compiler option", + when="+ocl", + description="Enable Backend Target for OpenCL", ) - - conflicts( - "implementation=none", - when="+sycl", - msg="SYCL requires compiler implementation to be specified by option=", + variant( + "kokkos_backend", + values=("cuda", "omp", "none"), + default="none", + when="+kokkos", + description="Enable Backend Target for kokkos", ) conflicts( - "implementation=none", - when="+thrust", - msg="Which Thrust implementation to use, supported options include:\ - - CUDA (via https://github.com/NVIDIA/thrust)\ - - ROCM (via https://github.com/ROCm/rocThrust)", + "ocl_backend=none", + when="+ocl", + msg="OpenCL implementation requires backend to be specfied by ocl_backend=", ) + # depends_on("rocm-opencl@6.0.2", when="+ocl ocl_backend=amd") + depends_on("cuda", when="+ocl ocl_backend=cuda") + depends_on("cuda", when="+sycl2020 sycl2020_offload=nvidia") + depends_on("intel-oneapi-compilers", when="+ocl ocl_backend=intel") + depends_on("pocl@1.5", when="+ocl ocl_backend=pocl") + + variant( + "cuda_extra_flags", + values=str, + default="none", + description="Additional CUDA Compiler flags to be provided", + ) + + # CMake specific dependency + with when("build_system=cmake"): + depends_on("cmake@3.14.0:", type="build") # This applies to all - depends_on("cmake@3.14.0:", type="build") depends_on("opencl-c-headers", when="+ocl") + # Fortran related configurations + with when("languages=fortran"): + implementation_vals = [ + "DoConcurrent", + "Array", + "OpenMP", + "OpenMPWorkshare", + "OpenMPTarget", + "OpenMPTargetLoop", + "OpenMPTaskloop", + "OpenACC", + "OpenACCArray", + "CUDA", + "CUDAKernel", + "Sequential", + ] + variant( + "foption", + values=implementation_vals, + default="Sequential", + description="Implementation", + ) + # The fortran Makefile is inside the src/fortran so we need to address this + build_directory = "src/fortran" + build_name = "" + variant( + "fortran_flags", + values=str, + default="none", + description="Additional Fortran flags to be provided", + ) + + +class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): def cmake_args(self): - # convert spec to string to work on it - spec_string = str(self.spec) - - # take only the first portion of the spec until space - spec_string_truncate = spec_string.split(" ", 1)[0] - model_list = find_model_flag(spec_string_truncate) # Prints out ['cuda', 'thrust'] - - if len(model_list) > 1: - ignore_list = ["cuda"] # if +acc is provided ignore the cuda model - model = list(set(model_list) - set(ignore_list)) - # We choose 'thrust' from the list of ['cuda', 'thrust'] - args = ["-DMODEL=" + model[0]] + model_list = [ + "sycl", + "sycl2020", + "omp", + "cuda", + "ocl", + "tbb", + "acc", + "hip", + "thrust", + "raja", + "std", + "kokkos", + ] + # for +acc and +thrust the CudaPackage appends +cuda variant too so we need + # to filter cuda from list e.g. we choose 'thrust' + # from the list of ['cuda', 'thrust'] + model_names = [name for name in model_list if f"+{name}" in self.spec] + print("model names : ", model_names) + if len(model_names) > 1: + model_names = [elem for elem in model_names if (elem != "cuda" and elem != "rocm")] + if "std" in model_names[0]: + args = ["-DMODEL=" + "std-" + self.spec.variants["std_submodel"].value] + elif "sycl2020" in model_names[0]: # this is for nvidia offload + args = ["-DMODEL=" + "sycl2020-" + self.spec.variants["sycl2020_submodel"].value] + else: + args = ["-DMODEL=" + model_names[0]] else: - # if it is +stddata,indices etc. we need to pass it - # as std-data to the CMake compiler - # do some alterations here - if "std" in model_list[0]: - args = ["-DMODEL=" + "std-" + model_list[0].split("d", 1)[1]] + # do some alterations here to append sub models too + if "std" in model_names[0]: + args = ["-DMODEL=" + "std-" + self.spec.variants["std_submodel"].value] + elif "sycl2020" in model_names[0]: + args = ["-DMODEL=" + "sycl2020-" + self.spec.variants["sycl2020_submodel"].value] + print(args) + elif "rocm" in model_names[0]: + args = ["-DMODEL=hip"] else: - args = ["-DMODEL=" + model_list[0]] + args = ["-DMODEL=" + model_names[0]] + if model_names[0] != "tbb" and model_names[0] != "thrust": + args.append("-DCMAKE_CXX_COMPILER=" + spack_cxx) # =================================== # ACC # =================================== - if ("+acc" in self.spec) and ("~cuda" in self.spec): - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) + """ + register_flag_optional(TARGET_DEVICE + "[PGI/NVHPC only] This sets the `-target` flag, possible values are: + gpu - Globally set the target device to an NVIDIA GPU + multicore - Globally set the target device to the host CPU + Refer to `nvc++ --help` for the full list" + register_flag_optional(CUDA_ARCH + "[PGI/NVHPC only] Only applicable if `TARGET_DEVICE` is set to `gpu`. + Nvidia architecture in ccXY format, for example, sm_70 becomes cc70, + will be passed in via `-gpu=` (e.g `cc70`) + Possible values are: + cc35 - Compile for compute capability 3.5 + cc50 - Compile for compute capability 5.0 + cc60 - Compile for compute capability 6.0 + cc62 - Compile for compute capability 6.2 + cc70 - Compile for compute capability 7.0 + cc72 - Compile for compute capability 7.2 + cc75 - Compile for compute capability 7.5 + cc80 - Compile for compute capability 8.0 + ccall - Compile for all supported compute capabilities + Refer to `nvc++ --help` for the full list" + "") + +register_flag_optional(TARGET_PROCESSOR + "[PGI/NVHPC only] This sets the `-tp` (target processor) flag, possible values are: + px - Generic x86 Processor + bulldozer - AMD Bulldozer processor + piledriver - AMD Piledriver processor + zen - AMD Zen architecture (Epyc, Ryzen) + zen2 - AMD Zen 2 architecture (Ryzen 2) + sandybridge - Intel SandyBridge processor + haswell - Intel Haswell processor + knl - Intel Knights Landing processor + skylake - Intel Skylake Xeon processor + host - Link native version of HPC SDK cpu math library + native - Alias for -tp host + Refer to `nvc++ --help` for the full list" + "") + """ + if self.spec.satisfies("+acc~kokkos~raja %nvhpc"): + target_device = "gpu" if "cuda_arch" in self.spec.variants else "multicore" if "cuda_arch" in self.spec.variants: cuda_arch_list = self.spec.variants["cuda_arch"].value - # the architecture value is only number so append sm_ to the name + # the architecture value is only number so append cc_ to the name cuda_arch = "cc" + cuda_arch_list[0] - args.append("-DTARGET_DEVICE=gpu") + # args.append( + # "-DCXX_EXTRA_FLAGS=" + "-target=" + target_device + "-gpu=" + cuda_arch + # ) args.append("-DCUDA_ARCH=" + cuda_arch) - elif "cpu_arch" in self.spec.variants: - cpu_arch_list = self.spec.variants["cpu_arch"].value - # the architecture value is only number so append sm_ to the name - cpu_arch = cpu_arch_list[0] - args.append("-DTARGET_DEVICE=multicore") - args.append("-DTARGET_PROCESSOR=" + cpu_arch) - + else: + # get the cpu architecture value from user + target_processor = str(self.spec.target) # self.spec.variants["cpu_arch"].value[0] + args.append("-DTARGET_PROCESSOR=" + target_processor) + # args.append( + # "-DCXX_EXTRA_FLAGS=" + # + "-target=" + # + target_device + # + "-tp=" + # + target_processor + # ) + args.append("-DTARGET_DEVICE=" + target_device) # =================================== # STDdata,STDindices,STDranges # =================================== - std_list = ["+stddata", "+stdindices", "+stdranges"] - if spec_string.startswith(tuple(std_list)): - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) + + if "+std" in self.spec: + if self.spec.satisfies("+std_use_tbb"): + args.append("-DCXX_EXTRA_FLAGS=-ltbb") + if self.spec.satisfies("+std_use_onedpl"): + # args.append("-DCXX_EXTRA_FLAGS=-ltbb") + # args.append("-DCXX_EXTRA_FLAGS=-loneDPL") + args.append( + "-DUSE_ONEDPL=" + self.spec.variants["std_onedpl_backend"].value.upper() + ) + if self.spec.variants["std_offload"].value != "none": + # the architecture value is only number so append cc_ to the name + cuda_arch = "cc" + self.spec.variants["cuda_arch"].value[0] + args.append("-DNVHPC_OFFLOAD=" + cuda_arch) # =================================== # CUDA # =================================== - - if ("+cuda" in self.spec) and ("~kokkos" in self.spec) and ("~acc" in self.spec): + if self.spec.satisfies("+cuda~kokkos~acc~omp~thrust~raja"): # Set up the cuda macros needed by the build cuda_arch_list = self.spec.variants["cuda_arch"].value + # "-DCUDA_ARCH" requires sm_ # the architecture value is only number so append sm_ to the name cuda_arch = "sm_" + cuda_arch_list[0] args.append("-DCUDA_ARCH=" + cuda_arch) cuda_dir = self.spec["cuda"].prefix cuda_comp = cuda_dir + "/bin/nvcc" args.append("-DCMAKE_CUDA_COMPILER=" + cuda_comp) - args.append("-DMEM=" + self.spec.variants["mem"].value) - if self.spec.variants["flags"].value != "none": - args.append("-DCUDA_EXTRA_FLAGS=" + self.spec.variants["flags"].value) + args.append("-DMEM=" + self.spec.variants["cuda_memory_mode"].value.upper()) + if self.spec.variants["cuda_extra_flags"].value != "none": + args.append("-DCUDA_EXTRA_FLAGS=" + self.spec.variants["cuda_extra_flags"].value) # =================================== # OMP # =================================== # `~kokkos` option is there to prevent +kokkos +omp setting to use omp directly from here # Same applies for raja - if ("+omp" in self.spec) and ("~kokkos" in self.spec) and ("~raja" in self.spec): - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) - if "cuda_arch" in self.spec.variants: - cuda_arch_list = self.spec.variants["cuda_arch"].value - # the architecture value is only number so append sm_ to the name - cuda_arch = "sm_" + cuda_arch_list[0] - args.append("-DOFFLOAD= " + "NVIDIA:" + cuda_arch) - elif "amdgpu_target" in self.spec.variants: - rocm_arch = self.spec.variants["amdgpu_target"].value - # the architecture value is only number so append sm_ to the name - args.append("-DOFFLOAD=" + " AMD:" + rocm_arch) + if self.spec.satisfies("+omp~kokkos~raja"): + args.append("-DCMAKE_C_COMPILER=" + spack_cc) + if self.spec.satisfies("~omp_offload"): + args.append("-DOFFLOAD=" + "OFF") + # Check if the omp_flags variant is not set to "none" + args.append( + "-DCMAKE_CXX_FLAGS=" + + self.pkg.compiler.openmp_flag + + " " + + ( + self.spec.variants["omp_flags"].value + if self.spec.variants["omp_flags"].value != "none" + else "" + ) + ) else: - args.append("-DOFFLOAD=" + "INTEL") + offload_args = "" + args.append("-DOFFLOAD=ON") + if "cuda_arch" in self.spec.variants: + if self.spec.satisfies("%nvhpc"): + cuda_arch = "cc" + self.spec.variants["cuda_arch"].value[0] + offload_args = " -mp=gpu;" + "-gpu=" + cuda_arch + " " + if self.spec.satisfies("%clang"): + cuda_arch = "sm_" + self.spec.variants["cuda_arch"].value[0] + offload_args = "-fopenmp;--offload-arch=" + cuda_arch + elif ("amdgpu_target" in self.spec.variants) and ( + self.spec.variants["amdgpu_target"].value != "none" + ): + offload_args = ( + ";--offload-arch=" + self.spec.variants["amdgpu_target"].value[0] + ) + + args.append( + "-DOFFLOAD_FLAGS=" + + self.pkg.compiler.openmp_flag + + ";" + + offload_args + + ";" + + self.spec.variants["omp_flags"].value + ) # =================================== - # SYCL + # SYCL # =================================== - if self.spec.satisfies("+sycl"): - args.append("-DSYCL_COMPILER=" + self.spec.variants["implementation"].value.upper()) - if self.spec.variants["implementation"].value.upper() != "ONEAPI-DPCPP": - args.append( - "-DSYCL_COMPILER_DIR=" + self.spec.variants["implementation"].value.upper() - ) - if self.spec.variants["implementation"].value.upper() == "COMPUTE-CPP": - args.append("-DOpenCL_LIBRARY=") + if "+sycl" in self.spec: + if self.spec.satisfies("%oneapi"): + # -fsycl flag is required for setting up sycl/sycl.hpp seems like + # it doesn't get it from the CMake file + args.append("-DSYCL_COMPILER=ONEAPI-ICPX") + args.append("-DCXX_EXTRA_FLAGS= -fsycl") + elif self.spec.satisfies("%clang"): + # this requires the clang inside oneapi installation + args.append("-DSYCL_COMPILER=ONEAPI-Clang") + args.append("-DCXX_EXTRA_FLAGS= -fsycl") + else: + args.append("-DSYCL_COMPILER=HIPSYCL") + args.append("-DSYCL_COMPILER_DIR=" + self.spec.variants["dir"].value) + args.append("-DCXX_EXTRA_FLAGS= -fsycl") # =================================== - # SYCL 2020 + # SYCL 2020 # =================================== - if self.spec.satisfies("+sycl2020"): + if "+sycl2020" in self.spec: if self.spec.satisfies("%oneapi"): # -fsycl flag is required for setting up sycl/sycl.hpp seems like # it doesn't get it from the CMake file - args.append("-DCXX_EXTRA_FLAGS= -fsycl -O3") - # this is required to enable -DCMAKE_CXX_COMPILER=icpx flag from CMake args.append("-DSYCL_COMPILER=ONEAPI-ICPX") + args.append("-DCXX_EXTRA_FLAGS= -fsycl") + elif self.spec.satisfies("%clang"): + # this requires the clang inside oneapi installation + args.append("-DSYCL_COMPILER=ONEAPI-Clang") + args.append("-DCXX_EXTRA_FLAGS= -fsycl") else: + args.append("-DSYCL_COMPILER=HIPSYCL") + args.append("-DSYCL_COMPILER_DIR=" + self.spec.variants["dir"].value) + args.append("-DCXX_EXTRA_FLAGS= -fsycl") + # if self.spec.variants["flags"].value != "none": + if self.spec.variants["sycl2020_offload"].value == "nvidia": + cuda_dir = self.spec["cuda"].prefix + cuda_arch = "sm_" + self.spec.variants["cuda_arch"].value[0] args.append( - "-DSYCL_COMPILER=" + self.spec.variants["implementation"].value.upper() - ) - if self.spec.variants["implementation"].value.upper() != "ONEAPI-DPCPP": - args.append( - "-DSYCL_COMPILER_DIR=" + self.spec.variants["implementation"].value.upper() + "-DCXX_EXTRA_FLAGS=" + + "-fsycl;-fsycl-targets=nvptx64-nvidia-cuda;" + + self.spec.target.optimization_flags( + self.spec.compiler.name, str(self.spec.compiler.version) ) - if self.spec.variants["implementation"].value.upper() == "COMPUTE-CPP": - args.append("-DOpenCL_LIBRARY=") + + " --cuda-path=" + + cuda_dir + ) # =================================== # HIP(ROCM) # =================================== - if self.spec.satisfies("+rocm"): - hip_comp = self.spec["rocm"].prefix + "/bin/hipcc" + if "+hip" in self.spec: + hip_comp = self.spec["hip"].prefix + "/bin/hipcc" + offload_arch = str(self.spec.variants["amdgpu_target"].value[0]) + args.append("-DCMAKE_CXX_COMPILER=" + hip_comp) - args.append( - "-DCXX_EXTRA_FLAGS= --offload-arch=" - + self.spec.variants["amdgpu_target"].value - + " " - + self.spec.variants["flags"].value - + " -O3" - ) + args.append(f"-DCXX_EXTRA_FLAGS=--offload-arch={offload_arch} -O3") + if str(self.spec.variants["hip_mem_mode"].value) != "none": + args.append("-DMEM=" + self.spec.variants["hip_mem_mode"].value.upper()) # =================================== # TBB # =================================== - if self.spec.satisfies("+tbb"): - args.append("-DONE_TBB_DIR=" + self.spec["tbb"].prefix + "/tbb/latest/") - args.append("-DPARTITIONER=" + self.spec.variants["partitioner"].value.upper()) + if "+tbb" in self.spec: + args.append("-DONE_TBB_DIR=" + self.spec["intel-tbb"].prefix + "/tbb/latest/") + args.append("-DCXX_EXTRA_FLAGS=-ltbb") + args.append("-DPARTITIONER=" + self.spec.variants["tbb_partitioner"].value.upper()) + if self.spec.satisfies("+tbb_use_vector"): + args.append("-DUSE_VECTOR=ON") # =================================== # OpenCL (ocl) # =================================== - if self.spec.satisfies("+ocl"): - if "backend" in self.spec.variants: - if "cuda" in self.spec.variants["backend"].value: - cuda_dir = self.spec["cuda"].prefix - args.append("-DOpenCL_LIBRARY=" + cuda_dir + "/lib64/libOpenCL.so") - elif "amd" in self.spec.variants["backend"].value: - rocm_dir = self.spec["rocm-opencl"].prefix - args.append("-DOpenCL_LIBRARY=" + rocm_dir + "/lib64/libOpenCL.so") - elif "intel" in self.spec.variants["backend"].value: - intel_lib = ( - self.spec["intel-oneapi-compilers"].prefix - + "/compiler/2023.0.0/linux/lib/libOpenCL.so" - ) - args.append("-DOpenCL_LIBRARY=" + intel_lib) - elif "pocl" in self.spec.variants["backend"].value: - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) - pocl_lib = self.spec["pocl"].prefix + "/lib64/libOpenCL.so" - args.append("-DOpenCL_LIBRARY=" + pocl_lib) - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) + + if "+ocl" in self.spec: + if "cuda" in self.spec.variants["ocl_backend"].value: + cuda_dir = self.spec["cuda"].prefix + args.append("-DOpenCL_LIBRARY=" + cuda_dir + "/lib64/libOpenCL.so") + elif "amd" in self.spec.variants["ocl_backend"].value: + rocm_dir = self.spec["rocm-opencl"].prefix + args.append("-DOpenCL_LIBRARY=" + rocm_dir + "/lib64/libOpenCL.so") + elif "intel" in self.spec.variants["ocl_backend"].value: + intel_lib = ( + self.spec["intel-oneapi-compilers"].prefix + + "/compiler/" + + str(self.spec["intel-oneapi-compilers"].version) + + "/linux/lib/libOpenCL.so" + ) + args.append("-DOpenCL_LIBRARY=" + intel_lib) + elif "pocl" in self.spec.variants["ocl_backend"].value: + pocl_lib = self.spec["pocl"].prefix + "/lib64/libOpenCL.so" + args.append("-DOpenCL_LIBRARY=" + pocl_lib) # =================================== # RAJA # =================================== - if self.spec.satisfies("+raja"): - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) - args.append("-DRAJA_IN_TREE=" + self.spec.variants["dir"].value) - if "offload" in self.spec.variants: - if "nvidia" in self.spec.variants["offload"].value: - cuda_dir = self.spec["cuda"].prefix - cuda_comp = cuda_dir + "/bin/nvcc" - args.append("-DCMAKE_CUDA_COMPILER=" + cuda_comp) - args.append("-DTARGET=NVIDIA") - cuda_arch_list = self.spec.variants["cuda_arch"].value - cuda_arch = "sm_" + cuda_arch_list[0] - args.append("-DCUDA_ARCH=" + cuda_arch) - - args.append("DCUDA_TOOLKIT_ROOT_DIR=" + self.spec["cuda"].prefix) - if self.spec.variants["flags"].value != "none": - args.append("-DCUDA_EXTRA_FLAGS=" + self.spec.variants["flags"].value) - # if("cpu" in self.spec.variants['offload'].value): - - if "omp" in self.spec.variants["backend"].value: - args.append("-DENABLE_OPENMP=ON") - if "cuda" in self.spec.variants["backend"].value: + + if "+raja" in self.spec: + args.append("-DCMAKE_C_COMPILER=" + spack_cc) + args.append("-DRAJA_IN_PACKAGE=" + self.spec["raja"].prefix) + if "nvidia" in self.spec.variants["raja_offload"].value: + cuda_comp = self.spec["cuda"].prefix + "/bin/nvcc" + args.append("-DTARGET=NVIDIA") + cuda_arch = "sm_" + self.spec.variants["cuda_arch"].value[0] + args.append("-DCUDA_ARCH=" + cuda_arch) + args.append("-DENABLE_CUDA=ON") + args.append("-DCUDA_TOOLKIT_ROOT_DIR=" + self.spec["cuda"].prefix) + if self.spec.variants["cuda_extra_flags"].value != "none": + args.append( + "-DCMAKE_CUDA_FLAGS=" + self.spec.variants["cuda_extra_flags"].value + ) # =================================== # THRUST # =================================== - if self.spec.satisfies("+thrust"): - if "cuda" in self.spec.variants["implementation"].value: - args.append("-DTHRUST_IMPL=" + self.spec.variants["implementation"].value.upper()) + + if "+thrust" in self.spec: + if "cuda" in self.spec.variants["thrust_submodel"].value: + args.append("-DTHRUST_IMPL=" + self.spec.variants["thrust_submodel"].value.upper()) + args.append("-SDK_DIR=" + self.spec["thrust"].prefix + "/include") - cuda_arch_list = self.spec.variants["cuda_arch"].value - # the architecture value is only number so append sm_ to the name - cuda_arch = "sm_" + cuda_arch_list[0] - args.append("-DCUDA_ARCH=" + cuda_arch) + # this model uses CMAKE_CUDA_ARCHITECTURES which only requires number of cuda_arch + # no need to append sm_ or cc_ + args.append("-DCUDA_ARCH=" + self.spec.variants["cuda_arch"].value[0]) cuda_dir = self.spec["cuda"].prefix cuda_comp = cuda_dir + "/bin/nvcc" args.append("-DCMAKE_CUDA_COMPILER=" + cuda_comp) - args.append("-DBACKEND=" + self.spec.variants["backend"].value.upper()) - if self.spec.variants["flags"].value != "none": - args.append("-DCUDA_EXTRA_FLAGS=" + self.spec.variants["flags"].value) - - if "rocm" in self.spec.variants["implementation"].value: - args.append("-DTHRUST_IMPL=" + self.spec.variants["implementation"].value.upper()) + # args.append("-DCMAKE_CUDA_COMPILER=" + spack_cxx) + # args.append("-DCMAKE_CUDA_FLAGS=-ccbin " + spack_cc) + args.append("-DBACKEND=" + self.spec.variants["thrust_backend"].value.upper()) + if self.spec.variants["cuda_extra_flags"].value != "none": + args.append( + "-DCUDA_EXTRA_FLAGS=" + self.spec.variants["cuda_extra_flags"].value + ) + if "rocm" in self.spec.variants["thrust_submodel"].value: + args.append("-DCMAKE_CXX_COMPILER=" + self.spec["hip"].hipcc) + args.append("-DTHRUST_IMPL=" + self.spec.variants["thrust_submodel"].value.upper()) args.append("-SDK_DIR=" + self.spec["rocthrust"].prefix) - args.append("-DBACKEND=" + self.spec.variants["backend"].value.upper()) # =================================== # kokkos # =================================== # kokkos implementation is versatile and it could use cuda or omp architectures as backend - # The usage should be spack install babelstream +kokkos +cuda [or +omp] - if self.spec.satisfies("+kokkos"): - args.append("-DCMAKE_CXX_COMPILER=" + self.compiler.cxx) - args.append("-DKOKKOS_IN_TREE=" + self.spec.variants["dir"].value) - # args.append("-DKOKKOS_IN_PACKAGE=" + self.spec["kokkos"].prefix) - if "backend" in self.spec.variants: - if "cuda" in self.spec.variants["backend"].value: - args.append("-DKokkos_ENABLE_CUDA=ON") - cuda_arch_list = self.spec.variants["cuda_arch"].value - cuda_arch = cuda_arch_list[0] - # arhitecture kepler optimisations - if cuda_arch in ("30", "32", "35", "37"): - args.append("-D" + "Kokkos_ARCH_KEPLER" + cuda_arch + "=ON") - # arhitecture maxwell optimisations - if cuda_arch in ("50", "52", "53"): - args.append("-D" + "Kokkos_ARCH_MAXWELL" + cuda_arch + "=ON") - # arhitecture pascal optimisations - if cuda_arch in ("60", "61"): - args.append("-D" + "Kokkos_ARCH_PASCAL" + cuda_arch + "=ON") - # architecture volta optimisations - if cuda_arch in ("70", "72"): - args.append("-D" + "Kokkos_ARCH_VOLTA" + cuda_arch + "=ON") - if cuda_arch == "75": - args.append("-DKokkos_ARCH_TURING75=ON") - if "omp" in self.spec.variants["backend"].value: - args.append("-DKokkos_ENABLE_OPENMP=ON") + + # The usage should be spack install babelstream +kokkos backend=[cuda or omp or none] + if "+kokkos" in self.spec: + args.append("-DCMAKE_C_COMPILER=" + spack_cc) + args.append("-DKOKKOS_IN_PACKAGE=" + self.spec["kokkos"].prefix) + if "cuda" in self.spec.variants["kokkos_backend"].value: + # args.append("-DCMAKE_CXX_COMPILER=" + self.spec["cuda"].nvcc) + args.append("-DCMAKE_CXX_COMPILER=" + spack_cxx) + args.append("-DKokkos_ENABLE_CUDA=ON") + int_cuda_arch = int(self.spec.variants["cuda_arch"].value[0]) + # arhitecture kepler optimisations + if int_cuda_arch in (30, 32, 35, 37): + args.append("-D" + "Kokkos_ARCH_KEPLER" + str(int_cuda_arch) + "=ON") + # arhitecture maxwell optimisations + if int_cuda_arch in (50, 52, 53): + args.append("-D" + "Kokkos_ARCH_MAXWELL" + str(int_cuda_arch) + "=ON") + # arhitecture pascal optimisations + if int_cuda_arch in (60, 61): + args.append("-D" + "Kokkos_ARCH_PASCAL" + str(int_cuda_arch) + "=ON") + # architecture volta optimisations + if int_cuda_arch in (70, 72): + args.append("-D" + "Kokkos_ARCH_VOLTA" + str(int_cuda_arch) + "=ON") + if int_cuda_arch == 75: + args.append("-DKokkos_ARCH_TURING75=ON") + if int_cuda_arch == 80: + args.append("-DKokkos_ARCH_AMPERE80=ON") + if "omp" in self.spec.variants["kokkos_backend"].value: + args.append("-DKokkos_ENABLE_OPENMP=ON") # not in ["kokkos", "raja", "acc", "hip"] then compiler forced true if set(model_list).intersection(["kokkos", "raja", "acc", "hip"]) is True: args.append("-DCMAKE_CXX_COMPILER_FORCED=True") return args + + +class MakefileBuilder(spack.build_systems.makefile.MakefileBuilder): + build_directory = "src/fortran" + + # Generate Compiler Specific includes + def edit(self, pkg, spec, prefix): + config = { + "FC": pkg.compiler.fc, + "FCFLAGS": "", + "ARCH": spec.target.family, + "DOCONCURRENT_FLAG": "", + "ARRAY_FLAG": "", + "OPENMP_FLAG": "", + "OPENACC_FLAG": "", + "CUDA_FLAG": "", + "SEQUENTIAL_FLAG": "", + } + # Dictionary mapping compiler names to unsupported options + unsupported_options = { + "arm": ["CUDA", "CUDAKernel", "OpenACC", "OpenACCArray"], + "aocc": ["CUDA", "CUDAKernel"], + "cce": ["CUDA", "CUDAKernel"], + "gcc": ["CUDA", "CUDAKernel"], + "nvhpc": ["OpenMPTaskloop"], + "oneapi": ["CUDA", "CUDAKernel", "OpenACC", "OpenACCArray"], + "fj": ["CUDA", "CUDAKernel", "OpenACC"], + } + + # Check if spec.compiler.name is in the unsupported_options dictionary + unsupported_value = self.spec.variants["foption"].value + compiler_name = spec.compiler.name + unsupported = any( + unsupported_value in options + for options in unsupported_options.get(compiler_name, []) + if options == unsupported_value + ) + if unsupported: + raise InstallError( + f"{unsupported_value} is not supported by the {compiler_name} compiler" + ) + # =================================== + # ARM + # =================================== + if spec.compiler.name == "arm": + fortran_flags = ( + "-std=f2018 " + pkg.compiler.opt_flags[4] + " -Wall -Wno-unused-variable" + ) + fortran_flags += self.spec.target.optimization_flags( + self.spec.compiler.name, str(self.spec.compiler.version) + ) + + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["ARRAY_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["OPENMP_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["OPENACC_FLAG"] = "-fopenacc" + + # =================================== + # AMD + # =================================== + if spec.compiler.name == "aocc": + fortran_flags = ( + "-std=f2018 " + pkg.compiler.opt_flags[3] + " -Wall -Wno-unused-variable" + ) + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["ARRAY_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["OPENMP_FLAG"] = pkg.compiler.openmp_flag # libomp.so required + config["OPENACC_FLAG"] = "-fopenacc" + + # =================================== + # CRAY + # =================================== + if spec.compiler.name == "cce": + fortran_flags = "-e F -O3" + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = "-h thread_do_concurrent -DCRAY_THREAD_DOCONCURRENT" + config["ARRAY_FLAG"] = "-h autothread" + config["OPENMP_FLAG"] = pkg.compiler.openmp_flag + config["OPENACC_FLAG"] = "-h acc" # for cpu only -h omp + + # =================================== + # GCC + # =================================== + if spec.compiler.name == "gcc": + fortran_flags = "-std=f2018 -O3 " + fortran_flags += "-Wall -Wno-unused-dummy-argument -Wno-unused-variable " + fortran_flags += self.spec.target.optimization_flags( + self.spec.compiler.name, str(self.spec.compiler.version) + ) + + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = "-ftree-parallelize-loops=4" + config["OPENMP_FLAG"] = pkg.compiler.openmp_flag + config["OPENACC_FLAG"] = "-fopenacc" + + # =================================== + # NVHPC + # =================================== + if spec.compiler.name == "nvhpc": + fortran_flags = pkg.compiler.opt_flags[4] # for -O3 + # FCFLAGS := -O3 -Minform=inform -Minfo=all + fortran_flags += " -Minform=warn " + TARGET = "gpu" # target = "multicore" + config["TARGET"] = TARGET + if "cuda_arch" in self.spec.variants: + cuda_arch_list = self.spec.variants["cuda_arch"].value + # the architecture value is only number so append sm_ to the name + cuda_arch = "cc" + cuda_arch_list[0] + GPUFLAG = " -gpu=" + cuda_arch + fortran_flags += "-tp=" + str(spec.target) + # this is to allow apples-to-apples comparison with DC in non-DC GPU impls + # set exactly one of these pairs! + # MANAGED = "-DUSE_MANAGED -gpu=managed" + # DEVICE="" + # ------------ + DEVICE = "-DUSE_DEVICE -cuda -gpu=nomanaged" + MANAGED = "" + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = GPUFLAG + " -stdpar=" + TARGET + " " + DEVICE + config["ARRAY_FLAG"] = GPUFLAG + " -stdpar=" + TARGET + " " + MANAGED + config["OPENMP_FLAG"] = GPUFLAG + " -mp=" + TARGET + " " + MANAGED + config["OPENACC_FLAG"] = GPUFLAG + " -acc=" + TARGET + " " + MANAGED + config["CUDA_FLAG"] = GPUFLAG + " -cuda -acc=gpu" + " " + MANAGED + + # =================================== + # ONEAPI + # =================================== + if spec.compiler.name == "oneapi": + fortran_flags = "-std18 -Ofast -xHOST -qopt-zmm-usage=low" + if config["FC"] == "ifort": + fortran_flags += "-qopt-streaming-stores=always" + + config["DOCONCURRENT_FLAG"] = "-qopenmp" + ( + "-parallel" if config["FC"] == "ifort" else "" + ) + config["ARRAY_FLAG"] = "-qopenmp" + ("-parallel" if config["FC"] == "ifort" else "") + config["OPENMP_FLAG"] = "-qopenmp" + ( + "-fopenmp-targets=spir64 -DUSE_FLOAT=1" if config["FC"] == "ifx" else "" + ) + config["FCFLAGS"] = fortran_flags + + # =================================== + # FJ + # =================================== + if spec.compiler.name == "fj": + fortran_flags = "-X08 -Kfast -KA64FX -KSVE -KARMV8_3_A -Kzfill=100 " + fortran_flags += "-Kprefetch_sequential=soft " + fortran_flags += "-Kprefetch_line=8 -Kprefetch_line_L2=16 -Koptmsg=2 " + # FJ Fortran system_clock is low resolution + fortran_flags += "-Keval -DUSE_OMP_GET_WTIME=1 " + + config["FCFLAGS"] = fortran_flags + config["DOCONCURRENT_FLAG"] = "-Kparallel,reduction -DNOTSHARED" + config["ARRAY_FLAG"] = "-Kparallel,reduction" + config["OPENMP_FLAG"] = pkg.compiler.openmp_flag + + with open(self.build_directory + "/make.inc." + spec.compiler.name, "w+") as inc: + for key in config: + inc.write("{0} = {1}\n".format(key, config[key])) + + def setup_build_environment(self, env): + ###################################### + # Build and Installation Directories # + ###################################### + + # The environment variable ESMF_DIR must be set to the full pathname + # of the top level ESMF directory before building the framework. + env.set("COMPILER", self.spec.compiler.name) + env.set("IMPLEMENTATION", self.spec.variants["foption"].value) + # DEBUG + # print(self.spec.variants["foption"].value) + # print(self.spec.compiler.version) + # print(platform.machine()) + # This creates a testing tree (if one doesn't already exist) and + # copies the binaries from `src/fortran` to `SpackPackage/bin`. + # This allows you to use the testing tree independently of the + # source tree in the future. + # print(pkg.compiler.cc_pic_flag) + + @property + def build_name(self): + compiler_prefix = self.spec.compiler.name + implementation_prefix = self.spec.variants["foption"].value + return "{}.{}.{}".format("BabelStream", compiler_prefix, implementation_prefix) + + def install(self, pkg, spec, prefix): + mkdir(prefix.bin) + install(self.build_directory + "/" + self.build_name, prefix.bin) + # To check the make.inc file generated + install_tree(self.build_directory, prefix.lib) diff --git a/var/spack/repos/builtin/packages/bacio/package.py b/var/spack/repos/builtin/packages/bacio/package.py index 676dab9849498d..18a80fdcd351f8 100644 --- a/var/spack/repos/builtin/packages/bacio/package.py +++ b/var/spack/repos/builtin/packages/bacio/package.py @@ -39,5 +39,5 @@ def patch(self): filter_file(".+", "2.4.1", "VERSION") def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/bazel/package.py b/var/spack/repos/builtin/packages/bazel/package.py index bbd0acf278fe70..32bcd23f9e5c97 100644 --- a/var/spack/repos/builtin/packages/bazel/package.py +++ b/var/spack/repos/builtin/packages/bazel/package.py @@ -140,6 +140,9 @@ class Bazel(Package): # Newer versions of grpc and abseil dependencies are needed but are not in bazel-4.0.0 conflicts("@4.0.0", when="%gcc@11:") + # https://github.com/bazelbuild/bazel/pull/23667 + conflicts("%apple-clang@16:", when="@:7.3") + executables = ["^bazel$"] # Download resources to perform offline build with bazel. diff --git a/var/spack/repos/builtin/packages/beatnik/package.py b/var/spack/repos/builtin/packages/beatnik/package.py index ac817cca25359d..8d75a590db80f2 100644 --- a/var/spack/repos/builtin/packages/beatnik/package.py +++ b/var/spack/repos/builtin/packages/beatnik/package.py @@ -16,9 +16,10 @@ class Beatnik(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") + version("1.1", commit="7d5a6fa588bcb7065fc53c3e8ae52d4d7f13b6f1", submodules=True) version("1.0", commit="ae31ef9cb44678d5ace77994b45b0778defa3d2f") - version("develop", branch="develop") - version("main", branch="main") + version("develop", branch="develop", submodules=True) + version("main", branch="main", submodules=True) depends_on("cxx", type="build") # generated @@ -47,13 +48,17 @@ class Beatnik(CMakePackage, CudaPackage, ROCmPackage): depends_on("kokkos +wrapper", when="%gcc+cuda") # Cabana dependencies - depends_on("cabana @0.6.0 +grid +heffte +silo +hdf5 +mpi") + depends_on("cabana @0.7.0 +grid +heffte +silo +hdf5 +mpi +arborx", when="@1.1") + depends_on("cabana @0.7.0 +grid +heffte +silo +hdf5 +mpi +arborx", when="@1.0") + depends_on("cabana @master +grid +heffte +silo +hdf5 +mpi +arborx", when="@develop") + depends_on("cabana @0.7.0 +grid +heffte +silo +hdf5 +mpi +arborx", when="@main") depends_on("cabana +cuda", when="+cuda") depends_on("cabana +rocm", when="+rocm") # Silo dependencies depends_on("silo @4.11:") - depends_on("silo @4.11.1:", when="%cce") # Eariler silo versions have trouble cce + depends_on("silo @4.11.1 +fpzip+hzip~python", when="%cce") + # Eariler silo versions have trouble with cce # Heffte dependencies - We always require FFTW so that there's a host # backend even when we're compiling for GPUs diff --git a/var/spack/repos/builtin/packages/benchmark/package.py b/var/spack/repos/builtin/packages/benchmark/package.py index 8e398aefa3c722..1c1074696d90bf 100644 --- a/var/spack/repos/builtin/packages/benchmark/package.py +++ b/var/spack/repos/builtin/packages/benchmark/package.py @@ -14,10 +14,12 @@ class Benchmark(CMakePackage): git = "https://github.com/google/benchmark.git" license("Apache-2.0") + maintainers("stephenswat") # first properly installed CMake config packages in # 1.2.0 release: https://github.com/google/benchmark/issues/363 version("main", branch="main") + version("1.9.0", sha256="35a77f46cc782b16fac8d3b107fbfbb37dcd645f7c28eee19f3b8e0758b48994") version("1.8.5", sha256="d26789a2b46d8808a48a4556ee58ccc7c497fcd4c0af9b90197674a81e04798a") version("1.8.4", sha256="3e7059b6b11fb1bbe28e33e02519398ca94c1818874ebed18e504dc6f709be45") version("1.8.3", sha256="6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce") @@ -54,6 +56,9 @@ class Benchmark(CMakePackage): when="@1.5.4:", description="Enable performance counters provided by libpfm", ) + variant( + "shared", default=True, sticky=True, description="Build the libraries as shared objects" + ) depends_on("cmake@2.8.11:", type="build", when="@:1.1.0") depends_on("cmake@2.8.12:", type="build", when="@1.2.0:1.4") @@ -64,6 +69,7 @@ def cmake_args(self): # No need for testing for the install args = [ self.define("BENCHMARK_ENABLE_TESTING", False), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), self.define_from_variant("BENCHMARK_ENABLE_LIBPFM", "performance_counters"), ] return args diff --git a/var/spack/repos/builtin/packages/bfs/package.py b/var/spack/repos/builtin/packages/bfs/package.py index add324f8d44e8f..105b698be4aefc 100644 --- a/var/spack/repos/builtin/packages/bfs/package.py +++ b/var/spack/repos/builtin/packages/bfs/package.py @@ -16,6 +16,7 @@ class Bfs(MakefilePackage): license("0BSD") + version("4.0.4", sha256="209da9e9f43d8fe30fd689c189ea529e9d6b5358ce84a63a44721003aea3e1ca") version("4.0.1", sha256="8117b76b0a967887278a11470cbfa9e7aeae98f11a7eeb136f456ac462e5ba23") version("3.1.1", sha256="d73f345c1021e0630e0db930a3fa68dd1f968833037d8471ee1096e5040bf91b") version("3.1", sha256="aa6a94231915d3d37e5dd62d194cb58a575a8f45270020f2bdd5ab41e31d1492") diff --git a/var/spack/repos/builtin/packages/bigdft-futile/package.py b/var/spack/repos/builtin/packages/bigdft-futile/package.py index 94a66f100dd528..99bf739a1d01b7 100644 --- a/var/spack/repos/builtin/packages/bigdft-futile/package.py +++ b/var/spack/repos/builtin/packages/bigdft-futile/package.py @@ -49,6 +49,14 @@ class BigdftFutile(AutotoolsPackage, CudaPackage): configure_directory = "futile" + # missing MPI_BOTTOM in fake mpif.h (generated when compiling without MPI support) + # similar issue (maybe others) also in 1.9.4 but this patch does not work for 1.9.4 + patch( + "https://gitlab.com/l_sim/bigdft-suite/-/commit/ec7419011fa9fd815de77bfca8642973091fb64b.diff", + sha256="66c493e37fe7f7f9800ae7f49bb0172a5b2372a2ce0ee4c3bcb7ff5c59a3925c", + when="@1.9.5~mpi", + ) + def configure_args(self): spec = self.spec prefix = self.prefix diff --git a/var/spack/repos/builtin/packages/bison/package.py b/var/spack/repos/builtin/packages/bison/package.py index 7226ae8be4d9d7..5ca28a2a2b309d 100644 --- a/var/spack/repos/builtin/packages/bison/package.py +++ b/var/spack/repos/builtin/packages/bison/package.py @@ -64,7 +64,6 @@ class Bison(AutotoolsPackage, GNUMirrorPackage): depends_on("m4@1.4.6:", type=("build", "run")) depends_on("diffutils", type="build") - patch("pgi.patch", when="@3.0.4") # The NVIDIA compilers do not currently support some GNU builtins. # Detect this case and use the fallback path. patch("nvhpc-3.6.patch", when="@3.6.0:3.6 %nvhpc") diff --git a/var/spack/repos/builtin/packages/bison/pgi.patch b/var/spack/repos/builtin/packages/bison/pgi.patch deleted file mode 100644 index 8aeaa96a516955..00000000000000 --- a/var/spack/repos/builtin/packages/bison/pgi.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/lib/config.in.h -+++ b/lib/config.in.h -@@ -2182,6 +2182,7 @@ - ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ - : (199901L <= __STDC_VERSION__ \ - && !defined __HP_cc \ -+ && !defined __PGI \ - && !(defined __SUNPRO_C && __STDC__))) \ - && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) - # define _GL_INLINE inline diff --git a/var/spack/repos/builtin/packages/bitgroomingz/package.py b/var/spack/repos/builtin/packages/bitgroomingz/package.py index 85430a1579bf19..f618da822b292f 100644 --- a/var/spack/repos/builtin/packages/bitgroomingz/package.py +++ b/var/spack/repos/builtin/packages/bitgroomingz/package.py @@ -17,16 +17,12 @@ class Bitgroomingz(CMakePackage): version("master", branch="master") version("2022-10-14", commit="a018b20cca9f7d6a5396ab36230e4be6ae1cb25b") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="build shared libs") depends_on("zlib-api") def cmake_args(self): - args = [] - if self.spec.satisfies("+shared"): - args.append("-DBUILD_SHARED_LIBS=ON") - else: - args.append("-DBUILD_SHARED_LIBS=OFF") - return args + return [self.define_from_variant("BUILD_SHARED_LIBS", "shared")] diff --git a/var/spack/repos/builtin/packages/blaspp/package.py b/var/spack/repos/builtin/packages/blaspp/package.py index e58d274483cc1d..9974e1d3973237 100644 --- a/var/spack/repos/builtin/packages/blaspp/package.py +++ b/var/spack/repos/builtin/packages/blaspp/package.py @@ -21,6 +21,9 @@ class Blaspp(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("master", branch="master") + version( + "2024.10.26", sha256="c15ae19dbed1be35e8258048a044d3104da59e7e52b4fe7fe7ea5032708a8d2c" + ) version( "2024.05.31", sha256="24f325d2e1c2cc4275324bd88406555688379480877d19553656a0328287927a" ) @@ -114,8 +117,8 @@ def cmake_args(self): def check(self): # If the tester fails to build, ensure that the check() fails. - if os.path.isfile(join_path(self.builder.build_directory, "test", "tester")): - with working_dir(self.builder.build_directory): + if os.path.isfile(join_path(self.build_directory, "test", "tester")): + with working_dir(self.build_directory): make("check") else: raise Exception("The tester was not built!") diff --git a/var/spack/repos/builtin/packages/blis/package.py b/var/spack/repos/builtin/packages/blis/package.py index 56524abfd7528a..e7fdec6acbc15b 100644 --- a/var/spack/repos/builtin/packages/blis/package.py +++ b/var/spack/repos/builtin/packages/blis/package.py @@ -49,7 +49,6 @@ class BlisBase(MakefilePackage): provides("blas", when="+cblas") conflicts("%nvhpc") - conflicts("%pgi") def configure_args(self): spec = self.spec diff --git a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch deleted file mode 100644 index 925592e321712b..00000000000000 --- a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch +++ /dev/null @@ -1,290 +0,0 @@ -diff -uNr boost_1_63_0/boost/mpl/assert.hpp boost_1_63_0/boost/mpl/assert.hpp ---- boost_1_63_0/boost/mpl/assert.hpp 2016-12-22 07:33:17.000000000 -0500 -+++ boost_1_63_0/boost/mpl/assert.hpp 2017-05-31 20:09:43.704689605 -0400 -@@ -56,7 +56,7 @@ - // and GCC (which issues "unused variable" warnings when static constants are used - // at a function scope) - #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \ -- || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0) -+ || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0) || defined(__PGI) - # define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr } - #else - # define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr) -diff -uNr boost_1_63_0/boost/type_traits/is_floating_point.hpp boost_1_63_0/boost/type_traits/is_floating_point.hpp ---- boost_1_63_0/boost/type_traits/is_floating_point.hpp 2016-12-22 07:33:20.000000000 -0500 -+++ boost_1_63_0/boost/type_traits/is_floating_point.hpp 2017-05-31 20:12:50.187001957 -0400 -@@ -20,8 +20,9 @@ - template<> struct is_floating_point : public true_type{}; - template<> struct is_floating_point : public true_type{}; - template<> struct is_floating_point : public true_type{}; -- --#if defined(BOOST_HAS_FLOAT128) -+ -+// In PGI compiler, __float128 is a typedef, not its own type. -+#if defined(BOOST_HAS_FLOAT128) && !defined(__PGI) - template<> struct is_floating_point<__float128> : public true_type{}; - #endif - -diff -uNr boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp ---- boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp 2016-12-22 07:33:20.000000000 -0500 -+++ boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp 2017-05-31 20:11:12.365788989 -0400 -@@ -98,11 +98,7 @@ - }; - - public: -- functor() --#if defined(__PGI) -- : eof() --#endif -- {} -+ functor() {} - - #if BOOST_WORKAROUND(BOOST_MSVC, <= 1310) - // somehow VC7.1 needs this (meaningless) assignment operator -diff -uNr boost_1_63_0/boost/cstdint.hpp boost_1_63_0/boost/cstdint.hpp ---- boost_1_63_0/boost/cstdint.hpp 2016-12-22 07:33:14.000000000 -0500 -+++ boost_1_63_0/boost/cstdint.hpp 2017-05-31 20:04:52.821068853 -0400 -@@ -367,9 +367,6 @@ - #include - #endif - --// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config. --#if !defined(__PGIC__) -- - #if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \ - || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \ - || defined(__CYGWIN__) \ -@@ -393,8 +390,6 @@ - - #endif - --#endif // !defined(__PGIC__) -- - #endif // BOOST_CSTDINT_HPP - - -diff -uNr boost_1_63_0/libs/filesystem/src/operations.cpp boost_1_63_0/libs/filesystem/src/operations.cpp ---- boost_1_63_0/libs/filesystem/src/operations.cpp 2016-12-22 07:33:15.000000000 -0500 -+++ boost_1_63_0/libs/filesystem/src/operations.cpp 2017-05-31 20:06:26.492231150 -0400 -@@ -2051,10 +2051,6 @@ - return ok; - } - --#if defined(__PGI) && defined(__USE_FILE_OFFSET64) --#define dirent dirent64 --#endif -- - error_code dir_itr_first(void *& handle, void *& buffer, - const char* dir, string& target, - fs::file_status &, fs::file_status &) -diff -uNr boost_1_63_0/tools/build/src/engine/boehm_gc/configure boost_1_63_0/tools/build/src/engine/boehm_gc/configure ---- boost_1_63_0/tools/build/src/engine/boehm_gc/configure 2016-12-22 07:33:21.000000000 -0500 -+++ boost_1_63_0/tools/build/src/engine/boehm_gc/configure 2017-05-31 13:02:25.089265415 -0400 -@@ -9286,7 +9286,7 @@ - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; -- pgcc* | pgf77* | pgf90* | pgf95*) -+ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' -@@ -9722,7 +9722,7 @@ - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in -- pgcc*) # Portland Group C compiler -+ pgcc* | pgc++*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; -@@ -13421,7 +13421,7 @@ - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; -- pgCC*) -+ pgc++*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' -@@ -14098,7 +14098,7 @@ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; -- pgCC*) -+ pgc++*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' -@@ -15812,7 +15812,7 @@ - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; -- pgcc* | pgf77* | pgf90* | pgf95*) -+ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' -@@ -16248,7 +16248,7 @@ - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in -- pgcc*) # Portland Group C compiler -+ pgcc* | pgc++*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; -@@ -18386,7 +18386,7 @@ - lt_prog_compiler_pic_GCJ='-KPIC' - lt_prog_compiler_static_GCJ='-static' - ;; -- pgcc* | pgf77* | pgf90* | pgf95*) -+ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_GCJ='-Wl,' -@@ -18822,7 +18822,7 @@ - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in -- pgcc*) # Portland Group C compiler -+ pgcc* | pgc++*) # Portland Group C compiler - whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; -diff -uNr boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 ---- boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 2016-12-22 07:33:21.000000000 -0500 -+++ boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 2017-05-31 13:02:56.629643895 -0400 -@@ -3325,7 +3325,7 @@ - _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; -- pgCC*) -+ pgc++*) - # Portland Group C++ compiler - _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' -@@ -4977,7 +4977,7 @@ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; -- pgCC*) -+ pgc++*) - # Portland Group C++ compiler. - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' -@@ -5225,7 +5225,7 @@ - _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; -- pgcc* | pgf77* | pgf90* | pgf95*) -+ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' -diff -uNr boost_1_63_0/tools/build/src/tools/pgi.jam boost_1_63_0/tools/build/src/tools/pgi.jam ---- boost_1_63_0/tools/build/src/tools/pgi.jam 2016-12-22 07:33:21.000000000 -0500 -+++ boost_1_63_0/tools/build/src/tools/pgi.jam 2017-05-31 20:25:19.726296130 -0400 -@@ -25,7 +25,7 @@ - { - local condition = [ common.check-init-parameters pgi : version $(version) ] ; - -- local l_command = [ common.get-invocation-command pgi : pgCC : $(command) ] ; -+ local l_command = [ common.get-invocation-command pgi : pgc++ : $(command) ] ; - - common.handle-options pgi : $(condition) : $(l_command) : $(options) ; - -@@ -36,17 +36,10 @@ - flags pgi.compile DEFINES $(condition) : - [ feature.get-values : $(options) ] : unchecked ; - -- # IOV_MAX support -- flags pgi.compile DEFINES $(condition) : __need_IOV_MAX : unchecked ; -- - # set link flags - flags pgi.link FINDLIBS-ST : [ - feature.get-values : $(options) ] : unchecked ; - -- # always link lib rt to resolve clock_gettime() -- flags pgi.link FINDLIBS-SA : rt [ -- feature.get-values : $(options) ] : unchecked ; -- - gcc.init-link-flags pgi gnu $(condition) ; - } - -@@ -56,18 +49,19 @@ - generators.register-fortran-compiler pgi.compile.fortran : FORTRAN : OBJ : pgi ; - - # Declare flags and actions for compilation --flags pgi.compile OPTIONS : -Kieee ; --flags pgi.compile OPTIONS shared : -fpic -fPIC ; -+flags pgi.compile OPTIONS shared : -fpic ; - flags pgi.compile OPTIONS on : -gopt ; --flags pgi.compile OPTIONS on : -xprofile=tcov ; --flags pgi.compile OPTIONS speed : -fast -Mx,8,0x10000000 ; --flags pgi.compile OPTIONS space : -xO2 -xspace ; --# flags pgi.compile OPTIONS multi : -mt ; -+flags pgi.compile OPTIONS off : -O0 ; -+flags pgi.compile OPTIONS speed : -fast ; -+flags pgi.compile OPTIONS space : -fast ; - - flags pgi.compile OPTIONS off : -Minform=severe ; - flags pgi.compile OPTIONS on : -Minform=warn ; -+flags pgi.compile OPTIONS on : -Werror ; - - flags pgi.compile.c++ OPTIONS off : -INLINE:none ; -+flags pgi.compile.c++ OPTIONS off : --no_rtti ; -+flags pgi.compile.c++ OPTIONS off : --no_exceptions ; - - flags pgi.compile OPTIONS ; - flags pgi.compile.c++ OPTIONS ; -@@ -95,9 +89,8 @@ - flags pgi.link OPTIONS on : -gopt ; - # Strip the binary when no debugging is needed - flags pgi.link OPTIONS off : -s ; --flags pgi.link OPTIONS on : -xprofile=tcov ; - flags pgi.link OPTIONS ; --flags pgi.link OPTIONS shared : -fpic -fPIC ; -+flags pgi.link OPTIONS shared : -fpic ; - flags pgi.link LINKPATH ; - flags pgi.link FINDLIBS-ST ; - flags pgi.link FINDLIBS-SA ; -@@ -107,24 +100,14 @@ - flags pgi.link LINK-RUNTIME shared : dynamic ; - flags pgi.link RPATH ; - --# On gcc, there are separate options for dll path at runtime and --# link time. On Solaris, there's only one: -R, so we have to use --# it, even though it's bad idea. --flags pgi.link RPATH ; -- - rule link ( targets * : sources * : properties * ) - { - SPACE on $(targets) = " " ; - } - --# reddish can only link statically and, somehow, the presence of -Bdynamic on the link line --# marks the executable as a dynamically linked exec even though no dynamic libraries are supplied. --# Yod on redstorm refuses to load an executable that is dynamically linked. --# removing the dynamic link options should get us where we need to be on redstorm. --# "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME) - actions link bind LIBRARIES - { -- "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bstatic -l$(FINDLIBS-ST) -Bdynamic -l$(FINDLIBS-SA) -B$(LINK-RUNTIME) -+ "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA) - } - - # Slight mods for dlls -@@ -133,11 +116,10 @@ - SPACE on $(targets) = " " ; - } - --# "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" -h$(<[1]:D=) -G "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME) - - actions link.dll bind LIBRARIES - { -- "$(CONFIG_COMMAND)" $(OPTIONS) -shared -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" -Wl,-h -Wl,$(<[1]:D=) "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME) -+ "$(CONFIG_COMMAND)" $(OPTIONS) -shared -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST) - } - - actions updated together piecemeal pgi.archive diff --git a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch deleted file mode 100644 index 3bfb989f807ad7..00000000000000 --- a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch +++ /dev/null @@ -1,250 +0,0 @@ -diff -uNr boost_1_63_0/boost/archive/archive_exception.hpp boost_1_63_0/boost/archive/archive_exception.hpp ---- boost_1_63_0/boost/archive/archive_exception.hpp 2016-12-22 07:33:19.000000000 -0500 -+++ boost_1_63_0/boost/archive/archive_exception.hpp 2017-06-01 22:07:26.013983567 -0400 -@@ -42,13 +42,6 @@ - class BOOST_SYMBOL_VISIBLE archive_exception : - public virtual std::exception - { --private: -- char m_buffer[128]; --protected: -- BOOST_ARCHIVE_DECL unsigned int -- append(unsigned int l, const char * a); -- BOOST_ARCHIVE_DECL -- archive_exception() BOOST_NOEXCEPT; - public: - typedef enum { - no_exception, // initialized without code -@@ -90,6 +83,15 @@ - BOOST_ARCHIVE_DECL archive_exception(archive_exception const &) BOOST_NOEXCEPT ; - virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; - virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW ; -+protected: -+ BOOST_ARCHIVE_DECL unsigned int -+ append(unsigned int l, const char * a); -+ BOOST_ARCHIVE_DECL -+ archive_exception() BOOST_NOEXCEPT; -+private: -+ char m_buffer[128]; -+ BOOST_ARCHIVE_DECL void -+ pgi_bug_workaround_init(archive_exception *, const char *, const char *); - }; - - }// namespace archive -diff -uNr boost_1_63_0/boost/archive/xml_archive_exception.hpp boost_1_63_0/boost/archive/xml_archive_exception.hpp ---- boost_1_63_0/boost/archive/xml_archive_exception.hpp 2016-12-22 07:33:19.000000000 -0500 -+++ boost_1_63_0/boost/archive/xml_archive_exception.hpp 2017-05-31 21:02:03.373700156 -0400 -@@ -47,6 +47,9 @@ - ); - BOOST_ARCHIVE_DECL xml_archive_exception(xml_archive_exception const &) ; - virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; -+private: -+ BOOST_ARCHIVE_DECL void -+ pgi_bug_workaround_init_xml(xml_archive_exception *, exception_code, const char *, const char *); - }; - - }// namespace archive -diff -uNr boost_1_63_0/libs/serialization/src/archive_exception.cpp boost_1_63_0/libs/serialization/src/archive_exception.cpp ---- boost_1_63_0/libs/serialization/src/archive_exception.cpp 2016-12-22 07:33:19.000000000 -0500 -+++ boost_1_63_0/libs/serialization/src/archive_exception.cpp 2017-06-01 22:06:14.193128909 -0400 -@@ -37,83 +37,90 @@ - } - - BOOST_ARCHIVE_DECL --archive_exception::archive_exception( -- exception_code c, -- const char * e1, -- const char * e2 --) BOOST_NOEXCEPT : -- code(c) -+void -+archive_exception::pgi_bug_workaround_init(archive_exception *new_object, const char *e1, const char *e2) - { - unsigned int length = 0; -- switch(code){ -+ switch(new_object->code){ - case no_exception: -- length = append(length, "uninitialized exception"); -+ length = new_object->append(length, "uninitialized exception"); - break; -- case unregistered_class: -- length = append(length, "unregistered class"); -+ case archive_exception::unregistered_class: -+ length = new_object->append(length, "unregistered class"); - if(NULL != e1){ -- length = append(length, " - "); -- length = append(length, e1); -+ length = new_object->append(length, " - "); -+ length = new_object->append(length, e1); - } - break; - case invalid_signature: -- length = append(length, "invalid signature"); -+ length = new_object->append(length, "invalid signature"); - break; - case unsupported_version: -- length = append(length, "unsupported version"); -+ length = new_object->append(length, "unsupported version"); - break; - case pointer_conflict: -- length = append(length, "pointer conflict"); -+ length = new_object->append(length, "pointer conflict"); - break; - case incompatible_native_format: -- length = append(length, "incompatible native format"); -+ length = new_object->append(length, "incompatible native format"); - if(NULL != e1){ -- length = append(length, " - "); -- length = append(length, e1); -+ length = new_object->append(length, " - "); -+ length = new_object->append(length, e1); - } - break; - case array_size_too_short: -- length = append(length, "array size too short"); -+ length = new_object->append(length, "array size too short"); - break; - case input_stream_error: -- length = append(length, "input stream error"); -+ length = new_object->append(length, "input stream error"); - break; - case invalid_class_name: -- length = append(length, "class name too long"); -+ length = new_object->append(length, "class name too long"); - break; - case unregistered_cast: -- length = append(length, "unregistered void cast "); -- length = append(length, (NULL != e1) ? e1 : "?"); -- length = append(length, "<-"); -- length = append(length, (NULL != e2) ? e2 : "?"); -+ length = new_object->append(length, "unregistered void cast "); -+ length = new_object->append(length, (NULL != e1) ? e1 : "?"); -+ length = new_object->append(length, "<-"); -+ length = new_object->append(length, (NULL != e2) ? e2 : "?"); - break; - case unsupported_class_version: -- length = append(length, "class version "); -- length = append(length, (NULL != e1) ? e1 : ""); -+ length = new_object->append(length, "class version "); -+ length = new_object->append(length, (NULL != e1) ? e1 : ""); - break; - case other_exception: - // if get here - it indicates a derived exception - // was sliced by passing by value in catch -- length = append(length, "unknown derived exception"); -+ length = new_object->append(length, "unknown derived exception"); - break; - case multiple_code_instantiation: -- length = append(length, "code instantiated in more than one module"); -+ length = new_object->append(length, "code instantiated in more than one module"); - if(NULL != e1){ -- length = append(length, " - "); -- length = append(length, e1); -+ length = new_object->append(length, " - "); -+ length = new_object->append(length, e1); - } - break; - case output_stream_error: -- length = append(length, "output stream error"); -+ length = new_object->append(length, "output stream error"); - break; - default: - BOOST_ASSERT(false); -- length = append(length, "programming error"); -+ length = new_object->append(length, "programming error"); - break; - } - } - - BOOST_ARCHIVE_DECL -+archive_exception::archive_exception( -+ exception_code c, -+ const char * e1, -+ const char * e2 -+) BOOST_NOEXCEPT : -+ code(c) -+{ -+ pgi_bug_workaround_init(this, e1, e2); -+} -+ -+BOOST_ARCHIVE_DECL - archive_exception::archive_exception(archive_exception const & oth) BOOST_NOEXCEPT : - std::exception(oth), - code(oth.code) -diff -uNr boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp ---- boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp 2016-12-22 07:33:19.000000000 -0500 -+++ boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp 2017-05-31 20:58:15.650876427 -0400 -@@ -26,41 +26,48 @@ - namespace archive { - - BOOST_ARCHIVE_DECL -+void -+xml_archive_exception::pgi_bug_workaround_init_xml(xml_archive_exception *new_object, exception_code c, const char *e1, const char *e2) -+{ -+ switch(c){ -+ case xml_archive_parsing_error: -+ new_object->append(0, "unrecognized XML syntax"); -+ break; -+ case xml_archive_tag_mismatch:{ -+ unsigned int l; -+ l = new_object->append(0, "XML start/end tag mismatch"); -+ if(NULL != e1){ -+ l = new_object->append(l, " - "); -+ new_object->append(l, e1); -+ } -+ break; -+ } -+ case xml_archive_tag_name_error: -+ new_object->append(0, "Invalid XML tag name"); -+ break; -+ default: -+ BOOST_ASSERT(false); -+ new_object->append(0, "programming error"); -+ break; -+ } -+} -+ -+BOOST_ARCHIVE_DECL - xml_archive_exception::xml_archive_exception( - exception_code c, - const char * e1, - const char * e2 - ) : - archive_exception(other_exception, e1, e2) -- { -- switch(c){ -- case xml_archive_parsing_error: -- archive_exception::append(0, "unrecognized XML syntax"); -- break; -- case xml_archive_tag_mismatch:{ -- unsigned int l; -- l = archive_exception::append(0, "XML start/end tag mismatch"); -- if(NULL != e1){ -- l = archive_exception::append(l, " - "); -- archive_exception::append(l, e1); -- } -- break; -- } -- case xml_archive_tag_name_error: -- archive_exception::append(0, "Invalid XML tag name"); -- break; -- default: -- BOOST_ASSERT(false); -- archive_exception::append(0, "programming error"); -- break; -- } -- } -+{ -+ pgi_bug_workaround_init_xml(this, c, e1, e2); -+} - - BOOST_ARCHIVE_DECL - xml_archive_exception::xml_archive_exception(xml_archive_exception const & oth) : - archive_exception(oth) -- { -- } -+{ -+} - - BOOST_ARCHIVE_DECL xml_archive_exception::~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW {} - diff --git a/var/spack/repos/builtin/packages/boost/boost_1.67.0_pgi.patch b/var/spack/repos/builtin/packages/boost/boost_1.67.0_pgi.patch deleted file mode 100644 index b2c7acaf6bedd2..00000000000000 --- a/var/spack/repos/builtin/packages/boost/boost_1.67.0_pgi.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- a/libs/filesystem/src/operations.cpp -+++ b/libs/filesystem/src/operations.cpp -@@ -2056,10 +2056,6 @@ - return ok; - } - --#if defined(__PGI) && defined(__USE_FILE_OFFSET64) --#define dirent dirent64 --#endif -- - error_code dir_itr_first(void *& handle, void *& buffer, - const char* dir, string& target, - fs::file_status &, fs::file_status &) diff --git a/var/spack/repos/builtin/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py index 41a7859c5ba381..2bec54f32179a3 100644 --- a/var/spack/repos/builtin/packages/boost/package.py +++ b/var/spack/repos/builtin/packages/boost/package.py @@ -154,8 +154,12 @@ class Boost(Package): "wave", ] + # Add any extra requirements for specific + all_libs_opts = {"charconv": {"when": "@1.85.0:"}, "cobalt": {"when": "@1.84.0:"}} + for lib in all_libs: - variant(lib, default=False, description="Compile with {0} library".format(lib)) + lib_opts = all_libs_opts.get(lib, {}) + variant(lib, default=False, description="Compile with {0} library".format(lib), **lib_opts) @property def libs(self): @@ -242,6 +246,7 @@ def libs(self): depends_on("icu4c cxxstd=14", when="+icu cxxstd=14") depends_on("icu4c cxxstd=17", when="+icu cxxstd=17") conflicts("cxxstd=98", when="+icu") # Requires c++11 at least + conflicts("+locale ~icu") # Boost.Locale "strongly recommends" icu, so enforce it depends_on("python", when="+python") # https://github.com/boostorg/python/commit/cbd2d9f033c61d29d0a1df14951f4ec91e7d05cd @@ -254,7 +259,7 @@ def libs(self): depends_on("xz", when="+iostreams") depends_on("py-numpy", when="+numpy", type=("build", "run")) # https://github.com/boostorg/python/issues/431 - depends_on("py-numpy@:1", when="@:1.85+numpy", type=("build", "run")) + depends_on("py-numpy@:1", when="@:1.86+numpy", type=("build", "run")) # Improve the error message when the context-impl variant is conflicting conflicts("context-impl=fcontext", when="@:1.65.0") @@ -328,11 +333,6 @@ def libs(self): # Patch fix from https://svn.boost.org/trac/boost/ticket/10125 patch("call_once_variadic.patch", when="@1.54.0:1.55%gcc@5.0:") - # Patch fix for PGI compiler - patch("boost_1.67.0_pgi.patch", when="@1.67.0:1.68%pgi") - patch("boost_1.63.0_pgi.patch", when="@1.63.0%pgi") - patch("boost_1.63.0_pgi_17.4_workaround.patch", when="@1.63.0%pgi@17.4") - # Patch to override the PGI toolset when using the NVIDIA compilers patch("nvhpc-1.74.patch", when="@1.74.0:1.75%nvhpc") patch("nvhpc-1.76.patch", when="@1.76.0:1.76%nvhpc") @@ -451,7 +451,6 @@ def patch(self): filter_file("BOOST_LOG_USE_AVX2", "", "libs/log/build/Jamfile.v2") filter_file("dump_ssse3", "", "libs/log/build/Jamfile.v2") filter_file("BOOST_LOG_USE_SSSE3", "", "libs/log/build/Jamfile.v2") - filter_file("-fast", "-O1", "tools/build/src/tools/pgi.jam") filter_file("-fast", "-O1", "tools/build/src/engine/build.sh") @@ -482,7 +481,6 @@ def determine_toolset(self, spec): "%arm": "clang", "%xl": "xlcpp", "%xl_r": "xlcpp", - "%pgi": "pgi", "%nvhpc": "pgi", "%fj": "clang", } @@ -627,9 +625,13 @@ def determine_b2_options(self, spec, options): options.append("runtime-link=shared") else: options.append("runtime-link=static") + + # Any lib that is in self.all_libs AND in the variants dictionary + # AND is set to False should be added to options in a --without flag for lib in self.all_libs: - if f"+{lib}" not in spec: - options.append(f"--without-{lib}") + if lib not in self.spec.variants.dict or self.spec.satisfies(f"+{lib}"): + continue + options.append(f"--without-{lib}") if not spec.satisfies("@:1.75 %intel") and not spec.satisfies("platform=windows"): # When building any version >= 1.76, the toolset must be specified. @@ -830,18 +832,6 @@ def is_64bit(): def setup_run_environment(self, env): env.set("BOOST_ROOT", self.prefix) - def setup_dependent_package(self, module, dependent_spec): - # Disable find package's config mode for versions of Boost that - # didn't provide it. See https://github.com/spack/spack/issues/20169 - # and https://cmake.org/cmake/help/latest/module/FindBoost.html - if self.spec.satisfies("boost@:1.69.0") and dependent_spec.satisfies("build_system=cmake"): - args_fn = type(dependent_spec.package.builder).cmake_args - - def _cmake_args(self): - return ["-DBoost_NO_BOOST_CMAKE=ON"] + args_fn(self) - - type(dependent_spec.package.builder).cmake_args = _cmake_args - def setup_dependent_build_environment(self, env, dependent_spec): if "+context" in self.spec and "context-impl" in self.spec.variants: context_impl = self.spec.variants["context-impl"].value diff --git a/var/spack/repos/builtin/packages/bufr-query/package.py b/var/spack/repos/builtin/packages/bufr-query/package.py index bf79f5f581bd82..f6557eb9b40f87 100644 --- a/var/spack/repos/builtin/packages/bufr-query/package.py +++ b/var/spack/repos/builtin/packages/bufr-query/package.py @@ -18,6 +18,7 @@ class BufrQuery(CMakePackage, PythonExtension): license("Apache-2.0", checked_by="srherbener") + version("0.0.4", sha256="cc21a298c03ee3a8938823301606e91c7b321005da284ebf2c9b25044bfcbad8") version("0.0.3", sha256="f2952a190cc1d7714a3bfe481fb1545459639ba304fc31b941062b471dea1d41") version("0.0.2", sha256="b87a128246e79e3c76e3158d89823e2ae38e9ee1a5a81b6f7b423837bdb93a1f") version("0.0.1", sha256="001990d864533c101b93d1c351edf50cf8b5ccc575e442d174735f6c332d3d03") diff --git a/var/spack/repos/builtin/packages/bufr/package.py b/var/spack/repos/builtin/packages/bufr/package.py index be3431fe6a1b11..1d74b9aaf6b44c 100644 --- a/var/spack/repos/builtin/packages/bufr/package.py +++ b/var/spack/repos/builtin/packages/bufr/package.py @@ -129,5 +129,5 @@ def setup_run_environment(self, env): self._setup_bufr_environment(env, suffix) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/butterflypack/package.py b/var/spack/repos/builtin/packages/butterflypack/package.py index 7fc6cbd77b9648..c36d1d3a4bd08d 100644 --- a/var/spack/repos/builtin/packages/butterflypack/package.py +++ b/var/spack/repos/builtin/packages/butterflypack/package.py @@ -28,6 +28,7 @@ class Butterflypack(CMakePackage): license("BSD-3-Clause-LBNL") version("master", branch="master") + version("3.2.0", sha256="0f1570947f0a7c0e130bbec3abbb2fa275ae453dc3f428e7a3a2265fecafe1ae") version("2.4.0", sha256="12d04e7101b2c8292b5c62d9f42b5cd1e8a3c5af639d2665596e3e4255fd0804") version("2.2.2", sha256="73f67073e4291877f1eee19483a8a7b3c761eaf79a75805d52105ceedead85ea") version("2.2.1", sha256="4cedc2896a6b368773ce4f9003aa2c0230baf56a4464a6b899a155e01406a232") @@ -61,9 +62,9 @@ class Butterflypack(CMakePackage): # https://github.com/spack/spack/issues/31818 patch("qopenmp-for-oneapi.patch", when="@2.1.1 %oneapi") - patch("longline.patch", when="%fj") - patch("fjfortran.patch", when="%fj") - patch("isnan.patch", when="%fj") + patch("longline.patch", when="@1.2.0 %fj") + patch("fjfortran.patch", when="@1.2.0 %fj") + patch("isnan.patch", when="@1.2.0 %fj") def cmake_args(self): spec = self.spec diff --git a/var/spack/repos/builtin/packages/byte-lite/package.py b/var/spack/repos/builtin/packages/byte-lite/package.py new file mode 100644 index 00000000000000..44dfe3b6417615 --- /dev/null +++ b/var/spack/repos/builtin/packages/byte-lite/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class ByteLite(CMakePackage): + """byte lite - A C++17-like byte type for C++98, C++11 and later + in a single-file header-only library""" + + homepage = "https://github.com/martinmoene/byte-lite" + url = "https://github.com/martinmoene/byte-lite/archive/refs/tags/v0.3.0.tar.gz" + + license("BSL-1.0", checked_by="pranav-sivaraman") + + version("0.3.0", sha256="1a19e237b12bb098297232b0a74ec08c18ac07ac5ac6e659c1d5d8a4ed0e4813") + + depends_on("cxx", type="build") + depends_on("cmake@3.5:", type="build") + + conflicts("%gcc@:4.7") + conflicts("%clang@:3.4") + conflicts("%apple-clang@:5") + conflicts("%mvsc@:5") + + def cmake_args(self): + return [self.define("BYTE_LITE_OPT_BUILD_TESTS", self.run_tests)] diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py index 7bcb0bfc34244a..f71c2bd0c5fe66 100644 --- a/var/spack/repos/builtin/packages/bzip2/package.py +++ b/var/spack/repos/builtin/packages/bzip2/package.py @@ -84,7 +84,7 @@ def patch(self): filter_file(r"^CC=gcc", "CC={0}".format(spack_cc), "Makefile-libbz2_so") # The Makefiles use GCC flags that are incompatible with PGI - if self.spec.satisfies("%pgi") or self.spec.satisfies("%nvhpc@:20.11"): + if self.spec.satisfies("%nvhpc@:20.11"): filter_file("-Wall -Winline", "-Minform=inform", "Makefile") filter_file("-Wall -Winline", "-Minform=inform", "Makefile-libbz2_so") diff --git a/var/spack/repos/builtin/packages/cabana/package.py b/var/spack/repos/builtin/packages/cabana/package.py index 42852dc12320c0..3905b30b294afe 100644 --- a/var/spack/repos/builtin/packages/cabana/package.py +++ b/var/spack/repos/builtin/packages/cabana/package.py @@ -93,7 +93,7 @@ class Cabana(CMakePackage, CudaPackage, ROCmPackage): depends_on("kokkos+cuda_lambda@4.1:", when="+cuda@0.7:") # Dependencies for subpackages - depends_on("all", when="@0.5.0:+all") + depends_on("all-library", when="@0.5.0:+all") depends_on("arborx", when="@0.3.0:+arborx") depends_on("hypre-cmake@2.22.0:", when="@0.4.0:+hypre") depends_on("hypre-cmake@2.22.1:", when="@0.5.0:+hypre") diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py index e165899674a2b9..5cf3376f0d5e12 100644 --- a/var/spack/repos/builtin/packages/caliper/package.py +++ b/var/spack/repos/builtin/packages/caliper/package.py @@ -101,6 +101,10 @@ class Caliper(CachedCMakePackage, CudaPackage, ROCmPackage): variant("vtune", default=False, description="Enable Intel Vtune support") variant("kokkos", default=True, when="@2.3.0:", description="Enable Kokkos profiling support") variant("tests", default=False, description="Enable tests") + variant("tools", default=True, description="Enable tools") + + # TODO change the 'when' argument for the next release of Caliper + variant("python", default=False, when="@master", description="Build Python bindings") depends_on("adiak@0.1:0", when="@2.2:2.10 +adiak") depends_on("adiak@0.4:0", when="@2.11: +adiak") @@ -121,6 +125,9 @@ class Caliper(CachedCMakePackage, CudaPackage, ROCmPackage): depends_on("cmake", type="build") depends_on("python", type="build") + depends_on("python@3", when="+python", type=("build", "link", "run")) + depends_on("py-pybind11", when="+python", type=("build", "link", "run")) + # sosflow support not yet in 2.0 conflicts("+sosflow", "@2.0.0:2.11") conflicts("+adiak", "@:2.1") @@ -151,6 +158,7 @@ def initconfig_compiler_entries(self): entries.append(cmake_cache_option("BUILD_SHARED_LIBS", spec.satisfies("+shared"))) entries.append(cmake_cache_option("BUILD_TESTING", spec.satisfies("+tests"))) + entries.append(cmake_cache_option("WITH_TOOLS", spec.satisfies("+tools"))) entries.append(cmake_cache_option("BUILD_DOCS", False)) entries.append(cmake_cache_path("PYTHON_EXECUTABLE", spec["python"].command.path)) @@ -228,6 +236,7 @@ def initconfig_package_entries(self): entries.append(cmake_cache_option("WITH_KOKKOS", spec.satisfies("+kokkos"))) entries.append(cmake_cache_option("WITH_VARIORUM", spec.satisfies("+variorum"))) entries.append(cmake_cache_option("WITH_VTUNE", spec.satisfies("+vtune"))) + entries.append(cmake_cache_option("WITH_PYTHON_BINDINGS", spec.satisfies("+python"))) # -DWITH_CALLPATH was renamed -DWITH_LIBUNWIND in 2.5 callpath_flag = "LIBUNWIND" if spec.satisfies("@2.5:") else "CALLPATH" @@ -238,6 +247,11 @@ def initconfig_package_entries(self): def cmake_args(self): return [] + def setup_run_environment(self, env): + if self.spec.satisfies("+python"): + env.prepend_path("PYTHONPATH", self.spec.prefix.join(python_platlib)) + env.prepend_path("PYTHONPATH", self.spec.prefix.join(python_purelib)) + @run_after("install") def cache_test_sources(self): """Copy the example source files after the package is installed to an diff --git a/var/spack/repos/builtin/packages/callpath/package.py b/var/spack/repos/builtin/packages/callpath/package.py index 3b36222c97e6fc..2044889336d390 100644 --- a/var/spack/repos/builtin/packages/callpath/package.py +++ b/var/spack/repos/builtin/packages/callpath/package.py @@ -17,7 +17,8 @@ class Callpath(CMakePackage): version("1.0.2", sha256="cbe42bba8b9dda259dcbe7e16ebd7ecd005eabf7e9ccf169535b03110df75c84") version("1.0.1", sha256="9bd9723126f80d0b518c28e5298ad0fa8d8dbc6a3f03fee5ae5449cf4c9a550f") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("elf", type="link") depends_on("libdwarf") diff --git a/var/spack/repos/builtin/packages/camp/package.py b/var/spack/repos/builtin/packages/camp/package.py index 7e7c305b18d9da..71327292e6a24a 100644 --- a/var/spack/repos/builtin/packages/camp/package.py +++ b/var/spack/repos/builtin/packages/camp/package.py @@ -54,7 +54,8 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage): version("0.2.2", sha256="194d38b57e50e3494482a7f94940b27f37a2bee8291f2574d64db342b981d819") version("0.1.0", sha256="fd4f0f2a60b82a12a1d9f943f8893dc6fe770db493f8fae5ef6f7d0c439bebcc") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") # TODO: figure out gtest dependency and then set this default True. variant("tests", default=False, description="Build tests") diff --git a/var/spack/repos/builtin/packages/cassandra/package.py b/var/spack/repos/builtin/packages/cassandra/package.py index 36f89c148d8b91..7464bef4bdb466 100644 --- a/var/spack/repos/builtin/packages/cassandra/package.py +++ b/var/spack/repos/builtin/packages/cassandra/package.py @@ -12,25 +12,30 @@ class Cassandra(Package): organized into tables with a required primary key. """ - homepage = "https://github.com/apache/cassandra" + homepage = "https://cassandra.apache.org/" url = "https://archive.apache.org/dist/cassandra/4.0.1/apache-cassandra-4.0.1-bin.tar.gz" - license("Apache-2.0") - - version("4.0.1", sha256="ed7022e30d9b77d9ce1072f8de95ab01ef7c5c6ed30f304e413dd5a3f92a52f8") - version("3.11.11", sha256="a5639af781005410995a96f512d505c1def7b70cf5bbbec52e7cd5ff31b6cea3") - version( - "3.11.6", - sha256="ce34edebd1b6bb35216ae97bd06d3efc338c05b273b78267556a99f85d30e45b", - deprecated=True, - ) - version( - "3.11.5", - sha256="a765adcaa42a6c881f5e79d030854d082900992cc11da40eee413bb235970a6a", - deprecated=True, - ) - version("2.2.19", sha256="5496c0254a66b6d50bde7999d1bab9129b0406b71ad3318558f4d7dbfbed0ab9") - + license("Apache-2.0", checked_by="wdconinc") + + version("5.0.1", sha256="73f4c807b0aa4036500d5dc54e30ef82bcf549ab1917eff2bbc7189b0337ea84") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2021-44521 + version("4.0.1", sha256="ed7022e30d9b77d9ce1072f8de95ab01ef7c5c6ed30f304e413dd5a3f92a52f8") + version( + "3.11.11", sha256="a5639af781005410995a96f512d505c1def7b70cf5bbbec52e7cd5ff31b6cea3" + ) + version( + "3.11.6", sha256="ce34edebd1b6bb35216ae97bd06d3efc338c05b273b78267556a99f85d30e45b" + ) + version( + "3.11.5", sha256="a765adcaa42a6c881f5e79d030854d082900992cc11da40eee413bb235970a6a" + ) + # https://nvd.nist.gov/vuln/detail/CVE-2020-17516 + version( + "2.2.19", sha256="5496c0254a66b6d50bde7999d1bab9129b0406b71ad3318558f4d7dbfbed0ab9" + ) + + depends_on("java@11:", type=("build", "run"), when="@5:") depends_on("java@9:", type=("build", "run"), when="@4.0.0:") depends_on("java@:8", type=("build", "run"), when="@:3.11.11") diff --git a/var/spack/repos/builtin/packages/cbench/package.py b/var/spack/repos/builtin/packages/cbench/package.py index ad598b6bb7a318..1668faa104e38f 100644 --- a/var/spack/repos/builtin/packages/cbench/package.py +++ b/var/spack/repos/builtin/packages/cbench/package.py @@ -47,7 +47,7 @@ def setup_build_environment(self, env): env.set("MPIHOME", self.spec["mpi"].prefix) # Pick the compiler collection/chain you want to compile with. - # Examples include: intel, gcc, pgi. + # Examples include: intel, gcc. env.set("COMPILERCOLLECTION", self.compiler.name) # Linking flags for BLAS/LAPACK and FFTW diff --git a/var/spack/repos/builtin/packages/cbflib/package.py b/var/spack/repos/builtin/packages/cbflib/package.py index d883fdcd5eeef8..5277b3a12488e5 100644 --- a/var/spack/repos/builtin/packages/cbflib/package.py +++ b/var/spack/repos/builtin/packages/cbflib/package.py @@ -49,8 +49,7 @@ def edit(self, spec, prefix): mf.filter(r"^C\+\+.+", "C++ = {0}".format(spack_cxx)) mf.filter("gfortran", spack_fc) mf.filter(r"^INSTALLDIR .+", "INSTALLDIR = {0}".format(prefix)) - real_version = Version(self.compiler.get_real_version()) - if real_version >= Version("10"): + if self.spec.satisfies("%gcc@10:"): mf.filter(r"^F90FLAGS[ \t]*=[ \t]*(.+)", "F90FLAGS = \\1 -fallow-invalid-boz") def build(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/cbtf/package.py b/var/spack/repos/builtin/packages/cbtf/package.py index dcd00bb0f9f392..7daccff49836a0 100644 --- a/var/spack/repos/builtin/packages/cbtf/package.py +++ b/var/spack/repos/builtin/packages/cbtf/package.py @@ -4,7 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * -from spack.pkg.builtin.boost import Boost class Cbtf(CMakePackage): @@ -48,12 +47,7 @@ class Cbtf(CMakePackage): # for rpc depends_on("libtirpc", type="link") - depends_on("boost@1.70.0:") - - # TODO: replace this with an explicit list of components of Boost, - # for instance depends_on('boost +filesystem') - # See https://github.com/spack/spack/pull/22303 for reference - depends_on(Boost.with_default_variants) + depends_on("boost@1.70.0:1.84.0+date_time+filesystem+test+thread") # For MRNet depends_on("mrnet@5.0.1-3:+lwthreads", when="@develop") diff --git a/var/spack/repos/builtin/packages/ceed/package.py b/var/spack/repos/builtin/packages/ceed/package.py index d346bb667ed865..7eaf0411186840 100644 --- a/var/spack/repos/builtin/packages/ceed/package.py +++ b/var/spack/repos/builtin/packages/ceed/package.py @@ -240,7 +240,7 @@ class Ceed(BundlePackage, CudaPackage, ROCmPackage): # Omega_h # ceed-5.0 - depends_on("omega-h@scorec.10.1.0", when="@5.0.0+omega-h") + depends_on("omega-h@10.1.0", when="@5.0.0+omega-h") depends_on("omega-h~trilinos", when="@5.0.0+omega-h+quickbuild") # MFEM, Laghos, Remhos diff --git a/var/spack/repos/builtin/packages/celeritas/package.py b/var/spack/repos/builtin/packages/celeritas/package.py index b83a96a9e9c3f4..b0e605ffc3caf5 100644 --- a/var/spack/repos/builtin/packages/celeritas/package.py +++ b/var/spack/repos/builtin/packages/celeritas/package.py @@ -20,67 +20,35 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage): license("Apache-2.0") version("0.5.0", sha256="4a8834224d96fd01897e5872ac109f60d91ef0bd7b63fac05a73dcdb61a5530e") - version("0.4.4", sha256="8b5ae63aa2d50c2ecf48d752424e4a33c50c07d9f0f5ca5448246de3286fd836") - version("0.4.3", sha256="b4f603dce1dc9c4894ea4c86f6574026ea8536714982e7dc6dff7472c925c892") - version("0.4.2", sha256="eeca9705413f5e16e0fb81154e042600c8df125af7049912757feb01d43730e2") - version("0.4.1", sha256="24e5c15eb9eec45f52d94a6719ae3505388b49d409cb7e26c875c70ac409bd2c") version( - "0.4.0", - sha256="8b8eaef84641eeca0fc40321d358205fc9d51e3c6dc7bd1bf03218c1919c774e", - deprecated=True, - ) - version("0.3.2", sha256="65a33de2518716638375df259d9dfc4d68b821ba1110f56b24c823ef5c5df249") - version( - "0.3.1", - sha256="0f1effab306856d66f5079e8cadcb63e8c1f8a79245b94bf44b89251b3fb0cf0", - deprecated=True, - ) - version( - "0.3.0", - sha256="f9620b6bcd8c9b5324ef215f8e44461f915c3fff47bf85ae442c9dafacaa79ac", - deprecated=True, - ) - version("0.2.2", sha256="ba5e341d636e00e3d7dbac13a2016b97014917489f46b8b387a2adf9d9563872") - version( - "0.2.1", - sha256="b3717b43f70dd0da848139da4171ca7a887bb6777908845b6d953d47b1f4db41", + "0.4.4", + sha256="8b5ae63aa2d50c2ecf48d752424e4a33c50c07d9f0f5ca5448246de3286fd836", deprecated=True, ) version( - "0.2.0", - sha256="12af28fda0e482a9eba89781b4ead445cf6f170bc1b8d88cc814e49b1ec09e9f", + "0.4.3", + sha256="b4f603dce1dc9c4894ea4c86f6574026ea8536714982e7dc6dff7472c925c892", deprecated=True, ) - version("0.1.5", sha256="5e63b9ce7fcfe34a8938565b84453bce51fa6639d1ede13bb59d41de6431cef4") version( - "0.1.4", - sha256="ea82a03fc750a2a805f87afd9ac944109dd7537edb5c0c370f93d332d4cd47db", + "0.4.2", + sha256="eeca9705413f5e16e0fb81154e042600c8df125af7049912757feb01d43730e2", deprecated=True, ) version( - "0.1.3", - sha256="992c49a48adba884fe3933c9624da5bf480ef0694809430ae98903f2c28cc881", + "0.4.1", + sha256="24e5c15eb9eec45f52d94a6719ae3505388b49d409cb7e26c875c70ac409bd2c", deprecated=True, ) version( - "0.1.2", - sha256="d123ea2e34267adba387d46bae8c9a1146a2e047f87f2ea5f823878c1684678d", - deprecated=True, - ) - version( - "0.1.1", - sha256="a1d58e29226e89a2330d69c40049d61e7c885cf991824e60ff8c9ccc95fc5ec6", - deprecated=True, - ) - version( - "0.1.0", - sha256="46692977b9b31d73662252cc122d7f016f94139475788bca7fdcb97279b93af8", + "0.4.0", + sha256="8b8eaef84641eeca0fc40321d358205fc9d51e3c6dc7bd1bf03218c1919c774e", deprecated=True, ) depends_on("cxx", type="build") - _cxxstd_values = ("14", "17") + _cxxstd_values = ("17", "20") # Note: cuda and rocm variants are defined by mixin classes variant( @@ -107,13 +75,10 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage): depends_on("nlohmann-json") depends_on("geant4@10.5:", when="@0.4.2: +geant4") depends_on("geant4@10.5:11.1", when="@0.3.1:0.4.1 +geant4") - depends_on("geant4@10.6:11.1", when="@0.3.0 +geant4") - depends_on("geant4@10.6:11.0", when="@0.2.1:0.2 +geant4") - depends_on("geant4@10.7:11.0", when="@:0.2.0 +geant4") depends_on("hepmc3", when="+hepmc3") depends_on("root", when="+root") depends_on("swig@4.1:", when="+swig") - depends_on("vecgeom", when="+vecgeom") + depends_on("vecgeom@1.2.5:", when="+vecgeom") depends_on("python", type="build") depends_on("doxygen", type="build", when="+doc") @@ -125,20 +90,11 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage): depends_on("root cxxstd=" + _std, when="+root cxxstd=" + _std) depends_on("vecgeom cxxstd=" + _std, when="+vecgeom cxxstd=" + _std) - depends_on("vecgeom@1.2.5:", when="+vecgeom @0.4:") - depends_on("vecgeom +gdml@1.1.17:1", when="+vecgeom @:0.3") - depends_on("vecgeom +cuda", when="+vecgeom +cuda") + for _arch in CudaPackage.cuda_arch_values: + depends_on("vecgeom+cuda cuda_arch=" + _arch, when="+vecgeom +cuda cuda_arch=" + _arch) - conflicts("cxxstd=14", when="@0.3:") conflicts("+rocm", when="+cuda", msg="AMD and NVIDIA accelerators are incompatible") conflicts("+rocm", when="+vecgeom", msg="HIP support is only available with ORANGE") - conflicts("^vecgeom+shared@1.2.0", when="+vecgeom +cuda") - - patch( - "https://patch-diff.githubusercontent.com/raw/celeritas-project/celeritas/pull/830.patch?full_index=1", - sha256="9ac1929a95170b497aaac76f62146f313e4b31aea7271acac354270550d0d685", - when="@0.3.0 ^geant4@10", - ) def cmake_args(self): define = self.define diff --git a/var/spack/repos/builtin/packages/cereal/package.py b/var/spack/repos/builtin/packages/cereal/package.py index a53ddb79cedb0b..4a0be30b466bca 100644 --- a/var/spack/repos/builtin/packages/cereal/package.py +++ b/var/spack/repos/builtin/packages/cereal/package.py @@ -33,7 +33,8 @@ class Cereal(CMakePackage): version("1.0.0", sha256="51c31c84d4c9e410e56d8bfc3424076b3234f11aa349ac8cda3db9f18118c125") version("0.9.1", sha256="2a99722df9c3d0f75267f732808a4d7e564cb5a35318a3d1c00086e2ef139385") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") patch("Boost.patch", when="@:1.3.0") patch("Boost2.patch", when="@1.2.2:1.3.0") diff --git a/var/spack/repos/builtin/packages/cgal/package.py b/var/spack/repos/builtin/packages/cgal/package.py index 18170077580437..1e1f61afa3d603 100644 --- a/var/spack/repos/builtin/packages/cgal/package.py +++ b/var/spack/repos/builtin/packages/cgal/package.py @@ -17,6 +17,7 @@ class Cgal(CMakePackage): homepage = "https://www.cgal.org/" url = "https://github.com/CGAL/cgal/releases/download/v5.4.1/CGAL-5.4.1.tar.xz" + version("6.0.1", sha256="0acdfbf317c556630dd526f3253780f29b6ec9713ee92903e81b5c93c0f59b7f") version("5.6", sha256="dcab9b08a50a06a7cc2cc69a8a12200f8d8f391b9b8013ae476965c10b45161f") version("5.5.3", sha256="0a04f662693256328b05babfabb5e3a5b7db2f5a58d52e3c520df9d0828ddd73") version("5.5.2", sha256="b2b05d5616ecc69facdc24417cce0b04fb4321491d107db45103add520e3d8c3") @@ -33,16 +34,24 @@ class Cgal(CMakePackage): version("4.7", sha256="50bd0a1cad7a8957b09012f831eebaf7d670e2a3467e8f365ec0c71fa5436369") version("4.6.3", sha256="e338027b8767c0a7a6e4fd8679182d1b83b5b1a0da0a1fe4546e7c0ca094fc21") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + + # @5: is header only and doesn't build shared libs + variant( + "shared", default=True, description="Enables the build of shared libraries", when="@:4.14" + ) - variant("shared", default=True, description="Enables the build of shared libraries") variant( "build_type", default="Release", description="The build type to build", values=("Debug", "Release"), ) - variant("header_only", default=False, description="Install in header only mode") + + # header only is the default and only option for 5+ + # https://doc.cgal.org/latest/Manual/installation.html + variant("header_only", default=False, description="Install in header only mode", when="@:4.13") # ---- See "7 CGAL Libraries" at: # https://doc.cgal.org/latest/Manual/installation.html @@ -52,16 +61,32 @@ class Cgal(CMakePackage): # https://cs.nyu.edu/exact/core_pages/svn-core.html variant("core", default=False, description="Build the CORE library for algebraic numbers") variant("imageio", default=False, description="Build utilities to read/write image files") - variant("demos", default=False, description="Build CGAL demos") + variant("demos", default=False, description="Build CGAL demos", when="@:5") variant("eigen", default=True, description="Build with Eigen support") - depends_on("cmake@2.8.11:", type="build") + # Starting with cgal 6, GMP/MPFR are no longer mandatory and Core library + # is based on on Boost.Multiprecision. However, either GMP backend or Boost + # backend can be used. Downstream cmake users must also set -DCGAL_DISABLE_GMP=1 + # or the macro CMAKE_OVERRIDDEN_DEFAULT_ENT_BACKEND if GMP is disabled. + # This variant doesn't change how cgal is installed, but it does change spack to + # not depend on gmp & mpfr. + # More details here https://github.com/CGAL/cgal/issues/8606 + variant("gmp", default=True, description="Enable the GMP backend", when="@6:") + + # Upper bound follows CGAL's @6: CMakeLists.txt + depends_on("cmake@3.12:3.29", type="build", when="@6:") + depends_on("cmake@2.8.11:", type="build", when="@:5") # Essential Third Party Libraries depends_on("boost+exception+math+random+container", when="@5.0:") + depends_on("boost@1.72.0:+exception+math+random+container", when="@6:") depends_on("boost+thread+system", when="@:5.0") - depends_on("gmp") - depends_on("mpfr") + + depends_on("gmp", when="@:5") + depends_on("mpfr", when="@:5") + + depends_on("gmp", when="@6: +gmp") + depends_on("mpfr", when="@6: +gmp") # Required for CGAL_ImageIO # depends_on('opengl', when='+imageio') # not yet in Spack @@ -69,7 +94,10 @@ class Cgal(CMakePackage): # Optional to build CGAL_Qt5 (demos) # depends_on('opengl', when='+demos') # not yet in Spack - depends_on("qt@5:", when="+demos") + depends_on("qt@5:", when="@:5 +demos") + + # Demos are now based on qt6, but at the moment qt6 is not in spack + # depends_on("qt@6:", when="@6: +demos") # Optional Third Party Libraries depends_on("eigen", when="+eigen") @@ -83,6 +111,24 @@ class Cgal(CMakePackage): # depends_on('esbtl') # depends_on('intel-tbb') + # @6: requires C++17 or later. The table gives tested + # compilers, so use the lwoer limit of that as the bounds + # https://www.cgal.org/2024/10/22/cgal601/ + with when("@6:"): + # Gnu g++ 11.4.0 or later (on Linux or macOS) + conflicts("%gcc @:11.3.0", when="platform=darwin") + conflicts("%gcc @:11.3.0", when="platform=linux") + + # LLVM Clang version 15.0.7 or later (on Linux) + conflicts("%clang @:15.0.6", when="platform=linux") + + # Apple Clang compiler versions 10.0.1, 12.0.5, and 15.0.0 (on macOS) + # (10+ has C++17 support) + conflicts("%apple-clang @:10.0.0", when="platform=darwin") + + # Visual C++ 15.9 or later + conflicts("%msvc @:15.8", when="platform=windows") + conflicts( "~header_only", when="@:4.9", @@ -119,7 +165,13 @@ def cmake_args(self): cmake_args.append("-DWITH_CGAL_ImageIO:BOOL=%s" % variant_bool("+imageio")) cmake_args.append("-DWITH_CGAL_Qt5:BOOL=%s" % variant_bool("+demos")) + if spec.satisfies("@6:"): + cmake_args.append("-DCXX_STANDARD=17") + if spec.satisfies("@4.9:"): cmake_args.append("-DCGAL_HEADER_ONLY:BOOL=%s" % variant_bool("+header_only")) + if spec.satisfies("~gmp"): + cmake_args.append("-DCGAL_DISABLE_GMP:BOOL=1") + return cmake_args diff --git a/var/spack/repos/builtin/packages/chapel/package.py b/var/spack/repos/builtin/packages/chapel/package.py index 0538221e35e417..3e8693c787bfc1 100644 --- a/var/spack/repos/builtin/packages/chapel/package.py +++ b/var/spack/repos/builtin/packages/chapel/package.py @@ -6,6 +6,9 @@ import os import subprocess +import llnl.util.lang + +import spack.platforms import spack.platforms.cray from spack.package import * from spack.util.environment import is_system_path, set_env @@ -96,7 +99,6 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage): "intel": "intel", "llvm": "llvm", "oneapi": "intel", - "pgi": "pgi", "rocmcc": "clang", "unset": "unset", } @@ -553,7 +555,6 @@ class Chapel(AutotoolsPackage, CudaPackage, ROCmPackage): "%intel", "%llvm", "%oneapi", - "%pgi", "%rocmcc", policy="one_of", ) diff --git a/var/spack/repos/builtin/packages/claw/package.py b/var/spack/repos/builtin/packages/claw/package.py index 913b1b82f6a077..481745cb907de4 100644 --- a/var/spack/repos/builtin/packages/claw/package.py +++ b/var/spack/repos/builtin/packages/claw/package.py @@ -5,6 +5,8 @@ import os +import spack.compilers +import spack.spec from spack.package import * diff --git a/var/spack/repos/builtin/packages/clingo-bootstrap/package.py b/var/spack/repos/builtin/packages/clingo-bootstrap/package.py index 67bab58d7a950c..bff3edef945780 100644 --- a/var/spack/repos/builtin/packages/clingo-bootstrap/package.py +++ b/var/spack/repos/builtin/packages/clingo-bootstrap/package.py @@ -75,15 +75,13 @@ def cmake_py_shared(self): return self.define("CLINGO_BUILD_PY_SHARED", "OFF") def cmake_args(self): - args = super().cmake_args() - args.append(self.define("CLINGO_BUILD_APPS", False)) - return args + return [*super().cmake_args(), self.define("CLINGO_BUILD_APPS", False)] @run_before("cmake", when="+optimized") def pgo_train(self): - if self.spec.compiler.name == "clang": + if self.spec.satisfies("%clang"): llvm_profdata = which("llvm-profdata", required=True) - elif self.spec.compiler.name == "apple-clang": + elif self.spec.satisfies("%apple-clang"): llvm_profdata = Executable( Executable("xcrun")("-find", "llvm-profdata", output=str).strip() ) @@ -119,7 +117,7 @@ def pgo_train(self): # Clean the build dir. rmtree(self.build_directory, ignore_errors=True) - if self.spec.compiler.name in ("clang", "apple-clang"): + if self.spec.satisfies("%clang") or self.spec.satisfies("apple-clang"): # merge reports use_report = join_path(reports, "merged.prof") raw_files = glob.glob(join_path(reports, "*.profraw")) @@ -136,9 +134,7 @@ def pgo_train(self): cmake.add_default_envmod(use_mods) def setup_build_environment(self, env): - if self.spec.satisfies("%apple-clang"): - env.append_flags("CFLAGS", "-mmacosx-version-min=10.13") - env.append_flags("CXXFLAGS", "-mmacosx-version-min=10.13") - env.append_flags("LDFLAGS", "-mmacosx-version-min=10.13") - elif self.spec.compiler.name in ("gcc", "clang") and "+static_libstdcpp" in self.spec: + if ( + self.spec.satisfies("%gcc") or self.spec.satisfies("%clang") + ) and "+static_libstdcpp" in self.spec: env.append_flags("LDFLAGS", "-static-libstdc++ -static-libgcc -Wl,--exclude-libs,ALL") diff --git a/var/spack/repos/builtin/packages/cloverleaf-ref/package.py b/var/spack/repos/builtin/packages/cloverleaf-ref/package.py index 025a6b5d0f65ef..4028e319e2b57e 100644 --- a/var/spack/repos/builtin/packages/cloverleaf-ref/package.py +++ b/var/spack/repos/builtin/packages/cloverleaf-ref/package.py @@ -97,15 +97,9 @@ def build_targets(self): targets.append("COMPILER=CRAY") targets.append("OMP_CRAY=-fopenmp") - elif self.spec.satisfies("%pgi"): - targets.append("COMPILER=PGI") - elif self.spec.satisfies("%xl"): targets.append("COMPILER=XLF") - else: - raise ValueError("Compiler {} not supported".format(self.spec.compiler.name)) - return targets def install(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/cloverleaf/package.py b/var/spack/repos/builtin/packages/cloverleaf/package.py index a561b1039e0a5e..042733a9e04727 100644 --- a/var/spack/repos/builtin/packages/cloverleaf/package.py +++ b/var/spack/repos/builtin/packages/cloverleaf/package.py @@ -96,10 +96,6 @@ def build_targets(self): targets.append("CFLAGS_INTEL=") elif self.spec.satisfies("%aocc"): targets.append("COMPILER=AOCC") - elif self.spec.satisfies("%pgi"): - targets.append("COMPILER=PGI") - targets.append("FLAGS_PGI=") - targets.append("CFLAGS_PGI=") elif self.spec.satisfies("%xl"): targets.append("COMPILER=XLF") targets.append("FLAGS_XLF=") diff --git a/var/spack/repos/builtin/packages/cloverleaf3d/package.py b/var/spack/repos/builtin/packages/cloverleaf3d/package.py index 8e8f8de0fd8eb6..f52e3df2db9618 100644 --- a/var/spack/repos/builtin/packages/cloverleaf3d/package.py +++ b/var/spack/repos/builtin/packages/cloverleaf3d/package.py @@ -67,10 +67,6 @@ def build_targets(self): targets.append("COMPILER=INTEL") targets.append("FLAGS_INTEL=") targets.append("CFLAGS_INTEL=") - elif self.spec.satisfies("%pgi"): - targets.append("COMPILER=PGI") - targets.append("FLAGS_PGI=") - targets.append("CFLAGS_PGI=") elif self.spec.satisfies("%xl"): targets.append("COMPILER=XLF") targets.append("FLAGS_XLF=") diff --git a/var/spack/repos/builtin/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py index 4e6dbc6c0de4f8..38bc3df13e35cf 100644 --- a/var/spack/repos/builtin/packages/cmake/package.py +++ b/var/spack/repos/builtin/packages/cmake/package.py @@ -31,6 +31,7 @@ class Cmake(Package): license("BSD-3-Clause") version("master", branch="master") + version("3.31.0", sha256="300b71db6d69dcc1ab7c5aae61cbc1aa2778a3e00cbd918bc720203e311468c3") version("3.30.5", sha256="9f55e1a40508f2f29b7e065fa08c29f82c402fa0402da839fffe64a25755a86d") version("3.30.4", sha256="c759c97274f1e7aaaafcb1f0d261f9de9bf3a5d6ecb7e2df616324a46fe704b2") version("3.30.3", sha256="6d5de15b6715091df7f5441007425264bdd477809f80333fdf95f846aaff88e4") @@ -162,6 +163,12 @@ class Cmake(Package): depends_on("gmake", when="platform=freebsd") depends_on("qt", when="+qtgui") + # Qt depends on libmng, which is a CMake package; + # ensure we build using a non CMake build system + # when libmng is build as a transitive dependency of CMake + for plat in ["linux", "darwin", "freebsd"]: + with when(f"platform={plat}"): + depends_on("libmng build_system=autotools", when="+qtgui") # See https://gitlab.kitware.com/cmake/cmake/-/issues/21135 conflicts( @@ -229,7 +236,7 @@ class Cmake(Package): patch("fujitsu_add_linker_option.patch", when="%fj") # Remove -A from the C++ flags we use when CXX_EXTENSIONS is OFF - # Should be fixed in 3.19. + # Should be fixed in 3.19. This patch is needed also for nvhpc. # https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5025 patch("pgi-cxx-ansi.patch", when="@3.15:3.18") diff --git a/var/spack/repos/builtin/packages/cmdstan/package.py b/var/spack/repos/builtin/packages/cmdstan/package.py index 23ab6b990d6b66..98a3f82fadeab3 100644 --- a/var/spack/repos/builtin/packages/cmdstan/package.py +++ b/var/spack/repos/builtin/packages/cmdstan/package.py @@ -32,7 +32,7 @@ class Cmdstan(MakefilePackage): filter_compiler_wrappers("local", relative_root="make") def edit(self, spec, prefix): - if spec.compiler.name == "intel": + if spec.satisfies("%intel"): cxx_type = "icc" else: cxx_type = spec.compiler.name diff --git a/var/spack/repos/builtin/packages/cmor/package.py b/var/spack/repos/builtin/packages/cmor/package.py index 56db33761540be..817ffbe9a1c973 100644 --- a/var/spack/repos/builtin/packages/cmor/package.py +++ b/var/spack/repos/builtin/packages/cmor/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -76,5 +77,4 @@ def install(self, spec, prefix): make("install") if spec.satisfies("+python"): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={prefix}", ".") diff --git a/var/spack/repos/builtin/packages/codipack/package.py b/var/spack/repos/builtin/packages/codipack/package.py index 2347df15ce3ccf..4c2fe3886bfa34 100644 --- a/var/spack/repos/builtin/packages/codipack/package.py +++ b/var/spack/repos/builtin/packages/codipack/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.generic from spack.package import * diff --git a/var/spack/repos/builtin/packages/coin3d/package.py b/var/spack/repos/builtin/packages/coin3d/package.py index 6cffab95cbd7c4..571c843cb06135 100644 --- a/var/spack/repos/builtin/packages/coin3d/package.py +++ b/var/spack/repos/builtin/packages/coin3d/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * from spack.pkg.builtin.boost import Boost diff --git a/var/spack/repos/builtin/packages/composable-kernel/0001-mark-kernels-maybe-unused.patch b/var/spack/repos/builtin/packages/composable-kernel/0001-mark-kernels-maybe-unused.patch new file mode 100644 index 00000000000000..f2fbc24f614421 --- /dev/null +++ b/var/spack/repos/builtin/packages/composable-kernel/0001-mark-kernels-maybe-unused.patch @@ -0,0 +1,88 @@ +diff --git a/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_two_stage_xdl_cshuffle.hpp b/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_two_stage_xdl_cshuffle.hpp +index f4f496fc10..d9e300b737 100644 +--- a/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_two_stage_xdl_cshuffle.hpp ++++ b/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_bwd_weight_two_stage_xdl_cshuffle.hpp +@@ -47,12 +47,12 @@ __global__ void + #endif + kernel_grouped_conv_bwd_weight_xdl_cshuffle_v3( + typename GridwiseGemm::Argument karg, +- const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, +- const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, +- const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock ++ [[maybe_unused]] const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, ++ [[maybe_unused]] const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, ++ [[maybe_unused]] const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock + c_grid_desc_mblock_mperblock_nblock_nperblock, +- const ComputePtrOffsetOfBatch compute_ptr_offset_of_batch, +- const index_t num_k_per_block) ++ [[maybe_unused]] const ComputePtrOffsetOfBatch compute_ptr_offset_of_batch, ++ [[maybe_unused]] const index_t num_k_per_block) + { + #if(!defined(__HIP_DEVICE_COMPILE__) || defined(__gfx908__) || defined(__gfx90a__) || \ + defined(__gfx94__)) +@@ -103,12 +103,12 @@ __global__ void + #endif + kernel_grouped_conv_bwd_weight_xdl_cshuffle_v3_2lds( + typename GridwiseGemm::Argument karg, +- const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, +- const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, +- const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock ++ [[maybe_unused]] const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, ++ [[maybe_unused]] const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, ++ [[maybe_unused]] const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock + c_grid_desc_mblock_mperblock_nblock_nperblock, +- const ComputePtrOffsetOfBatch compute_ptr_offset_of_batch, +- const index_t num_k_per_block) ++ [[maybe_unused]] const ComputePtrOffsetOfBatch compute_ptr_offset_of_batch, ++ [[maybe_unused]] const index_t num_k_per_block) + { + #if(!defined(__HIP_DEVICE_COMPILE__) || defined(__gfx908__) || defined(__gfx90a__) || \ + defined(__gfx940__) || defined(__gfx941__) || defined(__gfx942__)) +diff --git a/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_fwd_multiple_abd_xdl_cshuffle_v3.hpp b/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_fwd_multiple_abd_xdl_cshuffle_v3.hpp +index 415ae3d496..a4d4a01a01 100644 +--- a/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_fwd_multiple_abd_xdl_cshuffle_v3.hpp ++++ b/include/ck/tensor_operation/gpu/device/impl/device_grouped_conv_fwd_multiple_abd_xdl_cshuffle_v3.hpp +@@ -69,14 +69,15 @@ __global__ void + #if CK_USE_LAUNCH_BOUNDS + __launch_bounds__(CK_MAX_THREAD_PER_BLOCK, MinimumOccupancy) + #endif +- kernel_grouped_conv_fwd_xdl_cshuffle_v3(typename GridwiseGemm::Argument karg, +- const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, +- const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, +- const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock +- c_grid_desc_mblock_mperblock_nblock_nperblock, +- const ComputePtrOffset compute_ptr_offset_of_groups, +- const ComputePtrOffset compute_ptr_offset_of_n, +- const index_t groups_count) ++ kernel_grouped_conv_fwd_xdl_cshuffle_v3( ++ typename GridwiseGemm::Argument karg, ++ [[maybe_unused]] const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, ++ [[maybe_unused]] const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, ++ [[maybe_unused]] const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock ++ c_grid_desc_mblock_mperblock_nblock_nperblock, ++ [[maybe_unused]] const ComputePtrOffset compute_ptr_offset_of_groups, ++ [[maybe_unused]] const ComputePtrOffset compute_ptr_offset_of_n, ++ [[maybe_unused]] const index_t groups_count) + { + #if(!defined(__HIP_DEVICE_COMPILE__) || defined(__gfx9__)) + // offset base pointer for each work-group +@@ -132,13 +133,13 @@ __global__ void + #endif + kernel_grouped_conv_fwd_xdl_cshuffle_v3_2lds( + typename GridwiseGemm::Argument karg, +- const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, +- const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, +- const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock ++ [[maybe_unused]] const AGridDesc_AK0_M_K1 a_grid_desc_ak0_m_ak1, ++ [[maybe_unused]] const BGridDesc_BK0_N_K1 b_grid_desc_bk0_n_bk1, ++ [[maybe_unused]] const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock + c_grid_desc_mblock_mperblock_nblock_nperblock, +- const ComputePtrOffset compute_ptr_offset_of_groups, +- const ComputePtrOffset compute_ptr_offset_of_n, +- const index_t groups_count) ++ [[maybe_unused]] const ComputePtrOffset compute_ptr_offset_of_groups, ++ [[maybe_unused]] const ComputePtrOffset compute_ptr_offset_of_n, ++ [[maybe_unused]] const index_t groups_count) + { + #if(!defined(__HIP_DEVICE_COMPILE__) || defined(__gfx9__)) + // offset base pointer for each work-group diff --git a/var/spack/repos/builtin/packages/composable-kernel/package.py b/var/spack/repos/builtin/packages/composable-kernel/package.py index fcb8dc682d0768..d666737cb3ec57 100644 --- a/var/spack/repos/builtin/packages/composable-kernel/package.py +++ b/var/spack/repos/builtin/packages/composable-kernel/package.py @@ -78,6 +78,10 @@ class ComposableKernel(CMakePackage): depends_on("llvm-amdgpu@" + ver, when="@" + ver) depends_on("rocm-cmake@" + ver, when="@" + ver, type="build") + # Build is breaking on warning, -Werror, -Wunused-parameter. The patch is part of: + # https://github.com/ROCm/composable_kernel/commit/959073842c0db839d45d565eb260fd018c996ce4 + patch("0001-mark-kernels-maybe-unused.patch", when="@6.2") + def setup_build_environment(self, env): env.set("CXX", self.spec["hip"].hipcc) @@ -101,6 +105,8 @@ def cmake_args(self): args.append(self.define("CMAKE_POSITION_INDEPENDENT_CODE", "ON")) if self.spec.satisfies("@:5.7"): args.append(self.define("CMAKE_CXX_FLAGS", "-O3")) + if self.spec.satisfies("@6.2:"): + args.append(self.define("BUILD_DEV", "OFF")) return args def build(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/costo/package.py b/var/spack/repos/builtin/packages/costo/package.py new file mode 100644 index 00000000000000..179de45e0273b2 --- /dev/null +++ b/var/spack/repos/builtin/packages/costo/package.py @@ -0,0 +1,50 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Costo(CMakePackage): + """costo stand for COSimulation TOols. + Its a layer above MPI to share data between meshes. + """ + + homepage = "https://gitlab.com/Te_ch/costo" + git = "https://gitlab.com/Te_ch/costo.git" + + maintainers("tech-91") + + license("LGPL-3.0-or-later") + + version("0.0.8", tag="v0.0.8", preferred=True) + version("0.0.5", tag="v0.0.5") + version("develop", branch="devel") + version("main", branch="main", deprecated=True) + + variant("shared", default=True, description="Build shared library") + variant("tests", default=False, description="Enable testing") + + depends_on("mpi", type=all) + depends_on("python@3.10:", type=all) + + depends_on("py-non-regression-test-tools", type="build") + depends_on("py-pyvista", type=("build", "run")) + depends_on("py-numpy", type=("build", "link", "run")) + depends_on("py-mpi4py", type=("build", "run")) + depends_on("py-scipy", type=("build", "run")) + depends_on("py-mgmetis", type=("build", "run")) + depends_on("py-colorama", type=("build", "run")) + depends_on("py-pip", type="build") + + def cmake_args(self): + args = [ + # self.define("COSTO_ENABLE_TESTS", "OFF"), + self.define("COSTO_ENABLE_PYTHON_BINDINGS", "OFF"), + self.define("WITH_PYTHON_MODULE", "ON"), + self.define_from_variant("WITH_SHARED_LIBS", "shared"), + self.define_from_variant("WITH_TESTS", "tests"), + ] + + return args diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py index 0a590013b1b373..5a478ea9850478 100644 --- a/var/spack/repos/builtin/packages/cp2k/package.py +++ b/var/spack/repos/builtin/packages/cp2k/package.py @@ -7,9 +7,7 @@ import os.path import sys -import spack.platforms import spack.util.environment -import spack.util.executable from spack.build_environment import dso_suffix from spack.build_systems import cmake, makefile from spack.package import * @@ -201,6 +199,7 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage): depends_on("libxc@5.1.7:5.1", when="@9:2022.2") depends_on("libxc@6.1:", when="@2023.1:") depends_on("libxc@6.2:", when="@2023.2:") + depends_on("libxc@:6", when="@:2024.3") with when("+spla"): depends_on("spla+cuda+fortran", when="+cuda") @@ -378,6 +377,14 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage): # https://github.com/cp2k/cp2k/issues/3688 patch("d4-dispersion-bugfix-2024.3.patch", when="@2024.3") + # Fix segmentation faults caused by accessing unallocated arrays + # https://github.com/cp2k/cp2k/pull/3733 + patch( + "https://github.com/cp2k/cp2k/commit/7a99649828ecf7d5dc53d952a1bf7be6970deabe.patch?full_index=1", + sha256="37f4f1a76634ff4a5617fe0c670e6acfe2afa2b2cfc5b2875e438a54baa4525e", + when="@2024.2:2024.3", + ) + def patch(self): # Patch for an undefined constant due to incompatible changes in ELPA if self.spec.satisfies("@9.1:2022.2 +elpa"): @@ -425,7 +432,6 @@ def edit(self, pkg, spec, prefix): optimization_flags = { "gcc": ["-O2", "-funroll-loops", "-ftree-vectorize"], "intel": ["-O2", "-pc64", "-unroll"], - "pgi": ["-fast"], "nvhpc": ["-fast"], "cce": ["-O2"], "xl": ["-O3"], @@ -474,7 +480,7 @@ def edit(self, pkg, spec, prefix): ] elif spec.satisfies("%aocc") or spec.satisfies("%rocmcc"): fcflags += ["-ffree-form", "-Mbackslash"] - elif spec.satisfies("%pgi") or spec.satisfies("%nvhpc"): + elif spec.satisfies("%nvhpc"): fcflags += ["-Mfreeform", "-Mextend"] elif spec.satisfies("%cce"): fcflags += ["-emf", "-ffree", "-hflex_mp=strict"] diff --git a/var/spack/repos/builtin/packages/cpr/package.py b/var/spack/repos/builtin/packages/cpr/package.py index 4c962b729e1d90..0f6daf03e42f61 100644 --- a/var/spack/repos/builtin/packages/cpr/package.py +++ b/var/spack/repos/builtin/packages/cpr/package.py @@ -12,11 +12,17 @@ class Cpr(CMakePackage): homepage = "https://docs.libcpr.org/" url = "https://github.com/libcpr/cpr/archive/refs/tags/1.10.4.tar.gz" + maintainers("prudhomm") license("MIT") + version("1.11.0", sha256="fdafa3e3a87448b5ddbd9c7a16e7276a78f28bbe84a3fc6edcfef85eca977784") + version("1.10.5", sha256="c8590568996cea918d7cf7ec6845d954b9b95ab2c4980b365f582a665dea08d8") version("1.10.4", sha256="88462d059cd3df22c4d39ae04483ed50dfd2c808b3effddb65ac3b9aa60b542d") version("1.9.2", sha256="3bfbffb22c51f322780d10d3ca8f79424190d7ac4b5ad6ad896de08dbd06bf31") + variant("pic", default=True, description="Position independent code") + variant("shared", default=True, description="Build shared library") + depends_on("cxx", type="build") depends_on("curl") @@ -29,4 +35,6 @@ def cmake_args(self): self.define("CPR_USE_SYSTEM_GTEST", True), self.define(f"CPR{_force}_USE_SYSTEM_CURL", True), self.define("CPR_ENABLE_SSL", True), + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), ] diff --git a/var/spack/repos/builtin/packages/cprnc/install_rpath.patch b/var/spack/repos/builtin/packages/cprnc/install_rpath.patch new file mode 100644 index 00000000000000..92888468f8f7b2 --- /dev/null +++ b/var/spack/repos/builtin/packages/cprnc/install_rpath.patch @@ -0,0 +1,18 @@ +--- a/CMakeLists.txt 2023-12-04 07:01:57.000000000 -0700 ++++ b/CMakeLists.txt 2024-11-08 06:53:55.090900241 -0700 +@@ -21,6 +21,7 @@ + + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + set(CMAKE_MACOSX_RPATH 1) ++SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + + # Compiler-specific compile options + if ("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU") +@@ -79,6 +80,7 @@ + get_filename_component(netcdf_c_lib_location ${netcdf_c_lib} DIRECTORY) + #message (STATUS "netcdf_c_lib_location == ${netcdf_c_lib_location}") + ++SET(CMAKE_INSTALL_RPATH "${netcdf_fortran_lib_location};${netcdf_c_lib_location}") + list(APPEND CMAKE_BUILD_RPATH ${netcdf_fortran_lib_location} ${netcdf_c_lib_location}) + #message("CMAKE_BUILD_RPATH is ${CMAKE_BUILD_RPATH}") + add_executable (cprnc ${CPRNC_Fortran_SRCS} ${CPRNC_GenF90_SRCS}) diff --git a/var/spack/repos/builtin/packages/cprnc/package.py b/var/spack/repos/builtin/packages/cprnc/package.py index c719c107155cc5..c1bb841ad9fcaa 100644 --- a/var/spack/repos/builtin/packages/cprnc/package.py +++ b/var/spack/repos/builtin/packages/cprnc/package.py @@ -15,6 +15,7 @@ class Cprnc(CMakePackage): maintainers("jedwards4b", "billsacks") + version("1.0.8", sha256="94ee3b4e724bc06161e576d45f34401f1452acf738803528cb80726eed230cae") version("1.0.3", sha256="3e7400f9a13d5de01964d7dd95151d08e6e30818d2a1efa9a9c7896cf6646d69") version("1.0.2", sha256="02edfa8050135ac0dc4a74aea05d19b0823d769b22cafa88b9352e29723d4179") version("1.0.1", sha256="b8a8fd4ad7e2716968dfa60f677217c55636580807b1309276f4c062ee432ccd") @@ -25,6 +26,8 @@ class Cprnc(CMakePackage): depends_on("netcdf-fortran") depends_on("cmake@3:", type="build") + patch("install_rpath.patch", when="@:1.0.7") + resource( name="genf90", git="https://github.com/PARALLELIO/genf90", diff --git a/var/spack/repos/builtin/packages/cpuinfo/package.py b/var/spack/repos/builtin/packages/cpuinfo/package.py index fd990da38af3bd..2a3e905be07177 100644 --- a/var/spack/repos/builtin/packages/cpuinfo/package.py +++ b/var/spack/repos/builtin/packages/cpuinfo/package.py @@ -19,7 +19,9 @@ class Cpuinfo(CMakePackage): license("BSD-2-Clause") version("main", branch="main") - version("2023-11-04", commit="d6860c477c99f1fce9e28eb206891af3c0e1a1d7") # py-torch@2.3: + version("2024-09-06", commit="094fc30b9256f54dad5ad23bcbfb5de74781422f") # py-torch@2.5.1: + version("2024-08-30", commit="fa1c679da8d19e1d87f20175ae1ec10995cd3dd3") # py-torch@2.5.0 + version("2023-11-04", commit="d6860c477c99f1fce9e28eb206891af3c0e1a1d7") # py-torch@2.3:2.4 version("2023-01-13", commit="6481e8bef08f606ddd627e4d3be89f64d62e1b8a") # py-torch@2.1:2.2 version("2022-08-19", commit="8ec7bd91ad0470e61cf38f618cc1f270dede599c") # py-torch@1.13:2.0 version("2020-12-17", commit="5916273f79a21551890fd3d56fc5375a78d1598d") # py-torch@1.8:1.12 @@ -30,8 +32,8 @@ class Cpuinfo(CMakePackage): version("2018-05-13", commit="1e6c8c99d27f2b5eb9d2e6231055c6a4115b85e5") # py-torch@0.4.1 version("2018-04-04", commit="831dc28341b5f20d13e840caf87eaba644d82643") # py-torch@:0.4.0 - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") generator("ninja") depends_on("cmake@3.5:", type="build") diff --git a/var/spack/repos/builtin/packages/cqrlib/Makefile.patch b/var/spack/repos/builtin/packages/cqrlib/Makefile.patch new file mode 100644 index 00000000000000..222da4cef1bbea --- /dev/null +++ b/var/spack/repos/builtin/packages/cqrlib/Makefile.patch @@ -0,0 +1,29 @@ +--- a/Makefile ++++ b/Makefile +@@ -87,16 +87,16 @@ else + INCLUDES = -I$(INC) + endif + +-COMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link $(CC) -version-info $(VERSION) -rpath $(INSTALLDIR)/lib +-BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(INCLUDES) +-BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -dynamic -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib +-BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -static -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib +-CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CXX) $(CPPFLAGS) $(INCLUDES) $(WARNINGS) -c +-CPPLIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link $(CXX) -version-info $(VERSION) -rpath $(INSTALLDIR)/lib +-CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CXX) $(CPPFLAGS) $(INCLUDES) +-CPPBUILD_COMMAND_DYNAMIC= $(LIBTOOL) --mode=link $(CXX) $(CPPFLAGS) -dynamic -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib +-CPPBUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link $(CXX) $(CPPFLAGS) -static -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib ++COMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link --tag=CC $(CC) -version-info $(VERSION) -rpath $(INSTALLDIR)/lib ++BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) $(INCLUDES) ++BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -dynamic -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib ++BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -static -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib ++CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CXX $(CXX) $(CPPFLAGS) $(INCLUDES) $(WARNINGS) -c ++CPPLIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link --tag=CXX $(CXX) -version-info $(VERSION) -rpath $(INSTALLDIR)/lib ++CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(CPPFLAGS) $(INCLUDES) ++CPPBUILD_COMMAND_DYNAMIC= $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(CPPFLAGS) -dynamic -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib ++CPPBUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link --tag=CXX $(CXX) $(CPPFLAGS) -static -I $(INSTALLDIR)/include -L$(INSTALLDIR)/lib + INSTALL_COMMAND = $(LIBTOOL) --mode=install cp + INSTALL_FINISH_COMMAND = $(LIBTOOL) --mode=finish + diff --git a/var/spack/repos/builtin/packages/cqrlib/package.py b/var/spack/repos/builtin/packages/cqrlib/package.py index ba698f7ed7a36f..6d2e644b938944 100644 --- a/var/spack/repos/builtin/packages/cqrlib/package.py +++ b/var/spack/repos/builtin/packages/cqrlib/package.py @@ -10,12 +10,10 @@ class Cqrlib(MakefilePackage): """CQRlib -- ANSI C API for Quaternion Rotations""" homepage = "https://cqrlib.sourceforge.net/" - url = ( - "https://downloads.sourceforge.net/project/cqrlib/cqrlib/CQRlib-1.1.2/CQRlib-1.1.2.tar.gz" - ) license("LGPL-2.1-or-later") + version("1.1.3", sha256="90ecd9aabfb72e55e56957c7b233910d18b8c2bb522a8e59eddbcc4618c72d0e") version("1.1.2", sha256="af3cf2402974579f3c6efc6a6174a5da52786db4bfee9d38d504d93bc42410fd") depends_on("c", type="build") # generated @@ -23,7 +21,12 @@ class Cqrlib(MakefilePackage): depends_on("libtool", type="build") - patch("cqr.patch") + patch("cqr.patch", when="@1.1.2") + patch("Makefile.patch", when="@1.1.2:") + + def url_for_version(self, version): + full_vers = str(version) + return f"https://downloads.sourceforge.net/project/cqrlib/cqrlib/CQRlib-{full_vers}/CQRlib-{full_vers}.tar.gz" def edit(self, spec, prefix): mf = FileFilter("Makefile") diff --git a/var/spack/repos/builtin/packages/cray-fftw/package.py b/var/spack/repos/builtin/packages/cray-fftw/package.py index 13526ecc61803b..4035ad397365a4 100644 --- a/var/spack/repos/builtin/packages/cray-fftw/package.py +++ b/var/spack/repos/builtin/packages/cray-fftw/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import llnl.util.lang + from spack.package import * diff --git a/var/spack/repos/builtin/packages/cuda/package.py b/var/spack/repos/builtin/packages/cuda/package.py index bd1ff959f2ac26..ea7b314418d9e2 100644 --- a/var/spack/repos/builtin/packages/cuda/package.py +++ b/var/spack/repos/builtin/packages/cuda/package.py @@ -24,6 +24,16 @@ # format returned by platform.system() and 'arch' by platform.machine() _versions = { + "12.6.3": { + "Linux-aarch64": ( + "213ea63a6357020978a8b0a79a8c9d12a2a5941afa1cdc69d5a3f933fa8bed04", + "https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda_12.6.3_560.35.05_linux_sbsa.run", + ), + "Linux-x86_64": ( + "81d60e48044796d7883aa8a049afe6501b843f2c45639b3703b2378de30d55d3", + "https://developer.download.nvidia.com/compute/cuda/12.6.3/local_installers/cuda_12.6.3_560.35.05_linux.run", + ), + }, "12.6.2": { "Linux-aarch64": ( "2249408848b705c18b9eadfb5161b52e4e36fcc5753647329cce93db141e5466", diff --git a/var/spack/repos/builtin/packages/cups/package.py b/var/spack/repos/builtin/packages/cups/package.py index b2c5b84ecfba5d..34c5fdd80bdd5a 100644 --- a/var/spack/repos/builtin/packages/cups/package.py +++ b/var/spack/repos/builtin/packages/cups/package.py @@ -20,9 +20,12 @@ class Cups(AutotoolsPackage): license("Apache-2.0", checked_by="wdconinc") + version("2.4.11", sha256="9a88fe1da3a29a917c3fc67ce6eb3178399d68e1a548c6d86c70d9b13651fd71") version("2.4.10", sha256="d75757c2bc0f7a28b02ee4d52ca9e4b1aa1ba2affe16b985854f5336940e5ad7") - version("2.3.3", sha256="261fd948bce8647b6d5cb2a1784f0c24cc52b5c4e827b71d726020bcc502f3ee") - version("2.2.3", sha256="66701fe15838f2c892052c913bde1ba106bbee2e0a953c955a62ecacce76885f") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-4504 + version("2.3.3", sha256="261fd948bce8647b6d5cb2a1784f0c24cc52b5c4e827b71d726020bcc502f3ee") + version("2.2.3", sha256="66701fe15838f2c892052c913bde1ba106bbee2e0a953c955a62ecacce76885f") depends_on("c", type="build") depends_on("cxx", type="build") diff --git a/var/spack/repos/builtin/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py index 127fbd991b59ba..ab040906c19ce3 100644 --- a/var/spack/repos/builtin/packages/curl/package.py +++ b/var/spack/repos/builtin/packages/curl/package.py @@ -31,12 +31,29 @@ class Curl(NMakePackage, AutotoolsPackage): license("curl") - version("8.8.0", sha256="40d3792d38cfa244d8f692974a567e9a5f3387c547579f1124e95ea2a1020d0d") - version("8.7.1", sha256="05bbd2b698e9cfbab477c33aa5e99b4975501835a41b7ca6ca71de03d8849e76") - version("8.6.0", sha256="b4785f2d8877fa92c0e45d7155cf8cc6750dbda961f4b1a45bcbec990cf2fa9b") - version("8.4.0", sha256="e5250581a9c032b1b6ed3cf2f9c114c811fc41881069e9892d115cc73f9e88c6") + version("8.10.1", sha256="3763cd97aae41dcf41950d23e87ae23b2edb2ce3a5b0cf678af058c391b6ae31") # Deprecated versions due to CVEs + version( + "8.8.0", + sha256="40d3792d38cfa244d8f692974a567e9a5f3387c547579f1124e95ea2a1020d0d", + deprecated=True, + ) + version( + "8.7.1", + sha256="05bbd2b698e9cfbab477c33aa5e99b4975501835a41b7ca6ca71de03d8849e76", + deprecated=True, + ) + version( + "8.6.0", + sha256="b4785f2d8877fa92c0e45d7155cf8cc6750dbda961f4b1a45bcbec990cf2fa9b", + deprecated=True, + ) + version( + "8.4.0", + sha256="e5250581a9c032b1b6ed3cf2f9c114c811fc41881069e9892d115cc73f9e88c6", + deprecated=True, + ) version( "8.1.2", sha256="b54974d32fd610acace92e3df1f643144015ac65847f0a041fdc17db6f43f243", @@ -114,9 +131,11 @@ class Curl(NMakePackage, AutotoolsPackage): depends_on("gnutls", when="tls=gnutls") with when("tls=mbedtls"): - depends_on("mbedtls@:2 +pic", when="@:7.78") - depends_on("mbedtls@2: +pic", when="@7.79:") - depends_on("mbedtls@3.6.0: +pic", when="@8.8.0:") + depends_on("mbedtls +pic") + depends_on("mbedtls@:2", when="@:7.78") + depends_on("mbedtls@:3.5", when="@:8.7") + depends_on("mbedtls@2:", when="@7.79:") + depends_on("mbedtls@3.2:", when="@8.8") # https://github.com/curl/curl/issues/13748 depends_on("nss", when="tls=nss") @@ -178,7 +197,8 @@ def command(self): def flag_handler(self, name, flags): build_system_flags = [] - if name == "cflags" and self.spec.compiler.name in ["intel", "oneapi"]: + spec = self.spec + if name == "cflags" and (spec.satisfies("%intel") or spec.satisfies("%oneapi")): build_system_flags = ["-we147"] return flags, None, build_system_flags diff --git a/var/spack/repos/builtin/packages/cvector/Makefile.patch b/var/spack/repos/builtin/packages/cvector/Makefile.patch new file mode 100644 index 00000000000000..e6169769e2207a --- /dev/null +++ b/var/spack/repos/builtin/packages/cvector/Makefile.patch @@ -0,0 +1,19 @@ +--- a/Makefile ++++ b/Makefile +@@ -89,11 +89,11 @@ else + INCLUDES = -I$(INC) + endif + +-COMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link $(CC) -version-info $(VERSION) -release $(RELEASE) -no-undefined -rpath $(INSTALL_PREFIX)/lib +-BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(INCLUDES) +-BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -dynamic -I $(INSTALL_PREFIX)/include +-BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -static -I $(INSTALL_PREFIX)/include ++COMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link --tag=CC $(CC) -version-info $(VERSION) -release $(RELEASE) -no-undefined -rpath $(INSTALL_PREFIX)/lib ++BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) $(INCLUDES) ++BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -dynamic -I $(INSTALL_PREFIX)/include ++BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -static -I $(INSTALL_PREFIX)/include + INSTALL_COMMAND = $(LIBTOOL) --mode=install cp + INSTALL_FINISH_COMMAND = $(LIBTOOL) --mode=finish + diff --git a/var/spack/repos/builtin/packages/cvector/package.py b/var/spack/repos/builtin/packages/cvector/package.py index 105142bbcd6578..9ca644ab293f0a 100644 --- a/var/spack/repos/builtin/packages/cvector/package.py +++ b/var/spack/repos/builtin/packages/cvector/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import re + from spack.package import * @@ -10,16 +12,28 @@ class Cvector(MakefilePackage): """CVector -- ANSI C API for Dynamic Arrays""" homepage = "https://cvector.sourceforge.net/" - url = "https://downloads.sourceforge.net/project/cvector/cvector/CVector-1.0.3/CVector-1.0.3.tar.gz" license("LGPL-2.1-or-later") - version("1.0.3", sha256="d3fa92de3cd5ba8697abdbb52080248b2c252a81cf40a8ec639be301518d0ce3") + version("1.0.3.1", sha256="6492b2beb26c3179cdd19abc90dc47a685be471c594d5ab664283e1d3586acdc") + version( + "1.0.3", + sha256="d3fa92de3cd5ba8697abdbb52080248b2c252a81cf40a8ec639be301518d0ce3", + deprecated=True, + ) depends_on("c", type="build") # generated depends_on("libtool", type="build") + patch("Makefile.patch", when="@1.0.3.1") + + def url_for_version(self, version): + pattern = re.compile(r"^[0-9]+\.[0-9]+\.[0-9]+") + full_vers = str(version) + cropped_vers = pattern.search(full_vers).group() + return f"https://downloads.sourceforge.net/project/cvector/cvector/CVector-{cropped_vers}/CVector-{full_vers}.tar.gz" + def edit(self, spec, prefix): mf = FileFilter("Makefile") mf.filter(r"^CC.+", "CC = {0}".format(spack_cc)) diff --git a/var/spack/repos/builtin/packages/cxx/package.py b/var/spack/repos/builtin/packages/cxx/package.py index bedd235fd8f14e..ac5c5cc5a6bae9 100644 --- a/var/spack/repos/builtin/packages/cxx/package.py +++ b/var/spack/repos/builtin/packages/cxx/package.py @@ -5,6 +5,8 @@ import os +import spack.compilers +import spack.spec from spack.package import * diff --git a/var/spack/repos/builtin/packages/cyrus-sasl/package.py b/var/spack/repos/builtin/packages/cyrus-sasl/package.py index f4f92d0a6dc73e..afc7bd68e88e96 100644 --- a/var/spack/repos/builtin/packages/cyrus-sasl/package.py +++ b/var/spack/repos/builtin/packages/cyrus-sasl/package.py @@ -23,6 +23,14 @@ class CyrusSasl(AutotoolsPackage): version("2.1.24", sha256="1df15c492f7ecb90be49531a347b3df21b041c2e0325dcc4fc5a6e98384c40dd") version("2.1.23", sha256="b1ec43f62d68446a6a5879925c63d94e26089c5a46cd83e061dd685d014c7d1f") + # ensure include time.h, https://github.com/cyrusimap/cyrus-sasl/pull/709 + patch( + "https://github.com/cyrusimap/cyrus-sasl/commit/266f0acf7f5e029afbb3e263437039e50cd6c262.patch?full_index=1", + sha256="819342fe68475ac1690136ff4ce9b73c028f433ae150898add36f724a8e2274b", + when="@2.1.27:2.1.28", + ) + conflicts("%gcc@14:", when="@:2.1.26") + depends_on("c", type="build") # generated depends_on("m4", type="build") diff --git a/var/spack/repos/builtin/packages/dakota/package.py b/var/spack/repos/builtin/packages/dakota/package.py index 2ab8e46e7a6981..35eb19168c5321 100644 --- a/var/spack/repos/builtin/packages/dakota/package.py +++ b/var/spack/repos/builtin/packages/dakota/package.py @@ -64,9 +64,9 @@ class Dakota(CMakePackage): version("6.9", sha256="989b689278964b96496e3058b8ef5c2724d74bcd232f898fe450c51eba7fe0c2") version("6.3", sha256="0fbc310105860d77bb5c96de0e8813d75441fca1a5e6dfaf732aa095c4488d52") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") variant("shared", default=True, description="Enables the build of shared libraries") variant("mpi", default=True, description="Activates MPI support") @@ -92,6 +92,19 @@ class Dakota(CMakePackage): depends_on("cmake@2.8.9:", type="build") depends_on("cmake@3.17:", type="build", when="@6.18:") + # dakota@:6.20 don't compile with gcc@13, and it is currently the latest version: + conflicts("%gcc@13:") + # dakota@:6.12 don't compile with gcc@12: + conflicts("%gcc@12:", when="@:6.12") + # dakota@:6.9 don't compile with gcc@11: + conflicts("%gcc@11:", when="@:6.9") + + def flag_handler(self, name, flags): + # from gcc@10, dakota@:6.12 need an extra flag + if self.spec.satisfies("@:6.12 %gcc@10:") and name == "fflags": + flags.append("-fallow-argument-mismatch") + return (flags, None, None) + def cmake_args(self): spec = self.spec diff --git a/var/spack/repos/builtin/packages/damask-grid/package.py b/var/spack/repos/builtin/packages/damask-grid/package.py index bf9dd8b5f20890..35398ebf7715d5 100644 --- a/var/spack/repos/builtin/packages/damask-grid/package.py +++ b/var/spack/repos/builtin/packages/damask-grid/package.py @@ -10,13 +10,14 @@ class DamaskGrid(CMakePackage): """Grid solver for DAMASK""" - homepage = "https://damask.mpie.de" - url = "https://damask.mpie.de/download/damask-3.0.0.tar.xz" + homepage = "https://damask-multiphysics.org" + url = "https://damask-multiphysics.org/download/damask-3.0.0.tar.xz" maintainers("MarDiehl") license("AGPL-3.0-or-later") + version("3.0.1", sha256="3db1231f6763356e71b3bb91f66f1abb4fdae2721ce85754fc468446f3d74882") version("3.0.0", sha256="aaebc65b3b10e6c313132ee97cfed427c115079b7e438cc0727c5207e159019f") version( "3.0.0-beta2", sha256="513567b4643f39e27ae32b9f75463fc6f388c1548d42f0393cc87ba02d075f6a" @@ -43,6 +44,7 @@ class DamaskGrid(CMakePackage): depends_on("c", type="build") # generated depends_on("fortran", type="build") # generated + depends_on("petsc@3.21:3.22", when="@3.0.1:") depends_on("petsc@3.21", when="@3.0.0-beta2:") depends_on("petsc@3.20.3:3.20", when="@3.0.0-beta") depends_on("petsc@3.20.2:3.20", when="@3.0.0-alpha8") @@ -60,7 +62,7 @@ class DamaskGrid(CMakePackage): # proper initialization of temperature to avoid segmentation fault. created by @MarDiehl patch("T-init.patch", when="@3.0.0-alpha7") - # relax Fortran sourc limit to 132 char to enable PETSc macro expansion. created by @MarDiehl + # relax Fortran source limit to 132 char to enable PETSc macro expansion. created by @MarDiehl patch("long-lines.patch", when="@3.0.0-alpha7") patch("CMakeDebugRelease.patch", when="@3.0.0-alpha4") diff --git a/var/spack/repos/builtin/packages/damask-mesh/package.py b/var/spack/repos/builtin/packages/damask-mesh/package.py index 5839e5d1f4235c..c7e13df7837903 100644 --- a/var/spack/repos/builtin/packages/damask-mesh/package.py +++ b/var/spack/repos/builtin/packages/damask-mesh/package.py @@ -10,13 +10,14 @@ class DamaskMesh(CMakePackage): """Mesh solver for DAMASK""" - homepage = "https://damask.mpie.de" - url = "https://damask.mpie.de/download/damask-3.0.0.tar.xz" + homepage = "https://damask-multiphysics.org" + url = "https://damask-multiphysics.org/download/damask-3.0.0.tar.xz" maintainers("MarDiehl") license("AGPL-3.0-or-later") + version("3.0.1", sha256="3db1231f6763356e71b3bb91f66f1abb4fdae2721ce85754fc468446f3d74882") version("3.0.0", sha256="aaebc65b3b10e6c313132ee97cfed427c115079b7e438cc0727c5207e159019f") version( "3.0.0-beta2", sha256="513567b4643f39e27ae32b9f75463fc6f388c1548d42f0393cc87ba02d075f6a" @@ -43,6 +44,7 @@ class DamaskMesh(CMakePackage): depends_on("c", type="build") # generated depends_on("fortran", type="build") # generated + depends_on("petsc@3.21:3.22", when="@3.0.1:") depends_on("petsc@3.21", when="@3.0.0-beta2:") depends_on("petsc@3.20.3:3.20", when="@3.0.0-beta") depends_on("petsc@3.20.2:3.20", when="@3.0.0-alpha8") @@ -57,7 +59,7 @@ class DamaskMesh(CMakePackage): depends_on("hdf5@1.10:+mpi+fortran") depends_on("libfyaml", when="@3.0.0-alpha7:") - # relax Fortran sourc limit to 132 char to enable PETSc macro expansion. created by @MarDiehl + # relax Fortran source limit to 132 char to enable PETSc macro expansion. created by @MarDiehl patch("long-lines.patch", when="@3.0.0-alpha7") patch("CMakeDebugRelease.patch", when="@3.0.0-alpha4") diff --git a/var/spack/repos/builtin/packages/damask/package.py b/var/spack/repos/builtin/packages/damask/package.py index ae9a62ef06c6f0..91c39a4e279d45 100644 --- a/var/spack/repos/builtin/packages/damask/package.py +++ b/var/spack/repos/builtin/packages/damask/package.py @@ -24,10 +24,11 @@ class Damask(BundlePackage): """ - homepage = "https://damask.mpie.de" + homepage = "https://damask-multiphysics.org" maintainers("MarDiehl") + version("3.0.1") version("3.0.0") version("3.0.0-beta2") version("3.0.0-beta") @@ -37,6 +38,10 @@ class Damask(BundlePackage): version("3.0.0-alpha5") version("3.0.0-alpha4") + depends_on("damask-grid@3.0.1", when="@3.0.1", type="run") + depends_on("damask-mesh@3.0.1", when="@3.0.1", type="run") + depends_on("py-damask@3.0.1", when="@3.0.1", type="run") + depends_on("damask-grid@3.0.0", when="@3.0.0", type="run") depends_on("damask-mesh@3.0.0", when="@3.0.0", type="run") depends_on("py-damask@3.0.0", when="@3.0.0", type="run") diff --git a/var/spack/repos/builtin/packages/darshan-runtime/package.py b/var/spack/repos/builtin/packages/darshan-runtime/package.py index 81bbd2877ea2d0..25f67b55f9742c 100644 --- a/var/spack/repos/builtin/packages/darshan-runtime/package.py +++ b/var/spack/repos/builtin/packages/darshan-runtime/package.py @@ -25,6 +25,7 @@ class DarshanRuntime(AutotoolsPackage): test_requires_compiler = True version("main", branch="main", submodules=True) + version("3.4.6", sha256="092b35e7af859af903dce0c51bcb5d3901dd0d9ad79d1b2f3282692407f032ee") version("3.4.5", sha256="1c017ac635fab5ee0e87a6b52c5c7273962813569495cb1dd3b7cfa6e19f6ed0") version("3.4.4", sha256="d9c9df5aca94dc5ca3d56fd763bec2f74771d35126d61cb897373d2166ccd867") version("3.4.3", sha256="dca5f9f9b0ead55a8724b218071ecbb5c4f2ef6027eaade3a6477256930ccc2c") diff --git a/var/spack/repos/builtin/packages/darshan-util/package.py b/var/spack/repos/builtin/packages/darshan-util/package.py index 8cbe414d76ab8a..38a9195c7add41 100644 --- a/var/spack/repos/builtin/packages/darshan-util/package.py +++ b/var/spack/repos/builtin/packages/darshan-util/package.py @@ -21,6 +21,7 @@ class DarshanUtil(AutotoolsPackage): tags = ["e4s"] version("main", branch="main", submodules="True") + version("3.4.6", sha256="092b35e7af859af903dce0c51bcb5d3901dd0d9ad79d1b2f3282692407f032ee") version("3.4.5", sha256="1c017ac635fab5ee0e87a6b52c5c7273962813569495cb1dd3b7cfa6e19f6ed0") version("3.4.4", sha256="d9c9df5aca94dc5ca3d56fd763bec2f74771d35126d61cb897373d2166ccd867") version("3.4.3", sha256="dca5f9f9b0ead55a8724b218071ecbb5c4f2ef6027eaade3a6477256930ccc2c") diff --git a/var/spack/repos/builtin/packages/dbus/package.py b/var/spack/repos/builtin/packages/dbus/package.py index 4b54a5fce89f1d..c200b357a71268 100644 --- a/var/spack/repos/builtin/packages/dbus/package.py +++ b/var/spack/repos/builtin/packages/dbus/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * @@ -29,6 +31,7 @@ class Dbus(AutotoolsPackage, MesonPackage): ) # Note: odd minor versions are unstable, keep last stable version preferred + version("1.15.12", sha256="0589c9c707dd593e31f0709caefa5828e69c668c887a7c0d2e5ba445a86bae4d") version("1.15.10", sha256="f700f2f1d0473f11e52f3f3e179f577f31b85419f9ae1972af8c3db0bcfde178") version( "1.14.10", diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py index 94563ec32dc78e..e9ed50ac7aa8bb 100644 --- a/var/spack/repos/builtin/packages/dealii/package.py +++ b/var/spack/repos/builtin/packages/dealii/package.py @@ -28,6 +28,8 @@ class Dealii(CMakePackage, CudaPackage): generator("make") version("master", branch="master") + version("9.6.0", sha256="675323f0eb8eed2cfc93e2ced07a0ec5727c6a566ff9e7786c01a2ddcde17bed") + version("9.5.2", sha256="7930e5218a9807d60cc05c300a3b70f36f4af22c3551a2cd1141fbab013bbaf1") version("9.5.1", sha256="a818b535e6488d3aef7853311657c7b4fadc29a9abe91b7b202b131aad630f5e") version("9.5.0", sha256="a81f41565f0d3a22d491ee687957dd48053225da72e8d6d628d210358f4a0464") version("9.4.2", sha256="45a76cb400bfcff25cc2d9093d9a5c91545c8367985e6798811c5e9d2a6a6fd4") @@ -78,7 +80,10 @@ class Dealii(CMakePackage, CudaPackage): values=("default", "11", "14", "17"), ) variant("doc", default=False, description="Compile with documentation") - variant("examples", default=True, description="Compile and install tutorial programs") + variant("examples", default=True, description="Install source files of tutorial programs") + variant( + "examples_compile", default=True, description="Install binary files of tutorial programs" + ) variant("int64", default=False, description="Compile with 64 bit indices support") variant("mpi", default=True, description="Compile with MPI") variant("optflags", default=False, description="Compile using additional optimization flags") @@ -91,6 +96,9 @@ class Dealii(CMakePackage, CudaPackage): variant("arpack", default=True, description="Compile with Arpack and PArpack (only with MPI)") variant("adol-c", default=True, description="Compile with ADOL-C") variant("cgal", default=True, when="@9.4:~cuda", description="Compile with CGAL") + variant( + "complex", default=False, when="@9.1.0:", description="Compile with complex value support" + ) variant("ginkgo", default=True, description="Compile with Ginkgo") variant("gmsh", default=True, description="Compile with GMSH") variant("gsl", default=True, description="Compile with GSL") @@ -100,7 +108,8 @@ class Dealii(CMakePackage, CudaPackage): variant("muparser", default=True, description="Compile with muParser") variant("nanoflann", default=False, description="Compile with Nanoflann") variant("netcdf", default=False, description="Compile with Netcdf (only with MPI)") - variant("oce", default=True, description="Compile with OCE") + variant("oce", default=False, description="Compile with OCE") + variant("opencascade", default=True, description="Compile with OPENCASCADE") variant("p4est", default=True, description="Compile with P4est (only with MPI)") variant("petsc", default=True, description="Compile with Petsc (only with MPI)") variant("scalapack", default=True, description="Compile with ScaLAPACK (only with MPI)") @@ -132,7 +141,7 @@ class Dealii(CMakePackage, CudaPackage): # dealii does not build with Boost 1.80.0 # (https://github.com/spack/spack/pull/32879#issuecomment-1265933265) depends_on( - "boost@1.59.0:1.63,1.65.1,1.67.0:1.79+thread+system+serialization+iostreams", + "boost@1.59.0:1.63,1.65.1,1.67.0:1.79,1.83:+thread+system+serialization+iostreams", patches=[ patch("boost_1.65.1_singleton.patch", level=1, when="@1.65.1"), patch("boost_1.68.0.patch", level=1, when="@1.68.0"), @@ -180,19 +189,25 @@ class Dealii(CMakePackage, CudaPackage): depends_on("arborx+trilinos", when="@9.3:+arborx+trilinos") depends_on("arpack-ng+mpi", when="+arpack+mpi") depends_on("assimp", when="@9.0:+assimp") - depends_on("cgal", when="@9.4:+cgal") - depends_on("cgal@5:", when="@9.5:+cgal") + # cgal 6 not yet supported: https://github.com/spack/spack/pull/47285#issuecomment-2455403447 + depends_on("cgal@:5", when="@9.4:+cgal") + depends_on("cgal@5", when="@9.5:+cgal") depends_on("doxygen+graphviz", when="+doc") depends_on("graphviz", when="+doc") depends_on("ginkgo", when="@9.1:+ginkgo") depends_on("ginkgo@1.4.0:", when="@9.4:+ginkgo") - depends_on("gmsh+tetgen+netgen+oce", when="@9.0:+gmsh", type=("build", "run")) + depends_on("gmsh+oce", when="@9.0:+gmsh+oce", type=("build", "run")) + depends_on("gmsh+opencascade", when="@9.0:+gmsh+opencascade", type=("build", "run")) + depends_on("gmsh", when="@9.0:+gmsh~opencascade~oce", type=("build", "run")) depends_on("gsl", when="@8.5.0:+gsl") # TODO: next line fixes concretization with petsc depends_on("hdf5+mpi+hl+fortran", when="+hdf5+mpi+petsc") depends_on("hdf5+mpi+hl", when="+hdf5+mpi~petsc") depends_on("kokkos@3.7:", when="@9.5:+kokkos~trilinos") - depends_on("kokkos@3.7:+cuda+cuda_lambda+wrapper", when="@9.5:+kokkos~trilinos+cuda") + depends_on("kokkos@3.7:+cuda+cuda_lambda+wrapper", when="@9.5:9.5.99+kokkos~trilinos+cuda") + depends_on( + "kokkos@3.7:+cuda+cuda_lambda+cuda_constexpr+wrapper", when="@9.6:+kokkos~trilinos+cuda" + ) # TODO: concretizer bug. The two lines mimic what comes from PETSc # but we should not need it depends_on("metis@5:+int64", when="+metis+int64") @@ -203,6 +218,7 @@ class Dealii(CMakePackage, CudaPackage): depends_on("netcdf-c+mpi", when="+netcdf+mpi") depends_on("netcdf-cxx", when="+netcdf+mpi") depends_on("oce", when="+oce") + depends_on("opencascade", when="+opencascade") depends_on("p4est", when="+p4est+mpi") depends_on("petsc+mpi~int64", when="+petsc+mpi~int64") depends_on("petsc+mpi+int64", when="+petsc+mpi+int64") @@ -214,6 +230,7 @@ class Dealii(CMakePackage, CudaPackage): depends_on("sundials@5:6.7", when="@9.3.4:+sundials") depends_on("taskflow@3.4:", when="@9.6:+taskflow") depends_on("trilinos gotype=int", when="+trilinos@12.18.1:") + depends_on("trilinos+cuda+cuda_constexpr", when="@9.6:+trilinos+cuda") # TODO: next line fixes concretization with trilinos and adol-c depends_on("trilinos~exodus", when="@9.0:+adol-c+trilinos") # Both Trilinos and SymEngine bundle the Teuchos RCP library. @@ -318,6 +335,8 @@ class Dealii(CMakePackage, CudaPackage): msg="Deal.II 9.6 onwards requires the C++ standard to be set to 17 or later.", ) + conflicts("oce", when="+opencascade", msg="Only one among OCE or OPENCASCADE can be selected.") + # Interfaces added in 8.5.0: for _package in ["gsl", "python"]: conflicts( @@ -465,7 +484,7 @@ def cmake_args(self): # Examples / tutorial programs options.append(self.define_from_variant("DEAL_II_COMPONENT_EXAMPLES", "examples")) - options.append(self.define_from_variant("DEAL_II_COMPILE_EXAMPLES", "examples")) + options.append(self.define_from_variant("DEAL_II_COMPILE_EXAMPLES", "examples_compile")) # Enforce the specified C++ standard if spec.variants["cxxstd"].value != "default": @@ -534,6 +553,9 @@ def cmake_args(self): if spec.satisfies("+trilinos"): options.extend([self.define("CMAKE_CXX_COMPILER", spec["trilinos"].kokkos_cxx)]) + # Complex support + options.append(self.define_from_variant("DEAL_II_WITH_COMPLEX_VALUES", "complex")) + # Python bindings if spec.satisfies("@8.5.0:"): options.append(self.define_from_variant("DEAL_II_COMPONENT_PYTHON_BINDINGS", "python")) @@ -642,11 +664,16 @@ def cmake_args(self): ] ) - # Open Cascade - options.append(self.define_from_variant("DEAL_II_WITH_OPENCASCADE", "oce")) - if spec.satisfies("+oce"): + # Open Cascade -- OCE + if "+oce" in spec: + options.append(self.define_from_variant("DEAL_II_WITH_OPENCASCADE", "oce")) options.append(self.define("OPENCASCADE_DIR", spec["oce"].prefix)) + # Open Cascade -- OpenCascade + if "+opencascade" in spec: + options.append(self.define_from_variant("DEAL_II_WITH_OPENCASCADE", "opencascade")) + options.append(self.define("OPENCASCADE_DIR", spec["opencascade"].prefix)) + # As a final step, collect CXX flags that may have been # added anywhere above: if len(cxx_flags_release) > 0 and "+optflags" in spec: diff --git a/var/spack/repos/builtin/packages/detray/package.py b/var/spack/repos/builtin/packages/detray/package.py index 1ea2022dfb3f88..ab94c97a835f33 100644 --- a/var/spack/repos/builtin/packages/detray/package.py +++ b/var/spack/repos/builtin/packages/detray/package.py @@ -20,6 +20,8 @@ class Detray(CMakePackage): license("MPL-2.0", checked_by="stephenswat") + version("0.81.0", sha256="821313a7e3ea90fcf5c92153d28bba1f85844e03d7c6b6b98d0b3407adb86357") + version("0.80.0", sha256="a12f3e333778ddd20a568b5c8df5b2375f9a4d74caf921822c1864b07b3f8ab7") version("0.79.0", sha256="3b9f18cb003e59795a0e4b1414069ac8558b975714626449293a71bc4398a380") version("0.78.0", sha256="ca3a348f4e12ed690c3106197e107b9c393b6902224b2543b00382050864bcf3") version("0.77.0", sha256="c2c72f65a7ff2426335b850c0b3cfbbbf666208612b2458c97a534ecf8029cb8") @@ -63,6 +65,7 @@ class Detray(CMakePackage): depends_on("cmake@3.11:", type="build") depends_on("vecmem@1.6.0:") + depends_on("vecmem@1.8.0:", when="@0.76:") depends_on("covfie@0.10.0:") depends_on("nlohmann-json@3.11.0:", when="+json") depends_on("dfelibs@20211029:") @@ -93,6 +96,9 @@ def cmake_args(self): self.define_from_variant("DETRAY_SMATRIX_PLUGIN", "smatrix"), self.define_from_variant("DETRAY_IO_CSV", "csv"), self.define_from_variant("DETRAY_IO_JSON", "json"), + self.define_from_variant("DETRAY_VC_PLUGIN", "vc"), + self.define_from_variant("DETRAY_VC_AOS_PLUGIN", "vc"), + self.define_from_variant("DETRAY_VC_SOA_PLUGIN", "vc"), self.define("DETRAY_SVG_DISPLAY", True), self.define("DETRAY_SETUP_ACTSVG", True), self.define("DETRAY_BUILD_TESTING", False), diff --git a/var/spack/repos/builtin/packages/diamond/package.py b/var/spack/repos/builtin/packages/diamond/package.py index c87e675eaebd5d..1ce6bcae9df68f 100644 --- a/var/spack/repos/builtin/packages/diamond/package.py +++ b/var/spack/repos/builtin/packages/diamond/package.py @@ -16,6 +16,7 @@ class Diamond(CMakePackage): license("GPL-3.0-only") + version("2.1.10", sha256="c6ede5df30d9d496af314e740964c35a0e358458d9c8d9b8dd517d69828d9981") version("2.1.9", sha256="4cde9df78c63e8aef9df1e3265cd06a93ce1b047d6dba513a1437719b70e9d88") version("2.1.8", sha256="b6088259f2bc92d1f9dc4add44590cff68321bcbf91eefbc295a3525118b9415") version("2.1.7", sha256="2dcaba0e79ecb02c3d2a6816d317e714767118a9a056721643abff4c586ca95b") diff --git a/var/spack/repos/builtin/packages/dire/package.py b/var/spack/repos/builtin/packages/dire/package.py index b819f019e794cc..fb7849a032bf41 100644 --- a/var/spack/repos/builtin/packages/dire/package.py +++ b/var/spack/repos/builtin/packages/dire/package.py @@ -4,7 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * -from spack.pkg.builtin.boost import Boost class Dire(Package): @@ -27,10 +26,6 @@ class Dire(Package): depends_on("zlib-api") - # TODO: replace this with an explicit list of components of Boost, - # for instance depends_on('boost +filesystem') - # See https://github.com/spack/spack/pull/22303 for reference - depends_on(Boost.with_default_variants) depends_on("lhapdf") depends_on("hepmc") depends_on("pythia8@8.226:") diff --git a/var/spack/repos/builtin/packages/direnv/package.py b/var/spack/repos/builtin/packages/direnv/package.py index e091d1242f22d3..58c8807424f496 100644 --- a/var/spack/repos/builtin/packages/direnv/package.py +++ b/var/spack/repos/builtin/packages/direnv/package.py @@ -16,6 +16,7 @@ class Direnv(GoPackage): license("MIT") + version("2.35.0", sha256="a7aaec49d1b305f0745dad364af967fb3dc9bb5befc9f29d268d528b5a474e57") version("2.34.0", sha256="3d7067e71500e95d69eac86a271a6b6fc3f2f2817ba0e9a589524bf3e73e007c") version("2.33.0", sha256="8ef18051aa6bdcd6b59f04f02acdd0b78849b8ddbdbd372d4957af7889c903ea") version("2.32.3", sha256="c66f6d1000f28f919c6106b5dcdd0a0e54fb553602c63c60bf59d9bbdf8bd33c") diff --git a/var/spack/repos/builtin/packages/diy/package.py b/var/spack/repos/builtin/packages/diy/package.py index 3c8b272c73cfa0..f0b70a90de7738 100644 --- a/var/spack/repos/builtin/packages/diy/package.py +++ b/var/spack/repos/builtin/packages/diy/package.py @@ -28,8 +28,8 @@ class Diy(CMakePackage): # https://gitlab.kitware.com/diatomic/diy/-/merge_requests/82 patch( "https://gitlab.kitware.com/diatomic/diy/-/commit/1d85dd5205b9f0035840e1840a49ea7028618d16.diff", - sha256="047bed205c905064923d7ecf1d03e38c07f3ae0baa0f4afe1b234f68315472d3", - when="@3.6:", + sha256="8d9ae569c4bf87e450a4d96b9a33c5d226011568ee83537a8cb0d46810839169", + when="@3.6", ) def cmake_args(self): diff --git a/var/spack/repos/builtin/packages/dla-future-fortran/package.py b/var/spack/repos/builtin/packages/dla-future-fortran/package.py index 0d50d05e002b28..0937a13782ea62 100644 --- a/var/spack/repos/builtin/packages/dla-future-fortran/package.py +++ b/var/spack/repos/builtin/packages/dla-future-fortran/package.py @@ -24,7 +24,9 @@ class DlaFutureFortran(CMakePackage): version("0.2.0", sha256="7fd3e1779c111b35f0d2701a024398b4f6e8dea4af523b6c8617d28c0b7ae61a") version("0.1.0", sha256="9fd8a105cbb2f3e1daf8a49910f98fce68ca0b954773dba98a91464cf2e7c1da") - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") variant("shared", default=True, description="Build shared libraries.") variant("test", default=False, description="Build tests.") diff --git a/var/spack/repos/builtin/packages/dock/package.py b/var/spack/repos/builtin/packages/dock/package.py index 86f7d5153ad6c0..1188963c989a1b 100644 --- a/var/spack/repos/builtin/packages/dock/package.py +++ b/var/spack/repos/builtin/packages/dock/package.py @@ -33,7 +33,7 @@ def setup_build_environment(self, env): env.set("MPICH_HOME", self.spec["mpi"].prefix) def install(self, spec, prefix): - compiler_targets = {"gcc": "gnu", "intel": "intel", "pgi": "pgi", "sgi": "sgi"} + compiler_targets = {"gcc": "gnu", "intel": "intel", "sgi": "sgi"} if self.compiler.name not in compiler_targets: template = "Unsupported compiler {0}! Supported compilers: {1}" @@ -41,9 +41,6 @@ def install(self, spec, prefix): raise InstallError(err) - if self.compiler.name == "pgi" and "+mpi" in spec: - raise InstallError("Parallel output is not supported with pgi.") - with working_dir("install"): sh_args = ["./configure", compiler_targets[self.compiler.name]] config_source = compiler_targets[self.compiler.name] diff --git a/var/spack/repos/builtin/packages/draco/package.py b/var/spack/repos/builtin/packages/draco/package.py index 9721303f95e262..b6ed230af938fc 100644 --- a/var/spack/repos/builtin/packages/draco/package.py +++ b/var/spack/repos/builtin/packages/draco/package.py @@ -20,6 +20,7 @@ class Draco(CMakePackage): license("BSD-3-Clause-Open-MPI") version("develop", branch="develop") + version("7.19.0", sha256="04b33cfea244052efcdd40d2b9dd79348749d34647aaf4dfcb15cdfdbe989783") version("7.18.0", sha256="b210e202a06ffdaf149193b5cba164411fd508e20e573e1dfc46d1f56e3fffaa") version("7.14.1", sha256="b05c75f1b8ea1d4fac4900d897fb1c948b470826b174ed8b97b32c6da9f030bf") version("7.14.0", sha256="c8abf293d81c1b8020907557c20d8d2f2edf9ac7ae60a534eab052a8c3b7f99d") @@ -83,6 +84,8 @@ class Draco(CMakePackage): conflicts("+cuda", when="@:7.6") conflicts("+caliper", when="@:7.7") + with when("@7.19.0:"): + conflicts("gcc@:9.0") # Fix python discovery. patch("d710.patch", when="@7.1.0") diff --git a/var/spack/repos/builtin/packages/dtc/package.py b/var/spack/repos/builtin/packages/dtc/package.py index 541041d5322d2b..8790d702fb92c2 100644 --- a/var/spack/repos/builtin/packages/dtc/package.py +++ b/var/spack/repos/builtin/packages/dtc/package.py @@ -24,9 +24,9 @@ class Dtc(MakefilePackage): # Build error with flex 2.6.3 # (convert-dtsv0-lexer.lex.c:398: error: "yywrap" redefined) depends_on("flex@2.6.4:", type="build") - depends_on("libyaml", type="build") depends_on("pkgconfig", type="build") depends_on("python", type="build") + depends_on("libyaml", type=("build", "link")) def edit(self, spec, prefix): makefile = FileFilter("Makefile") @@ -35,3 +35,14 @@ def edit(self, spec, prefix): makefile.filter( r"WARNINGS = -Wall", "WARNINGS = -Wall -Wno-unused-command-line-argument" ) + + if self.spec.satisfies("platform=darwin"): + libfdt_makefile = FileFilter("libfdt/Makefile.libfdt") + libfdt_makefile.filter( + r"LIBFDT_soname = .*", "LIBFDT_soname = libfdt.1.$(SHAREDLIB_EXT)" + ) + + @run_after("install") + def darwin_fix(self): + if self.spec.satisfies("platform=darwin"): + fix_darwin_install_name(self.prefix.lib) diff --git a/var/spack/repos/builtin/packages/dtcmp/package.py b/var/spack/repos/builtin/packages/dtcmp/package.py index 1fa7c28e1dc143..c331ea2ed36c33 100644 --- a/var/spack/repos/builtin/packages/dtcmp/package.py +++ b/var/spack/repos/builtin/packages/dtcmp/package.py @@ -17,6 +17,7 @@ class Dtcmp(AutotoolsPackage): maintainers("gonsie", "camstan", "adammoody") version("main", branch="main") + version("1.1.5", sha256="959c28999b8d1dd2e8703172db55392e38114fde0cd54dfad04555622c5e5974") version("1.1.4", sha256="dd83d8cecd68e13b78b68e88675cc5847cde06742b7740e140b98f4a08127dd3") version("1.1.3", sha256="90b32cadd0ff2f4fa7fc916f8dcfdbe6918e3e285e0292a2470772478ca0aab5") version("1.1.2", sha256="76e1d1fed89bf6abf003179a7aed93350d5ce6282cb000b02a241ec802ec399d") @@ -30,7 +31,8 @@ class Dtcmp(AutotoolsPackage): depends_on("lwgrp") depends_on("lwgrp@main", when="@main") - depends_on("lwgrp@1.0.5", when="@1.1.4") + depends_on("lwgrp@1.0.3:", when="@1.1.2:") + depends_on("lwgrp@1.0.5:", when="@1.1.4:") variant("shared", default=True, description="Build with shared libraries") depends_on("lwgrp+shared", when="+shared") diff --git a/var/spack/repos/builtin/packages/duckdb/package.py b/var/spack/repos/builtin/packages/duckdb/package.py index efb021ca678500..79f88acc414948 100644 --- a/var/spack/repos/builtin/packages/duckdb/package.py +++ b/var/spack/repos/builtin/packages/duckdb/package.py @@ -18,11 +18,26 @@ class Duckdb(MakefilePackage): maintainers("glentner", "teaguesterling") version("master", branch="master") + version("1.1.3", sha256="2aea0af898ad753fee82b776fea1bf78ccbc9648986e7f7a87372df5e74cdb98") + version("1.1.2", sha256="a3319a64c390ed0454c869b2e4fc0af2413cd49f55cd0f1400aaed9069cdbc4c") version("1.1.1", sha256="a764cef80287ccfd8555884d8facbe962154e7c747043c0842cd07873b4d6752") version("1.1.0", sha256="d9be2c6d3a5ebe2b3d33044fb2cb535bb0bd972a27ae38c4de5e1b4caa4bf68d") - version("1.0.0", sha256="04e472e646f5cadd0a3f877a143610674b0d2bcf9f4102203ac3c3d02f1c5f26") - version("0.10.3", sha256="7855587b3491dd488993287caee28720bee43ae28e92e8f41ea4631e9afcbf88") - version("0.10.2", sha256="662a0ba5c35d678ab6870db8f65ffa1c72e6096ad525a35b41b275139684cea6") + # CVE-2024-41672 + version( + "1.0.0", + sha256="04e472e646f5cadd0a3f877a143610674b0d2bcf9f4102203ac3c3d02f1c5f26", + deprecated=True, + ) + version( + "0.10.3", + sha256="7855587b3491dd488993287caee28720bee43ae28e92e8f41ea4631e9afcbf88", + deprecated=True, + ) + version( + "0.10.2", + sha256="662a0ba5c35d678ab6870db8f65ffa1c72e6096ad525a35b41b275139684cea6", + deprecated=True, + ) version( "0.10.0", sha256="5a925b8607d00a97c1a3ffe6df05c0a62a4df063abd022ada82ac1e917792013", @@ -186,5 +201,10 @@ def patch(self): def install(self, spec, prefix): mkdir(prefix.bin) + mkdirp(prefix.lib) + mkdir(prefix.include) build_dir = join_path("build", "release") install(join_path(build_dir, "duckdb"), prefix.bin) + install(join_path(build_dir, "src", "libduckdb.so"), prefix.lib) + install(join_path(build_dir, "src", "libduckdb_static.a"), prefix.lib) + install_tree(join_path("src", "include"), prefix.include) diff --git a/var/spack/repos/builtin/packages/dyninst/missing_include_deque.patch b/var/spack/repos/builtin/packages/dyninst/missing_include_deque.patch new file mode 100644 index 00000000000000..cee31fdbb0c5ee --- /dev/null +++ b/var/spack/repos/builtin/packages/dyninst/missing_include_deque.patch @@ -0,0 +1,11 @@ +diff --git a/dataflowAPI/src/AbslocInterface.C b/dataflowAPI/src/AbslocInterface.C +index 9d7ad000c..582e64004 100644 +--- a/dataflowAPI/src/AbslocInterface.C ++++ b/dataflowAPI/src/AbslocInterface.C +@@ -29,6 +29,7 @@ + */ + + ++#include + #include "Absloc.h" + #include "AbslocInterface.h" diff --git a/var/spack/repos/builtin/packages/dyninst/package.py b/var/spack/repos/builtin/packages/dyninst/package.py index f71ab53fb762ba..cca8a3026eb7e6 100644 --- a/var/spack/repos/builtin/packages/dyninst/package.py +++ b/var/spack/repos/builtin/packages/dyninst/package.py @@ -110,6 +110,11 @@ class Dyninst(CMakePackage): patch("stackanalysis_h.patch", when="@9.2.0") patch("v9.3.2-auto.patch", when="@9.3.2 %gcc@:4.7") patch("tribool.patch", when="@9.3.0:10.0.0 ^boost@1.69:") + patch( + "missing_include_deque.patch", + when="@10.0.0:12.2.0", + sha256="0064d8d51bd01bd0035e1ebc49276f627ce6366d4524c92cf47d3c09b0031f96", + ) requires("%gcc", when="@:13.0.0", msg="dyninst builds only with GCC") diff --git a/var/spack/repos/builtin/packages/easi/package.py b/var/spack/repos/builtin/packages/easi/package.py index e13180b6846df6..fbe2163509121f 100644 --- a/var/spack/repos/builtin/packages/easi/package.py +++ b/var/spack/repos/builtin/packages/easi/package.py @@ -32,6 +32,7 @@ class Easi(CMakePackage): variant("python", default=True, description="Install python bindings") extends("python", when="+python") + depends_on("mpi", when="+python") variant("asagi", default=True, description="build with ASAGI support") variant( diff --git a/var/spack/repos/builtin/packages/eccodes/package.py b/var/spack/repos/builtin/packages/eccodes/package.py index d05aeaa4873dbe..3c1e955cb2058e 100644 --- a/var/spack/repos/builtin/packages/eccodes/package.py +++ b/var/spack/repos/builtin/packages/eccodes/package.py @@ -50,6 +50,7 @@ class Eccodes(CMakePackage): license("Apache-2.0") version("develop", branch="develop") + version("2.38.0", sha256="96a21fbe8ca3aa4c31bb71bbd378b7fd130cbc0f7a477567d70e66a000ff68d9") version("2.34.0", sha256="3cd208c8ddad132789662cf8f67a9405514bfefcacac403c0d8c84507f303aba") version("2.33.0", sha256="bdcec8ce63654ec6803400c507f01220a9aa403a45fa6b5bdff7fdcc44fd7daf") version("2.32.1", sha256="ad2ac1bf36577b1d35c4a771b4d174a06f522a1e5ef6c1f5e53a795fb624863e") @@ -301,7 +302,7 @@ def libs(self): return libs msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) diff --git a/var/spack/repos/builtin/packages/edm4hep/package.py b/var/spack/repos/builtin/packages/edm4hep/package.py index 838c11b101c8f8..97c32283b061b8 100644 --- a/var/spack/repos/builtin/packages/edm4hep/package.py +++ b/var/spack/repos/builtin/packages/edm4hep/package.py @@ -61,12 +61,20 @@ class Edm4hep(CMakePackage): description="Use the specified C++ standard when building.", ) + variant( + "json", + default=True, + description="Build edm4hep with JSON support and edm4hep2json", + when="@0.99.2:", + ) + depends_on("cmake@3.3:", type="build") depends_on("cmake@3.23:", type="build", when="@0.10.3:") depends_on("python", type="build") depends_on("root@6.08:") - depends_on("nlohmann-json@3.10.5:") + depends_on("nlohmann-json@3.10.5:", when="@0.99.2: +json") + depends_on("nlohmann-json@3.10.5:", when="@:0.99.1") depends_on("podio@1:", when="@0.99:") depends_on("podio@0.15:", when="@:0.10.5") for _std in _cxxstd_values: @@ -88,6 +96,8 @@ def cmake_args(self): # C++ Standard args.append(self.define("CMAKE_CXX_STANDARD", self.spec.variants["cxxstd"].value)) args.append(self.define("BUILD_TESTING", self.run_tests)) + if self.spec.satisfies("@0.99.2: +json"): + args.append(self.define_from_variant("EDM4HEP_WITH_JSON", "json")) return args def setup_run_environment(self, env): diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py index e1fda7e9f72936..1909cdd96e8e72 100644 --- a/var/spack/repos/builtin/packages/eigen/package.py +++ b/var/spack/repos/builtin/packages/eigen/package.py @@ -7,17 +7,19 @@ from spack.package import * -class Eigen(CMakePackage): +class Eigen(CMakePackage, ROCmPackage): """Eigen is a C++ template library for linear algebra matrices, vectors, numerical solvers, and related algorithms. """ homepage = "https://eigen.tuxfamily.org/" + git = "https://gitlab.com/libeigen/eigen.git" url = "https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz" maintainers("HaoZeke") license("MPL-2.0") + version("master", branch="master") version("3.4.0", sha256="8586084f71f9bde545ee7fa6d00288b264a2b7ac3607b974e54d13e7162c1c72") version("3.3.9", sha256="7985975b787340124786f092b3a07d594b2e9cd53bbfe5f3d9b1daee7d55f56f") version("3.3.8", sha256="146a480b8ed1fb6ac7cd33fec9eb5e8f8f62c3683b3f850094d9d5c35a92419a") @@ -36,9 +38,12 @@ class Eigen(CMakePackage): version("3.2.6", sha256="e097b8dcc5ad30d40af4ad72d7052e3f78639469baf83cffaadc045459cda21f") version("3.2.5", sha256="8068bd528a2ff3885eb55225c27237cf5cda834355599f05c2c85345db8338b4") + variant("nightly", description="run Nightly test", default=False) depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated depends_on("fortran", type="build") # generated + # Older eigen releases haven't been tested with ROCm + conflicts("+rocm @:3.4.0") # there is a bug that provokes bad parsing of nvhpc version patch( @@ -68,6 +73,7 @@ class Eigen(CMakePackage): values=("Debug", "Release", "RelWithDebInfo"), ) + depends_on("boost@1.53:", when="@master", type="test") # TODO: latex and doxygen needed to produce docs with make doc # TODO: Other dependencies might be needed to test this package @@ -80,8 +86,21 @@ def cmake_args(self): # CMake fails without this flag # https://gitlab.com/libeigen/eigen/-/issues/1656 args += [self.define("BUILD_TESTING", "ON")] + if self.spec.satisfies("+rocm"): + args.append(self.define("ROCM_PATH", self.spec["hip"].prefix)) + args.append(self.define("HIP_PATH", self.spec["hip"].prefix)) + args.append(self.define("EIGEN_TEST_HIP", "ON")) + if self.spec.satisfies("@master") and self.run_tests: + args.append(self.define("Boost_INCLUDE_DIR", self.spec["boost"].prefix.include)) return args + def check(self): + ctest_args = ["--test-dir", self.build_directory, "--repeat", "until-pass:3"] + if self.spec.satisfies("+nightly"): + ctest_args.append("-D") + ctest_args.append("Nightly") + ctest(*ctest_args) + @property def headers(self): headers = find_all_headers(self.prefix.include) diff --git a/var/spack/repos/builtin/packages/elasticsearch/package.py b/var/spack/repos/builtin/packages/elasticsearch/package.py index b17ec0668613b4..200a8360539541 100644 --- a/var/spack/repos/builtin/packages/elasticsearch/package.py +++ b/var/spack/repos/builtin/packages/elasticsearch/package.py @@ -13,14 +13,23 @@ class Elasticsearch(Package): """ homepage = "https://www.elastic.co/" - url = "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.tar.gz" + url = "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.2-linux-x86_64.tar.gz" - version("6.4.0", sha256="e9786efb5cecd12adee2807c7640ba9a1ab3b484d2e87497bb8d0b6df0e24f01") - version("6.3.0", sha256="0464127140820d82b24bd2830232131ea85bcd49267a8bc7365e4fa391dee2a3") - version("6.2.4", sha256="91e6f1ea1e1dd39011e7a703d2751ca46ee374665b08b0bfe17e0c0c27000e8e") + version("8.15.2", sha256="0b6905ede457be9d1d73d0b6be1c3a7c7c6220829846b532f2604ad30ba7308f") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2018-3831 + version("6.4.0", sha256="e9786efb5cecd12adee2807c7640ba9a1ab3b484d2e87497bb8d0b6df0e24f01") + version("6.3.0", sha256="0464127140820d82b24bd2830232131ea85bcd49267a8bc7365e4fa391dee2a3") + version("6.2.4", sha256="91e6f1ea1e1dd39011e7a703d2751ca46ee374665b08b0bfe17e0c0c27000e8e") depends_on("java", type="run") + def url_for_version(self, version): + if self.spec.satisfies("@:6"): + return f"https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-{version}.tar.gz" + else: + return f"https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-{version}-linux-x86_64.tar.gz" + def install(self, spec, prefix): dirs = ["bin", "config", "lib", "modules", "plugins"] diff --git a/var/spack/repos/builtin/packages/elemental/package.py b/var/spack/repos/builtin/packages/elemental/package.py index a286b4b51543c2..85dba11538a32a 100644 --- a/var/spack/repos/builtin/packages/elemental/package.py +++ b/var/spack/repos/builtin/packages/elemental/package.py @@ -6,7 +6,6 @@ import os from spack.package import * -from spack.spec import UnsupportedCompilerError class Elemental(CMakePackage): @@ -94,6 +93,8 @@ class Elemental(CMakePackage): patch("elemental_cublas.patch", when="+cublas") patch("cmake_0.87.7.patch", when="@0.87.7") + conflicts("%intel@:17.0.2", when="@:0.87.7") + @property def libs(self): shared = True if "+shared" in self.spec else False @@ -101,14 +102,6 @@ def libs(self): def cmake_args(self): spec = self.spec - - if spec.satisfies("@:0.87.7") and spec.satisfies("%intel@:17.0.2"): - raise UnsupportedCompilerError( - "Elemental {0} has a known bug with compiler: {1} {2}".format( - spec.version, spec.compiler.name, spec.compiler.version - ) - ) - args = [ "-DCMAKE_INSTALL_MESSAGE:STRING=LAZY", "-DCMAKE_C_COMPILER=%s" % spec["mpi"].mpicc, diff --git a/var/spack/repos/builtin/packages/elk/package.py b/var/spack/repos/builtin/packages/elk/package.py index 4f357442225e13..a010200e49250f 100644 --- a/var/spack/repos/builtin/packages/elk/package.py +++ b/var/spack/repos/builtin/packages/elk/package.py @@ -125,8 +125,6 @@ def edit(self, spec, prefix): flags = "-O3 -ffast-math -funroll-loops" if spec.satisfies("%gcc@10:"): flags += " -fallow-argument-mismatch " - elif self.compiler.name == "pgi": - flags = "-O3 -lpthread" elif self.compiler.name == "g95": flags = "-O3 -fno-second-underscore" elif self.compiler.name == "nag": diff --git a/var/spack/repos/builtin/packages/elsi/package.py b/var/spack/repos/builtin/packages/elsi/package.py index e06936a754e693..43573255a09d2e 100644 --- a/var/spack/repos/builtin/packages/elsi/package.py +++ b/var/spack/repos/builtin/packages/elsi/package.py @@ -4,7 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import os.path -from spack.error import NoHeadersError from spack.package import * diff --git a/var/spack/repos/builtin/packages/enchant/package.py b/var/spack/repos/builtin/packages/enchant/package.py index 673a4d4152b6d6..3221b2332a570e 100644 --- a/var/spack/repos/builtin/packages/enchant/package.py +++ b/var/spack/repos/builtin/packages/enchant/package.py @@ -41,8 +41,9 @@ class Enchant(AutotoolsPackage): version("2.1.1", sha256="5fad0a1e82ddfed91647e93da5955fc76249760fd51865648a36074dc97d526c") version("2.1.0", sha256="2cdda2d9edb62ad895c34be35c598d56ac5b9b9298f3dfdaa2b40a1914d1db7e") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("pkgconfig", type="build", when="platform=linux") variant("hunspell", default=True, description="Enables hunspell backend") diff --git a/var/spack/repos/builtin/packages/environment-modules/package.py b/var/spack/repos/builtin/packages/environment-modules/package.py index 173c340162fd3c..2b28e5651d161e 100644 --- a/var/spack/repos/builtin/packages/environment-modules/package.py +++ b/var/spack/repos/builtin/packages/environment-modules/package.py @@ -13,12 +13,13 @@ class EnvironmentModules(Package): """ homepage = "https://cea-hpc.github.io/modules/" - url = "https://github.com/cea-hpc/modules/releases/download/v5.4.0/modules-5.4.0.tar.gz" + url = "https://github.com/cea-hpc/modules/releases/download/v5.5.0/modules-5.5.0.tar.gz" git = "https://github.com/cea-hpc/modules.git" maintainers("xdelaruelle") version("main", branch="main") + version("5.5.0", sha256="ad0e360c7adc2515a99836863d98499b3ad89cd7548625499b20293845b040cb") version("5.4.0", sha256="586245cbf9420866078d8c28fce8ef4f192530c69a0f368f51e848340dcf3b90") version("5.3.1", sha256="d02f9ce4f8baf6c99edceb7c73bfdd1e97d77bcc4725810b86efed9f58dda962") version("5.3.0", sha256="21b8daa0181044ef65097a1e3517af1f24e7c7343cc5bdaf70be11e3cb0edb51") @@ -62,6 +63,7 @@ class EnvironmentModules(Package): variant("X", default=True, description="Build with X functionality") + depends_on("util-linux", type=("build", "run"), when="@5.5:") depends_on("less", type=("build", "run"), when="@4.1:") with when("@main"): depends_on("autoconf", type="build") @@ -75,7 +77,8 @@ class EnvironmentModules(Package): # Dependencies: depends_on("tcl", type=("build", "link", "run")) depends_on("tcl@8.4:", type=("build", "link", "run"), when="@4.0.0:4.8") - depends_on("tcl@8.5:", type=("build", "link", "run"), when="@5.0.0:") + depends_on("tcl@8.5:8", type=("build", "link", "run"), when="@5.0.0:5.4.0") + depends_on("tcl@8.5:", type=("build", "link", "run"), when="@5.5.0:") def install(self, spec, prefix): tcl = spec["tcl"] @@ -95,6 +98,9 @@ def install(self, spec, prefix): if spec.satisfies("~X"): config_args = ["--without-x"] + config_args + if self.spec.satisfies("@5.5.0:"): + config_args.extend(["--enable-conflict-unload"]) + if self.spec.satisfies("@4.4.0:4.8"): config_args.extend( [ @@ -140,6 +146,9 @@ def install(self, spec, prefix): ] ) + if self.spec.satisfies("@5.5:"): + config_args.append(f"--with-logger={str(self.spec['util-linux'].prefix.bin.logger)}") + if self.spec.satisfies("@4.1:"): config_args.append(f"--with-pager={str(self.spec['less'].prefix.bin.less)}") diff --git a/var/spack/repos/builtin/packages/er/package.py b/var/spack/repos/builtin/packages/er/package.py index 499091390e7c7f..bb2dd375014fa1 100644 --- a/var/spack/repos/builtin/packages/er/package.py +++ b/var/spack/repos/builtin/packages/er/package.py @@ -19,6 +19,7 @@ class Er(CMakePackage): license("MIT") version("main", branch="main") + version("0.5.0", sha256="dbde4da1fe115b67334085446d413f7365ba94c0a34cb1c38b83944e8fba4d0b") version("0.4.0", sha256="6cb5b6724ddac5c1f5ed6b326a5f3bf5d4eb1c6958a48218e6ca9bb7c02e48a8") version("0.3.0", sha256="01bc71bfb2ebb015ccb948f2bb9138b70972a3e8be0e53f9a4844e46b106a36c") version("0.2.0", sha256="9ddfe2b63682ed0e89685f9b7d5259ef82b802aba55c8ee78cc15a7adbad6bc0") @@ -26,7 +27,8 @@ class Er(CMakePackage): version("0.0.4", sha256="c456d34719bb57774adf6d7bc2fa9917ecb4a9de442091023c931a2cb83dfd37") version("0.0.3", sha256="243b2b46ea274e17417ef5873c3ed7ba16dacdfdaf7053d1de5434e300de796b") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("mpi") depends_on("kvtree+mpi") diff --git a/var/spack/repos/builtin/packages/esmf/package.py b/var/spack/repos/builtin/packages/esmf/package.py index c953465b6e76b6..20a7223e630161 100644 --- a/var/spack/repos/builtin/packages/esmf/package.py +++ b/var/spack/repos/builtin/packages/esmf/package.py @@ -6,6 +6,9 @@ import os import sys +import spack.build_systems.makefile +import spack.build_systems.python +import spack.compiler from spack.build_environment import dso_suffix, stat_suffix from spack.package import * @@ -276,8 +279,6 @@ def setup_build_environment(self, env): ) elif self.pkg.compiler.name == "nag": env.set("ESMF_COMPILER", "nag") - elif self.pkg.compiler.name == "pgi": - env.set("ESMF_COMPILER", "pgi") elif self.pkg.compiler.name == "nvhpc": env.set("ESMF_COMPILER", "nvhpc") elif self.pkg.compiler.name == "cce": diff --git a/var/spack/repos/builtin/packages/exawind/package.py b/var/spack/repos/builtin/packages/exawind/package.py index 82a8a094060a07..f7c611a918fe34 100644 --- a/var/spack/repos/builtin/packages/exawind/package.py +++ b/var/spack/repos/builtin/packages/exawind/package.py @@ -18,10 +18,12 @@ class Exawind(CMakePackage, CudaPackage, ROCmPackage): license("Apache-2.0") - version("master", branch="main", submodules=True, preferred=True) + version("master", branch="main", submodules=True) + version("1.1.0", tag="v1.1.0", submodules=True) version("1.0.0", tag="v1.0.0", submodules=True) - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("amr_wind_gpu", default=False, description="Enable AMR-Wind on the GPU") variant("nalu_wind_gpu", default=False, description="Enable Nalu-Wind on the GPU") diff --git a/var/spack/repos/builtin/packages/expat/package.py b/var/spack/repos/builtin/packages/expat/package.py index a41d4912de8415..485f773a82db83 100644 --- a/var/spack/repos/builtin/packages/expat/package.py +++ b/var/spack/repos/builtin/packages/expat/package.py @@ -16,9 +16,14 @@ class Expat(AutotoolsPackage, CMakePackage): url = "https://github.com/libexpat/libexpat/releases/download/R_2_2_9/expat-2.2.9.tar.bz2" license("MIT") - - version("2.6.3", sha256="b8baef92f328eebcf731f4d18103951c61fa8c8ec21d5ff4202fb6f2198aeb2d") - # deprecate all releases before 2.6.3 because of security issues + version("2.6.4", sha256="8dc480b796163d4436e6f1352e71800a774f73dbae213f1860b60607d2a83ada") + # deprecate all releases before 2.6.4 because of security issues + # CVE-2024-50602 (fixed in 2.6.4) + version( + "2.6.3", + sha256="b8baef92f328eebcf731f4d18103951c61fa8c8ec21d5ff4202fb6f2198aeb2d", + deprecated=True, + ) # CVE-2024-45490 (fixed in 2.6.3) # CVE-2024-45491 (fixed in 2.6.3) # CVE-2024-45492 (fixed in 2.6.3) diff --git a/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch b/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch new file mode 100644 index 00000000000000..08c691c4f74711 --- /dev/null +++ b/var/spack/repos/builtin/packages/extrae/dyninst_instruction.patch @@ -0,0 +1,19 @@ +diff --git a/src/launcher/dyninst/commonSnippets.C b/src/launcher/dyninst/commonSnippets.C +index 94904a23..2f918949 100644 +--- a/src/launcher/dyninst/commonSnippets.C ++++ b/src/launcher/dyninst/commonSnippets.C +@@ -482,9 +482,10 @@ string decodeBasicBlocks(BPatch_function * function, string routine) + ParseAPI::Block* b = ParseAPI::convert(block); + void * buf = b->region()->getPtrToInstruction(b->start()); + InstructionAPI::InstructionDecoder dec((unsigned char*)buf,b->size(),b->region()->getArch()); +- InstructionAPI::Instruction::Ptr insn; +- while((insn = dec.decode())) { +- res <format() << endl; ++ InstructionAPI::Instruction insn = dec.decode(); ++ while(insn.isValid()) { ++ res <. + if self.spec.satisfies("%gcc@14:") and name == "cflags": + flags.extend( + [ + "-Wno-error=incompatible-pointer-types", + "-Wno-error=implicit-function-declaration", + "-Wno-error=int-conversion", + ] + ) + return self.build_system_flags(name, flags) def install(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/eza/package.py b/var/spack/repos/builtin/packages/eza/package.py index 98e1582ff6ac15..321b4aab22e6bf 100644 --- a/var/spack/repos/builtin/packages/eza/package.py +++ b/var/spack/repos/builtin/packages/eza/package.py @@ -14,6 +14,23 @@ class Eza(CargoPackage): maintainers("trws") - license("MIT") + license("EUPL-1.2", when="@0.20:", checked_by="pranav-sivaraman") + license("MIT", when="@:0.19", checked_by="pranav-sivaraman") + version("0.20.4", sha256="5f25e866521c310d9530b9bbabeb288ad8d9cd208adee79582dde79bdd51c470") version("0.15.3", sha256="09093e565913104acb7a8eba974f8067c95566b6fbedf31138c9923a8cfde42f") + + depends_on("rust@1.70:", when="@0.15.3:") + + @run_after("install") + def install_completions(self): + package_completions_path = f"{self.stage.source_path}/completions" + + mkdirp(bash_completion_path(self.prefix)) + copy(f"{package_completions_path}/bash/eza", bash_completion_path(self.prefix)) + + mkdirp(zsh_completion_path(self.prefix)) + copy(f"{package_completions_path}/zsh/_eza", zsh_completion_path(self.prefix)) + + mkdirp(fish_completion_path(self.prefix)) + copy(f"{package_completions_path}/fish/eza.fish", fish_completion_path(self.prefix)) diff --git a/var/spack/repos/builtin/packages/faiss/package.py b/var/spack/repos/builtin/packages/faiss/package.py index 5af55c95df5103..ceb57a874ec0d3 100644 --- a/var/spack/repos/builtin/packages/faiss/package.py +++ b/var/spack/repos/builtin/packages/faiss/package.py @@ -5,6 +5,7 @@ import os +from spack.build_systems import autotools, cmake, python from spack.package import * @@ -91,7 +92,7 @@ def setup_run_environment(self, env): env.append_path("LD_LIBRARY_PATH", os.path.join(python_platlib, "faiss")) -class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): +class CMakeBuilder(cmake.CMakeBuilder): def cmake_args(self): spec = self.spec args = [ @@ -113,20 +114,19 @@ def install(self, pkg, spec, prefix): super().install(pkg, spec, prefix) if spec.satisfies("+python"): - class CustomPythonPipBuilder(spack.build_systems.python.PythonPipBuilder): + class CustomPythonPipBuilder(python.PythonPipBuilder): def __init__(self, pkg, build_dirname): - spack.build_systems.python.PythonPipBuilder.__init__(self, pkg) + python.PythonPipBuilder.__init__(self, pkg) self.build_dirname = build_dirname @property def build_directory(self): return os.path.join(self.pkg.stage.path, self.build_dirname, "faiss", "python") - customPip = CustomPythonPipBuilder(pkg, self.build_dirname) - customPip.install(pkg, spec, prefix) + CustomPythonPipBuilder(pkg, self.build_dirname).install(pkg, spec, prefix) -class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): +class AutotoolsBuilder(autotools.AutotoolsBuilder): def configure_args(self): args = [] args.extend(self.with_or_without("cuda", activation_value="prefix")) @@ -156,8 +156,7 @@ def install(self, pkg, spec, prefix): if self.spec.satisfies("+python"): with working_dir("python"): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*python.PythonPipBuilder.std_args(pkg), f"--prefix={prefix}", ".") if "+tests" not in self.spec: return diff --git a/var/spack/repos/builtin/packages/fds/package.py b/var/spack/repos/builtin/packages/fds/package.py index 3143eddde07390..51c983a09dd4fd 100644 --- a/var/spack/repos/builtin/packages/fds/package.py +++ b/var/spack/repos/builtin/packages/fds/package.py @@ -77,7 +77,7 @@ class Fds(MakefilePackage): def edit(self, spec, prefix): env["MKL_ROOT"] = self.spec["mkl"].prefix - if spec.compiler.name == "oneapi": + if spec.satisfies("%oneapi"): env["INTEL_IFORT"] = "ifx" makefile = FileFilter("Build/makefile") makefile.filter(r"\.\./Scripts", "./Scripts") diff --git a/var/spack/repos/builtin/packages/fenics/package.py b/var/spack/repos/builtin/packages/fenics/package.py index ec9d77b5c4ad1a..cec4412ee6579d 100644 --- a/var/spack/repos/builtin/packages/fenics/package.py +++ b/var/spack/repos/builtin/packages/fenics/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * from spack.pkg.builtin.boost import Boost @@ -194,5 +195,4 @@ def setup_run_environment(self, env): def install_python_interface(self): if self.spec.satisfies("+python"): with working_dir("python"): - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py index 44aace9f3ed3d4..028248fa93dd6e 100644 --- a/var/spack/repos/builtin/packages/fftw/package.py +++ b/var/spack/repos/builtin/packages/fftw/package.py @@ -129,12 +129,8 @@ def configure(self, spec, prefix): # float only float_simd_features = ["altivec", "sse", "neon"] - # Workaround PGI compiler bug when avx2 is enabled - if spec.satisfies("%pgi") and "avx2" in simd_features: - simd_features.remove("avx2") - # Workaround NVIDIA/PGI compiler bug when avx512 is enabled - if spec.satisfies("%nvhpc") or spec.satisfies("%pgi"): + if spec.satisfies("%nvhpc"): if "avx512" in simd_features: simd_features.remove("avx512") @@ -254,5 +250,4 @@ class Fftw(FftwBase): ) patch("pfft-3.3.5.patch", when="@3.3.5:3.3.8+pfft_patches", level=0) patch("pfft-3.3.4.patch", when="@3.3.4+pfft_patches", level=0) - patch("pgi-3.3.6-pl2.patch", when="@3.3.6-pl2%pgi", level=0) patch("intel-configure.patch", when="@3:3.3.8%intel", level=0) diff --git a/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch b/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch deleted file mode 100644 index 1822db12311593..00000000000000 --- a/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch +++ /dev/null @@ -1,121 +0,0 @@ ---- configure 2017-01-27 16:08:52.000000000 -0500 -+++ configure 2017-05-08 22:34:32.358821182 -0400 -@@ -21744,117 +21744,7 @@ - - # Various other checks: - if test "x$acx_pthread_ok" = xyes; then -- save_LIBS="$LIBS" -- LIBS="$PTHREAD_LIBS $LIBS" -- save_CFLAGS="$CFLAGS" -- CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -- -- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 --$as_echo_n "checking for joinable pthread attribute... " >&6; } -- attr_name=unknown -- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do -- cat confdefs.h - <<_ACEOF >conftest.$ac_ext --/* end confdefs.h. */ --#include --#ifdef F77_DUMMY_MAIN -- --# ifdef __cplusplus -- extern "C" --# endif -- int F77_DUMMY_MAIN() { return 1; } -- --#endif --int --main () --{ --int attr=$attr; return attr; -- ; -- return 0; --} --_ACEOF --if ac_fn_c_try_link "$LINENO"; then : -- attr_name=$attr; break --fi --rm -f core conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext -- done -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 --$as_echo "$attr_name" >&6; } -- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then -- --cat >>confdefs.h <<_ACEOF --#define PTHREAD_CREATE_JOINABLE $attr_name --_ACEOF -- -- fi -- -- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 --$as_echo_n "checking if more special flags are required for pthreads... " >&6; } -- flag=no -- case "${host_cpu}-${host_os}" in -- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; -- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; -- esac -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 --$as_echo "${flag}" >&6; } -- if test "x$flag" != xno; then -- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" -- fi -- -- LIBS="$save_LIBS" -- CFLAGS="$save_CFLAGS" -- -- # More AIX lossage: must compile with xlc_r or cc_r -- if test x"$GCC" != xyes; then -- for ac_prog in xlc_r cc_r --do -- # Extract the first word of "$ac_prog", so it can be a program name with args. --set dummy $ac_prog; ac_word=$2 --{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 --$as_echo_n "checking for $ac_word... " >&6; } --if ${ac_cv_prog_PTHREAD_CC+:} false; then : -- $as_echo_n "(cached) " >&6 --else -- if test -n "$PTHREAD_CC"; then -- ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_PTHREAD_CC="$ac_prog" -- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done -- done --IFS=$as_save_IFS -- --fi --fi --PTHREAD_CC=$ac_cv_prog_PTHREAD_CC --if test -n "$PTHREAD_CC"; then -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 --$as_echo "$PTHREAD_CC" >&6; } --else -- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 --$as_echo "no" >&6; } --fi -- -- -- test -n "$PTHREAD_CC" && break --done --test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" -- -- else -- PTHREAD_CC=$CC -- fi --else -- PTHREAD_CC="$CC" -+ PTHREAD_CC="$CC" - fi - - diff --git a/var/spack/repos/builtin/packages/fftx/package.py b/var/spack/repos/builtin/packages/fftx/package.py index 96ed533315bf18..b132231d149e50 100644 --- a/var/spack/repos/builtin/packages/fftx/package.py +++ b/var/spack/repos/builtin/packages/fftx/package.py @@ -30,7 +30,8 @@ class Fftx(CMakePackage, CudaPackage, ROCmPackage): version("1.1.0", sha256="a6f95605abc11460bbf51839727a456a31488e27e12a970fc29a1b8c42f4e3b5") version("1.0.3", sha256="b5ff275facce4a2fbabd0aecc65dd55b744794f2e07cd8cfa91363001c664896") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("spiral-software+fftx+simt+jit+mpi") # depend only on spiral-software, but spiral-software must be installed with variants: diff --git a/var/spack/repos/builtin/packages/fides/package.py b/var/spack/repos/builtin/packages/fides/package.py index c7463005f75321..ca13b067108987 100644 --- a/var/spack/repos/builtin/packages/fides/package.py +++ b/var/spack/repos/builtin/packages/fides/package.py @@ -20,7 +20,8 @@ class Fides(CMakePackage): version("1.1.0", sha256="40d2e08b8d5cfdfc809eae6ed2ae0731108ce3b1383485f4934a5ec8aaa9425e") version("1.0.0", sha256="c355fdb4ca3790c1fa9a4491a0d294b8f883b6946c540ad9e5633c9fd8c8c3aa") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("mpi", default=True, description="build mpi support") # Certain CMake versions have been found to break for our use cases diff --git a/var/spack/repos/builtin/packages/flatbuffers/package.py b/var/spack/repos/builtin/packages/flatbuffers/package.py index 38cac7d8e9835c..38ac09ef24babd 100644 --- a/var/spack/repos/builtin/packages/flatbuffers/package.py +++ b/var/spack/repos/builtin/packages/flatbuffers/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -59,8 +60,7 @@ def python_install(self): if self.spec.satisfies("+python"): pydir = join_path(self.stage.source_path, "python") with working_dir(pydir): - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") def cmake_args(self): args = [] diff --git a/var/spack/repos/builtin/packages/fleur/package.py b/var/spack/repos/builtin/packages/fleur/package.py index dc2e6d7727761e..d5294733cc178c 100644 --- a/var/spack/repos/builtin/packages/fleur/package.py +++ b/var/spack/repos/builtin/packages/fleur/package.py @@ -68,11 +68,6 @@ class Fleur(Package): conflicts("%intel@:16.0.4", msg="ifort version <16.0 will most probably not work correctly") conflicts("%gcc@:6.3.0", msg="gfortran is known to work with versions newer than v6.3") - conflicts( - "%pgi@:18.4.0", - msg="You need at least PGI version 18.4 \ - but might still run into some problems.", - ) conflicts("~scalapack", when="+elpa", msg="ELPA requires scalapack support") conflicts("@:5.0", when="fft=fftw", msg="FFTW interface is supported from Fleur v5.0") conflicts("@:5.0", when="+wannier90", msg="wannier90 is supported from Fleur v5.0") diff --git a/var/spack/repos/builtin/packages/flux-core/package.py b/var/spack/repos/builtin/packages/flux-core/package.py index 52eddda9fc938a..0e269925379198 100644 --- a/var/spack/repos/builtin/packages/flux-core/package.py +++ b/var/spack/repos/builtin/packages/flux-core/package.py @@ -5,7 +5,6 @@ import os -import spack.util.executable from spack.package import * @@ -92,7 +91,8 @@ class FluxCore(AutotoolsPackage): # `link` dependency on python due to Flux's `pymod` module depends_on("python@3.6:", type=("build", "link", "run")) # Use of distutils in configure script dropped in v0.55 - depends_on("python@:3.11", when="@:0.54", type=("build", "link", "run")) + # Detection of cffi version fixed in v0.68 + depends_on("python@:3.11", when="@:0.67", type=("build", "link", "run")) depends_on("py-cffi@1.1:", type=("build", "run")) depends_on("py-pyyaml@3.10:", type=("build", "run")) depends_on("py-jsonschema@2.3:", type=("build", "run"), when="@:0.58.0") @@ -156,7 +156,7 @@ def setup(self): git("fetch", "--unshallow") git("config", "remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*") git("fetch", "origin") - except spack.util.executable.ProcessError: + except ProcessError: git("fetch") def autoreconf(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/flux-sched/package.py b/var/spack/repos/builtin/packages/flux-sched/package.py index 66d5532bf31db9..1b7acc85084663 100644 --- a/var/spack/repos/builtin/packages/flux-sched/package.py +++ b/var/spack/repos/builtin/packages/flux-sched/package.py @@ -5,7 +5,6 @@ import os -import spack.util.executable from spack.build_systems.autotools import AutotoolsBuilder from spack.build_systems.cmake import CMakeBuilder from spack.package import * @@ -24,6 +23,7 @@ class FluxSched(CMakePackage, AutotoolsPackage): license("LGPL-3.0-only") version("master", branch="master") + version("0.39.0", sha256="7e87029f8ad17b9286096e4e2d44982b5d6634908aefde3282497bdd3f44f2f8") version("0.38.0", sha256="0cb3efbd490256b28df580bb14f8e89c02084a9126e0b1754d6334a99ecfa969") version("0.37.0", sha256="b354d451183fcb8455e6a61d31e18c7f4af13e16a86b71216738f0991a7bcd50") version("0.36.1", sha256="0ee37ed364912f3f5a48ed5b5f5f21cb86cda43ff357486695b9454c217ad8b8") @@ -139,7 +139,7 @@ def setup(self): git("fetch", "--unshallow") git("config", "remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*") git("fetch", "origin") - except spack.util.executable.ProcessError: + except ProcessError: git("fetch") def autoreconf(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/flux-security/package.py b/var/spack/repos/builtin/packages/flux-security/package.py index 23183c6d3b5076..79d253cd5aa287 100644 --- a/var/spack/repos/builtin/packages/flux-security/package.py +++ b/var/spack/repos/builtin/packages/flux-security/package.py @@ -5,7 +5,6 @@ import os -import spack.util.executable from spack.package import * @@ -22,6 +21,7 @@ class FluxSecurity(AutotoolsPackage): license("LGPL-3.0-or-later") version("master", branch="master") + version("0.12.0", sha256="2876d1f10c4f898f2ff10d60ddb446af9c8a913dda69f0136d820ad1fdf28a93") version("0.11.0", sha256="d1ef78a871155a252f07e4f0a636eb272d6c2048d5e0e943860dd687c6cf808a") version("0.10.0", sha256="b0f39c5e32322f901454469ffd6154019b6dffafc064b55b3e593f70db6a6f68") version("0.9.0", sha256="2258120c6f32ca0b5b13b166bae56d9bd82a44c6eeaa6bc6187e4a4419bdbcc0") @@ -54,7 +54,7 @@ def setup(self): git("fetch", "--unshallow") git("config", "remote.origin.fetch", "+refs/heads/*:refs/remotes/origin/*") git("fetch", "origin") - except spack.util.executable.ProcessError: + except ProcessError: git("fetch") def autoreconf(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/flux/package.py b/var/spack/repos/builtin/packages/flux/package.py new file mode 100644 index 00000000000000..934f9d56554f20 --- /dev/null +++ b/var/spack/repos/builtin/packages/flux/package.py @@ -0,0 +1,39 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class Flux(CMakePackage): + """A C++20 library for sequence-orientated programming""" + + homepage = "https://tristanbrindle.com/flux/" + url = "https://github.com/tcbrindle/flux/archive/refs/tags/v0.4.0.tar.gz" + + maintainers("pranav-sivaraman") + + license("BSL-1.0", checked_by="pranav-sivaraman") + + version("0.4.0", sha256="95e7d9d71c9ee9e89bb24b46ccba77ddfb0a1580630c2faab0b415dacc7c8d56") + + variant("docs", default=False, description="Build Flux documentation") + + depends_on("cxx", type="build") + depends_on("cmake@3.23:", type="build") + + with default_args(when="+docs"): + depends_on("py-sphinx") + depends_on("py-sphinx-copybutton") + depends_on("py-furo") + + def cmake_args(self): + args = [ + self.define("FLUX_BUILD_TESTS", self.run_tests), + self.define("FLUX_BUILD_EXAMPLES", False), + self.define_from_variant("FLUX_BUILD_DOCS", "docs"), + ] + + return args diff --git a/var/spack/repos/builtin/packages/fmi4cpp/package.py b/var/spack/repos/builtin/packages/fmi4cpp/package.py new file mode 100644 index 00000000000000..837c3e8ef85031 --- /dev/null +++ b/var/spack/repos/builtin/packages/fmi4cpp/package.py @@ -0,0 +1,32 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Fmi4cpp(CMakePackage): + """FMI4cpp is a cross-platform FMI 2.0 implementation written in modern C++. + FMI4cpp supports both Co-simulation and Model Exchange. + """ + + homepage = "https://github.com/NTNU-IHB/FMI4cpp" + url = "https://github.com/NTNU-IHB/FMI4cpp/archive/refs/tags/v0.8.3.tar.gz" + git = "https://github.com/NTNU-IHB/FMI4cpp.git" + + maintainers("prudhomm") + license("MIT", checked_by="prudhomm") + + version("master", branch="master") + version("0.8.3", sha256="f48c630f087bdf8d7a04611f6f30942c870c3c1211a94ef2404c40baa4bcb2c9") + + variant("shared", default=True, description="Build shared library") + + depends_on("cxx", type="build") + depends_on("libzip") + depends_on("pugixml") + + def cmake_args(self): + args = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")] + return args diff --git a/var/spack/repos/builtin/packages/fmt/package.py b/var/spack/repos/builtin/packages/fmt/package.py index c0d1b2461a9f7b..72f1e115631dca 100644 --- a/var/spack/repos/builtin/packages/fmt/package.py +++ b/var/spack/repos/builtin/packages/fmt/package.py @@ -47,6 +47,7 @@ class Fmt(CMakePackage): version("3.0.0", sha256="1b050b66fa31b74f1d75a14f15e99e728ab79572f176a53b2f8ad7c201c30ceb") version("master", branch="master") + depends_on("c", type="build") depends_on("cxx", type="build") variant( diff --git a/var/spack/repos/builtin/packages/foldseek/package.py b/var/spack/repos/builtin/packages/foldseek/package.py index 018a5cdaf23c26..183785bde239a3 100644 --- a/var/spack/repos/builtin/packages/foldseek/package.py +++ b/var/spack/repos/builtin/packages/foldseek/package.py @@ -14,13 +14,12 @@ class Foldseek(CMakePackage): license("GPL-3.0-only", checked_by="A-N-Other") + version("9-427df8a", sha256="b17d2d85b49a8508f79ffd8b15e54afc5feef5f3fb0276a291141ca5dbbbe8bc") version("8-ef4e960", sha256="c74d02c4924d20275cc567783b56fff10e76ed67f3d642f53c283f67c4180a1e") version("7-04e0ec8", sha256="009d722d600248a680b9e1e9dcb3bf799f8be8de41e80a598b7f39a5ced54191") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("zlib-api") depends_on("bzip2") depends_on("openmpi") depends_on("rust", type="build") + depends_on("rust@1.78.0", when="@:9", type="build") diff --git a/var/spack/repos/builtin/packages/fp16/package.py b/var/spack/repos/builtin/packages/fp16/package.py index a0e49e0da168b9..c756d5b4abadac 100644 --- a/var/spack/repos/builtin/packages/fp16/package.py +++ b/var/spack/repos/builtin/packages/fp16/package.py @@ -21,7 +21,8 @@ class Fp16(CMakePackage): version("2018-10-10", commit="34d4bf01bbf7376f2baa71b8fa148b18524d45cf") # py-torch@1.0 version("2018-02-25", commit="43d6d17df48ebf622587e7ed9472ea76573799b9") # py-torch@:0.4 - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") generator("ninja") depends_on("cmake@2.8.12:", type="build") diff --git a/var/spack/repos/builtin/packages/freetype/package.py b/var/spack/repos/builtin/packages/freetype/package.py index 2154009c659505..28784269512674 100644 --- a/var/spack/repos/builtin/packages/freetype/package.py +++ b/var/spack/repos/builtin/packages/freetype/package.py @@ -23,7 +23,14 @@ class Freetype(AutotoolsPackage, CMakePackage): license("FTL OR GPL-2.0-or-later") version("2.13.3", sha256="5c3a8e78f7b24c20b25b54ee575d6daa40007a5f4eea2845861c3409b3021747") - version("2.13.2", sha256="1ac27e16c134a7f2ccea177faba19801131116fd682efc1f5737037c5db224b5") + # Freetype 2.13.3 broke the public interface, so marking 2.13.2 as preferred in spack 0.23 + # Once spack 0.23 has been released, this preference can be removed again. + # https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests/330 + version( + "2.13.2", + sha256="1ac27e16c134a7f2ccea177faba19801131116fd682efc1f5737037c5db224b5", + preferred=True, + ) version("2.13.1", sha256="0b109c59914f25b4411a8de2a506fdd18fa8457eb86eca6c7b15c19110a92fa5") version("2.13.0", sha256="a7aca0e532a276ea8d85bd31149f0a74c33d19c8d287116ef8f5f8357b4f1f80") version("2.12.1", sha256="efe71fd4b8246f1b0b1b9bfca13cfff1c9ad85930340c27df469733bbb620938") diff --git a/var/spack/repos/builtin/packages/fsl/package.py b/var/spack/repos/builtin/packages/fsl/package.py index 690911373e8559..746005e3d13741 100644 --- a/var/spack/repos/builtin/packages/fsl/package.py +++ b/var/spack/repos/builtin/packages/fsl/package.py @@ -6,6 +6,7 @@ import glob import os +import spack.util.environment from spack.package import * from spack.util.environment import EnvironmentModifications diff --git a/var/spack/repos/builtin/packages/fxdiv/package.py b/var/spack/repos/builtin/packages/fxdiv/package.py index 4bd936ca302b41..c9194568ef9cc8 100644 --- a/var/spack/repos/builtin/packages/fxdiv/package.py +++ b/var/spack/repos/builtin/packages/fxdiv/package.py @@ -19,7 +19,8 @@ class Fxdiv(CMakePackage): version("2018-11-16", commit="b742d1143724d646cd0f914646f1240eacf5bd73") # py-torch@1.0:1.5 version("2018-02-24", commit="811b482bcd9e8d98ad80c6c78d5302bb830184b0") # py-torch@0.4 - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") generator("ninja") depends_on("cmake@3.5:", type="build") diff --git a/var/spack/repos/builtin/packages/fzf/package.py b/var/spack/repos/builtin/packages/fzf/package.py index a3c75798c47fd6..91b838a3fe8222 100644 --- a/var/spack/repos/builtin/packages/fzf/package.py +++ b/var/spack/repos/builtin/packages/fzf/package.py @@ -19,6 +19,7 @@ class Fzf(MakefilePackage): license("MIT") + version("0.56.2", sha256="1d67edb3e3ffbb14fcbf786bfcc0b5b8d87db6a0685135677b8ef4c114d2b864") version("0.55.0", sha256="805383f71bca7f8fb271ecd716852aea88fd898d5027d58add9e43df6ea766da") version("0.54.3", sha256="6413f3916f8058b396820f9078b1336d94c72cbae39c593b1d16b83fcc4fdf74") version("0.53.0", sha256="d45abbfb64f21913c633d46818d9d3eb3d7ebc7e94bd16f45941958aa5480e1d") diff --git a/var/spack/repos/builtin/packages/g2/package.py b/var/spack/repos/builtin/packages/g2/package.py index 3f64de93c2e953..b8d4a9be518b14 100644 --- a/var/spack/repos/builtin/packages/g2/package.py +++ b/var/spack/repos/builtin/packages/g2/package.py @@ -98,5 +98,5 @@ def setup_run_environment(self, env): env.set("G2_INC" + suffix, join_path(self.prefix, "include_" + suffix)) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/g2c/package.py b/var/spack/repos/builtin/packages/g2c/package.py index 1ddc6fe37a7313..0554ccf7b83a86 100644 --- a/var/spack/repos/builtin/packages/g2c/package.py +++ b/var/spack/repos/builtin/packages/g2c/package.py @@ -18,6 +18,7 @@ class G2c(CMakePackage): maintainers("AlexanderRichert-NOAA", "Hang-Lei-NOAA", "edwardhartnett") version("develop", branch="develop") + version("2.0.0", sha256="39c23bf1219c60101548c8525e3a879c84119558f768081779d404a8caf4cec9") version("1.9.0", sha256="5554276e18bdcddf387a08c2dd23f9da310c6598905df6a2a244516c22ded9aa") version("1.8.0", sha256="4ce9f5a7cb0950699fe08ebc5a463ab4d09ef550c050391a319308a2494f971f") version("1.7.0", sha256="73afba9da382fed73ed8692d77fa037bb313280879cd4012a5e5697dccf55175") @@ -93,5 +94,5 @@ def setup_run_environment(self, env): env.set("G2C_INC", join_path(self.prefix, "include")) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/g2tmpl/package.py b/var/spack/repos/builtin/packages/g2tmpl/package.py index b5ad734b014528..b76804e873734e 100644 --- a/var/spack/repos/builtin/packages/g2tmpl/package.py +++ b/var/spack/repos/builtin/packages/g2tmpl/package.py @@ -38,5 +38,5 @@ def cmake_args(self): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/g4abla/package.py b/var/spack/repos/builtin/packages/g4abla/package.py index 710d8de011829c..c36cb6f14845d0 100644 --- a/var/spack/repos/builtin/packages/g4abla/package.py +++ b/var/spack/repos/builtin/packages/g4abla/package.py @@ -24,13 +24,18 @@ class G4abla(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4ABLA{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4ABLA{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4ABLADATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4ABLA.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4ABLA{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4emlow/package.py b/var/spack/repos/builtin/packages/g4emlow/package.py index 87c25b950b6121..458f6da76bf99b 100644 --- a/var/spack/repos/builtin/packages/g4emlow/package.py +++ b/var/spack/repos/builtin/packages/g4emlow/package.py @@ -35,13 +35,18 @@ class G4emlow(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4EMLOW{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4EMLOW{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4LEDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "https://geant4-data.web.cern.ch/geant4-data/datasets/G4EMLOW.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4EMLOW{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4ensdfstate/package.py b/var/spack/repos/builtin/packages/g4ensdfstate/package.py index 59fe04f45deebf..6cb3904756d39d 100644 --- a/var/spack/repos/builtin/packages/g4ensdfstate/package.py +++ b/var/spack/repos/builtin/packages/g4ensdfstate/package.py @@ -25,11 +25,11 @@ class G4ensdfstate(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4ENSDFSTATE{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4ENSDFSTATE{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4ENSDFSTATEDATA", install_path) def url_for_version(self, version): @@ -37,3 +37,8 @@ def url_for_version(self, version): return ( "http://geant4-data.web.cern.ch/geant4-data/datasets/G4ENSDFSTATE.%s.tar.gz" % version ) + + @property + def g4datasetname(self): + spec = self.spec + return "G4ENSDFSTATE{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4incl/package.py b/var/spack/repos/builtin/packages/g4incl/package.py index 479ce2dda269d1..056910d71408de 100644 --- a/var/spack/repos/builtin/packages/g4incl/package.py +++ b/var/spack/repos/builtin/packages/g4incl/package.py @@ -25,13 +25,18 @@ class G4incl(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4INCL{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4INCL{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4INCLDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4INCL.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4INCL{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4ndl/package.py b/var/spack/repos/builtin/packages/g4ndl/package.py index a8c8f688985555..fa94da01b307d0 100644 --- a/var/spack/repos/builtin/packages/g4ndl/package.py +++ b/var/spack/repos/builtin/packages/g4ndl/package.py @@ -25,13 +25,18 @@ class G4ndl(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4NDL{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4NDL{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4NEUTRONHPDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4NDL.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4NDL{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4neutronxs/package.py b/var/spack/repos/builtin/packages/g4neutronxs/package.py index 39f6915346ba04..595d86c71e0cc6 100644 --- a/var/spack/repos/builtin/packages/g4neutronxs/package.py +++ b/var/spack/repos/builtin/packages/g4neutronxs/package.py @@ -24,11 +24,11 @@ class G4neutronxs(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4NEUTRONXS{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4NEUTRONXS{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4NEUTRONXSDATA", install_path) def url_for_version(self, version): @@ -36,3 +36,8 @@ def url_for_version(self, version): return ( "http://geant4-data.web.cern.ch/geant4-data/datasets/G4NEUTRONXS.%s.tar.gz" % version ) + + @property + def g4datasetname(self): + spec = self.spec + return "G4NEUTRONXS{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4nudexlib/package.py b/var/spack/repos/builtin/packages/g4nudexlib/package.py index 073aebcc7f8fc4..2e02321fe4291f 100644 --- a/var/spack/repos/builtin/packages/g4nudexlib/package.py +++ b/var/spack/repos/builtin/packages/g4nudexlib/package.py @@ -23,13 +23,18 @@ class G4nudexlib(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4NUDEXLIB{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4NUDEXLIB{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4NUDEXLIBDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4NUDEXLIB.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4NUDEXLIB{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4particlexs/package.py b/var/spack/repos/builtin/packages/g4particlexs/package.py index fb86575b466cf1..209831dfa658f4 100644 --- a/var/spack/repos/builtin/packages/g4particlexs/package.py +++ b/var/spack/repos/builtin/packages/g4particlexs/package.py @@ -28,11 +28,11 @@ class G4particlexs(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4PARTICLEXS{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4PARTICLEXS{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4PARTICLEXSDATA", install_path) def url_for_version(self, version): @@ -40,3 +40,8 @@ def url_for_version(self, version): return ( "http://geant4-data.web.cern.ch/geant4-data/datasets/G4PARTICLEXS.%s.tar.gz" % version ) + + @property + def g4datasetname(self): + spec = self.spec + return "G4PARTICLEXS{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4photonevaporation/package.py b/var/spack/repos/builtin/packages/g4photonevaporation/package.py index 1c847dec3e8eb9..099ded6a5f7044 100644 --- a/var/spack/repos/builtin/packages/g4photonevaporation/package.py +++ b/var/spack/repos/builtin/packages/g4photonevaporation/package.py @@ -27,13 +27,11 @@ class G4photonevaporation(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "PhotonEvaporation{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path( - self.prefix.share, "data", "PhotonEvaporation{0}".format(self.version) - ) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4LEVELGAMMADATA", install_path) def url_for_version(self, version): @@ -42,3 +40,8 @@ def url_for_version(self, version): "http://geant4-data.web.cern.ch/geant4-data/datasets/G4PhotonEvaporation.%s.tar.gz" % version ) + + @property + def g4datasetname(self): + spec = self.spec + return "PhotonEvaporation{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4pii/package.py b/var/spack/repos/builtin/packages/g4pii/package.py index a1aa5590bc1a42..c9cf78e5cb095e 100644 --- a/var/spack/repos/builtin/packages/g4pii/package.py +++ b/var/spack/repos/builtin/packages/g4pii/package.py @@ -22,13 +22,18 @@ class G4pii(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4PII{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4PII{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4PIIDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "https://geant4-data.web.cern.ch/geant4-data/datasets/G4PII.1.3.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4PII{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py index 69f5681b64996c..33a75291ffa24d 100644 --- a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py +++ b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py @@ -27,13 +27,11 @@ class G4radioactivedecay(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "RadioactiveDecay{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path( - self.prefix.share, "data", "RadioactiveDecay{0}".format(self.version) - ) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4RADIOACTIVEDATA", install_path) def url_for_version(self, version): @@ -42,3 +40,8 @@ def url_for_version(self, version): "http://geant4-data.web.cern.ch/geant4-data/datasets/G4RadioactiveDecay.%s.tar.gz" % version ) + + @property + def g4datasetname(self): + spec = self.spec + return "RadioactiveDecay{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4realsurface/package.py b/var/spack/repos/builtin/packages/g4realsurface/package.py index 28f335bba029c3..1d924943647307 100644 --- a/var/spack/repos/builtin/packages/g4realsurface/package.py +++ b/var/spack/repos/builtin/packages/g4realsurface/package.py @@ -25,11 +25,11 @@ class G4realsurface(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "RealSurface{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "RealSurface{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4REALSURFACEDATA", install_path) def url_for_version(self, version): @@ -39,3 +39,8 @@ def url_for_version(self, version): "G4" if version > Version("1.0") else "", version ) ) + + @property + def g4datasetname(self): + spec = self.spec + return "RealSurface{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4saiddata/package.py b/var/spack/repos/builtin/packages/g4saiddata/package.py index 371811381b0967..b4da3185807f31 100644 --- a/var/spack/repos/builtin/packages/g4saiddata/package.py +++ b/var/spack/repos/builtin/packages/g4saiddata/package.py @@ -23,13 +23,18 @@ class G4saiddata(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4SAIDDATA{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4SAIDDATA{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4SAIDXSDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4SAIDDATA.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4SAIDDATA{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4tendl/package.py b/var/spack/repos/builtin/packages/g4tendl/package.py index 92c12423c27d5a..1a2e9095115c5a 100644 --- a/var/spack/repos/builtin/packages/g4tendl/package.py +++ b/var/spack/repos/builtin/packages/g4tendl/package.py @@ -24,13 +24,18 @@ class G4tendl(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4TENDL{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4TENDL{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4PARTICLEHPDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4TENDL.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4TENDL{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/g4urrpt/package.py b/var/spack/repos/builtin/packages/g4urrpt/package.py index e9ff5df2840c3b..a04e6d5d1addc7 100644 --- a/var/spack/repos/builtin/packages/g4urrpt/package.py +++ b/var/spack/repos/builtin/packages/g4urrpt/package.py @@ -23,13 +23,18 @@ class G4urrpt(Package): def install(self, spec, prefix): mkdirp(join_path(prefix.share, "data")) - install_path = join_path(prefix.share, "data", "G4URRPT{0}".format(self.version)) + install_path = join_path(prefix.share, "data", self.g4datasetname) install_tree(self.stage.source_path, install_path) def setup_dependent_run_environment(self, env, dependent_spec): - install_path = join_path(self.prefix.share, "data", "G4URRPT{0}".format(self.version)) + install_path = join_path(self.prefix.share, "data", self.g4datasetname) env.set("G4URRPTDATA", install_path) def url_for_version(self, version): """Handle version string.""" return "http://geant4-data.web.cern.ch/geant4-data/datasets/G4URRPT.%s.tar.gz" % version + + @property + def g4datasetname(self): + spec = self.spec + return "G4URRPT{0}".format(spec.version) diff --git a/var/spack/repos/builtin/packages/gasnet/package.py b/var/spack/repos/builtin/packages/gasnet/package.py index a6100797123cce..a929e6b957b915 100644 --- a/var/spack/repos/builtin/packages/gasnet/package.py +++ b/var/spack/repos/builtin/packages/gasnet/package.py @@ -5,6 +5,7 @@ import os +import spack.main from spack.package import * @@ -145,7 +146,7 @@ def install(self, spec, prefix): try: git = which("git") git("describe", "--long", "--always", output="version.git") - except spack.util.executable.ProcessError: + except ProcessError: spack.main.send_warning_to_tty("Omitting version stamp due to git error") # The GASNet-EX library has a highly multi-dimensional configure space, diff --git a/var/spack/repos/builtin/packages/gaudi/package.py b/var/spack/repos/builtin/packages/gaudi/package.py index 92dc3985fde149..b580eeec77c471 100644 --- a/var/spack/repos/builtin/packages/gaudi/package.py +++ b/var/spack/repos/builtin/packages/gaudi/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import sys + from spack.package import * @@ -124,7 +126,8 @@ class Gaudi(CMakePackage): depends_on("cppunit", when="+cppunit") depends_on("doxygen +graphviz", when="+docs") depends_on("gperftools", when="+gperftools") - depends_on("gdb") + # gdb is optional, but useful to have as gaudi adds hooks for it if present during build + depends_on("gdb", when=sys.platform != "darwin") depends_on("heppdt", when="+heppdt") depends_on("jemalloc", when="+jemalloc") depends_on("libunwind", when="+unwind") diff --git a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-building-c-code-with-pgcc.patch b/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-building-c-code-with-pgcc.patch deleted file mode 100644 index 50ec242a41ad9b..00000000000000 --- a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-building-c-code-with-pgcc.patch +++ /dev/null @@ -1,25 +0,0 @@ -From ed64417746c570a00b0ba6c2c8091de4845f9ed1 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tiziano=20M=C3=BCller?= -Date: Tue, 6 Oct 2020 17:48:12 +0200 -Subject: [PATCH 4/5] fix building c code with pgcc - ---- - bsd/i386.make | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/bsd/i386.make b/bsd/i386.make -index 759ed84..9018c1b 100644 ---- a/bsd/i386.make -+++ b/bsd/i386.make -@@ -130,7 +130,7 @@ VECTOR = -Mvect=assoc,recog,noaltcode,cachesize:$(CSIZE)$(VECTOR4) - MACHTY = p7-32 - MACH = -tp $(MACHTY) $(TIME) - OPTOI = -m32 -march=i486 -malign-double --GCCOPTS = -ffast-math -funroll-loops -fexpensive-optimizations -+GCCOPTS = -fast - OPTFLAGO = $(OPTOI) -O3 $(GCCOPTS) - # Flags for portland compiler. - # --- -2.26.2 - diff --git a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-shebangs.patch b/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-shebangs.patch deleted file mode 100644 index fe3681e4ad6e01..00000000000000 --- a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-fix-shebangs.patch +++ /dev/null @@ -1,841 +0,0 @@ -From 7f5d1d92b18951e364fe32a247056eea0cf130a0 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tiziano=20M=C3=BCller?= -Date: Tue, 6 Oct 2020 17:55:08 +0200 -Subject: [PATCH 5/5] fix shebangs - ---- - bsd/bldg16 | 3 ++- - bsd/cachesize | 2 +- - bsd/checkf | 2 +- - bsd/ckall | 2 +- - bsd/ckwork | 2 +- - bsd/clearipc | 2 +- - bsd/clone-working | 2 +- - bsd/cloneg16 | 2 +- - bsd/co1 | 2 +- - bsd/comp | 2 +- - bsd/comp4 | 2 +- - bsd/compall | 2 +- - bsd/comphalf | 2 +- - bsd/diff-src | 2 +- - bsd/do-util | 3 ++- - bsd/dom | 2 +- - bsd/extract-ghelp | 2 +- - bsd/extract-ghelp-16 | 2 +- - bsd/findnew | 2 +- - bsd/findnew1 | 2 +- - bsd/fixlib | 2 +- - bsd/fixlinda | 2 +- - bsd/g16test | 2 +- - bsd/gau-arflags | 2 +- - bsd/gau-fixexe | 2 +- - bsd/gau-get | 2 +- - bsd/gau-hname | 2 +- - bsd/gau-nname | 2 +- - bsd/gau-ranlib | 2 +- - bsd/gau-unlimit | 2 +- - bsd/get-ref | 2 +- - bsd/getx | 2 +- - bsd/gzt | 2 +- - bsd/install | 2 +- - bsd/l1.make | 2 +- - bsd/l4x | 3 ++- - bsd/l9999.make | 2 +- - bsd/linda-ln | 2 +- - bsd/linda-lnx | 2 +- - bsd/link.make | 2 +- - bsd/lx-working | 2 +- - bsd/lxi-working | 2 +- - bsd/make-edir | 2 +- - bsd/make-ldir | 2 +- - bsd/make-nutill | 3 ++- - bsd/makeutilcd | 2 +- - bsd/mkt | 3 ++- - bsd/mkunixcd | 2 +- - bsd/movemerged | 2 +- - bsd/rdmat-ext | 2 +- - bsd/ren | 2 +- - bsd/rfhello | 3 ++- - bsd/rs6k.make | 3 ++- - bsd/save-working | 2 +- - bsd/set-mflags | 2 +- - bsd/setcdef | 2 +- - bsd/setup-linda | 2 +- - bsd/ssrunx | 3 ++- - bsd/ssruny | 2 +- - bsd/subg16 | 4 ++-- - bsd/sumcpu | 2 +- - bsd/tbzip | 2 +- - bsd/test-times | 2 +- - bsd/testl1 | 2 +- - bsd/testunf | 3 ++- - bsd/tgzip | 2 +- - bsd/tree.make | 2 +- - bsd/txzip | 2 +- - bsd/tzzip | 2 +- - bsd/upd | 2 +- - bsd/upd-util | 3 ++- - bsd/updatelink | 2 +- - bsd/updatelink1 | 2 +- - bsd/x86type | 2 +- - 74 files changed, 85 insertions(+), 75 deletions(-) - -diff --git a/bsd/bldg16 b/bsd/bldg16 -index c3db34a..f7af456 100755 ---- a/bsd/bldg16 -+++ b/bsd/bldg16 -@@ -1,4 +1,5 @@ --#!/bin/csh -xf -+#!/usr/bin/env tcsh -+set echo - # - # Build Gaussian 16 from source as from distribution tape. The default - # directory should be the main g16 directory. -diff --git a/bsd/cachesize b/bsd/cachesize -index 5ec2c79..f03b7e7 100755 ---- a/bsd/cachesize -+++ b/bsd/cachesize -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set x = `gau-machine` - @ minc = "524288" - if ($?GAUSS_CACHESIZE) then -diff --git a/bsd/checkf b/bsd/checkf -index f7a271e..0a672b7 100755 ---- a/bsd/checkf -+++ b/bsd/checkf -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set name = "xxx-ftnchek" - set flags = "-noextern -sixchar -common=2 -novice=no -arguments=3 -array=0 -common=2 -f77=automatic-array,common-subprog-name,quotemark,statement-order,do-enddo,inline-comment,mixed-common -notruncation -truncation=real-do-index -truncation=real-subscript -nopure -nopretty -pretty=embedded-spaces -pretty=long-line -pretty=missing-space -usage=no-do-index-modified,no-arg-alias,no-arg-array-alias,arg-const-modified,ext-multiply-defined,var-set-unused,var-uninitialized,var-unused -nowrap -portability=tab -quiet" - set TD = "/tmp" -diff --git a/bsd/ckall b/bsd/ckall -index 0c058ec..177be53 100755 ---- a/bsd/ckall -+++ b/bsd/ckall -@@ -1,3 +1,3 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - cat $g16root/g16/{l[0-9]*,lapack-generic,blas-generic,mm,formchk,unfchk,chkchk,c8616,copychk,cubegen,cubman,dummy,freqchk,freqmem,newzmat,wrappers,rwfdump,solname,trajgen,*util*,bsd/mdutil,bsd/mdl1}.F >all.all - checkf all.all x >&all.dat -diff --git a/bsd/ckwork b/bsd/ckwork -index 66f99a1..5194544 100755 ---- a/bsd/ckwork -+++ b/bsd/ckwork -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Check for routines already in working which are also new in the - # current directory. -diff --git a/bsd/clearipc b/bsd/clearipc -index a94cc26..71a9dd7 100755 ---- a/bsd/clearipc -+++ b/bsd/clearipc -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - unalias rm - if ("`whoami`" == "root") then - set us="x" -diff --git a/bsd/clone-working b/bsd/clone-working -index 22afef2..6c5f2e5 100755 ---- a/bsd/clone-working -+++ b/bsd/clone-working -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ("$1" == "-s") then - set ww = "/$workbase/1/frisch/working/save-$2" - mkdir save-$2 -diff --git a/bsd/cloneg16 b/bsd/cloneg16 -index ef69d69..56fb567 100755 ---- a/bsd/cloneg16 -+++ b/bsd/cloneg16 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Make a cloned copy of the Gaussian directories, with soft links - # to the source files but local copies of objects. -diff --git a/bsd/co1 b/bsd/co1 -index 12ea322..007a2f5 100755 ---- a/bsd/co1 -+++ b/bsd/co1 -@@ -1,2 +1,2 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - ../bsd/comp -o ${1}*.F >&../make${1}.log -diff --git a/bsd/comp b/bsd/comp -index cb1737c..5a583c3 100755 ---- a/bsd/comp -+++ b/bsd/comp -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - source $g16root/g16/bsd/g16.login - set mfile = "bsd/g16.make" - set mflags = "`set-mflags`" -diff --git a/bsd/comp4 b/bsd/comp4 -index 0ca0806..7e11bf8 100755 ---- a/bsd/comp4 -+++ b/bsd/comp4 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if (-e bsd/g16.make) make -f bsd/g16.make clean - rm -f make*log - bsd/bldg16 $argv >&make.log & -diff --git a/bsd/compall b/bsd/compall -index d53392d..0b68de0 100755 ---- a/bsd/compall -+++ b/bsd/compall -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if (-e bsd/g16.make) make -f bsd/g16.make clean - rm -f make*log - bsd/bldg16 $argv >&make.log & -diff --git a/bsd/comphalf b/bsd/comphalf -index 43bb0ee..b5fd399 100755 ---- a/bsd/comphalf -+++ b/bsd/comphalf -@@ -1,2 +1,2 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - bsd/comp newzmat.F l1.F l101.F l10[2-9].F l1[1-2]?.F l[2-9]*.F l1???.F -diff --git a/bsd/diff-src b/bsd/diff-src -index 8b63e3a..cb08d97 100755 ---- a/bsd/diff-src -+++ b/bsd/diff-src -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - foreach x (*.new) - diff -i -w $x $x:r.F >$x:r.diff - if ($status) then -diff --git a/bsd/do-util b/bsd/do-util -index b43b109..8469289 100755 ---- a/bsd/do-util -+++ b/bsd/do-util -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - mkdir temp - cd temp - gau-fsplit $1/${2}.F -diff --git a/bsd/dom b/bsd/dom -index 4475ad5..92eccc4 100755 ---- a/bsd/dom -+++ b/bsd/dom -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set file = "$1" - shift - set file = "$file:r" -diff --git a/bsd/extract-ghelp b/bsd/extract-ghelp -index a4e5e9e..36e6ba8 100755 ---- a/bsd/extract-ghelp -+++ b/bsd/extract-ghelp -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # This script runs awk to create abstracts of each source file - # containing the information for ghelp. This allows ghelp to -diff --git a/bsd/extract-ghelp-16 b/bsd/extract-ghelp-16 -index 9635d7b..36e6ba8 100755 ---- a/bsd/extract-ghelp-16 -+++ b/bsd/extract-ghelp-16 -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - # - # This script runs awk to create abstracts of each source file - # containing the information for ghelp. This allows ghelp to -diff --git a/bsd/findnew b/bsd/findnew -index bc1d527..2ab83c4 100755 ---- a/bsd/findnew -+++ b/bsd/findnew -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ("$1" == "") then - set ext = "diffn" - @ docopy = 0 -diff --git a/bsd/findnew1 b/bsd/findnew1 -index 9d42145..70ae61f 100755 ---- a/bsd/findnew1 -+++ b/bsd/findnew1 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ("$1" == "") then - set ext = "diff" - else -diff --git a/bsd/fixlib b/bsd/fixlib -index ae7118d..0cd9ad1 100755 ---- a/bsd/fixlib -+++ b/bsd/fixlib -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Fix up a library using lorder. This routine just does a ranlib except - # on the trace because some of the libraries have too many object files -diff --git a/bsd/fixlinda b/bsd/fixlinda -index 233fff1..0a395db 100755 ---- a/bsd/fixlinda -+++ b/bsd/fixlinda -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set x = `pwd` - set y = `basename $x` - if ("$y" != "g16") then -diff --git a/bsd/g16test b/bsd/g16test -index 3967e8e..a7c0808 100755 ---- a/bsd/g16test -+++ b/bsd/g16test -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Script to run G16 from a working directory with - # other executables from the standard places. -diff --git a/bsd/gau-arflags b/bsd/gau-arflags -index 7aba8a4..d268bc0 100755 ---- a/bsd/gau-arflags -+++ b/bsd/gau-arflags -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set x = `gau-machine` - set machflags = "" - set modeflags = "" -diff --git a/bsd/gau-fixexe b/bsd/gau-fixexe -index 2266453..892eec6 100755 ---- a/bsd/gau-fixexe -+++ b/bsd/gau-fixexe -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set gm = "$g16root/g16/bsd/gau-hname" - if (-e $gm) then - set hname = `gau-hname` -diff --git a/bsd/gau-get b/bsd/gau-get -index 29e9e96..4da00b0 100755 ---- a/bsd/gau-get -+++ b/bsd/gau-get -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - @ n = $#argv - 1 - set str = "" - foreach x ($argv[1-$n]) -diff --git a/bsd/gau-hname b/bsd/gau-hname -index c56cc6f..00a422e 100755 ---- a/bsd/gau-hname -+++ b/bsd/gau-hname -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set xname = "$g16root/g16" - if ((-e $xname/ia32p4.flag) || (-e $xname/ia32p3.flag) ) then - set hname = "i386" -diff --git a/bsd/gau-nname b/bsd/gau-nname -index 391f44f..ad7daa7 100755 ---- a/bsd/gau-nname -+++ b/bsd/gau-nname -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ("$1" == "-") then - set nn = "" - else -diff --git a/bsd/gau-ranlib b/bsd/gau-ranlib -index 79c4eda..5ff56cb 100755 ---- a/bsd/gau-ranlib -+++ b/bsd/gau-ranlib -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Do a ranlib if necessary on this machine. - # -diff --git a/bsd/gau-unlimit b/bsd/gau-unlimit -index 3e7b971..df3c044 100755 ---- a/bsd/gau-unlimit -+++ b/bsd/gau-unlimit -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Do unlimits if this machine allows them. - # -diff --git a/bsd/get-ref b/bsd/get-ref -index 023696c..b6a773f 100755 ---- a/bsd/get-ref -+++ b/bsd/get-ref -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ($#argv < 1) then - set flist = "mdutil cphfutil putil osutil utilam utilnz" - else -diff --git a/bsd/getx b/bsd/getx -index 4a5d8f8..23691eb 100755 ---- a/bsd/getx -+++ b/bsd/getx -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ($#argv < 2) then - echo "usage: getx link" - exit -diff --git a/bsd/gzt b/bsd/gzt -index ffa5fa0..95ad348 100755 ---- a/bsd/gzt -+++ b/bsd/gzt -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - # - # Compress a range of test output files. - # -diff --git a/bsd/install b/bsd/install -index 7b0e589..f5f29af 100755 ---- a/bsd/install -+++ b/bsd/install -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Fix file protections in the g16 directories. - # -diff --git a/bsd/l1.make b/bsd/l1.make -index f041912..585ac3a 100644 ---- a/bsd/l1.make -+++ b/bsd/l1.make -@@ -1,4 +1,4 @@ --SHELL=/bin/csh -+SHELL=/usr/bin/env tcsh - GAU_DIR = $(g16root)/g16 - GAU_DIRL = $(GAU_DIR) - GAU_DIRA = $(GAU_DIR) -diff --git a/bsd/l4x b/bsd/l4x -index a7de578..e58226f 100755 ---- a/bsd/l4x -+++ b/bsd/l4x -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - setenv GAUSS_LFLAGS '-n 3 -mp 2 -nodelist "brahms bruckner"' - setenv GAUSS_EXEDIR $g98root/g98/linda-exe:$g98root/g98 - setenv LD_LIBRARY_PATH $g98root/g98 -diff --git a/bsd/l9999.make b/bsd/l9999.make -index 643b580..6b317ee 100644 ---- a/bsd/l9999.make -+++ b/bsd/l9999.make -@@ -1,4 +1,4 @@ --SHELL=/bin/csh -+SHELL=/usr/bin/env tcsh - GAU_DIR = $(g16root)/g16 - GAU_DIRL = $(GAU_DIR) - GAU_DIRA = $(GAU_DIR) -diff --git a/bsd/linda-ln b/bsd/linda-ln -index d6f26a2..eb514e6 100755 ---- a/bsd/linda-ln -+++ b/bsd/linda-ln -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Make soft links to the dummy linda link and to each each real one. - # -diff --git a/bsd/linda-lnx b/bsd/linda-lnx -index 15ab0d0..65824be 100755 ---- a/bsd/linda-lnx -+++ b/bsd/linda-lnx -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Make soft links to the dummy linda link and to each each real one. - # -diff --git a/bsd/link.make b/bsd/link.make -index 540903d..dfbeb4b 100644 ---- a/bsd/link.make -+++ b/bsd/link.make -@@ -1,4 +1,4 @@ --SHELL=/bin/csh -+SHELL=/usr/bin/env tcsh - GAU_DIR = $(g16root)/g16 - GAU_DIRL = $(GAU_DIR) - GAU_DIRA = $(GAU_DIR) -diff --git a/bsd/lx-working b/bsd/lx-working -index 5b9315d..e07e01d 100755 ---- a/bsd/lx-working -+++ b/bsd/lx-working -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - foreach x ($argv) - ln -s /$workbase/1/frisch/working/$x:r.{com,log} . - end -diff --git a/bsd/lxi-working b/bsd/lxi-working -index 7b08887..1adce2f 100755 ---- a/bsd/lxi-working -+++ b/bsd/lxi-working -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - set m = "`gau-machine`" - if ($m == "sgi") then - set ext = ".sgi" -diff --git a/bsd/make-edir b/bsd/make-edir -index 7fb8a35..01afb73 100755 ---- a/bsd/make-edir -+++ b/bsd/make-edir -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # usage: make-edir - # -diff --git a/bsd/make-ldir b/bsd/make-ldir -index 944b35e..59acb95 100755 ---- a/bsd/make-ldir -+++ b/bsd/make-ldir -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # usage: make-ldir links - # -diff --git a/bsd/make-nutill b/bsd/make-nutill -index 016cb34..c5b8ac3 100755 ---- a/bsd/make-nutill -+++ b/bsd/make-nutill -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - rm -fr nutill - mkdir nutill - cd nutil -diff --git a/bsd/makeutilcd b/bsd/makeutilcd -index 6ea4228..9fa264c 100755 ---- a/bsd/makeutilcd -+++ b/bsd/makeutilcd -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - # - # Should be in cds directory, then - # -diff --git a/bsd/mkt b/bsd/mkt -index 976efa2..bf7eeb2 100755 ---- a/bsd/mkt -+++ b/bsd/mkt -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - if (! (-d $1)) then - echo "no directory $1" - exit -diff --git a/bsd/mkunixcd b/bsd/mkunixcd -index 6503593..15995ce 100755 ---- a/bsd/mkunixcd -+++ b/bsd/mkunixcd -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - if ($#argv <2) then - echo "usage: mkisofs target-file source-directories" - exit -diff --git a/bsd/movemerged b/bsd/movemerged -index 45fa619..538b4ed 100755 ---- a/bsd/movemerged -+++ b/bsd/movemerged -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if ($#argv < 2) then - set dir = "../nutil" - else -diff --git a/bsd/rdmat-ext b/bsd/rdmat-ext -index 59e62d0..713046b 100755 ---- a/bsd/rdmat-ext -+++ b/bsd/rdmat-ext -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - @ savefiles = 0 - @ dumpfiles = 1 - @ narg = 0 -diff --git a/bsd/ren b/bsd/ren -index 60171eb..2862edb 100755 ---- a/bsd/ren -+++ b/bsd/ren -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Rename a list of files to a new extension. - # -diff --git a/bsd/rfhello b/bsd/rfhello -index fb31adf..9ce5b94 100755 ---- a/bsd/rfhello -+++ b/bsd/rfhello -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - set host = `hostname` - if ("$1" == "") then - @ n = 8 -diff --git a/bsd/rs6k.make b/bsd/rs6k.make -index 09f3e0c..259812b 100644 ---- a/bsd/rs6k.make -+++ b/bsd/rs6k.make -@@ -1,4 +1,5 @@ --#SHELL=/bin/csh -xf -+#SHELL=/usr/bin/env tcsh -+set echo - # - # Makefile for Gaussian 16. - # -diff --git a/bsd/save-working b/bsd/save-working -index c0e67d0..db78b18 100755 ---- a/bsd/save-working -+++ b/bsd/save-working -@@ -1,4 +1,4 @@ --#!/bin/csh -x -+#!/usr/bin/env tcsh -x - if (-e save.num) then - @ n = `cat save.num` + 1 - else -diff --git a/bsd/set-mflags b/bsd/set-mflags -index ea3523a..6505c17 100755 ---- a/bsd/set-mflags -+++ b/bsd/set-mflags -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # echo the appropriate flags for make (no arguments) or the make command (1 argument). - # -diff --git a/bsd/setcdef b/bsd/setcdef -index b9142e4..c985e0b 100755 ---- a/bsd/setcdef -+++ b/bsd/setcdef -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # return a string for the GAUSS_CDEF environment variable - # -diff --git a/bsd/setup-linda b/bsd/setup-linda -index de9e996..c8ef8fd 100755 ---- a/bsd/setup-linda -+++ b/bsd/setup-linda -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - cd linda7.1 - common/bin/install_pkg - cd .. -diff --git a/bsd/ssrunx b/bsd/ssrunx -index 34a80ff..b211151 100755 ---- a/bsd/ssrunx -+++ b/bsd/ssrunx -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - set x = "`gau-machine`" - set n = "`basename $0`" - set d = "$n:r" -diff --git a/bsd/ssruny b/bsd/ssruny -index e96f64f..e82c4c0 100755 ---- a/bsd/ssruny -+++ b/bsd/ssruny -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set x = "`gau-machine`" - set n = "`basename $0`" - set d = "$n:r" -diff --git a/bsd/subg16 b/bsd/subg16 -index fd2fab6..66dbc1b 100755 ---- a/bsd/subg16 -+++ b/bsd/subg16 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Submit a Gaussian 16 job to an nqs batch queue. - # -@@ -12,7 +12,7 @@ - # Generate script, explicitly requesting the csh. - # - cat <$2.job --#!/bin/csh -+#!/usr/bin/env tcsh - cd \$QSUB_WORKDIR - source $g16root/g16/bsd/gau-unlimit - g16 <$2.com >&$2.log -diff --git a/bsd/sumcpu b/bsd/sumcpu -index 4d8c823..93e015d 100755 ---- a/bsd/sumcpu -+++ b/bsd/sumcpu -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # sum cpu usage - # -diff --git a/bsd/tbzip b/bsd/tbzip -index 78e5bce..8b28598 100755 ---- a/bsd/tbzip -+++ b/bsd/tbzip -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - foreach x ($argv) - bzip2 -9 -v $x:r.tar - mv $x:r.tar.bz2 $x:r.tbz -diff --git a/bsd/test-times b/bsd/test-times -index be04ce1..6c44242 100755 ---- a/bsd/test-times -+++ b/bsd/test-times -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set h = `grep days $argv | count 7` - set m = `grep days $argv | count 9` - set s = `grep days $argv | count 11` -diff --git a/bsd/testl1 b/bsd/testl1 -index 3901f2f..4ac7a37 100755 ---- a/bsd/testl1 -+++ b/bsd/testl1 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Test a new version of link 1. The new version is assumed to be - # l1/testrt. If arguments are provided, they are used as the route; -diff --git a/bsd/testunf b/bsd/testunf -index c3ae429..142c0ca 100755 ---- a/bsd/testunf -+++ b/bsd/testunf -@@ -1,3 +1,4 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - echo "argv is $argv" - cp $1 $7 -diff --git a/bsd/tgzip b/bsd/tgzip -index 90b27c1..e7051d8 100755 ---- a/bsd/tgzip -+++ b/bsd/tgzip -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - foreach x ($argv) - gzip -9 -v $x:r.tar - mv $x:r.tar.gz $x:r.tgz -diff --git a/bsd/tree.make b/bsd/tree.make -index e22451b..91e76ce 100644 ---- a/bsd/tree.make -+++ b/bsd/tree.make -@@ -5,7 +5,7 @@ - GAU_DIR = $(g16root)/g16 - GAU_DIRL = $(GAU_DIR) - --SHELL = /bin/csh -+SHELL = /usr/bin/env tcsh - UTIL_NAME = util.a - GAU_DIRA = $(GAU_DIR) - -diff --git a/bsd/txzip b/bsd/txzip -index 23a6a1b..a9248ff 100755 ---- a/bsd/txzip -+++ b/bsd/txzip -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - if (("$1" == "j") || ("$1" == "J")) then - set ext = "tbJ" - shift -diff --git a/bsd/tzzip b/bsd/tzzip -index a86a4b8..9a2f462 100755 ---- a/bsd/tzzip -+++ b/bsd/tzzip -@@ -1,4 +1,4 @@ --#!/bin/csh -+#!/usr/bin/env tcsh - foreach x ($argv) - xz -9 -v $x:r.tar - mv $x:r.tar.bz2 $x:r.tbz -diff --git a/bsd/upd b/bsd/upd -index d6017b3..00ca77f 100755 ---- a/bsd/upd -+++ b/bsd/upd -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Update a link for which the specified routines have been changed. - # -diff --git a/bsd/upd-util b/bsd/upd-util -index 7d007ea..c16b082 100755 ---- a/bsd/upd-util -+++ b/bsd/upd-util -@@ -1,4 +1,5 @@ --#!/bin/csh -fx -+#!/usr/bin/env tcsh -+set echo - mkdir temp - cd temp - foreach x ($argv) -diff --git a/bsd/updatelink b/bsd/updatelink -index 7cc99ee..6399d53 100755 ---- a/bsd/updatelink -+++ b/bsd/updatelink -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Update a link library with the specified source files. - # -diff --git a/bsd/updatelink1 b/bsd/updatelink1 -index 906e3aa..962dd59 100755 ---- a/bsd/updatelink1 -+++ b/bsd/updatelink1 -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - # - # Update a link library with the specified source files. - # -diff --git a/bsd/x86type b/bsd/x86type -index 9ead8f3..7ef1ebe 100755 ---- a/bsd/x86type -+++ b/bsd/x86type -@@ -1,4 +1,4 @@ --#!/bin/csh -f -+#!/usr/bin/env tcsh - set type = "amd" - set list = "sse4" - if (-e /proc/cpuinfo) then --- -2.26.2 - diff --git a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-replace-deprecated-pgf77-with-pgfortran.patch b/var/spack/repos/builtin/packages/gaussian-src/16-C.01-replace-deprecated-pgf77-with-pgfortran.patch deleted file mode 100644 index 49e40693d7ab36..00000000000000 --- a/var/spack/repos/builtin/packages/gaussian-src/16-C.01-replace-deprecated-pgf77-with-pgfortran.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 6774eb8f9743977d7b3f52ea877c2c0ed6bc45f5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tiziano=20M=C3=BCller?= -Date: Tue, 6 Oct 2020 17:47:26 +0200 -Subject: [PATCH 3/5] replace deprecated pgf77 with pgfortran - ---- - bsd/i386.make | 2 +- - bsd/l1.make | 2 +- - bsd/l9999.make | 2 +- - bsd/link.make | 2 +- - bsd/setup-make | 18 +++++++++--------- - bsd/tree.make | 4 ++-- - 6 files changed, 15 insertions(+), 15 deletions(-) - -diff --git a/bsd/i386.make b/bsd/i386.make -index c9cf696..759ed84 100644 ---- a/bsd/i386.make -+++ b/bsd/i386.make -@@ -138,7 +138,7 @@ I8FLAG = - R8FLAG = - MMODEL = - PGISTATIC = -Bstatic_pgi --PGNAME = pgf77 -+PGNAME = pgfortran - GPUFLAG = $(GPUFLAG1) $(GPUFLAG2) $(GPUFLAG3) - RUNF77 = $(PGNAME) $(PGISTATIC) $(I8FLAG) $(R8FLAG) $(MMODEL) $(DEBUGF) $(SPECFLAG) $(GPUFLAG) - F2CLIB = -diff --git a/bsd/l1.make b/bsd/l1.make -index fe9897f..f041912 100644 ---- a/bsd/l1.make -+++ b/bsd/l1.make -@@ -16,7 +16,7 @@ SUN_FC = f95 -fast -xtypemap=real:64,double:64,integer:64 -xtarget=native -xarch - ALP_FC = f90 -O5 -transform_loops -omp -automatic -i8 -r8 -align dcommons \ - -tune host -trapuv -assume noaccuracy_sensitive -math_library fast \ - -reentrancy threaded --LIN_FC = pgf77 -mp -Mnostdlib -+LIN_FC = pgfortran -mp -Mnostdlib - PGILIBS = $(PGI)/linux86/lib/libpgthread.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgftnrtl.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgmp.a $(PGI)/linux86/lib/libpgc.a - LIN_FC2 = /usr/local/lib/libf77blas.a /usr/local/lib/libatlas.a $(PGILIBS) - CRY_FC = f90 -diff --git a/bsd/l9999.make b/bsd/l9999.make -index 2c59b37..643b580 100644 ---- a/bsd/l9999.make -+++ b/bsd/l9999.make -@@ -16,7 +16,7 @@ SUN_FC = f95 -fast -xtypemap=real:64,double:64,integer:64 -xtarget=native -xarch - ALP_FC = f90 -O5 -transform_loops -omp -automatic -i8 -r8 -align dcommons \ - -tune host -trapuv -assume noaccuracy_sensitive -math_library fast \ - -reentrancy threaded --LIN_FC = pgf77 -mp -Mnostdlib -+LIN_FC = pgfortran -mp -Mnostdlib - PGILIBS = $(PGI)/linux86/lib/libpgthread.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgftnrtl.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgmp.a $(PGI)/linux86/lib/libpgc.a - LIN_FC2 = /usr/local/lib/libf77blas.a /usr/local/lib/libatlas.a $(PGILIBS) - CRY_FC = f90 -diff --git a/bsd/link.make b/bsd/link.make -index 40cbd06..540903d 100644 ---- a/bsd/link.make -+++ b/bsd/link.make -@@ -16,7 +16,7 @@ SUN_FC = f95 -fast -xtypemap=real:64,double:64,integer:64 -xtarget=native -xarch - ALP_FC = f90 -O5 -transform_loops -omp -automatic -i8 -r8 -align dcommons \ - -tune host -trapuv -assume noaccuracy_sensitive -math_library fast \ - -reentrancy threaded --LIN_FC = pgf77 -mp -Mnostdlib -+LIN_FC = pgfortran -mp -Mnostdlib - PGILIBS = $(PGI)/linux86/lib/libpgthread.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgftnrtl.a $(PGI)/linux86/lib/libpgc.a $(PGI)/linux86/lib/libpgmp.a $(PGI)/linux86/lib/libpgc.a - LIN_FC2 = /usr/local/lib/libf77blas.a /usr/local/lib/libatlas.a $(PGILIBS) - CRY_FC = f90 -diff --git a/bsd/setup-make b/bsd/setup-make -index 7759da2..1a497dd 100644 ---- a/bsd/setup-make -+++ b/bsd/setup-make -@@ -34,7 +34,7 @@ else if (-e $xname/kepler.flag) then - set acclib = "-Mcudalib=cublas" - set acclib1 = "" - else -- set pgname = "pgf77" -+ set pgname = "pgfortran" - set accopt = "" - set accflag = "" - set acclib = "" -@@ -88,16 +88,16 @@ else if (("$mach" == "i386") || ("$mach" == "amd64") || ("$mach" == "em64t") || - set xutilname = "util" - if (-e $xname/ia32p3.flag) then - set xutilname = "$xutilname,bsd/libf77blas-ia32,bsd/libatlas-ia32" -- set fcname = "FCN='pgf77 -Bstatic_pgi'" -+ set fcname = "FCN='pgfortran -Bstatic_pgi'" - set blas = "BLAS='' MACHTY=p6" - set fcflag = "FC='-mp=nonuma -tp p6'" -- set lfort = "pgf77 -Bstatic_pgi -tp p6 -mp=nonuma" -+ set lfort = "pgfortran -Bstatic_pgi -tp p6 -mp=nonuma" - else if ("$mach" == "i386") then - set xutilname = "$xutilname,bsd/libf77blas-ia32,bsd/libatlas-ia32" -- set fcname = "FCN='pgf77 -Bstatic_pgi'" -+ set fcname = "FCN='pgfortran -Bstatic_pgi'" - set blas = "BLAS='' " - set fcflag = "FC='-mp=nonuma -fastsse -tp p7-32'" -- set lfort = "pgf77 -Bstatic_pgi -fastsse -tp p7-32 -mp=nonuma" -+ set lfort = "pgfortran -Bstatic_pgi -fastsse -tp p7-32 -mp=nonuma" - else if ("$mach" == "amd64") then - set fcname = "FCN='" - set fcname = "$fcname$pgname -Bstatic_pgi'" -@@ -142,16 +142,16 @@ else if (("$mach" == "i386") || ("$mach" == "amd64") || ("$mach" == "em64t") || - endif - else if ("$mach" == "i386-mac64") then - set xutilname = "$xutilname,bsd/libf77blas-imac64,bsd/libatlas-imac64" -- set fcname = "FCN='pgf77'" -+ set fcname = "FCN='pgfortran'" - set fcflag = "FC='-Wl,-u -Wl,_drum_ -mp -tp p7-64 -i8 -r8'" - set blas = "BLAS='' MACHTY=p7-64 GAULIBU=util.a PGISTATIC= LINK1='-Wl,-u' LINK2='-Wl,_drum_' EXTCFLAGS=-D_FORTIFY_SOURCE=0 I8FLAG=-i8 R8FLAG=-r8 OPTOI=-m64 I8CPP1=-DI64 I8CPP2=-DP64 I8CPP3=-DPACK64 I8CPP4=-DUSE_I2 NJSEC=-DDEFJSEC=512" -- set lfort = "pgf77 -Wl,-u -Wl,_drum_ -mp -tp p7-64 -i8 -r8" -+ set lfort = "pgfortran -Wl,-u -Wl,_drum_ -mp -tp p7-64 -i8 -r8" - else if ("$mach" == "i386-mac32") then - set xutilname = "$xutilname,bsd/libf77blas-imac32,bsd/libatlas-imac32" -- set fcname = "FCN='pgf77'" -+ set fcname = "FCN='pgfortran'" - set fcflag = "FC='-Wl,-u -Wl,_drum_ -mp -tp p7-32'" - set blas = "BLAS='' MACHTY=p7-32 GAULIBU=util.a PGISTATIC= LINK1='-Wl,-u' LINK2='-Wl,_drum_' EXTCFLAGS=-D_FORTIFY_SOURCE=0 I8FLAG= R8FLAG=-r8 OPTOI=-m32" -- set lfort = "pgf77 -Wl,-u -Wl,_drum_ -mp -tp p7-32" -+ set lfort = "pgfortran -Wl,-u -Wl,_drum_ -mp -tp p7-32" - setenv LINDA_CC 'cc -m32' - else - echo "logic failure in setup-make" -diff --git a/bsd/tree.make b/bsd/tree.make -index e504f38..e22451b 100644 ---- a/bsd/tree.make -+++ b/bsd/tree.make -@@ -17,7 +17,7 @@ SGI_FC = f77 -w -i8 -r8 -r8const -mips4 -64 -mp -r10000 -align64 -trapuv - SGI_FC2 = -lcomplib.sgimath_mp -lfastm - SUN_FC = fc - ALP_FC = f90 -omp -automatic -O -i8 -r8 -align dcommons -threads --LIN_FC = pgf77 -mp -+LIN_FC = pgfortran -mp - LIN_FC2 = -llapack /usr/local/lib/blas-opt.a /usr/local/lib/blas-f2c.a - CRY_FC = f90 - CRY_FC2 = -Wl"-M /dev/null -D DUPENTRY=NOTE -D FORCE=OFF -f indef" -@@ -31,7 +31,7 @@ NUTIL = ../nutil/*.o ../nutil/*.qo - NUTILL = ../nutill/*.lo ../nutill/*.o ../nutill/*.qo - NUTILX = nutil/*.o nutil/*.qo - else --PGNAME = pgf77 -+PGNAME = pgfortran - NUTIL = ../nutil/*.o - NUTILL = ../nutill/*.lo ../nutill/*.o - NUTILX = nutil/*.o --- -2.26.2 - diff --git a/var/spack/repos/builtin/packages/gaussian-src/package.py b/var/spack/repos/builtin/packages/gaussian-src/package.py deleted file mode 100644 index 8f34198a81ebb9..00000000000000 --- a/var/spack/repos/builtin/packages/gaussian-src/package.py +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright 2013-2024 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) -import glob -import os - -import llnl.util.tty as tty - -from spack.package import * - - -class GaussianSrc(Package): - """Gaussian is a computer program for computational chemistry. - - This Spack package builds Gaussian from source. - - Needs post-install steps to make it run! - See package installation log for details.""" - - homepage = "http://www.gaussian.com/" - manual_download = True - - maintainers("dev-zero") - - version("16-C.01", sha256="c9eb73a9df5ca8705fcf2d7ce2d5f9aceb05ae663689f54c0a581c9d4d44fffb") - - depends_on("tcsh", type="build") - - # All compilers except for pgi are in conflict: - requires("%pgi", msg="Gaussian can only be built with the PGI compiler") - - patch("16-C.01-replace-deprecated-pgf77-with-pgfortran.patch", when="@16-C.01") - patch("16-C.01-fix-building-c-code-with-pgcc.patch", when="@16-C.01") - patch("16-C.01-fix-shebangs.patch", when="@16-C.01") - - @property - def g_name(self): - return "g{0}".format(self.version.up_to(1)) - - @property - def g_root(self): - return self.prefix.join(self.g_name) - - def url_for_version(self, version): - return "file://{0}/g{1}.tgz".format(os.getcwd(), version) - - def install(self, spec, prefix): - # Spacks strips the single dir inside the tarball, but Gaussian - # needs it -> move them back - files = os.listdir() - mkdirp(self.g_name) - for f in files: - os.rename(f, join_path(self.g_name, f)) - - opts = ["all"] - # if spec.satisfies('+cuda'): - # opts += [spec.variants['cuda_family'].value] - - with working_dir(self.g_name): - # can only build with tcsh - tcsh = which("tcsh") - tcsh( - "-c", - "source ${0}root/{0}/bsd/{0}.login ;" - "./bsd/bld{0} {1}".format(self.g_name, " ".join(opts)), - ) - - install_tree("./bsd", self.g_root.bsd) - install_tree("./basis", self.g_root.basis) - install_tree("./doc", self.g_root.doc) - - for exe in glob.glob("*.exe"): - install(exe, self.g_root) - - exes = [ - self.g_name, - "gauopt", - "gauoptl", - "ghelp", - "newzmat", - "testrt", - "cubegen", - "cubman", - "c8616", - "ham506", - "rwfdump", - "freqchk", - "freqmem", - "formchk", - "demofc", - "chkchk", - "solname", - "gautraj", - "copychk", - "pluck", - "rdmat", - "wrmat", - "unfchk", - "gdrgen", - "trajgen", - "mm", - "grate", - ] - for exe in exes: - install(exe, self.g_root) - - @run_after("install") - def caveats(self): - perm_script = "spack_perms_fix.sh" - perm_script_path = join_path(self.spec.prefix, perm_script) - with open(perm_script_path, "w") as f: - env = spack.tengine.make_environment(dirs=self.package_dir) - t = env.get_template(perm_script + ".j2") - f.write(t.render({"prefix": self.g_root})) - chmod = which("chmod") - chmod("0555", perm_script_path) - - tty.warn( - """ -For a working Gaussian installation, all executable files can only be accessible by -the owner and the group but not the world. - -We've installed a script that will make the necessary changes; -read through it and then execute it: - - {0} - -If you have to give others access, please customize the group membership of the package -files as documented here: - - https://spack.readthedocs.io/en/latest/packages_yaml.html#package-permissions""".format( - perm_script_path - ) - ) - - def setup_build_environment(self, env): - env.set("{0}root".format(self.g_name), self.stage.source_path) - - def setup_run_environment(self, env): - # defaults taken from G16's g16.profile - env.set("GAUSS_LFLAGS2", "--LindaOptions -s 10000000") - env.set("_DSM_BARRIER", "SHM") - env.set("PGI_TERM", "trace,abort") - - env.set("{0}root".format(self.g_name), self.prefix) - - env.prepend_path("GAUSS_EXEDIR", self.g_root) - env.prepend_path("GAUSS_EXEDIR", self.g_root.bsd) - - env.prepend_path("PATH", self.g_root) - env.prepend_path("PATH", self.g_root.bsd) - - env.set("GAUSS_LEXEDIR", self.g_root.join("linda-exe")) - env.set("GAUSS_ARCHDIR", self.g_root.arch) - env.set("GAUSS_BSDDIR", self.g_root.bsd) - env.set("G{0}BASIS".format(self.version.up_to(1)), self.g_root.basis) - - env.prepend_path("LD_LIBRARY_PATH", self.g_root) - env.prepend_path("LD_LIBRARY_PATH", self.g_root.bsd) diff --git a/var/spack/repos/builtin/packages/gaussian-src/spack_perms_fix.sh.j2 b/var/spack/repos/builtin/packages/gaussian-src/spack_perms_fix.sh.j2 deleted file mode 100644 index 889ab7fbc2d43e..00000000000000 --- a/var/spack/repos/builtin/packages/gaussian-src/spack_perms_fix.sh.j2 +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -eu - -chmod o-rwx "{{ prefix }}"/* diff --git a/var/spack/repos/builtin/packages/gaussian-view/package.py b/var/spack/repos/builtin/packages/gaussian-view/package.py index 985de8e0498c9b..f0b241aed8cf44 100644 --- a/var/spack/repos/builtin/packages/gaussian-view/package.py +++ b/var/spack/repos/builtin/packages/gaussian-view/package.py @@ -8,6 +8,7 @@ import llnl.util.tty as tty +import spack.tengine from spack.package import * @@ -38,18 +39,7 @@ class GaussianView(Package): extension="tbz", ) - variant( - "gaussian-src", - default=False, - description="Use gaussian-src instead of gaussian (prebuilt binary)", - ) - depends_on("gaussian@16-B.01", type="run", when="@:6.0") - # TODO: add the checksum for gaussian@16-C.01 before uncommenting - # depends_on('gaussian@16-C.01', type='run', when='~gaussian-src@6.1:') - depends_on("gaussian-src@16-C.01", type="run", when="+gaussian-src@6.1:") - - conflicts("+gaussian-src", when="@:6.0") depends_on("libx11", type=("run", "link")) depends_on("libxext", type=("run", "link")) diff --git a/var/spack/repos/builtin/packages/gcc/detection_test.yaml b/var/spack/repos/builtin/packages/gcc/detection_test.yaml index c0195bb8ca1b7b..67b5bc1e129e0f 100644 --- a/var/spack/repos/builtin/packages/gcc/detection_test.yaml +++ b/var/spack/repos/builtin/packages/gcc/detection_test.yaml @@ -26,7 +26,7 @@ paths: extra_attributes: compilers: c: ".*/bin/gcc" - cxx: ".*/bin/g++" + cxx: ".*/bin/g\\+\\+" # Mock a version < 7 of GCC that requires -dumpversion and # errors with -dumpfullversion diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py index 60b8d44b7a0a4f..04b37259b1577b 100644 --- a/var/spack/repos/builtin/packages/gcc/package.py +++ b/var/spack/repos/builtin/packages/gcc/package.py @@ -11,8 +11,8 @@ import llnl.util.tty as tty from llnl.util.symlink import readlink +import spack.compiler import spack.platforms -import spack.util.executable import spack.util.libc from spack.operating_systems.mac_os import macos_sdk_path, macos_version from spack.package import * @@ -103,9 +103,8 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage): version("4.6.4", sha256="35af16afa0b67af9b8eb15cafb76d2bc5f568540552522f5dc2c88dd45d977e8") version("4.5.4", sha256="eef3f0456db8c3d992cbb51d5d32558190bc14f3bc19383dd93acc27acc6befc") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") # We specifically do not add 'all' variant here because: # (i) Ada, D, Go, Jit, and Objective-C++ are not default languages. diff --git a/var/spack/repos/builtin/packages/gcta/package.py b/var/spack/repos/builtin/packages/gcta/package.py index d3a2e218e181f4..6fc6d60ff7e4dd 100644 --- a/var/spack/repos/builtin/packages/gcta/package.py +++ b/var/spack/repos/builtin/packages/gcta/package.py @@ -21,13 +21,13 @@ class Gcta(CMakePackage): version("1.94.0beta", commit="746e3975ddb463fc7bd15b03c6cc64b023eca497", submodules=True) version("1.91.2", sha256="0609d0fba856599a2acc66adefe87725304117acc226360ec2aabf8a0ac64e85") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") conflicts("target=aarch64:", when="@:1.91.2", msg="aarch64 support added in 1.94.0") depends_on("cmake@3.1:", type="build") - depends_on("intel-mkl@2017:", when="target=x86_64:") + depends_on("intel-oneapi-mkl", when="target=x86_64:") depends_on("openblas", when="target=aarch64:") depends_on("eigen@3.3.1", when="@1.91.2") depends_on("eigen@3.3.7:", when="@1.94.0beta:") @@ -50,6 +50,12 @@ def patch(self): for s in strings: filter_file(s, "", "CMakeLists.txt", string=True) + def flag_handler(self, name, flags): + # To compile with newer compilers like gcc-13, gcta needs to include : + if name == "cxxflags": + flags.extend(["-include", "cstdint"]) + return (flags, None, None) + def cmake_args(self): eigen = self.spec["eigen"].prefix.include args = [self.define("EIGEN3_INCLUDE_DIR", eigen)] @@ -60,7 +66,7 @@ def cmake_args(self): args.extend(deps) if self.spec.satisfies("target=x86_64:"): - mkl = self.spec["intel-mkl"].prefix + mkl = self.spec["intel-oneapi-mkl"].prefix.mkl.latest args.append(self.define("MKLROOT", mkl)) elif self.spec.satisfies("target=aarch64:"): openblas = self.spec["openblas"].prefix diff --git a/var/spack/repos/builtin/packages/gdal/package.py b/var/spack/repos/builtin/packages/gdal/package.py index 1253219e8bf091..67e8e209875e7a 100644 --- a/var/spack/repos/builtin/packages/gdal/package.py +++ b/var/spack/repos/builtin/packages/gdal/package.py @@ -28,10 +28,10 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension): list_url = "https://download.osgeo.org/gdal/" list_depth = 1 - maintainers("adamjstewart") - license("MIT") + maintainers("adamjstewart") + version("3.10.0", sha256="af821a3bcf68cf085724c21c9b53605fd451d83af3c8854d8bf194638eb734a8") version("3.9.3", sha256="34a037852ffe6d2163f1b8948a1aa7019ff767148aea55876c1339b22ad751f1") version("3.9.2", sha256="bfbcc9f087f012c36151c20c79f8eac9529e1e5298fbded79cd5a1365f0b113a") version("3.9.1", sha256="aff3086fee75f5773e33a5598df98d8a4d10be411f777d3ce23584b21d8171ca") @@ -115,6 +115,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension): variant( "arrow", default=False, when="build_system=cmake", description="Required for Arrow driver" ) + variant("avif", default=False, when="@3.10:", description="Required for AVIF driver") variant( "basisu", default=False, when="@3.6:", description="Required for BASISU and KTX2 drivers" ) @@ -197,6 +198,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension): "opencad", default=False, when="build_system=cmake", description="Required for CAD driver" ) variant("opencl", default=False, description="Required to accelerate warping computations") + variant("opendrive", default=False, when="@3.10:", description="Required for XODR driver") variant("openexr", default=False, when="@3.1:", description="Required for EXR driver") variant("openjpeg", default=False, description="Required for JP2OpenJPEG driver") variant("openssl", default=False, when="@2.3:", description="Required for EEDAI driver") @@ -289,6 +291,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension): depends_on("blas", when="+armadillo") depends_on("lapack", when="+armadillo") depends_on("arrow", when="+arrow") + depends_on("libavif", when="+avif") # depends_on("basis-universal", when="+basisu") depends_on("c-blosc", when="+blosc") depends_on("brunsli", when="+brunsli") @@ -354,6 +357,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension): # depends_on('ogdi', when='+ogdi') # depends_on('lib-opencad', when='+opencad') depends_on("opencl", when="+opencl") + # depends_on("libopendrive@0.6:", when="+opendrive") depends_on("openexr@2.2:", when="+openexr") depends_on("openjpeg@2.3.1:", when="@3.9:+openjpeg") depends_on("openjpeg", when="+openjpeg") @@ -549,6 +553,7 @@ def cmake_args(self): self.define_from_variant("GDAL_USE_ARCHIVE", "archive"), self.define_from_variant("GDAL_USE_ARMADILLO", "armadillo"), self.define_from_variant("GDAL_USE_ARROW", "arrow"), + self.define_from_variant("GDAL_USE_AVIF", "avif"), self.define_from_variant("GDAL_USE_BASISU", "basisu"), self.define_from_variant("GDAL_USE_BLOSC", "blosc"), self.define_from_variant("GDAL_USE_BRUNSLI", "brunsli"), @@ -595,6 +600,7 @@ def cmake_args(self): self.define_from_variant("GDAL_USE_OGDI", "ogdi"), self.define_from_variant("GDAL_USE_OPENCAD", "opencad"), self.define_from_variant("GDAL_USE_OPENCL", "opencl"), + self.define_from_variant("GDAL_USE_OPENDRIVE", "opendrive"), self.define_from_variant("GDAL_USE_OPENEXR", "openexr"), self.define_from_variant("GDAL_USE_OPENJPEG", "openjpeg"), self.define_from_variant("GDAL_USE_OPENSSL", "openssl"), diff --git a/var/spack/repos/builtin/packages/gdb/package.py b/var/spack/repos/builtin/packages/gdb/package.py index 4b500ed36af40e..4d0f7d0ccfc1fd 100644 --- a/var/spack/repos/builtin/packages/gdb/package.py +++ b/var/spack/repos/builtin/packages/gdb/package.py @@ -21,6 +21,7 @@ class Gdb(AutotoolsPackage, GNUMirrorPackage): license("GPL-3.0-or-later AND LGPL-3.0-or-later") + version("15.2", sha256="9d16bc2539a2a20dc3ef99b48b8414d51c51305c8577eb7a1da00996f6dea223") version("14.2", sha256="2de5174762e959a5e529e20c20d88a04735469d8fffd98f61664e70b341dc47c") version("14.1", sha256="683e63182fb72bd5d8db32ab388143796370a8e3e71c26bc264effb487db7927") version("13.2", sha256="7ead13d9e19fa0c57bb19104e1a5f67eefa9fc79f2e6360de491e8fddeda1e30") diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py index 707d5978e218cf..7c0c74201bea58 100644 --- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py +++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py @@ -6,12 +6,10 @@ from spack.package import * -class GdkPixbuf(Package): - """The Gdk Pixbuf is a toolkit for image loading and pixel buffer - manipulation. It is used by GTK+ 2 and GTK+ 3 to load and - manipulate images. In the past it was distributed as part of - GTK+ 2 but it was split off into a separate package in - preparation for the change to GTK+ 3.""" +class GdkPixbuf(MesonPackage): + """The Gdk Pixbuf is a toolkit for image loading and pixel buffer manipulation. It is used by + GTK+ 2 and GTK+ 3 to load and manipulate images. In the past it was distributed as part of + GTK+ 2 but it was split off into a separate package in preparation for the change to GTK+ 3.""" homepage = "https://gitlab.gnome.org/GNOME/gdk-pixbuf" url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/2.40/gdk-pixbuf-2.40.0.tar.xz" @@ -43,44 +41,20 @@ class GdkPixbuf(Package): sha256="83c66a1cfd591d7680c144d2922c5955d38b4db336d7cd3ee109f7bcf9afef15", deprecated=True, ) - # https://nvd.nist.gov/vuln/detail/CVE-2021-20240 - version( - "2.40.0", - sha256="1582595099537ca8ff3b99c6804350b4c058bb8ad67411bbaae024ee7cead4e6", - deprecated=True, - ) - version( - "2.38.2", - sha256="73fa651ec0d89d73dd3070b129ce2203a66171dfc0bd2caa3570a9c93d2d0781", - deprecated=True, - ) - version( - "2.38.0", - sha256="dd50973c7757bcde15de6bcd3a6d462a445efd552604ae6435a0532fbbadae47", - deprecated=True, - ) - version( - "2.31.2", - sha256="9e467ed09894c802499fb2399cd9a89ed21c81700ce8f27f970a833efb1e47aa", - deprecated=True, - ) depends_on("c", type="build") - variant("x11", default=False, description="Enable X11 support", when="@:2.41") variant("tiff", default=False, description="Enable TIFF support(partially broken)") # Man page creation was getting docbook errors, see issue #18853 variant("man", default=False, description="Enable man page creation") - depends_on("meson@0.55.3:", type="build", when="@2.42.2:") - depends_on("meson@0.46.0:", type="build", when="@2.37.92:") - depends_on("meson@0.45.0:", type="build", when="@2.37.0:") - depends_on("ninja", type="build", when="@2.37.0:") - depends_on("shared-mime-info", when="@2.36.8: platform=linux") - depends_on("pkgconfig", type="build") - # Building the man pages requires libxslt and the Docbook stylesheets - depends_on("libxslt", type="build", when="+man") - depends_on("docbook-xsl@1.79.2:", type="build", when="+man") + with default_args(type="build"): + depends_on("meson@0.55.3:") + depends_on("pkgconfig") + depends_on("libxslt", when="+man") + depends_on("docbook-xsl@1.79.2:", when="+man") + + depends_on("shared-mime-info", when="platform=linux") depends_on("gettext") depends_on("glib@2.38.0:") depends_on("jpeg") @@ -88,68 +62,28 @@ class GdkPixbuf(Package): depends_on("zlib-api") depends_on("libtiff", when="+tiff") depends_on("gobject-introspection") - depends_on("libx11", when="+x11") - # Replace the docbook stylesheet URL with the one that our - # docbook-xsl package uses/recognizes. - # Pach modifies meson build files, so it only applies to versions that - # depend on meson. - patch("docbook-cdn.patch", when="@2.37.0:+man") + # Replace the docbook stylesheet URL with the one that our docbook-xsl package uses/recognizes. + patch("docbook-cdn.patch", when="+man") def url_for_version(self, version): url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/{0}/gdk-pixbuf-{1}.tar.xz" return url.format(version.up_to(2), version) def setup_run_environment(self, env): - env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - - def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - def setup_dependent_run_environment(self, env, dependent_spec): + def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) - def install(self, spec, prefix): - with working_dir("spack-build", create=True): - meson_args = std_meson_args + ["-Dman={0}".format("+man" in spec)] - # Only build tests when requested - if self.version >= Version("2.42.9"): - meson_args += ["-Dtests={0}".format(self.run_tests)] - # Based on suggestion by luigi-calori and the fixup shown by lee218llnl: - # https://github.com/spack/spack/pull/27254#issuecomment-974464174 - if spec.satisfies("+x11"): - if self.version >= Version("2.42"): - raise InstallError("+x11 is not valid for {0}".format(self.version)) - meson_args += ["-Dx11=true"] - meson("..", *meson_args) - ninja("-v") - if self.run_tests: - ninja("test") - ninja("install") - - def configure_args(self): - args = [] - # disable building of gtk-doc files following #9771 - args.append("--disable-gtk-doc-html") - true = which("true") - args.append("GTKDOC_CHECK={0}".format(true)) - args.append("GTKDOC_CHECK_PATH={0}".format(true)) - args.append("GTKDOC_MKPDF={0}".format(true)) - args.append("GTKDOC_REBASE={0}".format(true)) + def meson_args(self): + args = [f"-Dman={'true' if self.spec.satisfies('+man') else 'false'}"] + if self.spec.satisfies("@2.42.9:"): + args.append(f"-Dtests={'true' if self.run_tests else 'false'}") return args - @when("@:2.36") - def install(self, spec, prefix): - configure("--prefix={0}".format(prefix), *self.configure_args()) - make() - if self.run_tests: - make("check") - make("install") - if self.run_tests: - make("installcheck") - def setup_build_environment(self, env): # The "post-install.sh" script uses gdk-pixbuf-query-loaders, # which was installed earlier. diff --git a/var/spack/repos/builtin/packages/geant4-data/package.py b/var/spack/repos/builtin/packages/geant4-data/package.py index 201d2e8d88f79a..3b934da3922bcb 100644 --- a/var/spack/repos/builtin/packages/geant4-data/package.py +++ b/var/spack/repos/builtin/packages/geant4-data/package.py @@ -3,7 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import glob import os from spack.package import * @@ -204,5 +203,11 @@ def datadir(self): def install(self, spec, prefix): with working_dir(self.datadir, create=True): for s in spec.dependencies(): - for d in glob.glob("{0}/data/*".format(s.prefix.share)): - os.symlink(d, os.path.basename(d)) + if not s.name.startswith("g4"): + continue + + if not hasattr(s.package, "g4datasetname"): + raise InstallError(f"Dependency `{s.name}` does not expose `g4datasetname`") + + d = "{0}/data/{1}".format(s.prefix.share, s.package.g4datasetname) + os.symlink(d, os.path.basename(d)) diff --git a/var/spack/repos/builtin/packages/geant4/cpp20.patch b/var/spack/repos/builtin/packages/geant4/cpp20.patch new file mode 100644 index 00000000000000..ed0c716e3a5852 --- /dev/null +++ b/var/spack/repos/builtin/packages/geant4/cpp20.patch @@ -0,0 +1,30 @@ +--- geant4.10.07.p04/source/processes/electromagnetic/dna/management/include/G4ITMultiNavigator.hh 2023-05-24 13:43:47.960214329 -0500 ++++ geant4.10.07.p04/source/processes/electromagnetic/dna/management/include/G4ITMultiNavigator.hh 2023-05-24 14:13:50.595633742 -0500 +@@ -82,11 +82,11 @@ + class G4TrackState : public G4TrackState + { + public: +- ~G4TrackState() ++ ~G4TrackState() + { + } + +- G4TrackState() ++ G4TrackState() + { + G4ThreeVector Big3Vector(kInfinity, kInfinity, kInfinity); + fLastLocatedPosition = Big3Vector; +--- geant4.10.07.p04/source/processes/electromagnetic/dna/management/include/G4ITPathFinder.hh 2023-05-24 14:42:58.550496706 -0500 ++++ geant4.10.07.p04/source/processes/electromagnetic/dna/management/include/G4ITPathFinder.hh 2023-05-24 14:43:17.886350945 -0500 +@@ -116,9 +116,9 @@ + G4int fLastStepNo, fCurrentStepNo; + + public: +- virtual ~G4TrackState(){} ++ virtual ~G4TrackState(){} + +- G4TrackState() : ++ G4TrackState() : + G4TrackStateBase(), + fEndState( G4ThreeVector(), G4ThreeVector(), 0., 0., 0., 0., 0.), + fFieldExertedForce(false), diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py index a606c9c7e1cdcc..07ec0c09c3857c 100644 --- a/var/spack/repos/builtin/packages/geant4/package.py +++ b/var/spack/repos/builtin/packages/geant4/package.py @@ -4,7 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * -from spack.variant import _ConditionalVariantValues +from spack.variant import ConditionalVariantValues class Geant4(CMakePackage): @@ -84,6 +84,40 @@ class Geant4(CMakePackage): variant("timemory", default=False, description="Use TiMemory for profiling", when="@9.5:") variant("vtk", default=False, description="Enable VTK support", when="@11:") + # For most users, obtaining the Geant4 data via Spack will be useful; the + # sticky, default-enabled `+data` variant ensures that this happens. + # Furthermore, if this variant is enabled, Spack will automatically set the + # necessary environment variables to ensure that the Geant4 code runs + # correctly. + # + # However, the Geant4 data is also large and it is, on many machines used + # in HEP, already available via e.g. CVMFS. In these cases, users can save + # network bandwidth by using externally supplied Geant4 data. This can be + # done in two different ways. + # + # The first is to declare the Geant4 data directories as externals. This + # can be done by manually adding them to the `packages.yaml` file, e.g.: + # + # ``` + # g4radioactivedecay: + # externals: + # - spec: g4radioactivedecay@5.6 + # prefix: + # buildable: False + # ``` + # + # Where is a path such that /share/data/ + # exists. + # + # Alternatively, the `~data` variant can be supplied; in this case, Spack + # will not attempt to use the `geant4-data` spec at all. It is then + # essential to set up the `GEANT4_DATA_DIR` environment variable manually + # at runtime; see the Geant4 installation guide for more information: + # https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/postinstall.html + variant( + "data", default=True, sticky=True, description="Enable downloading of the data directory" + ) + depends_on("cmake@3.16:", type="build", when="@11.0.0:") depends_on("cmake@3.8:", type="build", when="@10.6.0:") depends_on("cmake@3.5:", type="build") @@ -109,7 +143,7 @@ class Geant4(CMakePackage): "11.2.2:11.2", "11.3:", ]: - depends_on("geant4-data@" + _vers, type="run", when="@" + _vers) + depends_on("geant4-data@" + _vers, type="run", when="+data @" + _vers) depends_on("expat") depends_on("zlib-api") @@ -146,7 +180,7 @@ class Geant4(CMakePackage): def std_when(values): for v in values: - if isinstance(v, _ConditionalVariantValues): + if isinstance(v, ConditionalVariantValues): for c in v: yield (c.value, c.when) else: @@ -192,6 +226,8 @@ def std_when(values): patch("cxx17_geant4_10_0.patch", level=1, when="@10.4.0 cxxstd=17") patch("geant4-10.4.3-cxx17-removed-features.patch", level=1, when="@10.4.3 cxxstd=17") + patch("cpp20.patch", when="@10.7 cxxstd=20") # from Fermi buildshims + # See https://bugzilla-geant4.kek.jp/show_bug.cgi?id=2556 patch("package-cache.patch", level=1, when="@10.7.0:11.1.2^cmake@3.17:") @@ -251,6 +287,8 @@ def _add_variant(feature, variant): def flag_handler(self, name, flags): spec = self.spec if name == "cxxflags": + if spec.satisfies("%gcc"): + flags.append("-fpermissive") if spec.satisfies("%nvhpc"): # error: excessive recursion at instantiation of class # "G4Number<191>" (G4CTCounter.hh) @@ -301,7 +339,8 @@ def cmake_args(self): # geant4-data's install directory to correctly set up the # Geant4Config.cmake values for Geant4_DATASETS . options.append(self.define("GEANT4_INSTALL_DATA", False)) - options.append(self.define("GEANT4_INSTALL_DATADIR", self.datadir)) + if spec.satisfies("+data"): + options.append(self.define("GEANT4_INSTALL_DATADIR", self.datadir)) # Vecgeom if spec.satisfies("+vecgeom"): diff --git a/var/spack/repos/builtin/packages/gem5/package.py b/var/spack/repos/builtin/packages/gem5/package.py new file mode 100644 index 00000000000000..194d2743b76be0 --- /dev/null +++ b/var/spack/repos/builtin/packages/gem5/package.py @@ -0,0 +1,71 @@ +# Copyright 2013-2024 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) + + +import spack.config +from spack.package import * + + +class Gem5(SConsPackage): + """The gem5 simulator is a modular platform for computer-system + architecture research, encompassing system-level architecture as + well as processor microarchitecture. gem5 is a community led + project with an open governance model. gem5 was originally + conceived for computer architecture research in academia, but it + has grown to be used in computer system design by academia, + industry for research, and in teaching.""" + + homepage = "https://www.gem5.org" + git = "https://github.com/gem5/gem5" + url = "https://github.com/gem5/gem5/archive/refs/tags/v24.0.0.0.tar.gz" + + version("24.0.0.1", tag="v24.0.0.1", commit="b1a44b89c7bae73fae2dc547bc1f871452075b85") + version("24.0.0.0", tag="v24.0.0.0", commit="43769abaf05120fed1e4e0cfbb34619edbc10f3f") + + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("scons", type="build") + depends_on("py-mypy", type="build") + depends_on("py-pybind11", type="build") + depends_on("python") + depends_on("gettext") + depends_on("hdf5+cxx") + depends_on("protobuf") + depends_on("gperftools") + depends_on("graphviz+pangocairo", type=("build", "run")) + depends_on("py-pydot", type=("build", "run")) + depends_on("capstone") + + def patch(self): + filter_file( + " Environment(tools=[", + " Environment(ENV=os.environ, tools=[", + "SConstruct", + string=True, + ) + filter_file( + """conf.env['CONF']['HAVE_PERF_ATTR_EXCLUDE_HOST'] = conf.CheckMember(""", + """conf.env['CONF']['HAVE_PERF_ATTR_EXCLUDE_HOST'] = bool(conf.CheckMember(""", + "src/cpu/kvm/SConsopts", + string=True, + ) + filter_file( + """perf_event_attr', 'exclude_host')""", + """perf_event_attr', 'exclude_host'))""", + "src/cpu/kvm/SConsopts", + string=True, + ) + + def install(self, spec, prefix): + mkdirp(prefix.bin) + install("build/ALL/gem5.opt", prefix.bin) + + def build_args(self, spec, prefix): + args = [] + args.append("build/ALL/gem5.opt") + args.append(f"-j{spack.config.determine_number_of_jobs(parallel=True)}") + args.append("--ignore-style") + + return args diff --git a/var/spack/repos/builtin/packages/geode/package.py b/var/spack/repos/builtin/packages/geode/package.py index 51e828435624ec..bc1cb40498cd71 100644 --- a/var/spack/repos/builtin/packages/geode/package.py +++ b/var/spack/repos/builtin/packages/geode/package.py @@ -15,14 +15,21 @@ class Geode(Package): homepage = "https://geode.apache.org/" url = "https://archive.apache.org/dist/geode/1.9.2/apache-geode-1.9.2.tgz" + list_url = "https://archive.apache.org/dist/geode/" + list_depth = 1 license("Apache-2.0") - version("1.9.2", sha256="4b8118114ef43166f6bf73af56b93aadbf9108fcab06d1fbbb8e27f7d559d7e0") - version("1.9.0", sha256="8794808ebc89bc855f0b989b32e91e890d446cfd058e123f6ccb9e12597c1c4f") - version("1.8.0", sha256="58edc41edac4eabd899322b73a24727eac41f6253274c2ce7d0a82227121ae3e") - version("1.7.0", sha256="91eec04420f46e949d32104479c4a4b5b34a4e5570dca7b98ca067a30d5a783d") - version("1.6.0", sha256="79e8d81d058b1c4edd5fb414ff30ac530f7913b978f5abc899c353fcb06e5ef3") + version("1.15.1", sha256="2668970982d373ef42cff5076e7073b03e82c8e2fcd7757d5799b2506e265d57") + version("1.14.3", sha256="5efb1c71db34ba3b7ce1004579f8b9b7a43eae30f42c37837d5abd68c6d778bd") + version("1.13.8", sha256="b5fc105ce0a16aaf7ba341668e022d458b18d6d2c44705a8c79c42077c6d8229") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-37021 + version("1.9.2", sha256="4b8118114ef43166f6bf73af56b93aadbf9108fcab06d1fbbb8e27f7d559d7e0") + version("1.9.0", sha256="8794808ebc89bc855f0b989b32e91e890d446cfd058e123f6ccb9e12597c1c4f") + version("1.8.0", sha256="58edc41edac4eabd899322b73a24727eac41f6253274c2ce7d0a82227121ae3e") + version("1.7.0", sha256="91eec04420f46e949d32104479c4a4b5b34a4e5570dca7b98ca067a30d5a783d") + version("1.6.0", sha256="79e8d81d058b1c4edd5fb414ff30ac530f7913b978f5abc899c353fcb06e5ef3") depends_on("java", type="run") diff --git a/var/spack/repos/builtin/packages/geomodel/package.py b/var/spack/repos/builtin/packages/geomodel/package.py index 9d5978f7120e99..9dd1b99a91092a 100644 --- a/var/spack/repos/builtin/packages/geomodel/package.py +++ b/var/spack/repos/builtin/packages/geomodel/package.py @@ -18,7 +18,7 @@ class Geomodel(CMakePackage): license("Apache-2.0", checked_by="wdconinc") - version("7.0.0", sha256="9ad86e9f3e2d67b9056b70550d347db8017f4d5acf829804afc61e4fe7b6a527") + version("6.6.0", sha256="3cefeaa409177d45d3fa63e069b6496ca062991b0d7d71275b1748487659e91b") version("6.5.0", sha256="8a2f71493e54ea4d393f4c0075f3ca13df132f172c891825f3ab949cda052c5f") version("6.4.0", sha256="369f91f021be83d294ba6a9bdbe00077625e9fe798a396aceece8970e7dd5838") version("6.3.0", sha256="d2b101e06d20a8a3b638e6021f517a939f49ea6d8347ce40c927c27efe66b28c") @@ -54,6 +54,14 @@ class Geomodel(CMakePackage): when="+fullsimlight", ) + variant( + "cxxstd", + default="17", + values=("17", "20", "23"), + multi=False, + description="Use the specified C++ standard when building", + ) + conflicts("+fullsimlight", when="+fsl", msg="FSL triggers the build of the FullSimLight") depends_on("cmake@3.16:", type="build") @@ -65,11 +73,14 @@ class Geomodel(CMakePackage): depends_on("geant4", when="+geomodelg4") depends_on("geant4", when="+fullsimlight") + depends_on("hdf5+cxx", when="+fullsimlight") depends_on("hepmc3", when="+hepmc3") depends_on("pythia8", when="+pythia") with when("+visualization"): - depends_on("hdf5") - depends_on("qt-base +gui +opengl +sql +widgets") + depends_on("hdf5+cxx") + depends_on("qt +gui +opengl +sql") + depends_on("coin3d") + depends_on("soqt") depends_on("opengl") def cmake_args(self): @@ -80,5 +91,6 @@ def cmake_args(self): self.define_from_variant("GEOMODEL_BUILD_FSL", "fsl"), self.define_from_variant("GEOMODEL_BUILD_EXAMPLES", "examples"), self.define_from_variant("GEOMODEL_BUILD_TOOLS", "tools"), + self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"), ] return args diff --git a/var/spack/repos/builtin/packages/gfsio/package.py b/var/spack/repos/builtin/packages/gfsio/package.py index e478a8b8ed5efb..590f70dac58d65 100644 --- a/var/spack/repos/builtin/packages/gfsio/package.py +++ b/var/spack/repos/builtin/packages/gfsio/package.py @@ -46,5 +46,5 @@ def flag_handler(self, name, flags): return (None, None, flags) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py index da8c14c6ad170a..9b5abba5fcc019 100644 --- a/var/spack/repos/builtin/packages/git/package.py +++ b/var/spack/repos/builtin/packages/git/package.py @@ -6,6 +6,7 @@ import os import re +import spack.fetch_strategy from spack.package import * from spack.util.environment import is_system_path @@ -29,6 +30,8 @@ class Git(AutotoolsPackage): # Every new git release comes with a corresponding manpage resource: # https://www.kernel.org/pub/software/scm/git/git-manpages-{version}.tar.gz # https://mirrors.edge.kernel.org/pub/software/scm/git/sha256sums.asc + version("2.47.0", sha256="a84a7917e0ab608312834413f01fc01edc7844f9f9002ba69f3b4f4bcb8d937a") + version("2.46.2", sha256="65c5689fd44f1d09de7fd8c44de7fef074ddd69dda8b8503d44afb91495ecbce") version("2.45.2", sha256="98b26090ed667099a3691b93698d1e213e1ded73d36a2fde7e9125fce28ba234") version("2.44.2", sha256="f0655e81c5ecfeef7440aa4fcffa1c1a77eaccf764d6fe29579e9a06eac2cd04") version("2.43.5", sha256="324c3b85d668e6afe571b3502035848e4b349dead35188e2b8ab1b96c0cd45ff") @@ -99,6 +102,8 @@ class Git(AutotoolsPackage): depends_on("c", type="build") # generated for _version, _sha256_manpage in { + "2.47.0": "1a6f1e775dfe324a9b521793cbd2b3bba546442cc2ac2106d4df33dea9005038", + "2.46.2": "4bc3774ee4597098977befa4ec30b0f2cbed3b59b756e7cbb59ce1738682d43a", "2.45.2": "48c1e2e3ecbb2ce9faa020a19fcdbc6ce64ea25692111b5930686bc0bb4f0e7f", "2.45.1": "d9098fd93a3c0ef242814fc856a99886ce31dae2ba457afc416ba4e92af8f8f5", "2.44.2": "ee6a7238d5ede18fe21c0cc2131c7fbff1f871c25e2848892ee864d40baf7218", diff --git a/var/spack/repos/builtin/packages/glab/package.py b/var/spack/repos/builtin/packages/glab/package.py index 58ed827e1fd112..ed4eead79820c5 100644 --- a/var/spack/repos/builtin/packages/glab/package.py +++ b/var/spack/repos/builtin/packages/glab/package.py @@ -16,6 +16,7 @@ class Glab(GoPackage): license("MIT") + version("1.48.0", sha256="45410de23a7bad37feeae18f47f3c0113d81133ad9bb97c8f0b8afc5409272c7") version("1.46.1", sha256="935f732ddacc6e54fc83d06351fc25454ac8a58c465c3efa43e066ea226257c2") version("1.36.0", sha256="8d6c759ebfe9c6942fcdb7055a4a5c7209a3b22beb25947f906c9aef3bc067e8") version("1.35.0", sha256="7ed31c7a9b425fc15922f83c5dd8634a2758262a4f25f92583378655fcad6303") @@ -40,6 +41,7 @@ class Glab(GoPackage): depends_on("go@1.22.4:", type="build", when="@1.42:") depends_on("go@1.22.5:", type="build", when="@1.44:") depends_on("go@1.23:", type="build", when="@1.46:") + depends_on("go@1.23.2:", type="build", when="@1.48:") build_directory = "cmd/glab" diff --git a/var/spack/repos/builtin/packages/glib/package.py b/var/spack/repos/builtin/packages/glib/package.py index 1d378bb4a5dc23..e0bf89a4082bc5 100644 --- a/var/spack/repos/builtin/packages/glib/package.py +++ b/var/spack/repos/builtin/packages/glib/package.py @@ -5,6 +5,8 @@ import os.path +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * from spack.util.environment import is_system_path @@ -28,7 +30,14 @@ class Glib(MesonPackage, AutotoolsPackage): license("LGPL-2.1-or-later") - version("2.78.3", sha256="609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21") + # Even minor versions are stable, odd minor versions are development, only add even numbers + version("2.82.2", sha256="ab45f5a323048b1659ee0fbda5cecd94b099ab3e4b9abf26ae06aeb3e781fd63") + # No real reason to prefer older versions, `preferred` should be removed after testing + version( + "2.78.3", + sha256="609801dd373796e515972bf95fc0b2daa44545481ee2f465c4f204d224b2bc21", + preferred=True, + ) version("2.78.0", sha256="44eaab8b720877ce303c5540b657b126f12dc94972d9880b52959f43fb537b30") version("2.76.6", sha256="1136ae6987dcbb64e0be3197a80190520f7acab81e2bfb937dc85c11c8aa9f04") version("2.76.4", sha256="5a5a191c96836e166a7771f7ea6ca2b0069c603c7da3cba1cd38d1694a395dda") @@ -133,6 +142,8 @@ class Glib(MesonPackage, AutotoolsPackage): ) with when("build_system=meson"): + depends_on("meson@1.4:", when="@2.83:", type="build") + depends_on("meson@1.2:", when="@2.79:", type="build") depends_on("meson@0.60.0:", when="@2.73:", type="build") depends_on("meson@0.52.0:", when="@2.71:2.72", type="build") depends_on("meson@0.49.2:", when="@2.61.2:2.70", type="build") @@ -143,8 +154,9 @@ class Glib(MesonPackage, AutotoolsPackage): depends_on("zlib-api") depends_on("gettext") depends_on("perl", type=("build", "run")) + depends_on("python", type=("build", "run"), when="@2.53.4:") # Uses distutils in gio/gdbus-2.0/codegen/utils.py - depends_on("python@:3.11", type=("build", "run"), when="@2.53.4:") + depends_on("python@:3.11", type=("build", "run"), when="@2.53.4:2.78") depends_on("pcre2", when="@2.73.2:") depends_on("pcre2@10.34:", when="@2.74:") depends_on("pcre+utf", when="@2.48:2.73.1") @@ -209,7 +221,7 @@ def libs(self): return find_libraries(["libglib*"], root=self.prefix, recursive=True) -class BaseBuilder(metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): @property def dtrace_copy_path(self): return join_path(self.stage.source_path, "dtrace-copy") @@ -288,7 +300,7 @@ def gettext_libdir(self): filter_file(pattern, repl, myfile, backup=False) -class MesonBuilder(BaseBuilder, spack.build_systems.meson.MesonBuilder): +class MesonBuilder(AnyBuilder, spack.build_systems.meson.MesonBuilder): def meson_args(self): args = [] if self.spec.satisfies("@2.63.5:"): @@ -334,7 +346,7 @@ def fix_python_path(self): super().fix_python_path() -class AutotoolsBuilder(BaseBuilder, spack.build_systems.autotools.AutotoolsBuilder): +class AutotoolsBuilder(AnyBuilder, spack.build_systems.autotools.AutotoolsBuilder): def configure_args(self): args = [] if self.spec.satisfies("+libmount"): diff --git a/var/spack/repos/builtin/packages/gloo/package.py b/var/spack/repos/builtin/packages/gloo/package.py index 7915f9e3eae666..76e36f1938469b 100644 --- a/var/spack/repos/builtin/packages/gloo/package.py +++ b/var/spack/repos/builtin/packages/gloo/package.py @@ -48,7 +48,10 @@ class Gloo(CMakePackage, CudaPackage): ) generator("ninja") + + depends_on("c", type="build") depends_on("cxx", type="build") + depends_on("pkgconfig", type="build") depends_on("libuv@1.26:", when="+libuv") depends_on("cmake@2.8.12:", type="build") diff --git a/var/spack/repos/builtin/packages/gmake/package.py b/var/spack/repos/builtin/packages/gmake/package.py index 2e52b7e5ea9746..092d131493e867 100644 --- a/var/spack/repos/builtin/packages/gmake/package.py +++ b/var/spack/repos/builtin/packages/gmake/package.py @@ -31,7 +31,7 @@ class Gmake(Package, GNUMirrorPackage): sha256="fc42139fb0d4b4291929788ebaf77e2a4de7eaca95e31f3634ef7d4932051f69", ) - depends_on("c", type="build") # generated + depends_on("c", type="build") variant("guile", default=False, description="Support GNU Guile for embedded scripting") diff --git a/var/spack/repos/builtin/packages/gmp/package.py b/var/spack/repos/builtin/packages/gmp/package.py index df7a05e381ca54..ae3618d695fd35 100644 --- a/var/spack/repos/builtin/packages/gmp/package.py +++ b/var/spack/repos/builtin/packages/gmp/package.py @@ -26,9 +26,8 @@ class Gmp(AutotoolsPackage, GNUMirrorPackage): # Old version needed for a binary package in ghc-bootstrap version("4.3.2", sha256="936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build", when="+cxx") depends_on("autoconf", type="build") depends_on("automake", type="build") diff --git a/var/spack/repos/builtin/packages/gnuconfig/package.py b/var/spack/repos/builtin/packages/gnuconfig/package.py index a0420c6a4ab4e2..d999b073b909cf 100644 --- a/var/spack/repos/builtin/packages/gnuconfig/package.py +++ b/var/spack/repos/builtin/packages/gnuconfig/package.py @@ -21,6 +21,9 @@ class Gnuconfig(Package): maintainers("haampie") version("master", branch="master") + version( + "2024-07-27", sha256="1135044961853c7f116145cee9bb15c3d29b1b081cf8293954efd0f05d801a7c" + ) version( "2022-09-17", sha256="95306801ad7086e6a6e13397cb859183d8b7adbba2e372ce0819bad5fcb919b7" ) diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py index bb073dccd12a12..753c26c4ae82e5 100644 --- a/var/spack/repos/builtin/packages/go/package.py +++ b/var/spack/repos/builtin/packages/go/package.py @@ -41,7 +41,11 @@ class Go(Package): license("BSD-3-Clause") + version("1.23.3", sha256="8d6a77332487557c6afa2421131b50f83db4ae3c579c3bc72e670ee1f6968599") + version("1.23.2", sha256="36930162a93df417d90bd22c6e14daff4705baac2b02418edda671cdfa9cd07f") version("1.23.1", sha256="6ee44e298379d146a5e5aa6b1c5b5d5f5d0a3365eabdd70741e6e21340ec3b0d") + version("1.22.8", sha256="df12c23ebf19dea0f4bf46a22cbeda4a3eca6f474f318390ce774974278440b8") + version("1.22.7", sha256="66432d87d85e0cfac3edffe637d5930fc4ddf5793313fe11e4a0f333023c879f") version("1.22.6", sha256="9e48d99d519882579917d8189c17e98c373ce25abaebb98772e2927088992a51") version("1.22.4", sha256="fed720678e728a7ca30ba8d1ded1caafe27d16028fab0232b8ba8e22008fb784") diff --git a/var/spack/repos/builtin/packages/gobject-introspection/package.py b/var/spack/repos/builtin/packages/gobject-introspection/package.py index b7e16bae2ee65b..1f6cdcc70239a7 100644 --- a/var/spack/repos/builtin/packages/gobject-introspection/package.py +++ b/var/spack/repos/builtin/packages/gobject-introspection/package.py @@ -92,6 +92,12 @@ class GobjectIntrospection(MesonPackage, AutotoolsPackage): when="@:1.63.1", ) + # https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/361 + # https://gitlab.gnome.org/GNOME/gobject-introspection/-/issues/395 + conflicts( + "^python@3.12:", + msg="gobject-introspection still uses distutils which was removed in Python 3.12", + ) conflicts( "^python@3.11:", when="@:1.60", @@ -106,6 +112,7 @@ def setup_build_environment(self, env): # Only needed for sbang.patch above if self.spec.satisfies("@:1.60"): env.set("SPACK_SBANG", sbang.sbang_install_path()) + env.set("GI_SCANNER_DISABLE_CACHE", "1") def setup_run_environment(self, env): env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) @@ -113,6 +120,7 @@ def setup_run_environment(self, env): def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("XDG_DATA_DIRS", self.prefix.share) env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) + env.set("GI_SCANNER_DISABLE_CACHE", "1") env.prepend_path("LD_LIBRARY_PATH", self.spec["glib"].prefix.lib) def setup_dependent_run_environment(self, env, dependent_spec): diff --git a/var/spack/repos/builtin/packages/goimports/package.py b/var/spack/repos/builtin/packages/goimports/package.py new file mode 100644 index 00000000000000..2c799cfde53ddc --- /dev/null +++ b/var/spack/repos/builtin/packages/goimports/package.py @@ -0,0 +1,21 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Goimports(GoPackage): + """Updates your Go import lines, adding missing ones and removing unreferenced ones.""" + + homepage = "https://golang.org/x/tools/cmd/goimports" + url = "https://github.com/golang/tools/archive/refs/tags/v0.25.0.tar.gz" + + maintainers("alecbcs") + + license("BSD-3-Clause", checked_by="alecbcs") + + version("0.25.0", sha256="c536188f5db744371f526f3059960945ed580b3ee60553a4f01956251ab36d20") + + build_directory = "cmd/goimports" diff --git a/var/spack/repos/builtin/packages/google-cloud-cpp/package.py b/var/spack/repos/builtin/packages/google-cloud-cpp/package.py index 7a477505cc94ca..e66aedae3f67b1 100644 --- a/var/spack/repos/builtin/packages/google-cloud-cpp/package.py +++ b/var/spack/repos/builtin/packages/google-cloud-cpp/package.py @@ -18,6 +18,8 @@ class GoogleCloudCpp(CMakePackage): sanity_check_is_dir = ["lib", "include"] + version("2.30.0", sha256="170650b11ece54977b42dd85be648b6bd2d614ff68ea6863a0013865e576b49c") + version("2.29.0", sha256="758e1eca8186b962516c0659b34ce1768ba1c9769cfd998c5bbffb084ad901ff") version("2.28.0", sha256="1d51910cb4419f6100d8b9df6bccd33477d09f50e378f12b06dae0f137ed7bc6") depends_on("abseil-cpp") @@ -30,11 +32,17 @@ class GoogleCloudCpp(CMakePackage): variant("shared", default=False, description="Build shared instead of static libraries") variant( "cxxstd", - default="11", - values=("11", "14", "17", "20"), + default="14", + values=("14", "17", "20"), multi=False, description="Use the specified C++ standard when building.", ) + variant( + "libraries", + default="__ga_libraries__", + multi=False, + description="Which client libraries to build/install. e.g. libraries=bigtable,storage", + ) def cmake_args(self): args = [ @@ -43,6 +51,6 @@ def cmake_args(self): "-DBUILD_TESTING:Bool=OFF", "-DGOOGLE_CLOUD_CPP_WITH_MOCKS:Bool=OFF", "-DGOOGLE_CLOUD_CPP_ENABLE_EXAMPLES:Bool=OFF", - "-DGOOGLE_CLOUD_CPP_ENABLE:String=__ga_libraries__", + self.define_from_variant("GOOGLE_CLOUD_CPP_ENABLE", "libraries"), ] return args diff --git a/var/spack/repos/builtin/packages/googletest/package.py b/var/spack/repos/builtin/packages/googletest/package.py index 87c603732026fc..3d64572b803db1 100644 --- a/var/spack/repos/builtin/packages/googletest/package.py +++ b/var/spack/repos/builtin/packages/googletest/package.py @@ -27,7 +27,8 @@ class Googletest(CMakePackage): version("1.7.0", sha256="f73a6546fdf9fce9ff93a5015e0333a8af3062a152a9ad6bcb772c96687016cc") version("1.6.0", sha256="5fbc058e5b662b9c86d93ac76fefb58eec89cbf26144b49669a38ecb62758447") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("gmock", default=True, when="@1.8:", description="Build with gmock") variant("pthreads", default=True, description="Build multithreaded version with pthreads") diff --git a/var/spack/repos/builtin/packages/gopls/package.py b/var/spack/repos/builtin/packages/gopls/package.py new file mode 100644 index 00000000000000..ba4959d9d9767c --- /dev/null +++ b/var/spack/repos/builtin/packages/gopls/package.py @@ -0,0 +1,21 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Gopls(GoPackage): + """The official Go language server developed by the Go team.""" + + homepage = "https://golang.org/x/tools/gopls" + url = "https://github.com/golang/tools/archive/refs/tags/gopls/v0.16.2.tar.gz" + + maintainers("alecbcs") + + license("BSD-3-Clause", checked_by="alecbcs") + + version("0.16.2", sha256="be68b3159fcb8cde9ebb8b468f67f03531c58be2de33edbac69e5599f2d4a2c1") + + build_directory = "gopls" diff --git a/var/spack/repos/builtin/packages/grep/package.py b/var/spack/repos/builtin/packages/grep/package.py index 1ff968569f99f8..a8f2927469f8d8 100644 --- a/var/spack/repos/builtin/packages/grep/package.py +++ b/var/spack/repos/builtin/packages/grep/package.py @@ -2,6 +2,8 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import re + from spack.package import * @@ -14,6 +16,8 @@ class Grep(AutotoolsPackage): license("GPL-3.0-or-later") + executables = ["^grep$"] + version("3.11", sha256="1db2aedde89d0dea42b16d9528f894c8d15dae4e190b59aecc78f5a951276eab") version("3.10", sha256="24efa5b595fb5a7100879b51b8868a0bb87a71c183d02c4c602633b88af6855b") version("3.9", sha256="abcd11409ee23d4caf35feb422e53bbac867014cfeed313bb5f488aca170b599") @@ -29,6 +33,14 @@ class Grep(AutotoolsPackage): depends_on("pcre2", when="@3.8:+pcre") depends_on("pcre", when="@:3.7+pcre") + @classmethod + def determine_version(cls, exe): + output = Executable(exe)("--version", output=str, error=str) + # Example output: + # grep (GNU grep) 3.11 + match = re.search(r"^grep \(GNU grep\) ([0-9.]+)", output) + return match.group(1) if match else None + def configure_args(self): args = [] diff --git a/var/spack/repos/builtin/packages/grib-util/package.py b/var/spack/repos/builtin/packages/grib-util/package.py index b8e2aaee371310..b44e86134ea935 100644 --- a/var/spack/repos/builtin/packages/grib-util/package.py +++ b/var/spack/repos/builtin/packages/grib-util/package.py @@ -56,5 +56,5 @@ def cmake_args(self): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py index 0d8942d66f1218..486c36af8e66f9 100644 --- a/var/spack/repos/builtin/packages/gromacs/package.py +++ b/var/spack/repos/builtin/packages/gromacs/package.py @@ -7,6 +7,7 @@ import llnl.util.filesystem as fs +import spack.build_systems.cmake from spack.package import * @@ -116,7 +117,7 @@ class Gromacs(CMakePackage, CudaPackage): description="Enable multi-GPU FFT support with HeFFTe", ) variant("opencl", default=False, description="Enable OpenCL support") - variant("sycl", default=False, when="@2021:", description="Enable SYCL support") + variant("sycl", default=False, when="@2021: %clang", description="Enable SYCL support") variant( "intel-data-center-gpu-max", default=False, @@ -183,7 +184,7 @@ class Gromacs(CMakePackage, CudaPackage): "sve", default=True, description="Enable SVE on aarch64 if available", - when="target=neoverse_v1:,neoverse_v2:", + when="target=neoverse_v1:,neoverse_v2:,neoverse_n2:", ) variant( "sve", default=True, description="Enable SVE on aarch64 if available", when="target=a64fx" @@ -295,6 +296,15 @@ class Gromacs(CMakePackage, CudaPackage): + "The g++ location is written to icp{c,x}.cfg", ) + variant( + "itt", + default=False, + when="@2024:", + description="Enable Instrumentation and Tracing Technology (ITT)" + + " profiling API (from Intel)", + ) + depends_on("intel-oneapi-vtune", "+itt") + depends_on("fftw-api@3") depends_on("cmake@2.8.8:3", type="build") depends_on("cmake@3.4.3:3", type="build", when="@2018:") @@ -309,8 +319,14 @@ class Gromacs(CMakePackage, CudaPackage): depends_on("sycl", when="+sycl") depends_on("lapack") depends_on("blas") - depends_on("gcc", when="%oneapi ~intel_provided_gcc") depends_on("gcc", when="%intel ~intel_provided_gcc") + # TODO this can be expanded to all clang-based compilers once + # the principle is demonstrated to work + with when("%oneapi ~intel_provided_gcc"): + depends_on("gcc-runtime@5:", when="@2020") + depends_on("gcc-runtime@7:", when="@2021:2022") + depends_on("gcc-runtime@9:", when="@2023:2024") + depends_on("gcc-runtime@11:", when="@2025:") depends_on("hwloc@1.0:1", when="+hwloc@2016:2018") depends_on("hwloc", when="+hwloc@2019:") @@ -539,7 +555,7 @@ def cmake_args(self): ): with open(".".join([os.environ["SPACK_CXX"], "cfg"]), "r") as f: options.append("-DCMAKE_CXX_FLAGS={}".format(f.read())) - else: + elif self.spec.satisfies("^gcc"): options.append("-DGMX_GPLUSPLUS_PATH=%s/g++" % self.spec["gcc"].prefix.bin) if self.spec.satisfies("+double"): @@ -607,6 +623,13 @@ def cmake_args(self): options.append("-DGMX_GPU_NB_CLUSTER_SIZE=8") options.append("-DGMX_GPU_NB_NUM_CLUSTER_PER_CELL_X=1") + if "+itt" in self.spec: + options.append("-DGMX_USE_ITT=on") + options.append( + "-DITTNOTIFY_INCLUDE_DIR=%s" + % join_path(self.spec["intel-oneapi-vtune"].package.headers) + ) + if self.spec.satisfies("~nblib"): options.append("-DGMX_INSTALL_NBLIB_API=OFF") if self.spec.satisfies("~gmxapi"): diff --git a/var/spack/repos/builtin/packages/gsl/package.py b/var/spack/repos/builtin/packages/gsl/package.py index 2a9b83c80a17d9..6b17ec9e2e56a5 100644 --- a/var/spack/repos/builtin/packages/gsl/package.py +++ b/var/spack/repos/builtin/packages/gsl/package.py @@ -19,6 +19,7 @@ class Gsl(AutotoolsPackage, GNUMirrorPackage): license("GPL-3.0-or-later") + version("2.8", sha256="6a99eeed15632c6354895b1dd542ed5a855c0f15d9ad1326c6fe2b2c9e423190") version("2.7.1", sha256="dcb0fbd43048832b757ff9942691a8dd70026d5da0ff85601e52687f6deeb34b") version("2.7", sha256="efbbf3785da0e53038be7907500628b466152dbc3c173a87de1b5eba2e23602b") version("2.6", sha256="b782339fc7a38fe17689cb39966c4d821236c28018b6593ddb6fd59ee40786a8") diff --git a/var/spack/repos/builtin/packages/gsoap/package.py b/var/spack/repos/builtin/packages/gsoap/package.py index 6eface4e36b683..d1d8b3d1e4deae 100644 --- a/var/spack/repos/builtin/packages/gsoap/package.py +++ b/var/spack/repos/builtin/packages/gsoap/package.py @@ -17,13 +17,30 @@ class Gsoap(AutotoolsPackage, SourceforgePackage): maintainers("greenc-FNAL", "gartung", "marcmengel", "vitodb") - version("2.8.127", sha256="25ecad1bbc363494eb7ea95a68508e4c93cc20596fad9ebc196c6572bbbd3c08") - version("2.8.124", sha256="4b798780989338f665ef8e171bbcc422a271004d62d5852666d5eeca33a6a636") - version("2.8.119", sha256="8997c43b599a2bfe4a788e303a5dd24bbf5992fd06d56f606ca680ca5b0070cf") - version("2.8.114", sha256="aa70a999258100c170a3f8750c1f91318a477d440f6a28117f68bc1ded32327f") - version("2.8.113", sha256="e73782b618303cf55ea6a45751b75ba96797a7a12967ed9d02e6d5761977e73a") - version("2.8.112", sha256="05345312e0bb4d81c98ae63b97cff9eb097f38dafe09356189f9d8e235c54095") - version("2.8.111", sha256="f1670c7e3aeaa66bc5658539fbd162e5099f022666855ef2b2c2bac07fec4bd3") + version("2.8.135", sha256="b11757e405d55d4674dfbf88c4fa6d7e24155cf64ed8ed578ccad2f2b555e98d") + with default_args(deprecated=True): + # Unavailable for direct download anymore + version( + "2.8.127", sha256="25ecad1bbc363494eb7ea95a68508e4c93cc20596fad9ebc196c6572bbbd3c08" + ) + version( + "2.8.124", sha256="4b798780989338f665ef8e171bbcc422a271004d62d5852666d5eeca33a6a636" + ) + version( + "2.8.119", sha256="8997c43b599a2bfe4a788e303a5dd24bbf5992fd06d56f606ca680ca5b0070cf" + ) + version( + "2.8.114", sha256="aa70a999258100c170a3f8750c1f91318a477d440f6a28117f68bc1ded32327f" + ) + version( + "2.8.113", sha256="e73782b618303cf55ea6a45751b75ba96797a7a12967ed9d02e6d5761977e73a" + ) + version( + "2.8.112", sha256="05345312e0bb4d81c98ae63b97cff9eb097f38dafe09356189f9d8e235c54095" + ) + version( + "2.8.111", sha256="f1670c7e3aeaa66bc5658539fbd162e5099f022666855ef2b2c2bac07fec4bd3" + ) depends_on("openssl") depends_on("pkgconfig", type="build") diff --git a/var/spack/repos/builtin/packages/gtkplus/package.py b/var/spack/repos/builtin/packages/gtkplus/package.py index 0db55334b023df..68b21046fe055f 100644 --- a/var/spack/repos/builtin/packages/gtkplus/package.py +++ b/var/spack/repos/builtin/packages/gtkplus/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * @@ -24,6 +26,11 @@ class Gtkplus(AutotoolsPackage, MesonPackage): version("3.24.41", sha256="47da61487af3087a94bc49296fd025ca0bc02f96ef06c556e7c8988bd651b6fa") version("3.24.29", sha256="f57ec4ade8f15cab0c23a80dcaee85b876e70a8823d9105f067ce335a8268caa") version("3.24.26", sha256="2cc1b2dc5cad15d25b6abd115c55ffd8331e8d4677745dd3ce6db725b4fff1e9") + version( + "3.22.30", + sha256="a1a4a5c12703d4e1ccda28333b87ff462741dc365131fbc94c218ae81d9a6567", + deprecated=True, + ) version( "3.20.10", sha256="e81da1af1c5c1fee87ba439770e17272fa5c06e64572939814da406859e56b70", @@ -58,11 +65,15 @@ class Gtkplus(AutotoolsPackage, MesonPackage): # depends_on('docbook-xsl', when='@3.24:', type='build') # depends_on('libxslt', when='@3.24:', type='build') depends_on("pkgconfig", type="build") - depends_on("glib@2.57.2:") + depends_on("glib") + depends_on("glib@2.49.4:", when="@3.22:") + depends_on("glib@2.57.2:", when="@3.24:") depends_on("pango@1.41.0:+X") depends_on("fribidi@0.19.7:") - depends_on("atk@2.35.1:") - depends_on("at-spi2-atk@2.15.1:", when="@3:") + # atk was also merged into at-spi2-core, but gtk3 doesn't want to build without it + depends_on("atk@2.35.1:", when="@:3") + # at-spi2-atk was merged into at-spi2-core, but gtk3 is picky + depends_on("at-spi2-core@2.46:2.48", when="@:3") depends_on("cairo@1.14.0:+X+pdf+gobject") depends_on("gdk-pixbuf@2.30.0:") depends_on("gobject-introspection@1.39.0:") @@ -92,7 +103,7 @@ def patch(self): ) # https://gitlab.gnome.org/GNOME/gtk/-/issues/3776 - if self.spec.satisfies("@3:%gcc@11:"): + if self.spec.satisfies("@3.24:%gcc@11:"): filter_file(" '-Werror=array-bounds',", "", "meson.build", string=True) def setup_run_environment(self, env): diff --git a/var/spack/repos/builtin/packages/gxsview/package.py b/var/spack/repos/builtin/packages/gxsview/package.py index 0d94df2f6eed1c..d50fe08e3cd2eb 100644 --- a/var/spack/repos/builtin/packages/gxsview/package.py +++ b/var/spack/repos/builtin/packages/gxsview/package.py @@ -24,6 +24,9 @@ class Gxsview(QMakePackage): license("LGPL-3.0-only") + version( + "2024.03.15", sha256="5a6e6384a79fc2f39370846814f049b6c4c32f418cb00363cfb18bc1b6598d3a" + ) version( "2023.05.29", sha256="1e768fd7afd22198b7f73adeb42f4ccf7e0ff68996a3843b1ea138225c4c1da3" ) @@ -40,12 +43,17 @@ class Gxsview(QMakePackage): depends_on("fontconfig") depends_on("qt@5.14.0:+opengl+gui") depends_on("vtk@8.0:+qt+opengl2") # +mpi+python are optional + depends_on("vtk@9:+qt+opengl2", when="@2024.03.15:") conflicts("%gcc@:7.2.0", msg="Requires C++17 compiler support") # need C++17 standard + conflicts("qt@6:", msg="Qt 6 support is not yet achieved") + conflicts("qt-base@6:", msg="Qt 6 support is not yet achieved") # required for clingo patch("vtk9.patch", when="^vtk@9:") # gcc11 compilation rule for std::numeric_limits, # avoid "numeric_limits" is not a member of "std" patch("gcc11.patch", when="@2021.07.01 %gcc@11:") + # sets fontconfig inc/lib, removes useless stuffs + patch("vtk90.patch", when="@2024.03.15") build_directory = "gui" @@ -57,11 +65,14 @@ def qmake_args(self): if not os.path.exists(vtk_include_dir): vtk_include_dir = join_path(self.spec["vtk"].prefix.include, "vtk") args.append("VTK_NO_VER_SUFFIX=ON") + fontconfig = self.spec["fontconfig"] args.extend( [ "VTK_LIB_DIR={0}".format(vtk_lib_dir), "VTK_INC_DIR={0}".format(vtk_include_dir), "VTK_MAJOR_VER={0}".format(str(vtk_suffix)), + "FONTCONFIG_LIBDIR={0}".format(fontconfig.prefix.lib), + "FONTCONFIG_INCDIR={0}".format(fontconfig.prefix.include), ] ) # Below to avoid undefined reference to `std::filesystem::__cxx11::path::_M_split_cmpts()' diff --git a/var/spack/repos/builtin/packages/gxsview/vtk90.patch b/var/spack/repos/builtin/packages/gxsview/vtk90.patch new file mode 100644 index 00000000000000..afe6990e451de0 --- /dev/null +++ b/var/spack/repos/builtin/packages/gxsview/vtk90.patch @@ -0,0 +1,51 @@ +diff --git a/gui/geometryviewer/trajectorypane/trajectorycreatingworker.cpp b/gui/geometryviewer/trajectorypane/trajectorycreatingworker.cpp +index 92802f2..af731e3 100644 +--- a/gui/geometryviewer/trajectorypane/trajectorycreatingworker.cpp ++++ b/gui/geometryviewer/trajectorypane/trajectorycreatingworker.cpp +@@ -7,6 +7,7 @@ + #include "trajectorycreatingworker.hpp" + + #include // for coloring ++#include + + #include "core/image/color.hpp" + +diff --git a/gui/geometryviewer/trajectorypane/trajectorypane.cpp b/gui/geometryviewer/trajectorypane/trajectorypane.cpp +index eeae291..337e0e1 100644 +--- a/gui/geometryviewer/trajectorypane/trajectorypane.cpp ++++ b/gui/geometryviewer/trajectorypane/trajectorypane.cpp +@@ -35,7 +35,7 @@ + #include + #include + #include +-#include ++// #include + #include + #include + #if defined(_WIN32) || defined(__WIN32__) || defined(_WIN64) || defined(__WIN64__) || defined(_MSC_VER) +diff --git a/gui/gui.pro b/gui/gui.pro +index cab6c36..81861b7 100644 +--- a/gui/gui.pro ++++ b/gui/gui.pro +@@ -302,7 +302,8 @@ unix:{ + + + unix:!macx { +- LIBS += -lfontconfig ++ LIBS += -L$$FONTCONFIG_LIBDIR -lfontconfig ++ INCLUDEPATH += $$FONTCONFIG_INCDIR + # gcc7 requires libstdc++fs + linux-g++ { + lessThan(QMAKE_GCC_MAJOR_VERSION, 8) { +diff --git a/gui/vtk9.pri b/gui/vtk9.pri +index 298dedb..82993f2 100644 +--- a/gui/vtk9.pri ++++ b/gui/vtk9.pri +@@ -58,7 +58,6 @@ LIBS += \ + -lvtkRenderingGL2PSOpenGL2$$VTK_VER_SUFFIX \ + -lvtkRenderingSceneGraph$$VTK_VER_SUFFIX \ + -lvtkRenderingOpenGL2$$VTK_VER_SUFFIX \ +- -lvtkRenderingQt$$VTK_VER_SUFFIX \ + -lvtkRenderingUI$$VTK_VER_SUFFIX \ + -lvtkRenderingVolume$$VTK_VER_SUFFIX \ + -lvtkRenderingVtkJS$$VTK_VER_SUFFIX \ diff --git a/var/spack/repos/builtin/packages/harfbuzz/package.py b/var/spack/repos/builtin/packages/harfbuzz/package.py index 08d661912acfe0..2f748f64fbd699 100644 --- a/var/spack/repos/builtin/packages/harfbuzz/package.py +++ b/var/spack/repos/builtin/packages/harfbuzz/package.py @@ -24,6 +24,7 @@ class Harfbuzz(MesonPackage, AutotoolsPackage): license("MIT") + version("10.1.0", sha256="6ce3520f2d089a33cef0fc48321334b8e0b72141f6a763719aaaecd2779ecb82") version("10.0.1", sha256="b2cb13bd351904cb9038f907dc0dee0ae07127061242fe3556b2795c4e9748fc") version("10.0.0", sha256="c2dfe016ad833a5043ecc6579043f04e8e6d50064e02ad449bb466e6431e3e04") version("9.0.0", sha256="a41b272ceeb920c57263ec851604542d9ec85ee3030506d94662067c7b6ab89e") @@ -120,9 +121,9 @@ def flag_handler(self, name, flags): if name == "cxxflags": flags.append(self.compiler.cxx11_flag) if name == "cflags": - if "%pgi" not in self.spec and self.spec.satisfies("%gcc@:5.1"): + if self.spec.satisfies("%gcc@:5.1"): flags.append("-std=gnu99") - return (None, None, flags) + return None, None, flags def setup_run_environment(self, env): env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0")) diff --git a/var/spack/repos/builtin/packages/hdf/package.py b/var/spack/repos/builtin/packages/hdf/package.py index 85acc3dbb3ec6d..9531524c0c60db 100644 --- a/var/spack/repos/builtin/packages/hdf/package.py +++ b/var/spack/repos/builtin/packages/hdf/package.py @@ -127,7 +127,7 @@ def libs(self): if not libs: msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) diff --git a/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py b/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py index d6882f3d281c92..8a9cf389ff2c6e 100644 --- a/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py +++ b/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py @@ -27,7 +27,7 @@ class Hdf5VolCache(CMakePackage): def flag_handler(self, name, flags): if name == "cflags": - if self.spec.satisfies("%oneapi"): + if self.spec.satisfies("%oneapi") or self.spec.satisfies("%cce"): flags.append("-Wno-error=incompatible-function-pointer-types") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py index d42d4d1122fa04..3021c3bf7b7025 100644 --- a/var/spack/repos/builtin/packages/hdf5/package.py +++ b/var/spack/repos/builtin/packages/hdf5/package.py @@ -33,13 +33,13 @@ class Hdf5(CMakePackage): license("custom") + depends_on("c", type="build") depends_on("cxx", type="build", when="+cxx") depends_on("fortran", type="build", when="+fortran") # The 'develop' version is renamed so that we could uninstall (or patch) it # without affecting other develop version. - version("develop-1.17", branch="develop") - version("develop-1.16", branch="hdf5_1_16") + version("develop-2.0", branch="develop") version("develop-1.14", branch="hdf5_1_14") version("develop-1.12", branch="hdf5_1_12") version("develop-1.10", branch="hdf5_1_10") @@ -110,10 +110,6 @@ class Hdf5(CMakePackage): version("1.8.12", sha256="b5cccea850096962b5fd9e96f22c4f47d2379224bb41130d9bc038bb6c37dfcb") version("1.8.10", sha256="4813b79c5fb8701a625b9924b8203bc7154a77f9b826ad4e034144b4056a160a") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated - variant("shared", default=True, description="Builds a shared version of the library") variant("hl", default=False, description="Enable the high-level library") @@ -339,7 +335,12 @@ def flag_handler(self, name, flags): cmake_flags = [] if name == "cflags": - if spec.compiler.name in ["gcc", "clang", "apple-clang", "oneapi"]: + if ( + spec.satisfies("%gcc") + or spec.satisfies("%clang") + or spec.satisfies("%apple-clang") + or spec.satisfies("%oneapi") + ): # Quiet warnings/errors about implicit declaration of functions # in C99: cmake_flags.append("-Wno-error=implicit-function-declaration") @@ -589,6 +590,10 @@ def cmake_args(self): if spec.satisfies("@1.10.8,1.13.0"): args.append(self.define("HDF5_INSTALL_CMAKE_DIR", "share/cmake/hdf5")) + # AOCC does not support _Float16 + if spec.satisfies("@1.14.4: %aocc"): + args.append(self.define("HDF5_ENABLE_NONSTANDARD_FEATURE_FLOAT16", False)) + return args @run_after("install") @@ -679,6 +684,24 @@ def symlink_to_h5hl_wrappers(self): os.remove(old) symlink(new, old) + @run_after("install") + def symlink_mpi_libs(self): + """Compatibility layer to support projects looking for the MPI suffix""" + if not self.spec.satisfies("+mpi"): + return + + mpi_libs = ["libhdf5{mpi_suffix}", "libhdf5{mpi_suffix}_hl"] + for lib_f in mpi_libs: + src_name = lib_f.format(mpi_suffix="") + dst_name = lib_f.format(mpi_suffix="_mpi") + libs = find_libraries(src_name, root=self.prefix, recursive=True) + for lib_path in libs: + prefix = os.path.dirname(lib_path) + src_lib = os.path.basename(lib_path) + dst_lib = dst_name.join(src_lib.rsplit(src_name, 1)) + with working_dir(prefix): + symlink(src_lib, dst_lib) + @property @llnl.util.lang.memoized def _output_version(self): diff --git a/var/spack/repos/builtin/packages/heffte/package.py b/var/spack/repos/builtin/packages/heffte/package.py index 7ad6c880435f5c..fd6d9ed5b41023 100644 --- a/var/spack/repos/builtin/packages/heffte/package.py +++ b/var/spack/repos/builtin/packages/heffte/package.py @@ -21,6 +21,7 @@ class Heffte(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("develop", branch="master") + version("2.4.1", sha256="de2cf26df5d61baac7841525db3f393cb007f79612ac7534fd4757f154ba3e6c") version("2.4.0", sha256="02310fb4f9688df02f7181667e61c3adb7e38baf79611d80919d47452ff7881d") version("2.3.0", sha256="63db8c9a8822211d23e29f7adf5aa88bb462c91d7a18c296c3ef3a06be8d6171") version("2.2.0", sha256="332346d5c1d1032288d09839134c79e4a9704e213a2d53051e96c3c414c74df0") @@ -142,7 +143,12 @@ def test_make_test(self): cmake_dir = self.test_suite.current_test_cache_dir.testing options = [cmake_dir] - options.append(self.define("Heffte_DIR", self.spec.prefix.lib.cmake.Heffte)) + # changing the default install path search to newer cmake convention + if self.spec.satisfies("@2.4.1:"): + options.append(self.define("Heffte_ROOT", self.spec.prefix)) + else: + options.append(self.define("Heffte_DIR", self.spec.prefix.lib.cmake.Heffte)) + if self.spec.satisfies("+rocm"): # path name is 'hsa-runtime64' but python cannot have '-' in variable name hsa_runtime = join_path(self.spec["hsa-rocr-dev"].prefix.lib.cmake, "hsa-runtime64") diff --git a/var/spack/repos/builtin/packages/hepmc3/package.py b/var/spack/repos/builtin/packages/hepmc3/package.py index fc2e42b7c458ae..c3c4cb086d1980 100644 --- a/var/spack/repos/builtin/packages/hepmc3/package.py +++ b/var/spack/repos/builtin/packages/hepmc3/package.py @@ -66,6 +66,10 @@ class Hepmc3(CMakePackage): conflicts("%gcc@9.3.0", when="@:3.1.1") patch("ba38f14d8f56c16cc4105d98f6d4540c928c6150.patch", when="@3.1.2:3.2.1 %gcc@9.3.0") + @property + def libs(self): + return find_libraries(["libHepMC3", "libHepMC3Search"], root=self.prefix, recursive=True) + def cmake_args(self): spec = self.spec from_variant = self.define_from_variant diff --git a/var/spack/repos/builtin/packages/hermes-shm/package.py b/var/spack/repos/builtin/packages/hermes-shm/package.py index 6b51724548add4..f141db123fe2b4 100644 --- a/var/spack/repos/builtin/packages/hermes-shm/package.py +++ b/var/spack/repos/builtin/packages/hermes-shm/package.py @@ -40,7 +40,7 @@ class HermesShm(CMakePackage): depends_on("pkgconfig", type="build") depends_on("catch2@3.0.1") depends_on("yaml-cpp") - depends_on("doxygen@1.9.3", type="build") + depends_on("doxygen@1.9.3:", type="build") depends_on("libelf") # Machine variants diff --git a/var/spack/repos/builtin/packages/hermes/package.py b/var/spack/repos/builtin/packages/hermes/package.py index 7072524c53a9a7..fa04336fc6cb2d 100644 --- a/var/spack/repos/builtin/packages/hermes/package.py +++ b/var/spack/repos/builtin/packages/hermes/package.py @@ -11,38 +11,102 @@ class Hermes(CMakePackage): I/O buffering system that aims to significantly accelerate I/O performance. """ - homepage = "http://www.cs.iit.edu/~scs/assets/projects/Hermes/Hermes.html" + homepage = "https://grc.iit.edu/research/projects/hermes" git = "https://github.com/HDFGroup/hermes.git" - maintainers("hyoklee") + maintainers("lukemartinlogan", "hyoklee") - license("GPL-2.0-only") + version("master", branch="master", submodules=True) - version("master", branch="master") + version( + "1.2.1", + url="https://github.com/HDFGroup/hermes/archive/refs/tags/v1.2.1.tar.gz", + sha256="d60ee5d6856dc1a1f389fb08f61252cc7736d1c38d3049043749640897fe3b6d", + ) version( "0.9.0-beta", url="https://github.com/HDFGroup/hermes/archive/refs/tags/v0.9.0-beta.tar.gz", sha256="abf258a52fa79729dfeb28559957abf8945f3ad37cadefb3bc685227c5f057a8", ) - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - + variant("adios", default=False, description="Build Adios tests") + variant("ares", default=False, description="Enable full libfabric install") + variant("compress", default=False, description="Enable compression") + variant("encrypt", default=False, description="Enable encryption") + variant("mpiio", default=True, description="Enable MPI I/O adapter") + # Builds with hermes@master. 1.2.1, we'd need to extract pybind11 source in external/pybind11: + variant("python", default=False, description="Build Python Wrapper", when="@master") + variant("stdio", default=True, description="Enable STDIO adapter") variant("vfd", default=False, description="Enable HDF5 VFD") + variant("zmq", default=False, description="Build ZeroMQ tests") + + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("pkgconfig", type="build") + depends_on("libelf") + + depends_on("hermes-shm@master+boost+cereal+mochi") + + depends_on("hermes-shm+adios", when="+adios") + depends_on("hermes-shm+ares", when="+ares") + depends_on("hermes-shm+compress", when="+compress") + depends_on("hermes-shm+encrypt", when="+encrypt") + depends_on("hermes-shm+mpiio", when="+mpiio") + depends_on("hermes-shm+vfd", when="+vfd") + depends_on("hermes-shm+zmq", when="+zmq") - depends_on("mochi-thallium~cereal@0.8:") - depends_on("catch2") - depends_on("glpk") - depends_on("glog@0.4.0:") - depends_on("mpi") - depends_on("hdf5@1.14.0:", when="+vfd") - depends_on("yaml-cpp") + depends_on("py-jarvis-util", type="test") + + depends_on("mpi", when="+mpiio") + conflicts("^[virtuals=mpi] nvhpc", when="+mpiio", msg="+mpio does not support nvhpc MPI") def cmake_args(self): - args = [ - self.define("HERMES_RPC_THALLIUM", True), - self.define("HERMES_INSTALL_TESTS", True), - self.define("BUILD_TESTING", True), - self.define_from_variant("HERMES_ENABLE_VFD", "vfd"), - ] + args = [] + if "+mpiio" in self.spec: + args.append("-DHERMES_ENABLE_MPIIO_ADAPTER=ON") + mpi_name = self.spec["mpi"].name + if mpi_name == "openmpi": + args.append("-DHERMES_OPENMPI=ON") + elif mpi_name == "mpich": + args.append("-DHERMES_MPICH=ON") + else: + raise InstallError("hermes+mpiio needs openmpi or mpich, got " + mpi_name) + if "+stdio" in self.spec: + args.append("-DHERMES_ENABLE_STDIO_ADAPTER=ON") + if "+vfd" in self.spec: + args.append("-DHERMES_ENABLE_VFD=ON") + if "+compress" in self.spec: + args.append(self.define("HERMES_ENABLE_COMPRESSION", "ON")) + if "+encrypt" in self.spec: + args.append(self.define("HERMES_ENABLE_ENCRYPTION", "ON")) + if "+adios" in self.spec: + args.append(self.define("HERMES_ENABLE_ADIOS", "ON")) + if "+python" in self.spec: + args.append(self.define("HERMES_ENABLE_PYTHON", "ON")) return args + + def set_include(self, env, path): + env.append_flags("CFLAGS", "-I{}".format(path)) + env.append_flags("CXXFLAGS", "-I{}".format(path)) + env.prepend_path("INCLUDE", "{}".format(path)) + env.prepend_path("CPATH", "{}".format(path)) + + def set_lib(self, env, path): + env.prepend_path("LIBRARY_PATH", path) + env.prepend_path("LD_LIBRARY_PATH", path) + env.append_flags("LDFLAGS", "-L{}".format(path)) + env.prepend_path("PYTHONPATH", "{}".format(path)) + + def set_flags(self, env): + self.set_include(env, "{}/include".format(self.prefix)) + self.set_include(env, "{}/include".format(self.prefix)) + self.set_lib(env, "{}/lib".format(self.prefix)) + self.set_lib(env, "{}/lib64".format(self.prefix)) + env.prepend_path("CMAKE_PREFIX_PATH", "{}/cmake".format(self.prefix)) + env.prepend_path("CMAKE_MODULE_PATH", "{}/cmake".format(self.prefix)) + + def setup_dependent_environment(self, spack_env, run_env, dependent_spec): + self.set_flags(spack_env) + + def setup_run_environment(self, env): + self.set_flags(env) diff --git a/var/spack/repos/builtin/packages/heyoka/package.py b/var/spack/repos/builtin/packages/heyoka/package.py index ee4ef5be62dbc4..a76e4b6a761555 100644 --- a/var/spack/repos/builtin/packages/heyoka/package.py +++ b/var/spack/repos/builtin/packages/heyoka/package.py @@ -18,6 +18,8 @@ class Heyoka(CMakePackage): # SPDX identifier of the project's license. license("MPL-2.0") + version("6.1.0", sha256="a0f01afb1fb4f93fdc41b2a8dfebf9f9ddd45b28b7b373c4ef9355aeda7107b4") + version("6.0.0", sha256="9cf56a6a29db5c72c5203af70d568aede78cb549baf1505b8abd04b888492895") version("5.1.0", sha256="dd405328ace718865ae2690384fbf5f7ee4d03ab6821b908e7d0ca0a02c35e14") version("5.0.0", sha256="e9a4b5683a08706addc1b448e232f1e269d78586859fe3f4d93d4c5eee3bc8ae") version("4.0.3", sha256="47608e785607782d896ae2347a29a143cdb7e5c602f48f5ea795cf682051dbee") @@ -57,8 +59,10 @@ class Heyoka(CMakePackage): # Required dependencies depends_on("llvm@13:17", when="@:4") depends_on("llvm@13:18", when="@5") + depends_on("llvm@15:19", when="@6") depends_on("boost@1.69: +serialization") - depends_on("fmt@9:10") + depends_on("fmt@9:10", when="@:5") + depends_on("fmt@9:11", when="@6") depends_on("spdlog") depends_on("intel-tbb@2021.4.0:") diff --git a/var/spack/repos/builtin/packages/hicup/package.py b/var/spack/repos/builtin/packages/hicup/package.py new file mode 100644 index 00000000000000..daf3f5da39a478 --- /dev/null +++ b/var/spack/repos/builtin/packages/hicup/package.py @@ -0,0 +1,55 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Hicup(Package): + """HiCUP: a bioinformatics pipeline for processing Hi-C data""" + + homepage = "https://stevenwingett.github.io/HiCUP" + url = "https://github.com/StevenWingett/HiCUP/archive/refs/tags/v0.9.2.tar.gz" + git = "https://github.com/StevenWingett/HiCUP.git" + + license("LGPL-3.0-only", checked_by="A-N-Other") + + version("0.9.2", sha256="7f9f65669d14fd2499afc4ac87735834b57b8f30b8e5785c4b406ec206cf9d2a") + version("0.8.3", sha256="e2381c2c45e0d79a6d1a2d9a8358b3efe8da727112d262cb0122132012266368") + version("combinations", branch="combinations") + + variant("bowtie2", description="Use bowtie2 aligner", default=True) + variant("bowtie", description="Use bowtie aligner", default=False) + + depends_on("pandoc", type="run") + depends_on("perl", type="run") + depends_on("perl-math-round", type="run") + depends_on("r", type="run") + depends_on("r-stringi@1.7.8:", type="run") + depends_on("r-markdown", type="run") + depends_on("r-tidyverse", type="run") + depends_on("r-plotly", type="run") + depends_on("samtools@0.1.18:", type="run") + # variant dependencies + depends_on("bowtie2", type="run", when="+bowtie2") + depends_on("bowtie", type="run", when="+bowtie") + + def edit(self, spec, prefix): + grep = which("grep") + chmod = which("chmod") + perl_files = grep("-lRr", "#!/usr/bin/perl", ".").splitlines() + for f in perl_files: + filter_file("/usr/bin/perl", self.spec["perl"].command.path, f, backup=False) + filter_file("$Bin", "$RealBin", f, backup=False) + chmod("+x", f) + + def install(self, spec, prefix): + mkdirp(prefix.bin) + install("hicup*", prefix.bin) + if self.spec.satisfies("@combinations"): + install("Misc/get_captured_reads", prefix.bin) + else: + install("Misc/hicup_capture", prefix.bin) + install("Conversion/hicup2*", prefix.bin) + install_tree("r_scripts", prefix.bin.r_scripts) diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py index f0235f1aea6deb..fa2c892f16bb16 100644 --- a/var/spack/repos/builtin/packages/hip/package.py +++ b/var/spack/repos/builtin/packages/hip/package.py @@ -6,6 +6,7 @@ import os import re +import spack.build_environment from spack.hooks.sbang import filter_shebang from spack.package import * from spack.util.prefix import Prefix @@ -638,14 +639,7 @@ def test_samples(self): test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir_old) elif self.spec.satisfies("@5.6:"): test_dir = join_path(self.test_suite.current_test_cache_dir, self.test_src_dir) - prefixes = ";".join( - [ - self.spec["hip"].prefix, - self.spec["llvm-amdgpu"].prefix, - self.spec["comgr"].prefix, - self.spec["hsa-rocr-dev"].prefix, - ] - ) + prefixes = ";".join(spack.build_environment.get_cmake_prefix_path(self)) cc_options = ["-DCMAKE_PREFIX_PATH=" + prefixes, ".."] amdclang_path = join_path(self.spec["llvm-amdgpu"].prefix, "bin", "amdclang++") diff --git a/var/spack/repos/builtin/packages/hipblas/package.py b/var/spack/repos/builtin/packages/hipblas/package.py index 1e928b27d5f5c2..91bbe38c6208b4 100644 --- a/var/spack/repos/builtin/packages/hipblas/package.py +++ b/var/spack/repos/builtin/packages/hipblas/package.py @@ -5,6 +5,7 @@ import re +import spack.variant from spack.package import * @@ -145,7 +146,5 @@ def cmake_args(self): return args def check(self): - exe = Executable( - join_path(self.builder.build_directory, "clients", "staging", "hipblas-test") - ) + exe = Executable(join_path(self.build_directory, "clients", "staging", "hipblas-test")) exe("--gtest_filter=-*known_bug*") diff --git a/var/spack/repos/builtin/packages/hipcub/package.py b/var/spack/repos/builtin/packages/hipcub/package.py index 5a85b8eb581387..06030e38a1c65b 100644 --- a/var/spack/repos/builtin/packages/hipcub/package.py +++ b/var/spack/repos/builtin/packages/hipcub/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/hipfft/package.py b/var/spack/repos/builtin/packages/hipfft/package.py index e70b3112032c79..ae07ec26704067 100644 --- a/var/spack/repos/builtin/packages/hipfft/package.py +++ b/var/spack/repos/builtin/packages/hipfft/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/hipify-clang/package.py b/var/spack/repos/builtin/packages/hipify-clang/package.py index 44c593938cbbbf..d8fcc5494d548e 100644 --- a/var/spack/repos/builtin/packages/hipify-clang/package.py +++ b/var/spack/repos/builtin/packages/hipify-clang/package.py @@ -39,7 +39,8 @@ class HipifyClang(CMakePackage): version("5.3.3", sha256="9d08e2896e52c10a0a189a5407567043f2510adc7bf618591c97a22a23699691") version("5.3.0", sha256="7674900d2b9319d91fa8f469252c5acb5bedf339142417cdcb64f33ee8482e00") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("asan", default=False, description="Build with address-sanitizer enabled or disabled") diff --git a/var/spack/repos/builtin/packages/hiprand/package.py b/var/spack/repos/builtin/packages/hiprand/package.py index 61b1702680ece5..d78282fcfc8a3e 100644 --- a/var/spack/repos/builtin/packages/hiprand/package.py +++ b/var/spack/repos/builtin/packages/hiprand/package.py @@ -5,6 +5,7 @@ import re +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/hipsolver/package.py b/var/spack/repos/builtin/packages/hipsolver/package.py index 82c35643e70c44..4470f7822687a2 100644 --- a/var/spack/repos/builtin/packages/hipsolver/package.py +++ b/var/spack/repos/builtin/packages/hipsolver/package.py @@ -6,6 +6,7 @@ import os import re +import spack.variant from spack.package import * @@ -29,6 +30,7 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage): version("develop", branch="develop") version("master", branch="master") + version("6.2.1", sha256="614e3c0bc11bfa84acd81d46db63f3852a750adaaec094b7701ab7b996cc8e93") version("6.2.0", sha256="637577a9cc38e4865894dbcd7eb35050e3de5d45e6db03472e836b318602a84d") version("6.1.2", sha256="406a8e5b82daae2fc03e0a738b5a054ade01bb41785cee4afb9e21c7ec91d492") version("6.1.1", sha256="01d4553458f417824807c069cacfc65d23f6cac79536158473b4356986c8fafd") @@ -101,6 +103,7 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage): "6.1.1", "6.1.2", "6.2.0", + "6.2.1", "master", "develop", ]: @@ -117,7 +120,7 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage): patch("0001-suite-sparse-include-path-6.1.1.patch", when="@6.1.1:") def check(self): - exe = join_path(self.builder.build_directory, "clients", "staging", "hipsolver-test") + exe = join_path(self.build_directory, "clients", "staging", "hipsolver-test") exe = which(exe) exe(["--gtest_filter=-*known_bug*"]) diff --git a/var/spack/repos/builtin/packages/hipsparse/package.py b/var/spack/repos/builtin/packages/hipsparse/package.py index 65a9a9a18f192e..0aa54869df2616 100644 --- a/var/spack/repos/builtin/packages/hipsparse/package.py +++ b/var/spack/repos/builtin/packages/hipsparse/package.py @@ -5,6 +5,7 @@ import re +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/hipsparselt/package.py b/var/spack/repos/builtin/packages/hipsparselt/package.py index e96305ba2cb74a..4c882cc264190a 100644 --- a/var/spack/repos/builtin/packages/hipsparselt/package.py +++ b/var/spack/repos/builtin/packages/hipsparselt/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/hiredis/package.py b/var/spack/repos/builtin/packages/hiredis/package.py index 39eb4aaa5b81f4..9d0a5ba955e0fe 100644 --- a/var/spack/repos/builtin/packages/hiredis/package.py +++ b/var/spack/repos/builtin/packages/hiredis/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.cmake +import spack.build_systems.makefile from spack.package import * diff --git a/var/spack/repos/builtin/packages/hpctoolkit/package.py b/var/spack/repos/builtin/packages/hpctoolkit/package.py index 548bfad92ccc45..34900192a0ab9e 100644 --- a/var/spack/repos/builtin/packages/hpctoolkit/package.py +++ b/var/spack/repos/builtin/packages/hpctoolkit/package.py @@ -9,6 +9,8 @@ import llnl.util.tty as tty +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * @@ -197,7 +199,8 @@ class Hpctoolkit(AutotoolsPackage, MesonPackage): depends_on("mpi", when="+mpi") depends_on("hpcviewer@2022.10:", type="run", when="@2022.10: +viewer") depends_on("hpcviewer", type="run", when="+viewer") - depends_on("python@3.10:", type=("build", "run"), when="+python") + depends_on("python@3.10:", type=("build", "run"), when="@:2023.08 +python") + depends_on("python@3.8:", type=("build", "run"), when="@2024.01: +python") with when("target=x86_64:"): depends_on("intel-xed+pic") diff --git a/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py b/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py index 579a7b01ba3262..41dd80a081d711 100644 --- a/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py +++ b/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py @@ -43,7 +43,8 @@ class HsaRocrDev(CMakePackage): version("5.3.3", sha256="aca88d90f169f35bd65ce3366b8670c7cdbe3abc0a2056eab805d0192cfd7130") version("5.3.0", sha256="b51dbedbe73390e0be748b92158839c82d7fa0e514fede60aa7696dc498facf0") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="Build shared or static library") variant("image", default=True, description="build with or without image support") diff --git a/var/spack/repos/builtin/packages/hyperfine/package.py b/var/spack/repos/builtin/packages/hyperfine/package.py index e862d07392c561..ce795592319b99 100644 --- a/var/spack/repos/builtin/packages/hyperfine/package.py +++ b/var/spack/repos/builtin/packages/hyperfine/package.py @@ -6,7 +6,7 @@ from spack.package import * -class Hyperfine(Package): +class Hyperfine(CargoPackage): """A command-line benchmarking tool.""" homepage = "https://github.com/sharkdp/hyperfine" @@ -16,14 +16,15 @@ class Hyperfine(Package): license("Apache-2.0 AND MIT") + version("1.18.0", sha256="fea7b92922117ed04b9c84bb9998026264346768804f66baa40743c5528bed6b") version("1.17.0", sha256="3dcd86c12e96ab5808d5c9f3cec0fcc04192a87833ff009063c4a491d5487b58") version("1.16.1", sha256="ffb3298945cbe2c068ca1a074946d55b9add83c9df720eda2ed7f3d94d7e65d2") version("1.14.0", sha256="59018c22242dd2ad2bd5fb4a34c0524948b7921d02aa79419ccec4c1ffd3da14") version("1.13.0", sha256="6e57c8e51962dd24a283ab46dde6fe306da772f4ef9bad86f8c89ac3a499c87e") version("1.12.0", sha256="2120870a97e68fa3426eac5646a071c9646e96d2309220e3c258bf588e496454") - depends_on("rust@1.46:") - - def install(self, spec, prefix): - cargo = which("cargo") - cargo("install", "--root", prefix, "--path", ".") + depends_on("rust@1.70:", when="@1.18.0:") + depends_on("rust@1.65:", when="@1.17.0:") + depends_on("rust@1.64:", when="@1.16.0:") + depends_on("rust@1.54:", when="@1.13.0:") + depends_on("rust@1.46:", when="@1.12.0:") diff --git a/var/spack/repos/builtin/packages/icon/package.py b/var/spack/repos/builtin/packages/icon/package.py index d5066545509456..e75d8d6b05d028 100644 --- a/var/spack/repos/builtin/packages/icon/package.py +++ b/var/spack/repos/builtin/packages/icon/package.py @@ -16,10 +16,12 @@ class Icon(AutotoolsPackage): homepage = "https://www.icon-model.org" url = "https://gitlab.dkrz.de/icon/icon-model/-/archive/icon-2024.01-public/icon-model-icon-2024.01-public.tar.gz" - maintainers("skosukhin") + maintainers("skosukhin", "Try2Code") license("BSD-3-Clause", checked_by="skosukhin") + version("2024.10", sha256="5c461c783eb577c97accd632b18140c3da91c1853d836ca2385f376532e9bad1") + version("2024.07", sha256="f53043ba1b36b8c19d0d2617ab601c3b9138b90f8ff8ca6db0fd079665eb5efa") version("2024.01-1", sha256="3e57608b7e1e3cf2f4cb318cfe2fdb39678bd53ca093955d99570bd6d7544184") version("2024.01", sha256="d9408fdd6a9ebf5990298e9a09c826e8c15b1e79b45be228f7a5670a3091a613") diff --git a/var/spack/repos/builtin/packages/icu4c/package.py b/var/spack/repos/builtin/packages/icu4c/package.py index 97f89cfc29c891..10189b1b8579c8 100644 --- a/var/spack/repos/builtin/packages/icu4c/package.py +++ b/var/spack/repos/builtin/packages/icu4c/package.py @@ -5,6 +5,8 @@ import pathlib +import spack.build_systems.autotools +import spack.build_systems.msbuild from spack.package import * diff --git a/var/spack/repos/builtin/packages/igraph/package.py b/var/spack/repos/builtin/packages/igraph/package.py index c741f316f1c00e..948b325322b6e1 100644 --- a/var/spack/repos/builtin/packages/igraph/package.py +++ b/var/spack/repos/builtin/packages/igraph/package.py @@ -14,6 +14,7 @@ class Igraph(CMakePackage, AutotoolsPackage): license("GPL-2.0-or-later") + version("0.10.15", sha256="03ba01db0544c4e32e51ab66f2356a034394533f61b4e14d769b9bbf5ad5e52c") version("0.10.13", sha256="c6dc44324f61f52c098bedb81f6a602365d39d692d5068ca4fc3734b2a15e64c") version("0.10.6", sha256="99bf91ee90febeeb9a201f3e0c1d323c09214f0b5f37a4290dc3b63f52839d6d") version("0.7.1", sha256="d978030e27369bf698f3816ab70aa9141e9baf81c56cc4f55efbe5489b46b0df") diff --git a/var/spack/repos/builtin/packages/infernal/package.py b/var/spack/repos/builtin/packages/infernal/package.py index 90ef8da99b46e3..d5dda6d05eeb36 100644 --- a/var/spack/repos/builtin/packages/infernal/package.py +++ b/var/spack/repos/builtin/packages/infernal/package.py @@ -15,6 +15,7 @@ class Infernal(AutotoolsPackage): homepage = "http://eddylab.org/infernal/" url = "http://eddylab.org/infernal/infernal-1.1.2.tar.gz" + version("1.1.5", sha256="ad4ddae02f924ca7c85bc8c4a79c9f875af8df96aeb726702fa985cbe752497f") version("1.1.4", sha256="f9493c7dee9fbf25f6405706818883d24b9f5e455121a0662c96c8f0307f95fc") version("1.1.3", sha256="3b98a6a3a0e7b01aa077a0caf1e958223c4d8f80a69a4eb602ca59a3475da85e") version("1.1.2", sha256="ac8c24f484205cfb7124c38d6dc638a28f2b9035b9433efec5dc753c7e84226b") @@ -25,8 +26,13 @@ class Infernal(AutotoolsPackage): depends_on("mpi", when="+mpi") + # v1.1.4 and below do not build on aarch64 # https://github.com/EddyRivasLab/infernal/issues/30 - conflicts("target=aarch64:", msg="infernal is only available for x86_64 and PowerPC") + conflicts( + "target=aarch64:", + when="@:1.1.4", + msg="infernal v1.1.4 and below are only available for x86_64 and PowerPC", + ) def configure_args(self): args = [] diff --git a/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py b/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py index 6523c0c1edd81e..354c01f17d174c 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py @@ -24,6 +24,12 @@ class IntelOneapiAdvisor(IntelOneApiLibraryPackageWithSdk): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/advisor.html" ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/fe95ae4a-3692-4e31-919d-3e7bdf5832f1/intel-advisor-2025.0.0.798_offline.sh", + sha256="bf85d4b0bd199a2babdff6b4bd3885ce569a3ad0e992b99b2e14dbb30af88cd4", + expand=False, + ) version( "2024.3.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e36c14f6-6142-44ff-b498-d4ff169cc8b0/l_oneapi_advisor_p_2024.3.0.43_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py index ae26272fa392fe..78f939f16ff47f 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py @@ -27,6 +27,12 @@ class IntelOneapiCcl(IntelOneApiLibraryPackage): depends_on("intel-oneapi-mpi") + version( + "2021.14.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/88a7a6db-816c-4cd5-993f-821729da5648/intel-oneccl-2021.14.0.506_offline.sh", + sha256="2a02ebf10e9b129df8538520b4b343c5ac30350ada6bd1f2bdc9b4ef0f46e165", + expand=False, + ) version( "2021.13.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4b4cf672-c1f9-4bac-97c4-f4ae10a0a020/l_oneapi_ccl_p_2021.13.1.32_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py index 9a965c2d50f56b..73c1e89f14b9a9 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py @@ -10,6 +10,36 @@ from spack.package import * versions = [ + { + "version": "2025.0.1", + "cpp": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4fd7c6b0-853f-458a-a8ec-421ab50a80a6/intel-dpcpp-cpp-compiler-2025.0.1.46_offline.sh", + "sha256": "1595397566b59a5c8f81e2c235b6bedd2405dc70309b5bf00ed75827d0f12449", + }, + "ftn": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7ba31291-8a27-426f-88d5-8c2d65316655/intel-fortran-compiler-2025.0.1.41_offline.sh", + "sha256": "aa54f019ad8db79f716f880c72784dc117d64e525e4c3b62717bd9d18a6c9060", + }, + }, + { + "version": "2025.0.0", + "cpp": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ac92f2bb-4818-4e53-a432-f8b34d502f23/intel-dpcpp-cpp-compiler-2025.0.0.740_offline.sh", + "sha256": "04fadf63789acee731895e631db63f65a98b8279db3d0f48bdf0d81e6103bdd8", + }, + "ftn": { + "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/69f79888-2d6c-4b20-999e-e99d72af68d4/intel-fortran-compiler-2025.0.0.723_offline.sh", + "sha256": "2be6d607ce84f35921228595b118fbc516d28587cbc4e6dcf6b7219e5cd1a9a9", + }, + "nvidia-plugin": { + "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=nvidia&version=2025.0.0&filters[]=12.0&filters[]=linux", + "sha256": "264a43d2e07c08eb31d6483fb1c289a6b148709e48e9a250efc1b1e9a527feb6", + }, + "amd-plugin": { + "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=amd&version=2025.0.0&filters[]=6.1.0&filters[]=linux", + "sha256": "2c5a147e82f0e995b9c0457b53967cc066d5741d675cb64cb9eba8e3c791a064", + }, + }, { "version": "2024.2.1", "cpp": { @@ -24,6 +54,10 @@ "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=nvidia&version=2024.2.1&filters[]=12.0&filters[]=linux", "sha256": "2c377027c650291ccd8267cbf75bd3d00c7b11998cc59d5668a02a0cbc2c015f", }, + "amd-plugin": { + "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=amd&version=2024.2.1&filters[]=6.1.0&filters[]=linux", + "sha256": "fbeb64f959f907cbf3469f4e154b2af6d8ff46fe4fc667c811e04f3872a13823", + }, }, { "version": "2024.2.0", @@ -39,6 +73,10 @@ "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=nvidia&version=2024.2.0&filters[]=12.0&filters[]=linux", "sha256": "0622df0054364b01e91e7ed72a33cb3281e281db5b0e86579f516b1cc5336b0f", }, + "amd-plugin": { + "url": "https://developer.codeplay.com/api/v1/products/download?product=oneapi&variant=amd&version=2024.2.0&filters[]=6.1.0&filters[]=linux", + "sha256": "d1e9d30fa92f3ef606f054d8cbd7c338b3e46f6a9f8472736e29e8ccd9e50688", + }, }, { "version": "2024.1.0", @@ -275,6 +313,9 @@ class IntelOneapiCompilers(IntelOneApiPackage, CompilerPackage): # Add the nvidia variant variant("nvidia", default=False, description="Install NVIDIA plugin for OneAPI") conflicts("@:2022.2.1", when="+nvidia", msg="Codeplay NVIDIA plugin requires newer release") + # Add the amd variant + variant("amd", default=False, description="Install AMD plugin for OneAPI") + conflicts("@:2022.2.1", when="+amd", msg="Codeplay AMD plugin requires newer release") # TODO: effectively gcc is a direct dependency of intel-oneapi-compilers, but we # cannot express that properly. For now, add conflicts for non-gcc compilers # instead. @@ -298,6 +339,14 @@ class IntelOneapiCompilers(IntelOneApiPackage, CompilerPackage): expand=False, **v["nvidia-plugin"], ) + if "amd-plugin" in v: + resource( + name="amd-plugin-installer", + placement="amd-plugin-installer", + when="@{0}".format(v["version"]), + expand=False, + **v["amd-plugin"], + ) @property def v2_layout_versions(self): @@ -363,12 +412,15 @@ def install(self, spec, prefix): if nvidia_script: if platform.system() == "Linux": bash = Executable("bash") - # Installer writes files in ~/intel set HOME so it goes to prefix - bash.add_default_env("HOME", prefix) - # Installer checks $XDG_RUNTIME_DIR/.bootstrapper_lock_file as well - bash.add_default_env("XDG_RUNTIME_DIR", join_path(self.stage.path, "runtime")) # For NVIDIA plugin installer bash(nvidia_script[0], "-y", "--install-dir", self.prefix) + if self.spec.satisfies("+amd"): + amd_script = find("amd-plugin-installer", "*") + if amd_script: + if platform.system() == "Linux": + bash = Executable("bash") + # For AMD plugin installer + bash(amd_script[0], "-y", "--install-dir", self.prefix) @run_after("install") def inject_rpaths(self): diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py index 97bddf49d5a74a..afebb68a8e0637 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py @@ -26,6 +26,12 @@ class IntelOneapiDal(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onedal.html" ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d9f2cdb2-93ec-4c78-a3fb-a59d27050c16/intel-onedal-2025.0.0.958_offline.sh", + sha256="be6c4130c29a77323515d1febcd55163f1db3e1cecdc8d477617cb8e560e4a3f", + expand=False, + ) version( "2024.7.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/ed2c397a-9a78-4466-9179-b39b7da07e83/l_daal_oneapi_p_2024.7.0.14_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py index 93a34ef4cd1f1c..9c7e5d09702d38 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py @@ -26,6 +26,18 @@ class IntelOneapiDnn(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onednn.html" ) + version( + "2025.0.1", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6cfa324b-1591-4c0b-b8d2-97c5b3b272a7/intel-onednn-2025.0.1.12_offline.sh", + sha256="3c81880a1fc40f2e68a1dcc05f220b5e22c1e9c78723a2e57770ed3c740800f2", + expand=False, + ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/87e117ab-039b-437d-9c80-dcd5c9e675d5/intel-onednn-2025.0.0.862_offline.sh", + sha256="267f63e8a3fe2a37c92873e53f3bf14a2cf680e888005cb6deb2014bc3be077c", + expand=False, + ) version( "2024.2.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7c850be0-b17d-4b7f-898d-3bc5fc36aa8d/l_onednn_p_2024.2.1.76_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py index 5acc3766782371..2d10ad17052ed3 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dpct/package.py @@ -19,6 +19,18 @@ class IntelOneapiDpct(IntelOneApiPackage): homepage = "https://www.intel.com/content/www/us/en/developer/tools/oneapi/dpc-compatibility-tool.html#gs.2p8km6" + version( + "2025.0.1", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6d1e0867-72b4-4670-8efc-3586894ad15f/intel-dpcpp-ct-2025.0.1.19_offline.sh", + sha256="b9e3bf879938a3e50cda73f555f54dff8769d8cb4c00746dbdba363af2a54410", + expand=False, + ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/de77e9b7-1fa2-4329-8777-2de569fee5d9/intel-dpcpp-ct-2025.0.0.912_offline.sh", + sha256="a675a0c6261c31c73ca8c37e9d6b4bd19018e9fcba72800c245ed61eb0fac9ee", + expand=False, + ) version( "2024.2.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e3b7b68d-65dd-4d03-9119-ce3ad448657e/l_dpcpp-ct_p_2024.2.1.64_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py index f631242b634a67..5f0877cf0f68df 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-dpl/package.py @@ -22,6 +22,12 @@ class IntelOneapiDpl(IntelOneApiLibraryPackage): homepage = "https://github.com/oneapi-src/oneDPL" + version( + "2022.7.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/85ad74ff-f4fa-45e2-b50d-67d637d42baa/intel-onedpl-2022.7.0.647_offline.sh", + sha256="8eecb6bd35ad414248fc03f9fd8ef4ec504d0ce44724b2c23d42f5f08e046a3f", + expand=False, + ) version( "2022.6.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/fe007d71-c49f-4cdd-8a95-5c8e29c5b19c/l_oneDPL_p_2022.6.1.15_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py index 95781edbb690e8..99b2fea2d05a47 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ipp/package.py @@ -27,6 +27,12 @@ class IntelOneapiIpp(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" ) + version( + "2022.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/acf220fa-326d-4f6e-9b63-f2da47b6f680/intel-ipp-2022.0.0.809_offline.sh", + sha256="e5e9be64ed79d9f3b2a11d9cdb573bea4a3a9a5cf08e5b7cc713947e622abbd6", + expand=False, + ) version( "2021.12.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/7e07b203-af56-4b52-b69d-97680826a8df/l_ipp_oneapi_p_2021.12.1.16_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py b/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py index bc988992c67423..ed40dbac3521a4 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-ippcp/package.py @@ -28,6 +28,12 @@ class IntelOneapiIppcp(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/ipp.html" ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4592da40-6f1c-4d4b-aa5b-0bb97ec66c92/intel-cryptography-primitives-library-2025.0.0.616_offline.sh", + sha256="a529b52ad8b2bdc2ad8372e11e8dac0df1daebaf8f5ade8a7ceb9b8669778c42", + expand=False, + ) version( "2021.12.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d82c537-2756-4000-a6cf-d7fedbfb9499/l_ippcp_oneapi_p_2021.12.1.14_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-itac/package.py b/var/spack/repos/builtin/packages/intel-oneapi-itac/package.py index 70125f5264d83e..7c33c0d4e875d2 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-itac/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-itac/package.py @@ -27,6 +27,12 @@ class IntelOneapiItac(IntelOneApiPackage): maintainers("rscohn2") + version( + "2022.4.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d75145c0-e3e2-4806-a2f8-8e46972ea2cb/l_itac_oneapi_p_2022.4.0.16_offline.sh", + sha256="746a51d91be17e5916ec74d6b3691bf58c2820cc9a2920f104e6e96383505bbe", + expand=False, + ) version( "2022.1.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/644eec67-83d9-4bdd-be0d-d90587ec72ed/l_itac_oneapi_p_2022.1.0.158_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py index 06c0252936da99..305f3395475293 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py @@ -25,11 +25,24 @@ class IntelOneapiMkl(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onemkl.html" ) + version( + "2025.0.1", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/246ea40e-5aa7-42a4-81fa-0c029dc8650f/intel-onemkl-2025.0.1.16_offline.sh", + sha256="bd86677aa17499c89ca7a3c3c83b73f0644147e4f1d2a218b45a7349cf582f4a", + expand=False, + ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/79153e0f-74d7-45af-b8c2-258941adf58a/intel-onemkl-2025.0.0.940_offline.sh", + sha256="c0fe8c43718c56858df96ad469b22d9d5e5c1aa4b872e34c6cbebfb17bd15b9c", + expand=False, + ) version( "2024.2.2", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/89a381f6-f85d-4dda-ae62-30d51470f53c/l_onemkl_p_2024.2.2.17_offline.sh", sha256="6b64ab95567bee53d6cf7e78f9f7b15695902fb9da0d20c29e638ad001b6b348", expand=False, + preferred=True, ) version( "2024.2.1", @@ -277,7 +290,7 @@ def _find_mkl_libs(self, shared): try: if self.spec.satisfies("+cluster ^mpi"): resolved_libs = resolved_libs + self.spec["mpi"].libs - except spack.error.NoLibrariesError: + except NoLibrariesError: pass if self.spec.satisfies("threads=openmp"): diff --git a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py index 023af78e4a056d..a20a1ac41cef4f 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py @@ -21,6 +21,12 @@ class IntelOneapiMpi(IntelOneApiLibraryPackage): homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/mpi-library.html" + version( + "2021.14.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4b14b28c-2ca6-4559-a0ca-8a157627e0c8/intel-mpi-2021.14.0.791_offline.sh", + sha256="81ea7aaf8039c134b4df40bab1423a269425d26bb90ac05f7decac39719d21f3", + expand=False, + ) version( "2021.13.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/364c798c-4cad-4c01-82b5-e1edd1b476af/l_mpi_oneapi_p_2021.13.1.769_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py b/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py index 622814ee7ef4e5..ae07f734bdb0c4 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-tbb/package.py @@ -22,6 +22,12 @@ class IntelOneapiTbb(IntelOneApiLibraryPackage): "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onetbb.html" ) + version( + "2022.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9d5f5bd1-6021-41f7-aa3e-36d44c4ac190/intel-onetbb-2022.0.0.403_offline.sh", + sha256="02077de6748422c1b5396afc3806addd9b1e832d9807126b54f22ed18853f86f", + expand=False, + ) version( "2021.13.1", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/b9aad7b8-0a4c-4f95-a100-e0e2921d5777/l_tbb_oneapi_p_2021.13.1.15_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py b/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py index 74700b30008346..1b5d94253505de 100644 --- a/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py +++ b/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py @@ -25,6 +25,18 @@ class IntelOneapiVtune(IntelOneApiLibraryPackageWithSdk): homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html" + version( + "2025.0.1", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/1277cea4-34b7-4221-bdbc-4f47a9a5592d/intel-vtune-2025.0.1.16_offline.sh", + sha256="e0917aab901018d2786df2fcfbaea2bf9c4ff7d5b7f9413e9f3d6860bb743f82", + expand=False, + ) + version( + "2025.0.0", + url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e7797b12-ce87-4df0-aa09-df4a272fc5d9/intel-vtune-2025.0.0.1130_offline.sh", + sha256="6742e5c6b1cd6e4efb794bde5d995ba738be1a991ac84678e0efca04fc080074", + expand=False, + ) version( "2024.3.0", url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d7e1fdb1-cfc7-40fb-bf46-3719e9372d67/l_oneapi_vtune_p_2024.3.0.31_offline.sh", diff --git a/var/spack/repos/builtin/packages/intel/package.py b/var/spack/repos/builtin/packages/intel/package.py index bdf53db9a810fb..51bae70edb1701 100644 --- a/var/spack/repos/builtin/packages/intel/package.py +++ b/var/spack/repos/builtin/packages/intel/package.py @@ -6,6 +6,7 @@ import llnl.util.tty as tty +import spack.compiler from spack.package import * @@ -240,7 +241,7 @@ def determine_version(cls, exe): match = version_regex.search(output) if match: return match.group(1) - except spack.util.executable.ProcessError: + except ProcessError: pass except Exception as e: tty.debug(str(e)) diff --git a/var/spack/repos/builtin/packages/ip/package.py b/var/spack/repos/builtin/packages/ip/package.py index 5a55f37b81fedc..d8e2371fb0c6b1 100644 --- a/var/spack/repos/builtin/packages/ip/package.py +++ b/var/spack/repos/builtin/packages/ip/package.py @@ -70,6 +70,7 @@ class Ip(CMakePackage): depends_on("sp precision=d", when="@4.1:4 precision=d") depends_on("sp precision=8", when="@4.1:4 precision=8") depends_on("lapack", when="@5.1:") + depends_on("cmake@3.18:", when="@5.1:") def cmake_args(self): args = [ @@ -121,5 +122,5 @@ def setup_run_environment(self, env): @when("@4:") def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/ipm/package.py b/var/spack/repos/builtin/packages/ipm/package.py index 9eb248ff526f40..cf0c732280c4d1 100644 --- a/var/spack/repos/builtin/packages/ipm/package.py +++ b/var/spack/repos/builtin/packages/ipm/package.py @@ -4,7 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) from spack.package import * -from spack.util.executable import Executable class Ipm(AutotoolsPackage): diff --git a/var/spack/repos/builtin/packages/isoquant/package.py b/var/spack/repos/builtin/packages/isoquant/package.py new file mode 100644 index 00000000000000..7655204ec5050b --- /dev/null +++ b/var/spack/repos/builtin/packages/isoquant/package.py @@ -0,0 +1,45 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Isoquant(Package): + """IsoQuant: Transcript discovery and quantification with long RNA reads""" + + # IsoQuant is a collection of Python scripts but does not install as a + # typical Python package, so this is a `Package` rather than a `PythonPackage` + # and we move things into place manually ... + + homepage = "https://ablab.github.io/IsoQuant/" + url = "https://github.com/ablab/IsoQuant/releases/download/v3.6.1/IsoQuant-3.6.1.tar.gz" + + license("GPL-2.0-only", checked_by="A-N-Other") + + version("3.6.1", sha256="6d16e47e9ca45f9a0d029940d5b84e03038d9ba3d640945e3a5087acfd7ed56d") + + depends_on("minimap2", type="run") + depends_on("samtools", type="run") + + depends_on("python@3.8:", type="run") + depends_on("py-gffutils@0.10.1:", type="run") + depends_on("py-biopython@1.76:", type="run") + depends_on("py-pandas@1.0.1:", type="run") + depends_on("py-pybedtools@0.8.1:", type="run") + depends_on("py-pysam@0.15:", type="run") + depends_on("py-packaging", type="run") + depends_on("py-pyfaidx@0.7:", type="run") + depends_on("py-pyyaml@5.4:", type="run") + depends_on("py-matplotlib@3.1.3:", type="run") + depends_on("py-numpy@1.18.1:", type="run") + depends_on("py-scipy@1.4.1:", type="run") + depends_on("py-seaborn@0.10.0:", type="run") + + def install(self, spec, prefix): + chmod = which("chmod") + chmod("+x", "isoquant.py", "visualize.py") + mkdirp(prefix.bin) + install("*.py", prefix.bin) + install_tree("src", prefix.bin.src) diff --git a/var/spack/repos/builtin/packages/itk/package.py b/var/spack/repos/builtin/packages/itk/package.py index dd3ac52049ef96..f5155a7cc549cb 100644 --- a/var/spack/repos/builtin/packages/itk/package.py +++ b/var/spack/repos/builtin/packages/itk/package.py @@ -63,7 +63,6 @@ class Itk(CMakePackage): depends_on("eigen") depends_on("expat") depends_on("fftw-api") - depends_on("googletest") depends_on("hdf5+cxx+hl") depends_on("jpeg") depends_on("libpng") @@ -79,8 +78,11 @@ class Itk(CMakePackage): def cmake_args(self): use_mkl = self.spec["fftw-api"].name in INTEL_MATH_LIBRARIES args = [ + self.define("BUILD_TESTING", False), self.define("BUILD_SHARED_LIBS", True), self.define("ITK_USE_SYSTEM_LIBRARIES", True), + # https://github.com/InsightSoftwareConsortium/ITK/issues/303 + self.define("ITK_USE_SYSTEM_GOOGLETEST", False), self.define("ITK_USE_MKL", use_mkl), self.define_from_variant("Module_ITKReview", "review"), self.define_from_variant("Module_RTK", "rtk"), diff --git a/var/spack/repos/builtin/packages/jsoncpp/package.py b/var/spack/repos/builtin/packages/jsoncpp/package.py index 6f401ec843908d..08ebaacd9b74c6 100644 --- a/var/spack/repos/builtin/packages/jsoncpp/package.py +++ b/var/spack/repos/builtin/packages/jsoncpp/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.cmake +import spack.build_systems.meson from spack.package import * diff --git a/var/spack/repos/builtin/packages/jsonnet/package.py b/var/spack/repos/builtin/packages/jsonnet/package.py index 37d7464653a084..24d5465b40947e 100644 --- a/var/spack/repos/builtin/packages/jsonnet/package.py +++ b/var/spack/repos/builtin/packages/jsonnet/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -40,5 +41,4 @@ def install_targets(self): @run_after("install") def python_install(self): if "+python" in self.spec: - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/julia/package.py b/var/spack/repos/builtin/packages/julia/package.py index 0508410e896f9f..2e489bd3a211ac 100644 --- a/var/spack/repos/builtin/packages/julia/package.py +++ b/var/spack/repos/builtin/packages/julia/package.py @@ -53,8 +53,9 @@ class Julia(MakefilePackage): version("1.6.5", sha256="b70ae299ff6b63a9e9cbf697147a48a31b4639476d1947cb52e4201e444f23cb") version("1.6.4", sha256="a4aa921030250f58015201e28204bff604a007defc5a379a608723e6bb1808d4") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") variant("precompile", default=True, description="Improve julia startup time") variant("openlibm", default=True, description="Use openlibm instead of libm") diff --git a/var/spack/repos/builtin/packages/justbuild/package.py b/var/spack/repos/builtin/packages/justbuild/package.py index 18c4939dd26651..1cf96c1bbb09ca 100644 --- a/var/spack/repos/builtin/packages/justbuild/package.py +++ b/var/spack/repos/builtin/packages/justbuild/package.py @@ -24,6 +24,7 @@ class Justbuild(Package): license("Apache-2.0") version("master", branch="master") + version("1.4.0", tag="v1.4.0", commit="562bddf70175a602f896397f41ee5f5e07e834eb") version("1.3.2", tag="v1.3.2", commit="27a56845398b07471f8185648a79a63f97851659") version("1.3.1", tag="v1.3.1", commit="b248838ed0f01bc5824caee3a555e7fd22d5ad10") version("1.3.0", tag="v1.3.0", commit="a7be2417f358049e6a0e28e01bc4020d8de2fdc5") diff --git a/var/spack/repos/builtin/packages/kibana/package.py b/var/spack/repos/builtin/packages/kibana/package.py index bbf8146ec2fb01..0245929e6b2cbf 100644 --- a/var/spack/repos/builtin/packages/kibana/package.py +++ b/var/spack/repos/builtin/packages/kibana/package.py @@ -13,9 +13,10 @@ class Kibana(Package): homepage = "https://www.elastic.co/products/kibana" url = "https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz" - version("6.4.0", sha256="df2056105a08c206a1adf9caed09a152a53429a0f1efc1ba3ccd616092d78aee") - - depends_on("cxx", type="build") # generated + version("8.15.2", sha256="b1f8082a4200867078170e92ad299e293ee514f5fdbb96b7a0d1de17a880d1eb") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2019-7609 + version("6.4.0", sha256="df2056105a08c206a1adf9caed09a152a53429a0f1efc1ba3ccd616092d78aee") depends_on("java", type="run") diff --git a/var/spack/repos/builtin/packages/kokkos-kernels/package.py b/var/spack/repos/builtin/packages/kokkos-kernels/package.py index f8dc26ad8969e3..af6abf4c11aca1 100644 --- a/var/spack/repos/builtin/packages/kokkos-kernels/package.py +++ b/var/spack/repos/builtin/packages/kokkos-kernels/package.py @@ -11,7 +11,7 @@ class KokkosKernels(CMakePackage, CudaPackage): homepage = "https://github.com/kokkos/kokkos-kernels" git = "https://github.com/kokkos/kokkos-kernels.git" - url = "https://github.com/kokkos/kokkos-kernels/archive/4.0.00.tar.gz" + url = "https://github.com/kokkos/kokkos-kernels/releases/download/4.4.01/kokkos-kernels-4.4.01.tar.gz" tags = ["e4s"] @@ -21,32 +21,111 @@ class KokkosKernels(CMakePackage, CudaPackage): license("Apache-2.0 WITH LLVM-exception") - # generate checksum for each release tarball with the following command - # openssl sha256 kokkos-kernels-x.y.z.tar.gz version("develop", branch="develop") version("master", branch="master") - version("4.4.01", sha256="9f741449f5ace5a7d8a5a81194ff2108e5525d16f08fcd9bb6c9bb4853d7720d") - version("4.4.00", sha256="6559871c091eb5bcff53bae5a0f04f2298971d1aa1b2c135bd5a2dae3f9376a2") - version("4.3.01", sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8") - version("4.3.00", sha256="03c3226ee97dbca4fa56fe69bc4eefa0673e23c37f2741943d9362424a63950e") - version("4.2.01", sha256="058052b3a40f5d4e447b7ded5c480f1b0d4aa78373b0bc7e43804d0447c34ca8") - version("4.2.00", sha256="c65df9a101dbbef2d8fd43c60c9ea85f2046bb3535fa1ad16e7c661ddd60401e") - version("4.1.00", sha256="d6a4108444ea226e43bf6a9c0dfc557f223a72b1142bf81aa78dd60e16ac2d56") - version("4.0.01", sha256="3f493fcb0244b26858ceb911be64092fbf7785616ad62c81abde0ea1ce86688a") - version("4.0.00", sha256="750079d0be1282d18ecd280e130ca303044ac399f1e5864488284b92f5ce0a86") - version("3.7.01", sha256="b2060f5894bdaf7f7d4793b90444fac260460cfa80595afcbcb955518864b446") - version("3.7.00", sha256="51bc6db3995392065656848e2b152cfd1c3a95a951ab18a3934278113d59f32b") - version("3.6.01", sha256="f000b156c8c0b80e85d38587907c11d9479aaf362408b812effeda5e22b24d0d") - version("3.6.00", sha256="2753643fd643b9eed9f7d370e0ff5fa957211d08a91aa75398e31cbc9e5eb0a5") - version("3.5.00", sha256="a03a41a047d95f9f07cd1e1d30692afdb75b5c705ef524e19c1d02fe60ccf8d1") - version("3.4.01", sha256="f504aa4afbffb58fa7c4430d0fdb8fd5690a268823fa15eb0b7d58dab9d351e6") - version("3.4.00", sha256="07ba11869e686cb0d47272d1ef494ccfbcdef3f93ff1c8b64ab9e136a53a227a") - version("3.3.01", sha256="0f21fe6b5a8b6ae7738290e293aa990719aefe88b32f84617436bfd6074a8f77") - version("3.3.00", sha256="8d7f78815301afb90ddba7914dce5b718cea792ac0c7350d2f8d00bd2ef1cece") - version("3.2.01", sha256="c486e5cac19e354a517498c362838619435734d64b44f44ce909b0531c21d95c") - version("3.2.00", sha256="8ac20ee28ae7813ce1bda461918800ad57fdbac2af86ef5d1ba74e83e10956de") - version("3.1.00", sha256="27fea241ae92f41bd5b070b1a590ba3a56a06aca750207a98bea2f64a4a40c89") - version("3.0.00", sha256="e4b832aed3f8e785de24298f312af71217a26067aea2de51531e8c1e597ef0e6") + version("4.4.01", sha256="4a32bc8330e0113856bdf181df94cc4f9902e3cebb5dc7cea5948f30df03bfa1") + version("4.4.00", sha256="66d5c3f728a8c7689159c97006996164ea00fd39702476220e3dbf2a05c49e8f") + + version( + "4.3.01", + sha256="749553a6ea715ba1e56fa0b13b42866bb9880dba7a94e343eadf40d08c68fab8", + url="https://github.com/kokkos/kokkos-kernels/archive/4.3.01.tar.gz", + ) + version( + "4.3.00", + sha256="03c3226ee97dbca4fa56fe69bc4eefa0673e23c37f2741943d9362424a63950e", + url="https://github.com/kokkos/kokkos-kernels/archive/4.3.00.tar.gz", + ) + version( + "4.2.01", + sha256="058052b3a40f5d4e447b7ded5c480f1b0d4aa78373b0bc7e43804d0447c34ca8", + url="https://github.com/kokkos/kokkos-kernels/archive/4.2.01.tar.gz", + ) + version( + "4.2.00", + sha256="c65df9a101dbbef2d8fd43c60c9ea85f2046bb3535fa1ad16e7c661ddd60401e", + url="https://github.com/kokkos/kokkos-kernels/archive/4.2.00.tar.gz", + ) + version( + "4.1.00", + sha256="d6a4108444ea226e43bf6a9c0dfc557f223a72b1142bf81aa78dd60e16ac2d56", + url="https://github.com/kokkos/kokkos-kernels/archive/4.1.00.tar.gz", + ) + version( + "4.0.01", + sha256="3f493fcb0244b26858ceb911be64092fbf7785616ad62c81abde0ea1ce86688a", + url="https://github.com/kokkos/kokkos-kernels/archive/4.0.01.tar.gz", + ) + version( + "4.0.00", + sha256="750079d0be1282d18ecd280e130ca303044ac399f1e5864488284b92f5ce0a86", + url="https://github.com/kokkos/kokkos-kernels/archive/4.0.00.tar.gz", + ) + version( + "3.7.01", + sha256="b2060f5894bdaf7f7d4793b90444fac260460cfa80595afcbcb955518864b446", + url="https://github.com/kokkos/kokkos-kernels/archive/3.7.01.tar.gz", + ) + version( + "3.7.00", + sha256="51bc6db3995392065656848e2b152cfd1c3a95a951ab18a3934278113d59f32b", + url="https://github.com/kokkos/kokkos-kernels/archive/3.7.00.tar.gz", + ) + version( + "3.6.01", + sha256="f000b156c8c0b80e85d38587907c11d9479aaf362408b812effeda5e22b24d0d", + url="https://github.com/kokkos/kokkos-kernels/archive/3.6.01.tar.gz", + ) + version( + "3.6.00", + sha256="2753643fd643b9eed9f7d370e0ff5fa957211d08a91aa75398e31cbc9e5eb0a5", + url="https://github.com/kokkos/kokkos-kernels/archive/3.6.00.tar.gz", + ) + version( + "3.5.00", + sha256="a03a41a047d95f9f07cd1e1d30692afdb75b5c705ef524e19c1d02fe60ccf8d1", + url="https://github.com/kokkos/kokkos-kernels/archive/3.5.00.tar.gz", + ) + version( + "3.4.01", + sha256="f504aa4afbffb58fa7c4430d0fdb8fd5690a268823fa15eb0b7d58dab9d351e6", + url="https://github.com/kokkos/kokkos-kernels/archive/3.4.01.tar.gz", + ) + version( + "3.4.00", + sha256="07ba11869e686cb0d47272d1ef494ccfbcdef3f93ff1c8b64ab9e136a53a227a", + url="https://github.com/kokkos/kokkos-kernels/archive/3.4.00.tar.gz", + ) + version( + "3.3.01", + sha256="0f21fe6b5a8b6ae7738290e293aa990719aefe88b32f84617436bfd6074a8f77", + url="https://github.com/kokkos/kokkos-kernels/archive/3.3.01.tar.gz", + ) + version( + "3.3.00", + sha256="8d7f78815301afb90ddba7914dce5b718cea792ac0c7350d2f8d00bd2ef1cece", + url="https://github.com/kokkos/kokkos-kernels/archive/3.3.00.tar.gz", + ) + version( + "3.2.01", + sha256="c486e5cac19e354a517498c362838619435734d64b44f44ce909b0531c21d95c", + url="https://github.com/kokkos/kokkos-kernels/archive/3.2.01.tar.gz", + ) + version( + "3.2.00", + sha256="8ac20ee28ae7813ce1bda461918800ad57fdbac2af86ef5d1ba74e83e10956de", + url="https://github.com/kokkos/kokkos-kernels/archive/3.2.00.tar.gz", + ) + version( + "3.1.00", + sha256="27fea241ae92f41bd5b070b1a590ba3a56a06aca750207a98bea2f64a4a40c89", + url="https://github.com/kokkos/kokkos-kernels/archive/3.1.00.tar.gz", + ) + version( + "3.0.00", + sha256="e4b832aed3f8e785de24298f312af71217a26067aea2de51531e8c1e597ef0e6", + url="https://github.com/kokkos/kokkos-kernels/archive/3.0.00.tar.gz", + ) depends_on("cxx", type="build") # generated diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py index fe9989afb5f8d6..6492906ad76aa2 100644 --- a/var/spack/repos/builtin/packages/kokkos/package.py +++ b/var/spack/repos/builtin/packages/kokkos/package.py @@ -6,6 +6,7 @@ import llnl.util.lang as lang +import spack.build_systems.cmake from spack.package import * @@ -15,7 +16,7 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): homepage = "https://github.com/kokkos/kokkos" git = "https://github.com/kokkos/kokkos.git" - url = "https://github.com/kokkos/kokkos/archive/3.6.00.tar.gz" + url = "https://github.com/kokkos/kokkos/releases/download/4.4.01/kokkos-4.4.01.tar.gz" tags = ["e4s"] @@ -27,31 +28,122 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): version("master", branch="master") version("develop", branch="develop") - version("4.4.01", sha256="3f7096d17eaaa4004c7497ac082bf1ae3ff47b5104149e54af021a89414c3682") - version("4.4.00", sha256="c638980cb62c34969b8c85b73e68327a2cb64f763dd33e5241f5fd437170205a") - version("4.3.01", sha256="5998b7c732664d6b5e219ccc445cd3077f0e3968b4be480c29cd194b4f45ec70") - version("4.3.00", sha256="53cf30d3b44dade51d48efefdaee7a6cf109a091b702a443a2eda63992e5fe0d") - version("4.2.01", sha256="cbabbabba021d00923fb357d2e1b905dda3838bd03c885a6752062fe03c67964") - version("4.2.00", sha256="ac08765848a0a6ac584a0a46cd12803f66dd2a2c2db99bb17c06ffc589bf5be8") - version("4.1.00", sha256="cf725ea34ba766fdaf29c884cfe2daacfdc6dc2d6af84042d1c78d0f16866275") - version("4.0.01", sha256="bb942de8afdd519fd6d5d3974706bfc22b6585a62dd565c12e53bdb82cd154f0") - version("4.0.00", sha256="1829a423883d4b44223c7c3a53d3c51671145aad57d7d23e6a1a4bebf710dcf6") - version("3.7.02", sha256="5024979f06bc8da2fb696252a66297f3e0e67098595a0cc7345312b3b4aa0f54") - version("3.7.01", sha256="0481b24893d1bcc808ec68af1d56ef09b82a1138a1226d6be27c3b3c3da65ceb") - version("3.7.00", sha256="62e3f9f51c798998f6493ed36463f66e49723966286ef70a9dcba329b8443040") - version("3.6.01", sha256="1b80a70c5d641da9fefbbb652e857d7c7a76a0ebad1f477c253853e209deb8db") - version("3.6.00", sha256="53b11fffb53c5d48da5418893ac7bc814ca2fde9c86074bdfeaa967598c918f4") - version("3.5.00", sha256="748f06aed63b1e77e3653cd2f896ef0d2c64cb2e2d896d9e5a57fec3ff0244ff") - version("3.4.01", sha256="146d5e233228e75ef59ca497e8f5872d9b272cb93e8e9cdfe05ad34a23f483d1") - version("3.4.00", sha256="2e4438f9e4767442d8a55e65d000cc9cde92277d415ab4913a96cd3ad901d317") - version("3.3.01", sha256="4919b00bb7b6eb80f6c335a32f98ebe262229d82e72d3bae6dd91aaf3d234c37") - version("3.3.00", sha256="170b9deaa1943185e928f8fcb812cd4593a07ed7d220607467e8f0419e147295") - version("3.2.01", sha256="9e27a3d8f81559845e190d60f277d84d6f558412a3df3301d9545e91373bcaf1") - version("3.2.00", sha256="05e1b4dd1ef383ca56fe577913e1ff31614764e65de6d6f2a163b2bddb60b3e9") - version("3.1.01", sha256="ff5024ebe8570887d00246e2793667e0d796b08c77a8227fe271127d36eec9dd") - version("3.1.00", sha256="b935c9b780e7330bcb80809992caa2b66fd387e3a1c261c955d622dae857d878") - version("3.0.00", sha256="c00613d0194a4fbd0726719bbed8b0404ed06275f310189b3493f5739042a92b") + version("4.4.01", sha256="3413f0cb39912128d91424ebd92e8832009e7eeaf6fa8da58e99b0d37860d972") + version("4.4.00", sha256="0b46372f38c48aa088411ac1b7c173a5c90f0fdb69ab40271827688fc134f58b") + + version( + "4.3.01", + sha256="5998b7c732664d6b5e219ccc445cd3077f0e3968b4be480c29cd194b4f45ec70", + url="https://github.com/kokkos/kokkos/archive/4.3.01.tar.gz", + ) + version( + "4.3.00", + sha256="53cf30d3b44dade51d48efefdaee7a6cf109a091b702a443a2eda63992e5fe0d", + url="https://github.com/kokkos/kokkos/archive/4.3.00.tar.gz", + ) + version( + "4.2.01", + sha256="cbabbabba021d00923fb357d2e1b905dda3838bd03c885a6752062fe03c67964", + url="https://github.com/kokkos/kokkos/archive/4.2.01.tar.gz", + ) + version( + "4.2.00", + sha256="ac08765848a0a6ac584a0a46cd12803f66dd2a2c2db99bb17c06ffc589bf5be8", + url="https://github.com/kokkos/kokkos/archive/4.2.00.tar.gz", + ) + version( + "4.1.00", + sha256="cf725ea34ba766fdaf29c884cfe2daacfdc6dc2d6af84042d1c78d0f16866275", + url="https://github.com/kokkos/kokkos/archive/4.1.00.tar.gz", + ) + version( + "4.0.01", + sha256="bb942de8afdd519fd6d5d3974706bfc22b6585a62dd565c12e53bdb82cd154f0", + url="https://github.com/kokkos/kokkos/archive/4.0.01.tar.gz", + ) + version( + "4.0.00", + sha256="1829a423883d4b44223c7c3a53d3c51671145aad57d7d23e6a1a4bebf710dcf6", + url="https://github.com/kokkos/kokkos/archive/4.0.00.tar.gz", + ) + version( + "3.7.02", + sha256="5024979f06bc8da2fb696252a66297f3e0e67098595a0cc7345312b3b4aa0f54", + url="https://github.com/kokkos/kokkos/archive/3.7.02.tar.gz", + ) + version( + "3.7.01", + sha256="0481b24893d1bcc808ec68af1d56ef09b82a1138a1226d6be27c3b3c3da65ceb", + url="https://github.com/kokkos/kokkos/archive/3.7.01.tar.gz", + ) + version( + "3.7.00", + sha256="62e3f9f51c798998f6493ed36463f66e49723966286ef70a9dcba329b8443040", + url="https://github.com/kokkos/kokkos/archive/3.7.00.tar.gz", + ) + version( + "3.6.01", + sha256="1b80a70c5d641da9fefbbb652e857d7c7a76a0ebad1f477c253853e209deb8db", + url="https://github.com/kokkos/kokkos/archive/3.6.01.tar.gz", + ) + version( + "3.6.00", + sha256="53b11fffb53c5d48da5418893ac7bc814ca2fde9c86074bdfeaa967598c918f4", + url="https://github.com/kokkos/kokkos/archive/3.6.00.tar.gz", + ) + version( + "3.5.00", + sha256="748f06aed63b1e77e3653cd2f896ef0d2c64cb2e2d896d9e5a57fec3ff0244ff", + url="https://github.com/kokkos/kokkos/archive/3.5.00.tar.gz", + ) + version( + "3.4.01", + sha256="146d5e233228e75ef59ca497e8f5872d9b272cb93e8e9cdfe05ad34a23f483d1", + url="https://github.com/kokkos/kokkos/archive/3.4.01.tar.gz", + ) + version( + "3.4.00", + sha256="2e4438f9e4767442d8a55e65d000cc9cde92277d415ab4913a96cd3ad901d317", + url="https://github.com/kokkos/kokkos/archive/3.4.00.tar.gz", + ) + version( + "3.3.01", + sha256="4919b00bb7b6eb80f6c335a32f98ebe262229d82e72d3bae6dd91aaf3d234c37", + url="https://github.com/kokkos/kokkos/archive/3.3.01.tar.gz", + ) + version( + "3.3.00", + sha256="170b9deaa1943185e928f8fcb812cd4593a07ed7d220607467e8f0419e147295", + url="https://github.com/kokkos/kokkos/archive/3.3.00.tar.gz", + ) + version( + "3.2.01", + sha256="9e27a3d8f81559845e190d60f277d84d6f558412a3df3301d9545e91373bcaf1", + url="https://github.com/kokkos/kokkos/archive/3.2.01.tar.gz", + ) + version( + "3.2.00", + sha256="05e1b4dd1ef383ca56fe577913e1ff31614764e65de6d6f2a163b2bddb60b3e9", + url="https://github.com/kokkos/kokkos/archive/3.2.00.tar.gz", + ) + version( + "3.1.01", + sha256="ff5024ebe8570887d00246e2793667e0d796b08c77a8227fe271127d36eec9dd", + url="https://github.com/kokkos/kokkos/archive/3.1.01.tar.gz", + ) + version( + "3.1.00", + sha256="b935c9b780e7330bcb80809992caa2b66fd387e3a1c261c955d622dae857d878", + url="https://github.com/kokkos/kokkos/archive/3.1.00.tar.gz", + ) + version( + "3.0.00", + sha256="c00613d0194a4fbd0726719bbed8b0404ed06275f310189b3493f5739042a92b", + url="https://github.com/kokkos/kokkos/archive/3.0.00.tar.gz", + ) + + depends_on("c", type="build") depends_on("cxx", type="build") # Kokkos requires a C++ compiler depends_on("cmake@3.16:", type="build") @@ -69,6 +161,10 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): conflicts("+rocm", when="@:3.0") conflicts("+sycl", when="@:3.3") conflicts("+openmptarget", when="@:3.5") + conflicts( + "".join([f"~{d}" for d in devices_variants]), + msg="Kokkos requires at least one active backend", + ) # https://github.com/spack/spack/issues/29052 conflicts("@:3.5 +sycl", when="%oneapi@2022:") @@ -83,6 +179,7 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): options_variants = { "aggressive_vectorization": [False, "Aggressively vectorize loops"], "compiler_warnings": [False, "Print all compiler warnings"], + "complex_align": [True, "Align complex numbers"], "cuda_constexpr": [False, "Activate experimental constexpr features"], "cuda_lambda": [False, "Activate experimental lambda features"], "cuda_ldg_intrinsic": [False, "Use CUDA LDG intrinsics"], @@ -212,10 +309,17 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): depends_on(tpl, when="+%s" % tpl) variant("wrapper", default=False, description="Use nvcc-wrapper for CUDA build") + variant( + "cmake_lang", + default=False, + description="Use CMake language support for CUDA/HIP", + when="@3.6:", + ) depends_on("kokkos-nvcc-wrapper", when="+wrapper") depends_on("kokkos-nvcc-wrapper@develop", when="@develop+wrapper") depends_on("kokkos-nvcc-wrapper@master", when="@master+wrapper") conflicts("+wrapper", when="~cuda") + conflicts("+wrapper", when="+cmake_lang") cxxstds = ["11", "14", "17", "20"] variant("cxxstd", default="17", values=cxxstds, multi=False, description="C++ standard") @@ -227,6 +331,10 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage): conflicts("+cuda", when="cxxstd=17 ^cuda@:10") conflicts("+cuda", when="cxxstd=20 ^cuda@:11") + # Expose a way to disable CudaMallocAsync that can cause problems + # with some MPI such as cray-mpich + variant("alloc_async", default=False, description="Use CudaMallocAsync", when="@4.2: +cuda") + # SYCL and OpenMPTarget require C++17 or higher for cxxstdver in cxxstds[: cxxstds.index("17")]: conflicts( @@ -292,7 +400,7 @@ def append_args(self, cmake_prefix, cmake_options, spack_options): variant_to_cmake_option = {"rocm": "hip"} for variant_name in cmake_options: opt = variant_to_cmake_option.get(variant_name, variant_name) - optname = "Kokkos_%s_%s" % (cmake_prefix, opt.upper()) + optname = f"Kokkos_{cmake_prefix}_{opt.upper()}" # Explicitly enable or disable option = self.define_from_variant(optname, variant_name) if option: @@ -309,14 +417,17 @@ def cmake_args(self): from_variant = self.define_from_variant if spec.satisfies("~wrapper+cuda") and not ( - spec.satisfies("%clang") or spec.satisfies("%cce") + spec.satisfies("%clang") or spec.satisfies("%cce") or spec.satisfies("+cmake_lang") ): - raise InstallError("Kokkos requires +wrapper when using +cuda" "without clang") + raise InstallError( + "Kokkos requires +wrapper when using +cuda without %clang, %cce or +cmake_lang" + ) options = [ from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), from_variant("CMAKE_CXX_STANDARD", "cxxstd"), from_variant("BUILD_SHARED_LIBS", "shared"), + from_variant("Kokkos_ENABLE_COMPILE_AS_CMAKE_LANGUAGE", "cmake_lang"), ] spack_microarches = [] @@ -360,23 +471,34 @@ def cmake_args(self): if spec.variants[tpl].value: options.append(self.define(tpl + "_DIR", spec[tpl].prefix)) - if self.spec.satisfies("+rocm"): - options.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc)) - options.append(self.define("Kokkos_ENABLE_ROCTHRUST", True)) - elif self.spec.satisfies("+wrapper"): + if self.spec.satisfies("+wrapper"): options.append( self.define("CMAKE_CXX_COMPILER", self.spec["kokkos-nvcc-wrapper"].kokkos_cxx) ) + elif "+rocm" in self.spec: + if "+cmake_lang" in self.spec: + options.append( + self.define( + "CMAKE_HIP_COMPILER", + join_path(self.spec["llvm-amdgpu"].prefix.bin, "amdclang++"), + ) + ) + options.append(from_variant("CMAKE_HIP_STANDARD", "cxxstd")) + else: + options.append(self.define("CMAKE_CXX_COMPILER", self.spec["hip"].hipcc)) + options.append(self.define("Kokkos_ENABLE_ROCTHRUST", True)) + elif "+cuda" in self.spec and "+cmake_lang" in self.spec: + options.append( + self.define("CMAKE_CUDA_COMPILER", join_path(self.spec["cuda"].prefix.bin, "nvcc")) + ) + options.append(from_variant("CMAKE_CUDA_STANDARD", "cxxstd")) if self.spec.satisfies("%oneapi") or self.spec.satisfies("%intel"): options.append(self.define("CMAKE_CXX_FLAGS", "-fp-model=precise")) - # Kokkos 4.2.00+ changed the default to Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC=on - # which breaks GPU-aware with Cray-MPICH - # See https://github.com/kokkos/kokkos/pull/6402 - # TODO: disable this once Cray-MPICH is fixed - if self.spec.satisfies("@4.2.00:") and self.spec.satisfies("^[virtuals=mpi] cray-mpich"): - options.append(self.define("Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC", False)) + options.append( + self.define_from_variant("Kokkos_ENABLE_IMPL_CUDA_MALLOC_ASYNC", "alloc_async") + ) # Remove duplicate options return lang.dedupe(options) @@ -414,7 +536,7 @@ def test_run(self): cmake = self.spec["cmake"].command cmake_args = ["-DEXECUTABLE_OUTPUT_PATH=" + cmake_path] if self.spec.satisfies("+rocm"): - prefix_paths = ";".join(spack.build_environment.get_cmake_prefix_path(self)) + prefix_paths = ";".join(spack.build_systems.cmake.get_cmake_prefix_path(self)) cmake_args.append("-DCMAKE_PREFIX_PATH={0}".format(prefix_paths)) cmake(cmake_path, *cmake_args) diff --git a/var/spack/repos/builtin/packages/krb5/package.py b/var/spack/repos/builtin/packages/krb5/package.py index cbe034fcae0ecc..af52da5396c193 100644 --- a/var/spack/repos/builtin/packages/krb5/package.py +++ b/var/spack/repos/builtin/packages/krb5/package.py @@ -106,7 +106,7 @@ def patch(self): def configure_args(self): spec = self.spec - args = ["--without-system-verto"] + args = ["--without-system-verto", "--without-keyutils"] if spec.satisfies("~shared"): args.append("--enable-static") diff --git a/var/spack/repos/builtin/packages/kvtree/package.py b/var/spack/repos/builtin/packages/kvtree/package.py index 68328da1975431..86126ec57abfe2 100644 --- a/var/spack/repos/builtin/packages/kvtree/package.py +++ b/var/spack/repos/builtin/packages/kvtree/package.py @@ -20,6 +20,7 @@ class Kvtree(CMakePackage): license("MIT") version("main", branch="main") + version("1.5.0", sha256="9617948bdb905615aeb0604d4998d92eb970ecd5c9c851116266972462f0b350") version("1.4.0", sha256="48a36fd578f0d1198a9c1512d6446c830b915ace5bb97539eec615495bee5a51") version("1.3.0", sha256="8281e075772d3534183c46133553d5765455d79ed98a895743663db891755ca9") version("1.2.0", sha256="ecd4b8bc479c33ab4f23fc764445a3bb353a1d15c208d011f5577a32c182477f") @@ -28,7 +29,8 @@ class Kvtree(CMakePackage): version("1.0.3", sha256="c742cdb1241ef4cb13767019204d5350a3c4383384bed9fb66680b93ff44b0d4") version("1.0.2", sha256="56fb5b747758c24a907a8380e8748d296900d94de9547bc15f6b427ac4ae2ec4") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("zlib-api", type="link") diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py index 7486b5272196ef..6b8287b49ce2d4 100644 --- a/var/spack/repos/builtin/packages/lammps/package.py +++ b/var/spack/repos/builtin/packages/lammps/package.py @@ -6,6 +6,7 @@ import os from spack.build_environment import optimization_flags +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -30,10 +31,15 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage, PythonExtension): # marked deprecated=True # * patch releases older than a stable release should be marked deprecated=True version("develop", branch="develop") + version( + "20240829.1", + sha256="3aea41869aa2fb8120fc4814cab645686f969e2eb7c66aa5587e500597d482dc", + preferred=True, + ) version( "20240829", sha256="6112e0cc352c3140a4874c7f74db3c0c8e30134024164509ecf3772b305fde2e", - preferred=True, + deprecated=True, ) version( "20240627", @@ -403,6 +409,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage, PythonExtension): depends_on("fortran", type="build", when=f"+{fc_pkg}") stable_versions = { + "20240829.1", "20240829", "20230802.4", "20230802.3", @@ -635,6 +642,13 @@ def url_for_version(self, version): values=("kiss", "fftw3", "mkl"), multi=False, ) + variant( + "heffte", + default=False, + when="+kspace @20240207:", + description="Use heffte as distubuted FFT engine", + ) + variant( "fft_kokkos", default="fftw3", @@ -653,15 +667,18 @@ def url_for_version(self, version): ) variant("tools", default=False, description="Build LAMMPS tools (msi2lmp, binary2txt, chain)") - depends_on("cmake@3.16:", when="@20231121:") + depends_on("cmake@3.16:", when="@20231121:", type="build") depends_on("mpi", when="+mpi") depends_on("mpi", when="+mpiio") depends_on("fftw-api@3", when="+kspace fft=fftw3") + depends_on("heffte", when="+heffte") + depends_on("heffte+fftw", when="+heffte fft=fftw3") + depends_on("heffte+mkl", when="+heffte fft=mkl") depends_on("mkl", when="+kspace fft=mkl") depends_on("hipfft", when="+kokkos+kspace+rocm fft_kokkos=hipfft") depends_on("fftw-api@3", when="+kokkos+kspace fft_kokkos=fftw3") depends_on("mkl", when="+kokkos+kspace fft_kokkos=mkl") - depends_on("voropp+pic", when="+voronoi") + depends_on("voropp", when="+voronoi") depends_on("netcdf-c+mpi", when="+user-netcdf") depends_on("netcdf-c+mpi", when="+netcdf") depends_on("blas", when="+user-atc") @@ -884,11 +901,16 @@ def cmake_args(self): "-O3 -fno-math-errno -fno-unroll-loops " "-fveclib=AMDLIBM -muse-unaligned-vector-move" ) - if spec.satisfies("%aocc@4.1:"): + if spec.satisfies("%aocc@4.1:4.2"): cxx_flags += ( " -mllvm -force-gather-overhead-cost=50" " -mllvm -enable-masked-gather-sequence=false" ) + elif spec.satisfies("%aocc@5.0:"): + cxx_flags += " -mllvm -enable-aggressive-gather" + if spec.target >= "zen5": + cxx_flags += " -fenable-restrict-based-lv" + # add -fopenmp-simd if OpenMP not already turned on if spec.satisfies("~openmp"): cxx_flags += " -fopenmp-simd" @@ -916,6 +938,7 @@ def cmake_args(self): if spec.satisfies("+kspace"): args.append(self.define_from_variant("FFT", "fft")) + args.append(self.define_from_variant("FFT_USE_HEFFTE", "heffte")) if spec.satisfies("fft=fftw3 ^armpl-gcc") or spec.satisfies("fft=fftw3 ^acfl"): args.append(self.define("FFTW3_LIBRARY", self.spec["fftw-api"].libs[0])) args.append( @@ -981,5 +1004,4 @@ def install_python(self): os.environ["LAMMPS_VERSION_FILE"] = join_path( self.stage.source_path, "src", "version.h" ) - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/landsfcutil/package.py b/var/spack/repos/builtin/packages/landsfcutil/package.py index 9027d4eeda7437..c137cb2e90ed10 100644 --- a/var/spack/repos/builtin/packages/landsfcutil/package.py +++ b/var/spack/repos/builtin/packages/landsfcutil/package.py @@ -48,5 +48,5 @@ def flag_handler(self, name, flags): return (None, None, flags) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/lapackpp/package.py b/var/spack/repos/builtin/packages/lapackpp/package.py index db32de97e15430..7e3577aa28d204 100644 --- a/var/spack/repos/builtin/packages/lapackpp/package.py +++ b/var/spack/repos/builtin/packages/lapackpp/package.py @@ -11,6 +11,7 @@ _versions = [ # LAPACK++, BLAS++ ["master", "master"], + ["2024.10.26", "2024.10.26"], ["2024.05.31", "2024.05.31"], ["2023.11.05", "2023.11.05"], ["2023.08.25", "2023.08.25"], @@ -37,6 +38,9 @@ class Lapackpp(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("master", branch="master") + version( + "2024.10.26", sha256="67f81f585a7ac89b779c79297cab75cc23d2492cb5055c2348381ebdb751821d" + ) version( "2024.05.31", sha256="093646d492a4c2c6b4d7001effb559c80da7fa31fd5ba517a6d686ca8c78cd99" ) @@ -125,8 +129,8 @@ def cmake_args(self): def check(self): # If the tester fails to build, ensure that the check() fails. - if os.path.isfile(join_path(self.builder.build_directory, "test", "tester")): - with working_dir(self.builder.build_directory): + if os.path.isfile(join_path(self.build_directory, "test", "tester")): + with working_dir(self.build_directory): make("check") else: raise Exception("The tester was not built!") diff --git a/var/spack/repos/builtin/packages/lc-framework/package.py b/var/spack/repos/builtin/packages/lc-framework/package.py index 60ff03576b29a8..0f9f1b1be2ef07 100644 --- a/var/spack/repos/builtin/packages/lc-framework/package.py +++ b/var/spack/repos/builtin/packages/lc-framework/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.cmake import CMakeBuilder from spack.package import * @@ -45,6 +46,6 @@ def cmake_args(self): args = [self.define_from_variant("LC_BUILD_LIBPRESSIO_PLUGIN", "libpressio")] if self.spec.satisfies("+cuda"): args.append(self.define_from_variant("LC_BUILD_CUDA", "cuda")) - args.append(self.builder.define_cuda_architectures(self)) + args.append(CMakeBuilder.define_cuda_architectures(self)) return args diff --git a/var/spack/repos/builtin/packages/lcms/package.py b/var/spack/repos/builtin/packages/lcms/package.py index ce452131b2f394..dbfe54508af586 100644 --- a/var/spack/repos/builtin/packages/lcms/package.py +++ b/var/spack/repos/builtin/packages/lcms/package.py @@ -5,6 +5,7 @@ import pathlib +import spack.build_systems.msbuild from spack.package import * diff --git a/var/spack/repos/builtin/packages/legion/package.py b/var/spack/repos/builtin/packages/legion/package.py index 74f46d380ae1f3..4e1a9cccf7ff1b 100644 --- a/var/spack/repos/builtin/packages/legion/package.py +++ b/var/spack/repos/builtin/packages/legion/package.py @@ -310,6 +310,12 @@ def validate_gasnet_root(value): "sysomp", default=False, description="Use system OpenMP implementation instead of Realm's" ) + def flag_handler(self, name, flags): + if name == "cxxflags": + if self.spec.satisfies("%oneapi@2025:"): + flags.append("-Wno-error=missing-template-arg-list-after-template-kw") + return (flags, None, None) + def cmake_args(self): spec = self.spec from_variant = self.define_from_variant diff --git a/var/spack/repos/builtin/packages/less/package.py b/var/spack/repos/builtin/packages/less/package.py index 3e4b402deec5b0..8601a602104909 100644 --- a/var/spack/repos/builtin/packages/less/package.py +++ b/var/spack/repos/builtin/packages/less/package.py @@ -17,9 +17,15 @@ class Less(AutotoolsPackage): depends_on("ncurses") - license("GPL-3.0-or-later OR BSD-2-Clause") + license("GPL-3.0-or-later OR BSD-2-Clause", checked_by="wdconinc") + depends_on("c", type="build") + + version("668", sha256="dbc0de59ea9c50e1e8927e6b077858db3a84954e767909bc599e6e6f602c5717") + version("661", sha256="a900e3916738bf8c1a0a2a059810f1c59b8271ac8bb46898c6e921ea6aefd757") version("643", sha256="3bb417c4b909dfcb0adafc371ab87f0b22e8b15f463ec299d156c495fc9aa196") - version("590", sha256="69056021c365b16504cf5bd3864436a5e50cb2f98b76cd68b99b457064139375") - version("551", sha256="2630db16ef188e88b513b3cc24daa9a798c45643cc7da06e549c9c00cfd84244") - version("530", sha256="8c1652ba88a726314aa2616d1c896ca8fe9a30253a5a67bc21d444e79a6c6bc3") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-46663 + version("590", sha256="69056021c365b16504cf5bd3864436a5e50cb2f98b76cd68b99b457064139375") + version("551", sha256="2630db16ef188e88b513b3cc24daa9a798c45643cc7da06e549c9c00cfd84244") + version("530", sha256="8c1652ba88a726314aa2616d1c896ca8fe9a30253a5a67bc21d444e79a6c6bc3") diff --git a/var/spack/repos/builtin/packages/libaec/package.py b/var/spack/repos/builtin/packages/libaec/package.py index f0498b3fd0dec5..12a059907e4820 100644 --- a/var/spack/repos/builtin/packages/libaec/package.py +++ b/var/spack/repos/builtin/packages/libaec/package.py @@ -48,7 +48,7 @@ def libs(self): if not libs: msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) return libs diff --git a/var/spack/repos/builtin/packages/libavif/package.py b/var/spack/repos/builtin/packages/libavif/package.py new file mode 100644 index 00000000000000..5889f39d407059 --- /dev/null +++ b/var/spack/repos/builtin/packages/libavif/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Libavif(CMakePackage): + """libavif - Library for encoding and decoding .avif files.""" + + homepage = "https://github.com/AOMediaCodec/libavif" + url = "https://github.com/AOMediaCodec/libavif/archive/refs/tags/v1.1.1.tar.gz" + + license("bsd-2-clause") + + version("1.1.1", sha256="914662e16245e062ed73f90112fbb4548241300843a7772d8d441bb6859de45b") + + depends_on("c", type="build") + depends_on("cxx", type="build") + + depends_on("cmake@3.13:", type="build") + + def cmake_args(self): + return [ + self.define("AVIF_JPEG", False), + self.define("AVIF_LIBYUV", False), + self.define("AVIF_ZLIBPNG", False), + ] diff --git a/var/spack/repos/builtin/packages/libcatalyst/package.py b/var/spack/repos/builtin/packages/libcatalyst/package.py index 6bfc26cf93d33f..bf10c56b430ecf 100644 --- a/var/spack/repos/builtin/packages/libcatalyst/package.py +++ b/var/spack/repos/builtin/packages/libcatalyst/package.py @@ -27,6 +27,7 @@ class Libcatalyst(CMakePackage): depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated depends_on("fortran", type="build") # generated + depends_on("pkgconfig", type="build") variant("mpi", default=False, description="Enable MPI support") variant("conduit", default=False, description="Use external Conduit for Catalyst") diff --git a/var/spack/repos/builtin/packages/libcgroup/package.py b/var/spack/repos/builtin/packages/libcgroup/package.py index 98779767171266..67cd8e8ec24899 100644 --- a/var/spack/repos/builtin/packages/libcgroup/package.py +++ b/var/spack/repos/builtin/packages/libcgroup/package.py @@ -9,17 +9,20 @@ class Libcgroup(AutotoolsPackage): """Library of control groups.""" - homepage = "https://sourceforge.net/projects/libcg/" - url = "https://sourceforge.net/projects/libcg/files/libcgroup/v0.41/libcgroup-0.41.tar.bz2" + homepage = "https://github.com/libcgroup/libcgroup/" + url = "https://github.com/libcgroup/libcgroup/releases/download/v3.1.0/libcgroup-3.1.0.tar.gz" license("LGPL-2.1-only") - version("0.41", sha256="e4e38bdc7ef70645ce33740ddcca051248d56b53283c0dc6d404e17706f6fb51") - version("0.37", sha256="15c8f3febb546530d3495af4e4904b3189c273277ca2d8553dec882cde1cd0f6") - version("0.36", sha256="8dcd2ae220435b3de736d3efb0023fdf1192d7a7f4032b439f3cf5342cff7b4c") + version("3.1.0", sha256="976ec4b1e03c0498308cfd28f1b256b40858f636abc8d1f9db24f0a7ea9e1258") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2018-14348 + version("0.41", sha256="e4e38bdc7ef70645ce33740ddcca051248d56b53283c0dc6d404e17706f6fb51") + version("0.37", sha256="15c8f3febb546530d3495af4e4904b3189c273277ca2d8553dec882cde1cd0f6") + version("0.36", sha256="8dcd2ae220435b3de736d3efb0023fdf1192d7a7f4032b439f3cf5342cff7b4c") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("m4", type="build") depends_on("autoconf", type="build") @@ -28,3 +31,10 @@ class Libcgroup(AutotoolsPackage): depends_on("bison", type="build") depends_on("flex", type="build") depends_on("linux-pam") + depends_on("systemd", when="@3.1:") + + def url_for_version(self, version): + if self.spec.satisfies("@2.0.1:"): + return f"https://github.com/libcgroup/libcgroup/releases/download/v{version}/libcgroup-{version}.tar.gz" + else: + return f"https://github.com/libcgroup/libcgroup/releases/download/v{version}/libcgroup-{version}.tar.bz2" diff --git a/var/spack/repos/builtin/packages/libdrm/package.py b/var/spack/repos/builtin/packages/libdrm/package.py index 5a6aa91b2710fe..6c68e5248f92f7 100644 --- a/var/spack/repos/builtin/packages/libdrm/package.py +++ b/var/spack/repos/builtin/packages/libdrm/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * diff --git a/var/spack/repos/builtin/packages/libdwarf/package.py b/var/spack/repos/builtin/packages/libdwarf/package.py index e62211790b774b..89b6e87327b222 100644 --- a/var/spack/repos/builtin/packages/libdwarf/package.py +++ b/var/spack/repos/builtin/packages/libdwarf/package.py @@ -6,6 +6,8 @@ import os import sys +import spack.build_systems.cmake +import spack.build_systems.generic from spack.package import * # Only build certain parts of dwarf because the other ones break. diff --git a/var/spack/repos/builtin/packages/libepoxy/package.py b/var/spack/repos/builtin/packages/libepoxy/package.py index 800dbc7303b2b3..c991fdb3710789 100644 --- a/var/spack/repos/builtin/packages/libepoxy/package.py +++ b/var/spack/repos/builtin/packages/libepoxy/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * diff --git a/var/spack/repos/builtin/packages/libgff/package.py b/var/spack/repos/builtin/packages/libgff/package.py index 074a58c675e8c3..b682e4af006a15 100644 --- a/var/spack/repos/builtin/packages/libgff/package.py +++ b/var/spack/repos/builtin/packages/libgff/package.py @@ -18,4 +18,5 @@ class Libgff(CMakePackage): version("2.0.0", sha256="7656b19459a7ca7d2fd0fcec4f2e0fd0deec1b4f39c703a114e8f4c22d82a99c") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") diff --git a/var/spack/repos/builtin/packages/libjpeg-turbo/package.py b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py index 65b07ad458dfbb..d88e2984ef268e 100644 --- a/var/spack/repos/builtin/packages/libjpeg-turbo/package.py +++ b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py @@ -5,6 +5,7 @@ import sys +import spack.build_systems.cmake from spack.package import * diff --git a/var/spack/repos/builtin/packages/libmng/package.py b/var/spack/repos/builtin/packages/libmng/package.py index 3a5f6cb27d29fc..d3b59562f47c25 100644 --- a/var/spack/repos/builtin/packages/libmng/package.py +++ b/var/spack/repos/builtin/packages/libmng/package.py @@ -3,10 +3,13 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * -class Libmng(CMakePackage): +class Libmng(CMakePackage, AutotoolsPackage): """THE reference library for reading, displaying, writing and examining Multiple-Image Network Graphics. MNG is the animation extension to the popular PNG image format.""" @@ -26,9 +29,24 @@ class Libmng(CMakePackage): depends_on("zlib-api") depends_on("lcms") + build_system("cmake", "autotools", default="cmake") + def patch(self): # jpeg requires stdio to be included before its headers. filter_file(r"^(\#include \)", "#include\n\\1", "libmng_types.h") + +class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): def cmake_args(self): return ["-DWITH_LCMS2:BOOL=ON", "-DWITH_LCMS1:BOOL=OFF"] + + +class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): + @run_before("configure") + def clean_preconf(self): + """Required, otherwise configure will crash as subdirectories have + already been configured""" + make("distclean") + + def configure_args(self): + return ["--with-lcms2", "--without-lcms1"] diff --git a/var/spack/repos/builtin/packages/libpciaccess/package.py b/var/spack/repos/builtin/packages/libpciaccess/package.py index 6cab9031dd779d..922af5e8998d27 100644 --- a/var/spack/repos/builtin/packages/libpciaccess/package.py +++ b/var/spack/repos/builtin/packages/libpciaccess/package.py @@ -26,15 +26,6 @@ class Libpciaccess(AutotoolsPackage, XorgPackage): patch("nvhpc.patch", when="%nvhpc") - # A known issue exists when building with PGI as documented here: - # https://bugs.freedesktop.org/show_bug.cgi?id=94398 - # https://www.pgroup.com/userforum/viewtopic.php?f=4&t=5126 - # https://gitlab.freedesktop.org/xorg/lib/libpciaccess/issues/7 - # - # When the ability to use dependencies built by another compiler, using a - # libpciaccess built by gcc should be usable by PGI builds. - conflicts("%pgi") - conflicts("platform=darwin") def configure_args(self): diff --git a/var/spack/repos/builtin/packages/libpspio/package.py b/var/spack/repos/builtin/packages/libpspio/package.py index b462c5c58c21c1..130cebd07c21cb 100644 --- a/var/spack/repos/builtin/packages/libpspio/package.py +++ b/var/spack/repos/builtin/packages/libpspio/package.py @@ -16,6 +16,7 @@ class Libpspio(AutotoolsPackage): license("MPL-2.0") + version("0.4.1", sha256="e4f87f6d8821042db3a88dad60ae07278e36ad2571e28f5d30f02d8b164b4daa") version("0.3.0", sha256="4dc092457e481e5cd703eeecd87e6f17749941fe274043550c8a2557a649afc5") depends_on("c", type="build") # generated diff --git a/var/spack/repos/builtin/packages/libquo/package.py b/var/spack/repos/builtin/packages/libquo/package.py index 099dcf0ec55580..efaa0da76fb34d 100644 --- a/var/spack/repos/builtin/packages/libquo/package.py +++ b/var/spack/repos/builtin/packages/libquo/package.py @@ -43,11 +43,4 @@ def autoreconf(self, spec, prefix): bash("./autogen") def configure_args(self): - config_args = [ - "CC={0}".format(self.spec["mpi"].mpicc), - "FC={0}".format(self.spec["mpi"].mpifc), - ] - if self.spec.satisfies("%pgi"): - config_args.append("CFLAGS={0}".format(self.compiler.cc_pic_flag)) - config_args.append("FCFLAGS={0}".format(self.compiler.fc_pic_flag)) - return config_args + return [f"CC={self.spec['mpi'].mpicc}", f"FC={self.spec['mpi'].mpifc}"] diff --git a/var/spack/repos/builtin/packages/librdkafka/package.py b/var/spack/repos/builtin/packages/librdkafka/package.py index dbc42080596d39..df90516c227e8d 100644 --- a/var/spack/repos/builtin/packages/librdkafka/package.py +++ b/var/spack/repos/builtin/packages/librdkafka/package.py @@ -15,6 +15,8 @@ class Librdkafka(AutotoolsPackage): license("BSD-2-Clause") + version("2.6.0", sha256="abe0212ecd3e7ed3c4818a4f2baf7bf916e845e902bb15ae48834ca2d36ac745") + version("2.5.3", sha256="eaa1213fdddf9c43e28834d9a832d9dd732377d35121e42f875966305f52b8ff") version("2.2.0", sha256="af9a820cbecbc64115629471df7c7cecd40403b6c34bfdbb9223152677a47226") version("2.1.1", sha256="7be1fc37ab10ebdc037d5c5a9b35b48931edafffae054b488faaff99e60e0108") version("2.1.0", sha256="d8e76c4b1cde99e283a19868feaaff5778aa5c6f35790036c5ef44bc5b5187aa") @@ -29,3 +31,6 @@ class Librdkafka(AutotoolsPackage): depends_on("zstd") depends_on("lz4") + depends_on("curl") + depends_on("openssl") + depends_on("zlib") diff --git a/var/spack/repos/builtin/packages/libspatialindex/package.py b/var/spack/repos/builtin/packages/libspatialindex/package.py index 3504012bfe9a23..7923e2e0b51011 100644 --- a/var/spack/repos/builtin/packages/libspatialindex/package.py +++ b/var/spack/repos/builtin/packages/libspatialindex/package.py @@ -17,7 +17,8 @@ class Libspatialindex(CMakePackage): version("1.9.3", sha256="7b44340a3edc55c11abfc453bb60f148b29f569cef9e1148583e76132e9c7379") version("1.8.5", sha256="93cce77269612f45287b521d5afdfb245be2b93b8b6438d92f8b9e0bdb37059d") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("cmake@3.5.0:", type="build") diff --git a/var/spack/repos/builtin/packages/libssh2/package.py b/var/spack/repos/builtin/packages/libssh2/package.py index 23dc57ce2deaff..8b1b425a717983 100644 --- a/var/spack/repos/builtin/packages/libssh2/package.py +++ b/var/spack/repos/builtin/packages/libssh2/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * @@ -14,6 +16,7 @@ class Libssh2(AutotoolsPackage, CMakePackage): license("BSD-3-Clause") + version("1.11.1", sha256="d9ec76cbe34db98eec3539fe2c899d26b0c837cb3eb466a56b0f109cabf658f7") version("1.11.0", sha256="3736161e41e2693324deb38c26cfdc3efe6209d634ba4258db1cecff6a5ad461") version("1.10.0", sha256="2d64e90f3ded394b91d3a2e774ca203a4179f69aebee03003e5a6fa621e41d51") version("1.9.0", sha256="d5fb8bd563305fd1074dda90bd053fb2d29fc4bce048d182f96eaa466dfadafd") @@ -23,8 +26,7 @@ class Libssh2(AutotoolsPackage, CMakePackage): "1.4.3", sha256="eac6f85f9df9db2e6386906a6227eb2cd7b3245739561cad7d6dc1d5d021b96d" ) # CentOS7 - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") build_system("autotools", "cmake", default="autotools") @@ -53,7 +55,7 @@ class Libssh2(AutotoolsPackage, CMakePackage): # and fails to prepend the -L flags, which is causing issues in libgit2, as # it tries to locate e.g. libssl in the dirs of the pc file's -L flags, and # cannot find the lib. - patch("pr-1114.patch", when="@1.7:") + patch("pr-1114.patch", when="@1.7:1.11.0") class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder): @@ -77,14 +79,27 @@ def cmake_args(self): class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): def configure_args(self): - args = ["--disable-tests", "--disable-docker-tests", "--disable-examples-build"] - args += self.enable_or_disable("shared") + args = [ + "--disable-tests", + "--disable-docker-tests", + "--disable-examples-build", + "--without-libgcrypt", + "--without-wincng", + *self.enable_or_disable("shared"), + ] crypto = self.spec.variants["crypto"].value - if crypto == "openssl": - args.append(f"--with-libssl-prefix={self.spec['openssl'].prefix}") - elif crypto == "mbedtls": - args.append(f"--with-libmbedcrypto-prefix={self.spec['mbedtls'].prefix}") + if self.spec.satisfies("@1.9:"): + # single flag for all crypto backends + args.append(f"--with-crypto={crypto}") + else: + # one flag per crypto backend + if crypto == "openssl": + args.append(f"--with-libssl-prefix={self.spec['openssl'].prefix}") + args.append("--without-mbedtls") + elif crypto == "mbedtls": + args.append(f"--with-libmbedcrypto-prefix={self.spec['mbedtls'].prefix}") + args.append("--without-openssl") return args diff --git a/var/spack/repos/builtin/packages/libszip/package.py b/var/spack/repos/builtin/packages/libszip/package.py index 107c821272a567..2314879927aeee 100644 --- a/var/spack/repos/builtin/packages/libszip/package.py +++ b/var/spack/repos/builtin/packages/libszip/package.py @@ -34,7 +34,7 @@ def libs(self): if not libs: msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) return libs diff --git a/var/spack/repos/builtin/packages/libunwind/package.py b/var/spack/repos/builtin/packages/libunwind/package.py index 22e324af08c973..74fe99c514347f 100644 --- a/var/spack/repos/builtin/packages/libunwind/package.py +++ b/var/spack/repos/builtin/packages/libunwind/package.py @@ -11,25 +11,23 @@ class Libunwind(AutotoolsPackage): the call-chain of a program.""" homepage = "https://www.nongnu.org/libunwind/" - url = "http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz" + url = "https://github.com/libunwind/libunwind/releases/download/v0.0.0/libunwind-0.0.0.tar.gz" git = "https://github.com/libunwind/libunwind" maintainers("mwkrentel") license("MIT") version("master", branch="master") + version("1.8-stable", branch="v1.8-stable") + version("1.8.1", sha256="ddf0e32dd5fafe5283198d37e4bf9decf7ba1770b6e7e006c33e6df79e6a6157") + version("1.7-stable", branch="v1.7-stable") + version("1.7.2", sha256="a18a6a24307443a8ace7a8acc2ce79fbbe6826cd0edf98d6326d0225d6a5d6e6") version("1.6-stable", branch="v1.6-stable") version("1.6.2", sha256="4a6aec666991fb45d0889c44aede8ad6eb108071c3554fcdff671f9c94794976") - version("1.5-stable", branch="v1.5-stable") version("1.5.0", sha256="90337653d92d4a13de590781371c604f9031cdb50520366aa1e3a91e1efb1017") version("1.4.0", sha256="df59c931bd4d7ebfd83ee481c943edf015138089b8e50abed8d9c57ba9338435") version("1.3.1", sha256="43997a3939b6ccdf2f669b50fdb8a4d3205374728c2923ddc2354c65260214f8") version("1.2.1", sha256="3f3ecb90e28cbe53fba7a4a27ccce7aad188d3210bb1964a923a731a27a75acb") - version( - "1.1", - sha256="9dfe0fcae2a866de9d3942c66995e4b460230446887dbdab302d41a8aee8d09a", - deprecated=True, - ) depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated @@ -83,7 +81,7 @@ class Libunwind(AutotoolsPackage): # The libunwind releases contain the autotools generated files, # but the git repo snapshots do not. - reconf_versions = "@master,1.5-stable,1.6-stable" + reconf_versions = "@master,1.6-stable,1.7-stable,1.8-stable" depends_on("autoconf", type="build", when=reconf_versions) depends_on("automake", type="build", when=reconf_versions) depends_on("libtool", type="build", when=reconf_versions) @@ -95,8 +93,21 @@ class Libunwind(AutotoolsPackage): conflicts("platform=darwin", msg="Non-GNU libunwind needs ELF libraries Darwin does not have") conflicts("%gcc@:4.9", when="@1.6:", msg="libunwind >=1.6 requires stdatomic.h") + # Introduced in https://github.com/libunwind/libunwind/pull/555, fixed in + # https://github.com/libunwind/libunwind/pull/723 + conflicts("target=ppc64:", when="@1.8") + conflicts("target=ppc64le:", when="@1.8") + + conflicts("target=aarch64:", when="@1.8:") + provides("unwind") + def url_for_version(self, version): + if version == Version("1.5.0"): + return f"https://github.com/libunwind/libunwind/releases/download/v{version.up_to(2)}/libunwind-{version}.tar.gz" + else: + return super().url_for_version(version) + def flag_handler(self, name, flags): wrapper_flags = [] diff --git a/var/spack/repos/builtin/packages/libusb/package.py b/var/spack/repos/builtin/packages/libusb/package.py index 36fb87fcc8aad7..9fdc454afc697d 100644 --- a/var/spack/repos/builtin/packages/libusb/package.py +++ b/var/spack/repos/builtin/packages/libusb/package.py @@ -11,12 +11,17 @@ class Libusb(AutotoolsPackage): """Library for USB device access.""" homepage = "https://libusb.info/" - url = "https://github.com/libusb/libusb/releases/download/v1.0.22/libusb-1.0.22.tar.bz2" + url = "https://github.com/libusb/libusb/releases/download/v1.0.27/libusb-1.0.27.tar.bz2" git = "https://github.com/libusb/libusb" license("LGPL-2.1-or-later") version("master", branch="master") + version("1.0.27", sha256="ffaa41d741a8a3bee244ac8e54a72ea05bf2879663c098c82fc5757853441575") + version("1.0.26", sha256="12ce7a61fc9854d1d2a1ffe095f7b5fac19ddba095c259e6067a46500381b5a5") + version("1.0.25", sha256="8a28ef197a797ebac2702f095e81975e2b02b2eeff2774fa909c78a74ef50849") + version("1.0.24", sha256="7efd2685f7b327326dcfb85cee426d9b871fd70e22caa15bb68d595ce2a2b12a") + version("1.0.23", sha256="db11c06e958a82dac52cf3c65cb4dd2c3f339c8a988665110e0d24d19312ad8d") version("1.0.22", sha256="75aeb9d59a4fdb800d329a545c2e6799f732362193b465ea198f2aa275518157") version("1.0.21", sha256="7dce9cce9a81194b7065ee912bcd55eeffebab694ea403ffb91b67db66b1824b") version("1.0.20", sha256="cb057190ba0a961768224e4dc6883104c6f945b2bf2ef90d7da39e7c1834f7ff") diff --git a/var/spack/repos/builtin/packages/libuv/package.py b/var/spack/repos/builtin/packages/libuv/package.py index 609fb5ba5fc0f4..69cce8f9aa42dc 100644 --- a/var/spack/repos/builtin/packages/libuv/package.py +++ b/var/spack/repos/builtin/packages/libuv/package.py @@ -5,6 +5,7 @@ import sys import spack.build_systems +import spack.build_systems.autotools from spack.package import * @@ -124,6 +125,7 @@ def url_for_version(self, version): "broken for versions of MSVC supported by Spack", ) + class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): @when("@:1.43") def autoreconf(self, pkg, spec, prefix): diff --git a/var/spack/repos/builtin/packages/libva/package.py b/var/spack/repos/builtin/packages/libva/package.py new file mode 100644 index 00000000000000..538ca8914ea654 --- /dev/null +++ b/var/spack/repos/builtin/packages/libva/package.py @@ -0,0 +1,46 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class Libva(AutotoolsPackage): + """Libva is an implementation for VA-API (Video Acceleration API). + VA-API is an open-source library and API specification, which provides + access to graphics hardware acceleration capabilities for video + processing. It consists of a main library and driver-specific + acceleration backends for each supported hardware vendor.""" + + homepage = "https://github.com/intel/libva" + url = "https://github.com/intel/libva/archive/refs/tags/2.22.0.tar.gz" + + version("2.22.0", sha256="467c418c2640a178c6baad5be2e00d569842123763b80507721ab87eb7af8735") + + depends_on("c", type="build") + depends_on("cxx", type="build") + + depends_on("autoconf", type="build") + depends_on("automake", type="build") + depends_on("libtool", type="build") + depends_on("m4", type="build") + depends_on("pkgconfig", type="build") + + depends_on("libdrm") + depends_on("libx11", when="^[virtuals=gl] glx") + depends_on("libxext", when="^[virtuals=gl] glx") + + def autoreconf(self, spec, prefix): + autogen = Executable("./autogen.sh") + autogen() + + def configure_args(self): + spec = self.spec + args = ["--disable-x11", "--disable-wayland", "--disable-glx", "--enable-libdrm"] + if spec.satisfies("^[virtuals=gl] glx"): + args.append("--enable-x11") + else: + args.append("--disable-x11") + return args diff --git a/var/spack/repos/builtin/packages/libvdwxc/package.py b/var/spack/repos/builtin/packages/libvdwxc/package.py index e0e7241d9516c6..f9d6a0d8452635 100644 --- a/var/spack/repos/builtin/packages/libvdwxc/package.py +++ b/var/spack/repos/builtin/packages/libvdwxc/package.py @@ -56,10 +56,8 @@ def configure_args(self): return args # misuse of fftw_plan in m4 for fftw detection (configure fails with gcc 14) - # two patches for (1) m4 macro from upstream and (2) pre-generated configure in tarball - patch( - "https://gitlab.com/libvdwxc/libvdwxc/-/commit/9340f857515c4a2e56d2aa7cf3a21c41ba8559c3.diff", - sha256="b9ad695e54a25d7ffa92f783bb0a31d3b421225f97958972e32ba42893844b80", - when="@:0.4.0", - ) + # Only the configure script is patched, NOT the m4 macro (to avoid depending on aclocal), + # so running autoreconf is not supported. + # The relevant upstream fix for the m4 would be: + # https://gitlab.com/libvdwxc/libvdwxc/-/commit/9340f857515c4a2e56d2aa7cf3a21c41ba8559c3.diff patch("fftw-detection.patch", when="@:0.4.0") diff --git a/var/spack/repos/builtin/packages/libxc/package.py b/var/spack/repos/builtin/packages/libxc/package.py index 84e6878512970c..46ff91c34f1378 100644 --- a/var/spack/repos/builtin/packages/libxc/package.py +++ b/var/spack/repos/builtin/packages/libxc/package.py @@ -15,6 +15,7 @@ class Libxc(AutotoolsPackage, CudaPackage): license("MPL-2.0-no-copyleft-exception") + version("7.0.0", sha256="8d4e343041c9cd869833822f57744872076ae709a613c118d70605539fb13a77") version("6.2.2", sha256="d1b65ef74615a1e539d87a0e6662f04baf3a2316706b4e2e686da3193b26b20f") version("6.2.1", sha256="da96fc4f6e4221734986f49758b410ffe1d406efd3538761062a4af57a2bd272") version("6.2.0", sha256="31edb72c69157b6c0beaff1f10cbbb6348ce7579ef81d8f286764e5ab61194d1") diff --git a/var/spack/repos/builtin/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py index c799095ab659fc..a07f0c1b6a7b14 100644 --- a/var/spack/repos/builtin/packages/libxml2/package.py +++ b/var/spack/repos/builtin/packages/libxml2/package.py @@ -6,7 +6,6 @@ import llnl.util.filesystem as fs -import spack.builder from spack.build_systems import autotools, nmake from spack.package import * @@ -30,21 +29,42 @@ def url_for_version(self, version): license("MIT") - version("2.10.3", sha256="5d2cc3d78bec3dbe212a9d7fa629ada25a7da928af432c93060ff5c17ee28a9c") - version("2.10.2", sha256="d240abe6da9c65cb1900dd9bf3a3501ccf88b3c2a1cb98317d03f272dda5b265") - version("2.10.1", sha256="21a9e13cc7c4717a6c36268d0924f92c3f67a1ece6b7ff9d588958a6db9fb9d8") - version("2.9.14", sha256="60d74a257d1ccec0475e749cba2f21559e48139efba6ff28224357c7c798dfee") - version("2.9.13", sha256="276130602d12fe484ecc03447ee5e759d0465558fbc9d6bd144e3745306ebf0e") - version("2.9.12", sha256="c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92") - version("2.9.11", sha256="886f696d5d5b45d780b2880645edf9e0c62a4fd6841b853e824ada4e02b4d331") - version("2.9.10", sha256="aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f") - version("2.9.9", sha256="94fb70890143e3c6549f265cee93ec064c80a84c42ad0f23e85ee1fd6540a871") - version("2.9.8", sha256="0b74e51595654f958148759cfef0993114ddccccbb6f31aee018f3558e8e2732") - version("2.9.4", sha256="ffb911191e509b966deb55de705387f14156e1a56b21824357cdf0053233633c") - version("2.9.2", sha256="5178c30b151d044aefb1b08bf54c3003a0ac55c59c866763997529d60770d5bc") - version("2.7.8", sha256="cda23bc9ebd26474ca8f3d67e7d1c4a1f1e7106364b690d822e009fdc3c417ec") - - depends_on("c", type="build") # generated + version("2.13.4", sha256="65d042e1c8010243e617efb02afda20b85c2160acdbfbcb5b26b80cec6515650") + version("2.12.9", sha256="59912db536ab56a3996489ea0299768c7bcffe57169f0235e7f962a91f483590") + version("2.11.9", sha256="780157a1efdb57188ec474dca87acaee67a3a839c2525b2214d318228451809f") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-25062 + version( + "2.10.3", sha256="5d2cc3d78bec3dbe212a9d7fa629ada25a7da928af432c93060ff5c17ee28a9c" + ) + version( + "2.10.2", sha256="d240abe6da9c65cb1900dd9bf3a3501ccf88b3c2a1cb98317d03f272dda5b265" + ) + version( + "2.10.1", sha256="21a9e13cc7c4717a6c36268d0924f92c3f67a1ece6b7ff9d588958a6db9fb9d8" + ) + version( + "2.9.14", sha256="60d74a257d1ccec0475e749cba2f21559e48139efba6ff28224357c7c798dfee" + ) + version( + "2.9.13", sha256="276130602d12fe484ecc03447ee5e759d0465558fbc9d6bd144e3745306ebf0e" + ) + version( + "2.9.12", sha256="c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92" + ) + version( + "2.9.11", sha256="886f696d5d5b45d780b2880645edf9e0c62a4fd6841b853e824ada4e02b4d331" + ) + version( + "2.9.10", sha256="aafee193ffb8fe0c82d4afef6ef91972cbaf5feea100edc2f262750611b4be1f" + ) + version("2.9.9", sha256="94fb70890143e3c6549f265cee93ec064c80a84c42ad0f23e85ee1fd6540a871") + version("2.9.8", sha256="0b74e51595654f958148759cfef0993114ddccccbb6f31aee018f3558e8e2732") + version("2.9.4", sha256="ffb911191e509b966deb55de705387f14156e1a56b21824357cdf0053233633c") + version("2.9.2", sha256="5178c30b151d044aefb1b08bf54c3003a0ac55c59c866763997529d60770d5bc") + version("2.7.8", sha256="cda23bc9ebd26474ca8f3d67e7d1c4a1f1e7106364b690d822e009fdc3c417ec") + + depends_on("c", type="build") variant("python", default=False, description="Enable Python support") variant("shared", default=True, description="Build shared library") @@ -204,7 +224,7 @@ def test_xmllint(self): xmllint("--dtdvalid", dtd_path, data_dir.join("info.xml")) -class BaseBuilder(metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): @run_after("install") @on_package_attributes(run_tests=True) def import_module_test(self): @@ -213,7 +233,7 @@ def import_module_test(self): python("-c", "import libxml2") -class AutotoolsBuilder(BaseBuilder, autotools.AutotoolsBuilder): +class AutotoolsBuilder(AnyBuilder, autotools.AutotoolsBuilder): def configure_args(self): spec = self.spec @@ -239,7 +259,7 @@ def configure_args(self): return args -class NMakeBuilder(BaseBuilder, nmake.NMakeBuilder): +class NMakeBuilder(AnyBuilder, nmake.NMakeBuilder): phases = ("configure", "build", "install") @property diff --git a/var/spack/repos/builtin/packages/libxsmm/package.py b/var/spack/repos/builtin/packages/libxsmm/package.py index 16fb0dbeffdbdf..14e287a918547a 100644 --- a/var/spack/repos/builtin/packages/libxsmm/package.py +++ b/var/spack/repos/builtin/packages/libxsmm/package.py @@ -28,7 +28,11 @@ class Libxsmm(MakefilePackage): version("main-2023-11", commit="0d9be905527ba575c14ca5d3b4c9673916c868b2") version("main", branch="main") version("1.17-cp2k", commit="6f883620f58afdeebab28039fc9cf580e76a5ec6") - version("1.17", sha256="8b642127880e92e8a75400125307724635ecdf4020ca4481e5efe7640451bb92") + version( + "1.17", + sha256="8b642127880e92e8a75400125307724635ecdf4020ca4481e5efe7640451bb92", + preferred=True, + ) version("1.16.3", sha256="e491ccadebc5cdcd1fc08b5b4509a0aba4e2c096f53d7880062a66b82a0baf84") version("1.16.2", sha256="bdc7554b56b9e0a380fc9c7b4f4394b41be863344858bc633bc9c25835c4c64e") version("1.16.1", sha256="93dc7a3ec40401988729ddb2c6ea2294911261f7e6cd979cf061b5c3691d729d") diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py index c6a7242ce91f10..65b72202d2bc44 100644 --- a/var/spack/repos/builtin/packages/likwid/package.py +++ b/var/spack/repos/builtin/packages/likwid/package.py @@ -8,6 +8,7 @@ import llnl.util.tty as tty +import spack.tengine from spack.package import * @@ -26,6 +27,7 @@ class Likwid(Package): license("GPL-3.0-only") + version("5.4.0", sha256="0f2b671c69caa993fedb48187b3bdcc94c22400ec84c926fd0898dbff68aa03e") version("5.3.0", sha256="c290e554c4253124ac2ab8b056e14ee4d23966b8c9fbfa10ba81f75ae543ce4e") version("5.2.2", sha256="7dda6af722e04a6c40536fc9f89766ce10f595a8569b29e80563767a6a8f940e") version("5.2.1", sha256="1b8e668da117f24302a344596336eca2c69d2bc2f49fa228ca41ea0688f6cbc2") diff --git a/var/spack/repos/builtin/packages/linaro-forge/package.py b/var/spack/repos/builtin/packages/linaro-forge/package.py index a673f275bd92fe..13f0a17269103a 100644 --- a/var/spack/repos/builtin/packages/linaro-forge/package.py +++ b/var/spack/repos/builtin/packages/linaro-forge/package.py @@ -23,6 +23,10 @@ class LinaroForge(Package): maintainers("kenche-linaro") if platform.machine() == "aarch64": + version("24.1", sha256="e297d0c19c95d4db842187eb38882db094094ec667d854aaf396e11a81bffe0b") + version( + "24.0.6", sha256="a7f9f71e4352be3680854611fe433a9974fcb8a327ac65ca3bc950c956eac6e4" + ) version( "24.0.5", sha256="fc0c80ce9f66c6966faaca77de0f13e26da564c853e5bfc1e8acd17b65bc2ba0" ) @@ -62,9 +66,6 @@ class LinaroForge(Package): version( "22.1.4", sha256="4e2af481a37b4c99dba0de6fac75ac945316955fc4170d06e321530adea7ac9f" ) - version( - "21.1.3", sha256="4a4ff7372aad5a31fc9e18b7b6c493691ab37d8d44a3158584e62d1ab82b0eeb" - ) elif platform.machine() == "ppc64le": # N.B. support for ppc64le was dropped in 24.0 version( @@ -93,10 +94,11 @@ class LinaroForge(Package): version( "22.0.4", sha256="f4cb5bcbaa67f9209299fe4653186a2829760b8b16a2883913aa43766375b04c" ) + elif platform.machine() == "x86_64": + version("24.1", sha256="0b96878ab73c20b39c4730ed15f24ca86dc5985637ff5d8e68f55e1e802e5fe3") version( - "21.1.3", sha256="eecbc5686d60994c5468b2d7cd37bebe5d9ac0ba37bd1f98fbfc69b071db541e" + "24.0.6", sha256="eab198b964862b4664359ccbec1edb27c2dd3b9fa82bcb4e14fc616a2b0341da" ) - elif platform.machine() == "x86_64": version( "24.0.5", sha256="da0d4d6fa9120b5e7c4a248795b7f5da32c4987588ecb7406213c8c9846af2bc" ) @@ -139,9 +141,6 @@ class LinaroForge(Package): version( "22.0.4", sha256="a2c8c1da38b9684d7c4656a98b3fc42777b03fd474cd0bf969324804f47587e5" ) - version( - "21.1.3", sha256="03dc82f1d075deb6f08d1e3e6592dc9b630d406c08a1316d89c436b5874f3407" - ) variant( "probe", diff --git a/var/spack/repos/builtin/packages/linux-pam/package.py b/var/spack/repos/builtin/packages/linux-pam/package.py index 484e9e2cb9a5d2..265a96e4a6a678 100644 --- a/var/spack/repos/builtin/packages/linux-pam/package.py +++ b/var/spack/repos/builtin/packages/linux-pam/package.py @@ -31,6 +31,7 @@ class LinuxPam(AutotoolsPackage): variant("lastlog", default=False, description="Build pam_lastlog model") variant("regenerate-docu", default=False, description="Regenerate docs") + depends_on("pkgconfig", type="build") depends_on("libtirpc") depends_on("libxcrypt") depends_on("xauth", when="+xauth") diff --git a/var/spack/repos/builtin/packages/lksctp-tools/package.py b/var/spack/repos/builtin/packages/lksctp-tools/package.py index 1222dddffb42f3..e690b5a9be127d 100644 --- a/var/spack/repos/builtin/packages/lksctp-tools/package.py +++ b/var/spack/repos/builtin/packages/lksctp-tools/package.py @@ -14,6 +14,7 @@ class LksctpTools(AutotoolsPackage): license("GPL-2.0-or-later AND LGPL-2.1-or-later") + version("1.0.21", sha256="8738bf17ecffbbe2440a6e2ffaf1cbcebb633fc99d63d88761af35c02a571893") version("1.0.18", sha256="3e9ab5b3844a8b65fc8152633aafe85f406e6da463e53921583dfc4a443ff03a") depends_on("c", type="build") # generated diff --git a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py index bfa175a8df89a0..6c98043a3add54 100644 --- a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py +++ b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py @@ -20,7 +20,7 @@ class LlvmAmdgpu(CMakePackage, CompilerPackage): executables = [r"amdclang", r"amdclang\+\+", r"amdflang", r"clang.*", r"flang.*", "llvm-.*"] generator("ninja") - maintainers("srekolam", "renjithravindrankannath", "haampie") + maintainers("srekolam", "renjithravindrankannath", "haampie", "afzpatel") license("Apache-2.0") @@ -78,6 +78,7 @@ class LlvmAmdgpu(CMakePackage, CompilerPackage): depends_on("z3", type="link") depends_on("zlib-api", type="link") depends_on("ncurses+termlib", type="link") + depends_on("libxml2", type="link") depends_on("pkgconfig", type="build") # This flavour of LLVM doesn't work on MacOS, so we should ensure that it @@ -222,12 +223,16 @@ def cmake_args(self): self.define("LIBCXXABI_ENABLE_STATIC", "ON"), self.define("LIBCXXABI_INSTALL_STATIC_LIBRARY", "OFF"), self.define("LLVM_ENABLE_RTTI", "ON"), - self.define("LLVM_TARGETS_TO_BUILD", "AMDGPU;X86"), self.define("LLVM_AMDGPU_ALLOW_NPI_TARGETS", "ON"), self.define("PACKAGE_VENDOR", "AMD"), self.define("CLANG_ENABLE_AMDCLANG", "ON"), ] + if self.spec.target.family == "aarch64": + args.append(self.define("LLVM_TARGETS_TO_BUILD", "AMDGPU;AArch64")) + else: + args.append(self.define("LLVM_TARGETS_TO_BUILD", "AMDGPU;X86")) + # Enable rocm-device-libs as a external project if self.spec.satisfies("+rocm-device-libs"): if self.spec.satisfies("@:6.0"): @@ -319,6 +324,5 @@ def post_install(self): def setup_dependent_build_environment(self, env, dependent_spec): for root, _, files in os.walk(self.spec["llvm-amdgpu"].prefix): if "libclang_rt.asan-x86_64.so" in files: - asan_lib_path = root - env.prepend_path("LD_LIBRARY_PATH", asan_lib_path) + env.prepend_path("LD_LIBRARY_PATH", root) env.prune_duplicate_paths("LD_LIBRARY_PATH") diff --git a/var/spack/repos/builtin/packages/llvm-doe/package.py b/var/spack/repos/builtin/packages/llvm-doe/package.py index 6bf4f67e505108..8aae32d5ac79f4 100644 --- a/var/spack/repos/builtin/packages/llvm-doe/package.py +++ b/var/spack/repos/builtin/packages/llvm-doe/package.py @@ -9,7 +9,6 @@ import llnl.util.tty as tty -import spack.util.executable from spack.build_systems.cmake import get_cmake_prefix_path from spack.package import * @@ -258,7 +257,7 @@ def determine_version(cls, exe): match = version_regex.search(output) if match: return match.group(match.lastindex) - except spack.util.executable.ProcessError: + except ProcessError: pass except Exception as e: tty.debug(e) diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py index 297cda2ad1a3fb..517a672ed7ea4c 100644 --- a/var/spack/repos/builtin/packages/llvm/package.py +++ b/var/spack/repos/builtin/packages/llvm/package.py @@ -10,8 +10,9 @@ import llnl.util.tty as tty from llnl.util.lang import classproperty -import spack.util.executable +import spack.compilers from spack.build_systems.cmake import get_cmake_prefix_path +from spack.operating_systems.mac_os import macos_sdk_path from spack.package import * from spack.package_base import PackageBase @@ -28,7 +29,7 @@ def filter_detected_exes(cls, prefix, exes_in_prefix): # Executables like lldb-vscode-X are daemon listening on some port and would hang Spack # during detection. clang-cl, clang-cpp, etc. are dev tools that we don't need to test reject = re.compile( - r"-(vscode|cpp|cl|gpu|tidy|rename|scan-deps|format|refactor|offload|" + r"-(vscode|cpp|cl|ocl|gpu|tidy|rename|scan-deps|format|refactor|offload|" r"check|query|doc|move|extdef|apply|reorder|change-namespace|" r"include-fixer|import-test|dap|server)" ) @@ -56,6 +57,10 @@ class Llvm(CMakePackage, CudaPackage, LlvmDetection, CompilerPackage): license("Apache-2.0") version("main", branch="main") + version("19.1.4", sha256="010e1fd3cabee8799bd2f8a6fbc68f28207494f315cf9da7057a2820f79fd531") + version("19.1.3", sha256="e5106e2bef341b3f5e41340e4b6c6a58259f4021ad801acf14e88f1a84567b05") + version("19.1.2", sha256="622cb6c5e95a3bb7e9876c4696a65671f235bd836cfd0c096b272f6c2ada41e7") + version("19.1.1", sha256="115dfd98a353d05bffdab3f80db22f159da48aca0124e8c416f437adcd54b77f") version("19.1.0", sha256="0a08341036ca99a106786f50f9c5cb3fbe458b3b74cab6089fd368d0edb2edfe") version("18.1.8", sha256="09c08693a9afd6236f27a2ebae62cda656eba19021ef3f94d59e931d662d4856") version("18.1.7", sha256="b60df7cbe02cef2523f7357120fb0d46cbb443791cde3a5fb36b82c335c0afc9") @@ -686,7 +691,7 @@ def determine_version(cls, exe): match = re.search(cls.compiler_version_regex, output) if match: return match.group(match.lastindex) - except spack.util.executable.ProcessError: + except ProcessError: pass except Exception as e: tty.debug(e) @@ -820,6 +825,10 @@ def setup_build_environment(self, env): os.symlink(bin, sym) env.prepend_path("PATH", self.stage.path) + if self.spec.satisfies("platform=darwin"): + # set the SDKROOT so the bootstrap compiler finds its C++ headers + env.set("SDKROOT", macos_sdk_path()) + def setup_run_environment(self, env): if self.spec.satisfies("+clang"): env.set("CC", join_path(self.spec.prefix.bin, "clang")) @@ -1016,7 +1025,20 @@ def cmake_args(self): # Enable building with CLT [and not require full Xcode] # https://github.com/llvm/llvm-project/issues/57037 if self.spec.satisfies("@15.0.0: platform=darwin"): - cmake_args.append(define("BUILTINS_CMAKE_ARGS", "-DCOMPILER_RT_ENABLE_IOS=OFF")) + cmake_args.append( + define( + "BUILTINS_CMAKE_ARGS", + ";".join( + [f"-DCOMPILER_RT_ENABLE_{os}=OFF" for os in ("IOS", "WATCHOS", "TVOS")] + ), + ) + ) + + if self.spec.satisfies("platform=darwin"): + cmake_args.append(define("LLVM_ENABLE_LIBCXX", True)) + cmake_args.append(define("DEFAULT_SYSROOT", macos_sdk_path())) + # without this libc++ headers are not fond during compiler-rt build + cmake_args.append(define("LLVM_BUILD_EXTERNAL_COMPILER_RT", True)) # Semicolon seperated list of projects to enable cmake_args.append(define("LLVM_ENABLE_PROJECTS", projects)) diff --git a/var/spack/repos/builtin/packages/logstash/package.py b/var/spack/repos/builtin/packages/logstash/package.py index 5f6318faa03bef..4ad690c764d89f 100644 --- a/var/spack/repos/builtin/packages/logstash/package.py +++ b/var/spack/repos/builtin/packages/logstash/package.py @@ -15,12 +15,24 @@ class Logstash(Package): """ homepage = "https://artifacts.elastic.co" - url = "https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz" + url = "https://artifacts.elastic.co/downloads/logstash/logstash-8.15.2-linux-x86_64.tar.gz" - version("6.6.0", sha256="5a9a8b9942631e9d4c3dfb8d47075276e8c2cff343841145550cc0c1cfe7bba7") + version("8.15.2", sha256="fc75c8cad1016b07f7aeeeeb7ea23f4195ab1beee2ced282f11ff6d0e84f7e51") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2019-7612 + version("6.6.0", sha256="5a9a8b9942631e9d4c3dfb8d47075276e8c2cff343841145550cc0c1cfe7bba7") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("java@11:") + + def url_for_version(self, version): + if self.spec.satisfies("@:6"): + return f"https://artifacts.elastic.co/downloads/logstash/logstash-{version}.tar.gz" + else: + return f"https://artifacts.elastic.co/downloads/logstash/logstash-{version}-linux-x86_64.tar.gz" def install(self, spec, prefix): install_tree(".", prefix) + + def setup_run_environment(self, env): + # do not use the bundled jdk + env.set("LS_JAVA_HOME", self.spec["java"].home) diff --git a/var/spack/repos/builtin/packages/loki/package.py b/var/spack/repos/builtin/packages/loki/package.py index 91bf32a1dec74e..360d2ad587d3ef 100644 --- a/var/spack/repos/builtin/packages/loki/package.py +++ b/var/spack/repos/builtin/packages/loki/package.py @@ -24,6 +24,8 @@ class Loki(MakefilePackage): def flag_handler(self, name, flags): if name == "cxxflags": + if self.spec.satisfies("%oneapi@2025:"): + flags.append("-Wno-error=missing-template-arg-list-after-template-kw") if self.spec.satisfies("%oneapi@2023.0.0:"): flags.append("-Wno-error=dynamic-exception-spec") if self.spec.satisfies("@0.1.7 %gcc@11:"): diff --git a/var/spack/repos/builtin/packages/lua-luaposix/package.py b/var/spack/repos/builtin/packages/lua-luaposix/package.py index 04bc97d6e490b1..579b172ce33523 100644 --- a/var/spack/repos/builtin/packages/lua-luaposix/package.py +++ b/var/spack/repos/builtin/packages/lua-luaposix/package.py @@ -23,6 +23,7 @@ class LuaLuaposix(LuaPackage): version("33.4.0", sha256="e66262f5b7fe1c32c65f17a5ef5ffb31c4d1877019b4870a5d373e2ab6526a21") version("33.2.1", sha256="4fb34dfea67f4cf3194cdecc6614c9aea67edc3c4093d34137669ea869c358e1") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("libxcrypt", when="platform=linux") depends_on("lua-bit32", when="^lua-lang@5.1") diff --git a/var/spack/repos/builtin/packages/lua-sol2/package.py b/var/spack/repos/builtin/packages/lua-sol2/package.py index 31d0367ffab513..cf7aa3ee91fa6e 100644 --- a/var/spack/repos/builtin/packages/lua-sol2/package.py +++ b/var/spack/repos/builtin/packages/lua-sol2/package.py @@ -26,7 +26,8 @@ class LuaSol2(CMakePackage): version("3.0.3", sha256="bf089e50387edfc70063e24fd7fbb693cceba4a50147d864fabedd1b33483582") version("3.0.2", sha256="3f5f369eae6732ae9a315fe4370bbdc9900d2f2f4f291206aeb5b2d5533f0c99") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") # Lua is not needed when building, since sol2 is headers-only depends_on("lua", type=("link", "run")) diff --git a/var/spack/repos/builtin/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py index 683657882359f0..5a12e58e44b929 100644 --- a/var/spack/repos/builtin/packages/lua/package.py +++ b/var/spack/repos/builtin/packages/lua/package.py @@ -10,7 +10,23 @@ import spack.build_environment from spack.package import * -from spack.util.executable import Executable + +# This is the template for a pkgconfig file for rpm +# https://github.com/guix-mirror/guix/raw/dcaf70897a0bad38a4638a2905aaa3c46b1f1402/gnu/packages/patches/lua-pkgconfig.patch +_LUA_PC_TEMPLATE = """prefix={0} +libdir={0}/lib +includedir={0}/include +bindir={0}/bin +INSTALL_LMOD={0}/share/lua/{1} +INSTALL_CMOD={0}/lib/lua/{1} +INTERPRETER=${{bindir}}/lua +COMPILER=${{bindir}}/luac +Name: Lua +Description: A powerful, fast, lightweight, embeddable scripting language +Version: {2} +Libs: -L${{libdir}} -llua -lm +Cflags: -I${{includedir}} +""" class LuaImplPackage(MakefilePackage): @@ -226,7 +242,6 @@ class Lua(LuaImplPackage): depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated - variant("pcfile", default=False, description="Add patch for lua.pc generation") variant("shared", default=True, description="Builds a shared version of the library") provides("lua-lang@5.1", when="@5.1:5.1.99") @@ -237,12 +252,6 @@ class Lua(LuaImplPackage): depends_on("ncurses+termlib") depends_on("readline") - patch( - "http://lua.2524044.n2.nabble.com/attachment/7666421/0/pkg-config.patch", - sha256="208316c2564bdd5343fa522f3b230d84bd164058957059838df7df56876cb4ae", - when="+pcfile @:5.3.9999", - ) - def build(self, spec, prefix): if spec.satisfies("platform=darwin"): target = "macosx" @@ -289,10 +298,10 @@ def install(self, spec, prefix): os.symlink(src_path, dest_path) @run_after("install") - def link_pkg_config(self): - if self.spec.satisfies("+pcfile"): - versioned_pc_file_name = "lua{0}.pc".format(self.version.up_to(2)) - symlink( - join_path(self.prefix.lib, "pkgconfig", versioned_pc_file_name), - join_path(self.prefix.lib, "pkgconfig", "lua.pc"), - ) + def generate_pkg_config(self): + mkdirp(self.prefix.lib.pkgconfig) + versioned_pc_file_name = "lua{0}.pc".format(self.version.up_to(2)) + versioned_pc_file_path = join_path(self.prefix.lib.pkgconfig, versioned_pc_file_name) + with open(versioned_pc_file_path, "w") as pcfile: + pcfile.write(_LUA_PC_TEMPLATE.format(self.prefix, self.version.up_to(2), self.version)) + symlink(versioned_pc_file_path, join_path(self.prefix.lib.pkgconfig, "lua.pc")) diff --git a/var/spack/repos/builtin/packages/lwgrp/package.py b/var/spack/repos/builtin/packages/lwgrp/package.py index 79a55066209442..eb0dc95ed764f1 100644 --- a/var/spack/repos/builtin/packages/lwgrp/package.py +++ b/var/spack/repos/builtin/packages/lwgrp/package.py @@ -17,6 +17,7 @@ class Lwgrp(AutotoolsPackage): maintainers("CamStan", "gonsie", "adammoody") version("main", branch="main") + version("1.0.6", sha256="9f697978361b4bd9914beaaafffcee0b62a480a9a7dd3d75176910cebda81438") version("1.0.5", sha256="16b579e13b8a5218f4fe1b8715f6aafb09133a0cefbcd6b2eaf73802955dee6b") version("1.0.4", sha256="0c933df7658660a0225f8e3a940eb2621efa4421397859417c8d90d906d4e90a") version("1.0.3", sha256="20b2fc3908bfdf04d1c177f86e227a147214cd155c548b3dd75e54c78e1c1c47") diff --git a/var/spack/repos/builtin/packages/lz4/package.py b/var/spack/repos/builtin/packages/lz4/package.py index 375e75aa699840..5063dccdc9c02d 100644 --- a/var/spack/repos/builtin/packages/lz4/package.py +++ b/var/spack/repos/builtin/packages/lz4/package.py @@ -94,7 +94,7 @@ def setup_build_environment(self, env): def build(self, pkg, spec, prefix): par = True - if spec.compiler.name == "nvhpc": + if spec.satisfies("%nvhpc"): # relocation error when building shared and dynamic libs in # parallel par = False diff --git a/var/spack/repos/builtin/packages/macsio/package.py b/var/spack/repos/builtin/packages/macsio/package.py index 9f61c5dff2745b..00b0256d221960 100644 --- a/var/spack/repos/builtin/packages/macsio/package.py +++ b/var/spack/repos/builtin/packages/macsio/package.py @@ -20,7 +20,8 @@ class Macsio(CMakePackage): version("1.1", sha256="a86249b0f10647c0b631773db69568388094605ec1a0af149d9e61e95e6961ec") version("1.0", sha256="1dd0df28f9f31510329d5874c1519c745b5c6bec12e102cea3e9f4b05e5d3072") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("mpi", default=True, description="Build MPI plugin") variant("silo", default=False, description="Build with SILO plugin") diff --git a/var/spack/repos/builtin/packages/magma/package.py b/var/spack/repos/builtin/packages/magma/package.py index 86be7b09d97db6..e97d663fd2073a 100644 --- a/var/spack/repos/builtin/packages/magma/package.py +++ b/var/spack/repos/builtin/packages/magma/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.util.environment from spack.package import * @@ -67,6 +68,7 @@ class Magma(CMakePackage, CudaPackage, ROCmPackage): "6.1.1", "6.1.2", "6.2.0", + "6.2.1", ]: depends_on(f"rocm-core@{ver}", when=f"@2.8.0: +rocm ^hip@{ver}") depends_on("python", when="@master", type="build") @@ -167,7 +169,7 @@ def cmake_args(self): if "@2.5.0" in spec: options.append(define("MAGMA_SPARSE", False)) - if spec.compiler.name in ["xl", "xl_r"]: + if spec.satisfies("%xl") or spec.satisfies("%xl_r"): options.append(define("CMAKE_DISABLE_FIND_PACKAGE_OpenMP", True)) if "+rocm" in spec: diff --git a/var/spack/repos/builtin/packages/mapl/package.py b/var/spack/repos/builtin/packages/mapl/package.py index ed7898a9369776..bb9941f43d2461 100644 --- a/var/spack/repos/builtin/packages/mapl/package.py +++ b/var/spack/repos/builtin/packages/mapl/package.py @@ -5,6 +5,7 @@ import subprocess +import spack.compiler from spack.package import * @@ -38,10 +39,14 @@ class Mapl(CMakePackage): version("develop", branch="develop") version("main", branch="main") + version("2.50.2", sha256="1c72f8598cf01bab6ef30c1f461444ba5a13f55c61164b7b3c15efb0cd1096c0") + version("2.50.1", sha256="26dd7a3ec82d484d60a559bb90a20ad9a2a717af52c25b6a752dd971aeeb5075") version("2.50.0", sha256="12282e547936f667f85c95d466273dcbaccbd600add72fa5981c0c734ccb1f7d") version("2.49.1", sha256="975e349c7ff8be65d4e63f2a6adf74ca96127628505dbce16c7ba7a3901edc70") version("2.49.0", sha256="fdf4d48bd38abd1059180b123c5d9fdc2781992c783244ddc51ab0f2ef63dd67") version("2.48.0", sha256="60a0fc4fd82b1a05050666ae478da7d79d86305aff1643a57bc09cb5347323b7") + version("2.47.1.2", sha256="ae9032b4c833887b9ddc932ea9eb7e59e713829f6c39f3152fee4caf2f3ba21f") + version("2.47.1.1", sha256="9553e91e0325dfe57856564e9970b3871069f902fb109fcced6ad87151f95be7") version("2.47.2", sha256="d4ca384bf249b755454cd486a26bae76944a7cae3a706b9a7c9298825077cac0") version("2.47.1", sha256="ca3e94c0caa78a91591fe63603d1836196f5294d4baad7cf1d83b229b3a85916") version("2.47.0", sha256="66c862d2ab8bcd6969e9728091dbca54f1f420e97e41424c4ba93ef606088459") @@ -68,6 +73,7 @@ class Mapl(CMakePackage): version("2.41.0", sha256="1142f9395e161174e3ec1654fba8bda1d0bd93edc7438b1927d8f5d7b42a0a86") version("2.40.5", sha256="85b4a4ac0d843398452808b88d7a5c29435aa37b69b91a1f4bee664e9f367b7d") version("2.40.4", sha256="fb843b118d6e56cd4fc4b114c4d6f91956d5c8b3d9389ada56da1dfdbc58904f") + version("2.40.3.1", sha256="1e5a9d6a84d23febe826b1adcd2c2b1681bcc2e61c2959a8bbf4756357e22187") version("2.40.3", sha256="4b82a314c88a035fc2b91395750aa7950d6bee838786178ed16a3f39a1e45519") version("2.40.2", sha256="7327f6f5bce6e09e7f7b930013fba86ee7cbfe8ed4c7c087fc9ab5acbf6640fd") version("2.40.1", sha256="6f40f946fabea6ba73b0764092e495505d220455b191b4e454736a0a25ee058c") @@ -265,6 +271,7 @@ class Mapl(CMakePackage): # ESMF dependency depends_on("esmf@8.6.1:", when="@2.45:") + depends_on("esmf@8.6.1:", when="@=2.40.3.1") depends_on("esmf@8.6.0", when="@2.44") depends_on("esmf@8.5:", when="@2.40:2.43") depends_on("esmf@8.4", when="@2.34:2.39") @@ -419,7 +426,7 @@ def setup_build_environment(self, env): @run_after("build") @on_package_attributes(run_tests=True) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): # The test suite contains a lot of tests. We select only those # that are cheap. Note this requires MPI and 6 processes ctest("--output-on-failure", "-L", "ESSENTIAL") diff --git a/var/spack/repos/builtin/packages/margo/package.py b/var/spack/repos/builtin/packages/margo/package.py deleted file mode 100644 index 399b38d63af4c8..00000000000000 --- a/var/spack/repos/builtin/packages/margo/package.py +++ /dev/null @@ -1,135 +0,0 @@ -# Copyright 2013-2024 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) - -from spack.package import * - - -class Margo(AutotoolsPackage): - """A library that provides Argobots bindings to the Mercury RPC - implementation. This name will be deprecated soon; please use the - mochi-margo package instead.""" - - homepage = "https://github.com/mochi-hpc/mochi-margo" - git = "https://github.com/mochi-hpc/mochi-margo.git" - url = "https://github.com/mochi-hpc/mochi-margo/archive/v0.9.tar.gz" - - maintainers("carns", "mdorier", "fbudin69500") - - version("master", branch="master", deprecated=True) - version( - "0.9.1", - sha256="3fe933f2d758ef23d582bc776e4f8cfae9bf9d0849b8b1f9d73ee024e218f2bc", - deprecated=True, - ) - version( - "0.9", - sha256="a24376f66450cc8fd7a43043e189f8efce5a931585e53c1e2e41894a3e99b517", - deprecated=True, - ) - version( - "0.7", - sha256="492d1afe2e7984fa638614a5d34486d2ff761f5599b5984efd5ae3f55cafde54", - deprecated=True, - ) - version( - "0.7.2", - sha256="0ca796abdb82084813a5de033d92364910b5ad1a0df135534d6b1c36ef627859", - deprecated=True, - ) - version( - "0.7.1", - sha256="eebbe02c47ed4c65ef1d4f23ffdc6a8aa2e2348ca6c51bfc3c4dfbf78fbfc30b", - deprecated=True, - ) - version( - "0.6", - sha256="56feb718da2b155d7277a7b10b669516ebffaa034f811f3665ceed7ad0f19d1b", - deprecated=True, - ) - version( - "0.6.4", - sha256="5ba1c72ee05aa9738d3dc4d6d01bd59790284c6c77b909c5d7756fe7049d6177", - deprecated=True, - ) - version( - "0.6.3", - sha256="5f373cd554edd15cead58bd5d30093bd88d45039d06ff7738eb18b3674287c76", - deprecated=True, - ) - version( - "0.6.2", - sha256="c6a6909439e1d3ba1a1693d8da66057eb7e4ec4b239c04bc7f19fc487c4c58da", - deprecated=True, - ) - version( - "0.6.1", - sha256="80d8d15d0917b5522c31dc2d83136de2313d50ca05c71c5e5ad83c483a3214b7", - deprecated=True, - ) - version( - "0.5", - sha256="d3b768b8300bc2cb87964e74c39b4e8eb9822d8a2e56fc93dc475ddcb1a868e3", - deprecated=True, - ) - version( - "0.5.2", - sha256="73be3acaf012a85a91ac62824c93f5ee1ea0ffe4c25779ece19723f4baf9547d", - deprecated=True, - ) - version( - "0.5.1", - sha256="6fdf58e189538e22341c8361ab069fc80fe5460a6869882359b295a890febad7", - deprecated=True, - ) - version( - "0.4.7", - sha256="596d83b11fb2bd9950fd99c9ab12c14915ab2cda233084ae40ecae1e6c584333", - deprecated=True, - ) - version( - "0.4.6", - sha256="b27447a2050ae61091bae3ff6b4d23a56153947f18847face9f98facbdb4e329", - deprecated=True, - ) - version( - "0.4.5", - sha256="b0d02f73edf180f2393f54c5a980620b8d6dcd42b90efdea6866861824fa49cf", - deprecated=True, - ) - version( - "0.4.4", - sha256="2e2e6e2a8a7d7385e2fe204c113cb149f30847f0b1f48ec8dd708a74280bd89e", - deprecated=True, - ) - version( - "0.4.3", - sha256="61a634d6983bee2ffa06e1e2da4c541cb8f56ddd9dd9f8e04e8044fb38657475", - deprecated=True, - ) - version( - "0.4.2", - sha256="91085e28f50e373b9616e1ae5c3c8d40a19a7d3776259592d8f361766890bcaa", - deprecated=True, - ) - - depends_on("c", type="build") # generated - - depends_on("json-c", when="@0.9:") - depends_on("autoconf@2.65:", type=("build")) - depends_on("m4", type=("build")) - depends_on("automake", type=("build")) - depends_on("libtool", type=("build")) - depends_on("pkgconfig", type=("build")) - depends_on("argobots@1.0:") - # "breadcrumb" support not available in mercury-1.0 - depends_on("mercury@1.0.0:", type=("build", "link", "run"), when="@:0.5.1") - depends_on("mercury@2.0.0:", type=("build", "link", "run"), when="@0.5.2:") - - # dependencies for develop version - depends_on("mercury@master", type=("build", "link", "run"), when="@develop") - - def autoreconf(self, spec, prefix): - sh = which("sh") - sh("./prepare.sh") diff --git a/var/spack/repos/builtin/packages/masa/package.py b/var/spack/repos/builtin/packages/masa/package.py index 3145f4d4f2e6f1..c7086a54a1a887 100644 --- a/var/spack/repos/builtin/packages/masa/package.py +++ b/var/spack/repos/builtin/packages/masa/package.py @@ -19,20 +19,27 @@ class Masa(AutotoolsPackage): license("LGPL-2.1-or-later") version("master", branch="master") + version("0.51.0", tag="0.51.0") + version("0.50.0", tag="0.50.0") + version("0.44.0", tag="0.44.0") + version("0.43.1", tag="0.43.1") + version("0.43.0", tag="0.43.0") + version("0.42.0", tag="0.42.0") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build", when="+fortran") - variant("fortran", default=True, description="Compile with Fortran interfaces") - variant("python", default=True, description="Compile with Python interfaces") + variant("fortran", default=False, description="Compile with Fortran interfaces") + variant("python", default=False, description="Compile with Python interfaces") + depends_on("gettext") + depends_on("metaphysicl") + depends_on("python") depends_on("autoconf", type="build") depends_on("automake", type="build") depends_on("libtool", type="build") - depends_on("swig", type="build") - depends_on("python", when="+python") - depends_on("metaphysicl") + depends_on("swig", type="build", when="+python") def configure_args(self): options = [] diff --git a/var/spack/repos/builtin/packages/maverick/package.py b/var/spack/repos/builtin/packages/maverick/package.py index bce42ca490cd22..7936a61bd32493 100644 --- a/var/spack/repos/builtin/packages/maverick/package.py +++ b/var/spack/repos/builtin/packages/maverick/package.py @@ -24,7 +24,6 @@ class Maverick(MakefilePackage): conflicts("%clang") conflicts("%intel") conflicts("%nag") - conflicts("%pgi") conflicts("%xl") conflicts("%xl_r") diff --git a/var/spack/repos/builtin/packages/mbedtls/package.py b/var/spack/repos/builtin/packages/mbedtls/package.py index 73f463239d026c..2478192bc48f66 100644 --- a/var/spack/repos/builtin/packages/mbedtls/package.py +++ b/var/spack/repos/builtin/packages/mbedtls/package.py @@ -18,13 +18,18 @@ class Mbedtls(MakefilePackage): maintainers("haampie") - license("Apache-2.0 OR GPL-2.0-or-later") + license("Apache-2.0 OR GPL-2.0-or-later", checked_by="wdconinc") # version 3.x - version("3.6.0", sha256="3ecf94fcfdaacafb757786a01b7538a61750ebd85c4b024f56ff8ba1490fcd38") - version("3.3.0", sha256="a22ff38512697b9cd8472faa2ea2d35e320657f6d268def3a64765548b81c3ec") + version("3.6.2", sha256="8b54fb9bcf4d5a7078028e0520acddefb7900b3e66fec7f7175bb5b7d85ccdca") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-45159 + version("3.6.1", sha256="fc8bef0991b43629b7e5319de6f34f13359011105e08e3e16eed3a9fe6ffd3a3") + version("3.6.0", sha256="3ecf94fcfdaacafb757786a01b7538a61750ebd85c4b024f56ff8ba1490fcd38") + version("3.3.0", sha256="a22ff38512697b9cd8472faa2ea2d35e320657f6d268def3a64765548b81c3ec") # version 2.x + version("2.28.9", sha256="e85ea97aaf78dd6c0a5ba2e54dd5932ffa15f39abfc189c26beef7684630c02b") version("2.28.8", sha256="241c68402cef653e586be3ce28d57da24598eb0df13fcdea9d99bfce58717132") version("2.28.2", sha256="1db6d4196178fa9f8264bef5940611cd9febcd5d54ec05f52f1e8400f792b5a4") version("2.7.19", sha256="3da12b1cebe1a25da8365d5349f67db514aefcaa75e26082d7cb2fa3ce9608aa") @@ -79,7 +84,10 @@ class Mbedtls(MakefilePackage): def url_for_version(self, version): if self.spec.satisfies("@:2.28.7,3:3.5"): return f"https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v{version}.tar.gz" - return f"https://github.com/Mbed-TLS/mbedtls/releases/download/v{version}/mbedtls-{version}.tar.bz2" + if self.spec.satisfies("@2.28.8,3.6.0"): + return f"https://github.com/Mbed-TLS/mbedtls/releases/download/v{version}/mbedtls-{version}.tar.bz2" + # release tags for @2.28.9:2,3.6.1: + return f"https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-{version}/mbedtls-{version}.tar.bz2" def flag_handler(self, name, flags): # Compile with PIC, if requested. diff --git a/var/spack/repos/builtin/packages/mcpp/package.py b/var/spack/repos/builtin/packages/mcpp/package.py index 0dd0562ee2d32d..f2ee6652a2c34d 100644 --- a/var/spack/repos/builtin/packages/mcpp/package.py +++ b/var/spack/repos/builtin/packages/mcpp/package.py @@ -12,11 +12,13 @@ class Mcpp(AutotoolsPackage, SourceforgePackage): homepage = "https://sourceforge.net/projects/mcpp/" sourceforge_mirror_path = "mcpp/mcpp/V.2.7.2/mcpp-2.7.2.tar.gz" + git = "https://github.com/jbrandwood/mcpp.git" + # Versions from `git describe --tags` + version("2.7.2-25-g619046f", commit="619046fa0debac3f86ff173098aeb59b8f051d19") version("2.7.2", sha256="3b9b4421888519876c4fc68ade324a3bbd81ceeb7092ecdbbc2055099fcb8864") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") def configure_args(self): config_args = ["--enable-mcpplib", "--disable-static"] diff --git a/var/spack/repos/builtin/packages/mercury/package.py b/var/spack/repos/builtin/packages/mercury/package.py index 9a533cde8c1993..a614623bcefc95 100644 --- a/var/spack/repos/builtin/packages/mercury/package.py +++ b/var/spack/repos/builtin/packages/mercury/package.py @@ -19,6 +19,7 @@ class Mercury(CMakePackage): license("GPL-2.0-only") version("master", branch="master", submodules=True) + version("2.4.0", sha256="8926cd177f6e3c04e8ae1683d42f7c8b27163a93d4d99a305fe497fa8ca86e79") version("2.3.1", sha256="36182d49f2db7e2b075240cab4aaa1d4ec87a7756450c87643ededd1e6f16104") version("2.3.0", sha256="e9e62ce1bb2fd482f0e85ad75fa255d9750c6fed50ba441a03de93b3b8eae742") version("2.2.0", sha256="e66490cf63907c3959bbb2932b5aaf51d96a481b17f0935f409f3a862eff97f6") @@ -160,5 +161,5 @@ def cmake_args(self): def check(self): """Unit tests fail when run in parallel.""" - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test", parallel=False) diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py index 61494f3db6a80e..8bf240409df63a 100644 --- a/var/spack/repos/builtin/packages/mesa/package.py +++ b/var/spack/repos/builtin/packages/mesa/package.py @@ -5,6 +5,7 @@ import sys import spack.build_systems.meson +import spack.variant from spack.package import * diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py index 75e8b15982cfca..4e2f6a79b24e95 100644 --- a/var/spack/repos/builtin/packages/metis/package.py +++ b/var/spack/repos/builtin/packages/metis/package.py @@ -31,7 +31,8 @@ class Metis(CMakePackage, MakefilePackage): version("5.1.0", sha256="76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2") version("4.0.3", sha256="5efa35de80703c1b2c4d0de080fafbcf4e0d363a21149a1ad2f96e0144841a55") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") build_system( conditional("cmake", when="@5:"), conditional("makefile", when="@:4"), default="cmake" diff --git a/var/spack/repos/builtin/packages/mfem/mfem-4.7-sundials-7.patch b/var/spack/repos/builtin/packages/mfem/mfem-4.7-sundials-7.patch new file mode 100644 index 00000000000000..59fc95a3dd2b8a --- /dev/null +++ b/var/spack/repos/builtin/packages/mfem/mfem-4.7-sundials-7.patch @@ -0,0 +1,1129 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 0be4f5d65d..1f8e13a8ec 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -337,7 +337,10 @@ if (MFEM_USE_SUNDIALS) + if (MFEM_USE_HIP) + list(APPEND SUNDIALS_COMPONENTS NVector_Hip) + endif() +- find_package(SUNDIALS REQUIRED ${SUNDIALS_COMPONENTS}) ++ # The Core component was added in SUNDIALS v7, so we treat it as optional in ++ # order to support older versions. ++ find_package(SUNDIALS REQUIRED ${SUNDIALS_COMPONENTS} ++ OPTIONAL_COMPONENTS Core) + endif() + + # SuperLU_DIST can only be enabled in parallel +diff --git a/config/cmake/modules/FindSUNDIALS.cmake b/config/cmake/modules/FindSUNDIALS.cmake +index 9a624a9c51..3617df7b24 100644 +--- a/config/cmake/modules/FindSUNDIALS.cmake ++++ b/config/cmake/modules/FindSUNDIALS.cmake +@@ -31,4 +31,5 @@ mfem_find_package(SUNDIALS SUNDIALS SUNDIALS_DIR + ADD_COMPONENT CVODE "include" cvode/cvode.h "lib" sundials_cvode + ADD_COMPONENT CVODES "include" cvodes/cvodes.h "lib" sundials_cvodes + ADD_COMPONENT ARKODE "include" arkode/arkode.h "lib" sundials_arkode +- ADD_COMPONENT KINSOL "include" kinsol/kinsol.h "lib" sundials_kinsol) ++ ADD_COMPONENT KINSOL "include" kinsol/kinsol.h "lib" sundials_kinsol ++ ADD_COMPONENT Core "include" sundials/sundials_core.h "lib" sundials_core) +diff --git a/config/defaults.mk b/config/defaults.mk +index f107f360de..d89344b9e8 100644 +--- a/config/defaults.mk ++++ b/config/defaults.mk +@@ -284,6 +284,13 @@ endif + ifeq ($(MFEM_USE_HIP),YES) + SUNDIALS_LIB += -lsundials_nvechip + endif ++SUNDIALS_CORE_PAT = $(subst\ ++ @MFEM_DIR@,$(MFEM_DIR),$(SUNDIALS_DIR))/lib*/libsundials_core.* ++ifeq ($(MFEM_USE_SUNDIALS),YES) ++ ifneq ($(wildcard $(SUNDIALS_CORE_PAT)),) ++ SUNDIALS_LIB += -lsundials_core ++ endif ++endif + # If SUNDIALS was built with KLU: + # MFEM_USE_SUITESPARSE = YES + +diff --git a/linalg/sundials.cpp b/linalg/sundials.cpp +index 1f4c141477..c8982387aa 100644 +--- a/linalg/sundials.cpp ++++ b/linalg/sundials.cpp +@@ -95,7 +95,7 @@ MFEM_DEPRECATED void* CVodeCreate(int lmm, SUNContext) + + /// (DEPRECATED) Wrapper function for backwards compatibility with SUNDIALS + /// version < 6 +-MFEM_DEPRECATED void* ARKStepCreate(ARKRhsFn fe, ARKRhsFn fi, realtype t0, ++MFEM_DEPRECATED void* ARKStepCreate(ARKRhsFn fe, ARKRhsFn fi, sunrealtype t0, + N_Vector y0, SUNContext) + { + return ARKStepCreate(fe, fi, t0, y0); +@@ -127,7 +127,7 @@ MFEM_DEPRECATED N_Vector N_VNewEmpty_Parallel(MPI_Comm comm, + /// (DEPRECATED) Wrapper function for backwards compatibility with SUNDIALS + /// version < 6 + MFEM_DEPRECATED N_Vector SUN_Hip_OR_Cuda(N_VNewWithMemHelp)(sunindextype length, +- booleantype use_managed_mem, ++ sunbooleantype use_managed_mem, + SUNMemoryHelper helper, + SUNContext) + { +@@ -157,6 +157,16 @@ MFEM_DEPRECATED N_Vector N_VMake_MPIPlusX(MPI_Comm comm, N_Vector local_vector, + + #endif // SUNDIALS_VERSION_MAJOR < 6 + ++#if MFEM_SUNDIALS_VERSION < 70100 ++#define MFEM_ARKode(FUNC) ARKStep##FUNC ++#else ++#define MFEM_ARKode(FUNC) ARKode##FUNC ++#endif ++ ++// Macro STR(): expand the argument and add double quotes ++#define STR1(s) #s ++#define STR(s) STR1(s) ++ + + namespace mfem + { +@@ -187,11 +197,21 @@ SundialsMemHelper &Sundials::GetMemHelper() + Sundials::Sundials() + { + #ifdef MFEM_USE_MPI +- MPI_Comm communicator = MPI_COMM_WORLD; ++ int mpi_initialized = 0; ++ MPI_Initialized(&mpi_initialized); ++ MPI_Comm communicator = mpi_initialized ? MPI_COMM_WORLD : MPI_COMM_NULL; ++#if SUNDIALS_VERSION_MAJOR < 7 + int return_val = SUNContext_Create((void*) &communicator, &context); + #else ++ int return_val = SUNContext_Create(communicator, &context); ++#endif ++#else // #ifdef MFEM_USE_MPI ++#if SUNDIALS_VERSION_MAJOR < 7 + int return_val = SUNContext_Create(nullptr, &context); ++#else ++ int return_val = SUNContext_Create((SUNComm)(0), &context); + #endif ++#endif // #ifdef MFEM_USE_MPI + MFEM_VERIFY(return_val == 0, "Call to SUNContext_Create failed"); + SundialsMemHelper actual_helper(context); + memHelper = std::move(actual_helper); +@@ -250,7 +270,11 @@ int SundialsMemHelper::SundialsMemHelper_Alloc(SUNMemoryHelper helper, + #endif + ) + { ++#if (SUNDIALS_VERSION_MAJOR < 7) + SUNMemory sunmem = SUNMemoryNewEmpty(); ++#else ++ SUNMemory sunmem = SUNMemoryNewEmpty(helper->sunctx); ++#endif + + sunmem->ptr = NULL; + sunmem->own = SUNTRUE; +@@ -631,7 +655,7 @@ static int LSFree(SUNLinearSolver LS) + // --------------------------------------------------------------------------- + // CVODE interface + // --------------------------------------------------------------------------- +-int CVODESolver::RHS(realtype t, const N_Vector y, N_Vector ydot, ++int CVODESolver::RHS(sunrealtype t, const N_Vector y, N_Vector ydot, + void *user_data) + { + // At this point the up-to-date data for N_Vector y and ydot is on the device. +@@ -648,7 +672,8 @@ int CVODESolver::RHS(realtype t, const N_Vector y, N_Vector ydot, + return (0); + } + +-int CVODESolver::root(realtype t, N_Vector y, realtype *gout, void *user_data) ++int CVODESolver::root(sunrealtype t, N_Vector y, sunrealtype *gout, ++ void *user_data) + { + CVODESolver *self = static_cast(user_data); + +@@ -668,8 +693,9 @@ void CVODESolver::SetRootFinder(int components, RootFunction func) + MFEM_VERIFY(flag == CV_SUCCESS, "error in SetRootFinder()"); + } + +-int CVODESolver::LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, +- booleantype jok, booleantype *jcur, realtype gamma, ++int CVODESolver::LinSysSetup(sunrealtype t, N_Vector y, N_Vector fy, ++ SUNMatrix A, sunbooleantype jok, ++ sunbooleantype *jcur, sunrealtype gamma, + void*, N_Vector, N_Vector, N_Vector) + { + // Get data from N_Vectors +@@ -683,7 +709,7 @@ int CVODESolver::LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, + } + + int CVODESolver::LinSysSolve(SUNLinearSolver LS, SUNMatrix, N_Vector x, +- N_Vector b, realtype tol) ++ N_Vector b, sunrealtype tol) + { + SundialsNVector mfem_x(x); + const SundialsNVector mfem_b(b); +@@ -859,7 +885,7 @@ void CVODESolver::UseSundialsLinearSolver() + if (LSA != NULL) { SUNLinSolFree(LSA); LSA = NULL; } + + // Create linear solver +- LSA = SUNLinSol_SPGMR(*Y, PREC_NONE, 0, Sundials::GetContext()); ++ LSA = SUNLinSol_SPGMR(*Y, SUN_PREC_NONE, 0, Sundials::GetContext()); + MFEM_VERIFY(LSA, "error in SUNLinSol_SPGMR()"); + + // Attach linear solver +@@ -1150,7 +1176,7 @@ void CVODESSolver::UseSundialsLinearSolverB() + if (LSB != NULL) { SUNLinSolFree(LSB); LSB = NULL; } + + // Set default linear solver (Newton is the default Nonlinear Solver) +- LSB = SUNLinSol_SPGMR(*yB, PREC_NONE, 0, Sundials::GetContext()); ++ LSB = SUNLinSol_SPGMR(*yB, SUN_PREC_NONE, 0, Sundials::GetContext()); + MFEM_VERIFY(LSB, "error in SUNLinSol_SPGMR()"); + + /* Attach the matrix and linear solver */ +@@ -1158,11 +1184,11 @@ void CVODESSolver::UseSundialsLinearSolverB() + MFEM_VERIFY(flag == CV_SUCCESS, "error in CVodeSetLinearSolverB()"); + } + +-int CVODESSolver::LinSysSetupB(realtype t, N_Vector y, N_Vector yB, ++int CVODESSolver::LinSysSetupB(sunrealtype t, N_Vector y, N_Vector yB, + N_Vector fyB, SUNMatrix AB, +- booleantype jokB, booleantype *jcurB, +- realtype gammaB, void *user_data, N_Vector tmp1, +- N_Vector tmp2, N_Vector tmp3) ++ sunbooleantype jokB, sunbooleantype *jcurB, ++ sunrealtype gammaB, void *user_data, ++ N_Vector tmp1, N_Vector tmp2, N_Vector tmp3) + { + // Get data from N_Vectors + const SundialsNVector mfem_y(y); +@@ -1178,7 +1204,7 @@ int CVODESSolver::LinSysSetupB(realtype t, N_Vector y, N_Vector yB, + } + + int CVODESSolver::LinSysSolveB(SUNLinearSolver LS, SUNMatrix AB, N_Vector yB, +- N_Vector Rb, realtype tol) ++ N_Vector Rb, sunrealtype tol) + { + SundialsNVector mfem_yB(yB); + const SundialsNVector mfem_Rb(Rb); +@@ -1216,7 +1242,7 @@ void CVODESSolver::SetWFTolerances(EWTFunction func) + + // CVODESSolver static functions + +-int CVODESSolver::RHSQ(realtype t, const N_Vector y, N_Vector qdot, ++int CVODESSolver::RHSQ(sunrealtype t, const N_Vector y, N_Vector qdot, + void *user_data) + { + CVODESSolver *self = static_cast(user_data); +@@ -1229,7 +1255,7 @@ int CVODESSolver::RHSQ(realtype t, const N_Vector y, N_Vector qdot, + return 0; + } + +-int CVODESSolver::RHSQB(realtype t, N_Vector y, N_Vector yB, N_Vector qBdot, ++int CVODESSolver::RHSQB(sunrealtype t, N_Vector y, N_Vector yB, N_Vector qBdot, + void *user_dataB) + { + CVODESSolver *self = static_cast(user_dataB); +@@ -1243,7 +1269,7 @@ int CVODESSolver::RHSQB(realtype t, N_Vector y, N_Vector yB, N_Vector qBdot, + return 0; + } + +-int CVODESSolver::RHSB(realtype t, N_Vector y, N_Vector yB, N_Vector yBdot, ++int CVODESSolver::RHSB(sunrealtype t, N_Vector y, N_Vector yB, N_Vector yBdot, + void *user_dataB) + { + CVODESSolver *self = static_cast(user_dataB); +@@ -1341,46 +1367,67 @@ CVODESSolver::~CVODESSolver() + // ARKStep interface + // --------------------------------------------------------------------------- + +-int ARKStepSolver::RHS1(realtype t, const N_Vector y, N_Vector ydot, ++int ARKStepSolver::RHS1(sunrealtype t, const N_Vector y, N_Vector result, + void *user_data) + { + // Get data from N_Vectors + const SundialsNVector mfem_y(y); +- SundialsNVector mfem_ydot(ydot); ++ SundialsNVector mfem_result(result); + ARKStepSolver *self = static_cast(user_data); + +- // Compute f(t, y) in y' = f(t, y) or fe(t, y) in y' = fe(t, y) + fi(t, y) ++ // Compute either f(t, y) in one of ++ // 1. y' = f(t, y) ++ // 2. M y' = f(t, y) ++ // or fe(t, y) in one of ++ // 1. y' = fe(t, y) + fi(t, y) ++ // 2. M y' = fe(t, y) + fi(t, y) + self->f->SetTime(t); + if (self->rk_type == IMEX) + { + self->f->SetEvalMode(TimeDependentOperator::ADDITIVE_TERM_1); + } +- self->f->Mult(mfem_y, mfem_ydot); ++ if (self->f->isExplicit()) // ODE is in form 1 ++ { ++ self->f->Mult(mfem_y, mfem_result); ++ } ++ else // ODE is in form 2 ++ { ++ self->f->ExplicitMult(mfem_y, mfem_result); ++ } + + // Return success + return (0); + } + +-int ARKStepSolver::RHS2(realtype t, const N_Vector y, N_Vector ydot, ++int ARKStepSolver::RHS2(sunrealtype t, const N_Vector y, N_Vector result, + void *user_data) + { + // Get data from N_Vectors + const SundialsNVector mfem_y(y); +- SundialsNVector mfem_ydot(ydot); ++ SundialsNVector mfem_result(result); + ARKStepSolver *self = static_cast(user_data); + +- // Compute fi(t, y) in y' = fe(t, y) + fi(t, y) ++ // Compute fi(t, y) in one of ++ // 1. y' = fe(t, y) + fi(t, y) (ODE is expressed in EXPLICIT form) ++ // 2. M y' = fe(t, y) + fi(y, t) (ODE is expressed in IMPLICIT form) + self->f->SetTime(t); + self->f->SetEvalMode(TimeDependentOperator::ADDITIVE_TERM_2); +- self->f->Mult(mfem_y, mfem_ydot); ++ if (self->f->isExplicit()) ++ { ++ self->f->Mult(mfem_y, mfem_result); ++ } ++ else ++ { ++ self->f->ExplicitMult(mfem_y, mfem_result); ++ } + + // Return success + return (0); + } + +-int ARKStepSolver::LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, +- SUNMatrix, booleantype jok, booleantype *jcur, +- realtype gamma, ++int ARKStepSolver::LinSysSetup(sunrealtype t, N_Vector y, N_Vector fy, ++ SUNMatrix A, SUNMatrix, sunbooleantype jok, ++ sunbooleantype *jcur, sunrealtype gamma, + void*, N_Vector, N_Vector, N_Vector) + { + // Get data from N_Vectors +@@ -1398,7 +1445,7 @@ int ARKStepSolver::LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, + } + + int ARKStepSolver::LinSysSolve(SUNLinearSolver LS, SUNMatrix, N_Vector x, +- N_Vector b, realtype tol) ++ N_Vector b, sunrealtype tol) + { + SundialsNVector mfem_x(x); + const SundialsNVector mfem_b(b); +@@ -1412,7 +1459,7 @@ int ARKStepSolver::LinSysSolve(SUNLinearSolver LS, SUNMatrix, N_Vector x, + return (self->f->SUNImplicitSolve(mfem_b, mfem_x, tol)); + } + +-int ARKStepSolver::MassSysSetup(realtype t, SUNMatrix M, ++int ARKStepSolver::MassSysSetup(sunrealtype t, SUNMatrix M, + void*, N_Vector, N_Vector, N_Vector) + { + ARKStepSolver *self = static_cast(GET_CONTENT(M)); +@@ -1423,7 +1470,7 @@ int ARKStepSolver::MassSysSetup(realtype t, SUNMatrix M, + } + + int ARKStepSolver::MassSysSolve(SUNLinearSolver LS, SUNMatrix, N_Vector x, +- N_Vector b, realtype tol) ++ N_Vector b, sunrealtype tol) + { + SundialsNVector mfem_x(x); + const SundialsNVector mfem_b(b); +@@ -1443,7 +1490,7 @@ int ARKStepSolver::MassMult1(SUNMatrix M, N_Vector x, N_Vector v) + return (self->f->SUNMassMult(mfem_x, mfem_v)); + } + +-int ARKStepSolver::MassMult2(N_Vector x, N_Vector v, realtype t, ++int ARKStepSolver::MassMult2(N_Vector x, N_Vector v, sunrealtype t, + void* mtimes_data) + { + const SundialsNVector mfem_x(x); +@@ -1514,7 +1561,7 @@ void ARKStepSolver::Init(TimeDependentOperator &f_) + // Free existing solver memory and re-create with new vector size + if (resize) + { +- ARKStepFree(&sundials_mem); ++ MFEM_ARKode(Free)(&sundials_mem); + sundials_mem = NULL; + } + } +@@ -1552,12 +1599,15 @@ void ARKStepSolver::Init(TimeDependentOperator &f_) + MFEM_VERIFY(sundials_mem, "error in ARKStepCreate()"); + + // Attach the ARKStepSolver as user-defined data +- flag = ARKStepSetUserData(sundials_mem, this); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetUserData()"); ++ flag = MFEM_ARKode(SetUserData)(sundials_mem, this); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetUserData)) "()"); + + // Set default tolerances +- flag = ARKStepSStolerances(sundials_mem, default_rel_tol, default_abs_tol); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetSStolerances()"); ++ flag = MFEM_ARKode(SStolerances)(sundials_mem, default_rel_tol, ++ default_abs_tol); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SStolerances)) "()"); + + // If implicit, attach MFEM linear solver by default + if (use_implicit) { UseMFEMLinearSolver(); } +@@ -1567,7 +1617,7 @@ void ARKStepSolver::Init(TimeDependentOperator &f_) + reinit = true; + } + +-void ARKStepSolver::Step(Vector &x, double &t, double &dt) ++void ARKStepSolver::Step(Vector &x, real_t &t, real_t &dt) + { + Y->MakeRef(x, 0, x.Size()); + MFEM_VERIFY(Y->Size() == x.Size(), "size mismatch"); +@@ -1596,15 +1646,16 @@ void ARKStepSolver::Step(Vector &x, double &t, double &dt) + + // Integrate the system + double tout = t + dt; +- flag = ARKStepEvolve(sundials_mem, tout, *Y, &t, step_mode); +- MFEM_VERIFY(flag >= 0, "error in ARKStepEvolve()"); ++ flag = MFEM_ARKode(Evolve)(sundials_mem, tout, *Y, &t, step_mode); ++ MFEM_VERIFY(flag >= 0, "error in " STR(MFEM_ARKode(Evolve)) "()"); + + // Make sure host is up to date + Y->HostRead(); + + // Return the last incremental step size +- flag = ARKStepGetLastStep(sundials_mem, &dt); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepGetLastStep()"); ++ flag = MFEM_ARKode(GetLastStep)(sundials_mem, &dt); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(GetLastStep)) "()"); + } + + void ARKStepSolver::UseMFEMLinearSolver() +@@ -1630,12 +1681,14 @@ void ARKStepSolver::UseMFEMLinearSolver() + A->ops->destroy = MatDestroy; + + // Attach the linear solver and matrix +- flag = ARKStepSetLinearSolver(sundials_mem, LSA, A); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetLinearSolver()"); ++ flag = MFEM_ARKode(SetLinearSolver)(sundials_mem, LSA, A); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetLinearSolver)) "()"); + + // Set the linear system evaluation function +- flag = ARKStepSetLinSysFn(sundials_mem, ARKStepSolver::LinSysSetup); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetLinSysFn()"); ++ flag = MFEM_ARKode(SetLinSysFn)(sundials_mem, ARKStepSolver::LinSysSetup); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetLinSysFn)) "()"); + } + + void ARKStepSolver::UseSundialsLinearSolver() +@@ -1645,12 +1698,13 @@ void ARKStepSolver::UseSundialsLinearSolver() + if (LSA != NULL) { SUNLinSolFree(LSA); LSA = NULL; } + + // Create linear solver +- LSA = SUNLinSol_SPGMR(*Y, PREC_NONE, 0, Sundials::GetContext()); ++ LSA = SUNLinSol_SPGMR(*Y, SUN_PREC_NONE, 0, Sundials::GetContext()); + MFEM_VERIFY(LSA, "error in SUNLinSol_SPGMR()"); + + // Attach linear solver +- flag = ARKStepSetLinearSolver(sundials_mem, LSA, NULL); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetLinearSolver()"); ++ flag = MFEM_ARKode(SetLinearSolver)(sundials_mem, LSA, NULL); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetLinearSolver)) "()"); + } + + void ARKStepSolver::UseMFEMMassLinearSolver(int tdep) +@@ -1666,7 +1720,7 @@ void ARKStepSolver::UseMFEMMassLinearSolver(int tdep) + LSM->content = this; + LSM->ops->gettype = LSGetType; + LSM->ops->solve = ARKStepSolver::MassSysSolve; +- LSA->ops->free = LSFree; ++ LSM->ops->free = LSFree; + + M = SUNMatNewEmpty(Sundials::GetContext()); + MFEM_VERIFY(M, "error in SUNMatNewEmpty()"); +@@ -1677,12 +1731,17 @@ void ARKStepSolver::UseMFEMMassLinearSolver(int tdep) + M->ops->destroy = MatDestroy; + + // Attach the linear solver and matrix +- flag = ARKStepSetMassLinearSolver(sundials_mem, LSM, M, tdep); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetLinearSolver()"); ++ flag = MFEM_ARKode(SetMassLinearSolver)(sundials_mem, LSM, M, tdep); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetMassLinearSolver)) "()"); + + // Set the linear system function +- flag = ARKStepSetMassFn(sundials_mem, ARKStepSolver::MassSysSetup); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetMassFn()"); ++ flag = MFEM_ARKode(SetMassFn)(sundials_mem, ARKStepSolver::MassSysSetup); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetMassFn)) "()"); ++ ++ // Check that the ODE is not expressed in EXPLICIT form ++ MFEM_VERIFY(!f->isExplicit(), "ODE operator is expressed in EXPLICIT form") + } + + void ARKStepSolver::UseSundialsMassLinearSolver(int tdep) +@@ -1692,17 +1751,22 @@ void ARKStepSolver::UseSundialsMassLinearSolver(int tdep) + if (LSM != NULL) { SUNLinSolFree(LSM); LSM = NULL; } + + // Create linear solver +- LSM = SUNLinSol_SPGMR(*Y, PREC_NONE, 0, Sundials::GetContext()); ++ LSM = SUNLinSol_SPGMR(*Y, SUN_PREC_NONE, 0, Sundials::GetContext()); + MFEM_VERIFY(LSM, "error in SUNLinSol_SPGMR()"); + + // Attach linear solver +- flag = ARKStepSetMassLinearSolver(sundials_mem, LSM, NULL, tdep); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetMassLinearSolver()"); ++ flag = MFEM_ARKode(SetMassLinearSolver)(sundials_mem, LSM, NULL, tdep); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetMassLinearSolver)) "()"); + + // Attach matrix multiplication function +- flag = ARKStepSetMassTimes(sundials_mem, NULL, ARKStepSolver::MassMult2, +- this); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetMassTimes()"); ++ flag = MFEM_ARKode(SetMassTimes)(sundials_mem, NULL, ++ ARKStepSolver::MassMult2, this); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetMassTimes)) "()"); ++ ++ // Check that the ODE is not expressed in EXPLICIT form ++ MFEM_VERIFY(!f->isExplicit(), "ODE operator is expressed in EXPLICIT form") + } + + void ARKStepSolver::SetStepMode(int itask) +@@ -1712,20 +1776,23 @@ void ARKStepSolver::SetStepMode(int itask) + + void ARKStepSolver::SetSStolerances(double reltol, double abstol) + { +- flag = ARKStepSStolerances(sundials_mem, reltol, abstol); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSStolerances()"); ++ flag = MFEM_ARKode(SStolerances)(sundials_mem, reltol, abstol); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SStolerances)) "()"); + } + + void ARKStepSolver::SetMaxStep(double dt_max) + { +- flag = ARKStepSetMaxStep(sundials_mem, dt_max); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetMaxStep()"); ++ flag = MFEM_ARKode(SetMaxStep)(sundials_mem, dt_max); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetMaxStep)) "()"); + } + + void ARKStepSolver::SetOrder(int order) + { +- flag = ARKStepSetOrder(sundials_mem, order); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetOrder()"); ++ flag = MFEM_ARKode(SetOrder)(sundials_mem, order); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetOrder)) "()"); + } + + void ARKStepSolver::SetERKTableNum(ARKODE_ERKTableID table_id) +@@ -1749,8 +1816,9 @@ void ARKStepSolver::SetIMEXTableNum(ARKODE_ERKTableID etable_id, + + void ARKStepSolver::SetFixedStep(double dt) + { +- flag = ARKStepSetFixedStep(sundials_mem, dt); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepSetFixedStep()"); ++ flag = MFEM_ARKode(SetFixedStep)(sundials_mem, dt); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(SetFixedStep)) "()"); + } + + void ARKStepSolver::PrintInfo() const +@@ -1772,18 +1840,19 @@ void ARKStepSolver::PrintInfo() const + &netfails); + MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepGetTimestepperStats()"); + +- flag = ARKStepGetStepStats(sundials_mem, +- &nsteps, +- &hinused, +- &hlast, +- &hcur, +- &tcur); ++ flag = MFEM_ARKode(GetStepStats)(sundials_mem, ++ &nsteps, ++ &hinused, ++ &hlast, ++ &hcur, ++ &tcur); + + // Get nonlinear solver stats +- flag = ARKStepGetNonlinSolvStats(sundials_mem, +- &nniters, +- &nncfails); +- MFEM_VERIFY(flag == ARK_SUCCESS, "error in ARKStepGetNonlinSolvStats()"); ++ flag = MFEM_ARKode(GetNonlinSolvStats)(sundials_mem, ++ &nniters, ++ &nncfails); ++ MFEM_VERIFY(flag == ARK_SUCCESS, ++ "error in " STR(MFEM_ARKode(GetNonlinSolvStats)) "()"); + + mfem::out << + "ARKStep:\n" +@@ -1811,7 +1880,7 @@ ARKStepSolver::~ARKStepSolver() + SUNMatDestroy(A); + SUNLinSolFree(LSA); + SUNNonlinSolFree(NLS); +- ARKStepFree(&sundials_mem); ++ MFEM_ARKode(Free)(&sundials_mem); + } + + // --------------------------------------------------------------------------- +@@ -1834,7 +1903,7 @@ int KINSolver::Mult(const N_Vector u, N_Vector fu, void *user_data) + + // Wrapper for computing Jacobian-vector products + int KINSolver::GradientMult(N_Vector v, N_Vector Jv, N_Vector u, +- booleantype *new_u, void *user_data) ++ sunbooleantype *new_u, void *user_data) + { + const SundialsNVector mfem_v(v); + SundialsNVector mfem_Jv(Jv); +@@ -1874,7 +1943,7 @@ int KINSolver::LinSysSetup(N_Vector u, N_Vector, SUNMatrix J, + + // Wrapper for solving linear systems J u = b + int KINSolver::LinSysSolve(SUNLinearSolver LS, SUNMatrix, N_Vector u, +- N_Vector b, realtype) ++ N_Vector b, sunrealtype) + { + SundialsNVector mfem_u(u), mfem_b(b); + KINSolver *self = static_cast(GET_CONTENT(LS)); +@@ -1926,28 +1995,36 @@ int KINSolver::PrecSolve(N_Vector uu, + + KINSolver::KINSolver(int strategy, bool oper_grad) + : global_strategy(strategy), use_oper_grad(oper_grad), y_scale(NULL), +- f_scale(NULL), jacobian(NULL), maa(0) ++ f_scale(NULL), jacobian(NULL) + { + Y = new SundialsNVector(); + y_scale = new SundialsNVector(); + f_scale = new SundialsNVector(); + + // Default abs_tol and print_level ++#if MFEM_SUNDIALS_VERSION < 70000 + abs_tol = pow(UNIT_ROUNDOFF, 1.0/3.0); ++#else ++ abs_tol = pow(SUN_UNIT_ROUNDOFF, 1.0/3.0); ++#endif + print_level = 0; + } + + #ifdef MFEM_USE_MPI + KINSolver::KINSolver(MPI_Comm comm, int strategy, bool oper_grad) + : global_strategy(strategy), use_oper_grad(oper_grad), y_scale(NULL), +- f_scale(NULL), jacobian(NULL), maa(0) ++ f_scale(NULL), jacobian(NULL) + { + Y = new SundialsNVector(comm); + y_scale = new SundialsNVector(comm); + f_scale = new SundialsNVector(comm); + + // Default abs_tol and print_level ++#if MFEM_SUNDIALS_VERSION < 70000 + abs_tol = pow(UNIT_ROUNDOFF, 1.0/3.0); ++#else ++ abs_tol = pow(SUN_UNIT_ROUNDOFF, 1.0/3.0); ++#endif + print_level = 0; + } + #endif +@@ -2019,11 +2096,22 @@ void KINSolver::SetOperator(const Operator &op) + sundials_mem = KINCreate(Sundials::GetContext()); + MFEM_VERIFY(sundials_mem, "Error in KINCreate()."); + +- // Set number of acceleration vectors +- if (maa > 0) ++ // Enable Anderson Acceleration ++ if (aa_n > 0) + { +- flag = KINSetMAA(sundials_mem, maa); ++ flag = KINSetMAA(sundials_mem, aa_n); + MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetMAA()"); ++ ++ flag = KINSetDelayAA(sundials_mem, aa_delay); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDelayAA()"); ++ ++ flag = KINSetDampingAA(sundials_mem, aa_damping); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDampingAA()"); ++ ++#if SUNDIALS_VERSION_MAJOR >= 6 ++ flag = KINSetOrthAA(sundials_mem, aa_orth); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetOrthAA()"); ++#endif + } + + // Initialize KINSOL +@@ -2034,6 +2122,9 @@ void KINSolver::SetOperator(const Operator &op) + flag = KINSetUserData(sundials_mem, this); + MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetUserData()"); + ++ flag = KINSetDamping(sundials_mem, fp_damping); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDamping()"); ++ + // Set the linear solver + if (prec || jfnk) + { +@@ -2045,7 +2136,7 @@ void KINSolver::SetOperator(const Operator &op) + if (A != NULL) { SUNMatDestroy(A); A = NULL; } + if (LSA != NULL) { SUNLinSolFree(LSA); LSA = NULL; } + +- LSA = SUNLinSol_SPGMR(*Y, PREC_NONE, 0, Sundials::GetContext()); ++ LSA = SUNLinSol_SPGMR(*Y, SUN_PREC_NONE, 0, Sundials::GetContext()); + MFEM_VERIFY(LSA, "error in SUNLinSol_SPGMR()"); + + flag = KINSetLinearSolver(sundials_mem, LSA, NULL); +@@ -2114,12 +2205,12 @@ void KINSolver::SetJFNKSolver(Solver &solver) + if (LSA != NULL) { SUNLinSolFree(LSA); LSA = NULL; } + + // Setup FGMRES +- LSA = SUNLinSol_SPFGMR(*Y, prec ? PREC_RIGHT : PREC_NONE, maxli, ++ LSA = SUNLinSol_SPFGMR(*Y, prec ? SUN_PREC_RIGHT : SUN_PREC_NONE, maxli, + Sundials::GetContext()); + MFEM_VERIFY(LSA, "error in SUNLinSol_SPFGMR()"); + + flag = SUNLinSol_SPFGMRSetMaxRestarts(LSA, maxlrs); +- MFEM_VERIFY(flag == SUNLS_SUCCESS, "error in SUNLinSol_SPFGMR()"); ++ MFEM_VERIFY(flag == SUN_SUCCESS, "error in SUNLinSol_SPFGMR()"); + + flag = KINSetLinearSolver(sundials_mem, LSA, NULL); + MFEM_VERIFY(flag == KIN_SUCCESS, "error in KINSetLinearSolver()"); +@@ -2145,15 +2236,52 @@ void KINSolver::SetMaxSetupCalls(int max_calls) + MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetMaxSetupCalls()"); + } + +-void KINSolver::SetMAA(int m_aa) ++void KINSolver::EnableAndersonAcc(int n, int orth, int delay, double damping) + { +- // Store internally as maa must be set before calling KINInit() to +- // set the maximum acceleration space size. +- maa = m_aa; +- if (sundials_mem) ++ if (sundials_mem != nullptr) + { +- flag = KINSetMAA(sundials_mem, maa); ++ if (aa_n < n) ++ { ++ MFEM_ABORT("Subsequent calls to EnableAndersonAcc() must set" ++ " the subspace size to less or equal to the initially requested size." ++ " If SetOperator() has already been called, the subspace size can't be" ++ " increased."); ++ } ++ ++ flag = KINSetMAA(sundials_mem, n); + MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetMAA()"); ++ ++ flag = KINSetDelayAA(sundials_mem, delay); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDelayAA()"); ++ ++ flag = KINSetDampingAA(sundials_mem, damping); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDampingAA()"); ++ ++#if SUNDIALS_VERSION_MAJOR >= 6 ++ flag = KINSetOrthAA(sundials_mem, orth); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetOrthAA()"); ++#else ++ if (orth != KIN_ORTH_MGS) ++ { ++ MFEM_WARNING("SUNDIALS < v6 does not support setting the Anderson" ++ " acceleration orthogonalization routine!"); ++ } ++#endif ++ } ++ ++ aa_n = n; ++ aa_delay = delay; ++ aa_damping = damping; ++ aa_orth = orth; ++} ++ ++void KINSolver::SetDamping(double damping) ++{ ++ fp_damping = damping; ++ if (sundials_mem) ++ { ++ flag = KINSetDamping(sundials_mem, fp_damping); ++ MFEM_ASSERT(flag == KIN_SUCCESS, "error in KINSetDamping()"); + } + } + +@@ -2239,18 +2367,21 @@ void KINSolver::Mult(Vector &x, + + if (rank == 0) + { ++#if MFEM_SUNDIALS_VERSION < 70000 + flag = KINSetPrintLevel(sundials_mem, print_level); + MFEM_VERIFY(flag == KIN_SUCCESS, "KINSetPrintLevel() failed!"); ++#endif ++ // NOTE: there is no KINSetPrintLevel in SUNDIALS v7! + + #ifdef SUNDIALS_BUILD_WITH_MONITORING + if (jfnk && print_level) + { + flag = SUNLinSolSetInfoFile_SPFGMR(LSA, stdout); +- MFEM_VERIFY(flag == SUNLS_SUCCESS, ++ MFEM_VERIFY(flag == SUN_SUCCESS, + "error in SUNLinSolSetInfoFile_SPFGMR()"); + + flag = SUNLinSolSetPrintLevel_SPFGMR(LSA, 1); +- MFEM_VERIFY(flag == SUNLS_SUCCESS, ++ MFEM_VERIFY(flag == SUN_SUCCESS, + "error in SUNLinSolSetPrintLevel_SPFGMR()"); + } + #endif +diff --git a/linalg/sundials.hpp b/linalg/sundials.hpp +index f34b4deaf7..08a908c24c 100644 +--- a/linalg/sundials.hpp ++++ b/linalg/sundials.hpp +@@ -54,6 +54,10 @@ + + #include + ++#define MFEM_SUNDIALS_VERSION \ ++ (SUNDIALS_VERSION_MAJOR*10000 + SUNDIALS_VERSION_MINOR*100 + \ ++ SUNDIALS_VERSION_PATCH) ++ + #if (SUNDIALS_VERSION_MAJOR < 6) + + /// (DEPRECATED) Map SUNDIALS version >= 6 datatypes and constants to +@@ -68,7 +72,30 @@ constexpr ARKODE_ERKTableID ARKODE_FEHLBERG_13_7_8 = FEHLBERG_13_7_8; + /// arbitrary type for more compact backwards compatibility + using SUNContext = void*; + +-#endif // SUNDIALS_VERSION_MAJOR < 6 ++/// 'sunrealtype' was first introduced in v6.0.0 ++typedef realtype sunrealtype; ++/// 'sunbooleantype' was first introduced in v6.0.0 ++typedef booleantype sunbooleantype; ++ ++/// New constant names introduced in v6.0.0 ++enum { SUN_PREC_NONE, SUN_PREC_LEFT, SUN_PREC_RIGHT, SUN_PREC_BOTH }; ++ ++// KIN_ORTH_MGS was introduced in SUNDIALS v6; here, we define it just so that ++// it can be used as the default option in the second parameter of ++// KINSolver::EnableAndersonAcc -- the actual value of the parameter will be ++// ignored when using SUNDIALS < v6. ++#define KIN_ORTH_MGS 0 ++ ++#endif // #if SUNDIALS_VERSION_MAJOR < 6 ++ ++#if (SUNDIALS_VERSION_MAJOR < 7) ++ ++/** @brief The enum constant SUN_SUCCESS was added in v7 as a replacement of ++ various *_SUCCESS macros that were removed in v7. */ ++enum { SUN_SUCCESS = 0 }; ++ ++#endif // #if SUNDIALS_VERSION_MAJOR < 7 ++ + + namespace mfem + { +@@ -238,7 +265,14 @@ public: + + #ifdef MFEM_USE_MPI + /// Returns the MPI communicator for the internal N_Vector x. +- inline MPI_Comm GetComm() const { return *static_cast(N_VGetCommunicator(x)); } ++ inline MPI_Comm GetComm() const ++ { ++#if SUNDIALS_VERSION_MAJOR < 7 ++ return *static_cast(N_VGetCommunicator(x)); ++#else ++ return N_VGetCommunicator(x); ++#endif ++ } + + /// Returns the MPI global length for the internal N_Vector x. + inline long GlobalSize() const { return N_VGetLength(x); } +@@ -390,24 +424,26 @@ protected: + int root_components; /// Number of components in gout + + /// Wrapper to compute the ODE rhs function. +- static int RHS(realtype t, const N_Vector y, N_Vector ydot, void *user_data); ++ static int RHS(sunrealtype t, const N_Vector y, N_Vector ydot, ++ void *user_data); + + /// Setup the linear system $ A x = b $. +- static int LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, +- booleantype jok, booleantype *jcur, +- realtype gamma, void *user_data, N_Vector tmp1, ++ static int LinSysSetup(sunrealtype t, N_Vector y, N_Vector fy, SUNMatrix A, ++ sunbooleantype jok, sunbooleantype *jcur, ++ sunrealtype gamma, void *user_data, N_Vector tmp1, + N_Vector tmp2, N_Vector tmp3); + + /// Solve the linear system $ A x = b $. + static int LinSysSolve(SUNLinearSolver LS, SUNMatrix A, N_Vector x, +- N_Vector b, realtype tol); ++ N_Vector b, sunrealtype tol); + + /// Prototype to define root finding for CVODE +- static int root(realtype t, N_Vector y, realtype *gout, void *user_data); ++ static int root(sunrealtype t, N_Vector y, sunrealtype *gout, ++ void *user_data); + + /// Typedef for root finding functions +- typedef std::function +- RootFunction; ++ typedef std::function RootFunction; + + /// A class member to facilitate pointing to a user-specified root function + RootFunction root_func; +@@ -415,7 +451,8 @@ protected: + /// Typedef declaration for error weight functions + typedef std::function EWTFunction; + +- /// A class member to facilitate pointing to a user-specified error weight function ++ /** @brief A class member to facilitate pointing to a user-specified error ++ weight function */ + EWTFunction ewt_func; + + public: +@@ -449,7 +486,7 @@ public: + @note If this method is called a second time with a different problem + size, then any non-default user-set options will be lost and will need + to be set again. */ +- void Init(TimeDependentOperator &f_); ++ void Init(TimeDependentOperator &f_) override; + + /// Integrate the ODE with CVODE using the specified step mode. + /** @param[in,out] x On output, the solution vector at the requested output +@@ -460,7 +497,7 @@ public: + @note On input, the values of @a t and @a dt are used to compute desired + output time for the integration, tout = @a t + @a dt. + */ +- virtual void Step(Vector &x, double &t, double &dt); ++ void Step(Vector &x, double &t, double &dt) override; + + /** @brief Attach the linear system setup and solve methods from the + TimeDependentOperator i.e., SUNImplicitSetup() and SUNImplicitSolve() to +@@ -525,14 +562,15 @@ protected: + int indexB; ///< backward problem index + + /// Wrapper to compute the ODE RHS Quadrature function. +- static int RHSQ(realtype t, const N_Vector y, N_Vector qdot, void *user_data); ++ static int RHSQ(sunrealtype t, const N_Vector y, N_Vector qdot, ++ void *user_data); + + /// Wrapper to compute the ODE RHS backward function. +- static int RHSB(realtype t, N_Vector y, ++ static int RHSB(sunrealtype t, N_Vector y, + N_Vector yB, N_Vector yBdot, void *user_dataB); + + /// Wrapper to compute the ODE RHS Backwards Quadrature function. +- static int RHSQB(realtype t, N_Vector y, N_Vector yB, ++ static int RHSQB(sunrealtype t, N_Vector y, N_Vector yB, + N_Vector qBdot, void *user_dataB); + + /// Error control function +@@ -586,7 +624,7 @@ public: + + @note On input, the values of t and dt are used to compute desired + output time for the integration, tout = t + dt. */ +- virtual void Step(Vector &x, double &t, double &dt); ++ void Step(Vector &x, double &t, double &dt) override; + + /// Solve one adjoint time step + virtual void StepB(Vector &w, double &t, double &dt); +@@ -648,15 +686,15 @@ public: + void SetSVtolerancesB(double reltol, Vector abstol); + + /// Setup the linear system A x = b +- static int LinSysSetupB(realtype t, N_Vector y, N_Vector yB, N_Vector fyB, ++ static int LinSysSetupB(sunrealtype t, N_Vector y, N_Vector yB, N_Vector fyB, + SUNMatrix A, +- booleantype jok, booleantype *jcur, +- realtype gamma, void *user_data, N_Vector tmp1, ++ sunbooleantype jok, sunbooleantype *jcur, ++ sunrealtype gamma, void *user_data, N_Vector tmp1, + N_Vector tmp2, N_Vector tmp3); + + /// Solve the linear system A x = b + static int LinSysSolveB(SUNLinearSolver LS, SUNMatrix A, N_Vector x, +- N_Vector b, realtype tol); ++ N_Vector b, sunrealtype tol); + + + /// Destroy the associated CVODES memory and SUNDIALS objects. +@@ -689,33 +727,35 @@ protected: + RHS1 is explicit RHS and RHS2 the implicit RHS for IMEX integration. When + purely implicit or explicit only RHS1 is used. */ + ///@{ +- static int RHS1(realtype t, const N_Vector y, N_Vector ydot, void *user_data); +- static int RHS2(realtype t, const N_Vector y, N_Vector ydot, void *user_data); ++ static int RHS1(sunrealtype t, const N_Vector y, N_Vector ydot, ++ void *user_data); ++ static int RHS2(sunrealtype t, const N_Vector y, N_Vector ydot, ++ void *user_data); + ///@} + + /// Setup the linear system $ A x = b $. +- static int LinSysSetup(realtype t, N_Vector y, N_Vector fy, SUNMatrix A, +- SUNMatrix M, booleantype jok, booleantype *jcur, +- realtype gamma, void *user_data, N_Vector tmp1, ++ static int LinSysSetup(sunrealtype t, N_Vector y, N_Vector fy, SUNMatrix A, ++ SUNMatrix M, sunbooleantype jok, sunbooleantype *jcur, ++ sunrealtype gamma, void *user_data, N_Vector tmp1, + N_Vector tmp2, N_Vector tmp3); + + /// Solve the linear system $ A x = b $. + static int LinSysSolve(SUNLinearSolver LS, SUNMatrix A, N_Vector x, +- N_Vector b, realtype tol); ++ N_Vector b, sunrealtype tol); + + /// Setup the linear system $ M x = b $. +- static int MassSysSetup(realtype t, SUNMatrix M, void *user_data, ++ static int MassSysSetup(sunrealtype t, SUNMatrix M, void *user_data, + N_Vector tmp1, N_Vector tmp2, N_Vector tmp3); + + /// Solve the linear system $ M x = b $. + static int MassSysSolve(SUNLinearSolver LS, SUNMatrix M, N_Vector x, +- N_Vector b, realtype tol); ++ N_Vector b, sunrealtype tol); + + /// Compute the matrix-vector product $ v = M x $. + static int MassMult1(SUNMatrix M, N_Vector x, N_Vector v); + + /// Compute the matrix-vector product $v = M_t x $ at time t. +- static int MassMult2(N_Vector x, N_Vector v, realtype t, ++ static int MassMult2(N_Vector x, N_Vector v, sunrealtype t, + void* mtimes_data); + + public: +@@ -751,7 +791,7 @@ public: + @note If this method is called a second time with a different problem + size, then any non-default user-set options will be lost and will need + to be set again. */ +- void Init(TimeDependentOperator &f_); ++ void Init(TimeDependentOperator &f_) override; + + /// Integrate the ODE with ARKode using the specified step mode. + /** +@@ -763,7 +803,7 @@ public: + @note On input, the values of @a t and @a dt are used to compute desired + output time for the integration, tout = @a t + @a dt. + */ +- virtual void Step(Vector &x, double &t, double &dt); ++ void Step(Vector &x, real_t &t, real_t &dt) override; + + /** @brief Attach the linear system setup and solve methods from the + TimeDependentOperator i.e., SUNImplicitSetup() and SUNImplicitSolve() to +@@ -850,18 +890,22 @@ protected: + bool use_oper_grad; ///< use the Jv prod function + mutable SundialsNVector *y_scale, *f_scale; ///< scaling vectors + const Operator *jacobian; ///< stores oper->GetGradient() +- int maa; ///< number of acceleration vectors +- bool jfnk = false; ///< enable JFNK +- Vector wrk; ///< Work vector needed for the JFNK PC +- int maxli = 5; ///< Maximum linear iterations +- int maxlrs = 0; ///< Maximum linear solver restarts ++ int aa_n = 0; ///< number of acceleration vectors ++ int aa_delay; ///< Anderson Acceleration delay ++ double aa_damping; ///< Anderson Acceleration damping ++ int aa_orth; ///< Anderson Acceleration orthogonalization routine ++ double fp_damping = 1.0; ///< Fixed Point or Picard damping parameter ++ bool jfnk = false; ///< enable JFNK ++ Vector wrk; ///< Work vector needed for the JFNK PC ++ int maxli = 5; ///< Maximum linear iterations ++ int maxlrs = 0; ///< Maximum linear solver restarts + + /// Wrapper to compute the nonlinear residual $ F(u) = 0 $. + static int Mult(const N_Vector u, N_Vector fu, void *user_data); + + /// Wrapper to compute the Jacobian-vector product $ J(u) v = Jv $. + static int GradientMult(N_Vector v, N_Vector Jv, N_Vector u, +- booleantype *new_u, void *user_data); ++ sunbooleantype *new_u, void *user_data); + + /// Setup the linear system $ J u = b $. + static int LinSysSetup(N_Vector u, N_Vector fu, SUNMatrix J, +@@ -869,7 +913,7 @@ protected: + + /// Solve the linear system $ J u = b $. + static int LinSysSolve(SUNLinearSolver LS, SUNMatrix J, N_Vector u, +- N_Vector b, realtype tol); ++ N_Vector b, sunrealtype tol); + + /// Setup the preconditioner. + static int PrecSetup(N_Vector uu, +@@ -916,7 +960,7 @@ public: + /** @note If this method is called a second time with a different problem + size, then non-default KINSOL-specific options will be lost and will need + to be set again. */ +- virtual void SetOperator(const Operator &op); ++ void SetOperator(const Operator &op) override; + + /// Set the linear solver for inverting the Jacobian. + /** @note This function assumes that Operator::GetGradient(const Vector &) +@@ -924,10 +968,10 @@ public: + SetOperator(const Operator &). + + This method must be called after SetOperator(). */ +- virtual void SetSolver(Solver &solver); ++ void SetSolver(Solver &solver) override; + + /// Equivalent to SetSolver(solver). +- virtual void SetPreconditioner(Solver &solver) { SetSolver(solver); } ++ void SetPreconditioner(Solver &solver) override { SetSolver(solver); } + + /// Set KINSOL's scaled step tolerance. + /** The default tolerance is $ U^\frac{2}{3} $ , where +@@ -940,13 +984,22 @@ public: + @note This method must be called after SetOperator(). */ + void SetMaxSetupCalls(int max_calls); + +- /// Set the number of acceleration vectors to use with KIN_FP or KIN_PICARD. +- /** The default is 0. +- @ note This method must be called before SetOperator() to set the +- maximum size of the acceleration space. The value of @a maa can be +- altered after SetOperator() is called but it can't be higher than initial +- maximum. */ +- void SetMAA(int maa); ++ /// Enable Anderson Acceleration for KIN_FP or KIN_PICARD. ++ /** @note Has to be called once before SetOperator() in order to set up the ++ maximum subspace size. Subsequent calls need @a n less or equal to the ++ initial subspace size. ++ @param[in] n Anderson Acceleration subspace size ++ @param[in] orth Anderson Acceleration orthogonalization routine ++ @param[in] delay Anderson Acceleration delay ++ @param[in] damping Anderson Acceleration damping parameter valid from 0 < ++ d <= 1.0. Default is 1.0 (no damping) */ ++ void EnableAndersonAcc(int n, int orth = KIN_ORTH_MGS, int delay = 0, ++ double damping = 1.0); ++ ++ /// Specifies the value of the damping parameter in the fixed point or Picard ++ /// iteration. ++ /** param[in] damping fixed point iteration or Picard damping parameter */ ++ void SetDamping(double damping); + + /// Set the Jacobian Free Newton Krylov flag. The default is false. + /** This flag indicates to use JFNK as the linear solver for KINSOL. This +@@ -967,10 +1020,10 @@ public: + void SetLSMaxRestarts(int m) { maxlrs = m; } + + /// Set the print level for the KINSetPrintLevel function. +- virtual void SetPrintLevel(int print_lvl) { print_level = print_lvl; } ++ void SetPrintLevel(int print_lvl) override { print_level = print_lvl; } + + /// This method is not supported and will throw an error. +- virtual void SetPrintLevel(PrintLevel); ++ void SetPrintLevel(PrintLevel) override; + + /// Solve the nonlinear system $ F(x) = 0 $. + /** This method computes the x_scale and fx_scale vectors and calls the +@@ -981,7 +1034,7 @@ public: + @param[in,out] x On input, initial guess, if @a #iterative_mode = true, + otherwise the initial guess is zero; on output, the + solution */ +- virtual void Mult(const Vector &b, Vector &x) const; ++ void Mult(const Vector &b, Vector &x) const override; + + /// Solve the nonlinear system $ F(x) = 0 $. + /** Calls KINSol() to solve the nonlinear system. Before calling KINSol(), diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py index b50af840f2725d..f5d564854f81c5 100644 --- a/var/spack/repos/builtin/packages/mfem/package.py +++ b/var/spack/repos/builtin/packages/mfem/package.py @@ -308,8 +308,10 @@ class Mfem(Package, CudaPackage, ROCmPackage): depends_on("sundials@2.7.0:+mpi+hypre", when="@3.3.2:+sundials+mpi") depends_on("sundials@5.0.0:5", when="@4.1.0:4.4+sundials~mpi") depends_on("sundials@5.0.0:5+mpi+hypre", when="@4.1.0:4.4+sundials+mpi") - depends_on("sundials@5.0.0:6.7.0", when="@4.5.0:+sundials~mpi") - depends_on("sundials@5.0.0:6.7.0+mpi+hypre", when="@4.5.0:+sundials+mpi") + depends_on("sundials@5.0.0:6.7.0", when="@4.5.0:4.6+sundials~mpi") + depends_on("sundials@5.0.0:6.7.0+mpi+hypre", when="@4.5.0:4.6+sundials+mpi") + depends_on("sundials@5.0.0:", when="@4.7.0:+sundials~mpi") + depends_on("sundials@5.0.0:+mpi+hypre", when="@4.7.0:+sundials+mpi") conflicts("cxxstd=11", when="^sundials@6.4.0:") for sm_ in CudaPackage.cuda_arch_values: depends_on( @@ -359,6 +361,8 @@ class Mfem(Package, CudaPackage, ROCmPackage): # MUMPS (and SuiteSparse in older versions). On the other hand, PETSc built # with MUMPS is not strictly required, so we do not require it here. depends_on("petsc@3.8:+mpi+hypre", when="+petsc") + # rocPRIM is a dependency when using petsc+rocm and requires C++14 or newer: + conflicts("cxxstd=11", when="^rocprim@5.5.0:") depends_on("slepc@3.8.0:", when="+slepc") # If petsc is built with +cuda, propagate cuda_arch to petsc and slepc for sm_ in CudaPackage.cuda_arch_values: @@ -507,6 +511,7 @@ class Mfem(Package, CudaPackage, ROCmPackage): sha256="2a31682d876626529e2778a216d403648b83b90997873659a505d982d0e65beb", ) patch("mfem-4.7.patch", when="@4.7.0") + patch("mfem-4.7-sundials-7.patch", when="@4.7.0+sundials ^sundials@7:") phases = ["configure", "build", "install"] @@ -632,6 +637,9 @@ def find_optional_library(name, prefix): cxxstd = "14" if self.spec.satisfies("^ginkgo"): cxxstd = "14" + # When rocPRIM is used (e.g. by PETSc + ROCm) we need C++14: + if self.spec.satisfies("^rocprim@5.5.0:"): + cxxstd = "14" cxxstd_req = spec.variants["cxxstd"].value if cxxstd_req != "auto": # Constraints for valid standard level should be imposed during diff --git a/var/spack/repos/builtin/packages/mgard/package.py b/var/spack/repos/builtin/packages/mgard/package.py index f397ffe08c40cb..12ee2e071ce45a 100644 --- a/var/spack/repos/builtin/packages/mgard/package.py +++ b/var/spack/repos/builtin/packages/mgard/package.py @@ -29,7 +29,8 @@ class Mgard(CMakePackage, CudaPackage): version("2021-11-12", commit="3c05c80a45a51bb6cc5fb5fffe7b1b16787d3366") version("2020-10-01", commit="b67a0ac963587f190e106cc3c0b30773a9455f7a") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant( "serial", diff --git a/var/spack/repos/builtin/packages/mgcfd-op2/package.py b/var/spack/repos/builtin/packages/mgcfd-op2/package.py index bec689e0cff69a..6eaa3b079479cb 100644 --- a/var/spack/repos/builtin/packages/mgcfd-op2/package.py +++ b/var/spack/repos/builtin/packages/mgcfd-op2/package.py @@ -43,21 +43,21 @@ def setup_build_environment(self, env): env.set("COMPILER", self.spec.compiler.name) # Set Fortran compiler to GCC if using Arm. - if self.spec.compiler.name == "arm": + if self.spec.satisfies("%arm"): env.set("OP2_F_COMPILER", "gnu") # This overrides a flag issue in downstream OP2. - if self.spec.compiler.name == "nvhpc": + if self.spec.satisfies("%nvhpc"): env.set("CFLAGS", "-O3 -DOMPI_SKIP_MPICXX -DMPICH_IGNORE_CXX_SEEK -DMPIPP_H") def edit(self, spec, prefix): # Makefile tweaks to ensure the correct compiler commands are called. makefile = FileFilter("Makefile") - if self.spec.compiler.name == "arm": + if self.spec.satisfies("%arm"): makefile.filter(r"CPP := clang", r"CPP := armclang") makefile.filter(r"-cxx=clang.*", "") - if self.spec.compiler.name == "nvhpc": + if self.spec.satisfies("%nvhpc"): makefile.filter("pgc", "nvc") @property diff --git a/var/spack/repos/builtin/packages/migraphx/package.py b/var/spack/repos/builtin/packages/migraphx/package.py index f282fc5293b52d..dfe5d462b9bc1c 100644 --- a/var/spack/repos/builtin/packages/migraphx/package.py +++ b/var/spack/repos/builtin/packages/migraphx/package.py @@ -159,6 +159,7 @@ def cmake_args(self): "CMAKE_CXX_FLAGS", "-fsanitize=address -shared-libasan -I{0}".format(abspath) ) ) + args.append(self.define("BUILD_TESTING", self.run_tests)) return args def test_unit_tests(self): diff --git a/var/spack/repos/builtin/packages/miniforge3/package.py b/var/spack/repos/builtin/packages/miniforge3/package.py index f690742acafb48..8f5d3c05e255ba 100644 --- a/var/spack/repos/builtin/packages/miniforge3/package.py +++ b/var/spack/repos/builtin/packages/miniforge3/package.py @@ -56,6 +56,21 @@ def install(self, spec, prefix): bash = which("bash") bash(script, "-b", "-f", "-p", self.prefix) + @run_after("install") + def patch_sbang(self): + # Conda replaces the full path to the Python executable with `/usr/bin/env python` + # if the full path exceeds 127 characters. This does however break `conda deactivate` + # because the wrong Python interpreter is used after activating an environment. + # The 127 character limit is not relevant in Spack as Spack will automatically + # use the `sbang` script to deal with the overly long sbang line. + filter_file( + r"#!/usr/bin/env python", rf"#!{self.prefix.bin.python}", self.prefix.bin.conda + ) + if "+mamba" in self.spec: + filter_file( + r"#!/usr/bin/env python", rf"#!{self.prefix.bin.python}", self.prefix.bin.mamba + ) + def setup_run_environment(self, env): filename = self.prefix.etc.join("profile.d").join("conda.sh") env.extend(EnvironmentModifications.from_sourcing_file(filename)) diff --git a/var/spack/repos/builtin/packages/minighost/package.py b/var/spack/repos/builtin/packages/minighost/package.py index d894a8a554b751..5702a681ac1326 100644 --- a/var/spack/repos/builtin/packages/minighost/package.py +++ b/var/spack/repos/builtin/packages/minighost/package.py @@ -51,8 +51,6 @@ def build_targets(self): targets.append("COMPILER_SUITE=cray") elif "%intel" in self.spec: targets.append("COMPILER_SUITE=intel") - elif "%pgi" in self.spec: - targets.append("COMPILER_SUITE=pgi") return targets diff --git a/var/spack/repos/builtin/packages/minio/package.py b/var/spack/repos/builtin/packages/minio/package.py index ec216a538f91c1..185dbd881b506f 100644 --- a/var/spack/repos/builtin/packages/minio/package.py +++ b/var/spack/repos/builtin/packages/minio/package.py @@ -18,17 +18,23 @@ class Minio(MakefilePackage): license("AGPL-3.0-or-later") version( - "2020-07-13T18-09-56Z", - sha256="147fca3930389162cc7306a0fa5cf478ee2deba4b31a9317f3d35e82aa58d41e", - ) - version( - "2020-07-12T19-14-17Z", - sha256="bb8ba5d93215ab37788171d8b9ce68e78d64e7b7c74aea508c15958158d85b03", - ) - version( - "2020-07-02T00-15-09Z", - sha256="4255c4d95a3e010f16a3f1e974768dc68509075403a97a9b9882f7d9e89fedc5", + "2024-10-13T13-34-11Z", + sha256="53301a6822f8466da88e3b24252d2551c37e7f96e9d37a36121d0616a69af1dd", ) + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-24747 + version( + "2020-07-13T18-09-56Z", + sha256="147fca3930389162cc7306a0fa5cf478ee2deba4b31a9317f3d35e82aa58d41e", + ) + version( + "2020-07-12T19-14-17Z", + sha256="bb8ba5d93215ab37788171d8b9ce68e78d64e7b7c74aea508c15958158d85b03", + ) + version( + "2020-07-02T00-15-09Z", + sha256="4255c4d95a3e010f16a3f1e974768dc68509075403a97a9b9882f7d9e89fedc5", + ) depends_on("go", type="build") diff --git a/var/spack/repos/builtin/packages/minizip/package.py b/var/spack/repos/builtin/packages/minizip/package.py index 55aa8c2cea1925..af3ac94d21cfe2 100644 --- a/var/spack/repos/builtin/packages/minizip/package.py +++ b/var/spack/repos/builtin/packages/minizip/package.py @@ -14,10 +14,14 @@ class Minizip(AutotoolsPackage): license("Zlib") - version("1.2.11", sha256="c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1") + version("1.3.1", sha256="9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-37434 + version( + "1.2.11", sha256="c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1" + ) - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") configure_directory = "contrib/minizip" @@ -28,8 +32,9 @@ class Minizip(AutotoolsPackage): depends_on("zlib-api") # error: implicit declaration of function 'mkdir' is invalid in C99 - patch("implicit.patch", when="%apple-clang@12:") - patch("implicit.patch", when="%gcc@7.3.0:") + with when("@:1.2.11"): + patch("implicit.patch", when="%apple-clang@12:") + patch("implicit.patch", when="%gcc@7.3.0:") # statically link to libz.a # https://github.com/Homebrew/homebrew-core/blob/master/Formula/minizip.rb diff --git a/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.1.0.patch b/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.1.0.patch new file mode 100644 index 00000000000000..e72924fd566e61 --- /dev/null +++ b/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.1.0.patch @@ -0,0 +1,42 @@ +From ea1ff66e448c977da9c5cff74e201850d6b9b04c Mon Sep 17 00:00:00 2001 +From: Afzal Patel +Date: Thu, 7 Nov 2024 22:08:17 +0000 +Subject: [PATCH] link with roctracer when building miopendriver for 6.1.0 + +--- + driver/CMakeLists.txt | 4 ++++ + src/CMakeLists.txt | 3 ++- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/driver/CMakeLists.txt b/driver/CMakeLists.txt +index 7d4fdbb..9e5ede5 100644 +--- a/driver/CMakeLists.txt ++++ b/driver/CMakeLists.txt +@@ -34,6 +34,10 @@ endif() + add_dependencies(MIOpenDriver generate_kernels) + target_include_directories(MIOpenDriver PRIVATE ../src/kernels) + target_link_libraries(MIOpenDriver MIOpen Threads::Threads) ++if(MIOPEN_USE_ROCTRACER) ++ target_include_directories(MIOpenDriver PRIVATE ${ROCTRACER_INCLUDE_DIR}) ++ target_link_libraries(MIOpenDriver ${rocTracer}) ++endif() + if(NOT MIOPEN_EMBED_DB STREQUAL "") + target_link_libraries(MIOpenDriver $ ) + endif() +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 0741a60..47573d4 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -861,7 +861,8 @@ if(NOT WIN32 AND NOT APPLE) + endif() + + if(MIOPEN_USE_ROCTRACER) +- target_link_libraries(MIOpen PRIVATE roctx64) ++ target_include_directories(MIOpen PRIVATE ${ROCTRACER_INCLUDE_DIR}) ++ target_link_libraries(MIOpen PRIVATE ${rocTracer}) + endif() + + ############################################################ +-- +2.43.5 + diff --git a/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.2.0.patch b/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.2.0.patch new file mode 100644 index 00000000000000..2c2c7feda5397d --- /dev/null +++ b/var/spack/repos/builtin/packages/miopen-hip/0001-link-with-roctracer-when-building-miopendriver-6.2.0.patch @@ -0,0 +1,41 @@ +From 3cb81598fd66aab0fa5b0c6aac654a91ed90e872 Mon Sep 17 00:00:00 2001 +From: Afzal Patel +Date: Thu, 7 Nov 2024 21:42:15 +0000 +Subject: [PATCH] link with roctracer when building miopendriver + +--- + driver/CMakeLists.txt | 4 ++++ + src/CMakeLists.txt | 3 ++- + 2 files changed, 6 insertions(+), 1 deletion(-) + +diff --git a/driver/CMakeLists.txt b/driver/CMakeLists.txt +index 8f19a90..6d32b83 100644 +--- a/driver/CMakeLists.txt ++++ b/driver/CMakeLists.txt +@@ -64,6 +64,10 @@ endif() + add_dependencies(MIOpenDriver generate_kernels) + target_include_directories(MIOpenDriver PRIVATE ../src/kernels) + target_link_libraries(MIOpenDriver MIOpen Threads::Threads roc::rocrand) ++if(MIOPEN_USE_ROCTRACER) ++ target_include_directories(MIOpenDriver PRIVATE ${ROCTRACER_INCLUDE_DIR}) ++ target_link_libraries(MIOpenDriver ${rocTracer}) ++endif() + if(NOT MIOPEN_EMBED_DB STREQUAL "") + target_link_libraries(MIOpenDriver $ ) + endif() +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 66ac75f..69da1b9 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -917,7 +917,8 @@ if(NOT WIN32 AND NOT APPLE) + endif() + + if(MIOPEN_USE_ROCTRACER) +- target_link_libraries(MIOpen PRIVATE roctx64) ++ target_include_directories(MIOpen PRIVATE ${ROCTRACER_INCLUDE_DIR}) ++ target_link_libraries(MIOpen PRIVATE ${rocTracer}) + endif() + + ############################################################ +-- +2.43.5 diff --git a/var/spack/repos/builtin/packages/miopen-hip/0002-add-include-dir-miopen-hip-6.1.0.patch b/var/spack/repos/builtin/packages/miopen-hip/0002-add-include-dir-miopen-hip-6.1.0.patch deleted file mode 100644 index 44e68e401c1cea..00000000000000 --- a/var/spack/repos/builtin/packages/miopen-hip/0002-add-include-dir-miopen-hip-6.1.0.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 1693afd9690b97fcceff09ffce765712e3c7361a Mon Sep 17 00:00:00 2001 -From: Renjith Ravindran -Date: Mon, 29 Apr 2024 08:01:47 +0000 -Subject: [PATCH] Adding roctracer-dev include and library path - ---- - src/CMakeLists.txt | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 0741a60..84b6805 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -739,6 +739,9 @@ if(WIN32) - endif() - - target_include_directories(MIOpen SYSTEM PUBLIC $) -+target_include_directories(MIOpen SYSTEM PUBLIC "${NLOHMANN_JSON_INCLUDE}") -+target_include_directories(MIOpen SYSTEM PUBLIC "${ROCTRACER_INCLUDE_DIR}") -+target_include_directories(MIOpen SYSTEM PUBLIC "${SQLITE_INCLUDE_DIR}") - # Workaround : change in rocm-cmake was causing linking error so had to add ${CMAKE_DL_LIBS} - # We can remove ${CMAKE_DL_LIBS} once root cause is identified. - target_link_libraries(MIOpen PRIVATE ${CMAKE_DL_LIBS} Threads::Threads BZip2::BZip2 ${MIOPEN_CK_LINK_FLAGS}) -@@ -861,7 +864,7 @@ if(NOT WIN32 AND NOT APPLE) - endif() - - if(MIOPEN_USE_ROCTRACER) -- target_link_libraries(MIOpen PRIVATE roctx64) -+ target_link_libraries(MIOpen PRIVATE "${ROCTRACER_LIB_DIR}/libroctx64.so") - endif() - - ############################################################ --- -2.31.1 - diff --git a/var/spack/repos/builtin/packages/miopen-hip/package.py b/var/spack/repos/builtin/packages/miopen-hip/package.py index 73c7d08c6c1da1..f58acb04ddf4d0 100644 --- a/var/spack/repos/builtin/packages/miopen-hip/package.py +++ b/var/spack/repos/builtin/packages/miopen-hip/package.py @@ -63,7 +63,8 @@ class MiopenHip(CMakePackage): patch("miopen-hip-include-nlohmann-include-directory.patch", when="@5.4.0:5.7") patch("0002-add-include-dir-miopen-hip-6.0.0.patch", when="@6.0") - patch("0002-add-include-dir-miopen-hip-6.1.0.patch", when="@6.1") + patch("0001-link-with-roctracer-when-building-miopendriver-6.1.0.patch", when="@6.1") + patch("0001-link-with-roctracer-when-building-miopendriver-6.2.0.patch", when="@6.2:") patch( "https://github.com/ROCm/MIOpen/commit/f60aa1ff89f8fb596b4a6a4c70aa7d557803db87.patch?full_index=1", sha256="7f382c872d89f22da1ad499e85ffe9881cc7404c8465e42877a210a09382e2ea", @@ -135,7 +136,7 @@ class MiopenHip(CMakePackage): depends_on("nlohmann-json", type="link") depends_on(f"rocmlir@{ver}", when=f"@{ver}") for ver in ["6.0.0", "6.0.2", "6.1.0", "6.1.1", "6.1.2", "6.2.0", "6.2.1"]: - depends_on("roctracer-dev@" + ver, when="@" + ver) + depends_on(f"roctracer-dev@{ver}", when=f"@{ver}") for ver in ["6.1.0", "6.1.1", "6.1.2"]: depends_on("googletest") for ver in ["6.2.0", "6.2.1"]: @@ -200,19 +201,20 @@ def cmake_args(self): args.append(self.define("MIOPEN_USE_MLIR", "OFF")) if self.spec.satisfies("@5.7.0:"): args.append(self.define("MIOPEN_ENABLE_AI_IMMED_MODE_FALLBACK", "OFF")) - if self.spec.satisfies("@6:6.1"): + if self.spec.satisfies("@6.0"): args.append( "-DROCTRACER_INCLUDE_DIR={0}".format(self.spec["roctracer-dev"].prefix.include) ) args.append("-DROCTRACER_LIB_DIR={0}".format(self.spec["roctracer-dev"].prefix.lib)) - if self.spec.satisfies("@6.1"): args.append("-DSQLITE_INCLUDE_DIR={0}".format(self.spec["sqlite"].prefix.include)) - if self.spec.satisfies("@6.2:"): + if self.spec.satisfies("@6.1:"): + args.append( + "-DROCTRACER_INCLUDE_DIR={0}".format(self.spec["roctracer-dev"].prefix.include) + ) + args.append(self.define("MIOPEN_USE_ROCTRACER", "ON")) args.append( self.define( "CMAKE_CXX_FLAGS", - f"-I{self.spec['roctracer-dev'].prefix.include} " - f"-L{self.spec['roctracer-dev'].prefix.lib} " f"-I{self.spec['nlohmann-json'].prefix.include} " f"-I{self.spec['sqlite'].prefix.include} ", ) diff --git a/var/spack/repos/builtin/packages/mivisionx/0002-add-half-include-path-for-tests-6.2.0.patch b/var/spack/repos/builtin/packages/mivisionx/0002-add-half-include-path-for-tests-6.2.0.patch new file mode 100644 index 00000000000000..b45580ef0eaadd --- /dev/null +++ b/var/spack/repos/builtin/packages/mivisionx/0002-add-half-include-path-for-tests-6.2.0.patch @@ -0,0 +1,52 @@ +From 19f084566394c6556cacf1b812a9a64e1fe0610e Mon Sep 17 00:00:00 2001 +From: Renjith Ravindran +Date: Wed, 12 Jun 2024 23:33:53 +0000 +Subject: [PATCH] add half include path for tests in 6.1 + +--- + model_compiler/python/nnir_to_clib.py | 4 ++++ + samples/mv_objdetect/CMakeLists.txt | 6 +++++- + utilities/rocAL/rocAL_unittests/CMakeLists.txt | 3 ++- + utilities/rocAL/rocAL_video_unittests/CMakeLists.txt | 3 ++- + 4 files changed, 13 insertions(+), 3 deletions(-) + +diff --git a/model_compiler/python/nnir_to_clib.py b/model_compiler/python/nnir_to_clib.py +index 623bf43..544ed31 100644 +--- a/model_compiler/python/nnir_to_clib.py ++++ b/model_compiler/python/nnir_to_clib.py +@@ -160,6 +160,10 @@ if (OPENVX_BACKEND_OPENCL_FOUND) + include_directories (${OpenCL_INCLUDE_DIRS} ${OpenCL_INCLUDE_DIRS}/Headers ) + endif() + ++find_path(HALF_INCLUDE_DIR half.hpp) ++message(STATUS "HALF_INCLUDE_DIR: ${HALF_INCLUDE_DIR}") ++include_directories(${HALF_INCLUDE_DIR}) ++ + find_package(OpenCV QUIET) + include_directories (${ROCM_PATH}/include ${ROCM_PATH}/include/mivisionx) + include_directories (${PROJECT_SOURCE_DIR}/lib) +diff --git a/samples/mv_objdetect/CMakeLists.txt b/samples/mv_objdetect/CMakeLists.txt +index 54d527b..c334ae4 100644 +--- a/samples/mv_objdetect/CMakeLists.txt ++++ b/samples/mv_objdetect/CMakeLists.txt +@@ -29,6 +29,7 @@ project (mvobjdetect) + set (CMAKE_CXX_STANDARD 14) + + list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) ++find_path(HALF_INCLUDE_DIR half.hpp) + find_package(OpenCV QUIET) + + set(ROCM_PATH /opt/rocm CACHE PATH "ROCm Installation Path") +@@ -50,7 +51,10 @@ if (OPENVX_BACKEND_OPENCL_FOUND) + include_directories (${OpenCL_INCLUDE_DIRS} ${OpenCL_INCLUDE_DIRS}/Headers ) + endif() + +-include_directories (${ROCM_PATH}/include ${ROCM_PATH}/include/mivisionx ${PROJECT_SOURCE_DIR} ) ++find_path(HALF_INCLUDE_DIR half.hpp) ++message(STATUS "HALF_INCLUDE_DIR: ${HALF_INCLUDE_DIR}") ++ ++include_directories (${ROCM_PATH}/include/mivisionx ${PROJECT_SOURCE_DIR} ${HALF_INCLUDE_DIR} ) + link_directories (${ROCM_PATH}/lib ${PROJECT_SOURCE_DIR}/lib) + option (USE_POSTPROC "Use postprocessing module implementation" ON) + set(SOURCES mvobjdetect.cpp mvdeploy_api.cpp visualize.cpp) +2.27.0 diff --git a/var/spack/repos/builtin/packages/mivisionx/package.py b/var/spack/repos/builtin/packages/mivisionx/package.py index f3e565f99f40a9..a69f886f532213 100644 --- a/var/spack/repos/builtin/packages/mivisionx/package.py +++ b/var/spack/repos/builtin/packages/mivisionx/package.py @@ -15,7 +15,7 @@ class Mivisionx(CMakePackage): git = "https://github.com/GPUOpen-ProfessionalCompute-Libraries/MIVisionX.git" url = "https://github.com/GPUOpen-ProfessionalCompute-Libraries/MIVisionX/archive/rocm-6.1.2.tar.gz" - maintainers("srekolam", "renjithravindrankannath") + maintainers("srekolam", "renjithravindrankannath", "afzpatel") tags = ["rocm"] def url_for_version(self, version): @@ -64,7 +64,8 @@ def url_for_version(self, version): patch("0001-add-half-include-path.patch", when="@5.5") patch("0001-add-half-include-path-5.6.patch", when="@5.6:6.1") patch("0002-add-half-include-path-for-tests.patch", when="@5.5:6.0 +add_tests") - patch("0002-add-half-include-path-for-tests-6.1.0.patch", when="@6.1.0: +add_tests") + patch("0002-add-half-include-path-for-tests-6.1.0.patch", when="@6.1 +add_tests") + patch("0002-add-half-include-path-for-tests-6.2.0.patch", when="@6.2.0: +add_tests") patch( "https://github.com/GPUOpen-ProfessionalCompute-Libraries/MIVisionX/commit/da24882438b91a0ae1feee23206b75c1a1256887.patch?full_index=1", @@ -95,11 +96,6 @@ def patch(self): r"${ROCM_PATH}/llvm/bin/clang++", "{0}/bin/clang++".format(self.spec["llvm-amdgpu"].prefix), "amd_openvx/openvx/hipvx/CMakeLists.txt", - string=True, - ) - filter_file( - r"${ROCM_PATH}/llvm/bin/clang++", - "{0}/bin/clang++".format(self.spec["llvm-amdgpu"].prefix), "amd_openvx_extensions/amd_nn/nn_hip/CMakeLists.txt", string=True, ) @@ -137,67 +133,43 @@ def patch(self): string=True, ) - if self.spec.satisfies("+add_tests"): + if self.spec.satisfies("@:6.1 +add_tests"): filter_file( - r"${ROCM_PATH}/include/mivisionx", - "{0}/include/mivisionx".format(self.spec.prefix), - "tests/amd_migraphx_tests/mnist/CMakeLists.txt", + r"${ROCM_PATH}/${CMAKE_INSTALL_INCLUDEDIR}/mivisionx/rocal", + "{0}/include/mivisionx/rocal".format(self.spec.prefix), + "utilities/rocAL/rocAL_unittests/CMakeLists.txt", + "utilities/rocAL/rocAL_video_unittests/CMakeLists.txt", string=True, ) filter_file( r"${ROCM_PATH}/lib", "{0}/lib".format(self.spec.prefix), - "tests/amd_migraphx_tests/mnist/CMakeLists.txt", + "utilities/rocAL/rocAL_unittests/CMakeLists.txt", + "utilities/rocAL/rocAL_video_unittests/CMakeLists.txt", string=True, ) + if self.spec.satisfies("+add_tests"): filter_file( r"${ROCM_PATH}/include/mivisionx", "{0}/include/mivisionx".format(self.spec.prefix), + "tests/amd_migraphx_tests/mnist/CMakeLists.txt", "tests/amd_migraphx_tests/resnet50/CMakeLists.txt", + "model_compiler/python/nnir_to_clib.py", string=True, ) filter_file( r"${ROCM_PATH}/lib", "{0}/lib".format(self.spec.prefix), + "tests/amd_migraphx_tests/mnist/CMakeLists.txt", "tests/amd_migraphx_tests/resnet50/CMakeLists.txt", string=True, ) - filter_file( - r"${ROCM_PATH}/include/mivisionx", - "{0}/include/mivisionx".format(self.spec.prefix), - "model_compiler/python/nnir_to_clib.py", - string=True, - ) filter_file( r"/opt/rocm", "{0}".format(self.spec.prefix), "model_compiler/python/nnir_to_clib.py", string=True, ) - filter_file( - r"${ROCM_PATH}/${CMAKE_INSTALL_INCLUDEDIR}/mivisionx/rocal", - "{0}/include/mivisionx/rocal".format(self.spec.prefix), - "utilities/rocAL/rocAL_unittests/CMakeLists.txt", - string=True, - ) - filter_file( - r"${ROCM_PATH}/lib", - "{0}/lib".format(self.spec.prefix), - "utilities/rocAL/rocAL_unittests/CMakeLists.txt", - string=True, - ) - filter_file( - r"${ROCM_PATH}/${CMAKE_INSTALL_INCLUDEDIR}/mivisionx/rocal", - "{0}/include/mivisionx/rocal".format(self.spec.prefix), - "utilities/rocAL/rocAL_video_unittests/CMakeLists.txt", - string=True, - ) - filter_file( - r"${ROCM_PATH}/lib", - "{0}/lib".format(self.spec.prefix), - "utilities/rocAL/rocAL_video_unittests/CMakeLists.txt", - string=True, - ) depends_on("cmake@3.5:", type="build") depends_on("ffmpeg@:4", type="build", when="@:5.3") @@ -211,7 +183,7 @@ def patch(self): when="@5.3:", ) depends_on("openssl") - depends_on("libjpeg-turbo@2.0.6+partial_decoder", type="build") + depends_on("libjpeg-turbo@2.0.6+partial_decoder", type="build", when="@:6.2.0") depends_on("rpp@1.2.0", when="@5.5:5.6") depends_on("lmdb", when="@5.5:") depends_on("py-setuptools", when="@5.6:") @@ -337,12 +309,13 @@ def cmake_args(self): args.append( self.define("AMDRPP_INCLUDE_DIRS", "{0}/include/rpp".format(spec["rpp"].prefix)) ) + args.append(self.define("CMAKE_INSTALL_PREFIX_PYTHON", spec.prefix)) + if self.spec.satisfies("@5.5:6.2.0"): args.append( self.define( "TurboJpeg_LIBRARIES_DIRS", "{0}/lib64".format(spec["libjpeg-turbo"].prefix) ) ) - args.append(self.define("CMAKE_INSTALL_PREFIX_PYTHON", spec.prefix)) return args @run_after("install") diff --git a/var/spack/repos/builtin/packages/mmg/package.py b/var/spack/repos/builtin/packages/mmg/package.py index eb14be0c7761bf..9bd3d63cef04bc 100644 --- a/var/spack/repos/builtin/packages/mmg/package.py +++ b/var/spack/repos/builtin/packages/mmg/package.py @@ -7,7 +7,6 @@ import spack.build_systems.cmake from spack.package import * -from spack.util.executable import which class Mmg(CMakePackage): @@ -30,8 +29,11 @@ class Mmg(CMakePackage): homepage = "https://www.mmgtools.org/" url = "https://github.com/MmgTools/mmg/archive/v5.3.13.tar.gz" + maintainers("jcortial-safran") + license("LGPL-3.0-or-later") + version("5.8.0", sha256="686eaab84de79c072f3aedf26cd11ced44c84b435d51ce34e016ad203172922f") version("5.7.3", sha256="b0a9c5ad6789df369a68f94295df5b324b6348020b73bcc395d32fdd44abe706") version("5.7.2", sha256="4c396dd44aec69e0a171a04f857e28aad2e0bbfb733b48b6d81a2c6868e86840") version("5.7.1", sha256="27c09477ebc080f54919f76f8533a343936677c81809fe37ce4e2d62fa97237b") diff --git a/var/spack/repos/builtin/packages/mpas-model/package.py b/var/spack/repos/builtin/packages/mpas-model/package.py index 7b738f2d76b3e6..39a6dfa741656a 100644 --- a/var/spack/repos/builtin/packages/mpas-model/package.py +++ b/var/spack/repos/builtin/packages/mpas-model/package.py @@ -5,7 +5,6 @@ import os from spack.package import * -from spack.util.executable import Executable class MpasModel(MakefilePackage): @@ -35,9 +34,6 @@ class MpasModel(MakefilePackage): "xlf", "ftn", "titan-cray", - "pgi", - "pgi-nersc", - "pgi-llnl", "ifort", "ifort-scorep", "ifort-gcc", diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py index 5fc0538f15c7cc..a1816d401af7d1 100644 --- a/var/spack/repos/builtin/packages/mpich/package.py +++ b/var/spack/repos/builtin/packages/mpich/package.py @@ -7,6 +7,7 @@ import re import sys +import spack.compilers from spack.build_environment import dso_suffix from spack.package import * @@ -59,7 +60,7 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("fortran", type="build", when="+fortran") variant("hwloc", default=True, description="Use external hwloc package") variant("hydra", default=True, description="Build the hydra process manager") @@ -261,7 +262,6 @@ class Mpich(AutotoolsPackage, CudaPackage, ROCmPackage): depends_on("hwloc@2.0.0:", when="@3.3: +hwloc") depends_on("libfabric", when="netmod=ofi") - depends_on("libfabric fabrics=gni", when="netmod=ofi pmi=cray") # The ch3 ofi netmod results in crashes with libfabric 1.7 # See https://github.com/pmodels/mpich/issues/3665 depends_on("libfabric@:1.6", when="device=ch3 netmod=ofi") diff --git a/var/spack/repos/builtin/packages/mpidiff/package.py b/var/spack/repos/builtin/packages/mpidiff/package.py new file mode 100644 index 00000000000000..47ae0b8ee196c3 --- /dev/null +++ b/var/spack/repos/builtin/packages/mpidiff/package.py @@ -0,0 +1,39 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class Mpidiff(CMakePackage): + """Library for comparing numerical differences between binaries.""" + + homepage = "https://github.com/LLNL/MPIDiff" + url = "https://github.com/LLNL/MPIDiff/archive/refs/tags/v0.2.0.tar.gz" + + maintainers("adayton1") + + license("BSD-3-Clause", checked_by="alecbcs") + + version("0.2.0", sha256="726b59fe4af0bb0812fc34c456cb0d801e03313a8fdfb9dc63d23a9b316b6118") + + variant("docs", default=False, description="Build and include documentation") + variant("examples", default=False, description="Build and include examples") + variant("tests", default=False, description="Build tests") + + depends_on("cxx", type="build") + + depends_on("blt", type="build") + depends_on("mpi") + + def cmake_args(self): + spec = self.spec + return [ + self.define("MPI_DIR", spec["mpi"].prefix), + self.define("BLT_SOURCE_DIR", spec["blt"].prefix), + self.define_from_variant("MPIDIFF_ENABLE_DOCS", "docs"), + self.define_from_variant("MPIDIFF_ENABLE_EXAMPLES", "examples"), + self.define_from_variant("MPIDIFF_ENABLE_TESTS", "tests"), + ] diff --git a/var/spack/repos/builtin/packages/mpifileutils/package.py b/var/spack/repos/builtin/packages/mpifileutils/package.py index ffe5e9e9e70da7..faa2a78b292cc7 100644 --- a/var/spack/repos/builtin/packages/mpifileutils/package.py +++ b/var/spack/repos/builtin/packages/mpifileutils/package.py @@ -32,7 +32,8 @@ class Mpifileutils(CMakePackage): version("0.9.1", sha256="15a22450f86b15e7dc4730950b880fda3ef6f59ac82af0b268674d272aa61c69") version("0.9", sha256="1b8250af01aae91c985ca5d61521bfaa4564e46efa15cee65cd0f82cf5a2bcfb") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("xattr", default=True, description="Enable code for extended attributes") variant("lustre", default=False, description="Enable optimizations and features for Lustre") @@ -66,7 +67,7 @@ class Mpifileutils(CMakePackage): def flag_handler(self, name, flags): spec = self.spec if name == "cflags": - if spec.satisfies("%oneapi"): + if spec.satisfies("%oneapi") or spec.satisfies("%cce"): flags.append("-Wno-error=implicit-function-declaration") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/msvc/package.py b/var/spack/repos/builtin/packages/msvc/package.py index d58dea2f6bb652..4d25b87118dcd8 100644 --- a/var/spack/repos/builtin/packages/msvc/package.py +++ b/var/spack/repos/builtin/packages/msvc/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import re +import spack.compiler from spack.package import * diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py index d6a4434852410c..0b33b6fa0e69e3 100644 --- a/var/spack/repos/builtin/packages/mumps/package.py +++ b/var/spack/repos/builtin/packages/mumps/package.py @@ -174,7 +174,6 @@ def write_makefile_inc(self): # Determine which compiler suite we are using using_gcc = self.compiler.name == "gcc" - using_pgi = self.compiler.name == "pgi" using_nvhpc = self.compiler.name == "nvhpc" using_intel = self.compiler.name == "intel" using_oneapi = self.compiler.name == "oneapi" @@ -287,7 +286,7 @@ def write_makefile_inc(self): # TODO: change the value to the correct one according to the # compiler possible values are -DAdd_, -DAdd__ and/or -DUPPER - if using_intel or using_oneapi or using_pgi or using_nvhpc or using_fj: + if using_intel or using_oneapi or using_nvhpc or using_fj: # Intel, PGI, and Fujitsu Fortran compiler provides # the main() function so C examples linked with the Fortran # compiler require a hack defined by _DMAIN_COMP diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py index 23129c3ec0c4da..c0ff3bb07fa575 100644 --- a/var/spack/repos/builtin/packages/mvapich2/package.py +++ b/var/spack/repos/builtin/packages/mvapich2/package.py @@ -7,6 +7,7 @@ import re import sys +import spack.compilers from spack.package import * diff --git a/var/spack/repos/builtin/packages/mxnet/package.py b/var/spack/repos/builtin/packages/mxnet/package.py index 084b1d241556da..690b3803aa3a9e 100644 --- a/var/spack/repos/builtin/packages/mxnet/package.py +++ b/var/spack/repos/builtin/packages/mxnet/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -126,5 +127,4 @@ def cmake_args(self): def install_python(self): if "+python" in self.spec: with working_dir("python"): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/mysql/package.py b/var/spack/repos/builtin/packages/mysql/package.py index 638ac397861e0d..9c19d2c55332d9 100644 --- a/var/spack/repos/builtin/packages/mysql/package.py +++ b/var/spack/repos/builtin/packages/mysql/package.py @@ -237,3 +237,12 @@ def setup_build_environment(self, env): if "python" in self.spec and self.spec.satisfies("@:7"): self._fix_dtrace_shebang(env) + + @run_before("install") + def fixup_mysqlconfig(self): + if not self.spec.satisfies("platform=windows"): + # mysql uses spack libz but exports -lzlib to its dependencies. Fix that: + with working_dir(self.build_directory): + for config in ("scripts/mysql_config", "scripts/mysqlclient.pc"): + if os.path.exists(config): + filter_file(" -lzlib ", " -lz ", config) diff --git a/var/spack/repos/builtin/packages/nalu-wind/package.py b/var/spack/repos/builtin/packages/nalu-wind/package.py index eb923367541098..f7a481f2d60fca 100644 --- a/var/spack/repos/builtin/packages/nalu-wind/package.py +++ b/var/spack/repos/builtin/packages/nalu-wind/package.py @@ -13,15 +13,6 @@ def _parse_float(val): return False -def submodules(package): - submodules = [] - if package.spec.satisfies("+wind-utils"): - submodules.append("wind-utils") - if package.spec.satisfies("+tests"): - submodules.append("reg_tests/mesh") - return submodules - - class NaluWind(CMakePackage, CudaPackage, ROCmPackage): """Nalu-Wind: Wind energy focused variant of Nalu.""" @@ -33,8 +24,9 @@ class NaluWind(CMakePackage, CudaPackage, ROCmPackage): tags = ["ecp", "ecp-apps"] - version("master", branch="master", submodules=submodules) - version("2.0.0", tag="v2.0.0", submodules=submodules) + version("master", branch="master", submodules=True) + version("2.1.0", tag="v2.1.0", submodules=True) + version("2.0.0", tag="v2.0.0", submodules=True) variant("pic", default=True, description="Position independent code") variant( @@ -65,9 +57,14 @@ class NaluWind(CMakePackage, CudaPackage, ROCmPackage): "tests", default=False, description="Enable regression tests and clone the mesh submodule" ) + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build", when="+openfast") + depends_on("mpi") - depends_on("yaml-cpp@0.5.3:") + depends_on("yaml-cpp@0.6.0:0.7.0") depends_on("openfast@4.0.0:+cxx+netcdf", when="+fsi") + depends_on("trilinos@15.1.1", when="@=2.1.0") depends_on("trilinos@13.4.1", when="@=2.0.0") depends_on("hypre@2.29.0:", when="@2.0.0:+hypre") depends_on( @@ -96,16 +93,16 @@ class NaluWind(CMakePackage, CudaPackage, ROCmPackage): when="+cuda cuda_arch={0}".format(_arch), ) depends_on( - "hypre@develop +mpi+cuda~int64~superlu-dist cuda_arch={0}".format(_arch), + "hypre@2.30.0: +cuda cuda_arch={0}".format(_arch), when="+hypre+cuda cuda_arch={0}".format(_arch), ) for _arch in ROCmPackage.amdgpu_targets: depends_on( - "trilinos@13.4: ~shared+rocm+rocm_rdc amdgpu_target={0}".format(_arch), + "trilinos~shared+rocm+rocm_rdc amdgpu_target={0}".format(_arch), when="+rocm amdgpu_target={0}".format(_arch), ) depends_on( - "hypre+rocm amdgpu_target={0}".format(_arch), + "hypre@2.30.0: +rocm amdgpu_target={0}".format(_arch), when="+hypre+rocm amdgpu_target={0}".format(_arch), ) @@ -155,7 +152,6 @@ def cmake_args(self): args = [ self.define("CMAKE_CXX_COMPILER", spec["mpi"].mpicxx), - self.define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc), self.define("Trilinos_DIR", spec["trilinos"].prefix), self.define("YAML_DIR", spec["yaml-cpp"].prefix), self.define("CMAKE_CXX_STANDARD", "17"), @@ -176,6 +172,7 @@ def cmake_args(self): if spec.satisfies("+openfast"): args.append(self.define("OpenFAST_DIR", spec["openfast"].prefix)) + args.append(self.define("CMAKE_Fortran_COMPILER", spec["mpi"].mpifc)) if spec.satisfies("+tioga"): args.append(self.define("TIOGA_DIR", spec["tioga"].prefix)) diff --git a/var/spack/repos/builtin/packages/nano/package.py b/var/spack/repos/builtin/packages/nano/package.py index 0fb2035b637bfa..1f0767e21736ac 100644 --- a/var/spack/repos/builtin/packages/nano/package.py +++ b/var/spack/repos/builtin/packages/nano/package.py @@ -14,13 +14,16 @@ class Nano(AutotoolsPackage): list_url = "https://www.nano-editor.org/dist/" list_depth = 1 - license("GPL-3.0-or-later") + license("GPL-3.0-or-later", checked_by="wdconinc") # 8.x + version("8.2", sha256="d5ad07dd862facae03051c54c6535e54c7ed7407318783fcad1ad2d7076fffeb") + version("8.1", sha256="93b3e3e9155ae389fe9ccf9cb7ab380eac29602835ba3077b22f64d0f0cbe8cb") version("8.0", sha256="c17f43fc0e37336b33ee50a209c701d5beb808adc2d9f089ca831b40539c9ac4") # 7.x version("7.2", sha256="86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526") # 6.x + version("6.4", sha256="4199ae8ca78a7796de56de1a41b821dc47912c0307e9816b56cc317df34661c0") version("6.3", sha256="eb532da4985672730b500f685dbaab885a466d08fbbf7415832b95805e6f8687") version("6.2", sha256="2bca1804bead6aaf4ad791f756e4749bb55ed860eec105a97fba864bc6a77cb3") version("6.1", sha256="3d57ec893fbfded12665b7f0d563d74431fc43abeaccacedea23b66af704db40") @@ -82,9 +85,11 @@ class Nano(AutotoolsPackage): version("2.6.2", sha256="22f79cc635458e0c0d110d211576f1edc03b112a62d73b914826a46547a6ac27") version("2.6.1", sha256="45721fa6d6128068895ad71a6967ff7398d11b064b3f888e5073c97a2b6e9a81") - depends_on("c", type="build") # generated + depends_on("c", type="build") depends_on("pkgconfig", type="build") + depends_on("gettext@0.18.3:") + depends_on("gettext@0.20:", when="@8.1:") depends_on("ncurses") def url_for_version(self, version): diff --git a/var/spack/repos/builtin/packages/nasm/package.py b/var/spack/repos/builtin/packages/nasm/package.py index c3d64e47576bd3..4afa6ebe1ce56c 100644 --- a/var/spack/repos/builtin/packages/nasm/package.py +++ b/var/spack/repos/builtin/packages/nasm/package.py @@ -5,6 +5,7 @@ import glob import os +import spack.build_systems.generic from spack.package import * diff --git a/var/spack/repos/builtin/packages/nccmp/package.py b/var/spack/repos/builtin/packages/nccmp/package.py index 4e6d234ecb9f7f..2401623cc13831 100644 --- a/var/spack/repos/builtin/packages/nccmp/package.py +++ b/var/spack/repos/builtin/packages/nccmp/package.py @@ -21,7 +21,8 @@ class Nccmp(CMakePackage): version("1.8.9.0", sha256="da5d2b4dcd52aec96e7d96ba4d0e97efebbd40fe9e640535e5ee3d5cd082ae50") version("1.8.2.0", sha256="7f5dad4e8670568a71f79d2bcebb08d95b875506d3d5faefafe1a8b3afa14f18") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("cmake@3.12:", type="build") depends_on("netcdf-c", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/ncio/package.py b/var/spack/repos/builtin/packages/ncio/package.py index d710a81923fb6b..665742c633702b 100644 --- a/var/spack/repos/builtin/packages/ncio/package.py +++ b/var/spack/repos/builtin/packages/ncio/package.py @@ -36,5 +36,5 @@ def setup_run_environment(self, env): env.set("NCIO_LIBDIR", lib[0]) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/neartree/Makefile-3.1.patch b/var/spack/repos/builtin/packages/neartree/Makefile-3.1.patch new file mode 100644 index 00000000000000..722eea809eb37d --- /dev/null +++ b/var/spack/repos/builtin/packages/neartree/Makefile-3.1.patch @@ -0,0 +1,23 @@ +--- a/Makefile ++++ b/Makefile +@@ -114,13 +114,13 @@ CPPLIBRARIES = -lm + # + CLIBRARIES = $(CVECTOR_LIBLOC) -lCVector -lm + +-COMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CXX) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link $(CC) -version-info $(VERSION) -no-undefined -rpath $(INSTALL_PREFIX)/lib +-BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(INCLUDES) +-CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CXX) -no-undefined $(CFLAGS) $(INCLUDES) +-BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link $(CC) -no-undefined $(CFLAGS) -shared -I$(INSTALL_PREFIX)/include +-BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -static-libtool-libs -I$(INSTALL_PREFIX)/include ++COMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CXX $(CXX) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link --tag=CC $(CC) -version-info $(VERSION) -no-undefined -rpath $(INSTALL_PREFIX)/lib ++BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) $(INCLUDES) ++CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CXX $(CXX) -no-undefined $(CFLAGS) $(INCLUDES) ++BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link --tag=CC $(CC) -no-undefined $(CFLAGS) -shared -I$(INSTALL_PREFIX)/include ++BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -static-libtool-libs -I$(INSTALL_PREFIX)/include + INSTALL_COMMAND = $(LIBTOOL) --mode=install cp + INSTALL_FINISH_COMMAND = $(LIBTOOL) --mode=finish + diff --git a/var/spack/repos/builtin/packages/neartree/Makefile.patch b/var/spack/repos/builtin/packages/neartree/Makefile.patch new file mode 100644 index 00000000000000..77023f687e856e --- /dev/null +++ b/var/spack/repos/builtin/packages/neartree/Makefile.patch @@ -0,0 +1,23 @@ +--- a/Makefile ++++ b/Makefile +@@ -117,13 +117,13 @@ CPPLIBRARIES = -lm + # + CLIBRARIES = $(CVECTOR_LIBLOC) -lCVector -lm + +-COMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile $(CXX) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c +-LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link $(CC) -version-info $(VERSION) -no-undefined -rpath $(INSTALL_PREFIX)/lib +-BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(INCLUDES) +-CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link $(CXX) -no-undefined $(CFLAGS) $(INCLUDES) +-BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link $(CC) -no-undefined $(CFLAGS) -shared -I$(INSTALL_PREFIX)/include +-BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -static-libtool-libs -I$(INSTALL_PREFIX)/include ++COMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++CPPCOMPILE_COMMAND = $(LIBTOOL) --mode=compile --tag=CXX $(CXX) $(CFLAGS) $(INCLUDES) $(WARNINGS) -c ++LIBRARY_LINK_COMMAND = $(LIBTOOL) --mode=link --tag=CC $(CC) -version-info $(VERSION) -no-undefined -rpath $(INSTALL_PREFIX)/lib ++BUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) $(INCLUDES) ++CPPBUILD_COMMAND_LOCAL = $(LIBTOOL) --mode=link --tag=CXX $(CXX) -no-undefined $(CFLAGS) $(INCLUDES) ++BUILD_COMMAND_DYNAMIC = $(LIBTOOL) --mode=link --tag=CC $(CC) -no-undefined $(CFLAGS) -shared -I$(INSTALL_PREFIX)/include ++BUILD_COMMAND_STATIC = $(LIBTOOL) --mode=link --tag=CC $(CC) $(CFLAGS) -static-libtool-libs -I$(INSTALL_PREFIX)/include + INSTALL_COMMAND = $(LIBTOOL) --mode=install cp + INSTALL_FINISH_COMMAND = $(LIBTOOL) --mode=finish + diff --git a/var/spack/repos/builtin/packages/neartree/package.py b/var/spack/repos/builtin/packages/neartree/package.py index e2cb4e3716e132..89fb15fe2a56d9 100644 --- a/var/spack/repos/builtin/packages/neartree/package.py +++ b/var/spack/repos/builtin/packages/neartree/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import re + from spack.package import * @@ -11,10 +13,10 @@ class Neartree(MakefilePackage): points in spaces of arbitrary dimensions.""" homepage = "https://neartree.sourceforge.net/" - url = "https://downloads.sourceforge.net/project/neartree/neartree/NearTree-3.1/NearTree-3.1.tar.gz" license("LGPL-2.1-or-later") + version("5.1.1", sha256="b951eb23bb4235ada82cef85b9f129bf74a14e45d992097431e7bfb6bdca6642") version("3.1", sha256="07b668516f15a7c13c219fd005b14e73bced5dc6b23857edcc24d3e5cf0d3be3") depends_on("c", type="build") # generated @@ -23,6 +25,15 @@ class Neartree(MakefilePackage): depends_on("libtool", type="build") depends_on("cvector") + patch("Makefile.patch", when="@5.1.1") + patch("Makefile-3.1.patch", when="@3.1") + + def url_for_version(self, version): + pattern = re.compile(r"^[0-9]+\.[0-9]+") + full_vers = str(version) + cropped_vers = pattern.search(full_vers).group() + return f"https://downloads.sourceforge.net/project/neartree/neartree/NearTree-{cropped_vers}/NearTree-{full_vers}.tar.gz" + def edit(self, spec, prefix): mf = FileFilter("Makefile") mf.filter(r"^CC.+", "CC = {0}".format(spack_cc)) diff --git a/var/spack/repos/builtin/packages/nekcem/package.py b/var/spack/repos/builtin/packages/nekcem/package.py index 51b8cc0b525ebe..d34543833234f6 100644 --- a/var/spack/repos/builtin/packages/nekcem/package.py +++ b/var/spack/repos/builtin/packages/nekcem/package.py @@ -84,9 +84,6 @@ def install(self, spec, prefix): elif self.compiler.name == "xl" or self.compiler.name == "xl_r": fflags += ["-qrealsize=8"] cflags += ["-DPREFIX=jl_", "-DIBM"] - elif self.compiler.name == "pgi": - fflags += ["-r8"] - cflags += ["-DUNDERSCORE"] error = Executable(fc)("empty.f", output=str, error=str, fail_on_error=False) diff --git a/var/spack/repos/builtin/packages/neko/package.py b/var/spack/repos/builtin/packages/neko/package.py index 7b83d6b83dc350..d7a9caa69d6195 100644 --- a/var/spack/repos/builtin/packages/neko/package.py +++ b/var/spack/repos/builtin/packages/neko/package.py @@ -16,6 +16,8 @@ class Neko(AutotoolsPackage, CudaPackage, ROCmPackage): url = "https://github.com/ExtremeFLOW/neko/releases/download/v0.3.2/neko-0.3.2.tar.gz" maintainers("njansson") + version("0.9.0", sha256="3cffe629ada1631d8774fa51d8bb14b95dc0cea21578c0e07e70deb611a5091a") + version("0.8.1", sha256="ac8162bc18e7112fd21b49c5a9c36f45c7b84896e90738be36a182990798baec") version("0.8.0", sha256="09d0b253c8abda9f384bf8f03b17b50d774cb0a1f7b72744a8e863acac516a51") version("0.7.2", sha256="5dd17fbae83d0b26dc46fafce4e5444be679cdce9493cef4ff7d504e2f854254") version("0.7.1", sha256="c935c3d93b0975db46448045f97aced6ac2cab31a2b8803047f8086f98dcb981") @@ -37,6 +39,19 @@ class Neko(AutotoolsPackage, CudaPackage, ROCmPackage): variant("xsmm", default=False, description="Build with support for libxsmm") variant("gslib", default=False, when="@0.7.0:", description="Build with support for gslib") variant("hdf5", default=False, when="@develop", description="Build with support for HDF5") + variant("hdf5", default=False, when="@0.9.0:", description="Build with support for HDF5") + variant( + "shared", + default=False, + when="@develop", + description="Builds a shared version of the library", + ) + variant( + "shared", + default=False, + when="@0.9.0:", + description="Builds a shared version of the library", + ) # Requires cuda or rocm enabled MPI variant( @@ -60,6 +75,8 @@ class Neko(AutotoolsPackage, CudaPackage, ROCmPackage): depends_on("json-fortran", when="@0.7.0:") depends_on("gslib", when="+gslib") depends_on("hdf5+fortran+mpi", when="+hdf5") + depends_on("libtool", type="build", when="@develop") + depends_on("libtool", type="build", when="@0.9.0:") def configure_args(self): args = [] @@ -74,6 +91,7 @@ def configure_args(self): rocm_fn = lambda x: self.spec["hip"].prefix args += self.with_or_without("hip", variant="rocm", activation_value=rocm_fn) args += self.enable_or_disable("device-mpi", variant="device-mpi") + args += self.enable_or_disable("shared", variant="shared") if self.spec.satisfies("+cuda"): cuda_arch_list = self.spec.variants["cuda_arch"].value diff --git a/var/spack/repos/builtin/packages/nemsio/package.py b/var/spack/repos/builtin/packages/nemsio/package.py index 0677376d154ebc..20696a70f62239 100644 --- a/var/spack/repos/builtin/packages/nemsio/package.py +++ b/var/spack/repos/builtin/packages/nemsio/package.py @@ -48,5 +48,5 @@ def cmake_args(self): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/nemsiogfs/package.py b/var/spack/repos/builtin/packages/nemsiogfs/package.py index e38f5a0adf2a33..21bb43c2bacd34 100644 --- a/var/spack/repos/builtin/packages/nemsiogfs/package.py +++ b/var/spack/repos/builtin/packages/nemsiogfs/package.py @@ -26,5 +26,5 @@ class Nemsiogfs(CMakePackage): depends_on("nemsio") def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/netcdf-c/package.py b/var/spack/repos/builtin/packages/netcdf-c/package.py index 986fbfe7492ddf..d2d05a29d6128d 100644 --- a/var/spack/repos/builtin/packages/netcdf-c/package.py +++ b/var/spack/repos/builtin/packages/netcdf-c/package.py @@ -9,7 +9,6 @@ from llnl.util.lang import dedupe -import spack.builder from spack.build_systems import autotools, cmake from spack.package import * from spack.util.environment import filter_system_paths @@ -291,7 +290,7 @@ def setup_run_environment(self, env): env.append_path("HDF5_PLUGIN_PATH", self.prefix.plugins) def flag_handler(self, name, flags): - if self.builder.build_system == "autotools": + if self.spec.satisfies("build_system=autotools"): if name == "cflags": if "+pic" in self.spec: flags.append(self.compiler.cc_pic_flag) @@ -305,7 +304,7 @@ def libs(self): return find_libraries("libnetcdf", root=self.prefix, shared=shared, recursive=True) -class BaseBuilder(metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): def setup_dependent_build_environment(self, env, dependent_spec): # Some packages, e.g. ncview, refuse to build if the compiler path returned by nc-config # differs from the path to the compiler that the package should be built with. Therefore, @@ -329,7 +328,7 @@ def backup_nc_config(self): filter_compiler_wrappers("nc-config", relative_root="bin") -class CMakeBuilder(BaseBuilder, cmake.CMakeBuilder): +class CMakeBuilder(AnyBuilder, cmake.CMakeBuilder): def cmake_args(self): base_cmake_args = [ self.define_from_variant("BUILD_SHARED_LIBS", "shared"), @@ -376,7 +375,7 @@ def patch_hdf5_pkgconfigcmake(self): filter_file(f"hdf5_hl-{config}", "hdf5_hl", *files, ignore_absent=True) -class AutotoolsBuilder(BaseBuilder, autotools.AutotoolsBuilder): +class AutotoolsBuilder(AnyBuilder, autotools.AutotoolsBuilder): @property def force_autoreconf(self): return any(self.spec.satisfies(s) for s in self.pkg._force_autoreconf_when) diff --git a/var/spack/repos/builtin/packages/netcdf-cxx/package.py b/var/spack/repos/builtin/packages/netcdf-cxx/package.py index 4193c5894983f8..87652b559f4c69 100644 --- a/var/spack/repos/builtin/packages/netcdf-cxx/package.py +++ b/var/spack/repos/builtin/packages/netcdf-cxx/package.py @@ -15,11 +15,14 @@ class NetcdfCxx(AutotoolsPackage): homepage = "https://www.unidata.ucar.edu/software/netcdf" url = "https://downloads.unidata.ucar.edu/netcdf-cxx/4.2/netcdf-cxx-4.2.tar.gz" + maintainers("climbfuji") + license("NetCDF") version("4.2", sha256="95ed6ab49a0ee001255eac4e44aacb5ca4ea96ba850c08337a3e4c9a0872ccd1") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("netcdf-c") diff --git a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py index 046c17a3fc1117..8e9f29584e8cee 100644 --- a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py +++ b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py @@ -39,6 +39,9 @@ class NetcdfCxx4(CMakePackage): filter_compiler_wrappers("ncxx4-config", relative_root="bin") + depends_on("c", type="build") + depends_on("cxx", type="build") + def flag_handler(self, name, flags): if name == "cflags" and "+pic" in self.spec: flags.append(self.compiler.cc_pic_flag) @@ -57,7 +60,7 @@ def libs(self): return libs msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/package.py b/var/spack/repos/builtin/packages/netcdf-fortran/package.py index c80f8843005e0d..ba33ee51287e53 100644 --- a/var/spack/repos/builtin/packages/netcdf-fortran/package.py +++ b/var/spack/repos/builtin/packages/netcdf-fortran/package.py @@ -112,7 +112,7 @@ def libs(self): return libs msg = "Unable to recursively locate {0} {1} libraries in {2}" - raise spack.error.NoLibrariesError( + raise NoLibrariesError( msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix) ) @@ -156,7 +156,7 @@ def cray_module_filenames(self): # To avoid warning messages when compiler user applications in both # cases, we create copies of all '*.mod' files in the prefix/include # with names in upper- and lowercase. - if self.spec.compiler.name != "cce": + if not self.spec.satisfies("%cce"): return with working_dir(self.spec.prefix.include): diff --git a/var/spack/repos/builtin/packages/netlib-scalapack/package.py b/var/spack/repos/builtin/packages/netlib-scalapack/package.py index 245dcfaf0c7a70..50c1504e89b4f1 100644 --- a/var/spack/repos/builtin/packages/netlib-scalapack/package.py +++ b/var/spack/repos/builtin/packages/netlib-scalapack/package.py @@ -42,6 +42,8 @@ class ScalapackBase(CMakePackage): def flag_handler(self, name, flags): if name == "cflags": + if self.spec.satisfies("%cce"): + flags.append("-Wno-error=implicit-function-declaration") if self.spec.satisfies("%gcc@14:"): # https://bugzilla.redhat.com/show_bug.cgi?id=2178710 flags.append("-std=gnu89") diff --git a/var/spack/repos/builtin/packages/nextflow/package.py b/var/spack/repos/builtin/packages/nextflow/package.py index 4687218fc6bfbe..316e4da17cfe10 100644 --- a/var/spack/repos/builtin/packages/nextflow/package.py +++ b/var/spack/repos/builtin/packages/nextflow/package.py @@ -14,6 +14,11 @@ class Nextflow(Package): maintainers("dialvarezs", "marcodelapierre") + version( + "24.10.0", + sha256="e848918fb9b85762822c078435d9ff71979a88cccff81ce5babd75d5eee52fe6", + expand=False, + ) version( "24.04.3", sha256="e258f6395a38f044eb734cba6790af98b561aa521f63e2701fe95c050986e11c", @@ -187,7 +192,6 @@ class Nextflow(Package): deprecated=True, ) - depends_on("java@17", when="@24", type="run") depends_on("java", type="run") def install(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/nimrod-aai/package.py b/var/spack/repos/builtin/packages/nimrod-aai/package.py index 0b24858ef86886..2bfc608861becd 100644 --- a/var/spack/repos/builtin/packages/nimrod-aai/package.py +++ b/var/spack/repos/builtin/packages/nimrod-aai/package.py @@ -69,5 +69,5 @@ def cmake_args(self): @run_after("build") @on_package_attributes(run_tests=True) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): ctest("--output-on-failure") diff --git a/var/spack/repos/builtin/packages/ninja-fortran/package.py b/var/spack/repos/builtin/packages/ninja-fortran/package.py index 071a64b7b6b1da..02fdac7128f5a6 100644 --- a/var/spack/repos/builtin/packages/ninja-fortran/package.py +++ b/var/spack/repos/builtin/packages/ninja-fortran/package.py @@ -3,8 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.version from spack.package import * -from spack.util.executable import which_string class NinjaFortran(Package): diff --git a/var/spack/repos/builtin/packages/ninja/package.py b/var/spack/repos/builtin/packages/ninja/package.py index 64e9eb36030f2d..2249fcdbdbeae7 100644 --- a/var/spack/repos/builtin/packages/ninja/package.py +++ b/var/spack/repos/builtin/packages/ninja/package.py @@ -5,7 +5,6 @@ import sys from spack.package import * -from spack.util.executable import which_string class Ninja(Package): diff --git a/var/spack/repos/builtin/packages/nlohmann-json/package.py b/var/spack/repos/builtin/packages/nlohmann-json/package.py index d0003219c60039..cb8980f8a72d51 100644 --- a/var/spack/repos/builtin/packages/nlohmann-json/package.py +++ b/var/spack/repos/builtin/packages/nlohmann-json/package.py @@ -52,7 +52,6 @@ class NlohmannJson(CMakePackage): # https://github.com/nlohmann/json/releases/tag/v3.3.0 conflicts("%gcc@:4.8", when="@:3.2.9") conflicts("%intel@:16") - conflicts("%pgi@:14") def cmake_args(self): return [ diff --git a/var/spack/repos/builtin/packages/nlopt/package.py b/var/spack/repos/builtin/packages/nlopt/package.py index fd9ed9b18f4877..f2967c46f773ef 100644 --- a/var/spack/repos/builtin/packages/nlopt/package.py +++ b/var/spack/repos/builtin/packages/nlopt/package.py @@ -21,7 +21,7 @@ class Nlopt(CMakePackage): license("LGPL-2.1-or-later") version("master", branch="master") - + version("2.8.0", sha256="e02a4956a69d323775d79fdaec7ba7a23ed912c7d45e439bc933d991ea3193fd") version("2.7.1", sha256="db88232fa5cef0ff6e39943fc63ab6074208831dc0031cf1545f6ecd31ae2a1a") version("2.7.0", sha256="b881cc2a5face5139f1c5a30caf26b7d3cb43d69d5e423c9d78392f99844499f") version("2.6.2", sha256="cfa5981736dd60d0109c534984c4e13c615314d3584cf1c392a155bfe1a3b17e") @@ -52,26 +52,14 @@ class Nlopt(CMakePackage): extends("python", when="+python") def cmake_args(self): - # Add arguments other than - # CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE spec = self.spec - args = [] - - # Specify on command line to alter defaults: - # eg: spack install nlopt@master +guile -octave +cxx - - # On is default - if "~shared" in spec: - args.append("-DBUILD_SHARED_LIBS:Bool=OFF") - - # On is default - if "~octave" in spec: - args.append("-DNLOPT_OCTAVE:Bool=OFF") - - if "+cxx" in spec: - args.append("-DNLOPT_CXX:BOOL=ON") - - if "+matlab" in spec: - args.append("-DMatlab_ROOT_DIR=%s" % spec["matlab"].command.path) + args = [ + self.define_from_variant("BUILD_SHARED_LIBS", "shared"), + self.define_from_variant("NLOPT_OCTAVE", "octave"), + self.define_from_variant("NLOPT_CXX", "cxx"), + ] + + if spec.satisfies("+matlab"): + args.append(self.define("Matlab_ROOT_DIR", spec["matlab"].command.path)) return args diff --git a/var/spack/repos/builtin/packages/node-js/package.py b/var/spack/repos/builtin/packages/node-js/package.py index b76d72ae91bdb9..8850255deba572 100644 --- a/var/spack/repos/builtin/packages/node-js/package.py +++ b/var/spack/repos/builtin/packages/node-js/package.py @@ -79,6 +79,15 @@ class NodeJs(Package): depends_on("openssl@1.1:", when="+openssl") depends_on("zlib-api", when="+zlib") + # https://github.com/nodejs/node/blob/main/BUILDING.md#supported-toolchains + conflicts("%gcc@:12.1", when="@23:") + conflicts("%gcc@:10.0", when="@20:") + conflicts("%gcc@:8.2", when="@16:") + conflicts("%gcc@:6.2", when="@12:") + conflicts("%apple-clang@:11", when="@21:") + conflicts("%apple-clang@:10", when="@16:") + conflicts("%apple-clang@:9", when="@13:") + phases = ["configure", "build", "install"] # https://github.com/spack/spack/issues/19310 @@ -113,8 +122,14 @@ def configure_args(self): # # /usr/bin/libtool # libtool: /usr/bin/libtool + # + # We specify -M -f (an empty list of man-path entries) to prevent man-page + # searching to avoid an Illegal seek error processing manpath results in CI, + # which prevents the last form: # libtool: /usr/bin/libtool /Applications/Xcode.app/.../share/man/man1/libtool.1 - process_pipe = subprocess.Popen(["whereis", "libtool"], stdout=subprocess.PIPE) + process_pipe = subprocess.Popen( + ["whereis", "-M", "-f", "libtool"], stdout=subprocess.PIPE + ) result_whereis_list = process_pipe.communicate()[0].strip().split() if len(result_whereis_list) == 1: result_whereis = result_whereis_list[0] diff --git a/var/spack/repos/builtin/packages/numactl/package.py b/var/spack/repos/builtin/packages/numactl/package.py index cde391471cdafb..6930f3f4f78234 100644 --- a/var/spack/repos/builtin/packages/numactl/package.py +++ b/var/spack/repos/builtin/packages/numactl/package.py @@ -50,13 +50,6 @@ def autoreconf(self, spec, prefix): @when("%nvhpc") def patch(self): - self._nvhpc_patch() - - @when("%pgi@20:") - def patch(self): - self._nvhpc_patch() - - def _nvhpc_patch(self): # Remove flags not recognized by the NVIDIA compiler filter_file("-ffast-math -funroll-loops", "", "Makefile.am") filter_file("-std=gnu99", "-c99", "Makefile.am") diff --git a/var/spack/repos/builtin/packages/nut/package.py b/var/spack/repos/builtin/packages/nut/package.py index 4d00edcbb31950..7c9a162f65d14f 100644 --- a/var/spack/repos/builtin/packages/nut/package.py +++ b/var/spack/repos/builtin/packages/nut/package.py @@ -32,7 +32,6 @@ class Nut(CMakePackage): # which is a C++ template library conflicts("%nvhpc") conflicts("%intel", when="@serial") - conflicts("%pgi", when="@serial") conflicts("%xl", when="@serial") conflicts("%nag", when="@serial") build_targets = ["VERBOSE=on"] diff --git a/var/spack/repos/builtin/packages/nvhpc/detection_test.yaml b/var/spack/repos/builtin/packages/nvhpc/detection_test.yaml index bdf1c6b596c4dd..fc8ccfafc84553 100644 --- a/var/spack/repos/builtin/packages/nvhpc/detection_test.yaml +++ b/var/spack/repos/builtin/packages/nvhpc/detection_test.yaml @@ -24,7 +24,7 @@ paths: extra_attributes: compilers: c: ".*/bin/nvc" - cxx: ".*/bin/nvc++" + cxx: ".*/bin/nvc\\+\\+" fortran: ".*/bin/nvfortran" - layout: - executables: @@ -51,7 +51,7 @@ paths: extra_attributes: compilers: c: ".*/bin/nvc" - cxx: ".*/bin/nvc++" + cxx: ".*/bin/nvc\\+\\+" fortran: ".*/bin/nvfortran" - layout: - executables: @@ -78,5 +78,5 @@ paths: extra_attributes: compilers: c: ".*/bin/nvc" - cxx: ".*/bin/nvc++" + cxx: ".*/bin/nvc\\+\\+" fortran: ".*/bin/nvfortran" diff --git a/var/spack/repos/builtin/packages/nvhpc/package.py b/var/spack/repos/builtin/packages/nvhpc/package.py index ce918e96965c7c..4f03fe96af899c 100644 --- a/var/spack/repos/builtin/packages/nvhpc/package.py +++ b/var/spack/repos/builtin/packages/nvhpc/package.py @@ -21,6 +21,16 @@ # - package key must be in the form '{os}-{arch}' where 'os' is in the # format returned by platform.system() and 'arch' by platform.machine() _versions = { + "24.11": { + "Linux-aarch64": ( + "f2f64e5dec5e90dad5e12a31a992172b0aa19abf872ef1c54a1a437c7008eefb", + "https://developer.download.nvidia.com/hpc-sdk/24.11/nvhpc_2024_2411_Linux_aarch64_cuda_multi.tar.gz", + ), + "Linux-x86_64": ( + "0c27d66ed0e2d3007d30ac904922a9abf96475197dc0f4dcc6316d235a1dc0c3", + "https://developer.download.nvidia.com/hpc-sdk/24.11/nvhpc_2024_2411_Linux_x86_64_cuda_multi.tar.gz", + ), + }, "24.9": { "Linux-aarch64": ( "8d900f798ef806c64993fd4fedf2c2c812dd1ccdbac2a0d33fabcd0cd36f19cf", diff --git a/var/spack/repos/builtin/packages/nvidia-nsight-systems/package.py b/var/spack/repos/builtin/packages/nvidia-nsight-systems/package.py new file mode 100644 index 00000000000000..945bbe92f465ba --- /dev/null +++ b/var/spack/repos/builtin/packages/nvidia-nsight-systems/package.py @@ -0,0 +1,127 @@ +# Copyright 2013-2024 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) + +import os +import platform +import re +import shutil +from glob import glob + +from spack.package import * + +# FIXME Remove hack for polymorphic versions +# This package uses a ugly hack to be able to dispatch, given the same +# version, to different binary packages based on the platform that is +# running spack. See #13827 for context. +# If you need to add a new version, please be aware that: +# - versions in the following dict are automatically added to the package +# - version tuple must be in the form (checksum, url) +# - checksum must be sha256 +# - package key must be in the form '{os}-{arch}' where 'os' is in the +# format returned by platform.system() and 'arch' by platform.machine() +_versions = { + "2024.6.1": { + "Linux-aarch64": ( + "24700c28dfda9f95d4e93de218b86ab1ba0ee8b74cb61c3c581767296159c75c", + "https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2024_6/nsight-systems-2024.6.1-2024.6.1.90_3490548-0.aarch64.rpm", + ), + "Linux-x86_64": ( + "dd4359a47ff3857395c55a0da483b64f5c0c3a1a2e57dd543a512dc3d2cd2674", + "https://developer.nvidia.com/downloads/assets/tools/secure/nsight-systems/2024_6/nsight-systems-2024.6.1-2024.6.1.90_3490548-0.x86_64.rpm", + ), + }, + "2024.1.1": { + "Linux-aarch64": ( + "41dc15ae128ef1de8e582b66bb465ac6bd67b9d20ef77fc70528b735d80fb3ec", + "https://developer.download.nvidia.com/devtools/repos/rhel8/arm64/nsight-systems-2024.1.1-2024.1.1.59_3380207-0.aarch64.rpm", + ), + "Linux-ppc64le": ( + "8c98b511df1747c4c782430504ae6fa4b3fce6fa72623083a828fc0a1e11f1b8", + "https://developer.download.nvidia.com/devtools/repos/rhel8/ppc64le/nsight-systems-cli-2024.1.1-2024.1.1.59_3380207-0.ppc64le.rpm", + ), + "Linux-x86_64": ( + "96f57548e0bd69cb02cd1fe8c70ed4a650636ecb3a5ea5ec490c8049adc2beb5", + "https://developer.download.nvidia.com/devtools/repos/rhel8/x86_64/nsight-systems-2024.1.1-2024.1.1.59_3380207-0.x86_64.rpm", + ), + }, +} + + +class NvidiaNsightSystems(Package): + """NVIDIA Nsight™ Systems is a system-wide performance analysis tool designed + to visualize an application’s algorithms, identify the largest opportunities + to optimize, and tune to scale efficiently across any quantity or size of CPUs + and GPUs, from large servers to the smallest system on a chip""" + + homepage = "https://developer.nvidia.com/nsight-systems" + url = "https://developer.download.nvidia.com/devtools/repos/" + maintainers("scothalverson") + license("NVIDIA Software License Agreement") + + executables = ["^nsys$"] + + # Used to unpack the source RPM archives. + depends_on("libarchive programs='bsdtar'", type="build") + + for ver, packages in _versions.items(): + key = "{0}-{1}".format(platform.system(), platform.machine()) + pkg = packages.get(key) + if pkg: + version(ver, sha256=pkg[0], url=pkg[1], expand=False) + + @classmethod + def determine_version(cls, exe): + output = Executable(exe)("--version", output=str, error=str) + # Example output: + # NVIDIA Nsight Systems version 2024.1.1.59-241133802077v0 + # but we only want to match 2024.1.1 + match = re.search(r"NVIDIA Nsight Systems version ((?:[0-9]+.){2}[0-9])", output) + return match.group(1) if match else None + + def install(self, spec, prefix): + bsdtar = which("bsdtar") + rpm_file = glob(join_path(self.stage.source_path, "nsight-systems*.rpm"))[0] + params = ["-x", "-f", rpm_file] + ver = prefix.split("/")[-1].split("-")[-2] + bsdtar(*params) + + arch = self.spec.target.family + if arch == "aarch64": + folders = ["documentation", "host-linux-armv8", "target-linux-sbsa-armv8"] + elif arch == "ppc64le": + folders = ["documentation", "host-linux-ppc64le", "target-linux-ppc64le"] + elif arch == "x86_64": + folders = ["documentation", "host-linux-x64", "target-linux-x64"] + if os.path.exists(join_path("opt", "nvidia", "nsight-systems-cli")): + base_path = join_path("opt", "nvidia", "nsight-systems-cli") + elif os.path.exists(join_path("opt", "nvidia", "nsight-systems")): + base_path = join_path("opt", "nvidia", "nsight-systems") + else: + raise InstallError("Couldn't determine subdirectories to install.") + + for sd in folders: + shutil.copytree(join_path(base_path, ver, sd), join_path(prefix, sd)) + os.mkdir(join_path(prefix, "bin")) + if arch == "aarch64": + os.symlink( + join_path(prefix, "host-linux-armv8", "nsys-ui"), + join_path(prefix, "bin", "nsys-ui"), + ) + os.symlink( + join_path(prefix, "target-linux-sbsa-armv8", "nsys"), + join_path(prefix, "bin", "nsys"), + ) + elif arch == "ppc64le": + # `nsys-ui` is missing in the PowerPC version of the package. + os.symlink( + join_path(prefix, "target-linux-ppc64le", "nsys"), join_path(prefix, "bin", "nsys") + ) + elif arch == "x86_64": + os.symlink( + join_path(prefix, "host-linux-x64", "nsys-ui"), join_path(prefix, "bin", "nsys-ui") + ) + os.symlink( + join_path(prefix, "target-linux-x64", "nsys"), join_path(prefix, "bin", "nsys") + ) diff --git a/var/spack/repos/builtin/packages/nvtx/package.py b/var/spack/repos/builtin/packages/nvtx/package.py index ef2ecfa64c9249..c6f6af43817774 100644 --- a/var/spack/repos/builtin/packages/nvtx/package.py +++ b/var/spack/repos/builtin/packages/nvtx/package.py @@ -48,6 +48,5 @@ def install(self, spec, prefix): install("./nvtx-config.cmake", prefix) # added by the patch above - args = std_pip_args + ["--prefix=" + prefix, "."] with working_dir(self.build_directory): - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/nwchem/package.py b/var/spack/repos/builtin/packages/nwchem/package.py index 497ae0bf83872a..a3882f55f12bbe 100644 --- a/var/spack/repos/builtin/packages/nwchem/package.py +++ b/var/spack/repos/builtin/packages/nwchem/package.py @@ -46,6 +46,7 @@ class Nwchem(Package): depends_on("fortran", type="build") # generated variant("openmp", default=False, description="Enables OpenMP support") + variant("f90allocatable", default=False, description="Use F90 allocatable instead of MA") variant( "armci", values=("mpi-ts", "mpi-pr", "armcimpi", "mpi3", "openib", "ofi"), @@ -57,6 +58,7 @@ class Nwchem(Package): default=False, description="Enables rarely-used TCE features (CCSDTQ, CCSDTLR, EACCSD, IPCCSD, MRCC)", ) + variant("tcecuda", default=False, description="Enable TCE CCSD(T) CUDA support") variant("fftw3", default=False, description="Link against the FFTW library") variant("libxc", default=False, description="Support additional functionals via libxc") variant( @@ -86,6 +88,7 @@ class Nwchem(Package): depends_on("blas") depends_on("lapack") depends_on("mpi") + depends_on("cuda", when="+tcecuda") depends_on("armcimpi", when="armci=armcimpi") depends_on("libfabric", when="armci=ofi") depends_on("rdma-core", when="armci=openib") @@ -155,9 +158,18 @@ def install(self, spec, prefix): args.extend(["CCSDTLR=y"]) args.extend(["CCSDTQ=y"]) + if spec.satisfies("+tcecuda"): + args.extend(["TCE_CUDA=y"]) + args.extend(["CUDA_INCLUDE=-I{0}".format(self.spec["cuda"].headers.directories[0])]) + # args.extend(["CUDA_LIBS={0}".format(self.spec["cuda"].libs)]) + args.extend(["CUDA_LIBS=-L{0} -lcudart".format(self.spec["cuda"].libs.directories[0])]) + if spec.satisfies("+openmp"): args.extend(["USE_OPENMP=y"]) + if spec.satisfies("+f90allocatable"): + args.extend(["USE_F90_ALLOCATABLE=1"]) + if self.spec.variants["armci"].value == "armcimpi": armcimpi = spec["armci"] args.extend(["ARMCI_NETWORK=ARMCI"]) diff --git a/var/spack/repos/builtin/packages/ollama/package.py b/var/spack/repos/builtin/packages/ollama/package.py index 7de54a4ce8a0d3..0c916b90bde527 100644 --- a/var/spack/repos/builtin/packages/ollama/package.py +++ b/var/spack/repos/builtin/packages/ollama/package.py @@ -18,6 +18,7 @@ class Ollama(GoPackage, CudaPackage): # A shell script is run by `go generate` which assumes source is in a git # repo. So we must use git VCS and not tarballs and defeat source caching. with default_args(submodules=True, no_cache=True): + version("0.4.2", commit="d875e99e4639dc07af90b2e3ea0d175e2e692efb") version("0.3.9", commit="a1cef4d0a5f31280ea82b350605775931a6163cb") version("0.1.31", commit="dc011d16b9ff160c0be3829fc39a43054f0315d0") # This is the last verified non-preview version as of 20240413 @@ -43,7 +44,7 @@ def setup_build_environment(self, env): cuda_prefix = self.spec["cuda"].prefix env.set("CUDACXX", cuda_prefix.bin.nvcc) env.set("CUDA_LIB_DIR", cuda_prefix.lib) - env.set("CMAKE_CUDA_ARCHITECTURES", spec.variants["cuda_arch"].value) + env.set("CMAKE_CUDA_ARCHITECTURES", self.spec.variants["cuda_arch"].value) @property def generate_args(self): diff --git a/var/spack/repos/builtin/packages/omega-h/package.py b/var/spack/repos/builtin/packages/omega-h/package.py index e4432f2e104dcb..a1e3a2363df611 100644 --- a/var/spack/repos/builtin/packages/omega-h/package.py +++ b/var/spack/repos/builtin/packages/omega-h/package.py @@ -20,22 +20,27 @@ class OmegaH(CMakePackage, CudaPackage): tags = ["e4s"] version("main", branch="main") version( - "scorec.10.8.5", + "10.8.6-scorec", + commit="a730c78e516d7f6cca4f8b4e4e0a5eb8020f9ad9", + git="https://github.com/SCOREC/omega_h.git", + ) + version( + "10.8.5-scorec", commit="62026fc305356abb5e02a9fce3fead9cf5077fbe", git="https://github.com/SCOREC/omega_h.git", ) version( - "scorec.10.7.0", + "10.7.0-scorec", commit="0e5de8618c3370f702e08c1b1af476dbbc118892", git="https://github.com/SCOREC/omega_h.git", ) version( - "scorec.10.6.0", + "10.6.0-scorec", commit="f376fad4741b55a4b2482218eb3437d719b7c72e", git="https://github.com/SCOREC/omega_h.git", ) version( - "scorec.10.1.0", + "10.1.0-scorec", commit="e88912368e101d940f006019585701a704295ab0", git="https://github.com/SCOREC/omega_h.git", ) @@ -73,26 +78,19 @@ class OmegaH(CMakePackage, CudaPackage): depends_on("trilinos +kokkos", when="+trilinos") depends_on("kokkos", when="+kokkos") depends_on("zlib-api", when="+zlib") - # Note: '+cuda' and 'cuda_arch' variants are added by the CudaPackage - depends_on("cuda", when="+cuda") - conflicts( - "^cuda@11.2", - when="@scorec.10.1.0:", - msg="Thrust is broken in CUDA = 11.2.* see https://github.com/sandialabs/omega_h/issues/366", - ) - conflicts( - "^cuda@:11.3", - when="@scorec.10.8.5:", - msg="see https://github.com/SCOREC/omega_h/issues/66", - ) - # the sandia repo has a fix for cuda > 11.2 support - # see github.com/sandialabs/omega_h/pull/373 - conflicts( - "^cuda@11.2", - when="@:9.34.4", - msg="Thrust is broken in CUDA = 11.2.* see https://github.com/sandialabs/omega_h/issues/366", - ) + with when("+cuda"): + # https://github.com/SCOREC/omega_h/commit/40a2d36d0b747a7147aeed238a0323f40b227cb2 + depends_on("cuda@11.4:", when="@10.8.3:") + + # https://github.com/SCOREC/omega_h/commit/c2109d2900696974ee66c3fbe6a1ec0e93b66cb6 + depends_on("cuda@:11", when="@:10.6") + + # Single, broken CUDA version. + conflicts("^cuda@11.2", msg="See https://github.com/sandialabs/omega_h/issues/366") + + # https://github.com/SCOREC/omega_h/pull/118 + conflicts("@10.5:10.8.5 +cuda~kokkos") # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86610 conflicts("%gcc@8:8.2", when="@:9.22.1") @@ -120,9 +118,8 @@ def cmake_args(self): args.append("-DBUILD_SHARED_LIBS:BOOL=OFF") if "+mpi" in self.spec: args.append("-DOmega_h_USE_MPI:BOOL=ON") - ver = self.spec.version # old versions don't call find_package(MPI) - if ver < Version("9.33.2") and "scorec" not in str(ver): + if self.spec.satisfies("@:9.33.1"): args.append("-DCMAKE_CXX_COMPILER:FILEPATH={0}".format(self.spec["mpi"].mpicxx)) else: args.append("-DOmega_h_USE_MPI:BOOL=OFF") @@ -131,7 +128,7 @@ def cmake_args(self): cuda_arch_list = self.spec.variants["cuda_arch"].value cuda_arch = cuda_arch_list[0] if cuda_arch != "none": - if "scorec" in str(self.spec.version): + if self.spec.satisfies("@10:"): args.append("-DOmega_h_CUDA_ARCH={0}".format(cuda_arch)) else: args.append("-DCMAKE_CUDA_FLAGS=-arch=sm_{0}".format(cuda_arch)) @@ -174,7 +171,7 @@ def flag_handler(self, name, flags): def test_mesh(self): """test construction, adaptation, and conversion of a mesh""" - if self.spec.satisfies("@:9.34.0") and not self.spec.satisfies("@:scorec"): + if self.spec.satisfies("@:9.34.0"): raise SkipTest("Package must be installed as version 9.34.1 or later") with test_part(self, "test_mesh_create", purpose="mesh construction"): diff --git a/var/spack/repos/builtin/packages/opencl-clhpp/package.py b/var/spack/repos/builtin/packages/opencl-clhpp/package.py index c580b966775af4..4ecdb1215786cd 100644 --- a/var/spack/repos/builtin/packages/opencl-clhpp/package.py +++ b/var/spack/repos/builtin/packages/opencl-clhpp/package.py @@ -27,7 +27,8 @@ class OpenclClhpp(CMakePackage): version("2.0.10", sha256="fa27456295c3fa534ce824eb0314190a8b3ebd3ba4d93a0b1270fc65bf378f2b") version("2.0.9", sha256="ba8ac4977650d833804f208a1b0c198006c65c5eac7c83b25dc32cea6199f58c") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") root_cmakelists_dir = "include" diff --git a/var/spack/repos/builtin/packages/opencolorio/package.py b/var/spack/repos/builtin/packages/opencolorio/package.py new file mode 100644 index 00000000000000..bed7b22eb3d0ec --- /dev/null +++ b/var/spack/repos/builtin/packages/opencolorio/package.py @@ -0,0 +1,39 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Opencolorio(CMakePackage): + """OpenColorIO (OCIO) is a complete color management solution geared towards motion + picture production with an emphasis on visual effects and computer animation.""" + + homepage = "https://opencolorio.readthedocs.io" + git = "https://github.com/AcademySoftwareFoundation/OpenColorIO" + url = ( + "https://github.com/AcademySoftwareFoundation/OpenColorIO/archive/refs/tags/v2.4.0.tar.gz" + ) + license("Apache-2.0") + + version("2.4.0", sha256="0ff3966b9214da0941b2b1cbdab3975a00a51fc6f3417fa860f98f5358f2c282") + + # Core dependencies + depends_on("cmake@3.14:", type="build") + depends_on("expat@2.2.8:") + depends_on("yaml-cpp@0.6.3:") + depends_on("imath@3.0.5:") + depends_on("pystring@1.1.3:") + + # Optional dependencies + variant("lcms", default=False, description="Little CMS for ociobakelut") + depends_on("lcms@2.2:", when="+lcms") + + variant("python", default=False, description="Build python bindings") + extends("python", when="+python") + depends_on("py-pybind11", when="+python", type=("build", "run")) + + def cmake_args(self): + args = ["-DOCIO_BUILD_PYTHON={0}".format("ON" if "+python" in self.spec else "OFF")] + return args diff --git a/var/spack/repos/builtin/packages/openfast/package.py b/var/spack/repos/builtin/packages/openfast/package.py index 8b99fda2c669e3..2fd434465054e3 100644 --- a/var/spack/repos/builtin/packages/openfast/package.py +++ b/var/spack/repos/builtin/packages/openfast/package.py @@ -18,22 +18,23 @@ class Openfast(CMakePackage): version("develop", branch="dev") version("master", branch="main") - version("3.5.3", tag="v3.5.3", commit="6a7a543790f3cad4a65b87242a619ac5b34b4c0f") - version("3.4.1", tag="v3.4.1", commit="18704086dad861ab13daf804825da7c4b8d59428") - version("3.4.0", tag="v3.4.0", commit="e8ec53f9c7f9d3f6a13bfb61dba12a0ca04d8a2f") - version("3.3.0", tag="v3.3.0", commit="5f3fb6ef74f48e75ca94000090737a41866fb264") - version("3.2.1", tag="v3.2.1", commit="08fffef240461a8334596179f1de462be43ad3e9") - version("3.2.0", tag="v3.2.0", commit="90a1ffb626baf398d89681b9422bdbfef11cd3ad") - version("3.1.0", tag="v3.1.0", commit="3456a645581456883e44d441eb285ed688e98797") - version("3.0.0", tag="v3.0.0", commit="42a5a8196529ae0349eda6d797a79461c2c03ff0") - version("2.6.0", tag="v2.6.0", commit="bbbb1ca7b28a4ba411613b5c85f5de02f8316754") - version("2.5.0", tag="v2.5.0", commit="718d46f707d78e85edf1b49d3b1a63e8e23e1aae") - version("2.4.0", tag="v2.4.0", commit="ff33ca1cf65f2e13c1de0ab78cc2396ec4a47ce0") - version("2.3.0", tag="v2.3.0", commit="f2419c5d1c23caad9146b95a103d89e9dcaefe30") - version("2.2.0", tag="v2.2.0", commit="e4faf27b774982df274b87c0570e4b58c4a13fe3") - version("2.1.0", tag="v2.1.0", commit="f147b80521eff90c19f065eabeceac13de39ac59") - version("2.0.0", tag="v2.0.0", commit="0769598a17e19b3ccd00a85cde389995f55024a8") - version("1.0.0", tag="v1.0.0", commit="e788b9b18bd5ed96ea59d4bc0812d461bc430cfe") + version("3.5.4", tag="v3.5.4") + version("3.5.3", tag="v3.5.3") + version("3.4.1", tag="v3.4.1") + version("3.4.0", tag="v3.4.0") + version("3.3.0", tag="v3.3.0") + version("3.2.1", tag="v3.2.1") + version("3.2.0", tag="v3.2.0") + version("3.1.0", tag="v3.1.0") + version("3.0.0", tag="v3.0.0") + version("2.6.0", tag="v2.6.0") + version("2.5.0", tag="v2.5.0") + version("2.4.0", tag="v2.4.0") + version("2.3.0", tag="v2.3.0") + version("2.2.0", tag="v2.2.0") + version("2.1.0", tag="v2.1.0") + version("2.0.0", tag="v2.0.0") + version("1.0.0", tag="v1.0.0") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated @@ -49,6 +50,7 @@ class Openfast(CMakePackage): variant("openmp", default=False, description="Enable OpenMP support") variant("netcdf", default=False, description="Enable NetCDF support") variant("rosco", default=False, description="Build ROSCO controller") + variant("fastfarm", default=False, description="Enable FAST.Farm capabilities") depends_on("blas") depends_on("lapack") @@ -77,6 +79,7 @@ def cmake_args(self): self.define_from_variant("BUILD_OPENFAST_CPP_API", "cxx"), self.define_from_variant("BUILD_OPENFAST_CPP_DRIVER", "cxx"), self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"), + self.define_from_variant("BUILD_FASTFARM", "fastfarm"), ] ) diff --git a/var/spack/repos/builtin/packages/openimageio/package.py b/var/spack/repos/builtin/packages/openimageio/package.py index 4f03b0df35ed3c..fe48959156bc3b 100644 --- a/var/spack/repos/builtin/packages/openimageio/package.py +++ b/var/spack/repos/builtin/packages/openimageio/package.py @@ -42,6 +42,9 @@ class Openimageio(CMakePackage): variant("qt", default=False, description="Build qt viewer") depends_on("qt@5.6.0:+opengl", when="+qt") + variant("ocio", default=False, description="Support video frames") + depends_on("opencolorio@2.2:", when="+ocio") + def url_for_version(self, version): if version >= Version("2"): return super().url_for_version(version) diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py index a884eaddbb6a4b..bcaec85a861270 100644 --- a/var/spack/repos/builtin/packages/openjdk/package.py +++ b/var/spack/repos/builtin/packages/openjdk/package.py @@ -406,6 +406,14 @@ class Openjdk(Package): version(ver, sha256=pkg[0], url=pkg[1], preferred=is_preferred) + variant( + "certs", + default="none", + values=("system", "none"), + multi=False, + description=("symlink system certs if requested, otherwise use default package version"), + ) + provides("java@21", when="@21.0:21") provides("java@17", when="@17.0:17") provides("java@16", when="@16.0:16") @@ -479,6 +487,37 @@ def install(self, spec, prefix): top_dir = "Contents/Home/" if platform.system() == "Darwin" else "." install_tree(top_dir, prefix) + @run_after("install") + def link_system_certs(self): + if self.spec.variants["certs"].value != "system": + return + + system_dirs = [ + # CentOS, Fedora, RHEL + "/etc/pki/java", + # Ubuntu + "/etc/ssl/certs/java", + # OpenSUSE + "/var/lib/ca-certificates/java-certs", + ] + + for directory in system_dirs: + # Link configuration file + sys_certs = join_path(directory, "cacerts") + + # path for 1.8.0 versions + pkg_dir = join_path(self.prefix, "jre", "lib", "security") + if not os.path.exists(pkg_dir): + # path for version 11 and newer + pkg_dir = join_path(self.prefix, "lib", "security") + if not os.path.exists(pkg_dir): + break + pkg_conf = join_path(pkg_dir, "cacerts") + if os.path.exists(sys_certs): + if os.path.exists(pkg_conf): + os.remove(pkg_conf) + os.symlink(sys_certs, pkg_conf) + def setup_run_environment(self, env): """Set JAVA_HOME.""" diff --git a/var/spack/repos/builtin/packages/openldap/package.py b/var/spack/repos/builtin/packages/openldap/package.py index d5fe9f11007eb1..629a81950b6d71 100644 --- a/var/spack/repos/builtin/packages/openldap/package.py +++ b/var/spack/repos/builtin/packages/openldap/package.py @@ -21,6 +21,7 @@ class Openldap(AutotoolsPackage): license("OLDAP-2.8") + version("2.6.8", sha256="48969323e94e3be3b03c6a132942dcba7ef8d545f2ad35401709019f696c3c4e") version("2.6.4", sha256="d51704e50178430c06cf3d8aa174da66badf559747a47d920bb54b2d4aa40991") version("2.6.0", sha256="b71c580eac573e9aba15d95f33dd4dd08f2ed4f0d7fc09e08ad4be7ed1e41a4f") version("2.4.49", sha256="e3b117944b4180f23befe87d0dcf47f29de775befbc469dcf4ac3dab3311e56e") @@ -67,6 +68,9 @@ class Openldap(AutotoolsPackage): depends_on("findutils", type="build") # see https://github.com/openldap/openldap/blob/OPENLDAP_REL_ENG_2_4_48/libraries/liblunicode/Makefile.in + # Newer C compilers (>= Clang 16 and >= GCC 14) reject some constructs removed in C99 + conflicts("%gcc@14:", when="@:2.6.4", msg="Newer C compilers required 2.6.5 or newer") + # Ref: https://www.linuxfromscratch.org/blfs/view/svn/server/openldap.html @when("+client_only") def configure_args(self): diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py index 4b2c81dc033967..889d9034354806 100644 --- a/var/spack/repos/builtin/packages/openmpi/package.py +++ b/var/spack/repos/builtin/packages/openmpi/package.py @@ -11,6 +11,8 @@ import llnl.util.tty as tty +import spack.compilers +import spack.version from spack.package import * @@ -63,6 +65,9 @@ class Openmpi(AutotoolsPackage, CudaPackage): version( "5.0.0", sha256="9d845ca94bc1aeb445f83d98d238cd08f6ec7ad0f73b0f79ec1668dbfdacd613" ) # libmpi.so.40.40.0 + version( + "4.1.7", sha256="54a33cb7ad81ff0976f15a6cc8003c3922f0f3d8ceed14e1813ef3603f22cd34" + ) # libmpi.so.40.30.7 version( "4.1.6", sha256="f740994485516deb63b5311af122c265179f5328a0d857a567b85db00b11e415" ) # libmpi.so.40.30.6 @@ -449,33 +454,34 @@ class Openmpi(AutotoolsPackage, CudaPackage): patch("pmix_getline_pmix_version.patch", when="@5.0.0:5.0.3") patch("pmix_getline_pmix_version-prte.patch", when="@5.0.3") + FABRICS = ( + "psm", + "psm2", + "verbs", + "mxm", + "ucx", + "ofi", + "fca", + "hcoll", + "ucc", + "xpmem", + "cma", + "knem", + ) + variant( "fabrics", values=disjoint_sets( - ("auto",), - ( - "psm", - "psm2", - "verbs", - "mxm", - "ucx", - "ofi", - "fca", - "hcoll", - "ucc", - "xpmem", - "cma", - "knem", - ), # shared memory transports + ("auto",), FABRICS # shared memory transports ).with_non_feature_values("auto", "none"), description="List of fabrics that are enabled; " "'auto' lets openmpi determine", ) + SCHEDULERS = ("alps", "lsf", "tm", "slurm", "sge", "loadleveler") + variant( "schedulers", - values=disjoint_sets( - ("auto",), ("alps", "lsf", "tm", "slurm", "sge", "loadleveler") - ).with_non_feature_values("auto", "none"), + values=disjoint_sets(("auto",), SCHEDULERS).with_non_feature_values("auto", "none"), description="List of schedulers for which support is enabled; " "'auto' lets openmpi determine", ) @@ -571,6 +577,24 @@ class Openmpi(AutotoolsPackage, CudaPackage): variant("openshmem", default=False, description="Enable building OpenSHMEM") variant("debug", default=False, description="Make debug build", when="build_system=autotools") + variant( + "two_level_namespace", + default=False, + description="""Build shared libraries and programs +built with the mpicc/mpifort/etc. compiler wrappers +with '-Wl,-commons,use_dylibs' and without +'-Wl,-flat_namespace'.""", + ) + + # Patch to allow two-level namespace on a MacOS platform when building + # openmpi. Unfortuntately, the openmpi configure command has flat namespace + # hardwired in. In spack, this only works for openmpi up to versions 4, + # because for versions 5+ autoreconf is triggered (see below) and this + # patch needs to be applied (again) AFTER autoreconf ran. + @when("+two_level_namespace platform=darwin") + def patch(self): + filter_file(r"-flat_namespace", "-commons,use_dylibs", "configure") + provides("mpi@:2.0", when="@:1.2") provides("mpi@:2.1", when="@1.3:1.7.2") provides("mpi@:2.2", when="@1.7.3:1.7.4") @@ -803,24 +827,26 @@ def determine_variants(cls, exes, version): variants.append("~pmi") # fabrics - fabrics = get_options_from_variant(cls, "fabrics") used_fabrics = [] - for fabric in fabrics: + for fabric in cls.FABRICS: match = re.search(r"\bMCA (?:mtl|btl|pml): %s\b" % fabric, output) if match: used_fabrics.append(fabric) if used_fabrics: variants.append("fabrics=" + ",".join(used_fabrics)) + else: + variants.append("fabrics=none") # schedulers - schedulers = get_options_from_variant(cls, "schedulers") used_schedulers = [] - for scheduler in schedulers: + for scheduler in cls.SCHEDULERS: match = re.search(r"\bMCA (?:prrte|ras): %s\b" % scheduler, output) if match: used_schedulers.append(scheduler) if used_schedulers: variants.append("schedulers=" + ",".join(used_schedulers)) + else: + variants.append("schedulers=none") # Get the appropriate compiler match = re.search(r"\bC compiler absolute: (\S+)", output) @@ -991,11 +1017,15 @@ def die_without_fortran(self): def autoreconf(self, spec, prefix): perl = which("perl") perl("autogen.pl") + if spec.satisfies("+two_level_namespace platform=darwin"): + filter_file(r"-flat_namespace", "-commons,use_dylibs", "configure") @when("@5.0.0:5.0.1") def autoreconf(self, spec, prefix): perl = which("perl") perl("autogen.pl", "--force") + if spec.satisfies("+two_level_namespace platform=darwin"): + filter_file(r"-flat_namespace", "-commons,use_dylibs", "configure") def configure_args(self): spec = self.spec @@ -1134,13 +1164,6 @@ def configure_args(self): if spec.satisfies("@1.7.2"): # There was a bug in 1.7.2 when --enable-static is used config_args.append("--enable-mca-no-build=pml-bfo") - if spec.satisfies("%pgi^cuda@7.0:7"): - # OpenMPI has problems with CUDA 7 and PGI - config_args.append("--with-wrapper-cflags=-D__LP64__ -ta:tesla") - if spec.satisfies("%pgi@:15.8"): - # With PGI 15.9 and later compilers, the - # CFLAGS=-D__LP64__ is no longer needed. - config_args.append("CFLAGS=-D__LP64__") elif spec.satisfies("@1.7:"): config_args.append("--without-cuda") @@ -1409,12 +1432,3 @@ def is_enabled(text): if text in set(["t", "true", "enabled", "yes", "1"]): return True return False - - -# This code gets all the fabric names from the variants list -# Idea taken from the AutotoolsPackage source. -def get_options_from_variant(self, name): - values = self.variants[name][0].values - if getattr(values, "feature_values", None): - values = values.feature_values - return values diff --git a/var/spack/repos/builtin/packages/openpmd-api/package.py b/var/spack/repos/builtin/packages/openpmd-api/package.py index d05af6a7338f8c..54a1cabe2841eb 100644 --- a/var/spack/repos/builtin/packages/openpmd-api/package.py +++ b/var/spack/repos/builtin/packages/openpmd-api/package.py @@ -41,7 +41,8 @@ class OpenpmdApi(CMakePackage): version("0.12.0", tag="0.12.0-alpha", commit="23be484dd2570b5277779eafcc5f1eb70c6d98f2") version("0.11.1", tag="0.11.1-alpha", commit="c40292aafbf564807710424d106304f9670a8304") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="Build a shared version of the library") variant("mpi", default=True, description="Enable parallel I/O") diff --git a/var/spack/repos/builtin/packages/openssh/package.py b/var/spack/repos/builtin/packages/openssh/package.py index 07ea7c9599b192..a31bbf46fb9585 100755 --- a/var/spack/repos/builtin/packages/openssh/package.py +++ b/var/spack/repos/builtin/packages/openssh/package.py @@ -25,35 +25,38 @@ class Openssh(AutotoolsPackage): license("SSH-OpenSSH") + version("9.9p1", sha256="b343fbcdbff87f15b1986e6e15d6d4fc9a7d36066be6b7fb507087ba8f966c02") version("9.8p1", sha256="dd8bd002a379b5d499dfb050dd1fa9af8029e80461f4bb6c523c49973f5a39f3") version("9.7p1", sha256="490426f766d82a2763fcacd8d83ea3d70798750c7bd2aff2e57dc5660f773ffd") version("9.6p1", sha256="910211c07255a8c5ad654391b40ee59800710dd8119dd5362de09385aa7a777c") version("9.5p1", sha256="f026e7b79ba7fb540f75182af96dc8a8f1db395f922bbc9f6ca603672686086b") version("9.4p1", sha256="3608fd9088db2163ceb3e600c85ab79d0de3d221e59192ea1923e23263866a85") version("9.3p1", sha256="e9baba7701a76a51f3d85a62c383a3c9dcd97fa900b859bc7db114c1868af8a8") - version("9.2p1", sha256="3f66dbf1655fb45f50e1c56da62ab01218c228807b21338d634ebcdf9d71cf46") - version("9.1p1", sha256="19f85009c7e3e23787f0236fbb1578392ab4d4bf9f8ec5fe6bc1cd7e8bfdd288") - version("9.0p1", sha256="03974302161e9ecce32153cfa10012f1e65c8f3750f573a73ab1befd5972a28a") - version("8.9p1", sha256="fd497654b7ab1686dac672fb83dfb4ba4096e8b5ffcdaccd262380ae58bec5e7") - version("8.8p1", sha256="4590890ea9bb9ace4f71ae331785a3a5823232435161960ed5fc86588f331fe9") - version("8.7p1", sha256="7ca34b8bb24ae9e50f33792b7091b3841d7e1b440ff57bc9fabddf01e2ed1e24") - version("8.6p1", sha256="c3e6e4da1621762c850d03b47eed1e48dff4cc9608ddeb547202a234df8ed7ae") - version("8.5p1", sha256="f52f3f41d429aa9918e38cf200af225ccdd8e66f052da572870c89737646ec25") - version("8.4p1", sha256="5a01d22e407eb1c05ba8a8f7c654d388a13e9f226e4ed33bd38748dafa1d2b24") - version("8.3p1", sha256="f2befbe0472fe7eb75d23340eb17531cb6b3aac24075e2066b41f814e12387b2") - version("8.1p1", sha256="02f5dbef3835d0753556f973cd57b4c19b6b1f6cd24c03445e23ac77ca1b93ff") - version("7.9p1", sha256="6b4b3ba2253d84ed3771c8050728d597c91cfce898713beb7b64a305b6f11aad") - version("7.6p1", sha256="a323caeeddfe145baaa0db16e98d784b1fbc7dd436a6bf1f479dfd5cd1d21723") - version("7.5p1", sha256="9846e3c5fab9f0547400b4d2c017992f914222b3fd1f8eee6c7dc6bc5e59f9f0") - version("7.4p1", sha256="1b1fc4a14e2024293181924ed24872e6f2e06293f3e8926a376b8aec481f19d1") - version("7.3p1", sha256="3ffb989a6dcaa69594c3b550d4855a5a2e1718ccdde7f5e36387b424220fbecc") - version("7.2p2", sha256="a72781d1a043876a224ff1b0032daa4094d87565a68528759c1c2cab5482548c") - version("7.1p2", sha256="dd75f024dcf21e06a0d6421d582690bf987a1f6323e32ad6619392f3bfde6bbd") - version("7.0p1", sha256="fd5932493a19f4c81153d812ee4e042b49bbd3b759ab3d9344abecc2bc1485e5") - version("6.9p1", sha256="6e074df538f357d440be6cf93dc581a21f22d39e236f217fcd8eacbb6c896cfe") - version("6.8p1", sha256="3ff64ce73ee124480b5bf767b9830d7d3c03bbcb6abe716b78f0192c37ce160e") - version("6.7p1", sha256="b2f8394eae858dabbdef7dac10b99aec00c95462753e80342e530bbb6f725507") - version("6.6p1", sha256="48c1f0664b4534875038004cc4f3555b8329c2a81c1df48db5c517800de203bb") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-38408 + version("9.2p1", sha256="3f66dbf1655fb45f50e1c56da62ab01218c228807b21338d634ebcdf9d71cf46") + version("9.1p1", sha256="19f85009c7e3e23787f0236fbb1578392ab4d4bf9f8ec5fe6bc1cd7e8bfdd288") + version("9.0p1", sha256="03974302161e9ecce32153cfa10012f1e65c8f3750f573a73ab1befd5972a28a") + version("8.9p1", sha256="fd497654b7ab1686dac672fb83dfb4ba4096e8b5ffcdaccd262380ae58bec5e7") + version("8.8p1", sha256="4590890ea9bb9ace4f71ae331785a3a5823232435161960ed5fc86588f331fe9") + version("8.7p1", sha256="7ca34b8bb24ae9e50f33792b7091b3841d7e1b440ff57bc9fabddf01e2ed1e24") + version("8.6p1", sha256="c3e6e4da1621762c850d03b47eed1e48dff4cc9608ddeb547202a234df8ed7ae") + version("8.5p1", sha256="f52f3f41d429aa9918e38cf200af225ccdd8e66f052da572870c89737646ec25") + version("8.4p1", sha256="5a01d22e407eb1c05ba8a8f7c654d388a13e9f226e4ed33bd38748dafa1d2b24") + version("8.3p1", sha256="f2befbe0472fe7eb75d23340eb17531cb6b3aac24075e2066b41f814e12387b2") + version("8.1p1", sha256="02f5dbef3835d0753556f973cd57b4c19b6b1f6cd24c03445e23ac77ca1b93ff") + version("7.9p1", sha256="6b4b3ba2253d84ed3771c8050728d597c91cfce898713beb7b64a305b6f11aad") + version("7.6p1", sha256="a323caeeddfe145baaa0db16e98d784b1fbc7dd436a6bf1f479dfd5cd1d21723") + version("7.5p1", sha256="9846e3c5fab9f0547400b4d2c017992f914222b3fd1f8eee6c7dc6bc5e59f9f0") + version("7.4p1", sha256="1b1fc4a14e2024293181924ed24872e6f2e06293f3e8926a376b8aec481f19d1") + version("7.3p1", sha256="3ffb989a6dcaa69594c3b550d4855a5a2e1718ccdde7f5e36387b424220fbecc") + version("7.2p2", sha256="a72781d1a043876a224ff1b0032daa4094d87565a68528759c1c2cab5482548c") + version("7.1p2", sha256="dd75f024dcf21e06a0d6421d582690bf987a1f6323e32ad6619392f3bfde6bbd") + version("7.0p1", sha256="fd5932493a19f4c81153d812ee4e042b49bbd3b759ab3d9344abecc2bc1485e5") + version("6.9p1", sha256="6e074df538f357d440be6cf93dc581a21f22d39e236f217fcd8eacbb6c896cfe") + version("6.8p1", sha256="3ff64ce73ee124480b5bf767b9830d7d3c03bbcb6abe716b78f0192c37ce160e") + version("6.7p1", sha256="b2f8394eae858dabbdef7dac10b99aec00c95462753e80342e530bbb6f725507") + version("6.6p1", sha256="48c1f0664b4534875038004cc4f3555b8329c2a81c1df48db5c517800de203bb") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py index a974bc8c97fb90..cf0e5544fb1919 100644 --- a/var/spack/repos/builtin/packages/openssl/package.py +++ b/var/spack/repos/builtin/packages/openssl/package.py @@ -30,26 +30,47 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package license("Apache-2.0") - version("3.3.1", sha256="777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e") - version("3.2.2", sha256="197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7") - version("3.1.6", sha256="5d2be4036b478ef3cb0a854ca9b353072c3a0e26d8a56f8f0ab9fb6ed32d38d7") - version("3.0.14", sha256="eeca035d4dd4e84fc25846d952da6297484afa0650a6f84c682e39df3a4123ca") + version("3.4.0", sha256="e15dda82fe2fe8139dc2ac21a36d4ca01d5313c75f99f46c4e8a27709b7294bf") + version("3.3.2", sha256="2e8a40b01979afe8be0bbfb3de5dc1c6709fedb46d6c89c10da114ab5fc3d281") + version("3.2.3", sha256="52b5f1c6b8022bc5868c308c54fb77705e702d6c6f4594f99a0df216acf46239") + version("3.1.7", sha256="053a31fa80cf4aebe1068c987d2ef1e44ce418881427c4464751ae800c31d06c") + version("3.0.15", sha256="23c666d0edf20f14249b3d8f0368acaee9ab585b09e1de82107c66e1f3ec9533") + version( + "3.3.1", + sha256="777cd596284c883375a2a7a11bf5d2786fc5413255efab20c50d6ffe6d020b7e", + deprecated=True, + ) version( "3.3.0", sha256="53e66b043322a606abf0087e7699a0e033a37fa13feb9742df35c3a33b18fb02", deprecated=True, ) + version( + "3.2.2", + sha256="197149c18d9e9f292c43f0400acaba12e5f52cacfe050f3d199277ea738ec2e7", + deprecated=True, + ) version( "3.2.1", sha256="83c7329fe52c850677d75e5d0b0ca245309b97e8ecbcfdc1dfdc4ab9fac35b39", deprecated=True, ) + version( + "3.1.6", + sha256="5d2be4036b478ef3cb0a854ca9b353072c3a0e26d8a56f8f0ab9fb6ed32d38d7", + deprecated=True, + ) version( "3.1.5", sha256="6ae015467dabf0469b139ada93319327be24b98251ffaeceda0221848dc09262", deprecated=True, ) + version( + "3.0.14", + sha256="eeca035d4dd4e84fc25846d952da6297484afa0650a6f84c682e39df3a4123ca", + deprecated=True, + ) version( "3.0.13", sha256="88525753f79d3bec27d2fa7c66aa0b92b3aa9498dafd93d7cfa4b3780cdae313", diff --git a/var/spack/repos/builtin/packages/openturns/package.py b/var/spack/repos/builtin/packages/openturns/package.py index ba002881d91559..3e2d55d93eb54c 100644 --- a/var/spack/repos/builtin/packages/openturns/package.py +++ b/var/spack/repos/builtin/packages/openturns/package.py @@ -27,44 +27,61 @@ class Openturns(CMakePackage): version("1.19", sha256="1d61cb6ce8ec1121db9f1e9fb490aaa056d2ff250db26df05d2e3e30ceb32344") version("1.18", sha256="1840d3fd8b38fd5967b1fa04e49d8f760c2c497400430e97623595ca48754ae0") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - variant("python", default=True, description="Build Python bindings") variant("libxml2", default=False, description="Use LibXML2 for XML support") - extends("python", when="+python") + depends_on("c", type="build") + depends_on("cxx", type="build") - depends_on("mpi", type=("build", "run")) - depends_on("lapack", type=("build", "run")) depends_on("cmake@2.8:", type="build") - depends_on("swig", type=("build", "run")) - depends_on("py-numpy@1.7:", type=("build", "run")) - depends_on("py-pandas", type=("build", "run")) - depends_on("py-matplotlib", type=("build", "run")) - depends_on("boost+system+serialization+thread", type=("build", "run")) - depends_on("intel-tbb", type=("build", "run")) - depends_on("py-cloudpickle", type=("build", "run")) - depends_on("py-urllib3", type=("build", "run")) - depends_on("libxml2", type=("build", "run"), when="+libxml2") + depends_on("bison", type="build") + depends_on("flex", type="build") - def cmake_args(self): - spec = self.spec + depends_on("lapack") + depends_on("boost+system+serialization+thread") + depends_on("intel-tbb") + depends_on("libxml2", when="+libxml2") + with when("+python"): + extends("python") + depends_on("swig") + depends_on("py-numpy@1.7:", type=("build", "run")) + depends_on("py-pandas", type=("build", "run")) + depends_on("py-matplotlib", type=("build", "run")) + depends_on("py-cloudpickle", type=("build", "run")) + depends_on("py-urllib3", type=("build", "run")) + + def cmake_args(self): args = [ - "-DCMAKE_C_COMPILER=%s" % spec["mpi"].mpicc, - "-DCMAKE_CXX_COMPILER=%s" % spec["mpi"].mpicxx, - "-DCMAKE_INSTALL_LIBDIR:STRING=%s" % self.prefix.lib, - "-DCMAKE_INSTALL_BINDIR:STRING=%s" % self.prefix.bin, - "-DLAPACK_LIBRARIES=%s" % spec["lapack"].libs.joined(";"), + self.define("USE_BISON", True), + self.define("USE_BOOST", True), + self.define("USE_FLEX", True), + self.define("USE_OPENMP", True), + self.define("USE_TBB", True), + self.define("LAPACK_LIBRARIES", list(self.spec["lapack"].libs)), + self.define_from_variant("USE_LIBXML2", "libxml2"), + # disable optional features explicitly + self.define("USE_BONMIN", False), + self.define("USE_CERES", False), + self.define("USE_CMINPACK", False), + self.define("USE_CUBA", False), + self.define("USE_DLIB", False), + self.define("USE_DOXYGEN", False), + self.define("USE_HDF5", False), + self.define("USE_HMAT", False), + self.define("USE_IPOPT", False), + self.define("USE_MPC", False), + self.define("USE_MPFR", False), + self.define("USE_MUPARSER", False), + self.define("USE_NANOFLANN", False), + self.define("USE_NLOPT", False), + self.define("USE_PAGMO", False), + self.define("USE_PRIMESIEVE", False), + self.define("USE_SPECTRA", False), + self.define("USE_SPHINX", False), ] - if "+python" in spec: - args.extend( - [ - # By default installs to the python prefix - "-DPYTHON_SITE_PACKAGES={0}".format(python_platlib) - ] - ) + if self.spec.satisfies("+python"): + args.append(self.define("PYTHON_SITE_PACKAGES", python_platlib)) return args diff --git a/var/spack/repos/builtin/packages/optipng/for_aarch64.patch b/var/spack/repos/builtin/packages/optipng/for_aarch64_0.7.7.patch similarity index 100% rename from var/spack/repos/builtin/packages/optipng/for_aarch64.patch rename to var/spack/repos/builtin/packages/optipng/for_aarch64_0.7.7.patch diff --git a/var/spack/repos/builtin/packages/optipng/for_aarch64_0.7.8.patch b/var/spack/repos/builtin/packages/optipng/for_aarch64_0.7.8.patch new file mode 100644 index 00000000000000..9fa2386b3c1e8b --- /dev/null +++ b/var/spack/repos/builtin/packages/optipng/for_aarch64_0.7.8.patch @@ -0,0 +1,11 @@ +--- spack-src/configure.bak 2017-12-27 20:57:00.000000000 +0900 ++++ spack-src/configure 2020-09-28 17:04:51.030223443 +0900 +@@ -193,7 +193,7 @@ + if test "$gccish" -ne 0 + then + CC="${CC-$cc}" +- CFLAGS="${CFLAGS--O2 -Wall -Wextra -Wundef}" ++ CFLAGS="${CFLAGS--O2 -Wall -Wextra -Wundef -DPNG_ARM_NEON_OPT=0}" + else + CC="${CC-cc}" + CFLAGS="${CFLAGS--O}" diff --git a/var/spack/repos/builtin/packages/optipng/package.py b/var/spack/repos/builtin/packages/optipng/package.py index ddbfb626bacf7d..9223cce45c1d22 100644 --- a/var/spack/repos/builtin/packages/optipng/package.py +++ b/var/spack/repos/builtin/packages/optipng/package.py @@ -19,9 +19,14 @@ class Optipng(AutotoolsPackage, SourceforgePackage): license("Zlib") - version("0.7.7", sha256="4f32f233cef870b3f95d3ad6428bfe4224ef34908f1b42b0badf858216654452") + version("0.7.8", sha256="25a3bd68481f21502ccaa0f4c13f84dcf6b20338e4c4e8c51f2cefbd8513398c") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-43907 + version("0.7.7", sha256="4f32f233cef870b3f95d3ad6428bfe4224ef34908f1b42b0badf858216654452") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated + # See https://github.com/imagemin/optipng-bin/issues/97 - patch("for_aarch64.patch", when="target=aarch64:") + patch("for_aarch64_0.7.7.patch", when="@0.7.7") + patch("for_aarch64_0.7.8.patch", when="@0.7.8:") diff --git a/var/spack/repos/builtin/packages/orca/package.py b/var/spack/repos/builtin/packages/orca/package.py index 00021a970d73b1..80e3463703a2f4 100644 --- a/var/spack/repos/builtin/packages/orca/package.py +++ b/var/spack/repos/builtin/packages/orca/package.py @@ -23,6 +23,10 @@ class Orca(Package): license("LGPL-2.1-or-later") + version( + "avx2-6.0.1", sha256="f31f98256a0c6727b6ddfe50aa3ac64c45549981138d670a57e90114b4b9c9d2" + ) + version("6.0.1", sha256="5e9b49588375e0ce5bc32767127cc725f5425917804042cdecdfd5c6b965ef61") version( "avx2-6.0.0", sha256="02c21294efe7b1b721e26cb90f98ee15ad682d02807201b7d217dfe67905a2fd" ) @@ -43,7 +47,9 @@ class Orca(Package): "5.0.3": "4.1.2", "5.0.4": "4.1.2", "6.0.0": "4.1.6", + "6.0.1": "4.1.6", "avx2-6.0.0": "4.1.6", + "avx2-6.0.1": "4.1.6", } for orca_version, openmpi_version in openmpi_versions.items(): depends_on( @@ -54,11 +60,17 @@ def url_for_version(self, version): openmpi_version = self.openmpi_versions[version.string].replace(".", "") if openmpi_version == "412": openmpi_version = "411" + ver_parts = version.string.split("-") ver_underscored = ver_parts[-1].replace(".", "_") features = ver_parts[:-1] + ["shared"] feature_text = "_".join(features) - return f"file://{os.getcwd()}/orca_{ver_underscored}_linux_x86-64_{feature_text}_openmpi{openmpi_version}.tar.xz" + + url = f"file://{os.getcwd()}/orca_{ver_underscored}_linux_x86-64_{feature_text}_openmpi{openmpi_version}.tar.xz" + if self.spec.satisfies("@=avx2-6.0.1"): + url = f"file://{os.getcwd()}/orca_{ver_underscored}_linux_x86-64_shared_openmpi{openmpi_version}_avx2.tar.xz" + + return url def install(self, spec, prefix): mkdirp(prefix.bin) diff --git a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py index bf2c2e505dc20c..204e4e97f74a4b 100644 --- a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py +++ b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py @@ -20,6 +20,7 @@ class OsuMicroBenchmarks(AutotoolsPackage, CudaPackage, ROCmPackage): maintainers("natshineman", "harisubramoni", "MatthewLieber") + version("7.5", sha256="1cf84ac5419456202757a757c5f9a4f5c6ecd05c65783c7976421cfd6020b3b3") version("7.4", sha256="1edd0c2efa61999409bfb28740a7f39689a5b42b1a1b4c66d1656e5637f7cefc") version("7.3", sha256="8fa25b8aaa34e4b07ab3a4f30b7690ab46b038b08d204a853a9b6aa7bdb02f2f") version("7.2", sha256="1a4e1f2aab0e65404b3414e23bd46616184b69b6231ce9313d9c630bd6e633c1") diff --git a/var/spack/repos/builtin/packages/otf-cpt/package.py b/var/spack/repos/builtin/packages/otf-cpt/package.py new file mode 100644 index 00000000000000..4ad43a6b2923fa --- /dev/null +++ b/var/spack/repos/builtin/packages/otf-cpt/package.py @@ -0,0 +1,37 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class OtfCpt(CMakePackage): + """Tool to collect and report model factors (aka. fundamental performance factors) + for hybrid MPI + OpenMP applications on-the-fly.""" + + # Add a proper url for your package's homepage here. + homepage = ( + "https://github.com/RWTH-HPC/OTF-CPT?tab=readme-ov-file#on-the-fly-critical-path-tool" + ) + git = "https://github.com/RWTH-HPC/OTF-CPT.git" + + maintainers("jgraciahlrs", "jprotze") + + license("Apache-2.0", checked_by="jgraciahlrs") + + version("0.9", tag="v0.9") + + depends_on("cxx", type="build") + depends_on("mpi") + conflicts( + "%gcc", + # Use a clang compiler with a matching libomp, e.g. 'sudo apt install libomp-14-dev': + msg="gcc currently does not support OMPT, please use a clang-like compiler with libomp", + ) + + patch( + "https://github.com/RWTH-HPC/OTF-CPT/commit/b58f83588a4c231b71ca48dcddd909e1ab318cc6.diff?full_index=1", + sha256="35fadc3e61e5b7aa3a68272f701af3a242e30a435f1ddd679577ba35c7496565", + when="@0.9", + ) diff --git a/var/spack/repos/builtin/packages/p3dfft3/package.py b/var/spack/repos/builtin/packages/p3dfft3/package.py index 11427f1f8e1ea3..8ce6d33e4ec3ef 100644 --- a/var/spack/repos/builtin/packages/p3dfft3/package.py +++ b/var/spack/repos/builtin/packages/p3dfft3/package.py @@ -64,9 +64,6 @@ def configure_args(self): if "%cce" in self.spec: args.append("--enable-cray") - if "%pgi" in self.spec: - args.append("--enable-pgi") - if "+mpi" in self.spec: args.append("CC=%s" % self.spec["mpi"].mpicc) args.append("CXX=%s" % self.spec["mpi"].mpicxx) diff --git a/var/spack/repos/builtin/packages/pagmo2/package.py b/var/spack/repos/builtin/packages/pagmo2/package.py index 527314c70055b0..d8569ac8119419 100644 --- a/var/spack/repos/builtin/packages/pagmo2/package.py +++ b/var/spack/repos/builtin/packages/pagmo2/package.py @@ -22,7 +22,8 @@ class Pagmo2(CMakePackage): version("master", branch="master") version("2.18.0", sha256="5ad40bf3aa91857a808d6b632d9e1020341a33f1a4115d7a2b78b78fd063ae31") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("boost+system+serialization+thread") depends_on("intel-tbb") diff --git a/var/spack/repos/builtin/packages/pango/package.py b/var/spack/repos/builtin/packages/pango/package.py index 5e4db93eba4551..ae032673aa65b7 100644 --- a/var/spack/repos/builtin/packages/pango/package.py +++ b/var/spack/repos/builtin/packages/pango/package.py @@ -22,6 +22,7 @@ class Pango(MesonPackage): # Do not upgrade to v1.90.x. It is a development release in preparation for # v2.0 that will break API and ABI compatibility. For more information see # https://download.gnome.org/sources/pango/1.90/pango-1.90.0.news + version("1.54.0", sha256="8a9eed75021ee734d7fc0fdf3a65c3bba51dfefe4ae51a9b414a60c70b2d1ed8") version("1.52.2", sha256="d0076afe01082814b853deec99f9349ece5f2ce83908b8e58ff736b41f78a96b") version("1.50.13", sha256="5cdcf6d761d26a3eb9412b6cb069b32bd1d9b07abf116321167d94c2189299fd") version("1.50.7", sha256="0477f369a3d4c695df7299a6989dc004756a7f4de27eecac405c6790b7e3ad33") @@ -30,14 +31,26 @@ class Pango(MesonPackage): version("1.47.0", sha256="730db8652fc43188e03218c3374db9d152351f51fc7011b9acae6d0a6c92c367") version("1.46.2", sha256="d89fab5f26767261b493279b65cfb9eb0955cd44c07c5628d36094609fc51841") version("1.45.5", sha256="f61dd911de2d3318b43bbc56bd271637a46f9118a1ee4378928c06df8a1c1705") - version("1.44.6", sha256="3e1e41ba838737e200611ff001e3b304c2ca4cdbba63d200a20db0b0ddc0f86c") - version("1.42.4", sha256="1d2b74cd63e8bd41961f2f8d952355aa0f9be6002b52c8aa7699d9f5da597c9d") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2019-1010238 + version( + "1.44.6", sha256="3e1e41ba838737e200611ff001e3b304c2ca4cdbba63d200a20db0b0ddc0f86c" + ) + version( + "1.42.4", sha256="1d2b74cd63e8bd41961f2f8d952355aa0f9be6002b52c8aa7699d9f5da597c9d" + ) depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated variant("X", default=False, description="Enable an X toolkit") + depends_on("meson@0.48:", type="build", when="@1.43:") + depends_on("meson@0.50:", type="build", when="@1.44.4:") + depends_on("meson@0.54:", type="build", when="@1.48.0:") + depends_on("meson@0.55.3:", type="build", when="@1.48.1:") + depends_on("meson@0.60:", type="build", when="@1.50.13:") + depends_on("meson@0.63:", type="build", when="@1.54:") depends_on("pkgconfig@0.9.0:", type="build") depends_on("harfbuzz") depends_on("harfbuzz+coretext", when="platform=darwin") @@ -89,7 +102,9 @@ def meson_args(self): args.append("-Dxft=disabled") # disable building of gtk-doc files following #9885 and #9771 - if spec.satisfies("@1.44:"): + if spec.satisfies("@1.54:"): + args.append("-Ddocumentation=false") + elif spec.satisfies("@1.44:"): args.append("-Dgtk_doc=false") else: args.append("-Denable_docs=false") diff --git a/var/spack/repos/builtin/packages/papi/package.py b/var/spack/repos/builtin/packages/papi/package.py index b1c869f7bada03..8d068108b37c81 100644 --- a/var/spack/repos/builtin/packages/papi/package.py +++ b/var/spack/repos/builtin/packages/papi/package.py @@ -9,6 +9,7 @@ import llnl.util.filesystem as fs +import spack.util.environment from spack.package import * @@ -59,6 +60,12 @@ class Papi(AutotoolsPackage, ROCmPackage): variant("cuda", default=False, description="Enable CUDA support") variant("nvml", default=False, description="Enable NVML support") variant("rocm_smi", default=False, description="Enable ROCm SMI support") + variant( + "rdpmc", + default=True, + when="@6.0.0:", + description="Enable use of rdpmc for reading counters, when possible", + ) variant("shared", default=True, description="Build shared libraries") # PAPI requires building static libraries, so there is no "static" variant @@ -79,6 +86,8 @@ class Papi(AutotoolsPackage, ROCmPackage): conflicts("%gcc@8:", when="@5.3.0", msg="Requires GCC version less than 8.0") conflicts("+sde", when="@:5", msg="Software defined events (SDE) added in 6.0.0") conflicts("^cuda", when="@:5", msg="CUDA support for versions < 6.0.0 not implemented") + # https://github.com/icl-utk-edu/papi/pull/205 + conflicts("^cuda@12.4:", when="@:7.1") conflicts("%cce", when="@7.1:", msg="-ffree-form flag not recognized") conflicts("@=6.0.0", when="+static_tools", msg="Static tools cannot build on version 6.0.0") @@ -159,6 +168,9 @@ def configure_args(self): build_shared = "yes" if "+shared" in spec else "no" options.append("--with-shared-lib=" + build_shared) + build_rdpmc_support = "yes" if "+rdpmc" in spec else "no" + options.append("--enable-perfevent-rdpmc=" + build_rdpmc_support) + if "+static_tools" in spec: options.append("--with-static-tools") diff --git a/var/spack/repos/builtin/packages/papyrus/package.py b/var/spack/repos/builtin/packages/papyrus/package.py index 166dbee53f916e..4540559362b632 100644 --- a/var/spack/repos/builtin/packages/papyrus/package.py +++ b/var/spack/repos/builtin/packages/papyrus/package.py @@ -26,6 +26,9 @@ class Papyrus(CMakePackage): depends_on("mpi") + depends_on("c", type="build") + depends_on("cxx", type="build") + test_requires_compiler = True def setup_run_environment(self, env): diff --git a/var/spack/repos/builtin/packages/parallel-netcdf/package.py b/var/spack/repos/builtin/packages/parallel-netcdf/package.py index f7bf6935779342..67b7cd867bf04a 100644 --- a/var/spack/repos/builtin/packages/parallel-netcdf/package.py +++ b/var/spack/repos/builtin/packages/parallel-netcdf/package.py @@ -105,7 +105,7 @@ def libs(self): msg = f"Unable to recursively locate {'shared' if shared else 'static'} \ {self.spec.name} libraries in {self.spec.prefix}" - raise spack.error.NoLibrariesError(msg) + raise NoLibrariesError(msg) @when("@master") def autoreconf(self, spec, prefix): diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py index 92cbdb89919f64..442bd2b12c2c0a 100644 --- a/var/spack/repos/builtin/packages/paraview/package.py +++ b/var/spack/repos/builtin/packages/paraview/package.py @@ -88,6 +88,7 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage): variant("nvindex", default=False, description="Enable the pvNVIDIAIndeX plugin") variant("tbb", default=False, description="Enable multi-threaded parallelism with TBB") variant("adios2", default=False, description="Enable ADIOS2 support", when="@5.8:") + variant("fides", default=False, description="Enable Fides support", when="@5.9:") variant("visitbridge", default=False, description="Enable VisItBridge support") variant("raytracing", default=False, description="Enable Raytracing support") variant("cdi", default=False, description="Enable CDI support") @@ -130,6 +131,9 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage): conflicts("~hdf5", when="+visitbridge") conflicts("+adios2", when="@:5.10 ~mpi") + conflicts("+fides", when="~adios2", msg="Fides needs ADIOS2") + conflicts("+fides", when="use_vtkm=off", msg="Fides needs VTK-m") + conflicts("+fides", when="use_vtkm=default", msg="Fides needs VTK-m") conflicts("+openpmd", when="~adios2 ~hdf5", msg="openPMD needs ADIOS2 and/or HDF5") conflicts("~shared", when="+cuda") conflicts("+cuda", when="@5.8:5.10") @@ -225,6 +229,7 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage): depends_on("tbb", when="+tbb") depends_on("mpi", when="+mpi") + conflicts("mpi", when="~mpi") depends_on("qt@:4", when="@:5.2.0+qt") depends_on("qt+sql", when="+qt") @@ -304,6 +309,8 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage): # and pre-5.9 is unable to handle that. depends_on("pugixml@:1.10", when="@:5.8") depends_on("pugixml", when="@5.9:") + # 5.13 uses 'remove_children': https://github.com/spack/spack/issues/47098 + depends_on("pugixml@1.11:", when="@5.13:") # ParaView depends on cli11 due to changes in MR # https://gitlab.kitware.com/paraview/paraview/-/merge_requests/4951 @@ -318,6 +325,9 @@ class Paraview(CMakePackage, CudaPackage, ROCmPackage): # https://gitlab.kitware.com/vtk/vtk/-/merge_requests/8474 depends_on("proj@8.1.0", when="@5.11:") + # Patches to vendored VTK-m are needed for forward compat with CUDA 12 (mr 2972 and 3259) + depends_on("cuda@:11", when="+cuda") + patch("stl-reader-pv440.patch", when="@4.4.0") # Broken gcc-detection - improved in 5.1.0, redundant later @@ -573,6 +583,9 @@ def use_x11(): if "+adios2" in spec: cmake_args.extend(["-DPARAVIEW_ENABLE_ADIOS2:BOOL=ON"]) + if "+fides" in spec: + cmake_args.append("-DPARAVIEW_ENABLE_FIDES:BOOL=ON") + # The assumed qt version changed to QT5 (as of paraview 5.2.1), # so explicitly specify which QT major version is actually being used if spec.satisfies("+qt"): @@ -602,11 +615,9 @@ def use_x11(): else: cmake_args.append("-DPARAVIEW_ENABLE_PYTHON:BOOL=OFF") + cmake_args.append("-DPARAVIEW_USE_MPI:BOOL=%s" % variant_bool("+mpi")) if "+mpi" in spec: - mpi_args = [ - "-DPARAVIEW_USE_MPI:BOOL=ON", - "-DMPIEXEC:FILEPATH=%s/bin/mpiexec" % spec["mpi"].prefix, - ] + mpi_args = ["-DMPIEXEC:FILEPATH=%s/bin/mpiexec" % spec["mpi"].prefix] if not sys.platform == "win32": mpi_args.extend( [ diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py index c18d61e798799d..fe6b00c654bc5d 100644 --- a/var/spack/repos/builtin/packages/parmetis/package.py +++ b/var/spack/repos/builtin/packages/parmetis/package.py @@ -21,7 +21,8 @@ class Parmetis(CMakePackage): version("4.0.3", sha256="f2d9a231b7cf97f1fee6e8c9663113ebf6c240d407d3c118c55b3633d6be6e5f") version("4.0.2", sha256="5acbb700f457d3bda7d4bb944b559d7f21f075bb6fa4c33f42c261019ef2f0b2") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="Enables the build of shared libraries.") variant("gdb", default=False, description="Enables gdb support.") @@ -40,13 +41,6 @@ class Parmetis(CMakePackage): # https://bitbucket.org/petsc/pkg-parmetis/commits/82409d68aa1d6cbc70740d0f35024aae17f7d5cb/raw/ patch("pkg-parmetis-82409d68aa1d6cbc70740d0f35024aae17f7d5cb.patch") - def flag_handler(self, name, flags): - if name == "cflags": - if "%pgi" in self.spec: - my_flags = flags + ["-c11"] - return (None, None, my_flags) - return (None, None, flags) - def url_for_version(self, version): url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis" if version < Version("3.2.0"): diff --git a/var/spack/repos/builtin/packages/parsec/package.py b/var/spack/repos/builtin/packages/parsec/package.py index faba983eea22ae..e15068a15ea565 100644 --- a/var/spack/repos/builtin/packages/parsec/package.py +++ b/var/spack/repos/builtin/packages/parsec/package.py @@ -15,7 +15,7 @@ class Parsec(CMakePackage, CudaPackage): parallel execution of micro-tasks on distributed, heterogeneous systems. """ - homepage = "https://icl.utk.edu/dte" + homepage = "https://github.com/icldisco/parsec" git = "https://github.com/icldisco/parsec.git" url = "https://github.com/ICLDisco/parsec/archive/refs/tags/parsec-3.0.2012.tar.gz" list_url = "https://github.com/ICLDisco/parsec/tags" @@ -27,20 +27,12 @@ class Parsec(CMakePackage, CudaPackage): license("BSD-3-Clause-Open-MPI") version("master", branch="master") - version( - "3.0.2209", - sha256="67d383d076991484cb2a265f56420abdea7cc1f329c63ac65a3e96fbfb6cc295", - url="https://bitbucket.org/icldistcomp/parsec/get/parsec-3.0.2209.tar.bz2", - ) - version( - "3.0.2012", - sha256="f565bcfffe106be8237b6aea3e83a5770607b7236606414b6f270244fa6ec3bc", - url="https://bitbucket.org/icldistcomp/parsec/get/parsec-3.0.2012.tar.bz2", - ) + version("3.0.2209", sha256="67d383d076991484cb2a265f56420abdea7cc1f329c63ac65a3e96fbfb6cc295") + version("3.0.2012", sha256="7a8403ca67305738f3974cbc7a51b64c4ec353ae9170f2468262a9a52035eff6") version( "1.1.0", - sha256="d2928033c121000ae0a554f1e7f757c1f22274a8b74457ecd52744ae1f70b95a", - url="https://bitbucket.org/icldistcomp/parsec/get/v1.1.0.tar.bz2", + sha256="d1e038713f2c1cd7db6765c891408d85648c46ee23e780fbd5e941b53c9eef85", + url="https://github.com/ICLDisco/parsec/archive/refs/tags/v1.1.0.tar.gz", ) variant( diff --git a/var/spack/repos/builtin/packages/pcre2/package.py b/var/spack/repos/builtin/packages/pcre2/package.py index df79accc6ed67e..67f0566385e1ee 100644 --- a/var/spack/repos/builtin/packages/pcre2/package.py +++ b/var/spack/repos/builtin/packages/pcre2/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * diff --git a/var/spack/repos/builtin/packages/pdt/package.py b/var/spack/repos/builtin/packages/pdt/package.py index 41a0d02a9fce63..30d2fadfaf9e1b 100644 --- a/var/spack/repos/builtin/packages/pdt/package.py +++ b/var/spack/repos/builtin/packages/pdt/package.py @@ -38,7 +38,8 @@ class Pdt(AutotoolsPackage): version("3.19", sha256="d57234077e2e999f2acf9860ea84369a4694b50cc17fa6728e5255dc5f4a2160") version("3.18.1", sha256="d06c2d1793fadebf169752511e5046d7e02cf3fead6135a35c34b1fee6d6d3b2") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("pic", default=False, description="Builds with pic") @@ -50,23 +51,21 @@ def patch(self): filter_file(r"PDT_GXX=g\+\+ ", r"PDT_GXX=clang++ ", "ductape/Makefile") def configure(self, spec, prefix): - options = ["-prefix=%s" % prefix] - if self.compiler.name == "xl": + options = [f"-prefix={prefix}"] + if spec.satisfies("%xl"): options.append("-XLC") - elif self.compiler.name == "intel": + elif spec.satisfies("%intel"): options.append("-icpc") - elif self.compiler.name == "oneapi": + elif spec.satisfies("%oneapi"): if spec.satisfies("@3.25.2:"): options.append("-icpx") else: options.append("-icpc") - elif self.compiler.name == "pgi": - options.append("-pgCC") - elif self.compiler.name == "gcc": + elif spec.satisfies("%gcc"): options.append("-GNU") - elif self.compiler.name in ["clang", "apple-clang", "aocc"]: + elif spec.satisfies("%clang") or spec.satisfies("%apple-clang") or spec.satisfies("%aocc"): options.append("-clang") - elif self.compiler.name == "cce": + elif spec.satisfies("%cce"): options.append("-CC") else: raise InstallError("Unknown/unsupported compiler family: " + self.compiler.name) diff --git a/var/spack/repos/builtin/packages/pennant/package.py b/var/spack/repos/builtin/packages/pennant/package.py index eb5fd1b8d66f65..a903e0e6e7bac0 100644 --- a/var/spack/repos/builtin/packages/pennant/package.py +++ b/var/spack/repos/builtin/packages/pennant/package.py @@ -40,8 +40,6 @@ def edit(self, spec, prefix): if self.compiler.name == "intel": opt += " -fast -fno-alias" - if self.compiler.name == "pgi": - opt += " -fastsse" makefile.filter("CXXFLAGS_DEBUG .*", "CXXFLAGS_DEBUG := {0}".format(debug)) makefile.filter("CXXFLAGS_OPT .*", "CXXFLAGS_OPT := {0}".format(opt)) diff --git a/var/spack/repos/builtin/packages/perl-mozilla-publicsuffix/package.py b/var/spack/repos/builtin/packages/perl-mozilla-publicsuffix/package.py index 20d234220fbb49..ccabf07271d92a 100644 --- a/var/spack/repos/builtin/packages/perl-mozilla-publicsuffix/package.py +++ b/var/spack/repos/builtin/packages/perl-mozilla-publicsuffix/package.py @@ -24,8 +24,8 @@ class PerlMozillaPublicsuffix(PerlPackage): depends_on("perl-module-build", type="build") depends_on("perl@5.8:", type=("build", "run")) # AUTO-CPAN2Spack - depends_on("perl-uri", type="run") # AUTO-CPAN2Spack depends_on("perl-module-build@0.28:", type="build") # AUTO-CPAN2Spack + depends_on("perl-uri") def patch(self): """HTTP::Tiny has a bad interaction with Errno.pm for Perl <5.22""" diff --git a/var/spack/repos/builtin/packages/perl/package.py b/var/spack/repos/builtin/packages/perl/package.py index 830a6e55d60fa5..3ca82eb36141fd 100644 --- a/var/spack/repos/builtin/packages/perl/package.py +++ b/var/spack/repos/builtin/packages/perl/package.py @@ -265,7 +265,7 @@ def patch(self): @classmethod def determine_version(cls, exe): - perl = spack.util.executable.Executable(exe) + perl = Executable(exe) output = perl("--version", output=str, error=str) if output: match = re.search(r"perl.*\(v([0-9.]+)\)", output) @@ -276,7 +276,7 @@ def determine_version(cls, exe): @classmethod def determine_variants(cls, exes, version): for exe in exes: - perl = spack.util.executable.Executable(exe) + perl = Executable(exe) output = perl("-V", output=str, error=str) variants = "" if output: diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py index 876419cb85dcae..9d983d254f34d4 100644 --- a/var/spack/repos/builtin/packages/petsc/package.py +++ b/var/spack/repos/builtin/packages/petsc/package.py @@ -23,6 +23,7 @@ class Petsc(Package, CudaPackage, ROCmPackage): tags = ["e4s"] version("main", branch="main") + version("3.22.1", sha256="7117d3ae6827f681ed9737939d4e86896b4751e27cca941bb07e5703f19a0a7b") version("3.22.0", sha256="2c03f7c0f7ad2649240d4989355cf7fb7f211b75156cd7d424e1d9dd7dfb290b") version("3.21.6", sha256="cb2dc00742a89cf8acf9ff8aae189e6864e8b90f4997f087be6e54ff39c30d74") version("3.21.5", sha256="4eb1ec04c1a8988bd524f71f8d7d980dc1853d5be8791c0f19f3c09eef71fdd2") @@ -373,6 +374,7 @@ def check_fortran_compiler(self): depends_on("libyaml", when="+libyaml") depends_on("hwloc", when="+hwloc") depends_on("kokkos", when="+kokkos") + depends_on("kokkos~complex_align", when="+kokkos+complex") depends_on("kokkos-kernels", when="+kokkos") for cuda_arch in CudaPackage.cuda_arch_values: depends_on( @@ -513,6 +515,9 @@ def configure_options(self): else: hdf5libs = ":hl" + if "+exodusii+fortran" in spec and "+fortran" in spec: + options.append("--with-exodusii-fortran-bindings") + # tuple format (spacklibname, petsclibname, useinc, uselib) # default: 'gmp', => ('gmp', 'gmp', True, True) # any other combination needs a full tuple @@ -552,7 +557,7 @@ def configure_options(self): ("parallel-netcdf", "pnetcdf", True, True), ("moab", "moab", False, False), ("random123", "random123", False, False), - "exodusii", + ("exodusii", "exodusii", False, False), "cgns", "memkind", "p4est", diff --git a/var/spack/repos/builtin/packages/pfunit/package.py b/var/spack/repos/builtin/packages/pfunit/package.py index 0ad50d8a486c0e..a635dd96ec99cc 100644 --- a/var/spack/repos/builtin/packages/pfunit/package.py +++ b/var/spack/repos/builtin/packages/pfunit/package.py @@ -225,7 +225,6 @@ def compiler_vendor(self): "%gcc": "GNU", "%clang": "GNU", "%intel": "Intel", - "%pgi": "PGI", "%nag": "NAG", "%cce": "Cray", } diff --git a/var/spack/repos/builtin/packages/pgi/detection_test.yaml b/var/spack/repos/builtin/packages/pgi/detection_test.yaml deleted file mode 100644 index ec6268282ea7f2..00000000000000 --- a/var/spack/repos/builtin/packages/pgi/detection_test.yaml +++ /dev/null @@ -1,33 +0,0 @@ -paths: -- layout: - - executables: - - bin/pgcc - script: | - echo "pgcc 15.10-0 64-bit target on x86-64 Linux -tp sandybridge" - echo "The Portland Group - PGI Compilers and Tools" - echo "Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved." - platforms: [linux] - results: - - spec: pgi@15.10 - -- layout: - - executables: - - bin/pgcc - script: | - echo "pgcc 17.4-0 linuxpower target on Linuxpower" - echo "PGI Compilers and Tools" - echo "Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved." - platforms: [linux] - results: - - spec: pgi@17.4 - -- layout: - - executables: - - bin/pgcc - script: | - echo "pgcc-llvm 18.4-0 LLVM 64-bit target on x86-64 Linux -tp haswell" - echo "PGI Compilers and Tools" - echo "Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved." - platforms: [linux] - results: - - spec: pgi@18.4 diff --git a/var/spack/repos/builtin/packages/pgi/package.py b/var/spack/repos/builtin/packages/pgi/package.py deleted file mode 100644 index 37196669cf4c9d..00000000000000 --- a/var/spack/repos/builtin/packages/pgi/package.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright 2013-2024 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) - -import os - -from spack.package import * -from spack.util.prefix import Prefix - - -class Pgi(Package, CompilerPackage): - """PGI optimizing multi-core x64 compilers for Linux, MacOS & Windows - with support for debugging and profiling of local MPI processes. - - Note: The PGI compilers are licensed software. You will need to create an - account on the PGI homepage and download PGI yourself. Spack will search - your current directory for the download tarball. Alternatively, add this - file to a mirror so that Spack can find it. For instructions on how to - set up a mirror, see https://spack.readthedocs.io/en/latest/mirrors.html""" - - homepage = "https://www.pgroup.com/" - manual_download = True - - version("20.4", sha256="f3ecc2104b304cd5c8b20e3ffdb5da88f2b5f7cc148e8daf00561928a5cbbc2e") - version("19.10", sha256="ac9db73ba80a66fe3bc875f63aaa9e16f54674a4e88b25416432430ba8cf203d") - version("19.7", sha256="439692aeb51eff464b968c3bfed4536ed7bd3ba6f8174bc0ebe2219a78fe62ae") - version("19.4", sha256="23eee0d4da751dd6f247d624b68b03538ebd172e63a053c41bb67013f07cf68e") - version("19.1", sha256="3e05a6db2bf80b5d15f6ff83188f20cb89dc23e233417921e5c0822e7e57d34f") - version("18.10", sha256="4b3ff83d2a13de6001bed599246eff8e63ef711b8952d4a9ee12efd666b3e326") - version("18.4", sha256="81e0dcf6000b026093ece180d42d77854c23269fb8409cedcf51c674ca580a0f") - version("17.10", sha256="9da8f869fb9b70c0c4423c903d40a9e22d54b997af359a43573c0841165cd1b6") - version("17.4", sha256="115c212d526695fc116fe44f1e722793e60b6f7d1b341cd7e77a95da8e7f6c34") - - variant("network", default=True, description="Perform a network install") - variant("single", default=False, description="Perform a single system install") - variant( - "nvidia", default=False, description="Enable installation of optional NVIDIA components" - ) - variant("amd", default=False, description="Enable installation of optional AMD components") - variant("java", default=False, description="Enable installation of Java Runtime Environment") - variant("mpi", default=False, description="Enable installation of Open MPI") - - # Licensing - license_required = True - license_comment = "#" - license_files = ["license.dat"] - license_vars = ["PGROUPD_LICENSE_FILE", "LM_LICENSE_FILE"] - license_url = "http://www.pgroup.com/doc/pgiinstall.pdf" - - def url_for_version(self, version): - if int(str(version.up_to(1))) <= 17: - return "file://{0}/pgilinux-20{1}-{2}-x86_64.tar.gz".format( - os.getcwd(), version.up_to(1), version.joined - ) - else: - return "file://{0}/pgilinux-20{1}-{2}-x86-64.tar.gz".format( - os.getcwd(), version.up_to(1), version.joined - ) - - compiler_languages = ["c", "cxx", "fortran"] - c_names = ["pgcc"] - cxx_names = ["pgc++", "pgCC"] - fortran_names = ["pgfortran"] # older names long deprecated - compiler_version_argument = "-V" - compiler_version_regex = r"pg[^ ]* ([0-9.]+)-[0-9]+ (?:LLVM )?[^ ]+ target on " - - def install(self, spec, prefix): - # Enable the silent installation feature - os.environ["PGI_SILENT"] = "true" - os.environ["PGI_ACCEPT_EULA"] = "accept" - os.environ["PGI_INSTALL_DIR"] = prefix - - if "+network" in spec and "~single" in spec: - os.environ["PGI_INSTALL_TYPE"] = "network" - os.environ["PGI_INSTALL_LOCAL_DIR"] = "%s/%s/share_objects" % (prefix, self.version) - elif "+single" in spec and "~network" in spec: - os.environ["PGI_INSTALL_TYPE"] = "single" - else: - msg = "You must choose either a network install or a single " - msg += "system install.\nYou cannot choose both." - raise RuntimeError(msg) - - if "+nvidia" in spec: - os.environ["PGI_INSTALL_NVIDIA"] = "true" - - if "+amd" in spec: - os.environ["PGI_INSTALL_AMD"] = "true" - - if "+java" in spec: - os.environ["PGI_INSTALL_JAVA"] = "true" - - if "+mpi" in spec: - os.environ["PGI_INSTALL_MPI"] = "true" - - # Run install script - os.system("./install") - - def setup_run_environment(self, env): - prefix = Prefix(join_path(self.prefix, "linux86-64", self.version)) - - env.prepend_path("PATH", prefix.bin) - env.prepend_path("MANPATH", prefix.man) - env.prepend_path("LD_LIBRARY_PATH", prefix.lib) - env.set("CC", join_path(prefix.bin, "pgcc")) - env.set("CXX", join_path(prefix.bin, "pgc++")) - env.set("F77", join_path(prefix.bin, "pgfortran")) - env.set("FC", join_path(prefix.bin, "pgfortran")) - - if "+mpi" in self.spec: - ompi_dir = os.listdir(prefix.mpi)[0] - env.prepend_path("PATH", join_path(prefix.mpi, ompi_dir, "bin")) - env.prepend_path("LD_LIBRARY_PATH", join_path(prefix.mpi, ompi_dir, "lib")) - env.prepend_path("C_INCLUDE_PATH", join_path(prefix.mpi, ompi_dir, "include")) - env.prepend_path("MANPATH", join_path(prefix.mpi, ompi_dir, "share/man")) diff --git a/var/spack/repos/builtin/packages/ph5concat/package.py b/var/spack/repos/builtin/packages/ph5concat/package.py new file mode 100644 index 00000000000000..949d86d24b66d9 --- /dev/null +++ b/var/spack/repos/builtin/packages/ph5concat/package.py @@ -0,0 +1,35 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Ph5concat(AutotoolsPackage): + """Parallel Data Concatenation for High Energy Physics Data Analysis""" + + homepage = "https://github.com/NU-CUCIS/ph5concat" + url = "https://github.com/NU-CUCIS/ph5concat/archive/v1.1.0.tar.gz" + + maintainers("vhewes") + + version("1.1.0", sha256="cecc22325a56771cda1fc186e6bd1f9bde2957beca3fa9a387d55462efd5254f") + + depends_on("autoconf", type="build") + depends_on("automake", type="build") + depends_on("libtool", type="build") + + depends_on("zlib") + depends_on("hdf5+hl+mpi@1.10.4:1.12") + depends_on("mpich") + + variant("profiling", default=False, description="Enable profiling support") + + def setup_build_environment(self, env): + env.set("LIBS", "-ldl -lz") + + def configure_args(self): + args = [f"--with-{pkg}={self.spec[pkg].prefix}" for pkg in ("hdf5", "mpich")] + args.extend(self.enable_or_disable("profiling")) + return args diff --git a/var/spack/repos/builtin/packages/phist/package.py b/var/spack/repos/builtin/packages/phist/package.py index da926898e8c086..9b5c05b9812698 100644 --- a/var/spack/repos/builtin/packages/phist/package.py +++ b/var/spack/repos/builtin/packages/phist/package.py @@ -323,7 +323,7 @@ def check(self): tty.warn("========================== %s =======================" % hint) try: make("check") - except spack.util.executable.ProcessError: + except ProcessError: raise InstallError("run-test of phist ^mpich: Hint: " + hint) else: make("check") diff --git a/var/spack/repos/builtin/packages/pika/package.py b/var/spack/repos/builtin/packages/pika/package.py index b67fc4c64cfde7..3d2793568b7caa 100644 --- a/var/spack/repos/builtin/packages/pika/package.py +++ b/var/spack/repos/builtin/packages/pika/package.py @@ -19,6 +19,8 @@ class Pika(CMakePackage, CudaPackage, ROCmPackage): license("BSL-1.0") + version("0.30.1", sha256="b0f3689a3edd30f8d674e19b5134fc5013813f843c45797c1015163e51989ac0") + version("0.30.0", sha256="1798bf7de2505bc707bf95716fda8de5630b2e2ae54a6c4ef59f9931394d31cc") version("0.29.0", sha256="2c61079f52f3e135a8d0845a993e6e4fb64031fbee9b5cef0ead57efb6175e3c") version("0.28.0", sha256="a64ebac04135c0c8d392ddcd8d683fe02e2c0782abfe130754244d58f27ae6cf") version("0.27.0", sha256="4a58dc4014edc2074399e4a6ecfa244537c89ce1319b3e14ff3dfe617fb9f9e8") @@ -117,6 +119,8 @@ class Pika(CMakePackage, CudaPackage, ROCmPackage): conflicts("%clang@:8", when="@0.2:") conflicts("+stdexec", when="cxxstd=17") conflicts("cxxstd=23", when="^cmake@:3.20.2") + conflicts("cxxstd=20", when="+cuda ^cmake@:3.25.1") + conflicts("cxxstd=23", when="+cuda") # nvcc version <= 11 does not support C++20 and newer for cxxstd in filter(lambda x: x != "17", cxxstds): requires("%nvhpc", when=f"cxxstd={cxxstd} ^cuda@:11") diff --git a/var/spack/repos/builtin/packages/pixman/package.py b/var/spack/repos/builtin/packages/pixman/package.py index a1abb45bba7744..638496d50fab05 100644 --- a/var/spack/repos/builtin/packages/pixman/package.py +++ b/var/spack/repos/builtin/packages/pixman/package.py @@ -5,10 +5,12 @@ import sys +import spack.build_systems.autotools +import spack.build_systems.meson from spack.package import * -class Pixman(AutotoolsPackage): +class Pixman(AutotoolsPackage, MesonPackage): """The Pixman package contains a library that provides low-level pixel manipulation features such as image compositing and trapezoid rasterization.""" @@ -18,6 +20,7 @@ class Pixman(AutotoolsPackage): license("MIT") + version("0.44.0", sha256="89a4c1e1e45e0b23dffe708202cb2eaffde0fe3727d7692b2e1739fec78a7dac") version("0.42.2", sha256="ea1480efada2fd948bc75366f7c349e1c96d3297d09a3fe62626e38e234a625e") version("0.42.0", sha256="07f74c8d95e4a43eb2b08578b37f40b7937e6c5b48597b3a0bb2c13a53f46c13") version("0.40.0", sha256="6d200dec3740d9ec4ec8d1180e25779c00bc749f94278c8b9021f5534db223fc") @@ -26,11 +29,19 @@ class Pixman(AutotoolsPackage): version("0.34.0", sha256="21b6b249b51c6800dc9553b65106e1e37d0e25df942c90531d4c3997aa20a88e") version("0.32.6", sha256="3dfed13b8060eadabf0a4945c7045b7793cc7e3e910e748a8bb0f0dc3e794904") - depends_on("c", type="build") # generated + build_system( + conditional("autotools", when="@:0.42"), + conditional("meson", when="@0.38:"), + default="meson", + ) + depends_on("c", type="build") + with when("build_system=meson"): + depends_on("meson@0.52:", type="build") depends_on("pkgconfig", type="build") depends_on("flex", type="build") depends_on("bison@3:", type="build") + depends_on("libpng") variant("shared", default=True, description="Build shared library") @@ -68,6 +79,32 @@ def libs(self): "libpixman-1", self.prefix, shared=self.spec.satisfies("+shared"), recursive=True ) + +class MesonBuilder(spack.build_systems.meson.MesonBuilder): + def meson_args(self): + args = ["-Dlibpng=enabled", "-Dgtk=disabled", "-Db_staticpic=true"] + + if sys.platform == "darwin": + args += ["-Dmmx=disabled"] + + # From homebrew, see: + # https://gitlab.freedesktop.org/pixman/pixman/-/issues/59 + # https://gitlab.freedesktop.org/pixman/pixman/-/issues/69 + if self.spec.target.family == "aarch64": + args.append("-Da64-neon=disabled") + + # The Fujitsu compiler does not support assembler macros. + if self.spec.satisfies("%fj"): + args.append("-Da64-neon=disabled") + + args.append( + "-Ddefault_library=" + ("shared" if self.spec.satisfies("+shared") else "static") + ) + + return args + + +class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder): def configure_args(self): args = ["--enable-libpng", "--disable-gtk", "--with-pic"] diff --git a/var/spack/repos/builtin/packages/pkg-config/package.py b/var/spack/repos/builtin/packages/pkg-config/package.py index d2f51bf11d0488..6122182c39b209 100644 --- a/var/spack/repos/builtin/packages/pkg-config/package.py +++ b/var/spack/repos/builtin/packages/pkg-config/package.py @@ -29,9 +29,6 @@ class PkgConfig(AutotoolsPackage): # The following patch is needed for gcc-6.1 patch("g_date_strftime.patch", when="@:0.29.1") - # https://github.com/spack/spack/issues/3525 - conflicts("%pgi") - parallel = False tags = ["build-tools"] diff --git a/var/spack/repos/builtin/packages/pkgconf/package.py b/var/spack/repos/builtin/packages/pkgconf/package.py index 39f3b198e0d2d4..abf731d41b7983 100644 --- a/var/spack/repos/builtin/packages/pkgconf/package.py +++ b/var/spack/repos/builtin/packages/pkgconf/package.py @@ -40,12 +40,6 @@ class Pkgconf(AutotoolsPackage): # https://github.com/spack/spack/issues/11704 patch("nvhpc.patch", when="@1.7.3%nvhpc") - # TODO: Add a package for the kyua testing framework - # depends_on('kyua', type='test') - - # https://github.com/spack/spack/issues/3525 - conflicts("%pgi") - tags = ["build-tools"] executables = ["^pkgconf$", "^pkg-config$"] diff --git a/var/spack/repos/builtin/packages/plasma/package.py b/var/spack/repos/builtin/packages/plasma/package.py index 1d5e46b272b58a..65825a781f4d5f 100644 --- a/var/spack/repos/builtin/packages/plasma/package.py +++ b/var/spack/repos/builtin/packages/plasma/package.py @@ -82,7 +82,6 @@ class Plasma(CMakePackage): conflicts("%clang") conflicts("%intel") conflicts("%nag") - conflicts("%pgi") conflicts("%xl") conflicts("%xl_r") diff --git a/var/spack/repos/builtin/packages/pocl/package.py b/var/spack/repos/builtin/packages/pocl/package.py index 9e6035a5e26b5f..1c51cfb5e5b3fc 100644 --- a/var/spack/repos/builtin/packages/pocl/package.py +++ b/var/spack/repos/builtin/packages/pocl/package.py @@ -22,6 +22,10 @@ class Pocl(CMakePackage): license("MIT") version("main", branch="main") + version("6.0", sha256="de9710223fc1855f833dbbf42ea2681e06aa8ec0464f0201104dc80a74dfd1f2") + version("5.0", sha256="fd0bb6e50c2286278c11627b71177991519e1f7ab2576bd8d8742974db414549") + version("4.0", sha256="7f4e8ab608b3191c2b21e3f13c193f1344b40aba7738f78762f7b88f45e8ce03") + version("3.1", sha256="82314362552e050aff417318dd623b18cf0f1d0f84f92d10a7e3750dd12d3a9a") version("3.0", sha256="a3fd3889ef7854b90b8e4c7899c5de48b7494bf770e39fba5ad268a5cbcc719d") version("1.8", sha256="0f63377ae1826e16e90038fc8e7f65029be4ff6f9b059f6907174b5c0d1f8ab2") version("1.7", sha256="5f6bbc391ba144bc7becc3b90888b25468460d5aa6830f63a3b066137e7bfac3") @@ -44,6 +48,9 @@ class Pocl(CMakePackage): provides("opencl@2.0", when="^llvm@:13") provides("opencl@3.0", when="@3: ^llvm@14:") + depends_on("cmake @3.12:", type="build", when="@4:") + depends_on("cmake @3.9:", type="build", when="@3:") + depends_on("cmake @3.3:", type="build", when="@1.6:") depends_on("cmake @2.8.12:", type="build") depends_on("hwloc") depends_on("hwloc@:1", when="@:1.1") @@ -51,7 +58,13 @@ class Pocl(CMakePackage): depends_on("pkgconfig", type="build") depends_on("llvm +clang") - depends_on("llvm @14:15", when="@master") + # PoCL aims to support **the latest LLVM version** at the time of PoCL release, + # **plus the previous** LLVM version + depends_on("llvm @18:19", when="@master") + depends_on("llvm @17:18", when="@6.0") + depends_on("llvm @16:17", when="@5.0") + depends_on("llvm @15:16", when="@4.0") + depends_on("llvm @14:15", when="@3.1") depends_on("llvm @13:14", when="@3.0") depends_on("llvm @12:13", when="@1.8") depends_on("llvm @11:12", when="@1.7") diff --git a/var/spack/repos/builtin/packages/postgis/package.py b/var/spack/repos/builtin/packages/postgis/package.py index 5bc68169291e5b..1fdc91b9d32e6e 100644 --- a/var/spack/repos/builtin/packages/postgis/package.py +++ b/var/spack/repos/builtin/packages/postgis/package.py @@ -18,6 +18,7 @@ class Postgis(AutotoolsPackage): license("GPL-2.0-or-later") + version("3.1.2", sha256="2cdd3760176926704b4eb25ff3357543c9637dee74425a49082906857c7e0732") version("3.0.1", sha256="5a5432f95150d9bae9215c6d1c7bb354e060482a7c379daa9b8384e1d03e6353") version("3.0.0", sha256="c06fd2cd5cea0119106ffe17a7235d893c2bbe6f4b63c8617c767630973ba594") version("2.5.3", sha256="72e8269d40f981e22fb2b78d3ff292338e69a4f5166e481a77b015e1d34e559a") diff --git a/var/spack/repos/builtin/packages/precice/package.py b/var/spack/repos/builtin/packages/precice/package.py index 2c1db9878fd8d5..b3332713659b0d 100644 --- a/var/spack/repos/builtin/packages/precice/package.py +++ b/var/spack/repos/builtin/packages/precice/package.py @@ -116,7 +116,6 @@ class Precice(CMakePackage): conflicts("%apple-clang@:5") conflicts("%clang@:3.7") conflicts("%intel@:16") - conflicts("%pgi@:17.3") def xsdk_tpl_args(self): return [ diff --git a/var/spack/repos/builtin/packages/prod-util/package.py b/var/spack/repos/builtin/packages/prod-util/package.py index e7c5b37485713b..0fe46740f131be 100644 --- a/var/spack/repos/builtin/packages/prod-util/package.py +++ b/var/spack/repos/builtin/packages/prod-util/package.py @@ -34,5 +34,5 @@ class ProdUtil(CMakePackage): depends_on("w3emc", when="@2:") def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/proj/package.py b/var/spack/repos/builtin/packages/proj/package.py index d9ed3ef11d8403..17d7da99ecc07c 100644 --- a/var/spack/repos/builtin/packages/proj/package.py +++ b/var/spack/repos/builtin/packages/proj/package.py @@ -3,7 +3,6 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -import spack.builder from spack.build_systems import autotools, cmake from spack.package import * @@ -145,7 +144,7 @@ def setup_run_environment(self, env): env.set("PROJ_LIB", self.prefix.share.proj) -class BaseBuilder(metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): def setup_build_environment(self, env): env.set("PROJ_LIB", join_path(self.pkg.stage.source_path, "nad")) @@ -154,7 +153,7 @@ def install_datum_grids(self): install_tree(join_path("share", "proj"), self.prefix.share.proj) -class CMakeBuilder(BaseBuilder, cmake.CMakeBuilder): +class CMakeBuilder(AnyBuilder, cmake.CMakeBuilder): def cmake_args(self): shared_arg = "BUILD_SHARED_LIBS" if self.spec.satisfies("@7:") else "BUILD_LIBPROJ_SHARED" args = [ @@ -177,7 +176,7 @@ def cmake_args(self): return args -class AutotoolsBuilder(BaseBuilder, autotools.AutotoolsBuilder): +class AutotoolsBuilder(AnyBuilder, autotools.AutotoolsBuilder): def configure_args(self): args = [] diff --git a/var/spack/repos/builtin/packages/prometheus-cpp/package.py b/var/spack/repos/builtin/packages/prometheus-cpp/package.py new file mode 100644 index 00000000000000..fc1a62b150d254 --- /dev/null +++ b/var/spack/repos/builtin/packages/prometheus-cpp/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PrometheusCpp(CMakePackage): + """Prometheus Client Library for Modern C++.""" + + homepage = "https://jupp0r.github.io/prometheus-cpp/" + url = "https://github.com/jupp0r/prometheus-cpp/releases/download/v1.2.4/prometheus-cpp-with-submodules.tar.gz" + git = "https://github.com/jupp0r/prometheus-cpp.git" + + license("MIT", checked_by="mdorier") + + version("master", branch="master", submodules=True) + version("1.2.4", sha256="0d6852291063c35853e88805c73b52f73c0c08b78c1e7bc4d588fcf72a7172eb") + + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("cmake@3.14.0:", type="build") + depends_on("zlib") + depends_on("curl") + + def cmake_args(self): + args = ["-DBUILD_SHARED_LIBS=ON", "-DENABLE_TESTING=OFF"] + return args diff --git a/var/spack/repos/builtin/packages/prometheus/package.py b/var/spack/repos/builtin/packages/prometheus/package.py index 3e6c8baab10b03..1a818f8a492cf2 100644 --- a/var/spack/repos/builtin/packages/prometheus/package.py +++ b/var/spack/repos/builtin/packages/prometheus/package.py @@ -15,6 +15,7 @@ class Prometheus(MakefilePackage): license("Apache-2.0") + version("2.55.1", sha256="f48251f5c89eea6d3b43814499d558bacc4829265419ee69be49c5af98f79573") version("2.19.2", sha256="d4e84cae2fed6761bb8a80fcc69b6e0e9f274d19dffc0f38fb5845f11da1bbc3") version("2.19.1", sha256="b72b9b6bdbae246dcc29ef354d429425eb3c0a6e1596fc8b29b502578a4ce045") version("2.18.2", sha256="a26c106c97d81506e3a20699145c11ea2cce936427a0e96eb2fd0dc7cd1945ba") @@ -26,6 +27,7 @@ class Prometheus(MakefilePackage): depends_on("go", type="build") depends_on("node-js@11.10.1:", type="build") depends_on("yarn", type="build") + depends_on("npm", type="build", when="@2.55.1:") def build(self, spec, prefix): make("build", parallel=False) @@ -34,5 +36,6 @@ def install(self, spec, prefix): mkdirp(prefix.bin) install("prometheus", prefix.bin) install("promtool", prefix.bin) - install("tsdb/tsdb", prefix.bin) + if spec.satisfies("@:2.19.2"): + install("tsdb/tsdb", prefix.bin) install_tree("documentation", prefix.documentation) diff --git a/var/spack/repos/builtin/packages/pumi/package.py b/var/spack/repos/builtin/packages/pumi/package.py index a2ce76b27ce621..76bb0a7618037b 100644 --- a/var/spack/repos/builtin/packages/pumi/package.py +++ b/var/spack/repos/builtin/packages/pumi/package.py @@ -30,6 +30,9 @@ class Pumi(CMakePackage): # scorec/core develop branch and we prefer not to expose spack users # to the added instability. version("master", submodules=True, branch="master") + version( + "2.2.9", submodules=True, commit="f87525cae7597322edfb2ccf1c7d4437402d9481" + ) # tag 2.2.9 version( "2.2.8", submodules=True, commit="736bb87ccd8db51fc499a1b91e53717a88841b1f" ) # tag 2.2.8 diff --git a/var/spack/repos/builtin/packages/py-alive-progress/package.py b/var/spack/repos/builtin/packages/py-alive-progress/package.py index 944dce0a95f557..0342326115af66 100644 --- a/var/spack/repos/builtin/packages/py-alive-progress/package.py +++ b/var/spack/repos/builtin/packages/py-alive-progress/package.py @@ -16,12 +16,15 @@ class PyAliveProgress(PythonPackage): license("MIT") + version("3.2.0", sha256="ede29d046ff454fe56b941f686f89dd9389430c4a5b7658e445cb0b80e0e4deb") version("2.4.1", sha256="089757c8197f27ad972ba27e1060f6db92368d83c736884e159034fd74865323") version("1.6.2", sha256="642e1ce98becf226c8c36bf24e10221085998c5465a357a66fb83b7dc618b43e") - depends_on("python@2.7:3.8", type=("build", "run")) + depends_on("python@2.7:3", type=("build", "run")) depends_on("python@3.6:3", type=("build", "run"), when="@2:") depends_on("python@3.7:3", type=("build", "run"), when="@2.2:") + depends_on("python@3.9:3", type=("build", "run"), when="@3.2:") depends_on("py-setuptools", type="build") - depends_on("py-about-time@3.1.1", type=("build", "run"), when="@2.4.1:") + depends_on("py-about-time@3.1.1", type=("build", "run"), when="@2.4.1") + depends_on("py-about-time@4.2.1", type=("build", "run"), when="@3:") depends_on("py-grapheme@0.6.0", type=("build", "run"), when="@2.4.1:") diff --git a/var/spack/repos/builtin/packages/py-amrex/package.py b/var/spack/repos/builtin/packages/py-amrex/package.py index 60f8687445d9b6..b3ea902a4dda54 100644 --- a/var/spack/repos/builtin/packages/py-amrex/package.py +++ b/var/spack/repos/builtin/packages/py-amrex/package.py @@ -63,6 +63,7 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage): extends("python") + depends_on("c", type="build") depends_on("cxx", type="build") depends_on("cmake@3.20:3", type="build", when="@:24.08") diff --git a/var/spack/repos/builtin/packages/py-arpeggio/package.py b/var/spack/repos/builtin/packages/py-arpeggio/package.py new file mode 100644 index 00000000000000..ade277aac21636 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-arpeggio/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyArpeggio(PythonPackage): + """Packrat parser interpreter.""" + + homepage = "https://github.com/textX/Arpeggio" + pypi = "Arpeggio/Arpeggio-2.0.2.tar.gz" + + license("MIT") + + version("2.0.2", sha256="c790b2b06e226d2dd468e4fbfb5b7f506cec66416031fde1441cf1de2a0ba700") + + depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-asdf-standard/package.py b/var/spack/repos/builtin/packages/py-asdf-standard/package.py index e31384bddc81a3..d6dfe2a80cabae 100644 --- a/var/spack/repos/builtin/packages/py-asdf-standard/package.py +++ b/var/spack/repos/builtin/packages/py-asdf-standard/package.py @@ -16,11 +16,17 @@ class PyAsdfStandard(PythonPackage): license("BSD-3-Clause") + version("1.1.1", sha256="01535bc2b15bfc09ec8a62d4999f9cf32dc49dc71660c8425640228fd8776102") version("1.0.3", sha256="afd8ff9a70e7b17f6bcc64eb92a544867d5d4fe1f0076719142fdf62b96cfd44") + with when("@1.1.1:"): + depends_on("python@3.9:", type=("build", "run")) + + depends_on("py-setuptools@61:", type="build") + depends_on("python@3.8:", type=("build", "run")) depends_on("py-setuptools@42:", type="build") depends_on("py-setuptools-scm@3.4: +toml", type="build") - depends_on("py-importlib-resources@3:", type=("build", "run"), when="^python@:3.8") + depends_on("py-importlib-resources@3:", type=("build", "run"), when="@1.0.3 ^python@:3.8") diff --git a/var/spack/repos/builtin/packages/py-asdf-transform-schemas/package.py b/var/spack/repos/builtin/packages/py-asdf-transform-schemas/package.py index 7593dae246d10c..d714dbb40940a8 100644 --- a/var/spack/repos/builtin/packages/py-asdf-transform-schemas/package.py +++ b/var/spack/repos/builtin/packages/py-asdf-transform-schemas/package.py @@ -9,7 +9,7 @@ class PyAsdfTransformSchemas(PythonPackage): """ASDF schemas for transforms""" - homepage = "asdf-transform-schemas.readthedocs.io" + homepage = "https://asdf-transform-schemas.readthedocs.io" pypi = "asdf_transform_schemas/asdf_transform_schemas-0.3.0.tar.gz" maintainers("lgarrison") diff --git a/var/spack/repos/builtin/packages/py-asdf/package.py b/var/spack/repos/builtin/packages/py-asdf/package.py index cd5ddf25638db8..236d0894a239d7 100644 --- a/var/spack/repos/builtin/packages/py-asdf/package.py +++ b/var/spack/repos/builtin/packages/py-asdf/package.py @@ -18,6 +18,7 @@ class PyAsdf(PythonPackage): license("BSD-3-Clause") + version("3.5.0", sha256="047ad7bdd8f40b04b8625abfd119a35d18b344301c60ea9ddf63964e7ce19669") version("2.15.0", sha256="686f1c91ebf987d41f915cfb6aa70940d7ad17f87ede0be70463147ad2314587") version("2.4.2", sha256="6ff3557190c6a33781dae3fd635a8edf0fa0c24c6aca27d8679af36408ea8ff2") @@ -25,7 +26,15 @@ class PyAsdf(PythonPackage): depends_on("py-lz4@0.10:", when="+lz4", type=("build", "run")) - with when("@2.15:"): + with when("@3.5.0:"): + depends_on("python@3.9:", type=("build", "run")) + + depends_on("py-asdf-standard@1.1.0:", type=("build", "run")) + depends_on("py-importlib-metadata@4.11.4:", type=("build", "run"), when="^python@:3.11") + depends_on("py-numpy@1.22:", type=("build", "run")) + depends_on("py-attrs@22.2.0:", type=("build", "run")) + + with when("@2.15.0:"): depends_on("python@3.8:", type=("build", "run")) depends_on("py-setuptools@60:", type="build") @@ -33,17 +42,19 @@ class PyAsdf(PythonPackage): depends_on("py-asdf-standard@1.0.1:", type=("build", "run")) depends_on("py-asdf-transform-schemas@0.3:", type=("build", "run")) - depends_on("py-asdf-unit-schemas@0.1:", type=("build", "run")) - depends_on("py-importlib-metadata@4.11.4:", type=("build", "run")) - depends_on("py-importlib-resources@3:", type=("build", "run"), when="^python@:3.8") depends_on("py-jmespath@0.6.2:", type=("build", "run")) - depends_on("py-jsonschema@4.0.1:4.17", type=("build", "run")) depends_on("py-numpy@1.20:", type=("build", "run")) - depends_on("py-numpy@1.20:1.24", type=("build", "run"), when="^python@:3.8") depends_on("py-packaging@19:", type=("build", "run")) depends_on("py-pyyaml@5.4.1:", type=("build", "run")) depends_on("py-semantic-version@2.8:", type=("build", "run")) + with when("@2.15.0"): + depends_on("py-asdf-unit-schemas@0.1:", type=("build", "run")) + depends_on("py-importlib-metadata@4.11.4:", type=("build", "run")) + depends_on("py-importlib-resources@3:", type=("build", "run"), when="^python@:3.8") + depends_on("py-jsonschema@4.0.1:4.17", type=("build", "run")) + depends_on("py-numpy@1.20:1.24", type=("build", "run"), when="^python@:3.8") + with when("@2.4.2"): depends_on("python@3.3:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-asdfghjkl/package.py b/var/spack/repos/builtin/packages/py-asdfghjkl/package.py new file mode 100644 index 00000000000000..c9aab6fa6c8fac --- /dev/null +++ b/var/spack/repos/builtin/packages/py-asdfghjkl/package.py @@ -0,0 +1,24 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyAsdfghjkl(PythonPackage): + """ASDL: Automatic Second-order Differentiation (for Fisher, Gradient covariance, Hessian, + Jacobian, and Kernel) Library.""" + + homepage = "https://github.com/kazukiosawa/asdl" + pypi = "asdfghjkl/asdfghjkl-0.1a4.tar.gz" + + license("MIT") + + version("0.1a4", sha256="a934411a0ffdee6fcdccb19672196498ea6a8e55e3e67abbe67200c84b46ddee") + + depends_on("py-setuptools@42:") + + with default_args(type=("build", "run")): + depends_on("py-torch@1.13:") + depends_on("py-numpy") diff --git a/var/spack/repos/builtin/packages/py-ase/package.py b/var/spack/repos/builtin/packages/py-ase/package.py index e949990ea44d1c..fb091295e0d17e 100644 --- a/var/spack/repos/builtin/packages/py-ase/package.py +++ b/var/spack/repos/builtin/packages/py-ase/package.py @@ -16,6 +16,7 @@ class PyAse(PythonPackage): license("LGPL-2.1-or-later") + version("3.23.0", sha256="91a2aa31d89bd90b0efdfe4a7e84264f32828b2abfc9f38e65e041ad76fec8ae") version("3.21.1", sha256="78b01d88529d5f604e76bc64be102d48f058ca50faad72ac740d717545711c7b") version("3.21.0", sha256="2c561e9b767cf16fc8ce198ea9326d77c6b67d33a85f44b68455e23466a64608") version("3.20.1", sha256="72c81f21b6adb907595fce8d883c0231301cbd8e9f6e5ce8e98bab927054daca") @@ -32,8 +33,12 @@ class PyAse(PythonPackage): depends_on("python@2.6:", type=("build", "run"), when="@:3.15.0") depends_on("python@3.5:", type=("build", "run"), when="@3.18.0:") depends_on("python@3.6:", type=("build", "run"), when="@3.20.0:") + depends_on("python@3.8:", type=("build", "run"), when="@3.23.0:") depends_on("py-numpy@1.11.3:", type=("build", "run")) + depends_on("py-numpy@1.18.5:", type=("build", "run"), when="@3.23.0:") depends_on("py-matplotlib@2.0.0:", type=("build", "run")) + depends_on("py-matplotlib@3.3.4:", type=("build", "run"), when="@3.23.0:") depends_on("py-scipy@0.18.1:", type=("build", "run")) + depends_on("py-scipy@1.6.0:", type=("build", "run"), when="@3.23.0:") depends_on("py-flask", type=("build", "run"), when="@:3.18.0") depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-azure-batch/package.py b/var/spack/repos/builtin/packages/py-azure-batch/package.py index 680a0d69b79298..467bfcb8061b65 100644 --- a/var/spack/repos/builtin/packages/py-azure-batch/package.py +++ b/var/spack/repos/builtin/packages/py-azure-batch/package.py @@ -11,8 +11,9 @@ class PyAzureBatch(PythonPackage): """Microsoft Azure Batch Client Library for Python.""" homepage = "https://github.com/Azure/azure-sdk-for-python" - pypi = "azure-batch/azure-batch-9.0.0.zip" + pypi = "azure-batch/azure-batch-14.2.0.tar.gz" + version("14.2.0", sha256="c79267d6c3d3fe14a16a422ab5bbfabcbd68ed0b58b6bbcdfa0c8345c4c78532") version("14.0.0", sha256="165b1e99b86f821024c4fae85fb34869d407aa0ebb0ca4b96fb26d859c26c934") version("13.0.0", sha256="e9295de70404d276eda0dd2253d76397439abe5d8f18c1fca199c49b8d6ae30a") version("12.0.0", sha256="1a9b1e178984a7bf495af67bcce51f0db1e4a8a957afb29e33554a14a9674deb") @@ -20,7 +21,7 @@ class PyAzureBatch(PythonPackage): version("10.0.0", sha256="83d7a2b0be42ca456ac2b56fa3dc6ce704c130e888d37d924072c1d3718f32d0") version("9.0.0", sha256="47ca6f50a640915e1cdc5ce3c1307abe5fa3a636236e561119cf62d9df384d84") - # https://github.com/Azure/azure-sdk-for-python/blob/azure-batch_14.0.0/sdk/batch/azure-batch/setup.py + # https://github.com/Azure/azure-sdk-for-python/blob/azure-batch_14.2.0/sdk/batch/azure-batch/setup.py depends_on("py-setuptools", type="build") @@ -30,3 +31,11 @@ class PyAzureBatch(PythonPackage): with when("@:12"): depends_on("py-msrest@0.6.21:", when="@11:", type=("build", "run")) depends_on("py-msrest@0.5.0:", type=("build", "run")) + + def url_for_version(self, version): + if version < Version("14.1.0"): + return "https://pypi.io/packages/source/a/azure-batch/azure-batch-{0}.zip".format( + version + ) + + return super().url_for_version(version) diff --git a/var/spack/repos/builtin/packages/py-azure-core/package.py b/var/spack/repos/builtin/packages/py-azure-core/package.py index a411e14e1ea286..19db3d0f1cdce0 100644 --- a/var/spack/repos/builtin/packages/py-azure-core/package.py +++ b/var/spack/repos/builtin/packages/py-azure-core/package.py @@ -15,6 +15,7 @@ class PyAzureCore(PythonPackage): license("MIT") + version("1.30.2", sha256="a14dc210efcd608821aa472d9fb8e8d035d29b68993819147bc290a8ac224472") version("1.30.0", sha256="6f3a7883ef184722f6bd997262eddaf80cfe7e5b3e0caaaf8db1695695893d35") version("1.29.7", sha256="2944faf1a7ff1558b1f457cabf60f279869cabaeef86b353bed8eb032c7d8c5e") version("1.29.2", sha256="beb0fe88d1043d8457318e8fb841d9caa648211092eda213c16b376401f3710d") @@ -26,8 +27,9 @@ class PyAzureCore(PythonPackage): version("1.7.0", sha256="a66da240a287f447f9867f54ba09ea235895cec13ea38c5f490ce4eedefdd75c") version("1.6.0", sha256="d10b74e783cff90d56360e61162afdd22276d62dc9467e657ae866449eae7648") - # https://github.com/Azure/azure-sdk-for-python/blob/azure-core_1.30.0/sdk/core/azure-core/setup.py + # https://github.com/Azure/azure-sdk-for-python/blob/azure-core_1.30.2/sdk/core/azure-core/setup.py + depends_on("python@3.8:", type=("build", "run"), when="@1.30.2:") depends_on("py-setuptools", type="build") depends_on("py-anyio@3:4", when="@1.29.6", type=("build", "run")) depends_on("py-requests@2.21:", when="@1.29.6:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-azure-identity/package.py b/var/spack/repos/builtin/packages/py-azure-identity/package.py index b3d743a80792d9..00c18e24d6c39e 100644 --- a/var/spack/repos/builtin/packages/py-azure-identity/package.py +++ b/var/spack/repos/builtin/packages/py-azure-identity/package.py @@ -21,6 +21,7 @@ class PyAzureIdentity(PythonPackage): license("MIT") + version("1.17.1", sha256="32ecc67cc73f4bd0595e4f64b1ca65cd05186f4fe6f98ed2ae9f1aa32646efea") version("1.15.0", sha256="4c28fc246b7f9265610eb5261d65931183d019a23d4b0e99357facb2e6c227c8") version("1.14.1", sha256="48e2a9dbdc59b4f095f841d867d9a8cbe4c1cdbbad8251e055561afd47b4a9b8") version("1.13.0", sha256="c931c27301ffa86b07b4dcf574e29da73e3deba9ab5d1fe4f445bb6a3117e260") @@ -28,20 +29,26 @@ class PyAzureIdentity(PythonPackage): version("1.3.1", sha256="5a59c36b4b05bdaec455c390feda71b6495fc828246593404351b9a41c2e877a") version("1.2.0", sha256="b32acd1cdb6202bfe10d9a0858dc463d8960295da70ae18097eb3b85ab12cb91") - # https://github.com/Azure/azure-sdk-for-python/blob/azure-identity_1.15.0/sdk/identity/azure-identity/setup.py + # https://github.com/Azure/azure-sdk-for-python/blob/azure-identity_1.17.1/sdk/identity/azure-identity/setup.py + depends_on("python@3.8:", type=("build", "run"), when="@1.16:") depends_on("py-setuptools", type="build") - depends_on("py-azure-core@1.23:1", type=("build", "run"), when="@1.15:") - depends_on("py-azure-core@1.11:1", type=("build", "run"), when="@1.12:") - depends_on("py-azure-core@1", type=("build", "run")) + depends_on("py-azure-core@1.23:", type=("build", "run"), when="@1.16:") + depends_on("py-azure-core@1.23:1", type=("build", "run"), when="@1.15") + depends_on("py-azure-core@1.11:1", type=("build", "run"), when="@1.12:1.14") + depends_on("py-azure-core@1", type=("build", "run"), when="@:1.15") depends_on("py-cryptography@2.5:", type=("build", "run"), when="@1.12:") depends_on("py-cryptography@2.1.4:", type=("build", "run")) - depends_on("py-msal@1.24:1", type=("build", "run"), when="@1.15:") - depends_on("py-msal@1.20:1", type=("build", "run"), when="@1.13:") - depends_on("py-msal@1.12:1", type=("build", "run"), when="@1.12:") - depends_on("py-msal@1", type=("build", "run")) - depends_on("py-msal-extensions@0.3:1", type=("build", "run"), when="@1.12:") + depends_on("py-msal@1.24:", type=("build", "run"), when="@1.16:") + depends_on("py-msal@1.24:1", type=("build", "run"), when="@1.15") + depends_on("py-msal@1.20:1", type=("build", "run"), when="@1.13:1.14") + depends_on("py-msal@1.12:1", type=("build", "run"), when="@1.12") + depends_on("py-msal@1", type=("build", "run"), when="@:1.15") + depends_on("py-msal-extensions@0.3:", type=("build", "run"), when="@1.16:") + depends_on("py-msal-extensions@0.3:1", type=("build", "run"), when="@1.12:1.15") depends_on("py-msal-extensions@0.1.3:0.1", type=("build", "run"), when="@:1.11") + depends_on("py-typing-extensions@4:", type=("build", "run"), when="@1.17:") + depends_on("py-six@1.12:", type=("build", "run"), when="@1.12") depends_on("py-six@1.6:", type=("build", "run"), when="@:1.11") diff --git a/var/spack/repos/builtin/packages/py-azure-nspkg/package.py b/var/spack/repos/builtin/packages/py-azure-nspkg/package.py index 7153b8b926373e..e7b85a8cee7851 100644 --- a/var/spack/repos/builtin/packages/py-azure-nspkg/package.py +++ b/var/spack/repos/builtin/packages/py-azure-nspkg/package.py @@ -10,7 +10,7 @@ class PyAzureNspkg(PythonPackage): """Microsoft Azure Namespace Package [Internal].""" - homepage = "hhttps://github.com/Azure/azure-sdk-for-python" + homepage = "https://github.com/Azure/azure-sdk-for-python" pypi = "azure-nspkg/azure-nspkg-3.0.2.zip" version("3.0.2", sha256="e7d3cea6af63e667d87ba1ca4f8cd7cb4dfca678e4c55fc1cedb320760e39dd0") diff --git a/var/spack/repos/builtin/packages/py-azure-storage-blob/package.py b/var/spack/repos/builtin/packages/py-azure-storage-blob/package.py index 134df401e56b01..30307250ec70b9 100644 --- a/var/spack/repos/builtin/packages/py-azure-storage-blob/package.py +++ b/var/spack/repos/builtin/packages/py-azure-storage-blob/package.py @@ -16,6 +16,7 @@ class PyAzureStorageBlob(PythonPackage): license("MIT") + version("12.22.0", sha256="b3804bb4fe8ab1c32771fa464053da772a682c2737b19da438a3f4e5e3b3736e") version("12.19.0", sha256="26c0a4320a34a3c2a1b74528ba6812ebcb632a04cd67b1c7377232c4b01a5897") version("12.18.3", sha256="d8ced0deee3367fa3d4f3d1a03cd9edadf4440c0a371f503d623fa6c807554ee") version("12.17.0", sha256="c14b785a17050b30fc326a315bdae6bc4a078855f4f94a4c303ad74a48dc8c63") @@ -28,16 +29,19 @@ class PyAzureStorageBlob(PythonPackage): version("12.10.0", sha256="3c7dc2c93e7ff2a731acd66a36a1f0a6266072b4154deba4894dab891285ea3a") version("12.9.0", sha256="cff66a115c73c90e496c8c8b3026898a3ce64100840276e9245434e28a864225") - # https://github.com/Azure/azure-sdk-for-python/blob/azure-storage-blob_12.19.0/sdk/storage/azure-storage-blob/setup.py + # https://github.com/Azure/azure-sdk-for-python/blob/azure-storage-blob_12.22.0/sdk/storage/azure-storage-blob/setup.py + depends_on("python@3.8:", type=("build", "run"), when="@12.20:") depends_on("py-setuptools", type="build") - depends_on("py-azure-core@1.28:1", type=("build", "run"), when="@12.17:") - depends_on("py-azure-core@1.26:1", type=("build", "run"), when="@12.15:") - depends_on("py-azure-core@1.24.2:1", type=("build", "run"), when="@12.14:") - depends_on("py-azure-core@1.23.1:1", type=("build", "run"), when="@12.12:") - depends_on("py-azure-core@1.15:1", type=("build", "run"), when="@12.10:") - depends_on("py-azure-core@1.10:1", type=("build", "run")) + depends_on("py-azure-core@1.28:", type=("build", "run"), when="@12.20:") + depends_on("py-azure-core@1.28:1", type=("build", "run"), when="@12.17:12.19") + depends_on("py-azure-core@1.26:1", type=("build", "run"), when="@12.15:12.16") + depends_on("py-azure-core@1.24.2:1", type=("build", "run"), when="@12.14") + depends_on("py-azure-core@1.23.1:1", type=("build", "run"), when="@12.12:12.13") + depends_on("py-azure-core@1.15:1", type=("build", "run"), when="@12.10:12.11") + depends_on("py-azure-core@1.10:1", type=("build", "run"), when="@:12.19") depends_on("py-cryptography@2.1.4:", type=("build", "run")) + depends_on("py-typing-extensions@4.6:", type=("build", "run"), when="@12.20:") depends_on("py-typing-extensions@4.3:", type=("build", "run"), when="@12.17:") depends_on("py-typing-extensions@4.0.1:", type=("build", "run"), when="@12.15:") depends_on("py-isodate@0.6.1:", type=("build", "run"), when="@12.15:") diff --git a/var/spack/repos/builtin/packages/py-backpack-for-pytorch/package.py b/var/spack/repos/builtin/packages/py-backpack-for-pytorch/package.py new file mode 100644 index 00000000000000..c8579d87ac7e2a --- /dev/null +++ b/var/spack/repos/builtin/packages/py-backpack-for-pytorch/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyBackpackForPytorch(PythonPackage): + """BackPACK: Packing more into backprop.""" + + homepage = "https://github.com/f-dangel/backpack" + pypi = "backpack-for-pytorch/backpack-for-pytorch-1.6.0.tar.gz" + + license("MIT") + + version("1.6.0", sha256="af6495b71bacf82a1c7cab01aa85bebabccfe74d87d89f108ea72a4a0d384de3") + + with default_args(type="build"): + depends_on("py-setuptools@38.3:") + depends_on("py-setuptools-scm") + + with default_args(type=("build", "run")): + depends_on("py-torch@1.9:") + depends_on("py-torchvision@0.7:") + depends_on("py-einops@0.3:0") + depends_on("py-unfoldnd@0.2:0") diff --git a/var/spack/repos/builtin/packages/py-bakta/package.py b/var/spack/repos/builtin/packages/py-bakta/package.py index 57dcbc64bb398c..edec5d634fd1ac 100644 --- a/var/spack/repos/builtin/packages/py-bakta/package.py +++ b/var/spack/repos/builtin/packages/py-bakta/package.py @@ -18,21 +18,42 @@ class PyBakta(PythonPackage): license("GPL-3.0-only") + version("1.9.4", sha256="10330a10e459144dc78daa26f3a73674799706e2e1653e080366b1bbb9e5a5d9") version("1.5.1", sha256="36781612c4eaa99e6e24a00e8ab5b27dadf21c98ae6d16432f3e78c96a4adb5d") - depends_on("python@3.8:", type=("build", "run")) + variant("deepsig", default=True, description="builds with deepsig to predict signal peptides") + + depends_on("python@3.8:3.10", type=("build", "run")) depends_on("py-setuptools", type=("build", "run")) depends_on("py-biopython@1.78:", type=("build", "run")) - depends_on("py-xopen@1.1.0:", type=("build", "run")) + depends_on("py-xopen@1.5.0:", when="@1.8.2:", type=("build", "run")) + depends_on("py-xopen@1.1.0:", when="@:1.8.1", type=("build", "run")) depends_on("py-requests@2.25.1:", type=("build", "run")) - depends_on("py-alive-progress@1.6.2", type=("build", "run")) - depends_on("trnascan-se@2.0.8:", type=("build", "run")) - depends_on("aragorn@1.2.38:", type=("build", "run")) + depends_on("py-alive-progress@3.0.1:", when="@1.7.0:", type=("build", "run")) + depends_on("py-alive-progress@1.6.2", when="@:1.6.1", type=("build", "run")) + depends_on("py-pyyaml@6.0:", when="@1.6.0:", type=("build", "run")) + depends_on("trnascan-se@2.0.11:", when="@1.6.0:", type=("build", "run")) + depends_on("trnascan-se@2.0.8:", when="@:1.5.1", type=("build", "run")) + depends_on("aragorn@1.2.41:", when="@1.7.0:", type=("build", "run")) + depends_on("aragorn@1.2.38:", when="@:1.6.1", type=("build", "run")) depends_on("infernal@1.1.4:", type=("build", "run")) depends_on("pilercr@1.06:", type=("build", "run")) - depends_on("prodigal@2.6.3:", type=("build", "run")) - depends_on("hmmer@3.3.2:", type=("build", "run")) - depends_on("diamond@2.0.14:", type=("build", "run")) - depends_on("blast-plus@2.12.0:", type=("build", "run")) - depends_on("amrfinder@3.10.23:", type=("build", "run")) - depends_on("py-deepsig-biocomp@1.2.5:", type=("build", "run")) + depends_on("py-pyrodigal@3.1.0:", when="@1.9.0:", type=("build", "run")) + depends_on("py-pyrodigal@2.1.0:", when="@1.7.0:1.8.2", type=("build", "run")) + depends_on("py-pyrodigal@2.0.2:", when="@1.6.0:1.6.1", type=("build", "run")) + depends_on("prodigal@2.6.3:", when="@:1.5.1", type=("build", "run")) + depends_on("hmmer@3.3.2:", when="@:1.8.1", type=("build", "run")) + depends_on("py-pyhmmer@0.10.4:", when="@1.9.4:", type=("build", "run")) + depends_on("py-pyhmmer@0.10.0:", when="@1.8.2:1.9.3", type=("build", "run")) + # known bug with diamond v2.1.9 + # see https://github.com/oschwengers/bakta/issues/290 + depends_on("diamond@2.1.8,2.1.10:", when="@1.9.0:", type=("build", "run")) + depends_on("diamond@2.0.14:", when="@:1.8.2", type=("build", "run")) + depends_on("blast-plus@2.14.0:", when="@1.9.0:", type=("build", "run")) + depends_on("blast-plus@2.12.0:", when="@:1.8.2", type=("build", "run")) + depends_on("amrfinder@3.11.26:", when="@1.9.0:", type=("build", "run")) + depends_on("amrfinder@3.10.23:", when="@1.5.1", type=("build", "run")) + depends_on("circos@0.69.8:", when="@1.6.0:", type=("build", "run")) + depends_on("py-deepsig-biocomp@1.2.5:", when="+deepsig", type=("build", "run")) + + conflicts("platform=darwin", when="+deepsig") diff --git a/var/spack/repos/builtin/packages/py-blosc2/package.py b/var/spack/repos/builtin/packages/py-blosc2/package.py index 30964085df71a7..d8b08dd8684584 100644 --- a/var/spack/repos/builtin/packages/py-blosc2/package.py +++ b/var/spack/repos/builtin/packages/py-blosc2/package.py @@ -3,6 +3,9 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import shlex + +from spack.build_systems.cmake import CMakeBuilder from spack.package import * @@ -18,16 +21,27 @@ class PyBlosc2(PythonPackage): version("2.2.8", sha256="59065aac5e9b01b0e9f3825d8e7f69f64b59bbfab148a47c54e4115f62a97474") version("2.0.0", sha256="f19b0b3674f6c825b490f00d8264b0c540c2cdc11ec7e81178d38b83c57790a1") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("python@3.9:3", when="@2.2:", type=("build", "link", "run")) depends_on("python@3.8:3", when="@2.0", type=("build", "link", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-scikit-build", type="build") - depends_on("py-cython", type="build") - depends_on("cmake@3.11:", type="build") - depends_on("ninja", type="build") depends_on("py-numpy@1.20.3:", type=("build", "link", "run")) depends_on("py-ndindex@1.4:", when="@2.2:", type=("build", "run")) depends_on("py-msgpack", type=("build", "run")) depends_on("py-py-cpuinfo", when="@2.2:", type=("build", "run")) + depends_on("c-blosc2", type="link") + + with default_args(type="build"): + depends_on("py-setuptools") + depends_on("py-scikit-build") + depends_on("py-cython") + depends_on("cmake@3.11:") + depends_on("ninja") + depends_on("pkgconfig") + + def setup_build_environment(self, env): + cmake_args = [*CMakeBuilder.std_args(self), CMakeBuilder.define("USE_SYSTEM_BLOSC2", True)] + # scikit-build does not want a CMAKE_INSTALL_PREFIX + cmake_args = [arg for arg in cmake_args if "CMAKE_INSTALL_PREFIX" not in arg] + env.set("SKBUILD_CONFIGURE_OPTIONS", " ".join(shlex.quote(arg) for arg in cmake_args)) diff --git a/var/spack/repos/builtin/packages/py-boto3/package.py b/var/spack/repos/builtin/packages/py-boto3/package.py index f38952d305e863..8aadc297a16ea8 100644 --- a/var/spack/repos/builtin/packages/py-boto3/package.py +++ b/var/spack/repos/builtin/packages/py-boto3/package.py @@ -12,6 +12,7 @@ class PyBoto3(PythonPackage): homepage = "https://github.com/boto/boto3" pypi = "boto3/boto3-1.10.44.tar.gz" + version("1.34.162", sha256="873f8f5d2f6f85f1018cbb0535b03cceddc7b655b61f66a0a56995238804f41f") version("1.34.44", sha256="86bcf79a56631609a9f8023fe8f53e2869702bdd4c9047c6d9f091eb39c9b0fa") version("1.26.26", sha256="a2349d436db6f6aa1e0def5501e4884572eb6f008f35063a359a6fa8ba3539b7") version("1.25.5", sha256="aec7db139429fe0f3fbe723170461192b0483b0070114a4b56351e374e0f294d") @@ -37,7 +38,8 @@ class PyBoto3(PythonPackage): depends_on("python@2.6:", when="@1.9:", type=("build", "run")) depends_on("py-setuptools", type="build") - depends_on("py-botocore@1.34.44:1.34", when="@1.34", type=("build", "run")) + depends_on("py-botocore@1.34.162:1.34", when="@1.34.162", type=("build", "run")) + depends_on("py-botocore@1.34.44:1.34", when="@1.34.44", type=("build", "run")) depends_on("py-botocore@1.29.26:1.29", when="@1.26", type=("build", "run")) depends_on("py-botocore@1.28.5:1.28", when="@1.25", type=("build", "run")) depends_on("py-botocore@1.27.96:1.27", when="@1.24", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-botocore/package.py b/var/spack/repos/builtin/packages/py-botocore/package.py index d362b3730238b5..016692c0111fd1 100644 --- a/var/spack/repos/builtin/packages/py-botocore/package.py +++ b/var/spack/repos/builtin/packages/py-botocore/package.py @@ -12,6 +12,7 @@ class PyBotocore(PythonPackage): homepage = "https://github.com/boto/botocore" pypi = "botocore/botocore-1.13.44.tar.gz" + version("1.34.162", sha256="adc23be4fb99ad31961236342b7cbf3c0bfc62532cd02852196032e8c0d682f3") version("1.34.44", sha256="b0f40c54477e8e0a5c43377a927b8959a86bb8824aaef2d28db7c9c367cdefaa") version("1.31.41", sha256="4dad7c5a5e70940de54ebf8de3955450c1f092f43cacff8103819d1e7d5374fa") version("1.29.84", sha256="a36f7f6f8eae5dbd4a1cc8cb6fc747f6315500541181eff2093ee0529fc8e4bc") @@ -48,4 +49,9 @@ class PyBotocore(PythonPackage): depends_on("py-urllib3@1.25.4:1.25", type=("build", "run"), when="@1.19.0:1.19.15") depends_on("py-urllib3@1.25.4:1.26", type=("build", "run"), when="@1.19.16:1.31.61") depends_on("py-urllib3@1.25.4:1.26", type=("build", "run"), when="@1.31.62: ^python@:3.9") - depends_on("py-urllib3@1.25.4:2.0", type=("build", "run"), when="@1.31.62: ^python@3.10:") + depends_on( + "py-urllib3@1.25.4:2.0", type=("build", "run"), when="@1.31.62:1.34.62 ^python@3.10:" + ) + depends_on( + "py-urllib3@1.25.4:2.1,2.2.1:2", type=("build", "run"), when="@1.34.63: ^python@3.10:" + ) diff --git a/var/spack/repos/builtin/packages/py-braceexpand/package.py b/var/spack/repos/builtin/packages/py-braceexpand/package.py new file mode 100644 index 00000000000000..6da0bfbfc7ccb2 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-braceexpand/package.py @@ -0,0 +1,28 @@ +# Copyright 2013-2024 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) +from spack.package import * + + +class PyBraceexpand(PythonPackage): + """Bash-style brace expansion""" + + homepage = "https://github.com/trendels/braceexpand" + url = "https://github.com/trendels/braceexpand/archive/refs/tags/v0.1.7.tar.gz" + + license("MIT") + + version("0.1.7", sha256="72eb91b62b2fa2dd7f6044b7a4b46a3761ac61fe5945a2a86a4538447ab47e05") + + # Requires py-typing with python@:3.4 but Spack's minimum python is higher + depends_on("py-setuptools") + + @run_after("install") + def copy_test_files(self): + cache_extra_test_sources(self, "test_braceexpand.py") + + def test_unittests(self): + """run the unit tests""" + with working_dir(self.test_suite.current_test_cache_dir): + python("test_braceexpand.py") diff --git a/var/spack/repos/builtin/packages/py-caliper-reader/package.py b/var/spack/repos/builtin/packages/py-caliper-reader/package.py new file mode 100644 index 00000000000000..018736812a30d4 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-caliper-reader/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyCaliperReader(PythonPackage): + """A Python library for reading Caliper .cali files.""" + + homepage = "https://github.com/LLNL/Caliper" + pypi = "caliper-reader/caliper-reader-0.4.0.tar.gz" + + license("BSD-3-Clause") + + version("0.4.0", sha256="00c2c0165a0665dbae58579a1477cb785b3f11350f060e95a6e5ce42f02d5c37") + + depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-cffi/package.py b/var/spack/repos/builtin/packages/py-cffi/package.py index 6f312fd942fdf1..c32e5ccd7c4977 100644 --- a/var/spack/repos/builtin/packages/py-cffi/package.py +++ b/var/spack/repos/builtin/packages/py-cffi/package.py @@ -22,29 +22,38 @@ class PyCffi(PythonPackage): version("1.15.0", sha256="920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954") version("1.14.6", sha256="c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd") version("1.14.3", sha256="f92f789e4f9241cd262ad7a555ca2c648a98178a953af117ef7fad46aa1d5591") - version("1.13.0", sha256="8fe230f612c18af1df6f348d02d682fe2c28ca0a6c3856c99599cdacae7cf226") - version("1.12.2", sha256="e113878a446c6228669144ae8a56e268c91b7f1fafae927adc4879d9849e0ea7") - version("1.11.5", sha256="e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4") - version("1.10.0", sha256="b3b02911eb1f6ada203b0763ba924234629b51586f72a21faacc638269f4ced5") - version("1.1.2", sha256="390970b602708c91ddc73953bb6929e56291c18a4d80f360afa00fad8b6f3339") + with default_args(deprecated=True): + version( + "1.13.0", sha256="8fe230f612c18af1df6f348d02d682fe2c28ca0a6c3856c99599cdacae7cf226" + ) + version( + "1.12.2", sha256="e113878a446c6228669144ae8a56e268c91b7f1fafae927adc4879d9849e0ea7" + ) + version( + "1.11.5", sha256="e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4" + ) + version( + "1.10.0", sha256="b3b02911eb1f6ada203b0763ba924234629b51586f72a21faacc638269f4ced5" + ) + version("1.1.2", sha256="390970b602708c91ddc73953bb6929e56291c18a4d80f360afa00fad8b6f3339") - depends_on("c", type="build") # generated + depends_on("c", type="build") - # ./spack-src/cffi/ffiplatform.py has _hack_at_distutils which imports - # setuptools before distutils, but only on Windows. This could be made - # unconditional to support Python 3.12 - depends_on("python@:3.11", type=("build", "run")) + # Based on PyPI wheel availability + with default_args(type=("build", "link", "run")): + depends_on("python@3.8:", when="@1.16:") - # python 3.12 support was released in @1.16:, however the removal - # in python3.12 of distutils has resulted in an imperfect fix for prefix-based - # tools like spack, see: - # https://github.com/spack/spack/pull/46224 - # https://github.com/cython/cython/pull/5754#issuecomment-1752102480 - # until this is correctly fixed, do not enable 3.12 support - # depends_on("python@:3.12", type=("build", "run"), when="@1.16:") + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:1.16") + depends_on("python@:3.11", when="@:1.15") + depends_on("python@:3.10", when="@:1.15.0") + depends_on("python@:3.9", when="@:1.14") + depends_on("python@:3.8", when="@:1.14.2") + depends_on("python@:3.7", when="@:1.12") depends_on("pkgconfig", type="build") depends_on("py-setuptools", type="build") + depends_on("py-setuptools", type="run", when="^python@3.12:") depends_on("py-setuptools@66.1:", type="build", when="@1.16:") depends_on("py-pycparser", type=("build", "run")) depends_on("libffi") diff --git a/var/spack/repos/builtin/packages/py-cfgrib/package.py b/var/spack/repos/builtin/packages/py-cfgrib/package.py index e0f3ed0269e600..c091dc3c0a6dff 100644 --- a/var/spack/repos/builtin/packages/py-cfgrib/package.py +++ b/var/spack/repos/builtin/packages/py-cfgrib/package.py @@ -15,6 +15,7 @@ class PyCfgrib(PythonPackage): license("Apache-2.0") + version("0.9.14.1", sha256="a6e66e8a3d8f9823d3eef0c2c6ebca602d5bcc324f0baf4f3d13f68b0b40501e") version("0.9.10.4", sha256="b490078192aa13ec89c77296110355521442325866b16a996f4b3cf421542909") version("0.9.9.0", sha256="6ff0227df9c5ee34aa7d6ab1f7af3fbe6838523a8a9891c74040b419b03ad289") version("0.9.8.5", sha256="07c224d7ac823a1df5738b96b9d3621515538f51f67e55044f9cc8ec1668e1bd") @@ -29,8 +30,11 @@ class PyCfgrib(PythonPackage): depends_on("py-eccodes", type=("build", "run")) depends_on("py-numpy", type=("build", "run")) - depends_on("py-xarray@0.15:", when="@0.9.10:+xarray", type=("build", "run")) - depends_on("py-xarray@0.12:", when="+xarray", type=("build", "run")) + # 0.9.14.1 enables support for xarray @2024.09.0: + # https://github.com/ecmwf/cfgrib/commit/46a79025146b3847e81629748fc3fe16e56097cf + depends_on("py-xarray@0.15:", when="@0.9.14.1:+xarray", type=("build", "run")) + depends_on("py-xarray@0.15:2024.08.0", when="@0.9.10:0.9.14.0+xarray", type=("build", "run")) + depends_on("py-xarray@0.12:2024.08.0", when="@:0.9.14.0+xarray", type=("build", "run")) # Historical dependencies depends_on("py-pytest-runner", when="@0.9.8.5", type="build") diff --git a/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py b/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py new file mode 100644 index 00000000000000..2734f053d39ee2 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyChainforgecodegen(PythonPackage): + """A code generator that fuses subsequent batched matrix multiplications (GEMMs) + into a single GPU kernel, holding intermediate results in shared memory as long as necessary. + """ + + git = "https://github.com/SeisSol/chainforge.git" + + maintainers("davschneller", "Thomas-Ulrich") + license("BSD-3-Clause") + + version("master", branch="master") + depends_on("py-numpy") + depends_on("py-graphviz", type=("build", "run")) + depends_on("py-jinja2", type=("build", "run")) + depends_on("py-lark", type=("build", "run")) + depends_on("py-pyyaml", type=("build", "run")) + depends_on("py-setuptools", type="build") + + def setup_run_environment(self, env): + env.prepend_path("PATH", self.spec.prefix) + env.prepend_path("PYTHONPATH", self.spec.prefix) diff --git a/var/spack/repos/builtin/packages/py-clip-anytorch/package.py b/var/spack/repos/builtin/packages/py-clip-anytorch/package.py new file mode 100644 index 00000000000000..283adbfeea71c2 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-clip-anytorch/package.py @@ -0,0 +1,33 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyClipAnytorch(PythonPackage): + """CLIP (Contrastive Language-Image Pre-Training) is a neural network + trained on a variety of (image, text) pairs. It can be instructed in + natural language to predict the most relevant text snippet, given an image, + without directly optimizing for the task, similarly to the zero-shot + capabilities of GPT-2 and 3. We found CLIP matches the performance of the + original ResNet50 on ImageNet "zero-shot" without using any of the original + 1.28M labeled examples, overcoming several major challenges in computer + vision.""" + + homepage = "https://github.com/rom1504/CLIP" + # PyPI source is missing requirements.txt + url = "https://github.com/rom1504/CLIP/archive/refs/tags/2.6.0.tar.gz" + + license("MIT", checked_by="qwertos") + + version("2.6.0", sha256="1ac1f6ca47dfb5d4e55be8f45cc2f3bdf6415b91973a04b4529e812a8ae29bea") + + depends_on("py-setuptools", type="build") + depends_on("py-ftfy", type=("build", "run")) + depends_on("py-regex", type=("build", "run")) + depends_on("py-tqdm", type=("build", "run")) + depends_on("py-torch", type=("build", "run")) + depends_on("py-torchvision", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-coca-pytorch/package.py b/var/spack/repos/builtin/packages/py-coca-pytorch/package.py new file mode 100644 index 00000000000000..e759919fd6add8 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-coca-pytorch/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyCocaPytorch(PythonPackage): + """CoCa, Contrastive Captioners are Image-Text Foundation Models - + Pytorch""" + + homepage = "https://github.com/lucidrains/CoCa-pytorch" + pypi = "CoCa-pytorch/CoCa-pytorch-0.1.0.tar.gz" + + license("MIT", checked_by="alex391") + + version("0.1.0", sha256="119c83812d140ad197cf4e992db8c373d908af0bffd0a87015546b6a1cf0a316") + + depends_on("py-setuptools", type="build") + depends_on("py-einops@0.4:", type=("build", "run")) + depends_on("py-torch@1.6:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-configspace/package.py b/var/spack/repos/builtin/packages/py-configspace/package.py index 6a392b6276fea6..78d56f17adfb99 100644 --- a/var/spack/repos/builtin/packages/py-configspace/package.py +++ b/var/spack/repos/builtin/packages/py-configspace/package.py @@ -12,7 +12,7 @@ class PyConfigspace(PythonPackage): maintainers("Kerilk", "mdorier") - homepage = "https://automl.github.io/ConfigSpace/master/" + homepage = "https://automl.github.io/ConfigSpace/latest/" pypi = "configspace/configspace-1.0.0.tar.gz" license("BSD-3-Clause") diff --git a/var/spack/repos/builtin/packages/py-constantly/package.py b/var/spack/repos/builtin/packages/py-constantly/package.py index b569b524348d90..4e6216ee5a2fbf 100644 --- a/var/spack/repos/builtin/packages/py-constantly/package.py +++ b/var/spack/repos/builtin/packages/py-constantly/package.py @@ -14,6 +14,8 @@ class PyConstantly(PythonPackage): license("MIT") + version("23.10.4", sha256="aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd") version("15.1.0", sha256="586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35") depends_on("py-setuptools", type="build") + depends_on("py-versioneer+toml@0.29", type="build", when="@23.10.4:") diff --git a/var/spack/repos/builtin/packages/py-cryptography/package.py b/var/spack/repos/builtin/packages/py-cryptography/package.py index a883c11e04ae4d..5049fbf3e1c54e 100644 --- a/var/spack/repos/builtin/packages/py-cryptography/package.py +++ b/var/spack/repos/builtin/packages/py-cryptography/package.py @@ -15,6 +15,8 @@ class PyCryptography(PythonPackage): license("Apache-2.0") + version("43.0.3", sha256="315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805") + version("43.0.1", sha256="203e92a75716d8cfb491dc47c79e17d0d9207ccffcbcb35f598fbe463ae3444d") version("42.0.8", sha256="8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2") version("41.0.7", sha256="13f93ce9bea8016c253b34afc6bd6a75993e5c40672ed5405a9c832f0d4a00bc") version("41.0.3", sha256="6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34") @@ -34,6 +36,8 @@ class PyCryptography(PythonPackage): variant("idna", default=False, when="@2.5:3.0", description="Deprecated U-label support") + # pyo3 <= 0.22 required in version <= 42 + depends_on("python@:3.12", when="@:42", type=("build", "run")) # distutils required in version <= 40 depends_on("python@:3.11", when="@:40", type=("build", "run")) depends_on("py-setuptools@61.0:", when="@41:", type="build") @@ -41,9 +45,16 @@ class PyCryptography(PythonPackage): depends_on("py-setuptools@40.6:", when="@2.7:36", type="build") depends_on("py-setuptools@18.5:", when="@2.2:2.6", type="build") depends_on("py-setuptools@11.3:", when="@:2.1", type="build") - depends_on("py-setuptools-rust@1.7.0:", when="@42:", type=("build", "run")) - depends_on("py-setuptools-rust@0.11.4:", when="@3.4.2:", type="build") - depends_on("py-setuptools-rust@0.11.4:", when="@3.4:3.4.1", type=("build", "run")) + with when("@43:"): + depends_on("py-maturin@1", type="build") + conflicts( + "^py-setuptools@74.0.0,74.1.0,74.1.1,74.1.2,74.1.3,75.0.0,75.1.0,75.2.0", + msg="some setuptools version are incompatible", + ) + with when("@:42"): + depends_on("py-setuptools-rust@1.7.0:", when="@42", type=("build", "run")) + depends_on("py-setuptools-rust@0.11.4:", when="@3.4.2:", type="build") + depends_on("py-setuptools-rust@0.11.4:", when="@3.4:3.4.1", type=("build", "run")) depends_on("rust@1.56:", when="@41:", type="build") depends_on("rust@1.48:", when="@38:", type="build") depends_on("rust@1.41:", when="@3.4.5:", type="build") diff --git a/var/spack/repos/builtin/packages/py-curvlinops-for-pytorch/package.py b/var/spack/repos/builtin/packages/py-curvlinops-for-pytorch/package.py new file mode 100644 index 00000000000000..8197e8291e8936 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-curvlinops-for-pytorch/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyCurvlinopsForPytorch(PythonPackage): + """scipy Linear operators for curvature matrices in PyTorch.""" + + homepage = "https://github.com/f-dangel/curvlinops" + pypi = "curvlinops_for_pytorch/curvlinops_for_pytorch-2.0.0.tar.gz" + + license("MIT") + + version("2.0.0", sha256="01f9925db9454fc9b0a31c7b83fc8ec2534c2eb12b7de7825a5298fc14e460e7") + + with default_args(type="build"): + depends_on("py-setuptools@61:") + depends_on("py-setuptools-scm") + + with default_args(type=("build", "run")): + depends_on("py-backpack-for-pytorch@1.6:1") + depends_on("py-torch@2:") + depends_on("py-scipy@1.7.1:1") + depends_on("py-tqdm@4.61:4") + depends_on("py-einops") + depends_on("py-einconv") diff --git a/var/spack/repos/builtin/packages/py-cython/package.py b/var/spack/repos/builtin/packages/py-cython/package.py index 96d60cb7681905..a410fdb4fb2c86 100644 --- a/var/spack/repos/builtin/packages/py-cython/package.py +++ b/var/spack/repos/builtin/packages/py-cython/package.py @@ -10,16 +10,12 @@ class PyCython(PythonPackage): """The Cython compiler for writing C extensions for the Python language.""" homepage = "https://github.com/cython/cython" - pypi = "cython/Cython-0.29.21.tar.gz" + pypi = "cython/cython-3.0.11.tar.gz" tags = ["build-tools"] license("Apache-2.0") - version( - "3.0.11", - sha256="7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff", - url="https://files.pythonhosted.org/packages/source/cython/cython-3.0.11.tar.gz", - ) + version("3.0.11", sha256="7146dd2af8682b4ca61331851e6aebce9fe5158e75300343f80c07ca80b1faff") version("3.0.10", sha256="dcc96739331fb854dcf503f94607576cfe8488066c61ca50dfd55836f132de99") version("3.0.8", sha256="8333423d8fd5765e7cceea3a9985dd1e0a5dfeb2734629e1a2ed2d6233d39de6") version("3.0.7", sha256="fb299acf3a578573c190c858d49e0cf9d75f4bc49c3f24c5a63804997ef09213") @@ -37,42 +33,83 @@ class PyCython(PythonPackage): version("0.29.23", sha256="6a0d31452f0245daacb14c979c77e093eb1a546c760816b5eed0047686baad8e") version("0.29.22", sha256="df6b83c7a6d1d967ea89a2903e4a931377634a297459652e4551734c48195406") version("0.29.21", sha256="e57acb89bd55943c8d8bf813763d20b9099cc7165c0f16b707631a7654be9cad") - version("0.29.20", sha256="22d91af5fc2253f717a1b80b8bb45acb655f643611983fd6f782b9423f8171c7") - version("0.29.16", sha256="232755284f942cbb3b43a06cd85974ef3c970a021aef19b5243c03ee2b08fa05") - version("0.29.15", sha256="60d859e1efa5cc80436d58aecd3718ff2e74b987db0518376046adedba97ac30") - version("0.29.14", sha256="e4d6bb8703d0319eb04b7319b12ea41580df44fd84d83ccda13ea463c6801414") - version("0.29.13", sha256="c29d069a4a30f472482343c866f7486731ad638ef9af92bfe5fca9c7323d638e") - version("0.29.10", sha256="26229570d6787ff3caa932fe9d802960f51a89239b990d275ae845405ce43857") - version("0.29.7", sha256="55d081162191b7c11c7bfcb7c68e913827dfd5de6ecdbab1b99dab190586c1e8") - version("0.29.5", sha256="9d5290d749099a8e446422adfb0aa2142c711284800fb1eb70f595101e32cbf1") - version("0.29", sha256="94916d1ede67682638d3cc0feb10648ff14dc51fb7a7f147f4fedce78eaaea97") - version("0.28.6", sha256="68aa3c00ef1deccf4dd50f0201d47c268462978c12c42943bc33dc9dc816ac1b") - version("0.28.3", sha256="1aae6d6e9858888144cea147eb5e677830f45faaff3d305d77378c3cba55f526") - version("0.28.1", sha256="152ee5f345012ca3bb7cc71da2d3736ee20f52cd8476e4d49e5e25c5a4102b12") - version("0.25.2", sha256="f141d1f9c27a07b5a93f7dc5339472067e2d7140d1c5a9e20112a5665ca60306") - version("0.23.5", sha256="0ae5a5451a190e03ee36922c4189ca2c88d1df40a89b4f224bc842d388a0d1b6") - version("0.23.4", sha256="fec42fecee35d6cc02887f1eef4e4952c97402ed2800bfe41bbd9ed1a0730d8e") - - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated - - # https://github.com/cython/cython/issues/5751 (distutils not yet dropped) - depends_on("python@:3.11", type=("build", "link", "run")) - - # https://github.com/cython/cython/commit/1cd24026e9cf6d63d539b359f8ba5155fd48ae21 - # collections.Iterable was removed in Python 3.10 - depends_on("python@:3.9", when="@:0.29.14", type=("build", "link", "run")) - - # https://github.com/cython/cython/commit/430e2ca220c8fed49604daf578df98aadb33a87d - depends_on("python@:3.8", when="@:0.29.13", type=("build", "link", "run")) - - depends_on("py-setuptools", type=("build", "run")) + with default_args(deprecated=True): + version( + "0.29.20", sha256="22d91af5fc2253f717a1b80b8bb45acb655f643611983fd6f782b9423f8171c7" + ) + version( + "0.29.16", sha256="232755284f942cbb3b43a06cd85974ef3c970a021aef19b5243c03ee2b08fa05" + ) + version( + "0.29.15", sha256="60d859e1efa5cc80436d58aecd3718ff2e74b987db0518376046adedba97ac30" + ) + version( + "0.29.14", sha256="e4d6bb8703d0319eb04b7319b12ea41580df44fd84d83ccda13ea463c6801414" + ) + version( + "0.29.13", sha256="c29d069a4a30f472482343c866f7486731ad638ef9af92bfe5fca9c7323d638e" + ) + version( + "0.29.10", sha256="26229570d6787ff3caa932fe9d802960f51a89239b990d275ae845405ce43857" + ) + version( + "0.29.7", sha256="55d081162191b7c11c7bfcb7c68e913827dfd5de6ecdbab1b99dab190586c1e8" + ) + version( + "0.29.5", sha256="9d5290d749099a8e446422adfb0aa2142c711284800fb1eb70f595101e32cbf1" + ) + version("0.29", sha256="94916d1ede67682638d3cc0feb10648ff14dc51fb7a7f147f4fedce78eaaea97") + version( + "0.28.6", sha256="68aa3c00ef1deccf4dd50f0201d47c268462978c12c42943bc33dc9dc816ac1b" + ) + version( + "0.28.3", sha256="1aae6d6e9858888144cea147eb5e677830f45faaff3d305d77378c3cba55f526" + ) + version( + "0.28.1", sha256="152ee5f345012ca3bb7cc71da2d3736ee20f52cd8476e4d49e5e25c5a4102b12" + ) + version( + "0.25.2", sha256="f141d1f9c27a07b5a93f7dc5339472067e2d7140d1c5a9e20112a5665ca60306" + ) + version( + "0.23.5", sha256="0ae5a5451a190e03ee36922c4189ca2c88d1df40a89b4f224bc842d388a0d1b6" + ) + version( + "0.23.4", sha256="fec42fecee35d6cc02887f1eef4e4952c97402ed2800bfe41bbd9ed1a0730d8e" + ) + + depends_on("c", type="build") + depends_on("cxx", type="build") + + # Based on PyPI wheel availability + with default_args(type=("build", "link", "run")): + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:3.0.10") + depends_on("python@:3.11", when="@:3.0.3") # Cythonize still used distutils + depends_on("python@:3.10", when="@:0.29.28") + depends_on("python@:3.9", when="@:0.29.24") + depends_on("python@:3.8", when="@:0.29.20") + depends_on("python@:3.7", when="@:0.29.13") + + # https://github.com/cython/cython/issues/5751 + # https://github.com/cython/cython/commit/0000fb4c319ef8f7e8eabcc99677f99a8c503cc3 + depends_on("py-setuptools@66:", when="^python@3.12:", type="run") + + depends_on("py-setuptools", type="build") depends_on("gdb@7.2:", type="test") # Backports CYTHON_FORCE_REGEN environment variable patch("5307.patch", when="@0.29:0.29.33") patch("5712.patch", when="@0.29") + def url_for_version(self, version): + url = "https://files.pythonhosted.org/packages/source/c/cython/{}-{}.tar.gz" + if version >= Version("3.0.11"): + name = "cython" + else: + name = "Cython" + return url.format(name, version) + @property def command(self): """Returns the Cython command""" diff --git a/var/spack/repos/builtin/packages/py-damask/package.py b/var/spack/repos/builtin/packages/py-damask/package.py index 18534b1a937e53..a51e98a7ca5c3d 100644 --- a/var/spack/repos/builtin/packages/py-damask/package.py +++ b/var/spack/repos/builtin/packages/py-damask/package.py @@ -10,13 +10,14 @@ class PyDamask(PythonPackage): """Pre- and post-processing tools for DAMASK""" - homepage = "https://damask.mpie.de" - url = "https://damask.mpie.de/download/damask-3.0.0.tar.xz" + homepage = "https://damask-multiphysics.org" + url = "https://damask-multiphysics.org/download/damask-3.0.0.tar.xz" maintainers("MarDiehl") license("AGPL-3.0-or-later") + version("3.0.1", sha256="3db1231f6763356e71b3bb91f66f1abb4fdae2721ce85754fc468446f3d74882") version("3.0.0", sha256="aaebc65b3b10e6c313132ee97cfed427c115079b7e438cc0727c5207e159019f") version( "3.0.0-beta2", sha256="513567b4643f39e27ae32b9f75463fc6f388c1548d42f0393cc87ba02d075f6a" diff --git a/var/spack/repos/builtin/packages/py-darshan/package.py b/var/spack/repos/builtin/packages/py-darshan/package.py index b6124eb9cb5412..9740c1022033c0 100644 --- a/var/spack/repos/builtin/packages/py-darshan/package.py +++ b/var/spack/repos/builtin/packages/py-darshan/package.py @@ -14,6 +14,9 @@ class PyDarshan(PythonPackage): maintainers("jeanbez", "shanedsnyder") + # NOTE: don't forget to update the version array further down that sets the appropriate + # darshan-util dependency + version("3.4.6.0", sha256="a105ec5c9bcd4a20469470ca51db8016336ede34a1c33f4488d1ba263a73c378") version("3.4.5.0", sha256="1419e246b2383d3e71da14942d6579a86fb298bf6dbbc3f507accefa614c6e50") version("3.4.4.0", sha256="2d218a1b2a450934698a78148c6603e453c246ec852679432bf217981668e56b") version("3.4.3.0", sha256="e0708fc5445f2d491ebd381a253cd67534cef13b963f1d749dd605a10f5c0f8f") @@ -45,7 +48,7 @@ class PyDarshan(PythonPackage): # py-darshan depends on specific darshan-util versions corresponding # to the first 3 parts of the py-darshan version string # (i.e., py-darshan@3.4.3.0 requires darshan-util@3.4.3, etc.) - for v in ["3.4.0", "3.4.1", "3.4.2", "3.4.3"]: + for v in ["3.4.0", "3.4.1", "3.4.2", "3.4.3", "3.4.4", "3.4.5", "3.4.6"]: depends_on(f"darshan-util@{v}", when=f"@{v}", type=("build", "run")) @run_after("install") diff --git a/var/spack/repos/builtin/packages/py-datrie/package.py b/var/spack/repos/builtin/packages/py-datrie/package.py index 559ad594d8dbc3..e7a77f128b2562 100644 --- a/var/spack/repos/builtin/packages/py-datrie/package.py +++ b/var/spack/repos/builtin/packages/py-datrie/package.py @@ -22,3 +22,8 @@ class PyDatrie(PythonPackage): depends_on("py-setuptools@40.8:", type=("build")) depends_on("py-cython@0.28:", type="build") depends_on("py-pytest-runner", type="build") + + @when("@:0.8.2") + def patch(self): + # fix failure to compile on gcc-14, https://github.com/pytries/datrie/pull/99 + filter_file(r"(\s*)(struct AlphaMap:)", r"\1ctypedef \2", "src/cdatrie.pxd") diff --git a/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py b/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py index 01b527251fc52f..8c1abc2e8ff378 100644 --- a/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py +++ b/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py @@ -19,11 +19,11 @@ class PyDeepsigBiocomp(PythonPackage): version("1.2.5", sha256="e954b815d63c221c564c7d3fe27123d7cd2c39b191d6107369ab095d506496e0") - depends_on("python@3.8", type=("build", "run")) + depends_on("python@3.8:", type=("build", "run")) depends_on("py-setuptools", type="build") depends_on("py-biopython@1.78:", type=("build", "run")) - depends_on("py-keras@2.4.3", type=("build", "run")) - depends_on("py-tensorflow@2.2.0", type=("build", "run")) + depends_on("py-keras@2.4.3:", type=("build", "run")) + depends_on("py-tensorflow@2.2.0:", type=("build", "run")) depends_on("py-tensorboard", type=("build", "run")) @run_after("install") diff --git a/var/spack/repos/builtin/packages/py-dgl/package.py b/var/spack/repos/builtin/packages/py-dgl/package.py index f16980179eba06..814041b93b90ef 100644 --- a/var/spack/repos/builtin/packages/py-dgl/package.py +++ b/var/spack/repos/builtin/packages/py-dgl/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -132,8 +133,7 @@ def cmake_args(self): def install(self, spec, prefix): with working_dir("python"): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") # Older versions do not install correctly if self.spec.satisfies("@:0.4.3"): diff --git a/var/spack/repos/builtin/packages/py-easybuild-framework/package.py b/var/spack/repos/builtin/packages/py-easybuild-framework/package.py index 7f18df00f3a460..233009c960a598 100644 --- a/var/spack/repos/builtin/packages/py-easybuild-framework/package.py +++ b/var/spack/repos/builtin/packages/py-easybuild-framework/package.py @@ -21,4 +21,6 @@ class PyEasybuildFramework(PythonPackage): version("4.0.0", sha256="f5c40345cc8b9b5750f53263ade6c9c3a8cd3dfab488d58f76ac61a8ca7c5a77") depends_on("python@3.5:", type=("build", "run")) + # https://github.com/easybuilders/easybuild-framework/issues/3963 + depends_on("python@:3.11", type=("build", "run"), when="@:4") depends_on("py-setuptools", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-einconv/package.py b/var/spack/repos/builtin/packages/py-einconv/package.py new file mode 100644 index 00000000000000..6a6c23dacd366d --- /dev/null +++ b/var/spack/repos/builtin/packages/py-einconv/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyEinconv(PythonPackage): + """Convolutions as tensor contractions (einsums) for PyTorch.""" + + homepage = "https://github.com/f-dangel/einconv" + pypi = "einconv/einconv-0.1.0.tar.gz" + + license("MIT") + + version("0.1.0", sha256="6b103881b1268e43d581f285da4fa72b073c95f31b92575133bafed9929b6d98") + + with default_args(type="build"): + depends_on("py-setuptools@38.3:") + depends_on("py-setuptools-scm") + + with default_args(type=("build", "run")): + depends_on("py-torch") + depends_on("py-einops") diff --git a/var/spack/repos/builtin/packages/py-ema-pytorch/package.py b/var/spack/repos/builtin/packages/py-ema-pytorch/package.py new file mode 100644 index 00000000000000..dadf3aaecf5bcd --- /dev/null +++ b/var/spack/repos/builtin/packages/py-ema-pytorch/package.py @@ -0,0 +1,24 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyEmaPytorch(PythonPackage): + """Easy way to keep track of exponential moving average version of your + pytorch module""" + + homepage = "https://github.com/lucidrains/ema-pytorch" + pypi = "ema_pytorch/ema_pytorch-0.5.1.tar.gz" + + license("MIT", checked_by="alex391") + + version("0.7.3", sha256="de640f1d1a054c79607aebfcfd4b8dfff1fba1110bf0c8f7d37517637450938a") + version("0.5.1", sha256="e825212a44e8faae5d2cf2a1349961c4416cba0496ffa64d37718d8b06f206b2") + + depends_on("py-setuptools", type="build") + depends_on("py-torch@2:", when="@0.7:", type=("build", "run")) + depends_on("py-torch@1.6:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-email-validator/package.py b/var/spack/repos/builtin/packages/py-email-validator/package.py index 130824d5c3fcd6..151f65c7ec91ef 100644 --- a/var/spack/repos/builtin/packages/py-email-validator/package.py +++ b/var/spack/repos/builtin/packages/py-email-validator/package.py @@ -12,10 +12,13 @@ class PyEmailValidator(PythonPackage): homepage = "https://github.com/JoshData/python-email-validator" pypi = "email_validator/email_validator-1.3.1.tar.gz" - license("CC0-1.0") + license("Unlicense", when="@2.1.1:", checked_by="wdconinc") + license("CC0-1.0", when="@:2.1.0", checked_by="wdconinc") + version("2.2.0", sha256="cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7") version("1.3.1", sha256="d178c5c6fa6c6824e9b04f199cf23e79ac15756786573c190d2ad13089411ad2") depends_on("py-setuptools", type="build") + depends_on("py-dnspython@2:", type=("build", "run"), when="@2:") depends_on("py-dnspython@1.15:", type=("build", "run")) depends_on("py-idna@2:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-embedding-reader/package.py b/var/spack/repos/builtin/packages/py-embedding-reader/package.py new file mode 100644 index 00000000000000..5468cebc1114ae --- /dev/null +++ b/var/spack/repos/builtin/packages/py-embedding-reader/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyEmbeddingReader(PythonPackage): + """Embedding reader is a module to make it easy to read efficiently a large + collection of embeddings stored in any file system.""" + + homepage = "https://github.com/rom1504/embedding-reader" + # PyPI source is missing requirements.txt + url = "https://github.com/rom1504/embedding-reader/archive/refs/tags/1.7.0.tar.gz" + + license("MIT", checked_by="alex391") + + version("1.7.0", sha256="3bae324a06d795ea025317fdcfeb6ef1632e37786bf171973e83543700bbef73") + + depends_on("py-setuptools", type="build") + depends_on("py-tqdm@4.62.3:4", type=("build", "run")) + depends_on("py-fsspec@2022.1.0:", type=("build", "run")) + depends_on("py-numpy@1.19.5:1", type=("build", "run")) + depends_on("py-pandas@1.1.5:2", type=("build", "run")) + depends_on("py-pyarrow@6.0.1:15", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-eventlet/package.py b/var/spack/repos/builtin/packages/py-eventlet/package.py index 03e440844d37a2..e5bf12d6f8ca6c 100644 --- a/var/spack/repos/builtin/packages/py-eventlet/package.py +++ b/var/spack/repos/builtin/packages/py-eventlet/package.py @@ -10,11 +10,11 @@ class PyEventlet(PythonPackage): """Concurrent networking library for Python""" homepage = "https://github.com/eventlet/eventlet" - url = "https://github.com/eventlet/eventlet/releases/download/v0.22.0/eventlet-0.22.0.tar.gz" + url = "https://github.com/eventlet/eventlet/archive/refs/tags/v0.22.0.tar.gz" license("MIT") - version("0.22.0", sha256="6d22464f448fdf144a9d566c157299d686bbe324554dd7729df9ccd05ca66439") + version("0.22.0", sha256="c4cc92268b82eb94d5e0de0592159157d68122d394f480e3f9a9d6ddb695655e") depends_on("py-setuptools", type="build") depends_on("py-greenlet@0.3:") diff --git a/var/spack/repos/builtin/packages/py-expandvars/package.py b/var/spack/repos/builtin/packages/py-expandvars/package.py new file mode 100644 index 00000000000000..7d88ca2a93cbd8 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-expandvars/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyExpandvars(PythonPackage): + """Expand system variables Unix style.""" + + homepage = "https://github.com/sayanarijit/expandvars" + pypi = "expandvars/expandvars-0.12.0.tar.gz" + + license("MIT") + + version("0.12.0", sha256="7d1adfa55728cf4b5d812ece3d087703faea953e0c0a1a78415de9df5024d844") + + depends_on("py-hatchling", type="build") diff --git a/var/spack/repos/builtin/packages/py-fastapi/package.py b/var/spack/repos/builtin/packages/py-fastapi/package.py index 36e48025b34efa..359a0f81533503 100644 --- a/var/spack/repos/builtin/packages/py-fastapi/package.py +++ b/var/spack/repos/builtin/packages/py-fastapi/package.py @@ -10,34 +10,60 @@ class PyFastapi(PythonPackage): """FastAPI framework, high performance, easy to learn, fast to code, ready for production""" - homepage = "https://github.com/tiangolo/fastapi" + homepage = "https://github.com/fastapi/fastapi" pypi = "fastapi/fastapi-0.88.0.tar.gz" license("MIT") - version("0.98.0", sha256="0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b") - version("0.88.0", sha256="915bf304180a0e7c5605ec81097b7d4cd8826ff87a02bb198e336fb9f3b5ff02") + version("0.115.4", sha256="db653475586b091cb8b2fec2ac54a680ac6a158e07406e1abae31679e8826349") + version("0.110.2", sha256="b53d673652da3b65e8cd787ad214ec0fe303cad00d2b529b86ce7db13f17518d") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-24762 + version( + "0.98.0", sha256="0d3c18886f652038262b5898fec6b09f4ca92ee23e9d9b1d1d24e429f84bf27b" + ) + version( + "0.88.0", sha256="915bf304180a0e7c5605ec81097b7d4cd8826ff87a02bb198e336fb9f3b5ff02" + ) variant("all", default=False, description="Build all optional dependencies") - depends_on("py-hatchling@1.13:", when="@0.98:", type="build") - depends_on("py-hatchling", type="build") - depends_on("py-starlette@0.27", when="@0.95.2:", type=("build", "run")) + depends_on("python@3.8:", when="@0.104:", type=("build", "run")) + + depends_on("py-pdm-backend", when="@0.110.3:", type="build") + depends_on("py-hatchling@1.13:", when="@0.98:0.110.2", type="build") + depends_on("py-hatchling", when="@:0.110.2", type="build") + + depends_on("py-starlette@0.40:0.41", when="@0.115.3:", type=("build", "run")) + depends_on("py-starlette@0.37.2:0.40", when="@0.115.2", type=("build", "run")) + depends_on("py-starlette@0.37.2:0.38", when="@0.112.1:0.115.1", type=("build", "run")) + depends_on("py-starlette@0.37.2:0.37", when="@0.110.1:0.112.0", type=("build", "run")) + depends_on("py-starlette@0.36.3:0.36", when="@0.109.2:0.110.0", type=("build", "run")) + depends_on("py-starlette@0.35:0.35", when="@0.109.0:0.109.1", type=("build", "run")) + depends_on("py-starlette@0.29:0.32", when="@0.108.0:0.108", type=("build", "run")) + depends_on("py-starlette@0.28", when="@0.107.0:0.107", type=("build", "run")) + depends_on("py-starlette@0.27", when="@0.95.2:0.106", type=("build", "run")) depends_on("py-starlette@0.22.0", when="@:0.89.1", type=("build", "run")) + depends_on("py-pydantic@1.7.4:1,2.1.1:2", when="@0.101:", type=("build", "run")) depends_on("py-pydantic@1.7.4:1", when="@0.96.1:", type=("build", "run")) depends_on("py-pydantic@1.6.2:1", when="@:0.96.0", type=("build", "run")) + depends_on("py-typing-extensions@4.8.0:", when="@0.104:", type=("build", "run")) - conflicts("^py-pydantic@1.7.0:1.7.3,1.8.0:1.8.1") + conflicts("^py-pydantic@1.7.0:1.7.3,1.8.0:1.8.1,2.0,2.1.0") with when("+all"): depends_on("py-httpx@0.23:", type=("build", "run")) depends_on("py-jinja2@2.11.2:", type=("build", "run")) + depends_on("py-python-multipart@0.0.7:", when="@0.109.1:", type=("build", "run")) depends_on("py-python-multipart@0.0.5:", type=("build", "run")) depends_on("py-itsdangerous@1.1:", type=("build", "run")) depends_on("py-pyyaml@5.3.1:", type=("build", "run")) depends_on("py-ujson@4.0.1:", type=("build", "run")) depends_on("py-orjson@3.2.1:", type=("build", "run")) + depends_on("py-email-validator@2.0.0:", when="@0.100:", type=("build", "run")) depends_on("py-email-validator@1.1.1:", type=("build", "run")) depends_on("py-uvicorn@0.12:+standard", type=("build", "run")) + depends_on("py-pydantic-settings@2.0.0:", when="@0.100:", type=("build", "run")) + depends_on("py-pydantic-extra-types@2.0.0:", when="@0.100:", type=("build", "run")) conflicts("^py-ujson@4.0.2,4.1.0,4.2.0,4.3.0,5.0.0,5.1.0") diff --git a/var/spack/repos/builtin/packages/py-flask-compress/package.py b/var/spack/repos/builtin/packages/py-flask-compress/package.py index 2b037a3da45857..fa5395f9a36ba4 100644 --- a/var/spack/repos/builtin/packages/py-flask-compress/package.py +++ b/var/spack/repos/builtin/packages/py-flask-compress/package.py @@ -15,7 +15,11 @@ class PyFlaskCompress(PythonPackage): license("MIT") + version("1.14", sha256="e46528f37b91857012be38e24e65db1a248662c3dc32ee7808b5986bf1d123ee") version("1.4.0", sha256="468693f4ddd11ac6a41bca4eb5f94b071b763256d54136f77957cfee635badb3") depends_on("py-setuptools", type="build") + depends_on("py-setuptools@0.42:", type="build", when="@1.10:") + depends_on("py-setuptools-scm@3.4: +toml", type="build", when="@1.10:") depends_on("py-flask@0.9:", type=("build", "run")) + depends_on("py-brotli", type="run", when="@1.5:") diff --git a/var/spack/repos/builtin/packages/py-flask-cors/package.py b/var/spack/repos/builtin/packages/py-flask-cors/package.py index 6eac377c7b8dbf..4f708db2764b0b 100644 --- a/var/spack/repos/builtin/packages/py-flask-cors/package.py +++ b/var/spack/repos/builtin/packages/py-flask-cors/package.py @@ -16,6 +16,7 @@ class PyFlaskCors(PythonPackage): license("MIT") + version("4.0.0", sha256="f268522fcb2f73e2ecdde1ef45e2fd5c71cc48fe03cffb4b441c6d1b40684eb0") version("3.0.10", sha256="b60839393f3b84a0f3746f6cdca56c1ad7426aa738b70d6c61375857823181de") depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-flask/package.py b/var/spack/repos/builtin/packages/py-flask/package.py index 091ebed06bb981..6c7786f2d1bb52 100644 --- a/var/spack/repos/builtin/packages/py-flask/package.py +++ b/var/spack/repos/builtin/packages/py-flask/package.py @@ -10,24 +10,37 @@ class PyFlask(PythonPackage): """A simple framework for building complex web applications.""" homepage = "https://palletsprojects.com/p/flask/" - pypi = "Flask/Flask-1.1.1.tar.gz" + pypi = "flask/flask-3.0.3.tar.gz" git = "https://github.com/pallets/flask.git" license("BSD-3-Clause") + version("3.0.3", sha256="ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842") version("2.3.2", sha256="8c2f9abd47a9e8df7f0c3f091ce9497d011dc3b31effcf4c85a6e2b50f4114ef") - version("2.2.2", sha256="642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b") - version("2.0.2", sha256="7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2") - version("1.1.2", sha256="4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060") - version("1.1.1", sha256="13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52") - version("0.12.4", sha256="2ea22336f6d388b4b242bc3abf8a01244a8aa3e236e7407469ef78c16ba355dd") - version("0.12.2", sha256="49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1") - version("0.12.1", sha256="9dce4b6bfbb5b062181d3f7da8f727ff70c1156cbb4024351eafd426deb5fb88") - version("0.11.1", sha256="b4713f2bfb9ebc2966b8a49903ae0d3984781d5c878591cf2f7b484d28756b0e") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-30861 + version("2.2.2", sha256="642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b") + version("2.0.2", sha256="7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2") + version("1.1.2", sha256="4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060") + version("1.1.1", sha256="13f9f196f330c7c2c5d7a5cf91af894110ca0215ac051b5844701f2bfd934d52") + version( + "0.12.4", sha256="2ea22336f6d388b4b242bc3abf8a01244a8aa3e236e7407469ef78c16ba355dd" + ) + version( + "0.12.2", sha256="49f44461237b69ecd901cc7ce66feea0319b9158743dd27a2899962ab214dac1" + ) + version( + "0.12.1", sha256="9dce4b6bfbb5b062181d3f7da8f727ff70c1156cbb4024351eafd426deb5fb88" + ) + version( + "0.11.1", sha256="b4713f2bfb9ebc2966b8a49903ae0d3984781d5c878591cf2f7b484d28756b0e" + ) depends_on("python@3.8:", when="@2.3:", type=("build", "run")) - depends_on("py-setuptools", type=("build", "run")) + depends_on("py-setuptools", type=("build", "run"), when="@:2") + depends_on("py-flit-core@:3", type=("build", "run"), when="@3:") + depends_on("py-werkzeug@3:", when="@3:", type=("build", "run")) depends_on("py-werkzeug@2.3.3:", when="@2.3.2:", type=("build", "run")) depends_on("py-werkzeug@2.2.2:", when="@2.2.2:", type=("build", "run")) depends_on("py-werkzeug@2:", when="@2:", type=("build", "run")) @@ -44,3 +57,11 @@ class PyFlask(PythonPackage): depends_on("py-click@5.1:", type=("build", "run")) depends_on("py-blinker@1.6.2:", when="@2.3:", type=("build", "run")) depends_on("py-importlib-metadata@3.6:", when="@2.1: ^python@:3.9", type=("build", "run")) + + def url_for_version(self, version): + url = "https://files.pythonhosted.org/packages/source/f/flask/{}-{}.tar.gz" + if self.spec.satisfies("@:0.18.3"): + name = "Flask" + else: + name = "flask" + return url.format(name, version) diff --git a/var/spack/repos/builtin/packages/py-frozendict/package.py b/var/spack/repos/builtin/packages/py-frozendict/package.py index 0083d1b9b64b25..c3f5de6d0144c4 100644 --- a/var/spack/repos/builtin/packages/py-frozendict/package.py +++ b/var/spack/repos/builtin/packages/py-frozendict/package.py @@ -9,7 +9,7 @@ class PyFrozendict(PythonPackage): """An immutable dictionary""" - homepage = "An immutable dictionary" + homepage = "https://github.com/Marco-Sulla/python-frozendict" pypi = "frozendict/frozendict-1.2.tar.gz" license("LGPL-3.0-only") diff --git a/var/spack/repos/builtin/packages/py-frozenlist/package.py b/var/spack/repos/builtin/packages/py-frozenlist/package.py index b98a509c7043ed..89382f32b29897 100644 --- a/var/spack/repos/builtin/packages/py-frozenlist/package.py +++ b/var/spack/repos/builtin/packages/py-frozenlist/package.py @@ -15,14 +15,27 @@ class PyFrozenlist(PythonPackage): license("Apache-2.0") + version("1.5.0", sha256="81d5af29e61b9c8348e876d442253723928dce6433e0e76cd925cd83f1b4b817") version("1.3.1", sha256="3a735e4211a04ccfa3f4833547acdf5d2f863bfeb01cfd3edaffbc251f15cec8") version("1.3.0", sha256="ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b") version("1.2.0", sha256="68201be60ac56aff972dc18085800b6ee07973c49103a8aba669dee3d71079de") - depends_on("c", type="build") # generated - - depends_on("python@3.6:", type=("build", "run")) - depends_on("python@3.7:", when="@1.3.1:", type=("build", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-setuptools@46.4.0:", when="@1.3.1:", type="build") - depends_on("py-wheel@0.37.0:", when="@1.3.1:", type="build") + depends_on("c", type="build") + + # Based on PyPI wheel availability + with default_args(type=("build", "run")): + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:1.4.1") + depends_on("python@:3.11", when="@:1.4.0") + depends_on("python@:3.10", when="@:1.3.1") + + with default_args(type="build"): + depends_on("py-expandvars", when="@1.4.1:") + depends_on("py-setuptools@47:", when="@1.4.1:") + depends_on("py-setuptools@46.4:", when="@1.3.1:") + depends_on("py-setuptools") + depends_on("py-tomli", when="@1.4.1: ^python@:3.10") + depends_on("py-wheel@0.37:", when="@1.3:1.4.0") + + # Not documented but still needed to cythonize files + depends_on("py-cython", when="@1.4.1:") diff --git a/var/spack/repos/builtin/packages/py-fsspec-xrootd/package.py b/var/spack/repos/builtin/packages/py-fsspec-xrootd/package.py new file mode 100644 index 00000000000000..b14291a6b51742 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-fsspec-xrootd/package.py @@ -0,0 +1,26 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyFsspecXrootd(PythonPackage): + """An XRootD implementation for fsspec.""" + + homepage = "https://coffeateam.github.io/fsspec-xrootd/" + pypi = "fsspec_xrootd/fsspec_xrootd-0.4.0.tar.gz" + + maintainers("wdconinc") + + license("BSD-3-Clause", checked_by="wdconinc") + + version("0.4.0", sha256="d7f124430d26ab9139d33bc50fa8abfde3624db5dcaa5c18f56af9bf17f16f13") + + depends_on("python@3.8:", type=("build", "run")) + + depends_on("py-setuptools@42:", type="build") + depends_on("py-setuptools-scm@3.4:+toml", type="build") + + depends_on("py-fsspec", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-fsspec/package.py b/var/spack/repos/builtin/packages/py-fsspec/package.py index 1e5bc5bad39821..d24069a32b4622 100644 --- a/var/spack/repos/builtin/packages/py-fsspec/package.py +++ b/var/spack/repos/builtin/packages/py-fsspec/package.py @@ -17,6 +17,7 @@ class PyFsspec(PythonPackage): # Requires pytest skip_modules = ["fsspec.tests"] + version("2024.10.0", sha256="eda2d8a4116d4f2429db8550f2457da57279247dd930bb12f821b58391359493") version("2024.5.0", sha256="1d021b0b0f933e3b3029ed808eb400c08ba101ca2de4b3483fbc9ca23fcee94a") version("2024.3.1", sha256="f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9") version("2024.2.0", sha256="b6ad1a679f760dda52b1168c859d01b7b80648ea6f7f7c7f5a8a91dc3f3ecb84") diff --git a/var/spack/repos/builtin/packages/py-gemmforge/package.py b/var/spack/repos/builtin/packages/py-gemmforge/package.py new file mode 100644 index 00000000000000..d368ca717b2980 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-gemmforge/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyGemmforge(PythonPackage): + """GPU-GEMM generator for the Discontinuous Galerkin method""" + + homepage = "https://github.com/SeisSol/gemmforge/blob/master/README.md" + git = "https://github.com/SeisSol/gemmforge.git" + + maintainers("davschneller", "Thomas-Ulrich") + license("BSD-3-Clause") + + version("master", branch="master") + depends_on("py-numpy") + depends_on("py-jinja2", type=("build", "run")) + depends_on("py-pyyaml", type=("build", "run")) + depends_on("py-setuptools", type="build") + + def setup_run_environment(self, env): + env.prepend_path("PATH", self.spec.prefix) + env.prepend_path("PYTHONPATH", self.spec.prefix) diff --git a/var/spack/repos/builtin/packages/py-geocube/package.py b/var/spack/repos/builtin/packages/py-geocube/package.py index 6f691751c6f2a1..ea34cf9ddccbb8 100644 --- a/var/spack/repos/builtin/packages/py-geocube/package.py +++ b/var/spack/repos/builtin/packages/py-geocube/package.py @@ -12,25 +12,28 @@ class PyGeocube(PythonPackage): homepage = "https://github.com/corteva/geocube" pypi = "geocube/geocube-0.0.17.tar.gz" - maintainers("adamjstewart") - license("BSD-3-Clause") + maintainers("adamjstewart") + version("0.7.0", sha256="986ff46e78d7dede09a1c93bff1642c24aaa5590acdc774049436f86f0989ca4") version("0.3.2", sha256="71ff0228f1ef44e3a649d29a045ff7e2a2094a5cfca30fadab8f88f4ec23a41d") version("0.3.1", sha256="5c97131010cd8d556a5fad2a3824452120640ac33a6a45b6ca9ee3c28f2e266f") version("0.0.17", sha256="bf8da0fa96d772ebaea0b98bafa0ba5b8639669d5feb07465d4255af177bddc0") - depends_on("python@3.7:", type=("build", "run")) - depends_on("python@3.8:", when="@0.1.1:", type=("build", "run")) + depends_on("python@3.10:", when="@0.4.3:", type=("build", "run")) depends_on("py-setuptools", type="build") depends_on("py-appdirs", type=("build", "run")) depends_on("py-click@6.0:", type=("build", "run")) - depends_on("py-datacube", when="@:0.1", type=("build", "run")) + depends_on("py-geopandas@1:", when="@0.6:", type=("build", "run")) depends_on("py-geopandas@0.7:", type=("build", "run")) depends_on("py-odc-geo", when="@0.2:", type=("build", "run")) + depends_on("py-rasterio@1.3:", when="@0.4.3:", type=("build", "run")) depends_on("py-rasterio", type=("build", "run")) depends_on("py-rioxarray@0.4:", type=("build", "run")) depends_on("py-scipy", when="@0.0.18:", type=("build", "run")) depends_on("py-xarray@0.17:", type=("build", "run")) depends_on("py-pyproj@2:", type=("build", "run")) depends_on("py-numpy@1.20:", when="@0.3:", type=("build", "run")) + + # Historical dependencies + depends_on("py-datacube", when="@:0.1", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-gevent/package.py b/var/spack/repos/builtin/packages/py-gevent/package.py index f4a9d275ffb780..703bd2f751b507 100644 --- a/var/spack/repos/builtin/packages/py-gevent/package.py +++ b/var/spack/repos/builtin/packages/py-gevent/package.py @@ -15,6 +15,9 @@ class PyGevent(PythonPackage): license("MIT") + version("24.11.1", sha256="8bd1419114e9e4a3ed33a5bad766afff9a3cf765cb440a582a1b3a9bc80c1aca") + version("24.10.3", sha256="aa7ee1bd5cabb2b7ef35105f863b386c8d5e332f754b60cfc354148bd70d35d1") + version("24.2.1", sha256="432fc76f680acf7cf188c2ee0f5d3ab73b63c1f03114c7cd8a34cebbe5aa2056") version("23.7.0", sha256="d0d3630674c1b344b256a298ab1ff43220f840b12af768131b5d74e485924237") version("21.12.0", sha256="f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e") version("21.8.0", sha256="43e93e1a4738c922a2416baf33f0afb0a20b22d3dba886720bc037cd02a98575") @@ -22,15 +25,22 @@ class PyGevent(PythonPackage): depends_on("c", type="build") # generated + depends_on("python@3.9:", when="@24.10.1:", type=("build", "run")) depends_on("python@3.8:", when="@23.7.0:", type=("build", "run")) depends_on("python@:3.10", when="@:21.12", type=("build", "run")) depends_on("py-setuptools@40.8:", when="@20.5.1:", type=("build", "run")) depends_on("py-setuptools@40.8:", when="@1.5:", type="build") depends_on("py-setuptools@24.2:", when="@:1.4", type="build") + depends_on("py-cython@3.0.11:", when="@24.10.1:", type="build") + depends_on("py-cython@3.0.8:", when="@24.2.1:", type="build") + depends_on("py-cython@3.0.2:", when="@23.9.0:", type="build") depends_on("py-cython@3:", when="@20.5.1:", type="build") depends_on("py-cython@0.29.14:", when="@1.5:", type="build") + depends_on("py-cffi@1.17.1:", when="@24.10.1:", type=("build", "run")) depends_on("py-cffi@1.12.3:", type=("build", "run")) + depends_on("py-greenlet@3.1.1:", when="@24.10.1:", type=("build", "run")) # setup.py + depends_on("py-greenlet@3.0.3:", when="@24.2.1:", type=("build", "run")) depends_on("py-greenlet@3:", when="@23.7: ^python@3.12:", type=("build", "run")) depends_on("py-greenlet@2:", when="@22.10.2: ^python@:3.11", type=("build", "run")) depends_on("py-greenlet@1.1:1", when="@21.8:21.12.0", type=("build", "run")) @@ -61,6 +71,6 @@ def flag_handler(self, name, flags): if name == "cflags": if self.spec.satisfies("%oneapi@2023:"): flags.append("-Wno-error=incompatible-function-pointer-types") - if self.spec.compiler.name in ["intel", "oneapi"]: + if self.spec.satisfies("%oneapi") or self.spec.satisfies("%intel"): flags.append("-we147") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/py-gitpython/package.py b/var/spack/repos/builtin/packages/py-gitpython/package.py index 6a6e41a8eacd40..7af7dd8a5677d7 100644 --- a/var/spack/repos/builtin/packages/py-gitpython/package.py +++ b/var/spack/repos/builtin/packages/py-gitpython/package.py @@ -14,35 +14,72 @@ class PyGitpython(PythonPackage): license("BSD-3-Clause") - version("3.1.40", sha256="22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4") - version("3.1.34", sha256="85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd") - version("3.1.27", sha256="1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704") - version("3.1.24", sha256="df83fdf5e684fef7c6ee2c02fc68a5ceb7e7e759d08b694088d0cacb4eba59e5") - version("3.1.23", sha256="aaae7a3bfdf0a6db30dc1f3aeae47b71cd326d86b936fe2e158aa925fdf1471c") - version("3.1.22", sha256="e1589f27c3cd1f33b22db1df194201b5abca6b4cc5450f13f9c371e099c1b24f") - version("3.1.20", sha256="df0e072a200703a65387b0cfdf0466e3bab729c0458cf6b7349d0e9877636519") - version("3.1.19", sha256="18f4039b96b5567bc4745eb851737ce456a2d499cecd71e84f5c0950e92d0e53") - version("3.1.18", sha256="b838a895977b45ab6f0cc926a9045c8d1c44e2b653c1fcc39fe91f42c6e8f05b") - version("3.1.17", sha256="ee24bdc93dce357630764db659edaf6b8d664d4ff5447ccfeedd2dc5c253f41e") - version("3.1.16", sha256="2bfcd25e6b81fe431fa3ab1f0975986cfddabf7870a323c183f3afbc9447c0c5") - version("3.1.15", sha256="05af150f47a5cca3f4b0af289b73aef8cf3c4fe2385015b06220cbcdee48bb6e") - version("3.1.14", sha256="be27633e7509e58391f10207cd32b2a6cf5b908f92d9cd30da2e514e1137af61") - version("3.1.13", sha256="8621a7e777e276a5ec838b59280ba5272dd144a18169c36c903d8b38b99f750a") - version("3.1.12", sha256="42dbefd8d9e2576c496ed0059f3103dcef7125b9ce16f9d5f9c834aed44a1dac") - version("3.1.11", sha256="befa4d101f91bad1b632df4308ec64555db684c360bd7d2130b4807d49ce86b8") - version("3.1.10", sha256="f488d43600d7299567b59fe41497d313e7c1253a9f2a8ebd2df8af2a1151c71d") - version("3.1.9", sha256="a03f728b49ce9597a6655793207c6ab0da55519368ff5961e4a74ae475b9fa8e") - version("3.1.8", sha256="080bf8e2cf1a2b907634761c2eaefbe83b69930c94c66ad11b65a8252959f912") - version("3.1.7", sha256="2db287d71a284e22e5c2846042d0602465c7434d910406990d5b74df4afb0858") - version("3.1.6", sha256="b54969b3262d4647f80ace8e9dd4e3f99ac30cc0f3e766415b349208f810908f") - version("3.1.5", sha256="90400ecfa87bac36ac75dfa7b62e83a02017b51759f6eef4494e4de775b2b4be") - version("3.1.4", sha256="fa98ce1f05805d59bbc3adb16c0780e5ca43b5ea9422feecf1cd0949a61d947e") - version("3.1.3", sha256="e107af4d873daed64648b4f4beb89f89f0cfbe3ef558fc7821ed2331c2f8da1a") - version("3.1.2", sha256="864a47472548f3ba716ca202e034c1900f197c0fb3a08f641c20c3cafd15ed94") - version("3.1.1", sha256="6d4f10e2aaad1864bb0f17ec06a2c2831534140e5883c350d58b4e85189dab74") - version("3.1.0", sha256="e426c3b587bd58c482f0b7fe6145ff4ac7ae6c82673fc656f489719abca6f4cb") - version("3.0.9", sha256="7e5df21bfef38505115ad92544fb379e6fedb2753f3b709174c4358cecd0cb97") - version("0.3.6", sha256="e6599fcb939cb9b25a015a429702db39de10f2b493655ed5669c49c37707d233") + version("3.1.43", sha256="35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-22190 + version( + "3.1.40", sha256="22b126e9ffb671fdd0c129796343a02bf67bf2994b35449ffc9321aa755e18a4" + ) + version( + "3.1.34", sha256="85f7d365d1f6bf677ae51039c1ef67ca59091c7ebd5a3509aa399d4eda02d6dd" + ) + version( + "3.1.27", sha256="1c885ce809e8ba2d88a29befeb385fcea06338d3640712b59ca623c220bb5704" + ) + version( + "3.1.24", sha256="df83fdf5e684fef7c6ee2c02fc68a5ceb7e7e759d08b694088d0cacb4eba59e5" + ) + version( + "3.1.23", sha256="aaae7a3bfdf0a6db30dc1f3aeae47b71cd326d86b936fe2e158aa925fdf1471c" + ) + version( + "3.1.22", sha256="e1589f27c3cd1f33b22db1df194201b5abca6b4cc5450f13f9c371e099c1b24f" + ) + version( + "3.1.20", sha256="df0e072a200703a65387b0cfdf0466e3bab729c0458cf6b7349d0e9877636519" + ) + version( + "3.1.19", sha256="18f4039b96b5567bc4745eb851737ce456a2d499cecd71e84f5c0950e92d0e53" + ) + version( + "3.1.18", sha256="b838a895977b45ab6f0cc926a9045c8d1c44e2b653c1fcc39fe91f42c6e8f05b" + ) + version( + "3.1.17", sha256="ee24bdc93dce357630764db659edaf6b8d664d4ff5447ccfeedd2dc5c253f41e" + ) + version( + "3.1.16", sha256="2bfcd25e6b81fe431fa3ab1f0975986cfddabf7870a323c183f3afbc9447c0c5" + ) + version( + "3.1.15", sha256="05af150f47a5cca3f4b0af289b73aef8cf3c4fe2385015b06220cbcdee48bb6e" + ) + version( + "3.1.14", sha256="be27633e7509e58391f10207cd32b2a6cf5b908f92d9cd30da2e514e1137af61" + ) + version( + "3.1.13", sha256="8621a7e777e276a5ec838b59280ba5272dd144a18169c36c903d8b38b99f750a" + ) + version( + "3.1.12", sha256="42dbefd8d9e2576c496ed0059f3103dcef7125b9ce16f9d5f9c834aed44a1dac" + ) + version( + "3.1.11", sha256="befa4d101f91bad1b632df4308ec64555db684c360bd7d2130b4807d49ce86b8" + ) + version( + "3.1.10", sha256="f488d43600d7299567b59fe41497d313e7c1253a9f2a8ebd2df8af2a1151c71d" + ) + version("3.1.9", sha256="a03f728b49ce9597a6655793207c6ab0da55519368ff5961e4a74ae475b9fa8e") + version("3.1.8", sha256="080bf8e2cf1a2b907634761c2eaefbe83b69930c94c66ad11b65a8252959f912") + version("3.1.7", sha256="2db287d71a284e22e5c2846042d0602465c7434d910406990d5b74df4afb0858") + version("3.1.6", sha256="b54969b3262d4647f80ace8e9dd4e3f99ac30cc0f3e766415b349208f810908f") + version("3.1.5", sha256="90400ecfa87bac36ac75dfa7b62e83a02017b51759f6eef4494e4de775b2b4be") + version("3.1.4", sha256="fa98ce1f05805d59bbc3adb16c0780e5ca43b5ea9422feecf1cd0949a61d947e") + version("3.1.3", sha256="e107af4d873daed64648b4f4beb89f89f0cfbe3ef558fc7821ed2331c2f8da1a") + version("3.1.2", sha256="864a47472548f3ba716ca202e034c1900f197c0fb3a08f641c20c3cafd15ed94") + version("3.1.1", sha256="6d4f10e2aaad1864bb0f17ec06a2c2831534140e5883c350d58b4e85189dab74") + version("3.1.0", sha256="e426c3b587bd58c482f0b7fe6145ff4ac7ae6c82673fc656f489719abca6f4cb") + version("3.0.9", sha256="7e5df21bfef38505115ad92544fb379e6fedb2753f3b709174c4358cecd0cb97") + version("0.3.6", sha256="e6599fcb939cb9b25a015a429702db39de10f2b493655ed5669c49c37707d233") depends_on("python@3.4:", type=("build", "run")) depends_on("python@3.5:", type=("build", "run"), when="@3.1.15:") diff --git a/var/spack/repos/builtin/packages/py-gosam/package.py b/var/spack/repos/builtin/packages/py-gosam/package.py index fc6eff141da774..c5f5433383e915 100644 --- a/var/spack/repos/builtin/packages/py-gosam/package.py +++ b/var/spack/repos/builtin/packages/py-gosam/package.py @@ -20,6 +20,11 @@ class PyGosam(Package): license("GPL-3.0-only") + version( + "2.1.2", + url="https://github.com/gudrunhe/gosam/releases/download/2.1.2/gosam-2.1.2+c307997.tar.gz", + sha256="53601ab203c3d572764439018f976baff9c83b87abe1fcbbe15c07caf174680c", + ) version( "2.1.1", url="https://github.com/gudrunhe/gosam/releases/download/2.1.1/gosam-2.1.1-4b98559.tar.gz", diff --git a/var/spack/repos/builtin/packages/py-gpytorch/package.py b/var/spack/repos/builtin/packages/py-gpytorch/package.py index c4a98153f60582..a8bdb28538737c 100644 --- a/var/spack/repos/builtin/packages/py-gpytorch/package.py +++ b/var/spack/repos/builtin/packages/py-gpytorch/package.py @@ -19,6 +19,7 @@ class PyGpytorch(PythonPackage): license("MIT") + version("1.13", sha256="f4a488633a2a7a4ab37d12553d1d1dd39690043dbceef14ca428b7d5f89f73ba") version("1.10", sha256="6dc978ab9fbf220a845a4f1ea13104180fc50e6934081f421b37f6120afb7f18") version("1.9.1", sha256="0bdbba6f6d5957a0f43ef6dc7fec39c47e8a55f632ca33760c6189f259b3ccc3") version("1.9.0", sha256="a0608184c18a1f518d6a102473427abf00f5351421e12a934530953f6887b34b") @@ -30,21 +31,28 @@ class PyGpytorch(PythonPackage): version("1.2.0", sha256="fcb216e0c1f128a41c91065766508e91e487d6ffadf212a51677d8014aefca84") version("1.1.1", sha256="76bd455db2f17af5425f73acfaa6d61b8adb1f07ad4881c0fa22673f84fb571a") - depends_on("python@3.8:", when="@1.9:", type=("build", "run")) - depends_on("python@3.7:", when="@1.7:", type=("build", "run")) - depends_on("python@3.6:", type=("build", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-setuptools-scm", when="@1.9:", type="build") - depends_on("py-torch@1.11:", when="@1.9:", type=("build", "run")) - depends_on("py-torch@1.10:", when="@1.7:", type=("build", "run")) - depends_on("py-torch@1.9:", when="@1.6:", type=("build", "run")) - depends_on("py-torch@1.8.1:", when="@1.5:", type=("build", "run")) - depends_on("py-torch@1.7:", when="@1.3:", type=("build", "run")) - depends_on("py-torch@1.6:", when="@1.2:", type=("build", "run")) - depends_on("py-torch@1.5:", type=("build", "run")) - depends_on("py-scikit-learn", when="@1.2:", type=("build", "run")) - depends_on("py-linear-operator@0.1.1:", when="@1.9:", type=("build", "run")) - depends_on("py-linear-operator@0.2.0:", when="@1.9.1:", type=("build", "run")) - depends_on("py-linear-operator@0.4.0:", when="@1.10:", type=("build", "run")) - depends_on("py-numpy", when="@1.7:1.8", type=("build", "run")) - depends_on("py-scipy", when="@1.2:1.8", type=("build", "run")) + with default_args(type="build"): + depends_on("py-setuptools") + depends_on("py-setuptools-scm", when="@1.9:") + + with default_args(type=("build", "run")): + depends_on("py-torch@2:", when="@1.13:") + depends_on("py-torch@1.11:", when="@1.9:") + depends_on("py-torch@1.10:", when="@1.7:") + depends_on("py-torch@1.9:", when="@1.6:") + depends_on("py-torch@1.8.1:", when="@1.5:") + depends_on("py-torch@1.7:", when="@1.3:") + depends_on("py-torch@1.6:", when="@1.2:") + depends_on("py-torch@1.5:") + depends_on("py-jaxtyping@0.2.19", when="@1.13:") + depends_on("py-mpmath@0.19:1.3", when="@1.12:") + depends_on("py-scikit-learn", when="@1.2:") + depends_on("py-scipy@1.6:", when="@1.13:") + depends_on("py-scipy", when="@1.2:1.8") + depends_on("py-linear-operator@0.5.3:", when="@1.13:") + depends_on("py-linear-operator@0.1.1:", when="@1.9:") + depends_on("py-linear-operator@0.2.0:", when="@1.9.1:") + depends_on("py-linear-operator@0.4.0:", when="@1.10:") + + # Historical dependencies + depends_on("py-numpy", when="@1.7:1.8") diff --git a/var/spack/repos/builtin/packages/py-gradio/package.py b/var/spack/repos/builtin/packages/py-gradio/package.py index 3070071ab7ca04..720e47dbeb15d6 100644 --- a/var/spack/repos/builtin/packages/py-gradio/package.py +++ b/var/spack/repos/builtin/packages/py-gradio/package.py @@ -14,7 +14,18 @@ class PyGradio(PythonPackage): license("Apache-2.0") - version("3.36.1", sha256="1d821cee15da066c24c197248ba9aaed5f5e59505d17754561c2f96f90e73a89") + version("5.1.0", sha256="d2153668e6de2df7a01bb33f01a074fc7716ec863c40f472d8e439439ef1e153") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-47871 + version( + "4.44.1", sha256="a68a52498ac6b63f8864ef84bf7866a70e7d07ebe913edf921e1d2a3708ad5ae" + ) + version( + "3.50.2", sha256="c6c81320566ba3e5688a1a58201d0729565a97b828b2bf6895e54f7bf25c01de" + ) + version( + "3.36.1", sha256="1d821cee15da066c24c197248ba9aaed5f5e59505d17754561c2f96f90e73a89" + ) depends_on("python@3.8:", type=("build", "run")) depends_on("py-hatchling", type="build") diff --git a/var/spack/repos/builtin/packages/py-grayskull/package.py b/var/spack/repos/builtin/packages/py-grayskull/package.py index 50ad9904bedcb5..cd0534daf79d99 100644 --- a/var/spack/repos/builtin/packages/py-grayskull/package.py +++ b/var/spack/repos/builtin/packages/py-grayskull/package.py @@ -14,6 +14,7 @@ class PyGrayskull(PythonPackage): license("Apache-2.0") + version("2.7.3", sha256="9396245439584b92d656fdefb03d6911b5987f91a5ae714772ddcb338768cbb9") version("2.5.0", sha256="b021138655be550fd1b93b8db08b9c66169fac9cba6bcdad1411263e12fc703f") depends_on("python@3.8:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-greenlet/package.py b/var/spack/repos/builtin/packages/py-greenlet/package.py index 71dcc219cdc427..7d5474da3bb98b 100644 --- a/var/spack/repos/builtin/packages/py-greenlet/package.py +++ b/var/spack/repos/builtin/packages/py-greenlet/package.py @@ -17,6 +17,8 @@ class PyGreenlet(PythonPackage): license("MIT AND PSF-2.0", checked_by="tgamblin") + version("3.1.1", sha256="4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467") + version("3.0.3", sha256="43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491") version("3.0.0a1", sha256="1bd4ea36f0aeb14ca335e0c9594a5aaefa1ac4e2db7d86ba38f0be96166b3102") version( "2.0.2", @@ -38,3 +40,4 @@ class PyGreenlet(PythonPackage): depends_on("python@:3.12", when="@:3.0") depends_on("py-setuptools", type="build") + depends_on("py-setuptools@40.8.0:", type="build", when="@3.0.2:") diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py index 43220375073ff9..16d5506f8d0c5d 100644 --- a/var/spack/repos/builtin/packages/py-h5py/package.py +++ b/var/spack/repos/builtin/packages/py-h5py/package.py @@ -18,6 +18,8 @@ class PyH5py(PythonPackage): license("BSD-3-Clause") version("master", branch="master") + version("3.12.1", sha256="326d70b53d31baa61f00b8aa5f95c2fcb9621a3ee8365d770c551a13dbbcbfdf") + version("3.12.0", sha256="00955a079e9f86c5ae2cd08accb54396c69cda87152312ddd1528e3f90acc866") version("3.11.0", sha256="7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9") version("3.10.0", sha256="d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049") version("3.9.0", sha256="e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817") @@ -40,11 +42,12 @@ class PyH5py(PythonPackage): version("2.5.0", sha256="9833df8a679e108b561670b245bcf9f3a827b10ccb3a5fa1341523852cfac2f6") version("2.4.0", sha256="faaeadf4b8ca14c054b7568842e0d12690de7d5d68af4ecce5d7b8fc104d8e60") - depends_on("c", type="build") # generated + depends_on("c", type="build") variant("mpi", default=True, description="Build with MPI support") # Python versions + depends_on("python@3.9:", type=("build", "run"), when="@3.12:") depends_on("python@:3.9", type=("build", "run"), when="@:2.8") # Build dependencies @@ -60,9 +63,9 @@ class PyH5py(PythonPackage): depends_on("py-setuptools", type="build") # Build and runtime dependencies - depends_on("py-numpy@1.17.3:", type=("build", "run"), when="@3.9:") - depends_on("py-numpy@1.19.3:", type=("build", "run"), when="@3:3.5 ^python@3.9.0:") + depends_on("py-numpy@1.19.3:", type=("build", "run"), when="@3:3.5,3.12: ^python@3.9.0:") depends_on("py-numpy@1.17.5:", type=("build", "run"), when="@3:3.5 ^python@3.8.0:3.8") + depends_on("py-numpy@1.17.3:", type=("build", "run"), when="@3.9:3.11") depends_on("py-numpy@1.14.5:", type=("build", "run"), when="@3:") depends_on("py-numpy@1.7:", type=("build", "run"), when="@:2") # https://github.com/h5py/h5py/issues/2353 @@ -70,7 +73,8 @@ class PyH5py(PythonPackage): # Link dependencies (py-h5py v2 cannot build against HDF5 1.12 regardless # of API setting) - depends_on("hdf5@1.10.4:1.14 +hl", when="@3.10:") + depends_on("hdf5@1.10.6:1.14 +hl", when="@3.12:") + depends_on("hdf5@1.10.4:1.14 +hl", when="@3.10:3.11") depends_on("hdf5@1.8.4:1.14 +hl", when="@3.8:3.9") depends_on("hdf5@1.8.4:1.12 +hl", when="@3:3.7") depends_on("hdf5@1.8.4:1.11 +hl", when="@:2") diff --git a/var/spack/repos/builtin/packages/py-hatch-jupyter-builder/package.py b/var/spack/repos/builtin/packages/py-hatch-jupyter-builder/package.py index 0bd62053a1aa52..47d97c4d18809c 100644 --- a/var/spack/repos/builtin/packages/py-hatch-jupyter-builder/package.py +++ b/var/spack/repos/builtin/packages/py-hatch-jupyter-builder/package.py @@ -16,5 +16,7 @@ class PyHatchJupyterBuilder(PythonPackage): version("0.8.3", sha256="0dbd14a8aef6636764f88a8fd1fcc9a91921e5c50356e6aab251782f264ae960") + depends_on("npm", type="run") + depends_on("python@3.8:", type=("build", "run")) depends_on("py-hatchling@1.5:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-hatch-nodejs-version/package.py b/var/spack/repos/builtin/packages/py-hatch-nodejs-version/package.py index 5648c0c24792ee..09f2be42831132 100644 --- a/var/spack/repos/builtin/packages/py-hatch-nodejs-version/package.py +++ b/var/spack/repos/builtin/packages/py-hatch-nodejs-version/package.py @@ -14,6 +14,7 @@ class PyHatchNodejsVersion(PythonPackage): license("MIT") + version("0.3.2", sha256="8a7828d817b71e50bbbbb01c9bfc0b329657b7900c56846489b9c958de15b54c") version("0.3.1", sha256="0e55fd713d92c5c1ccfee778efecaa780fd8bcd276d4ca7aff9f6791f6f76d9c") depends_on("python@3.7:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-hatch-requirements-txt/package.py b/var/spack/repos/builtin/packages/py-hatch-requirements-txt/package.py index e36bb88f623c87..46e85b25d31e17 100644 --- a/var/spack/repos/builtin/packages/py-hatch-requirements-txt/package.py +++ b/var/spack/repos/builtin/packages/py-hatch-requirements-txt/package.py @@ -14,6 +14,7 @@ class PyHatchRequirementsTxt(PythonPackage): license("MIT") + version("0.4.1", sha256="2c686e5758fd05bb55fa7d0c198fdd481f8d3aaa3c693260f5c0d74ce3547d20") version("0.4.0", sha256="800509946e85d9e56d73242fab223ec36db50372e870a04e2dd1fd9bad98455d") depends_on("python@3.6.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-hatchet/package.py b/var/spack/repos/builtin/packages/py-hatchet/package.py index d9ce43e8068fcf..3360a7b439bc88 100644 --- a/var/spack/repos/builtin/packages/py-hatchet/package.py +++ b/var/spack/repos/builtin/packages/py-hatchet/package.py @@ -18,6 +18,7 @@ class PyHatchet(PythonPackage): license("MIT") + version("1.4.0", sha256="9f934f128666703d30818e9a091493df1bf1819bf7445ffb35a0f46871501b55") version("1.3.0", sha256="d77d071fc37863fdc9abc3fd9ea1088904cd98c6980a014a31e44595d2deac5e") version("1.2.0", sha256="1d5f80abfa69d1a379dff7263908c5c915023f18f26d50b639556e2f43ac755e") version("1.1.0", sha256="71bfa2881ef295294e5b4493acb8cce98d14c354e9ae59b42fb56a76d8ec7056") @@ -30,9 +31,14 @@ class PyHatchet(PythonPackage): depends_on("python@2.7:3.8", when="@:1.3.0", type=("build", "run")) depends_on("python@2.7:", when="@1.3.1:", type=("build", "run")) + depends_on("py-cython", when="@1.4:", type="build") depends_on("py-setuptools", type="build") + depends_on("py-pydot", type=("build", "run")) + depends_on("py-pyyaml", type=("build", "run")) depends_on("py-matplotlib", type=("build", "run")) depends_on("py-numpy", type=("build", "run")) depends_on("py-pandas", type=("build", "run")) - depends_on("py-pydot", type=("build", "run")) - depends_on("py-pyyaml", type=("build", "run")) + depends_on("py-textx", when="@1.4:", type=("build", "run")) + depends_on("py-multiprocess", when="@1.4:", type=("build", "run")) + depends_on("py-caliper-reader", when="@1.4:", type=("build", "run")) + depends_on("py-pycubexr", when="@1.4:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-hf-transfer/package.py b/var/spack/repos/builtin/packages/py-hf-transfer/package.py new file mode 100644 index 00000000000000..3dab2ffe994460 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-hf-transfer/package.py @@ -0,0 +1,20 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyHfTransfer(PythonPackage): + """Speed up file transfers with the Hugging Face Hub.""" + + homepage = "https://github.com/huggingface/hf_transfer" + pypi = "hf_transfer/hf_transfer-0.1.8.tar.gz" + + license("Apache-2.0") + + version("0.1.8", sha256="26d229468152e7a3ec12664cac86b8c2800695fd85f9c9a96677a775cc04f0b3") + + with default_args(type="build"): + depends_on("py-maturin@1.4:1") diff --git a/var/spack/repos/builtin/packages/py-huggingface-hub/package.py b/var/spack/repos/builtin/packages/py-huggingface-hub/package.py index 2de20bed539bba..f73029b429d437 100644 --- a/var/spack/repos/builtin/packages/py-huggingface-hub/package.py +++ b/var/spack/repos/builtin/packages/py-huggingface-hub/package.py @@ -7,15 +7,16 @@ class PyHuggingfaceHub(PythonPackage): - """This library allows anyone to work with the Hub - repositories: you can clone them, create them and upload - your models to them.""" + """Client library to download and publish models, datasets and other repos + on the huggingface.co hub.""" homepage = "https://github.com/huggingface/huggingface_hub" pypi = "huggingface_hub/huggingface_hub-0.0.10.tar.gz" license("Apache-2.0") + maintainers("adamjstewart") + version("0.26.2", sha256="b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b") version("0.24.6", sha256="cc2579e761d070713eaa9c323e3debe39d5b464ae3a7261c39a9195b27bb8000") version("0.23.4", sha256="35d99016433900e44ae7efe1c209164a5a81dbbcd53a52f99c281dcd7ce22431") version("0.19.4", sha256="176a4fc355a851c17550e7619488f383189727eab209534d7cef2114dae77b22") @@ -30,17 +31,34 @@ class PyHuggingfaceHub(PythonPackage): when="@0.10:", description="Install dependencies for CLI-specific features", ) + variant( + "hf_transfer", + default=False, + when="@0.21:", + description="Install hf_transfer to speed up downloads/uploads", + ) + + with default_args(type="build"): + depends_on("py-setuptools") + + with default_args(type=("build", "run")): + depends_on("py-filelock") + depends_on("py-fsspec@2023.5:", when="@0.18:") + depends_on("py-fsspec", when="@0.14:") + depends_on("py-packaging@20.9:", when="@0.10:") + depends_on("py-pyyaml@5.1:", when="@0.10:") + depends_on("py-requests") + depends_on("py-tqdm@4.42.1:", when="@0.12:") + depends_on("py-tqdm") + depends_on("py-typing-extensions@3.7.4.3:", when="@0.10:") + depends_on("py-typing-extensions", when="@0.0.10:") + + with when("+cli"): + depends_on("py-inquirerpy@0.3.4") + + with when("+hf_transfer"): + depends_on("py-hf-transfer@0.1.4:") - depends_on("py-setuptools", type="build") - depends_on("py-filelock", type=("build", "run")) - depends_on("py-fsspec@2023.5:", when="@0.18:", type=("build", "run")) - depends_on("py-fsspec", when="@0.14:", type=("build", "run")) - depends_on("py-packaging@20.9:", when="@0.10:", type=("build", "run")) - depends_on("py-pyyaml@5.1:", when="@0.10:", type=("build", "run")) - depends_on("py-requests", type=("build", "run")) - depends_on("py-tqdm@4.42.1:", when="@0.12:", type=("build", "run")) - depends_on("py-tqdm", type=("build", "run")) - depends_on("py-typing-extensions@3.7.4.3:", when="@0.10:", type=("build", "run")) - depends_on("py-typing-extensions", when="@0.0.10:", type=("build", "run")) - - depends_on("py-inquirerpy@0.3.4", when="@0.14:+cli", type=("build", "run")) + def setup_run_environment(self, env): + if "+hf_transfer" in self.spec: + env.set("HF_HUB_ENABLE_HF_TRANSFER", 1) diff --git a/var/spack/repos/builtin/packages/py-ipykernel/package.py b/var/spack/repos/builtin/packages/py-ipykernel/package.py index 02f2c943b4d58a..baeefe19d785d8 100644 --- a/var/spack/repos/builtin/packages/py-ipykernel/package.py +++ b/var/spack/repos/builtin/packages/py-ipykernel/package.py @@ -54,32 +54,44 @@ class PyIpykernel(PythonPackage): with default_args(type=("build", "run")): depends_on("python@3.8:", when="@6.22:") - depends_on("py-debugpy@1.6.5:", when="@6.22:") - depends_on("py-debugpy@1:", when="@6.11:") - depends_on("py-debugpy@1.0:1", when="@6:6.10") - depends_on("py-ipython@7.23.1:", when="@6.5.1:") - depends_on("py-ipython@7.23.1:7", when="@6.0.0:6.5.0") - depends_on("py-ipython@5.0:", when="@5") - depends_on("py-ipython@4.0:", when="@:4") + # use of `imp` module + depends_on("python@:3.11", when="@:6.10") + + with when("@6:"): + depends_on("py-debugpy@1.6.5:", when="@6.22:") + depends_on("py-debugpy@1:") + depends_on("py-debugpy@:1", when="@:6.10") + + depends_on("py-matplotlib-inline@0.1:") + depends_on("py-matplotlib-inline@:0.1", when="@:6.10") + + depends_on("py-ipython@7.23.1:", when="@6:") + depends_on("py-ipython@5:", when="@5:") + depends_on("py-ipython@4:") + depends_on("py-ipython@:7", when="@:6.5") + depends_on("py-comm@0.1.1:", when="@6.22:") + depends_on("py-traitlets@5.4:", when="@6.22:") - depends_on("py-traitlets@5.1:", when="@6.11:") - depends_on("py-traitlets@5.1.0:5", when="@6.5:6.10") - depends_on("py-traitlets@4.1.0:5", when="@6.0:6.4") + depends_on("py-traitlets@5.1:", when="@6.5:") depends_on("py-traitlets@4.1.0:") + depends_on("py-traitlets@:5", when="@:6.10") + depends_on("py-jupyter-client@6.1.12:", when="@6.11:") - depends_on("py-jupyter-client@:7", when="@6.2:6.10") - depends_on("py-jupyter-client@:6", when="@6.0.2:6.1") depends_on("py-jupyter-client") + depends_on("py-jupyter-client@:7", when="@:6.10") + depends_on("py-jupyter-client@:6", when="@:6.1") + depends_on("py-jupyter-core@4.12:", when="@6.22:") + depends_on("py-nest-asyncio", when="@6.6.1:") + depends_on("py-tornado@6.1:", when="@6.11:") - depends_on("py-tornado@5:6", when="@6.10") - depends_on("py-tornado@4.2:6", when="@6:6.9") - depends_on("py-tornado@4.2:", when="@5") - depends_on("py-tornado@4:", when="@:4") - depends_on("py-matplotlib-inline@0.1:", when="@6.11:") - depends_on("py-matplotlib-inline@0.1.0:0.1", when="@6:6.10") + depends_on("py-tornado@5:", when="@6.10:") + depends_on("py-tornado@4.2:", when="@5:") + depends_on("py-tornado@4:") + depends_on("py-tornado@:6", when="@:6.10") + depends_on("py-appnope", when="@5.1.3: platform=darwin") depends_on("py-pyzmq@24:", when="@6.28:") depends_on("py-pyzmq@20:", when="@6.22:") diff --git a/var/spack/repos/builtin/packages/py-ipympl/package.py b/var/spack/repos/builtin/packages/py-ipympl/package.py index c83d6392b0c12c..a45799610def1b 100644 --- a/var/spack/repos/builtin/packages/py-ipympl/package.py +++ b/var/spack/repos/builtin/packages/py-ipympl/package.py @@ -15,16 +15,37 @@ class PyIpympl(PythonPackage): license("BSD-3-Clause") - version("0.8.8", sha256="5bf5d780b07fafe7924922ac6b2f3abd22721f341e5e196b3b82737dfbd0e1c9") - - depends_on("py-setuptools@40.8:", type="build") - depends_on("py-ipython@:8", type=("build", "run")) - depends_on("py-numpy", type=("build", "run")) - depends_on("py-ipython-genutils", type=("build", "run")) - depends_on("pil", type=("build", "run")) - depends_on("py-traitlets@:5", type=("build", "run")) - depends_on("py-ipywidgets@7.6:7", type=("build", "run")) - depends_on("py-matplotlib@2:3", type=("build", "run")) - depends_on("py-jupyter-packaging@0.7", type="build") - depends_on("py-jupyterlab@3", type="build") - depends_on("yarn", type="build") + version("0.9.4", sha256="cfb53c5b4fcbcee6d18f095eecfc6c6c474303d5b744e72cc66e7a2804708907") + # Build failures + version( + "0.8.8", + sha256="5bf5d780b07fafe7924922ac6b2f3abd22721f341e5e196b3b82737dfbd0e1c9", + deprecated=True, + ) + + with default_args(type="build"): + with when("@0.9:"): + depends_on("py-hatchling") + depends_on("py-jupyterlab@4") + depends_on("py-hatch-nodejs-version@0.3.2:") + + # Historical dependencies + with when("@:0.8"): + depends_on("py-jupyter-packaging@0.7") + depends_on("py-jupyterlab@3") + depends_on("py-setuptools@40.8:") + depends_on("yarn") + + with default_args(type=("build", "run")): + depends_on("py-ipython@:8") + depends_on("py-ipython-genutils") + depends_on("py-ipywidgets@7.6:8", when="@0.9:") + depends_on("py-ipywidgets@7.6:7", when="@:0.8") + depends_on("py-matplotlib@3.4:3", when="@0.9:") + depends_on("py-matplotlib@2:3", when="@:0.8") + depends_on("py-numpy") + depends_on("pil") + depends_on("py-traitlets@:5") + + # Necessary for jupyter extension env vars + depends_on("py-jupyter-core") diff --git a/var/spack/repos/builtin/packages/py-jaxlib/jaxxlatsl.patch b/var/spack/repos/builtin/packages/py-jaxlib/jaxxlatsl.patch new file mode 100644 index 00000000000000..e96cc32e263969 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-jaxlib/jaxxlatsl.patch @@ -0,0 +1,100 @@ +From 8fce7378ed8ce994107568449806cd99274ab22b Mon Sep 17 00:00:00 2001 +From: Andrew Elble +Date: Mon, 21 Oct 2024 19:42:31 -0400 +Subject: [PATCH] patchit + +--- + ...ch-for-Abseil-to-fix-build-on-Jetson.patch | 68 +++++++++++++++++++ + third_party/xla/workspace.bzl | 1 + + 2 files changed, 69 insertions(+) + create mode 100644 third_party/xla/0001-Add-patch-for-Abseil-to-fix-build-on-Jetson.patch + +diff --git a/third_party/xla/0001-Add-patch-for-Abseil-to-fix-build-on-Jetson.patch b/third_party/xla/0001-Add-patch-for-Abseil-to-fix-build-on-Jetson.patch +new file mode 100644 +index 000000000000..5138a045082b +--- /dev/null ++++ b/third_party/xla/0001-Add-patch-for-Abseil-to-fix-build-on-Jetson.patch +@@ -0,0 +1,68 @@ ++From 40da87a0476436ca1da2eafe08935787a05e9a61 Mon Sep 17 00:00:00 2001 ++From: David Dunleavy ++Date: Mon, 5 Aug 2024 11:42:53 -0700 ++Subject: [PATCH] Add patch for Abseil to fix build on Jetson ++ ++Patches in https://github.com/abseil/abseil-cpp/commit/372124e6af36a540e74a2ec31d79d7297a831f98 ++ ++PiperOrigin-RevId: 659627531 ++--- ++ .../tsl/third_party/absl/nvidia_jetson.patch | 35 +++++++++++++++++++ ++ .../tsl/third_party/absl/workspace.bzl | 1 + ++ 2 files changed, 36 insertions(+) ++ create mode 100644 third_party/tsl/third_party/absl/nvidia_jetson.patch ++ ++diff --git a/third_party/tsl/third_party/absl/nvidia_jetson.patch b/third_party/tsl/third_party/absl/nvidia_jetson.patch ++new file mode 100644 ++index 000000000000..5328c3a0d605 ++--- /dev/null +++++ b/third_party/tsl/third_party/absl/nvidia_jetson.patch ++@@ -0,0 +1,35 @@ +++From 372124e6af36a540e74a2ec31d79d7297a831f98 Mon Sep 17 00:00:00 2001 +++From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Bastien?= +++Date: Thu, 1 Aug 2024 12:38:52 -0700 +++Subject: [PATCH] PR #1732: Fix build on NVIDIA Jetson board. Fix #1665 +++ +++Imported from GitHub PR https://github.com/abseil/abseil-cpp/pull/1732 +++ +++Fix build on NVIDIA Jetson board. Fix #1665 +++ +++This patch is already used by the spark project. +++I'm fixing this as this break the build of Tensorflow and JAX on Jetson board. +++Merge 7db2d2ab9fbed1f0fabad10a6ec73533ba71bfff into 6b8ebb35c0414ef5a2b6fd4a0f59057e41beaff9 +++ +++Merging this change closes #1732 +++ +++COPYBARA_INTEGRATE_REVIEW=https://github.com/abseil/abseil-cpp/pull/1732 from nouiz:fix_neon_on_jetson 7db2d2ab9fbed1f0fabad10a6ec73533ba71bfff +++PiperOrigin-RevId: 658501520 +++Change-Id: If502ede4efc8c877fb3fed227eca6dc7622dd181 +++--- +++ absl/base/config.h | 2 +- +++ 1 file changed, 1 insertion(+), 1 deletion(-) +++ +++diff --git a/absl/base/config.h b/absl/base/config.h +++index 97c9a22a109..ab1e9860a91 100644 +++--- a/absl/base/config.h ++++++ b/absl/base/config.h +++@@ -926,7 +926,7 @@ static_assert(ABSL_INTERNAL_INLINE_NAMESPACE_STR[0] != 'h' || +++ // https://llvm.org/docs/CompileCudaWithLLVM.html#detecting-clang-vs-nvcc-from-code +++ #ifdef ABSL_INTERNAL_HAVE_ARM_NEON +++ #error ABSL_INTERNAL_HAVE_ARM_NEON cannot be directly set +++-#elif defined(__ARM_NEON) && !defined(__CUDA_ARCH__) ++++#elif defined(__ARM_NEON) && !(defined(__NVCC__) && defined(__CUDACC__)) +++ #define ABSL_INTERNAL_HAVE_ARM_NEON 1 +++ #endif +++ ++diff --git a/third_party/tsl/third_party/absl/workspace.bzl b/third_party/tsl/third_party/absl/workspace.bzl ++index 06f75166ce4b..9565a82c3319 100644 ++--- a/third_party/tsl/third_party/absl/workspace.bzl +++++ b/third_party/tsl/third_party/absl/workspace.bzl ++@@ -44,4 +44,5 @@ def repo(): ++ system_link_files = SYS_LINKS, ++ strip_prefix = "abseil-cpp-{commit}".format(commit = ABSL_COMMIT), ++ urls = tf_mirror_urls("https://github.com/abseil/abseil-cpp/archive/{commit}.tar.gz".format(commit = ABSL_COMMIT)), +++ patch_file = ["//third_party/absl:nvidia_jetson.patch"], ++ ) ++-- ++2.31.1 ++ +diff --git a/third_party/xla/workspace.bzl b/third_party/xla/workspace.bzl +index af52e7671507..70481bc970a5 100644 +--- a/third_party/xla/workspace.bzl ++++ b/third_party/xla/workspace.bzl +@@ -29,6 +29,7 @@ def repo(): + name = "xla", + sha256 = XLA_SHA256, + strip_prefix = "xla-{commit}".format(commit = XLA_COMMIT), ++ patch_file = ["//third_party/xla:0001-Add-patch-for-Abseil-to-fix-build-on-Jetson.patch"], + urls = tf_mirror_urls("https://github.com/openxla/xla/archive/{commit}.tar.gz".format(commit = XLA_COMMIT)), + ) + +-- +2.31.1 + diff --git a/var/spack/repos/builtin/packages/py-jaxlib/package.py b/var/spack/repos/builtin/packages/py-jaxlib/package.py index 09eb522c56aa5e..8d894c6c5ef595 100644 --- a/var/spack/repos/builtin/packages/py-jaxlib/package.py +++ b/var/spack/repos/builtin/packages/py-jaxlib/package.py @@ -5,6 +5,7 @@ import tempfile +from spack.build_systems.python import PythonPipBuilder from spack.package import * rocm_dependencies = [ @@ -98,11 +99,13 @@ class PyJaxlib(PythonPackage, CudaPackage, ROCmPackage): depends_on("py-build", when="@0.4.14:") with default_args(type=("build", "run")): + depends_on("python@3.10:", when="@0.4.31:") + depends_on("python@3.9:", when="@0.4.14:") + depends_on("python@3.8:", when="@0.4.6:") # Based on PyPI wheels - depends_on("python@3.10:3.12", when="@0.4.31:") - depends_on("python@3.9:3.12", when="@0.4.17:0.4.30") - depends_on("python@3.9:3.11", when="@0.4.14:0.4.16") - depends_on("python@3.8:3.11", when="@0.4.6:0.4.13") + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:0.4.33") + depends_on("python@:3.11", when="@:0.4.16") # jaxlib/setup.py depends_on("py-scipy@1.10:", when="@0.4.31:") @@ -128,6 +131,10 @@ class PyJaxlib(PythonPackage, CudaPackage, ROCmPackage): when="@:0.4.25", ) + # Might be able to be applied to earlier versions + # backports https://github.com/abseil/abseil-cpp/pull/1732 + patch("jaxxlatsl.patch", when="@0.4.28:0.4.32 target=aarch64:") + conflicts( "cuda_arch=none", when="+cuda", @@ -190,7 +197,6 @@ def install(self, spec, prefix): python(*args) with working_dir(self.wrapped_package_object.tmp_path): - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(self.wrapped_package_object.tmp_path) remove_linked_tree(self.wrapped_package_object.buildtmp) diff --git a/var/spack/repos/builtin/packages/py-jaxtyping/package.py b/var/spack/repos/builtin/packages/py-jaxtyping/package.py index fb703a3eaa0315..a64a87d158e18f 100644 --- a/var/spack/repos/builtin/packages/py-jaxtyping/package.py +++ b/var/spack/repos/builtin/packages/py-jaxtyping/package.py @@ -15,7 +15,16 @@ class PyJaxtyping(PythonPackage): license("Apache-2.0") version("0.2.33", sha256="9a9cfccae4fe05114b9fb27a5ea5440be4971a5a075bbd0526f6dd7d2730f83e") + version("0.2.19", sha256="21ff4c3caec6781cadfe980b019dde856c1011e17d11dfe8589298040056325a") - depends_on("python@3.9:", type=("build", "run")) depends_on("py-hatchling", type="build") - depends_on("py-typeguard@2.13.3", type=("build", "run")) + + with default_args(type=("build", "run")): + depends_on("python@3.9:3", when="@0.2.33:") + depends_on("python@3.8:3", when="@0.2.19") + depends_on("py-typeguard@2.13.3", when="@0.2.33:") + depends_on("py-typeguard@2.13.3:", when="@0.2.19") + + # Historical dependencies + depends_on("py-numpy@1.12:", when="@0.2.19") + depends_on("py-typing-extensions@3.7.4.1:", when="@0.2.19") diff --git a/var/spack/repos/builtin/packages/py-jupyter-core/package.py b/var/spack/repos/builtin/packages/py-jupyter-core/package.py index 8303cadb9a94c9..c41bbd45d83076 100644 --- a/var/spack/repos/builtin/packages/py-jupyter-core/package.py +++ b/var/spack/repos/builtin/packages/py-jupyter-core/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import os + from spack.package import * @@ -45,3 +47,10 @@ class PyJupyterCore(PythonPackage): # Historical dependencies depends_on("py-setuptools", when="@:4.9.2", type=("build", "run")) + + def setup_dependent_run_environment(self, env, dependent_spec): + # https://docs.jupyter.org/en/stable/use/jupyter-directories.html + if os.path.exists(dependent_spec.prefix.etc.jupyter): + env.prepend_path("JUPYTER_CONFIG_PATH", dependent_spec.prefix.etc.jupyter) + if os.path.exists(dependent_spec.prefix.share.jupyter): + env.prepend_path("JUPYTER_PATH", dependent_spec.prefix.share.jupyter) diff --git a/var/spack/repos/builtin/packages/py-jupyter-packaging/package.py b/var/spack/repos/builtin/packages/py-jupyter-packaging/package.py index c45a7b86dc3841..7c9df4e9acf403 100644 --- a/var/spack/repos/builtin/packages/py-jupyter-packaging/package.py +++ b/var/spack/repos/builtin/packages/py-jupyter-packaging/package.py @@ -16,6 +16,7 @@ class PyJupyterPackaging(PythonPackage): license("BSD-3-Clause") + version("0.12.3", sha256="9d9b2b63b97ffd67a8bc5391c32a421bc415b264a32c99e4d8d8dd31daae9cf4") version("0.12.0", sha256="b27455d60adc93a7baa2e0b8f386be81b932bb4e3c0116046df9ed230cd3faac") version("0.11.1", sha256="6f5c7eeea98f7f3c8fb41d565a94bf59791768a93f93148b3c2dfb7ebade8eec") version("0.10.6", sha256="a8a2c90bf2e0cae83be63ccb0b7035032a1589f268cc08b1d479e37ce50fc940") @@ -27,8 +28,9 @@ class PyJupyterPackaging(PythonPackage): url="https://files.pythonhosted.org/packages/source/j/jupyter_packaging/jupyter-packaging-0.7.12.tar.gz", ) - depends_on("python@3.7:", when="@0.11:", type=("build", "run")) - depends_on("python@3.6:", type=("build", "run")) + # https://github.com/jupyter/jupyter-packaging/pull/153 + depends_on("python@:3.12", when="@:0.12.1", type=("build", "run")) + depends_on("py-hatchling@0.25:", when="@0.12.1:", type="build") depends_on("py-packaging", type=("build", "run")) depends_on("py-tomlkit", when="@0.8:", type=("build", "run")) depends_on("py-setuptools@60.2:", when="@0.12:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-jupyter/package.py b/var/spack/repos/builtin/packages/py-jupyter/package.py index 9569b16c0314c8..d71d6bd1a9dd39 100644 --- a/var/spack/repos/builtin/packages/py-jupyter/package.py +++ b/var/spack/repos/builtin/packages/py-jupyter/package.py @@ -14,13 +14,20 @@ class PyJupyter(PythonPackage): license("BSD-3-Clause") - version("1.0.0", sha256="d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f") + version("1.1.1", sha256="d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a") + version( + "1.0.0", + sha256="d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f", + deprecated=True, + ) - # pip silently replaces distutils with setuptools depends_on("py-setuptools", type="build") - depends_on("py-notebook", type=("build", "run")) - depends_on("py-qtconsole", type=("build", "run")) - depends_on("py-jupyter-console", type=("build", "run")) - depends_on("py-nbconvert", type=("build", "run")) - depends_on("py-ipykernel", type=("build", "run")) - depends_on("py-ipywidgets", type=("build", "run")) + + with default_args(type=("build", "run")): + depends_on("py-notebook") + depends_on("py-qtconsole", when="@:1.0") + depends_on("py-jupyter-console") + depends_on("py-nbconvert") + depends_on("py-ipykernel") + depends_on("py-ipywidgets") + depends_on("py-jupyterlab", when="@1.1:") diff --git a/var/spack/repos/builtin/packages/py-jupyterlab/package.py b/var/spack/repos/builtin/packages/py-jupyterlab/package.py index 08c57c99a9eda4..195ee27e292eca 100644 --- a/var/spack/repos/builtin/packages/py-jupyterlab/package.py +++ b/var/spack/repos/builtin/packages/py-jupyterlab/package.py @@ -29,6 +29,10 @@ class PyJupyterlab(PythonPackage): version("2.2.7", sha256="a72ffd0d919cba03a5ef8422bc92c3332a957ff97b0490494209c83ad93826da") version("2.1.0", sha256="8c239aababf5baa0b3d36e375fddeb9fd96f3a9a24a8cda098d6a414f5bbdc81") + # Optional dependencies needed to install jupyterlab extensions + depends_on("node-js", type="run") + depends_on("npm", type="run") + depends_on("python@3.8:", when="@4:", type=("build", "run")) depends_on("py-hatchling@1.5:", when="@4:", type=("build", "run")) # under [tool.hatch.build.hooks.jupyter-builder] in pyproject.toml diff --git a/var/spack/repos/builtin/packages/py-keras/package.py b/var/spack/repos/builtin/packages/py-keras/package.py index 0864c36993a842..c4c5aa558574f3 100644 --- a/var/spack/repos/builtin/packages/py-keras/package.py +++ b/var/spack/repos/builtin/packages/py-keras/package.py @@ -5,6 +5,7 @@ import tempfile +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -199,6 +200,5 @@ def install(self, spec, prefix): build_pip_package("--src", buildpath) with working_dir(buildpath): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(self.tmp_path) diff --git a/var/spack/repos/builtin/packages/py-kornia/package.py b/var/spack/repos/builtin/packages/py-kornia/package.py index 4789984a2ecd78..06a0c262988946 100644 --- a/var/spack/repos/builtin/packages/py-kornia/package.py +++ b/var/spack/repos/builtin/packages/py-kornia/package.py @@ -23,6 +23,7 @@ class PyKornia(PythonPackage): "adamjstewart", ) + version("0.7.4", sha256="1f8dd6268ca5a2f2ec04b13c48da4dfb90ba2cfae7e31e0cc80d37f6520fa3f1") version("0.7.3", sha256="0eb861ea5d7e6c3891ae699a8b7103a5783af0a7c41888ca482420dd3d055306") version("0.7.2", sha256="f834ccd51188d071ed286a6727471c94344ea2a718903cc6f0e56a92f9c66ac5") version("0.7.1", sha256="65b54a50f70c1f88240b557fda3fdcc1ab866982a5d062e52213130f5a48465c") diff --git a/var/spack/repos/builtin/packages/py-laplace-torch/package.py b/var/spack/repos/builtin/packages/py-laplace-torch/package.py new file mode 100644 index 00000000000000..82a95a462c68f0 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-laplace-torch/package.py @@ -0,0 +1,31 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyLaplaceTorch(PythonPackage): + """laplace - Laplace approximations for deep learning.""" + + homepage = "https://github.com/aleximmer/Laplace" + pypi = "laplace_torch/laplace_torch-0.2.1.tar.gz" + + license("MIT") + + version("0.2.1", sha256="641823a6d3e1dcb8297202b896ae2969334bf96df9a4a6f8cf688896d67d96f2") + + with default_args(type="build"): + depends_on("py-setuptools@42:") + depends_on("py-setuptools-scm") + + with default_args(type=("build", "run")): + depends_on("py-torch@2:") + depends_on("py-torchvision") + depends_on("py-torchaudio") + depends_on("py-backpack-for-pytorch") + depends_on("py-asdfghjkl@0.1a4") + depends_on("py-torchmetrics") + depends_on("py-opt-einsum") + depends_on("py-curvlinops-for-pytorch@2:") diff --git a/var/spack/repos/builtin/packages/py-libsonata/package.py b/var/spack/repos/builtin/packages/py-libsonata/package.py index 36937e902d8ec8..da74fde4f2d22e 100644 --- a/var/spack/repos/builtin/packages/py-libsonata/package.py +++ b/var/spack/repos/builtin/packages/py-libsonata/package.py @@ -16,10 +16,13 @@ class PyLibsonata(PythonPackage): maintainers("tristan0x") version("master", branch="master") + version("0.1.29", sha256="321878f28c7d64a65683443f832dfa2f21ff8ed69e700d2dde62ccb5f87d4525") version("0.1.25", sha256="b332efa718123ee265263e1583a5998eaa945a13b8a22903873764cf1d8173fa") depends_on("cxx", type="build") # generated + depends_on("python@3.9:", type=("build", "run"), when="@0.1.29:") + depends_on("catch2@2.13:", type="test") depends_on("cmake@3.16:", type="build") depends_on("fmt@7.1:") diff --git a/var/spack/repos/builtin/packages/py-lightning-uq-box/package.py b/var/spack/repos/builtin/packages/py-lightning-uq-box/package.py new file mode 100644 index 00000000000000..ec4eab6acccafc --- /dev/null +++ b/var/spack/repos/builtin/packages/py-lightning-uq-box/package.py @@ -0,0 +1,47 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyLightningUqBox(PythonPackage): + """Lighning-UQ-Box: A toolbox for uncertainty quantification in deep learning.""" + + homepage = "https://github.com/lightning-uq-box/lightning-uq-box" + pypi = "lightning-uq-box/lightning-uq-box-0.1.0.tar.gz" + git = "https://github.com/lightning-uq-box/lightning-uq-box.git" + + license("Apache-2.0") + maintainers("nilsleh", "adamjstewart") + + version("main", branch="main") + version("0.1.0", sha256="ce44860db75b4fbe487a009bee91c886be2e1835edee93479a6a8633ef2152b1") + + depends_on("py-setuptools@61:", type="build") + + with default_args(type=("build", "run")): + depends_on("python@3.10:", when="@0.2:") + depends_on("python@3.9:") + depends_on("py-einops@0.3:") + depends_on("py-lightning@2.4:", when="@0.2:") + depends_on("py-lightning@2.1.1:") + depends_on("py-matplotlib@3.5:", when="@0.2:") + depends_on("py-matplotlib@3.3.3:") + depends_on("py-numpy@1.21.1:", when="@0.2:") + depends_on("py-numpy@1.19.3:") + depends_on("py-pandas@1.1.3:") + depends_on("py-torch@2:") + depends_on("py-torchmetrics@1.2:") + depends_on("py-torchvision@0.16.1:") + depends_on("py-scikit-learn@1.3:") + depends_on("py-gpytorch@1.11:") + depends_on("py-laplace-torch@0.2.1:", when="@0.2:") + depends_on("py-laplace-torch@0.1:") + depends_on("py-uncertainty-toolbox@0.1.1:") + depends_on("py-kornia@0.6.9:") + depends_on("py-timm@0.9.2:") + depends_on("py-torchseg@0.0.1:") + depends_on("py-h5py@3.12.1:", when="@0.2:") + depends_on("py-ema-pytorch@0.7:", when="@0.2:") diff --git a/var/spack/repos/builtin/packages/py-linear-operator/package.py b/var/spack/repos/builtin/packages/py-linear-operator/package.py index 00c78994137622..89034f15c7bdbb 100644 --- a/var/spack/repos/builtin/packages/py-linear-operator/package.py +++ b/var/spack/repos/builtin/packages/py-linear-operator/package.py @@ -17,6 +17,7 @@ class PyLinearOperator(PythonPackage): license("MIT") + version("0.5.3", sha256="16122661cd8b8a89ea965c845f650affe0f688f315893bb8dfa1182f148a1a41") version("0.4.0", sha256="7c57c9f8f258c9785c0db4dd7625f4dd03a340313d7314cba0b633644909f5c6") version("0.3.0", sha256="84bf572631a7e1576de6920d81600ca0fedcf6bda2f29dbaf440d6e72ce6abab") version("0.1.1", sha256="81adc1aea9e98f3c4f07f5608eb77b689bc61793e9beebfea82155e9237bf1be") @@ -26,3 +27,5 @@ class PyLinearOperator(PythonPackage): depends_on("py-setuptools-scm", type="build") depends_on("py-torch@1.11:", type=("build", "run")) depends_on("py-scipy", type=("build", "run")) + depends_on("py-jaxtyping@0.2.19", when="@0.5.3:", type=("build", "run")) + depends_on("py-mpmath@0.19:1.3", when="@0.5.3:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py index 04b5d63447367e..28db0d5fa5ad76 100644 --- a/var/spack/repos/builtin/packages/py-matplotlib/package.py +++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py @@ -332,7 +332,7 @@ def setup_build_environment(self, env): include.extend(query.headers.directories) try: library.extend(query.libs.directories) - except spack.error.NoLibrariesError: + except NoLibrariesError: pass # Build uses a mix of Spack's compiler wrapper and the actual compiler, diff --git a/var/spack/repos/builtin/packages/py-meldmd/package.py b/var/spack/repos/builtin/packages/py-meldmd/package.py index 2f8538154795af..4160aad0b46a19 100644 --- a/var/spack/repos/builtin/packages/py-meldmd/package.py +++ b/var/spack/repos/builtin/packages/py-meldmd/package.py @@ -5,6 +5,7 @@ import os +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -52,11 +53,10 @@ def cmake_args(self): @run_after("install") def install_python(self): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") with working_dir(join_path(self.build_directory, "python")): make("MeldPluginPatch") - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") for _, _, files in os.walk(self.spec["openmm"].prefix.lib.plugins): for f in files: os.symlink( diff --git a/var/spack/repos/builtin/packages/py-mgmetis/package.py b/var/spack/repos/builtin/packages/py-mgmetis/package.py index 1f38fddeca9c64..2d673853116506 100644 --- a/var/spack/repos/builtin/packages/py-mgmetis/package.py +++ b/var/spack/repos/builtin/packages/py-mgmetis/package.py @@ -21,6 +21,6 @@ class PyMgmetis(PythonPackage): depends_on("py-setuptools", type="build") depends_on("py-numpy@1.20.0:1.26.4", type=("build", "run")) depends_on("py-cython", type=("build")) - depends_on("py-mpi4py@3.0.3:", type=("build", "run")) + depends_on("py-mpi4py@3.0.3:3", type=("build", "run")) depends_on("py-pytest") depends_on("metis+shared", type="all") diff --git a/var/spack/repos/builtin/packages/py-mpi4py/package.py b/var/spack/repos/builtin/packages/py-mpi4py/package.py index 9bb50ac679f7a5..c447e700a142de 100644 --- a/var/spack/repos/builtin/packages/py-mpi4py/package.py +++ b/var/spack/repos/builtin/packages/py-mpi4py/package.py @@ -20,6 +20,7 @@ class PyMpi4py(PythonPackage): license("BSD-2-Clause", when="@:3") version("master", branch="master") + version("4.0.1", sha256="f3174b245775d556f4fddb32519a2066ef0592edc810c5b5a59238f9a0a40c89") version("4.0.0", sha256="820d31ae184d69c17d9b5d55b1d524d56be47d2e6cb318ea4f3e7007feff2ccc") version("3.1.6", sha256="c8fa625e0f92b082ef955bfb52f19fa6691d29273d7d71135d295aa143dee6cb") version("3.1.5", sha256="a706e76db9255135c2fb5d1ef54cb4f7b0e4ad9e33cbada7de27626205f2a153") diff --git a/var/spack/repos/builtin/packages/py-multidict/package.py b/var/spack/repos/builtin/packages/py-multidict/package.py index 152becac958447..ff6677668cd499 100644 --- a/var/spack/repos/builtin/packages/py-multidict/package.py +++ b/var/spack/repos/builtin/packages/py-multidict/package.py @@ -15,15 +15,27 @@ class PyMultidict(PythonPackage): license("Apache-2.0") + version("6.1.0", sha256="22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a") version("6.0.4", sha256="3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49") version("6.0.2", sha256="5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013") version("5.2.0", sha256="0dd1c93edb444b33ba2274b66f63def8a327d607c6c790772f448a53b6ea59ce") version("5.1.0", sha256="25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5") - version("4.7.6", sha256="fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430") + with default_args(deprecated=True): + version("4.7.6", sha256="fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430") - depends_on("c", type="build") # generated + depends_on("c", type="build") + + # Based on PyPI wheel availability + with default_args(type=("build", "link", "run")): + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:6.0") + depends_on("python@:3.11", when="@:6.0.4") + depends_on("python@:3.10", when="@:6.0.2") + depends_on("python@:3.9", when="@:5.1") + depends_on("python@:3.8", when="@:4") depends_on("py-setuptools@40:", type="build") + depends_on("py-typing-extensions@4.1:", when="@6.1: ^python@:3.10", type=("build", "run")) # Historical dependencies depends_on("py-pip@18:", when="@:4", type="build") diff --git a/var/spack/repos/builtin/packages/py-netifaces/package.py b/var/spack/repos/builtin/packages/py-netifaces/package.py index fb8096d1e2afb2..e4f193b78a728d 100644 --- a/var/spack/repos/builtin/packages/py-netifaces/package.py +++ b/var/spack/repos/builtin/packages/py-netifaces/package.py @@ -9,15 +9,15 @@ class PyNetifaces(PythonPackage): """Portable network interface information""" - homepage = ( - "https://0xbharath.github.io/python-network-programming/libraries/netifaces/index.html" - ) + homepage = "https://github.com/al45tair/netifaces" pypi = "netifaces/netifaces-0.10.5.tar.gz" - license("Unlicense") + license("MIT", checked_by="wdconinc") + version("0.11.0", sha256="043a79146eb2907edf439899f262b3dfe41717d34124298ed281139a8b93ca32") + version("0.10.9", sha256="2dee9ffdd16292878336a58d04a20f0ffe95555465fee7c9bd23b3490ef2abf3") version("0.10.5", sha256="59d8ad52dd3116fcb6635e175751b250dc783fb011adba539558bd764e5d628b") - depends_on("c", type="build") # generated + depends_on("c", type="build") depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-nodeenv/package.py b/var/spack/repos/builtin/packages/py-nodeenv/package.py index 6fddf220e42358..d5dbadfa0a69e7 100644 --- a/var/spack/repos/builtin/packages/py-nodeenv/package.py +++ b/var/spack/repos/builtin/packages/py-nodeenv/package.py @@ -12,10 +12,15 @@ class PyNodeenv(PythonPackage): homepage = "https://github.com/ekalinin/nodeenv" pypi = "nodeenv/nodeenv-1.3.3.tar.gz" + version("1.9.1", sha256="6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f") version("1.8.0", sha256="d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2") version("1.7.0", sha256="e0e7f7dfb85fc5394c6fe1e8fa98131a2473e04311a45afb6508f7cf1836fa2b") version("1.3.3", sha256="ad8259494cf1c9034539f6cced78a1da4840a4b157e23640bc4a0c0546b0cb7a") - depends_on("python +ssl", when="@1.5:", type=("build", "run")) - depends_on("py-setuptools", when="@1.7:", type=("build", "run")) + with default_args(type=("build", "run")): + # https://github.com/ekalinin/nodeenv/commit/c1dffc5c64377cfcda9f2befd357e4791903bf39 + depends_on("python@:3.12", when="@:1.8") + depends_on("python +ssl", when="@1.5:") + depends_on("py-setuptools", when="@1.7:") + depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-non-regression-test-tools/package.py b/var/spack/repos/builtin/packages/py-non-regression-test-tools/package.py index dd5ae0d222dacb..2c76e2c9560151 100644 --- a/var/spack/repos/builtin/packages/py-non-regression-test-tools/package.py +++ b/var/spack/repos/builtin/packages/py-non-regression-test-tools/package.py @@ -18,8 +18,9 @@ class PyNonRegressionTestTools(PythonPackage): version("develop", branch="develop") version("main", branch="main") - version("1.0.2", tag="v1.0.2", preferred=True) + version("1.1.6", tag="v1.1.6") + version("1.1.4", tag="v1.1.4") depends_on("py-numpy", type="run") - depends_on("python@3.7:", type="run") - depends_on("py-setuptools", type="build") + depends_on("python@3.10:", type="run") + depends_on("py-setuptools@61:", type="build") diff --git a/var/spack/repos/builtin/packages/py-notebook/package.py b/var/spack/repos/builtin/packages/py-notebook/package.py index 1f62831bfc44c9..3c029772d68972 100644 --- a/var/spack/repos/builtin/packages/py-notebook/package.py +++ b/var/spack/repos/builtin/packages/py-notebook/package.py @@ -38,8 +38,12 @@ class PyNotebook(PythonPackage): version("4.0.4", sha256="a57852514bce1b1cf41fa0311f6cf894960cf68b083b55e6c408316b598d5648") version("4.0.2", sha256="8478d7e2ab474855b0ff841f693983388af8662d3af1adcb861acb900274f22a") - depends_on("python@3.7:", type=("build", "run"), when="@6.4:") - depends_on("python@3.6:", type=("build", "run"), when="@6.3:") + with default_args(type=("build", "run")): + depends_on("python@3.7:", when="@6.4:") + depends_on("python@3.6:", when="@6.3:") + # import pipes in setupbase.py + depends_on("python@:3.12", when="@:6") + depends_on("py-jupyter-packaging@0.9:0", when="@6.4.1:", type="build") depends_on("py-setuptools", when="@5:", type="build") diff --git a/var/spack/repos/builtin/packages/py-nugraph/package.py b/var/spack/repos/builtin/packages/py-nugraph/package.py new file mode 100644 index 00000000000000..83b14447a26412 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-nugraph/package.py @@ -0,0 +1,34 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyNugraph(PythonPackage): + """Graph Neural Network for neutrino physics event reconstruction""" + + pypi = "nugraph/nugraph-24.7.1.tar.gz" + + maintainers("vhewes") + + license("MIT", checked_by="vhewes") + + version("24.7.1", sha256="e1449e4a37049cc774ad026d4f2db339eb60bb59109a11920bb65a4061915de8") + version("24.7.0", sha256="b95d93a1cbcd280a3529ce4782ef778b982d9d4edcc19f522442c38144895f65") + version("24.4.0", sha256="5f888d065819b1ec7c33e7f829ad65eb963db2cf109a5d31b4caef49c004f86f") + version("24.2.0", sha256="4765ea73b384e95a38a598499e77d805541e415049da9f6f46193f8bc281208a") + version("23.11.1", sha256="b160996fca9615b2c7e6ed02fb780af5edaa97f6cdafd45abdf65ea0c7a6f2ca") + version("23.11.0", sha256="a1e01a8c3143fc8db2cf8a3584d192a738d89eb865b1d52cd2994b24bd4175ec") + version("23.10.0", sha256="8a0219318c6bd6d0d240e419ef88cdedd7e944276f0cce430d9ece423e06f1b8") + + depends_on("py-flit-core", type="build") + + depends_on("py-matplotlib") + depends_on("py-numl") + depends_on("py-pynvml") + depends_on("py-seaborn") + depends_on("py-pytorch-lightning") + + extends("python") diff --git a/var/spack/repos/builtin/packages/py-numl/package.py b/var/spack/repos/builtin/packages/py-numl/package.py new file mode 100644 index 00000000000000..1c61a9d53eb0b1 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-numl/package.py @@ -0,0 +1,40 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyNuml(PythonPackage): + """Standardised ML input processing for particle physics""" + + pypi = "pynuml/pynuml-24.7.1.tar.gz" + + maintainers("vhewes") + + license("MIT", checked_by="vhewes") + + version("24.7.1", sha256="20d2f1a07887473e67c79ecc3804b8012e22b78883199fdb0d07bb1b725b6ab0") + version("24.7.0", sha256="d47f71ead6861278595b79d04c554da4998d5c4c50587e4c90231f50db0f2e81") + version("24.6.0", sha256="357d2b0e0b9ca179514d177278620e5ac57bed37bfb6d145c172150126432613") + version("23.11.0", sha256="1a7e61864cfeb0b27c6a93646c33e3f457bbc384eb86aee4df76b5e02898d02f") + version("23.9.0", sha256="77ea8c9df541351adeb249594cce27d742973ee82a0d7f2ad8cdcffa9d3fa6b1") + version("23.8.0", sha256="0896797f3f70b3a6d3d74f7a3e7fe5eaf59a2000a47ffc7ac08b73be0aa15706") + version("23.7.0", sha256="5449dd09a7e046d036e12c7971e61d2862cdb79c7932144b038288fc05ca50a8") + version("23.6.1", sha256="fdb23a9d4f1b83b06cc35b07608fe4c2e55f8307ac47851cccc21a20b69ab674") + version("23.6.0", sha256="fcc1546b9489584f2635f6418c5e1a43f6bdf02dd5c46b7afa09ea5f247524a2") + version("23.5.2", sha256="d83576c8e25e22cc9ba68a35b9690ea861f7a4c09db65ca134849c89fba9b330") + version("23.5.1", sha256="73ef1bea1022b9ebddec35ac7d66c1394003aa5e63a4ec99bfa14d4f833e04a4") + version("23.5.0", sha256="dccb774932813ddc788b1d27e52e251d9db6ea16b303596bfa0955ae51098674") + + depends_on("py-flit-core", type="build") + + depends_on("mpich") + depends_on("py-h5py +mpi") + depends_on("py-pandas") + depends_on("py-particle") + depends_on("py-plotly") + depends_on("py-torch-geometric") + + extends("python") diff --git a/var/spack/repos/builtin/packages/py-numpy-quaternion/package.py b/var/spack/repos/builtin/packages/py-numpy-quaternion/package.py index e7e7e1a60a3c59..e4dbee34d1b12a 100644 --- a/var/spack/repos/builtin/packages/py-numpy-quaternion/package.py +++ b/var/spack/repos/builtin/packages/py-numpy-quaternion/package.py @@ -17,13 +17,15 @@ class PyNumpyQuaternion(PythonPackage): C for speed.""" homepage = "https://github.com/moble/quaternion" - pypi = "numpy-quaternion/numpy-quaternion-2021.11.4.15.26.3.tar.gz" + pypi = "numpy-quaternion/numpy_quaternion-2024.0.3.tar.gz" license("MIT") + version("2024.0.3", sha256="cf39a8a4506eeda297ca07a508c10c08b3487df851a0e34f070a7bf8fab9f290") version( "2021.11.4.15.26.3", sha256="b0dc670b2adc8ff2fb8d6105a48769873f68d6ccbe20af6a19e899b1e8d48aaf", + url="https://pypi.io/packages/source/n/numpy-quaternion/numpy-quaternion-2021.11.4.15.26.3.tar.gz", ) depends_on("c", type="build") # generated @@ -31,7 +33,16 @@ class PyNumpyQuaternion(PythonPackage): variant("scipy", default=True, description="Build with scipy support") variant("numba", default=True, description="Build with numba support") + depends_on("python@3.10:", when="@2024:") + depends_on("py-setuptools", type="build") + depends_on("py-setuptools@0.61:", type="build", when="@2024:") + depends_on("py-hatchling", type="build", when="@2024:") + depends_on("py-numpy@1.13:", type=("build", "run")) + depends_on("py-numpy@2", type=("build"), when="@2024:") + depends_on("py-numpy@1.25:2", type=("run"), when="@2024:") depends_on("py-scipy", type=("build", "run"), when="+scipy") + depends_on("py-scipy@1.5:1", type=("build", "run"), when="@2024:+scipy") depends_on("py-numba", type=("build", "run"), when="+numba") + depends_on("py-numba@0.55:", type=("build", "run"), when="@2024:+numba") diff --git a/var/spack/repos/builtin/packages/py-olcf-velocity/package.py b/var/spack/repos/builtin/packages/py-olcf-velocity/package.py new file mode 100644 index 00000000000000..6a36cb60498a94 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-olcf-velocity/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyOlcfVelocity(PythonPackage): + """A tool to help with the maintenance of container build scripts on multiple systems, + backends (e.g podman or apptainer) and distros.""" + + homepage = "https://olcf.github.io/velocity/index.html" + pypi = "olcf_velocity/olcf_velocity-0.1.3.tar.gz" + + maintainers("AcerP-py") + + license("UNKNOWN", checked_by="AcerP-py") + + version("0.1.3", sha256="08bd82d464e8cab6c61cab095d460b927a18e082cadb663bd5f935cf651b5c03") + + depends_on("python@3.10:", type=("build", "run")) + + depends_on("py-pyyaml", type="run") + depends_on("py-networkx", type="run") + depends_on("py-colorama", type="run") + depends_on("py-loguru", type="run") + depends_on("py-typing-extensions", type="run") + + depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-onnx/package.py b/var/spack/repos/builtin/packages/py-onnx/package.py index 446f6217fd37fe..6ce7596a8d376b 100644 --- a/var/spack/repos/builtin/packages/py-onnx/package.py +++ b/var/spack/repos/builtin/packages/py-onnx/package.py @@ -36,7 +36,8 @@ class PyOnnx(PythonPackage): version("1.6.0", sha256="3b88c3fe521151651a0403c4d131cb2e0311bd28b753ef692020a432a81ce345") version("1.5.0", sha256="1a584a4ef62a6db178c257fffb06a9d8e61b41c0a80bfd8bcd8a253d72c4b0b4") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") # CMakeLists.txt depends_on("cmake@3.1:", type="build") diff --git a/var/spack/repos/builtin/packages/py-onnxruntime/package.py b/var/spack/repos/builtin/packages/py-onnxruntime/package.py index 7ea80f69d69406..a5d375f8169298 100644 --- a/var/spack/repos/builtin/packages/py-onnxruntime/package.py +++ b/var/spack/repos/builtin/packages/py-onnxruntime/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -211,6 +212,5 @@ def cmake_args(self): @run_after("install") def install_python(self): """Install everything from build directory.""" - args = std_pip_args + ["--prefix=" + prefix, "."] with working_dir(self.build_directory): - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/py-open-clip-torch/package.py b/var/spack/repos/builtin/packages/py-open-clip-torch/package.py new file mode 100644 index 00000000000000..45fa3a0ee79b77 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-open-clip-torch/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyOpenClipTorch(PythonPackage): + """Welcome to an open source implementation of OpenAI's CLIP (Contrastive + Language-Image Pre-training).""" + + homepage = "https://github.com/mlfoundations/open_clip" + url = "https://github.com/mlfoundations/open_clip/archive/refs/tags/v2.24.0.tar.gz" + + license("MIT", checked_by="alex391") + + version("2.24.0", sha256="83d78a78f756685e80fdb8baa2f2fb308c791fabdbfe1c0ddcd6fed7d22de7b6") + + depends_on("py-setuptools", type="build") + depends_on("py-torch@1.9.0:", type=("build", "run")) + depends_on("py-torchvision", type=("build", "run")) + depends_on("py-regex", type=("build", "run")) + depends_on("py-ftfy", type=("build", "run")) + depends_on("py-tqdm", type=("build", "run")) + depends_on("py-huggingface-hub", type=("build", "run")) + depends_on("py-sentencepiece", type=("build", "run")) + depends_on("py-protobuf", type=("build", "run")) + depends_on("py-timm", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-opt-einsum/package.py b/var/spack/repos/builtin/packages/py-opt-einsum/package.py index e33397342696f1..ff6107657013c6 100644 --- a/var/spack/repos/builtin/packages/py-opt-einsum/package.py +++ b/var/spack/repos/builtin/packages/py-opt-einsum/package.py @@ -14,11 +14,21 @@ class PyOptEinsum(PythonPackage): license("MIT") + version("3.4.0", sha256="96ca72f1b886d148241348783498194c577fa30a8faac108586b14f1ba4473ac") version("3.3.0", sha256="59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549") version("3.2.1", sha256="83b76a98d18ae6a5cc7a0d88955a7f74881f0e567a0f4c949d24c942753eb998") version("3.2.0", sha256="738b0a1db1d3084d360081bb64d826f9db06d2df7cc0bf8e2c9356028da1fa31") version("3.1.0", sha256="edfada4b1d0b3b782ace8bc14e80618ff629abf53143e1e6bbf9bd00b11ece77") - depends_on("python@3.5:", type=("build", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-numpy@1.7:", type=("build", "run")) + with default_args(type=("build", "run")): + depends_on("python@3.8:", when="@3.4:") + # https://github.com/dgasmith/opt_einsum/commit/7c8f193f90b6771a6b3065bb5cf6ec2747af8209 + depends_on("python@:3.11", when="@:3.3") + + depends_on("py-numpy@1.7:", when="@:3.3") + + depends_on("py-setuptools", when="@:3.3", type="build") + + depends_on("py-hatchling", when="@3.4:", type="build") + depends_on("py-hatch-fancy-pypi-readme@22.5:", when="@3.4:", type="build") + depends_on("py-hatch-vcs", when="@3.4:", type="build") diff --git a/var/spack/repos/builtin/packages/py-or-tools/package.py b/var/spack/repos/builtin/packages/py-or-tools/package.py index 2e917b5a7cf2e8..8400f7ae217986 100644 --- a/var/spack/repos/builtin/packages/py-or-tools/package.py +++ b/var/spack/repos/builtin/packages/py-or-tools/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -57,5 +58,4 @@ def install(self, spec, prefix): with working_dir(self.build_directory): make("install") with working_dir(join_path(self.build_directory, "python")): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/py-oracledb/package.py b/var/spack/repos/builtin/packages/py-oracledb/package.py index 3e50ac8da0c8d6..2e690e36be70a4 100644 --- a/var/spack/repos/builtin/packages/py-oracledb/package.py +++ b/var/spack/repos/builtin/packages/py-oracledb/package.py @@ -12,17 +12,23 @@ class PyOracledb(PythonPackage): Python programs to access Oracle Database.""" homepage = "https://oracle.github.io/python-oracledb/" - pypi = "oracledb/oracledb-1.2.2.tar.gz" + pypi = "oracledb/oracledb-1.4.2.tar.gz" license("Apache-2.0") - version("1.2.2", sha256="dd9f63084e44642b484a46b2fcfb4fc921f39facf494a1bab00628fa6409f4fc") + version("2.4.1", sha256="bd5976bef0e466e0f9d1b9f6531fb5b8171dc8534717ccb04b26e680b6c7571d") + version("2.3.0", sha256="b9b0c4ec280b10063e6789bed23ddc2435ae98569ebe64e0b9a270780b9103d5") + version("1.4.2", sha256="e28ed9046f2735dc2dd5bbcdf3667f284e384e0ec7eed3eeb3798fa8a7d47e36") - depends_on("c", type="build") # generated + depends_on("python@3.8:3.13", when="@2.4:") + depends_on("python@3.8:3.12", when="@2.0:2.3") + depends_on("python@3.8:3.11", when="@:1.4") + + depends_on("c", type="build") depends_on("py-setuptools@40.6.0:", type="build") depends_on("py-cryptography@3.2.1:", type=("build", "run")) - depends_on("py-cython", type="build") + depends_on("py-cython@3:", type="build") depends_on("python@3.6:", type=("build", "run")) depends_on("oracle-instant-client", type="run", when="impl=thick") diff --git a/var/spack/repos/builtin/packages/py-pandas/package.py b/var/spack/repos/builtin/packages/py-pandas/package.py index 63c6597b51c173..4ded508d748b9a 100644 --- a/var/spack/repos/builtin/packages/py-pandas/package.py +++ b/var/spack/repos/builtin/packages/py-pandas/package.py @@ -95,15 +95,16 @@ class PyPandas(PythonPackage): depends_on("py-setuptools@24.2:", when="@:1.2") with default_args(type=("build", "run")): - # Based on PyPI wheel versions - depends_on("python@3.9:3.13", when="@2.2.3:") - depends_on("python@3.9:3.12", when="@2.1.1:") - depends_on("python@3.9:3.11", when="@2.1.0") - depends_on("python@3.8:3.11", when="@1.5:2.0") - depends_on("python@3.8:3.10", when="@1.4") - depends_on("python@:3.10", when="@1.3.3:1.3") - depends_on("python@:3.9", when="@1.1.3:1.3.2") - depends_on("python@:3.8", when="@0.25.2:1.1.2") + # Based on PyPI wheel availability + depends_on("python@3.9:", when="@2.1:") + depends_on("python@3.8:", when="@1.4:") + + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:2.2.2") + depends_on("python@:3.11", when="@:2.1.0") + depends_on("python@:3.10", when="@:1.4") + depends_on("python@:3.9", when="@:1.3.2") + depends_on("python@:3.8", when="@:1.1.2") depends_on("py-numpy@1.22.4:", when="@2.1:") depends_on("py-numpy@1.20.3:", when="@1.5:") diff --git a/var/spack/repos/builtin/packages/py-parso/package.py b/var/spack/repos/builtin/packages/py-parso/package.py index aea20abad21a73..ec01736ad67697 100644 --- a/var/spack/repos/builtin/packages/py-parso/package.py +++ b/var/spack/repos/builtin/packages/py-parso/package.py @@ -16,6 +16,7 @@ class PyParso(PythonPackage): license("MIT") + version("0.8.4", sha256="eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d") version("0.8.3", sha256="8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0") version("0.8.2", sha256="12b83492c6239ce32ff5eed6d3639d6a536170723c6f3f1506869f1ace413398") version("0.8.1", sha256="8519430ad07087d4c997fda3a7918f7cfa27cb58972a8c89c2a0295a1c940e9e") @@ -23,7 +24,10 @@ class PyParso(PythonPackage): version("0.6.1", sha256="56b2105a80e9c4df49de85e125feb6be69f49920e121406f15e7acde6c9dfc57") version("0.4.0", sha256="2e9574cb12e7112a87253e14e2c380ce312060269d04bd018478a3c92ea9a376") - depends_on("python@3.6:", type=("build", "run"), when="@0.8.1:") - depends_on("python@2.7:2.8,3.4:", type=("build", "run"), when="@0.6.1:") - depends_on("python@2.6:2.8,3.3:", type=("build", "run"), when="@0.4.0:") + with default_args(type=("build", "run")): + depends_on("python@:3.13", when="@:0.8.4") + # https://github.com/davidhalter/parso/commit/f7bea28bcc3a1862075e5b61a08d703d72be94aa + depends_on("python@:3.12", when="@:0.8.3") + # https://github.com/davidhalter/parso/commit/285492f4ed25f145859630ee6c5625e60aff6e2e + depends_on("python@:3.11", when="@:0.8.2") depends_on("py-setuptools", type="build") diff --git a/var/spack/repos/builtin/packages/py-pdm-backend/package.py b/var/spack/repos/builtin/packages/py-pdm-backend/package.py index c3aebb38b76f76..220e1b5a37844d 100644 --- a/var/spack/repos/builtin/packages/py-pdm-backend/package.py +++ b/var/spack/repos/builtin/packages/py-pdm-backend/package.py @@ -13,6 +13,7 @@ class PyPdmBackend(PythonPackage): license("MIT", checked_by="matz-e") + version("2.4.3", sha256="dbd9047a7ac10d11a5227e97163b617ad5d665050476ff63867d971758200728") version("2.3.0", sha256="e39ed2da206d90d4a6e9eb62f6dce54ed4fa65ddf172a7d5700960d0f8a09e09") depends_on("python@3.8:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py b/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py index aee29c340b91eb..34b01dac5c0ad5 100644 --- a/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py +++ b/var/spack/repos/builtin/packages/py-pennylane-lightning-kokkos/package.py @@ -2,6 +2,8 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.cmake +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -143,8 +145,7 @@ def build(self, pkg, spec, prefix): python("setup.py", "build_ext", *args) def install(self, pkg, spec, prefix): - pip_args = std_pip_args + [f"--prefix={prefix}", "."] - pip(*pip_args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") super().install(pkg, spec, prefix) @run_after("install") diff --git a/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py b/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py index 030125cebd6eb4..3e950aad450305 100644 --- a/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py +++ b/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py @@ -4,6 +4,8 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.cmake +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -113,8 +115,7 @@ def build(self, pkg, spec, prefix): python("setup.py", "build_ext", *args) def install(self, pkg, spec, prefix): - pip_args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*pip_args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") super().install(pkg, spec, prefix) @run_after("install") diff --git a/var/spack/repos/builtin/packages/py-petsc4py/package.py b/var/spack/repos/builtin/packages/py-petsc4py/package.py index 38a79296de536c..df4522dabc399c 100644 --- a/var/spack/repos/builtin/packages/py-petsc4py/package.py +++ b/var/spack/repos/builtin/packages/py-petsc4py/package.py @@ -20,6 +20,7 @@ class PyPetsc4py(PythonPackage): license("BSD-2-Clause") version("main", branch="main") + version("3.22.1", sha256="a7fd321458b72356e46c4bc5bd93d173c9c2f91018cf21f614a631fe2aa6466a") version("3.22.0", sha256="b35fc833d41c7969be8a530494fcc81741d77e0dc33fba2f4050cdbd0ad881ae") version("3.21.6", sha256="d7a6d41e1463b04b9711b53b347d15f590f9354fae37aae14ad69100286129aa") version("3.21.5", sha256="70e6fa795e9abd8014faec0203cd0cc3efd79f4647c97cafc33776421c9ab1e8") diff --git a/var/spack/repos/builtin/packages/py-pillow/package.py b/var/spack/repos/builtin/packages/py-pillow/package.py index 1e0e5374200cfd..3bd7e9399e9c3d 100644 --- a/var/spack/repos/builtin/packages/py-pillow/package.py +++ b/var/spack/repos/builtin/packages/py-pillow/package.py @@ -74,6 +74,12 @@ class PyPillowBase(PythonPackage): depends_on("libimagequant", when="+imagequant") depends_on("libxcb", when="+xcb") + patch( + "https://github.com/python-pillow/Pillow/commit/1c11d4581c5705dfa21bc5a4f3b6980c556978bf.patch?full_index=1", + sha256="599f37e6a5a8d1adb9f4025ffc7cae5f5b61cad60a04e7c7a3015f9e350047bb", + when="@11.0.0", + ) + @when("@10:") def config_settings(self, spec, prefix): settings = {"parallel": make_jobs} diff --git a/var/spack/repos/builtin/packages/py-pip/package.py b/var/spack/repos/builtin/packages/py-pip/package.py index 8d7dd6561c5631..7f63c25837bd3e 100644 --- a/var/spack/repos/builtin/packages/py-pip/package.py +++ b/var/spack/repos/builtin/packages/py-pip/package.py @@ -5,6 +5,7 @@ import os import sys +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -76,15 +77,14 @@ def install(self, spec, prefix): # itself, see: # https://discuss.python.org/t/bootstrapping-a-specific-version-of-pip/12306 whl = self.stage.archive_file - args = std_pip_args + ["--prefix=" + prefix, whl] if sys.platform == "win32": # On Windows for newer versions of pip, you must bootstrap pip first. # In order to achieve this, use the pip.pyz zipapp version of pip to # bootstrap the pip wheel install. - args.insert(0, os.path.join(self.stage.source_path, "pip.pyz")) + script = os.path.join(self.stage.source_path, "pip.pyz") else: - args.insert(0, os.path.join(whl, "pip")) - python(*args) + script = os.path.join(whl, "pip") + python(script, *PythonPipBuilder.std_args(self), f"--prefix={prefix}", whl) def setup_dependent_package(self, module, dependent_spec: Spec): setattr(module, "pip", python.with_default_args("-m", "pip")) diff --git a/var/spack/repos/builtin/packages/py-prov/package.py b/var/spack/repos/builtin/packages/py-prov/package.py index fa68b56dae151f..8c62abeef1c210 100644 --- a/var/spack/repos/builtin/packages/py-prov/package.py +++ b/var/spack/repos/builtin/packages/py-prov/package.py @@ -13,7 +13,7 @@ class PyProv(PythonPackage): PROV-O (RDF) """ - homepage = "prov.readthedocs.io/" + homepage = "https://prov.readthedocs.io/" pypi = "prov/prov-2.0.0.tar.gz" license("MIT") diff --git a/var/spack/repos/builtin/packages/py-pybind11-stubgen/package.py b/var/spack/repos/builtin/packages/py-pybind11-stubgen/package.py index 8f04cae03bcc07..f4218428e14696 100644 --- a/var/spack/repos/builtin/packages/py-pybind11-stubgen/package.py +++ b/var/spack/repos/builtin/packages/py-pybind11-stubgen/package.py @@ -10,8 +10,9 @@ class PyPybind11Stubgen(PythonPackage): """Generates stubs for pybind11-wrapped python modules""" homepage = "https://github.com/sizmailov/pybind11-stubgen" - pypi = "pybind11-stubgen/pybind11-stubgen-0.3.0.tar.gz" + pypi = "pybind11-stubgen/pybind11-stubgen-2.5.1.tar.gz" + version("2.5.1", sha256="4427a67038a00c5ac1637ffa6c65728c67c5b1251ecc23c7704152be0b14cc0b") version("0.8.7", sha256="79e24009137cd51ef7201c5b9f4d0d072824b260cff751ec8200a8886e06adbf") version("0.3.0", sha256="fb9bc977df46d7f1aecd33258e34abbbd01f1f461862c8a2a85341b96e6e6bdf") diff --git a/var/spack/repos/builtin/packages/py-pycifrw/package.py b/var/spack/repos/builtin/packages/py-pycifrw/package.py index 37d6c4c37a3925..8262fca5bc3306 100644 --- a/var/spack/repos/builtin/packages/py-pycifrw/package.py +++ b/var/spack/repos/builtin/packages/py-pycifrw/package.py @@ -15,6 +15,7 @@ class PyPycifrw(PythonPackage): license("Python-2.0") + version("4.4.6", sha256="02bf5975e70ab71540bff62fbef3e8354ac707a0f0ab914a152047962891ef15") version("4.4.1", sha256="cef7662f475e0eb78a55c2d55774d474e888c96b0539e5f08550afa902cdc4e1") depends_on("c", type="build") # generated diff --git a/var/spack/repos/builtin/packages/py-pycubexr/package.py b/var/spack/repos/builtin/packages/py-pycubexr/package.py new file mode 100644 index 00000000000000..63edbb2a70bf5d --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pycubexr/package.py @@ -0,0 +1,20 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPycubexr(PythonPackage): + """pyCubexR is a Python package for reading the Cube4 file format.""" + + homepage = "https://github.com/extra-p/pycubexr" + pypi = "pycubexr/pycubexr-2.0.0.tar.gz" + + license("BSD-3-Clause") + + version("2.0.0", sha256="03504fbbc9cbd514943e8aeb57919ad49731fe264bdbab86711bf10851276924") + + depends_on("py-setuptools", type="build") + depends_on("py-numpy@1.18:1", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pydantic-core/package.py b/var/spack/repos/builtin/packages/py-pydantic-core/package.py index ec7dd02dfa9d1e..5bc50895c9986b 100644 --- a/var/spack/repos/builtin/packages/py-pydantic-core/package.py +++ b/var/spack/repos/builtin/packages/py-pydantic-core/package.py @@ -15,8 +15,12 @@ class PyPydanticCore(PythonPackage): license("MIT", checked_by="qwertos") + version("2.27.1", sha256="62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235") version("2.18.4", sha256="ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864") + # Based on PyPI wheel availability + depends_on("python@:3.13", type=("build", "run")) + depends_on("python@:3.12", when="@:2.19", type=("build", "run")) depends_on("rust@1.76:", type="build") depends_on("py-maturin@1", type="build") depends_on("py-typing-extensions@4.6,4.7.1:", type="build") diff --git a/var/spack/repos/builtin/packages/py-pydantic-extra-types/package.py b/var/spack/repos/builtin/packages/py-pydantic-extra-types/package.py new file mode 100644 index 00000000000000..03636a1bd60b3d --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pydantic-extra-types/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPydanticExtraTypes(PythonPackage): + """A place for pydantic types that probably shouldn't + exist in the main pydantic lib.""" + + homepage = "https://github.com/pydantic/pydantic-extra-types" + pypi = "pydantic_extra_types/pydantic_extra_types-2.10.0.tar.gz" + + license("MIT", checked_by="wdconinc") + + version("2.10.0", sha256="552c47dd18fe1d00cfed75d9981162a2f3203cf7e77e55a3d3e70936f59587b9") + + depends_on("python@3.8:", type=("build", "run")) + depends_on("py-hatchling", type="build") + depends_on("py-pydantic@2.5.2:", type=("build", "run")) + depends_on("py-typing-extensions", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pydantic-settings/package.py b/var/spack/repos/builtin/packages/py-pydantic-settings/package.py new file mode 100644 index 00000000000000..5881eb5dc75fbf --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pydantic-settings/package.py @@ -0,0 +1,22 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPydanticSettings(PythonPackage): + """Settings management using Pydantic.""" + + homepage = "https://github.com/pydantic/pydantic-settings" + pypi = "pydantic_settings/pydantic_settings-2.6.1.tar.gz" + + license("MIT", checked_by="wdconinc") + + version("2.6.1", sha256="e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0") + + depends_on("python@3.8:", type=("build", "run")) + depends_on("py-hatchling", type="build") + depends_on("py-pydantic@2.7.0:", type=("build", "run")) + depends_on("py-python-dotenv@0.21:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pydantic/package.py b/var/spack/repos/builtin/packages/py-pydantic/package.py index bfc6aa639bbc0e..a5fe38e4f7cffb 100644 --- a/var/spack/repos/builtin/packages/py-pydantic/package.py +++ b/var/spack/repos/builtin/packages/py-pydantic/package.py @@ -14,6 +14,7 @@ class PyPydantic(PythonPackage): license("MIT") + version("2.10.1", sha256="a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560") version("2.7.4", sha256="0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52") version("1.10.9", sha256="95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be") version("1.10.2", sha256="91b8e218852ef6007c2b98cd861601c6a09f1aa32bbbb74fab5b1c33d4a1e410") @@ -25,12 +26,13 @@ class PyPydantic(PythonPackage): depends_on("py-setuptools", type="build", when="@1") depends_on("py-hatchling", type="build", when="@2") depends_on("py-hatch-fancy-pypi-readme@22.5.0:", type="build", when="@2") + depends_on("py-typing-extensions@4.12.2:", when="@2.10:", type=("build", "run")) depends_on("py-typing-extensions@4.6.1:", when="@2.7.1:", type=("build", "run")) depends_on("py-typing-extensions@4.2:", when="@1.10.9:", type=("build", "run")) depends_on("py-typing-extensions@4.1:", when="@1.10:", type=("build", "run")) depends_on("py-typing-extensions@3.7.4.3:", type=("build", "run")) - + depends_on("py-annotated-types@0.6:", type=("build", "run"), when="@2.10:") depends_on("py-annotated-types@0.4.0:", type=("build", "run"), when="@2.7.4:") + depends_on("py-pydantic-core@2.27.1", type=("build", "run"), when="@2.10.1") depends_on("py-pydantic-core@2.18.4", type=("build", "run"), when="@2.7.4") - depends_on("py-python-dotenv@0.10.4:", when="@1 +dotenv", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pyee/package.py b/var/spack/repos/builtin/packages/py-pyee/package.py new file mode 100644 index 00000000000000..34d26b7b57ab6d --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pyee/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPyee(PythonPackage): + """A rough port of Node.js's EventEmitter to Python + with a few tricks of its own.""" + + homepage = "https://github.com/jfhbrook/pyee" + pypi = "pyee/pyee-12.0.0.tar.gz" + + license("MIT", checked_by="wdconinc") + + version("12.0.0", sha256="c480603f4aa2927d4766eb41fa82793fe60a82cbfdb8d688e0d08c55a534e145") + version("11.1.1", sha256="82e1eb1853f8497c4ff1a0c7fa26b9cd2f1253e2b6ffb93b4700fda907017302") + + depends_on("python@3.8:", type=("build", "run")) + depends_on("py-setuptools", type="build") + depends_on("py-setuptools-scm", type="build") + depends_on("py-wheel", type="build") + depends_on("py-typing-extensions", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pyhdf/package.py b/var/spack/repos/builtin/packages/py-pyhdf/package.py index e1059e20971e20..c7631f64c8c32e 100644 --- a/var/spack/repos/builtin/packages/py-pyhdf/package.py +++ b/var/spack/repos/builtin/packages/py-pyhdf/package.py @@ -20,6 +20,7 @@ class PyPyhdf(PythonPackage): license("MIT") version("master", branch="master") + version("0.11.4", sha256="f4d48ee6f297be76e07b1a31710ef898caa31757dfdf173e5a4b94988ea76164") version("0.10.4", sha256="ea09b2bdafc9be0f7f43d72ff122d8efbde61881f4da3a659b33be5e29215f93") depends_on("c", type="build") # generated @@ -31,6 +32,8 @@ class PyPyhdf(PythonPackage): depends_on("zlib-api", type=("build", "run")) depends_on("hdf@4.2", type=("build", "run")) depends_on("py-numpy", type=("build", "run")) + # https://github.com/fhs/pyhdf/issues/63 + depends_on("py-numpy@:1.24", when="@0.10.4", type=("build", "run")) depends_on("jpeg", type=("build", "run")) def setup_build_environment(self, env): diff --git a/var/spack/repos/builtin/packages/py-pyhmmer/package.py b/var/spack/repos/builtin/packages/py-pyhmmer/package.py new file mode 100644 index 00000000000000..b263e89389ea1d --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pyhmmer/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPyhmmer(PythonPackage): + """HMMER is a biological sequence analysis tool that uses profile hidden + Markov models to search for sequence homologs. HMMER3 is developed and + maintained by the Eddy/Rivas Laboratory at Harvard University. pyhmmer + is a Python package, implemented using the Cython language, that provides + bindings to HMMER3.""" + + homepage = "https://github.com/althonos/pyhmmer" + pypi = "pyhmmer/pyhmmer-0.10.14.tar.gz" + + license("MIT", checked_by="luke-dt") + + version("0.10.15", sha256="bf8e97ce8da6fb5850298f3074640f3e998d5a655877f865c1592eb057dc7921") + version("0.10.14", sha256="eb50bdfdf67a3b1fecfe877d7ca6d9bade9a9f3dea3ad60c959453bbb235573d") + + depends_on("python@3.6:", type=("build", "run")) + depends_on("py-setuptools@46.4:", type="build") + depends_on("py-cython@3.0", type="build") + depends_on("py-psutil@5.8:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pymongo/package.py b/var/spack/repos/builtin/packages/py-pymongo/package.py index 234b6119672d8c..137cd968505435 100644 --- a/var/spack/repos/builtin/packages/py-pymongo/package.py +++ b/var/spack/repos/builtin/packages/py-pymongo/package.py @@ -11,22 +11,31 @@ class PyPymongo(PythonPackage): MongoDB database from Python. The bson package is an implementation of the BSON format for Python. The pymongo package is a native Python driver for MongoDB. The gridfs package is a gridfs - implementation on top of pymongo. - - PyMongo supports MongoDB 2.6, 3.0, 3.2, 3.4, 3.6, 4.0 and 4.2.""" + implementation on top of pymongo.""" pypi = "pymongo/pymongo-3.9.0.tar.gz" - license("Apache-2.0") + license("Apache-2.0", checked_by="wdconinc") - version("4.2.0", sha256="72f338f6aabd37d343bd9d1fdd3de921104d395766bcc5cdc4039e4c2dd97766") - version("3.12.1", sha256="704879b6a54c45ad76cea7c6789c1ae7185050acea7afd15b58318fa1932ed45") - version("3.9.0", sha256="4249c6ba45587b959292a727532826c5032d59171f923f7f823788f413c2a5a3") - version("3.6.0", sha256="c6de26d1e171cdc449745b82f1addbc873d105b8e7335097da991c0fc664a4a8") - version("3.3.0", sha256="3d45302fc2622fabf34356ba274c69df41285bac71bbd229f1587283b851b91e") + version("4.10.1", sha256="a9de02be53b6bb98efe0b9eda84ffa1ec027fcb23a2de62c4f941d9a2f2f3330") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-5629 + version("4.2.0", sha256="72f338f6aabd37d343bd9d1fdd3de921104d395766bcc5cdc4039e4c2dd97766") + version( + "3.12.1", sha256="704879b6a54c45ad76cea7c6789c1ae7185050acea7afd15b58318fa1932ed45" + ) + version("3.9.0", sha256="4249c6ba45587b959292a727532826c5032d59171f923f7f823788f413c2a5a3") + version("3.6.0", sha256="c6de26d1e171cdc449745b82f1addbc873d105b8e7335097da991c0fc664a4a8") + version("3.3.0", sha256="3d45302fc2622fabf34356ba274c69df41285bac71bbd229f1587283b851b91e") depends_on("c", type="build") # generated depends_on("python@2.7:2.8,3.4:", type=("build", "run")) - depends_on("python@3.7:", when="@4.2.0:", type=("build", "run")) + depends_on("python@3.7:", when="@4.2:", type=("build", "run")) + depends_on("python@3.8:", when="@4.8:", type=("build", "run")) depends_on("py-setuptools", type="build") + depends_on("py-setuptools@63:", type="build", when="@4.5:") + depends_on("py-setuptools@65:", type="build", when="@4.8:") + depends_on("py-hatchling@1.24:", type="build", when="@4.8:") + depends_on("py-hatch-requirements-txt@0.4.1:", type="build", when="@4.8:") + depends_on("py-dnspython@1.16.0:2", type="build", when="@4.3:") diff --git a/var/spack/repos/builtin/packages/py-pynucleus/package.py b/var/spack/repos/builtin/packages/py-pynucleus/package.py index 9664e7ce9f37bd..a70fb4dfd68a6b 100644 --- a/var/spack/repos/builtin/packages/py-pynucleus/package.py +++ b/var/spack/repos/builtin/packages/py-pynucleus/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -59,11 +60,9 @@ def setup_build_environment(self, env): @run_before("install") def install_python(self): - prefix = self.prefix for subpackage in ["packageTools", "base", "metisCy", "fem", "multilevelSolver", "nl"]: with working_dir(subpackage): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") @run_after("install") def install_additional_files(self): diff --git a/var/spack/repos/builtin/packages/py-pyppeteer/package.py b/var/spack/repos/builtin/packages/py-pyppeteer/package.py new file mode 100644 index 00000000000000..64a999c3e40a3c --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pyppeteer/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPyppeteer(PythonPackage): + """Headless chrome/chromium automation library + (unofficial port of puppeteer).""" + + homepage = "https://github.com/pyppeteer/pyppeteer" + pypi = "pyppeteer/pyppeteer-2.0.0.tar.gz" + + license("MIT") + + version("2.0.0", sha256="4af63473ff36a746a53347b2336a49efda669bcd781e400bc1799b81838358d9") + + depends_on("py-poetry-core", type="build") + + depends_on("python@3.8:", type=("build", "run")) + depends_on("py-appdirs@1.4.3:1", type=("build", "run")) + depends_on("py-importlib-metadata@1.4:", type=("build", "run")) + depends_on("py-pyee@11", type=("build", "run")) + depends_on("py-tqdm@4.42.1:4", type=("build", "run")) + depends_on("py-urllib3@1.25.8:1", type=("build", "run")) + depends_on("py-websockets@10", type=("build", "run")) + depends_on("py-certifi@2023:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pyrodigal/package.py b/var/spack/repos/builtin/packages/py-pyrodigal/package.py new file mode 100644 index 00000000000000..6bd206f58b1c1a --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pyrodigal/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyPyrodigal(PythonPackage): + """Cython bindings and Python interface to Prodigal, an ORF finder for + genomes and metagenomes""" + + homepage = "https://github.com/althonos/pyrodigal" + pypi = "pyrodigal/pyrodigal-3.5.2.tar.gz" + + license("GPL-3.0", checked_by="luke-dt") + + version("3.5.2", sha256="2a40eb6113e720ada51c326958b295944cdc33ecee9f25d5bad4e9a8e6e6f7f5") + + depends_on("c", type="build") + + depends_on("python@3.6:", type=("build", "run")) + depends_on("py-setuptools@46.4:", type="build") + depends_on("py-archspec@0.2.0:", type="build") + depends_on("py-cython@3.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pyscf/package.py b/var/spack/repos/builtin/packages/py-pyscf/package.py index 4a12b557265e14..c94a68252a953e 100644 --- a/var/spack/repos/builtin/packages/py-pyscf/package.py +++ b/var/spack/repos/builtin/packages/py-pyscf/package.py @@ -18,6 +18,7 @@ class PyPyscf(PythonPackage): license("Apache-2.0") + version("2.7.0", sha256="ca8efc2f28d72c3130f26a967e7fa8d0bbc4a6b47d16a7c4c732ec85a31b7eec") version("2.6.2", sha256="744c89a8e4d38c4b5562f75fa68f9d079faeb23602d255fba0eb6d1bac97bca2") version("2.6.1", sha256="faeaeeb0c07fec5018937655511709a9c2445e3d7c421c0fa1ae5d889e4ab455") version("2.6.0", sha256="08ff920fedd4b257273d235fb4492535147c1e3154de5ab02b5446de93e200d8") diff --git a/var/spack/repos/builtin/packages/py-pystac-client/package.py b/var/spack/repos/builtin/packages/py-pystac-client/package.py index 7d657fd2217c10..7d3eb546c673b0 100644 --- a/var/spack/repos/builtin/packages/py-pystac-client/package.py +++ b/var/spack/repos/builtin/packages/py-pystac-client/package.py @@ -10,13 +10,30 @@ class PyPystacClient(PythonPackage): """Python library for working with Spatiotemporal Asset Catalog (STAC).""" homepage = "https://github.com/stac-utils/pystac-client.git" - pypi = "pystac-client/pystac-client-0.5.1.tar.gz" + pypi = "pystac-client/pystac_client-0.8.5.tar.gz" license("Apache-2.0") - version("0.5.1", sha256="f585bd9bcd52ee399c8a292dbb7e0405c0da359a73bc07c1ef82a65c17124d94") + version("0.8.5", sha256="7fba8d4f3c641ff7e840084fc3a53c96443a227f8a5889ae500fc38183ccd994") + version( + "0.5.1", + sha256="f585bd9bcd52ee399c8a292dbb7e0405c0da359a73bc07c1ef82a65c17124d94", + url="https://files.pythonhosted.org/packages/source/p/pystac-client/pystac-client-0.5.1.tar.gz", + deprecated=True, + ) - depends_on("py-setuptools", type="build") - depends_on("py-requests@2.27.1:", type=("build", "run")) - depends_on("py-pystac@1.4:", type=("build", "run")) - depends_on("py-python-dateutil@2.7:", type=("build", "run")) + with default_args(type="build"): + depends_on("py-setuptools@61:", when="@0.8:") + depends_on("py-setuptools") + + with default_args(type=("build", "run")): + depends_on("python@3.10:", when="@0.8:") + # setup.py imports 'imp', removed in Python 3.12 + depends_on("python@:3.11", when="@:0.6") + + depends_on("py-requests@2.28.2:", when="@0.8:") + depends_on("py-requests@2.27.1:") + depends_on("py-pystac@1.10:+validation", when="@0.8:") + depends_on("py-pystac@1.4:") + depends_on("py-python-dateutil@2.8.2:", when="@0.8:") + depends_on("py-python-dateutil@2.7:") diff --git a/var/spack/repos/builtin/packages/py-pystac/package.py b/var/spack/repos/builtin/packages/py-pystac/package.py index 6ddba4bca1cc4a..24994341cad971 100644 --- a/var/spack/repos/builtin/packages/py-pystac/package.py +++ b/var/spack/repos/builtin/packages/py-pystac/package.py @@ -14,6 +14,7 @@ class PyPystac(PythonPackage): license("Apache-2.0") + version("1.11.0", sha256="acb1e04be398a0cda2d8870ab5e90457783a8014a206590233171d8b2ae0d9e7") version("1.4.0", sha256="6ec43e1c6bec50fbfbdede49c3ccb83ecd112072a938001b5c9c581fc2945e83") version("1.3.0", sha256="b0244641ef2a29a7b7929266b0d1eda2b0a0ef826dadb1aed93404a14e6e313b") version("1.2.0", sha256="8a60be2a30e1e28f8617a88f9f8fddc00c519be494a02ec111dc8fba62bf26e7") @@ -21,7 +22,14 @@ class PyPystac(PythonPackage): version("1.0.1", sha256="3927f2104cd2077638e046b9c258d5e6b442bfabf2d179cbefbf10f509efae85") version("0.5.4", sha256="9fc3359364685adf54e3bc78c87550a8bc8b0a927405419bd8e4bbd42a8efc79") - depends_on("python@3.7:", when="@1:", type=("build", "run")) - depends_on("py-setuptools", type="build") - depends_on("py-python-dateutil@2.7:", type=("build", "run")) - depends_on("py-typing-extensions@3.7:", when="@1: ^python@:3.7", type=("build", "run")) + variant("validation", default=False, description="Install an additional jsonschema dependency") + + with default_args(type="build"): + depends_on("py-setuptools@61:", when="@1.11:") + depends_on("py-setuptools") + + with default_args(type=("build", "run")): + depends_on("python@3.10:", when="@1.11:") + depends_on("py-python-dateutil@2.7:") + + depends_on("py-jsonschema@4.18:4", when="+validation") diff --git a/var/spack/repos/builtin/packages/py-python-multipart/package.py b/var/spack/repos/builtin/packages/py-python-multipart/package.py index 0af95b14b7f1af..5dd5780011f462 100644 --- a/var/spack/repos/builtin/packages/py-python-multipart/package.py +++ b/var/spack/repos/builtin/packages/py-python-multipart/package.py @@ -15,8 +15,18 @@ class PyPythonMultipart(PythonPackage): license("Apache-2.0") + version("0.0.17", sha256="41330d831cae6e2f22902704ead2826ea038d0419530eadff3ea80175aec5538") version("0.0.5", sha256="f7bb5f611fc600d15fa47b3974c8aa16e93724513b49b5f95c81e6624c83fa43") - depends_on("py-setuptools", type="build") + depends_on("py-setuptools", type="build", when="@:0.0.5") + depends_on("py-hatchling", type="build", when="@0.0.6:") depends_on("py-six@1.4.0:", type=("build", "run")) + + def url_for_version(self, version): + url = "https://files.pythonhosted.org/packages/source/p/python-multipart/{}-{}.tar.gz" + if self.spec.satisfies("@:0.0.5"): + name = "python-multipart" + else: + name = "python_multipart" + return url.format(name, version) diff --git a/var/spack/repos/builtin/packages/py-python-ptrace/package.py b/var/spack/repos/builtin/packages/py-python-ptrace/package.py index 94273241f6570d..be67cc059b6792 100644 --- a/var/spack/repos/builtin/packages/py-python-ptrace/package.py +++ b/var/spack/repos/builtin/packages/py-python-ptrace/package.py @@ -14,8 +14,12 @@ class PyPythonPtrace(PythonPackage): license("GPL-2.0-only") + version("0.9.9", sha256="56bbfef44eaf3a77be48138cca5767cdf471e8278fe1499f9b72f151907f25cf") version("0.9.8", sha256="1e3bc6223f626aaacde8a7979732691c11b13012e702fee9ae16c87f71633eaa") - depends_on("c", type="build") # generated + depends_on("c", type="build") depends_on("py-setuptools", type="build") + + # uses imp + depends_on("python@:3.11", when="@:0.9.8") diff --git a/var/spack/repos/builtin/packages/py-pythonsollya/package.py b/var/spack/repos/builtin/packages/py-pythonsollya/package.py index c8f427f873de9c..1603ea1dce4727 100644 --- a/var/spack/repos/builtin/packages/py-pythonsollya/package.py +++ b/var/spack/repos/builtin/packages/py-pythonsollya/package.py @@ -9,7 +9,7 @@ class PyPythonsollya(PythonPackage): """Python wrapper for the Sollya library""" - homepage = "Python wrapper for the Sollya library" + homepage = "https://gitlab.com/metalibm-dev/pythonsollya" url = "https://gitlab.com/metalibm-dev/pythonsollya/-/archive/release-0.4.0-alpha0/pythonsollya-release-0.4.0-alpha0.tar.gz" license("CECILL-2.1") diff --git a/var/spack/repos/builtin/packages/py-pytorch-warmup/package.py b/var/spack/repos/builtin/packages/py-pytorch-warmup/package.py new file mode 100644 index 00000000000000..362e4f0b094702 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-pytorch-warmup/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyPytorchWarmup(PythonPackage): + """This library contains PyTorch implementations of the warmup schedules + described in On the adequacy of untuned warmup for adaptive + optimization.""" + + homepage = "https://github.com/Tony-Y/pytorch_warmup" + pypi = "pytorch-warmup/pytorch-warmup-0.1.1.tar.gz" + + license("MIT", checked_by="alex391") + + version("0.1.1", sha256="c594760b29657a127aa6a8c3424dd0b5068140b3b7d4988118f4a9f3e99b1457") + + depends_on("py-setuptools", type="build") + depends_on("py-torch@1.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-pytz/package.py b/var/spack/repos/builtin/packages/py-pytz/package.py index af506e8c959634..20315ef7209a87 100644 --- a/var/spack/repos/builtin/packages/py-pytz/package.py +++ b/var/spack/repos/builtin/packages/py-pytz/package.py @@ -15,6 +15,7 @@ class PyPytz(PythonPackage): license("MIT") + version("2024.2", sha256="2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a") version("2023.3", sha256="1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588") version("2022.7.1", sha256="01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0") version("2022.2.1", sha256="cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5") diff --git a/var/spack/repos/builtin/packages/py-pyzmq/package.py b/var/spack/repos/builtin/packages/py-pyzmq/package.py index 660c658e9039d6..bac8d3be16c4c7 100644 --- a/var/spack/repos/builtin/packages/py-pyzmq/package.py +++ b/var/spack/repos/builtin/packages/py-pyzmq/package.py @@ -24,6 +24,10 @@ class PyPyzmq(PythonPackage): license("BSD-3-Clause") + version("26.2.0", sha256="070672c258581c8e4f640b5159297580a9974b026043bd4ab0470be9ed324f1f") + version("26.1.1", sha256="a7db05d8b7cd1a8c6610e9e9aa55d525baae7a44a43e18bc3260eb3f92de96c6") + version("26.0.3", sha256="dba7d9f2e047dfa2bca3b01f4f84aa5246725203d6284e3790f2ca15fba6b40a") + version("25.1.2", sha256="93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226") version("25.0.2", sha256="6b8c1bbb70e868dc88801aa532cae6bd4e3b5233784692b786f17ad2962e5149") version("24.0.1", sha256="216f5d7dbb67166759e59b0479bca82b8acf9bed6015b526b8eb10143fb08e77") version("22.3.0", sha256="8eddc033e716f8c91c6a2112f0a8ebc5e00532b4a6ae1eb0ccc48e027f9c671c") @@ -39,13 +43,17 @@ class PyPyzmq(PythonPackage): depends_on("python@2.6:2.7,3.2:3.8", type=("build", "run"), when="@:14") # pyproject.toml - depends_on("py-setuptools", type="build") - # https://github.com/zeromq/pyzmq/issues/1278 - # https://github.com/zeromq/pyzmq/pull/1317 - depends_on("py-setuptools@:59", when="@17:18.0", type="build") - depends_on("py-packaging", type="build") + with when("@26:"): + depends_on("py-scikit-build-core +pyproject", type="build") + with when("@:25"): + depends_on("py-setuptools", type="build") + # https://github.com/zeromq/pyzmq/issues/1278 + # https://github.com/zeromq/pyzmq/pull/1317 + depends_on("py-setuptools@:59", when="@17:18.0", type="build") - # setup.py + depends_on("py-packaging", type="build") + depends_on("py-cython@3:", type="build", when="@26:") + depends_on("py-cython@0.29.35:", type="build", when="@25.1.1: ^python@3.12:") depends_on("py-cython@0.29:", type="build", when="@22.3.0:") depends_on("py-cython@0.20:", type="build", when="@18:") depends_on("py-cython@0.16:", type="build") @@ -66,7 +74,7 @@ def remove_cythonized_files(self): for f in find(".", "*.pyx"): touch(f) - @run_before("install") + @run_before("install", when="@:25") def setup(self): """Create config file listing dependency information.""" diff --git a/var/spack/repos/builtin/packages/py-quart/package.py b/var/spack/repos/builtin/packages/py-quart/package.py index 60ac08264cd1c9..a3d49bac24b6c1 100644 --- a/var/spack/repos/builtin/packages/py-quart/package.py +++ b/var/spack/repos/builtin/packages/py-quart/package.py @@ -11,21 +11,40 @@ class PyQuart(PythonPackage): Flask.""" homepage = "https://gitlab.com/pgjones/quart/" - pypi = "Quart/Quart-0.16.3.tar.gz" + pypi = "quart/quart-0.16.3.tar.gz" license("MIT") + version("0.19.8", sha256="ef567d0be7677c99890d5c6ff30e679699fe7e5fca1a90fa3b6974edd8421794") version("0.16.3", sha256="16521d8cf062461b158433d820fff509f98fb997ae6c28740eda061d9cba7d5e") + depends_on("python@3.8:", type=("build", "run"), when="@0.19:") depends_on("python@3.7:", type=("build", "run")) depends_on("py-poetry-core@1:", type="build") depends_on("py-aiofiles", type=("build", "run")) + depends_on("py-blinker@1.6:", type=("build", "run"), when="@0.19:") depends_on("py-blinker", type=("build", "run")) + depends_on("py-click@8.0.0:", type=("build", "run"), when="@0.18.1:") depends_on("py-click", type=("build", "run")) + depends_on("py-flask@3.0.0:", type=("build", "run"), when="@0.19:") depends_on("py-hypercorn@0.11.2:", type=("build", "run")) depends_on("py-itsdangerous", type=("build", "run")) depends_on("py-jinja2", type=("build", "run")) - depends_on("py-toml", type=("build", "run")) + depends_on("py-markupsafe", type=("build", "run"), when="@0.17:") + depends_on("py-werkzeug@3:", type=("build", "run"), when="@0.19:") depends_on("py-werkzeug@2:", type=("build", "run")) + depends_on("py-importlib-metadata", type=("build", "run"), when="@0.18: ^python@:3.9") depends_on("py-importlib-metadata", type=("build", "run"), when="^python@:3.7") + depends_on("py-typing-extensions", type=("build", "run"), when="@0.19: ^python@:3.9") depends_on("py-typing-extensions", type=("build", "run"), when="^python@:3.7") + + # Historical dependencies + depends_on("py-toml", type=("build", "run"), when="@:0.17") + + def url_for_version(self, version): + url = "https://files.pythonhosted.org/packages/source/q/quart/{}-{}.tar.gz" + if self.spec.satisfies("@:0.18.3"): + name = "Quart" + else: + name = "quart" + return url.format(name, version) diff --git a/var/spack/repos/builtin/packages/py-rasterio/package.py b/var/spack/repos/builtin/packages/py-rasterio/package.py index 606b983401f950..222f6d5109e49f 100644 --- a/var/spack/repos/builtin/packages/py-rasterio/package.py +++ b/var/spack/repos/builtin/packages/py-rasterio/package.py @@ -22,6 +22,7 @@ class PyRasterio(PythonPackage): version("main", branch="main") version("master", branch="master", deprecated=True) + version("1.4.2", sha256="1be35ccb4d998a4c48fa51bbee9e37927ecd9b9e954a2b2581b8f3e9bb165332") version("1.4.1", sha256="d750362bb792d2311f94803ff309baec48486ecba75c9b905ea9b1f5eb06ef9f") version("1.4.0", sha256="e0d2ff540a4e06016cca2fb46691a10afe71343ea998c50ad8247bb125542133") version("1.3.11", sha256="47aa70b4718ebc80d825bb7db3127577d74e31c53048ce215145c0baf530ece9") @@ -83,3 +84,6 @@ class PyRasterio(PythonPackage): depends_on("gdal@2.4:3.3", when="@1.2.7:1.2") depends_on("gdal@2.3:3.2", when="@1.2.0:1.2.6") depends_on("gdal@1.11:3.2", when="@1.1.0:1.1") + + # https://github.com/rasterio/rasterio/pull/3212 + conflicts("^gdal@3.10:", when="@:1.4.1") diff --git a/var/spack/repos/builtin/packages/py-resize-right/package.py b/var/spack/repos/builtin/packages/py-resize-right/package.py new file mode 100644 index 00000000000000..4e737f2d83e3e5 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-resize-right/package.py @@ -0,0 +1,32 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyResizeRight(PythonPackage): + """This is a resizing packge for images or tensors, that supports both + Numpy and PyTorch (fully differentiable) seamlessly. The main motivation + for creating this is to address some crucial incorrectness issues (see item + 3 in the list below) that exist in all other resizing packages I am + aware of. As far as I know, it is the only one that performs correctly + in all cases. ResizeRight is specially made for machine learning, + image enhancement and restoration challenges.""" + + homepage = "https://github.com/assafshocher/ResizeRight" + pypi = "resize-right/resize-right-0.0.2.tar.gz" + + license("MIT", checked_by="alex391") + + version("0.0.2", sha256="7dc35b72ce4012b77f7cc9049835163793ab98a58ab8893610fb119fe59af520") + + depends_on("py-setuptools", type="build") + # needs py-numpy, py-torch, or both. py-numpy is lighter to install, so + # always use py-numpy + depends_on("py-numpy", type=("build", "run")) + # and optionally use py-torch + variant("torch", default=True, description="Enable py-torch") + depends_on("py-torch", type=("build", "run"), when="+torch") diff --git a/var/spack/repos/builtin/packages/py-rotary-embedding-torch/package.py b/var/spack/repos/builtin/packages/py-rotary-embedding-torch/package.py new file mode 100644 index 00000000000000..c307b827bee74c --- /dev/null +++ b/var/spack/repos/builtin/packages/py-rotary-embedding-torch/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2023 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) + + +from spack.package import * + + +class PyRotaryEmbeddingTorch(PythonPackage): + """A standalone library for adding rotary embeddings to transformers in Pytorch, + following its success as relative positional encoding. Specifically it will make + rotating information into any axis of a tensor easy and efficient, whether they + be fixed positional or learned. This library will give you state of the art + results for positional embedding, at little costs.""" + + homepage = "https://github.com/lucidrains/rotary-embedding-torch" + pypi = "rotary-embedding-torch/rotary-embedding-torch-0.5.3.tar.gz" + + maintainers("meyersbs") + + version("0.5.3", sha256="45db29b19bd7025f09d202752c26bf6921b05d8b5a977cfcdc625ce96ddf2b5c") + + depends_on("py-setuptools", type="build") + depends_on("py-beartype", type=("build", "run")) + depends_on("py-einops@0.7:", type=("build", "run")) + depends_on("py-torch@2.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-ruamel-yaml-clib/package.py b/var/spack/repos/builtin/packages/py-ruamel-yaml-clib/package.py index 82bbd8db2e99e5..9f1ec1844ae026 100644 --- a/var/spack/repos/builtin/packages/py-ruamel-yaml-clib/package.py +++ b/var/spack/repos/builtin/packages/py-ruamel-yaml-clib/package.py @@ -8,26 +8,32 @@ class PyRuamelYamlClib(PythonPackage): - """C version of reader, parser and emitter for ruamel.yaml derived from - libyaml.""" + """C version of reader, parser and emitter for ruamel.yaml derived from libyaml.""" homepage = "https://sourceforge.net/p/ruamel-yaml-clib/code/ci/default/tree/" pypi = "ruamel.yaml.clib/ruamel.yaml.clib-0.2.0.tar.gz" license("MIT") + version("0.2.12", sha256="6c8fbb13ec503f99a91901ab46e0b07ae7941cd527393187039aec586fdfd36f") version("0.2.7", sha256="1f08fd5a2bea9c4180db71678e850b995d2a5f4537be0e94557668cf0f5f9497") version("0.2.0", sha256="b66832ea8077d9b3f6e311c4a53d06273db5dc2db6e8a908550f3c14d67e718c") - depends_on("c", type="build") # generated + depends_on("c", type="build") - depends_on("python", type=("build", "link", "run")) - # to prevent legacy-install-failure - depends_on("python@:3.9", when="@0.2.0", type=("build", "link", "run")) - depends_on("py-setuptools@28.7.0:", type="build") + # Based on PyPI wheel availability + with default_args(type=("build", "link", "run")): + depends_on("python@:3.13") + depends_on("python@:3.12", when="@:0.2.8") + depends_on("python@:3.11", when="@:0.2.7") + depends_on("python@:3.10", when="@:0.2.6") + depends_on("python@:3.9", when="@:0.2.4") + depends_on("python@:3.8", when="@:0.2.0") + + depends_on("py-setuptools", type="build") def flag_handler(self, name, flags): if name == "cflags": - if self.spec.satisfies("%oneapi") or self.spec.satisfies(" %apple-clang@15:"): + if self.spec.satisfies("%oneapi") or self.spec.satisfies("%apple-clang@15:"): flags.append("-Wno-error=incompatible-function-pointer-types") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/py-ruff/package.py b/var/spack/repos/builtin/packages/py-ruff/package.py index f38b08a4d772a8..81781a04b5ecfa 100644 --- a/var/spack/repos/builtin/packages/py-ruff/package.py +++ b/var/spack/repos/builtin/packages/py-ruff/package.py @@ -7,15 +7,16 @@ class PyRuff(PythonPackage): - """An extremely fast Python linter, written in Rust.""" + """An extremely fast Python linter and code formatter, written in Rust.""" - homepage = "https://beta.ruff.rs/docs" + homepage = "https://docs.astral.sh/ruff" pypi = "ruff/ruff-0.0.276.tar.gz" git = "https://github.com/astral-sh/ruff.git" license("MIT") maintainers("adamjstewart") + version("0.8.0", sha256="a7ccfe6331bf8c8dad715753e157457faf7351c2b69f62f32c165c2dbcbacd44") version("0.6.5", sha256="4d32d87fab433c0cf285c3683dd4dae63be05fd7a1d65b3f5bf7cdd05a6b96fb") version("0.5.7", sha256="8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5") version("0.4.5", sha256="286eabd47e7d4d521d199cab84deca135557e6d1e0f0d01c29e757c3cb151b54") @@ -28,5 +29,6 @@ class PyRuff(PythonPackage): depends_on("py-maturin@1") # Found in Cargo.toml + depends_on("rust@1.80:", when="@0.7.1:") depends_on("rust@1.76:", when="@0.5.6:") depends_on("rust@1.71:") diff --git a/var/spack/repos/builtin/packages/py-safetensors/package.py b/var/spack/repos/builtin/packages/py-safetensors/package.py index f0f11247c55c2a..741a8d8ba43ad1 100644 --- a/var/spack/repos/builtin/packages/py-safetensors/package.py +++ b/var/spack/repos/builtin/packages/py-safetensors/package.py @@ -12,9 +12,12 @@ class PySafetensors(PythonPackage): homepage = "https://github.com/huggingface/safetensors" pypi = "safetensors/safetensors-0.3.1.tar.gz" + version("0.4.5", sha256="d73de19682deabb02524b3d5d1f8b3aaba94c72f1bbfc7911b9b9d5d391c0310") version("0.4.3", sha256="2f85fc50c4e07a21e95c24e07460fe6f7e2859d0ce88092838352b798ce711c2") version("0.3.1", sha256="571da56ff8d0bec8ae54923b621cda98d36dcef10feb36fd492c4d0c2cd0e869") - depends_on("py-setuptools", type="build") - depends_on("py-setuptools-rust", type="build") - depends_on("py-maturin", type="build", when="@0.4.3") + # Based on PyPI wheel availability + depends_on("python@:3.12", when="@:0.4.3", type=("build", "run")) + depends_on("py-maturin@1", type="build", when="@0.4.3:") + depends_on("py-setuptools", when="@0.3.1", type="build") + depends_on("py-setuptools-rust", when="@0.3.1", type="build") diff --git a/var/spack/repos/builtin/packages/py-scikit-learn-extra/package.py b/var/spack/repos/builtin/packages/py-scikit-learn-extra/package.py index d6935fb7801d08..ceb56bdf9e5f6d 100644 --- a/var/spack/repos/builtin/packages/py-scikit-learn-extra/package.py +++ b/var/spack/repos/builtin/packages/py-scikit-learn-extra/package.py @@ -21,7 +21,8 @@ class PyScikitLearnExtra(PythonPackage): version("0.2.0", sha256="3b1bb5fedde47920eb4b3fa0a0c18f80cc7359d9d0496720178788c6153b8019") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") # For upperbound see https://github.com/scikit-learn-contrib/scikit-learn-extra/issues/164 depends_on("python@3.6:3.10", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-scikit-learn/package.py b/var/spack/repos/builtin/packages/py-scikit-learn/package.py index 4fb94f843f70a0..372c50624ad994 100644 --- a/var/spack/repos/builtin/packages/py-scikit-learn/package.py +++ b/var/spack/repos/builtin/packages/py-scikit-learn/package.py @@ -54,7 +54,8 @@ class PyScikitLearn(PythonPackage): # Based on PyPI wheel availability with default_args(type=("build", "link", "run")): - depends_on("python@3.9:3.12", when="@1.4:") + depends_on("python@3.9:3.13", when="@1.5.2:") + depends_on("python@3.9:3.12", when="@1.4:1.5.1") depends_on("python@3.8:3.12", when="@1.3.1:1.3") depends_on("python@3.8:3.11", when="@1.1.3:1.3.0") depends_on("python@3.8:3.10", when="@1.1.0:1.1.2") diff --git a/var/spack/repos/builtin/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py index 79bb27a1d6bf19..5c2d41645a181a 100644 --- a/var/spack/repos/builtin/packages/py-scipy/package.py +++ b/var/spack/repos/builtin/packages/py-scipy/package.py @@ -178,6 +178,13 @@ class PyScipy(PythonPackage): patch("scipy-clang.patch", when="@1.5.0:1.6.3 %clang") + # https://github.com/scipy/scipy/issues/21884 + patch( + "https://github.com/scipy/scipy/commit/ab7d08c6148286059f6498ab5c3070268d13cbd9.patch?full_index=1", + sha256="37209324c6c2d9bf9284bf4726ec3ea7ecafabf736c7a72cf6789af97aebd30b", + when="@1.8.0:1.14.0", + ) + @property def archive_files(self): return [join_path(self.stage.source_path, "build", "meson-logs", "meson-log.txt")] diff --git a/var/spack/repos/builtin/packages/py-setuptools/package.py b/var/spack/repos/builtin/packages/py-setuptools/package.py index bdfc00a9e15d8d..677c4c06d2cef4 100644 --- a/var/spack/repos/builtin/packages/py-setuptools/package.py +++ b/var/spack/repos/builtin/packages/py-setuptools/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -95,5 +96,4 @@ def install(self, spec, prefix): # # We work around this issue by installing setuptools from wheels whl = self.stage.archive_file - args = ["-m", "pip"] + std_pip_args + ["--prefix=" + prefix, whl] - python(*args) + python("-m", "pip", *PythonPipBuilder.std_args(self), f"--prefix={prefix}", whl) diff --git a/var/spack/repos/builtin/packages/py-slepc4py/package.py b/var/spack/repos/builtin/packages/py-slepc4py/package.py index f02707046b5aed..41d65e294e4504 100644 --- a/var/spack/repos/builtin/packages/py-slepc4py/package.py +++ b/var/spack/repos/builtin/packages/py-slepc4py/package.py @@ -18,6 +18,7 @@ class PySlepc4py(PythonPackage): license("BSD-2-Clause") version("main", branch="main") + version("3.22.1", sha256="056d98bf09f5202d25842d5a4a4f553445103e1e26155da52f007c508f3140f8") version("3.22.0", sha256="53db52a72e126787768732790ca73dbc6ff6e49d4d1152e9c3641ba71b97738e") version("3.21.2", sha256="f611ff74e4749f21445b2369dbd0edf404cdf639eecafd54187d0a2865d521a0") version("3.21.1", sha256="bc8e0e270643eef9b63b249080b8fe4433be0b697d55032d9f768ef310bd7b07") diff --git a/var/spack/repos/builtin/packages/py-sphinxcontrib-spelling/package.py b/var/spack/repos/builtin/packages/py-sphinxcontrib-spelling/package.py new file mode 100644 index 00000000000000..19e0de61b66264 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-sphinxcontrib-spelling/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PySphinxcontribSpelling(PythonPackage): + """A spelling checker for Sphinx-based documentation""" + + homepage = "https://sphinxcontrib-spelling.readthedocs.io" + pypi = "sphinxcontrib-spelling/sphinxcontrib-spelling-8.0.0.tar.gz" + + maintainers("rbberger") + + license("BSD-2-Clause") + + version("8.0.0", sha256="199d0a16902ad80c387c2966dc9eb10f565b1fb15ccce17210402db7c2443e5c") + + depends_on("python@3.7:") + depends_on("py-sphinx@3:") + depends_on("py-pyenchant@3.1.1:") diff --git a/var/spack/repos/builtin/packages/py-starlette/package.py b/var/spack/repos/builtin/packages/py-starlette/package.py index 7f51b279732eeb..ea2e1d260164d3 100644 --- a/var/spack/repos/builtin/packages/py-starlette/package.py +++ b/var/spack/repos/builtin/packages/py-starlette/package.py @@ -15,6 +15,12 @@ class PyStarlette(PythonPackage): license("BSD-3-Clause") + version("0.41.2", sha256="9834fd799d1a87fd346deb76158668cfa0b0d56f85caefe8268e2d97c3468b62") + version("0.37.2", sha256="9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823") + version("0.36.3", sha256="90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080") + version("0.35.1", sha256="3e2639dac3520e4f58734ed22553f950d3f3cb1001cd2eaac4d57e8cdc5f66bc") + version("0.32.0", sha256="87c899fe3aee6a42f711380b03e1d244a21079529cb3dbe1a5109e60915e0bbb") + version("0.28.0", sha256="7bf3da5e997e796cc202cef2bd3f96a7d9b1e1943203c2fe2b42e020bc658482") version("0.27.0", sha256="6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75") version("0.23.1", sha256="8510e5b3d670326326c5c1d4cb657cc66832193fe5d5b7015a51c7b1e1b1bf42") version("0.22.0", sha256="b092cbc365bea34dd6840b42861bdabb2f507f8671e642e8272d2442e08ea4ff") diff --git a/var/spack/repos/builtin/packages/py-tables/package.py b/var/spack/repos/builtin/packages/py-tables/package.py index e2242acf8cc348..54aa7771fbafec 100644 --- a/var/spack/repos/builtin/packages/py-tables/package.py +++ b/var/spack/repos/builtin/packages/py-tables/package.py @@ -31,8 +31,8 @@ class PyTables(PythonPackage): depends_on("cxx", type="build") # generated variant("zlib", default=True, description="Support for zlib compression") - variant("bzip2", default=False, description="Support for bzip2 compression") - variant("lzo", default=False, description="Support for lzo compression") + variant("bzip2", default=True, description="Support for bzip2 compression") + variant("lzo", default=True, description="Support for lzo compression") # pyproject.toml depends_on("py-setuptools@61:", when="@3.9:", type="build") @@ -65,6 +65,9 @@ class PyTables(PythonPackage): depends_on("c-blosc@1.11.1:", when="@3.8:") depends_on("c-blosc@1.4.1:", when="@3.3:") + # blosc2 headers are directly included + depends_on("c-blosc2") + depends_on("zlib-api", when="+zlib") depends_on("bzip2", when="+bzip2") depends_on("lzo", when="+lzo") diff --git a/var/spack/repos/builtin/packages/py-tensorboard-data-server/package.py b/var/spack/repos/builtin/packages/py-tensorboard-data-server/package.py index e778ecf5e13f9e..5a2b3043c20ca7 100644 --- a/var/spack/repos/builtin/packages/py-tensorboard-data-server/package.py +++ b/var/spack/repos/builtin/packages/py-tensorboard-data-server/package.py @@ -5,6 +5,7 @@ import glob +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -60,5 +61,4 @@ def install(self, spec, prefix): ) wheel = glob.glob("*.whl")[0] - args = std_pip_args + ["--prefix=" + prefix, wheel] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={prefix}", wheel) diff --git a/var/spack/repos/builtin/packages/py-tensorboard/package.py b/var/spack/repos/builtin/packages/py-tensorboard/package.py index 83f3f1a464c6ed..a7d85ca17fe8e1 100644 --- a/var/spack/repos/builtin/packages/py-tensorboard/package.py +++ b/var/spack/repos/builtin/packages/py-tensorboard/package.py @@ -17,10 +17,11 @@ class PyTensorboard(PythonPackage): # Requires tensorflow skip_modules = ["tensorboard.summary._tf"] - maintainers("aweits") - license("Apache-2.0") + maintainers("aweits") + version("2.18.0", sha256="107ca4821745f73e2aefa02c50ff70a9b694f39f790b11e6f682f7d326745eab") + version("2.17.1", sha256="253701a224000eeca01eee6f7e978aea7b408f60b91eb0babdb04e78947b773e") version("2.17.0", sha256="859a499a9b1fb68a058858964486627100b71fcb21646861c61d31846a6478fb") version("2.16.2", sha256="9f2b4e7dad86667615c0e5cd072f1ea8403fc032a299f0072d6f74855775cc45") version("2.16.1", sha256="928b62567911a8eeb2ebeb7482a9e4599b35f6713a6f2c56655259c18a139569") @@ -59,19 +60,20 @@ class PyTensorboard(PythonPackage): depends_on("py-grpcio@1.24.3:", when="@2.3:") depends_on("py-grpcio@1.23.3:", when="@2.2") depends_on("py-markdown@2.6.8:") - depends_on("py-numpy@1.12.0:") + depends_on("py-numpy@1.12:") # https://github.com/tensorflow/tensorboard/pull/6871 - depends_on("py-numpy@:1") + depends_on("py-numpy@:1", when="@:2.17") # https://github.com/tensorflow/tensorboard/pull/5138 depends_on("py-numpy@:1.23", when="@:2.5") - depends_on("py-protobuf@3.19.6:4", when="@2.17:") - depends_on("py-protobuf@3.19.6:", when="@2.15.2:2.16") + depends_on("py-packaging", when="@2.18:") + depends_on("py-protobuf@3.19.6:", when="@2.15.2:2.16,2.18:") + depends_on("py-protobuf@3.19.6:4", when="@2.17") depends_on("py-protobuf@3.19.6:4.23", when="@2.12:2.15.1") depends_on("py-protobuf@3.9.2:3", when="@2.11") depends_on("py-protobuf@3.9.2:3.19", when="@2.9:2.10") depends_on("py-protobuf@3.6.0:3.19", when="@:2.8") - depends_on("py-setuptools@41.0.0:") - depends_on("py-six@1.10.0:", when="@:2.4,2.14:") + depends_on("py-setuptools@41:") + depends_on("py-six@1.10:", when="@:2.4,2.14:") depends_on("py-tensorboard-data-server@0.7", when="@2.12:") depends_on("py-tensorboard-data-server@0.6", when="@2.5:2.11") depends_on("py-werkzeug@1.0.1:", when="@2.9:") diff --git a/var/spack/repos/builtin/packages/py-tensorflow-estimator/package.py b/var/spack/repos/builtin/packages/py-tensorflow-estimator/package.py index 02ed47516997f3..d3308b15b3abf0 100644 --- a/var/spack/repos/builtin/packages/py-tensorflow-estimator/package.py +++ b/var/spack/repos/builtin/packages/py-tensorflow-estimator/package.py @@ -5,6 +5,7 @@ import tempfile +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -97,6 +98,5 @@ def install(self, spec, prefix): buildpath = join_path(self.stage.source_path, "spack-build") build_pip_package("--src", buildpath) with working_dir(buildpath): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(self.tmp_path) diff --git a/var/spack/repos/builtin/packages/py-tensorflow-hub/package.py b/var/spack/repos/builtin/packages/py-tensorflow-hub/package.py index 58916a38d03dda..b126d8a455ed25 100644 --- a/var/spack/repos/builtin/packages/py-tensorflow-hub/package.py +++ b/var/spack/repos/builtin/packages/py-tensorflow-hub/package.py @@ -5,6 +5,7 @@ import tempfile +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -78,8 +79,7 @@ def install(self, spec, prefix): ) with working_dir(insttmp_path): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(tmp_path) remove_linked_tree(insttmp_path) diff --git a/var/spack/repos/builtin/packages/py-tensorflow-probability/package.py b/var/spack/repos/builtin/packages/py-tensorflow-probability/package.py index 9f8360d432dcc6..4c73617d39c3ee 100644 --- a/var/spack/repos/builtin/packages/py-tensorflow-probability/package.py +++ b/var/spack/repos/builtin/packages/py-tensorflow-probability/package.py @@ -5,6 +5,7 @@ import tempfile +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -118,7 +119,6 @@ def install(self, spec, prefix): bazel(*args) with working_dir(join_path("bazel-bin", "pip_pkg.runfiles", "tensorflow_probability")): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(self.tmp_path) diff --git a/var/spack/repos/builtin/packages/py-tensorflow/package.py b/var/spack/repos/builtin/packages/py-tensorflow/package.py index 726f68b1c6cd09..72cb7092d5249b 100644 --- a/var/spack/repos/builtin/packages/py-tensorflow/package.py +++ b/var/spack/repos/builtin/packages/py-tensorflow/package.py @@ -9,6 +9,7 @@ import tempfile from spack.build_environment import optimization_flags +from spack.build_systems.python import PythonPipBuilder from spack.package import * rocm_dependencies = [ @@ -41,12 +42,13 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension): homepage = "https://www.tensorflow.org" url = "https://github.com/tensorflow/tensorflow/archive/v2.3.1.tar.gz" git = "https://github.com/tensorflow/tensorflow.git" - - maintainers("adamjstewart", "aweits") import_modules = ["tensorflow"] license("Apache-2.0") + maintainers("adamjstewart", "aweits") + version("2.18.0", sha256="d7876f4bb0235cac60eb6316392a7c48676729860da1ab659fb440379ad5186d") + version("2.17.1", sha256="2d3cfb48510f92f3a52fb05b820481c6f066a342a9f5296fe26d72c4ea757700") version("2.17.0", sha256="9cc4d5773b8ee910079baaecb4086d0c28939f024dd74b33fc5e64779b6533dc") version("2.16.2", sha256="023849bf253080cb1e4f09386f5eb900492da2288274086ed6cfecd6d99da9eb") version("2.16.1", sha256="c729e56efc945c6df08efe5c9f5b8b89329c7c91b8f40ad2bb3e13900bd4876d") @@ -122,14 +124,18 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension): version("2.2.1", sha256="e6a28e64236d729e598dbeaa02152219e67d0ac94d6ed22438606026a02e0f88") version("2.2.0", sha256="69cd836f87b8c53506c4f706f655d423270f5a563b76dc1cfa60fbc3184185a3") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("mkl", default=False, description="Build with MKL support") variant("jemalloc", default=False, description="Build with jemalloc as malloc support") variant("gcp", default=False, description="Build with Google Cloud Platform support") - variant("hdfs", default=False, description="Build with Hadoop File System support") - variant("aws", default=False, description="Build with Amazon AWS Platform support") + variant( + "hdfs", default=False, when="@:2.17", description="Build with Hadoop File System support" + ) + variant( + "aws", default=False, when="@:2.17", description="Build with Amazon AWS Platform support" + ) variant("xla", default=sys.platform != "darwin", description="Build with XLA JIT support") variant("gdr", default=False, description="Build with GDR support") variant("verbs", default=False, description="Build with libverbs support") @@ -224,36 +230,13 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension): depends_on("py-google-pasta@0.2:0", when="@2.4:2.6") depends_on("py-google-pasta@0.1.8:", when="@2.2:2.3") depends_on("py-google-pasta@0.1.6:", when="@:2.1") - depends_on("py-h5py@3.10:", when="@2.16:") - depends_on("py-h5py@2.9:", when="@2.7:2.15") - depends_on("py-h5py@3.1", when="@2.5:2.6") - depends_on("py-h5py@2.10", when="@2.2:2.4") - depends_on("py-h5py@:2.10.0", when="@2.1.3:2.1") - # propagate the mpi variant setting for h5py/hdf5 to avoid unexpected crashes - depends_on("py-h5py+mpi", when="@2.1.3:+mpi") - depends_on("py-h5py~mpi", when="@2.1.3:~mpi") - depends_on("hdf5+mpi", when="@2.1.3:+mpi") - depends_on("hdf5~mpi", when="@2.1.3:~mpi") depends_on("py-libclang@13:", when="@2.9:") depends_on("py-libclang@9.0.1:", when="@2.7:2.8") - depends_on("py-ml-dtypes@0.3.1:0.4", when="@2.17:") - depends_on("py-ml-dtypes@0.3.1:0.3", when="@2.15.1:2.16") - depends_on("py-ml-dtypes@0.2", when="@2.15.0") - depends_on("py-ml-dtypes@0.2.0", when="@2.14") - depends_on("py-numpy@1.23.5:", when="@2.14:") - depends_on("py-numpy@1.22:1.24.3", when="@2.13:") - depends_on("py-numpy@1.22:1.23", when="@2.12") - depends_on("py-numpy@1.20:", when="@2.8:2.11") - depends_on("py-numpy@1.14.5:", when="@2.7") - depends_on("py-numpy@1.19.2:1.19", when="@2.4:2.6") - # https://github.com/tensorflow/tensorflow/issues/40688 - depends_on("py-numpy@1.16.0:1.18", when="@:2.3") - # https://github.com/tensorflow/tensorflow/issues/67291 - depends_on("py-numpy@:1") depends_on("py-opt-einsum@2.3.2:", when="@:2.3,2.7:") depends_on("py-opt-einsum@3.3", when="@2.4:2.6") depends_on("py-packaging", when="@2.9:") - depends_on("py-protobuf@3.20.3:4.20,4.21.6:4", when="@2.12:") + depends_on("py-protobuf@3.20.3:4.20,4.21.6:5", when="@2.18:") + depends_on("py-protobuf@3.20.3:4.20,4.21.6:4", when="@2.12:2.17") depends_on("py-protobuf@3.9.2:", when="@2.3:2.11") depends_on("py-protobuf@3.8.0:", when="@:2.2") # https://github.com/protocolbuffers/protobuf/issues/10051 @@ -286,13 +269,40 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension): depends_on("py-grpcio@1.32", when="@2.4") depends_on("py-grpcio@1.8.6:", when="@:2.3") - for minor_ver in range(2, 18): + for minor_ver in range(2, 19): depends_on("py-tensorboard@2.{}".format(minor_ver), when="@2.{}".format(minor_ver)) # TODO: support circular run-time dependencies - # depends_on('py-tensorflow-estimator') # depends_on('py-keras') + depends_on("py-numpy@1.26:2.0", when="@2.18:") + depends_on("py-numpy@1.23.5:", when="@2.14:2.17") + depends_on("py-numpy@1.22:1.24.3", when="@2.13") + depends_on("py-numpy@1.22:1.23", when="@2.12") + depends_on("py-numpy@1.20:", when="@2.8:2.11") + depends_on("py-numpy@1.14.5:", when="@2.7") + depends_on("py-numpy@1.19.2:1.19", when="@2.4:2.6") + # https://github.com/tensorflow/tensorflow/issues/40688 + depends_on("py-numpy@1.16.0:1.18", when="@:2.3") + # https://github.com/tensorflow/tensorflow/issues/67291 + depends_on("py-numpy@:1", when="@:2.17") + depends_on("py-h5py@3.11:", when="@2.18:") + depends_on("py-h5py@3.10:", when="@2.16:") + depends_on("py-h5py@2.9:", when="@2.7:2.15") + depends_on("py-h5py@3.1", when="@2.5:2.6") + depends_on("py-h5py@2.10", when="@2.2:2.4") + depends_on("py-h5py@:2.10.0", when="@2.1.3:2.1") + # propagate the mpi variant setting for h5py/hdf5 to avoid unexpected crashes + depends_on("py-h5py+mpi", when="@2.1.3:+mpi") + depends_on("py-h5py~mpi", when="@2.1.3:~mpi") + depends_on("hdf5+mpi", when="@2.1.3:+mpi") + depends_on("hdf5~mpi", when="@2.1.3:~mpi") + depends_on("py-ml-dtypes@0.4", when="@2.18:") + depends_on("py-ml-dtypes@0.3.1:0.4", when="@2.17") + depends_on("py-ml-dtypes@0.3.1:0.3", when="@2.15.1:2.16") + depends_on("py-ml-dtypes@0.2", when="@2.15.0") + depends_on("py-ml-dtypes@0.2.0", when="@2.14") + # Historical dependencies depends_on("py-jax@0.3.15:", when="@2.12") depends_on("py-keras-preprocessing@1.1.1:", when="@2.7:2.10") @@ -433,7 +443,7 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension): # see https://github.com/tensorflow/tensorflow/issues/62490 # and https://github.com/abseil/abseil-cpp/issues/1665 - patch("absl_neon.patch", when="@2.16.1: target=aarch64:") + patch("absl_neon.patch", when="@2.16.1:2.17 target=aarch64:") # reverting change otherwise the c467913 commit patch won't apply patch( @@ -481,7 +491,7 @@ def flag_handler(self, name, flags): name == "ldflags" and spec.target.family == "aarch64" and "ubuntu" in spec.os - and spec.compiler.name == "gcc" + and spec.satisfies("%gcc") and "cortex_a53" not in spec.target.name ): flags.append("-mno-fix-cortex-a53-843419") @@ -609,6 +619,7 @@ def setup_build_environment(self, env): # Do you wish to build TensorFlow with CUDA support? if "+cuda" in spec: env.set("TF_NEED_CUDA", "1") + env.set("CUDA_NVCC", "1") # Do you want to use clang as CUDA compiler? env.set("TF_CUDA_CLANG", "0") @@ -670,6 +681,7 @@ def setup_build_environment(self, env): # only supports compute capabilities >= 3.5 capabilities = CudaPackage.compute_capabilities(spec.variants["cuda_arch"].value) env.set("TF_CUDA_COMPUTE_CAPABILITIES", ",".join(capabilities)) + env.set("HERMETIC_CUDA_COMPUTE_CAPABILITIES", ",".join(capabilities)) else: env.set("TF_NEED_CUDA", "0") @@ -863,6 +875,8 @@ def build(self, spec, prefix): if "+cuda" in spec: args.append("--config=cuda") + if spec.satisfies("@2.18:"): + args.append("--config=cuda_wheel") if "+rocm" in spec: args.append("--config=rocm") @@ -911,12 +925,10 @@ def install(self, spec, prefix): ) with working_dir(buildpath): wheel = glob.glob("*.whl")[0] - args = std_pip_args + ["--prefix=" + prefix, wheel] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", wheel) else: buildpath = join_path(self.stage.source_path, "spack-build") with working_dir(buildpath): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") remove_linked_tree(tmp_path) diff --git a/var/spack/repos/builtin/packages/py-textx/package.py b/var/spack/repos/builtin/packages/py-textx/package.py new file mode 100644 index 00000000000000..03911b530ea9d6 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-textx/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyTextx(PythonPackage): + """Meta-language for DSL implementation inspired by Xtext.""" + + homepage = "https://textx.github.io/textX/" + pypi = "textx/textx-4.0.1.tar.gz" + + license("MIT") + + version("4.0.1", sha256="84aff5c95fd2c947402fcbe83eeeddc23aabcfed3464ab84184ef193c52d831a") + + depends_on("c", type="build") + depends_on("py-flit-core@3.8:3", type="build") + depends_on("python@3.8:3.12", type=("build", "run")) + depends_on("py-arpeggio@2:", type=("build", "run")) + depends_on("py-importlib-metadata", when="^python@:3.9", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-tfdlpack/package.py b/var/spack/repos/builtin/packages/py-tfdlpack/package.py index f3c79f69a8860e..d910096cfdbe93 100644 --- a/var/spack/repos/builtin/packages/py-tfdlpack/package.py +++ b/var/spack/repos/builtin/packages/py-tfdlpack/package.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -40,8 +41,7 @@ def cmake_args(self): def install(self, spec, prefix): with working_dir("python"): - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") def setup_run_environment(self, env): # Prevent TensorFlow from taking over the whole GPU diff --git a/var/spack/repos/builtin/packages/py-timm/package.py b/var/spack/repos/builtin/packages/py-timm/package.py index 7a993364b6cd74..dbf659b68c89c1 100644 --- a/var/spack/repos/builtin/packages/py-timm/package.py +++ b/var/spack/repos/builtin/packages/py-timm/package.py @@ -12,10 +12,10 @@ class PyTimm(PythonPackage): homepage = "https://github.com/rwightman/pytorch-image-models" pypi = "timm/timm-0.4.12.tar.gz" - maintainers("adamjstewart") - license("Apache-2.0") + maintainers("adamjstewart") + version("1.0.11", sha256="a005f72b87e67ed30cdbf405a9ffd4e723360c780a43b1cefe266af8ecc9d151") version("0.9.7", sha256="2bfb1029e90b72e65eb9c75556169815f2e82257eaa1f6ebd623a4b4a52867a2") version("0.9.5", sha256="669835f0030cfb2412c464b7b563bb240d4d41a141226afbbf1b457e4f18cff1") version("0.9.2", sha256="d0977cc5e02c69bda979fca8b52aa315a5f2cb64ebf8ad2c4631b1e452762c14") @@ -26,20 +26,22 @@ class PyTimm(PythonPackage): version("0.5.4", sha256="5d7b92e66a76c432009aba90d515ea7a882aae573415a7c5269e3617df901c1f") version("0.4.12", sha256="b14be70dbd4528b5ca8657cf5bc2672c7918c3d9ebfbffe80f4785b54e884b1e") - # https://github.com/huggingface/pytorch-image-models/commit/f744bda994ec305a823483bf52a20c1440205032 - depends_on("python@3.8:", when="@0.9.0", type=("build", "run")) - # https://github.com/huggingface/pytorch-image-models/issues/1530 - # https://github.com/huggingface/pytorch-image-models/pull/1649 - depends_on("python@:3.10", when="@:0.6.12", type=("build", "run")) - - depends_on("py-setuptools", type="build") - depends_on("py-torch@1.7:", when="@0.6:", type=("build", "run")) - depends_on("py-torch@1.4:", type=("build", "run")) - depends_on("py-torchvision", type=("build", "run")) - depends_on("py-pyyaml", when="@0.6:", type=("build", "run")) - depends_on("py-huggingface-hub", when="@0.6:", type=("build", "run")) - depends_on("py-safetensors", when="@0.9:", type=("build", "run")) - - # https://github.com/rwightman/pytorch-image-models/pull/1256 - depends_on("pil@:9", when="@:0.5", type=("build", "run")) - depends_on("py-numpy", when="@:0.5", type=("build", "run")) + with default_args(type="build"): + depends_on("py-pdm-backend", when="@1:") + depends_on("py-setuptools", when="@:0") + + with default_args(type=("build", "run")): + # https://github.com/huggingface/pytorch-image-models/issues/1530 + # https://github.com/huggingface/pytorch-image-models/pull/1649 + depends_on("python@:3.10", when="@:0.6.12", type=("build", "run")) + + depends_on("py-torch@1.7:", when="@0.6:", type=("build", "run")) + depends_on("py-torch@1.4:", type=("build", "run")) + depends_on("py-torchvision", type=("build", "run")) + depends_on("py-pyyaml", when="@0.6:", type=("build", "run")) + depends_on("py-huggingface-hub", when="@0.6:", type=("build", "run")) + depends_on("py-safetensors", when="@0.9:", type=("build", "run")) + + # https://github.com/rwightman/pytorch-image-models/pull/1256 + depends_on("pil@:9", when="@:0.5", type=("build", "run")) + depends_on("py-numpy", when="@:0.5", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/py-torch/package.py b/var/spack/repos/builtin/packages/py-torch/package.py index f487eff524b528..7533eb6b8c93e1 100644 --- a/var/spack/repos/builtin/packages/py-torch/package.py +++ b/var/spack/repos/builtin/packages/py-torch/package.py @@ -17,15 +17,16 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage): git = "https://github.com/pytorch/pytorch.git" submodules = True - maintainers("adamjstewart") - # Exact set of modules is version- and variant-specific, just attempt to import the # core libraries to ensure that the package was successfully installed. import_modules = ["torch", "torch.autograd", "torch.nn", "torch.utils"] license("BSD-3-Clause") + maintainers("adamjstewart") version("main", branch="main") + version("2.5.1", tag="v2.5.1", commit="a8d6afb511a69687bbb2b7e88a3cf67917e1697e") + version("2.5.0", tag="v2.5.0", commit="32f585d9346e316e554c8d9bf7548af9f62141fc") version("2.4.1", tag="v2.4.1", commit="ee1b6804381c57161c477caa380a840a84167676") version("2.4.0", tag="v2.4.0", commit="d990dada86a8ad94882b5c23e859b88c0c255bda") version("2.3.1", tag="v2.3.1", commit="63d5e9221bedd1546b7d364b5ce4171547db12a9") @@ -137,7 +138,8 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage): # Required dependencies # Based on PyPI wheel availability with default_args(type=("build", "link", "run")): - depends_on("python@3.8:3.12", when="@2.2:") + depends_on("python@3.9:3.13", when="@2.5:") + depends_on("python@3.8:3.12", when="@2.2:2.4") depends_on("python@3.8:3.11", when="@2.0:2.1") depends_on("python@:3.10", when="@1.11:1") depends_on("python@:3.9", when="@1.7.1:1.10") @@ -186,7 +188,9 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage): # depends_on("xnnpack@2021-02-22", when="@1.8:1.9+xnnpack") # depends_on("xnnpack@2020-03-23", when="@1.6:1.7+xnnpack") depends_on("benchmark", when="@1.6:+test") - depends_on("cpuinfo@2023-11-04", when="@2.3:") + depends_on("cpuinfo@2024-09-06", when="@2.5.1:") + depends_on("cpuinfo@2024-08-30", when="@2.5.0") + depends_on("cpuinfo@2023-11-04", when="@2.3:2.4") depends_on("cpuinfo@2023-01-13", when="@2.1:2.2") depends_on("cpuinfo@2022-08-19", when="@1.13:2.0") depends_on("cpuinfo@2020-12-17", when="@1.8:1.12") @@ -230,7 +234,8 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage): depends_on("pthreadpool@2020-10-05", when="@1.8") depends_on("pthreadpool@2020-06-15", when="@1.6:1.7") with default_args(type=("build", "link", "run")): - depends_on("py-pybind11@2.12.0:", when="@2.3:") + depends_on("py-pybind11@2.13.5:", when="@2.5:") + depends_on("py-pybind11@2.12.0:", when="@2.3:2.4") depends_on("py-pybind11@2.11.0:", when="@2.1:2.2") depends_on("py-pybind11@2.10.1:", when="@2.0") depends_on("py-pybind11@2.10.0:", when="@1.13:1") diff --git a/var/spack/repos/builtin/packages/py-torchaudio/package.py b/var/spack/repos/builtin/packages/py-torchaudio/package.py index 372cbca9367dea..59a7e2825b223c 100644 --- a/var/spack/repos/builtin/packages/py-torchaudio/package.py +++ b/var/spack/repos/builtin/packages/py-torchaudio/package.py @@ -18,6 +18,8 @@ class PyTorchaudio(PythonPackage): maintainers("adamjstewart") version("main", branch="main") + version("2.5.1", tag="v2.5.1", commit="1661daf10599ca8889f092ec37814fabbe202bb0") + version("2.5.0", tag="v2.5.0", commit="56bc006d56a0d4960de6a1e0b6340cba4eda05cd") version("2.4.1", tag="v2.4.1", commit="e8cbe17769796ce963fbc71b8990f1474774e6d2") version("2.4.0", tag="v2.4.0", commit="69d40773dc4ed86643820c21a8a880e4d074a46e") version("2.3.1", tag="v2.3.1", commit="3edcf69e78a3c9a3077a11159861422440ec7d4a") @@ -55,13 +57,16 @@ class PyTorchaudio(PythonPackage): with default_args(type=("build", "link", "run")): # Based on PyPI wheel availability - depends_on("python@3.8:3.12", when="@2.2:") + depends_on("python@3.9:3.12", when="@2.5:") + depends_on("python@3.8:3.12", when="@2.2:2.4") depends_on("python@3.8:3.11", when="@2.0:2.1") depends_on("python@:3.10", when="@0.12:0") depends_on("python@:3.9", when="@0.7.2:0.11") depends_on("python@:3.8", when="@:0.7.0") depends_on("py-torch@main", when="@main") + depends_on("py-torch@2.5.1", when="@2.5.1") + depends_on("py-torch@2.5.0", when="@2.5.0") depends_on("py-torch@2.4.1", when="@2.4.1") depends_on("py-torch@2.4.0", when="@2.4.0") depends_on("py-torch@2.3.1", when="@2.3.1") @@ -99,6 +104,9 @@ class PyTorchaudio(PythonPackage): depends_on("cmake@3.5:", when="@0.8:", type="build") depends_on("ninja", when="@0.8:", type="build") + # prior to 2.1 ffmpeg was vendored + depends_on("ffmpeg@:6", when="@2.1:") + # setup.py depends_on("py-setuptools", type="build") depends_on("py-pybind11", when="@0.12:", type=("build", "link")) @@ -113,10 +121,39 @@ class PyTorchaudio(PythonPackage): ) conflicts("^cuda@12.5:", when="@:2.1") + def patch(self): + # Add missing rpaths, which requires patching due to hardcoded cmake_args + if self.spec.satisfies("@0.8:"): + rpaths = [f"{python_platlib}/torchaudio/lib", f"{python_platlib}/torio/lib"] + cmake_args = [ + f"-DCMAKE_INSTALL_RPATH={';'.join(rpaths)}", + "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON", + ] + cmake_str = ", ".join(f"'{arg}'" for arg in cmake_args) + filter_file( + "cmake_args = [", + f"cmake_args = [{cmake_str},", + "tools/setup_helpers/extension.py", + string=True, + ) + + def flag_handler(self, name, flags): + # https://github.com/pytorch/vision/issues/8653 + if name == "ldflags": + if self.spec.satisfies("%apple-clang@15:"): + flags.append("-Wl,-ld_classic") + return (flags, None, None) + def setup_build_environment(self, env): # tools/setup_helpers/extension.py env.set("BUILD_SOX", 0) + if self.spec.satisfies("@2.1:"): + env.set("FFMPEG_ROOT", self.spec["ffmpeg"].prefix) + else: + # a specific ffmpeg is built but not installed, so just disable + env.set("USE_FFMPEG", "0") + if "+cuda" in self.spec["py-torch"]: env.set("USE_CUDA", 1) else: diff --git a/var/spack/repos/builtin/packages/py-torchdata/package.py b/var/spack/repos/builtin/packages/py-torchdata/package.py index db1b37305e718c..63ee044740097e 100644 --- a/var/spack/repos/builtin/packages/py-torchdata/package.py +++ b/var/spack/repos/builtin/packages/py-torchdata/package.py @@ -18,6 +18,7 @@ class PyTorchdata(PythonPackage): license("BSD-3-Clause") version("main", branch="main") + version("0.9.0", sha256="b547bbe848ad813cc5365fe0bb02051150bec6c7c4ee7bffd6b6d3d7bdeddd75") version("0.8.0", sha256="d5d27b264e79d7d00ad4998f14d097b770332d979672dceb6d038caf204f1208") version("0.7.1", sha256="ef9bbdcee759b53c3c9d99e76eb0a66da33d36bfb7f859a25a9b5e737a51fa23") version("0.7.0", sha256="0b444719c3abc67201ed0fea92ea9c4100e7f36551ba0d19a09446cc11154eb3") @@ -31,35 +32,38 @@ class PyTorchdata(PythonPackage): depends_on("cxx", type="build") - # https://github.com/pytorch/data#version-compatibility - depends_on("python@3.8:3.12", when="@0.8:", type=("build", "run")) - depends_on("python@3.8:3.11", when="@0.6:0.7", type=("build", "run")) - depends_on("python@3.7:3.10", when="@:0.5", type=("build", "run")) + with default_args(type="build"): + # pyproject.toml + depends_on("py-setuptools") - # pyproject.toml - depends_on("py-setuptools", type="build") + # CMakeLists.txt + depends_on("cmake@3.13:", when="@0.4:") + depends_on("ninja", when="@0.4:") - # CMakeLists.txt - depends_on("cmake@3.13:", when="@0.4:", type="build") - depends_on("ninja", when="@0.4:", type="build") + with default_args(type=("build", "run")): + # https://github.com/pytorch/data#version-compatibility + depends_on("python@3.9:3.12", when="@0.9:") + depends_on("python@3.8:3.12", when="@0.8") + depends_on("python@3.8:3.11", when="@0.6:0.7") + depends_on("python@3.7:3.10", when="@:0.5") - # https://github.com/pytorch/data#version-compatibility - depends_on("py-torch@main", when="@main", type=("build", "run")) - depends_on("py-torch@2.4.0", when="@0.8.0", type=("build", "run")) - depends_on("py-torch@2.1.1", when="@0.7.1", type=("build", "run")) - depends_on("py-torch@2.1.0", when="@0.7.0", type=("build", "run")) - depends_on("py-torch@2.0.1", when="@0.6.1", type=("build", "run")) - depends_on("py-torch@2.0.0", when="@0.6.0", type=("build", "run")) - depends_on("py-torch@1.13.1", when="@0.5.1", type=("build", "run")) - depends_on("py-torch@1.13.0", when="@0.5.0", type=("build", "run")) - depends_on("py-torch@1.12.1", when="@0.4.1", type=("build", "run")) - depends_on("py-torch@1.12.0", when="@0.4.0", type=("build", "run")) - depends_on("py-torch@1.11.0", when="@0.3.0", type=("build", "run")) + depends_on("py-torch@main", when="@main") + depends_on("py-torch@2.5.0", when="@0.9.0") + depends_on("py-torch@2.4.0", when="@0.8.0") + depends_on("py-torch@2.1.1", when="@0.7.1") + depends_on("py-torch@2.1.0", when="@0.7.0") + depends_on("py-torch@2.0.1", when="@0.6.1") + depends_on("py-torch@2.0.0", when="@0.6.0") + depends_on("py-torch@1.13.1", when="@0.5.1") + depends_on("py-torch@1.13.0", when="@0.5.0") + depends_on("py-torch@1.12.1", when="@0.4.1") + depends_on("py-torch@1.12.0", when="@0.4.0") + depends_on("py-torch@1.11.0", when="@0.3.0") - # requirements.txt - depends_on("py-urllib3@1.25:", type=("build", "run")) - depends_on("py-requests", type=("build", "run")) - depends_on("py-portalocker@2:", when="@0.4:0.5", type=("build", "run")) + # requirements.txt + depends_on("py-urllib3@1.25:") + depends_on("py-requests") + depends_on("py-portalocker@2:", when="@0.4:0.5") # third_party/CMakeLists.txt depends_on("py-pybind11", when="@0.4:") diff --git a/var/spack/repos/builtin/packages/py-torchmetrics/package.py b/var/spack/repos/builtin/packages/py-torchmetrics/package.py index 70bc52fafa24bd..5dbcabad2e039e 100644 --- a/var/spack/repos/builtin/packages/py-torchmetrics/package.py +++ b/var/spack/repos/builtin/packages/py-torchmetrics/package.py @@ -15,6 +15,10 @@ class PyTorchmetrics(PythonPackage): license("Apache-2.0") maintainers("adamjstewart") + version("1.6.0", sha256="aebba248708fb90def20cccba6f55bddd134a58de43fb22b0c5ca0f3a89fa984") + version("1.5.2", sha256="2d0e4957af0ea76438d2779fe1a626d8cba6cda8607eadb54267598153e7ea63") + version("1.5.1", sha256="9701632cf811bc460abf07bd7b971b79c1ae9c8231e03d495b53a0975e43fe07") + version("1.5.0", sha256="c18e68bab4104ad7d2285af601ddc6dc04f9f3b7cafaa8ad13fa1dcc539e33b6") version("1.4.3", sha256="5554a19167e91f543afe82ff58a01059c8eec854359ad22896449c2c8fb0ad89") version("1.4.2", sha256="7a40cbec85e5645090812b87601696b4adf158294ec8c407ae58a71710938b87") version("1.4.0", sha256="0b1e5acdcc9beb05bfe369d3d56cfa5b143f060ebfd6079d19ccc59ba46465b3") @@ -61,6 +65,7 @@ class PyTorchmetrics(PythonPackage): depends_on("py-numpy", when="@0.3:") depends_on("py-packaging@17.2:", when="@1.2.1:") depends_on("py-packaging", when="@0.3:1.1.0") + depends_on("py-torch@2:", when="@1.6:") depends_on("py-torch@1.10:", when="@1.3:") depends_on("py-torch@1.8.1:", when="@0.11:") depends_on("py-torch@1.3.1:") @@ -68,11 +73,15 @@ class PyTorchmetrics(PythonPackage): depends_on("py-lightning-utilities@0.8:", when="@1.1:") depends_on("py-lightning-utilities@0.7:", when="@1:") - depends_on("py-scipy@1.0.1:", when="+image") - depends_on("py-torchvision@0.8:", when="+image") - depends_on("py-torch-fidelity", when="+image") - depends_on("py-lpips", when="@:1.2.0+image") + with when("+image"): + depends_on("py-scipy@1.0.1:") + depends_on("py-torchvision@0.15.1:", when="@1.6:") + depends_on("py-torchvision@0.8:") + depends_on("py-torch-fidelity") # Historical dependencies depends_on("py-pretty-errors@1.2.25", when="@1.4.0") depends_on("py-pydeprecate@0.3", when="@0.7:0.8") + + with when("+image"): + depends_on("py-lpips", when="@:1.2.0") diff --git a/var/spack/repos/builtin/packages/py-torchseg/package.py b/var/spack/repos/builtin/packages/py-torchseg/package.py new file mode 100644 index 00000000000000..e8f7a2cebce369 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-torchseg/package.py @@ -0,0 +1,26 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyTorchseg(PythonPackage): + """TorchSeg: Semantic Segmentation models for PyTorch.""" + + homepage = "https://github.com/isaaccorley/torchseg" + pypi = "torchseg/torchseg-0.0.1a4.tar.gz" + + maintainers("isaaccorley", "adamjstewart") + + license("MIT") + + version("0.0.1a4", sha256="4742551753599af92f9f85e5ca6b149b474ffd458bad1aad6b3aad246a3bf4ea") + + depends_on("py-setuptools@61:") + + with default_args(type=("build", "run")): + depends_on("py-einops@0.7:") + depends_on("py-timm@0.9.12:") + depends_on("py-torch@1.13:") diff --git a/var/spack/repos/builtin/packages/py-torchtext/package.py b/var/spack/repos/builtin/packages/py-torchtext/package.py index 95fde8068ac14e..de5c66f20ee8d6 100644 --- a/var/spack/repos/builtin/packages/py-torchtext/package.py +++ b/var/spack/repos/builtin/packages/py-torchtext/package.py @@ -93,3 +93,18 @@ class PyTorchtext(PythonPackage): depends_on("py-pybind11", when="@0.8:", type=("build", "link")) depends_on("py-six", when="@:0.6", type=("build", "run")) depends_on("py-sentencepiece", when="@:0.7", type=("build", "run")) + + def patch(self): + # Add missing rpaths, which requires patching due to hardcoded cmake_args + if self.spec.satisfies("@0.13:"): + cmake_args = [ + f"-DCMAKE_INSTALL_RPATH={python_platlib}/torchtext/lib", + "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON", + ] + cmake_str = ", ".join(f"'{arg}'" for arg in cmake_args) + filter_file( + "cmake_args = [", + f"cmake_args = [{cmake_str},", + "tools/setup_helpers/extension.py", + string=True, + ) diff --git a/var/spack/repos/builtin/packages/py-torchvision/package.py b/var/spack/repos/builtin/packages/py-torchvision/package.py index 1f17b6529d3052..baa08a80375c38 100644 --- a/var/spack/repos/builtin/packages/py-torchvision/package.py +++ b/var/spack/repos/builtin/packages/py-torchvision/package.py @@ -19,6 +19,8 @@ class PyTorchvision(PythonPackage): license("BSD-3-Clause") version("main", branch="main") + version("0.20.1", sha256="7e08c7f56e2c89859310e53d898f72bccc4987cd83e08cfd6303513da15a9e71") + version("0.20.0", sha256="b59d9896c5c957c6db0018754bbd17d079c5102b82b9be0b438553b40a7b6029") version("0.19.1", sha256="083e75c467285595ec3eb3c7aa8493c19e53d7eb42f13046fb56a07c8897e5a8") version("0.19.0", sha256="4c499d0a412b5a21d55ac3c0a37e80ecd7e1f002f2a7b6b3b38a2de2544acbb6") version("0.18.1", sha256="347d472a9ceecc44e0bee1eda140d63cfaffc74a54ec07d4b98da7698ce75516") @@ -58,16 +60,21 @@ class PyTorchvision(PythonPackage): desc = "Enable support for native encoding/decoding of {} formats in torchvision.io" variant("png", default=True, description=desc.format("PNG")) variant("jpeg", default=True, description=desc.format("JPEG")) + variant("webp", default=False, description=desc.format("WEBP"), when="@0.20:") + variant("heic", default=False, description=desc.format("HEIC"), when="@0.20:") + variant("avif", default=False, description=desc.format("AVIF"), when="@0.20:") variant("nvjpeg", default=False, description=desc.format("NVJPEG")) - variant("ffmpeg", default=False, description=desc.format("FFMPEG")) variant("video_codec", default=False, description=desc.format("video_codec")) + variant("ffmpeg", default=False, description=desc.format("FFMPEG")) + # torchvision does not yet support disabling giflib: # https://github.com/pytorch/vision/pull/8406#discussion_r1590926939 # variant("gif", default=False, description=desc.format("GIF"), when="@0.19:") with default_args(type=("build", "link", "run")): # Based on PyPI wheel availability - depends_on("python@3.8:3.12", when="@0.17:") + depends_on("python@3.9:3.13", when="@0.20:") + depends_on("python@3.8:3.12", when="@0.17:0.19") depends_on("python@3.8:3.11", when="@0.15:0.16") depends_on("python@:3.10", when="@0.12:0.14") depends_on("python@:3.9", when="@0.8.2:0.11") @@ -75,6 +82,8 @@ class PyTorchvision(PythonPackage): # https://github.com/pytorch/vision#installation depends_on("py-torch@main", when="@main") + depends_on("py-torch@2.5.1", when="@0.20.1") + depends_on("py-torch@2.5.0", when="@0.20.0") depends_on("py-torch@2.4.1", when="@0.19.1") depends_on("py-torch@2.4.0", when="@0.19.0") depends_on("py-torch@2.3.1", when="@0.18.1") @@ -122,9 +131,13 @@ class PyTorchvision(PythonPackage): # Extensions depends_on("libpng@1.6:", when="+png") depends_on("jpeg", when="+jpeg") + depends_on("libwebp", when="+webp") + depends_on("libheif", when="+heic") + depends_on("libavif", when="+avif") depends_on("cuda", when="+nvjpeg") - depends_on("ffmpeg@3.1:", when="+ffmpeg") depends_on("cuda", when="+video_codec") + depends_on("ffmpeg@3.1:", when="+ffmpeg") + # torchvision does not yet support externally-installed giflib: # https://github.com/pytorch/vision/pull/8406#discussion_r1590926939 # depends_on("giflib", when="+gif") @@ -177,7 +190,8 @@ def setup_build_environment(self, env): for gpu in ["cuda", "mps"]: env.set(f"FORCE_{gpu.upper()}", int(f"+{gpu}" in self.spec["py-torch"])) - for extension in ["png", "jpeg", "nvjpeg", "ffmpeg", "video_codec"]: + extensions = ["png", "jpeg", "webp", "heic", "avif", "nvjpeg", "video_codec", "ffmpeg"] + for extension in extensions: env.set(f"TORCHVISION_USE_{extension.upper()}", int(f"+{extension}" in self.spec)) include = [] diff --git a/var/spack/repos/builtin/packages/py-uncertainty-toolbox/package.py b/var/spack/repos/builtin/packages/py-uncertainty-toolbox/package.py new file mode 100644 index 00000000000000..c6b0aadbb0738e --- /dev/null +++ b/var/spack/repos/builtin/packages/py-uncertainty-toolbox/package.py @@ -0,0 +1,29 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyUncertaintyToolbox(PythonPackage): + """Uncertainty Toolbox: a python toolbox for predictive uncertainty quantification, + calibration, metrics, and visualization.""" + + homepage = "https://uncertainty-toolbox.github.io/" + pypi = "uncertainty-toolbox/uncertainty-toolbox-0.1.1.tar.gz" + + license("MIT") + + version("0.1.1", sha256="d9389112bd431edc8b6e44c5b12405dea8f86063ff9b79f0bb178e5ac76bcfa5") + + with default_args(type="build"): + depends_on("py-flit-core@3.2:3") + depends_on("py-setuptools") + + with default_args(type=("build", "run")): + depends_on("py-numpy@1.19:") + depends_on("py-scipy@1.5:") + depends_on("py-matplotlib@3.2.2:") + depends_on("py-scikit-learn@0.23.1:") + depends_on("py-tqdm@4.54:") diff --git a/var/spack/repos/builtin/packages/py-unfoldnd/package.py b/var/spack/repos/builtin/packages/py-unfoldnd/package.py new file mode 100644 index 00000000000000..e3f1fec1713922 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-unfoldnd/package.py @@ -0,0 +1,25 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class PyUnfoldnd(PythonPackage): + """N-dimensional unfold (im2col) and fold (col2im) in PyTorch.""" + + homepage = "https://github.com/f-dangel/unfoldNd" + pypi = "unfoldnd/unfoldnd-0.2.2.tar.gz" + + license("MIT") + + version("0.2.2", sha256="e8fdffeb68bc1b393ddc1b1c87056e0e4616db992e95c7dbc3dc90d564599397") + + with default_args(type="build"): + depends_on("py-setuptools@38.3:") + depends_on("py-setuptools-scm") + + with default_args(type=("build", "run")): + depends_on("py-torch") + depends_on("py-numpy") diff --git a/var/spack/repos/builtin/packages/py-uv/package.py b/var/spack/repos/builtin/packages/py-uv/package.py index 83d38a0f4771b5..c872d974c83789 100644 --- a/var/spack/repos/builtin/packages/py-uv/package.py +++ b/var/spack/repos/builtin/packages/py-uv/package.py @@ -14,12 +14,17 @@ class PyUv(PythonPackage): license("APACHE 2.0 or MIT") + version("0.4.27", sha256="c13eea45257362ecfa2a2b31de9b62fbd0542e211a573562d98ab7c8fc50d8fc") version("0.4.17", sha256="01564bd760eff885ad61f44173647a569732934d1a4a558839c8088fbf75e53f") version("0.4.16", sha256="2144995a87b161d063bd4ef8294b1e948677bd90d01f8394d0e3fca037bb847f") version("0.4.15", sha256="8e36b8e07595fc6216d01e729c81a0b4ff029a93cc2ef987a73d3b650d6d559c") - depends_on("rust@1.81:", type=("build", "run")) + depends_on("rust", type=("build", "run")) depends_on("python@3.8:", type=("build", "run")) - depends_on("py-maturin@1:1", type=("build")) + depends_on("py-maturin@1:1", type="build") + depends_on("cmake", type="build") + + def setup_build_environment(self, env): + env.set("CMAKE", self.spec["cmake"].prefix.bin.cmake) executables = ["^uv$"] diff --git a/var/spack/repos/builtin/packages/py-waitress/package.py b/var/spack/repos/builtin/packages/py-waitress/package.py index 4a8f1034f48fb0..32095e1cc1d2a7 100644 --- a/var/spack/repos/builtin/packages/py-waitress/package.py +++ b/var/spack/repos/builtin/packages/py-waitress/package.py @@ -14,6 +14,11 @@ class PyWaitress(PythonPackage): license("ZPL-2.1") - version("2.1.2", sha256="780a4082c5fbc0fde6a2fcfe5e26e6efc1e8f425730863c04085769781f51eba") + version("3.0.1", sha256="ef0c1f020d9f12a515c4ec65c07920a702613afcad1dbfdc3bcec256b6c072b3") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-49769 + version("2.1.2", sha256="780a4082c5fbc0fde6a2fcfe5e26e6efc1e8f425730863c04085769781f51eba") + + depends_on("python@3.8:", type=("build", "run"), when="@3:") depends_on("py-setuptools@41:", type="build") diff --git a/var/spack/repos/builtin/packages/py-wandb/package.py b/var/spack/repos/builtin/packages/py-wandb/package.py index 6d0949338c04d3..23a3b05d8d0f29 100644 --- a/var/spack/repos/builtin/packages/py-wandb/package.py +++ b/var/spack/repos/builtin/packages/py-wandb/package.py @@ -17,11 +17,11 @@ class PyWandb(PythonPackage): license("MIT") + version("0.16.6", sha256="86f491e3012d715e0d7d7421a4d6de41abef643b7403046261f962f3e512fe1c") version("0.13.9", sha256="0a17365ce1f18306ce7a7f16b943094fac7284bb85f4e52c0685705602f9e307") depends_on("py-setuptools", type=("build", "run")) - depends_on("py-pathtools", type=("build", "run")) depends_on("py-setproctitle", type=("build", "run")) depends_on("py-appdirs@1.4.3:", type=("build", "run")) depends_on("py-protobuf@3.19:4", type=("build", "run")) @@ -29,10 +29,15 @@ class PyWandb(PythonPackage): depends_on("py-typing-extensions", type=("build", "run"), when="^python@:3.9") depends_on("py-pyyaml", type=("build", "run")) - depends_on("py-click@7:", type=("build", "run")) + depends_on("py-click@7:", type=("build", "run"), when="@0.13") + depends_on("py-click@7.1:", type=("build", "run"), when="@0.15.5:") conflicts("^py-click@8.0.0") depends_on("py-gitpython@1:", type=("build", "run")) + conflicts("^py-gitpython@3.1.29") depends_on("py-requests@2", type=("build", "run")) depends_on("py-psutil@5:", type=("build", "run")) depends_on("py-sentry-sdk@1.0.0:", type=("build", "run")) depends_on("py-dockerpy-creds@0.4.0:", type=("build", "run")) + + # Historical dependencies + depends_on("py-pathtools", type=("build", "run"), when="@:0.15") diff --git a/var/spack/repos/builtin/packages/py-webdataset/package.py b/var/spack/repos/builtin/packages/py-webdataset/package.py new file mode 100644 index 00000000000000..7f4af5a9e88782 --- /dev/null +++ b/var/spack/repos/builtin/packages/py-webdataset/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) +from spack.package import * + + +class PyWebdataset(PythonPackage): + """Python-based I/O for deep learning problems.""" + + homepage = "https://github.com/webdataset/webdataset" + pypi = "webdataset/webdataset-0.1.62.tar.gz" + + license("BSD-3-Clause") + + version("0.1.62", sha256="78b6c7810116d6875fa1ed8eb2dea29a54b86fde014cc2069f4c08fc3530ceb5") + + with default_args(type=("build", "link", "run")): + depends_on("python@3.6:") + + # setup.py and requires.txt + depends_on("py-braceexpand") + depends_on("py-numpy") diff --git a/var/spack/repos/builtin/packages/py-werkzeug/package.py b/var/spack/repos/builtin/packages/py-werkzeug/package.py index 475db93c4f01e2..f7d4b8e9d98209 100644 --- a/var/spack/repos/builtin/packages/py-werkzeug/package.py +++ b/var/spack/repos/builtin/packages/py-werkzeug/package.py @@ -15,24 +15,50 @@ class PyWerkzeug(PythonPackage): license("BSD-3-Clause", checked_by="wdconinc") + version("3.1.3", sha256="60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746") version("3.0.4", sha256="34f2371506b250df4d4f84bfe7b0921e4762525762bbd936614909fe25cd7306") version("3.0.0", sha256="3ffff4dcc32db52ef3cc94dff3000a3c2846890f3a5a51800a27b909c5e770f0") - version("2.3.7", sha256="2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8") - version("2.3.4", sha256="1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76") - version("2.2.2", sha256="7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f") - version("2.0.2", sha256="aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a") - version("0.16.0", sha256="7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7") - version("0.15.6", sha256="0a24d43be6a7dce81bae05292356176d6c46d63e42a0dd3f9504b210a9cfaa43") - version("0.15.5", sha256="a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6") - version("0.15.4", sha256="a0b915f0815982fb2a09161cb8f31708052d0951c3ba433ccc5e1aa276507ca6") - version("0.15.3", sha256="cfd1281b1748288e59762c0e174d64d8bcb2b70e7c57bc4a1203c8825af24ac3") - version("0.15.2", sha256="0a73e8bb2ff2feecfc5d56e6f458f5b99290ef34f565ffb2665801ff7de6af7a") - version("0.15.1", sha256="ca5c2dcd367d6c0df87185b9082929d255358f5391923269335782b213d52655") - version("0.15.0", sha256="590abe38f8be026d78457fe3b5200895b3543e58ac3fc1dd792c6333ea11af64") - version("0.12.2", sha256="903a7b87b74635244548b30d30db4c8947fe64c5198f58899ddcd3a13c23bb26") - version("0.11.15", sha256="455d7798ac263266dbd38d4841f7534dd35ca9c3da4a8df303f8488f38f3bcc0") - version("0.11.11", sha256="e72c46bc14405cba7a26bd2ce28df734471bc9016bc8b4cb69466c2c14c2f7e5") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-46136 + version("2.3.7", sha256="2b8c0e447b4b9dbcc85dd97b6eeb4dcbaf6c8b6c3be0bd654e25553e0a2157d8") + version("2.3.4", sha256="1d5a58e0377d1fe39d061a5de4469e414e78ccb1e1e59c0f5ad6fa1c36c52b76") + version("2.2.2", sha256="7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f") + version("2.0.2", sha256="aa2bb6fc8dee8d6c504c0ac1e7f5f7dc5810a9903e793b6f715a9f015bdadb9a") + version( + "0.16.0", sha256="7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7" + ) + version( + "0.15.6", sha256="0a24d43be6a7dce81bae05292356176d6c46d63e42a0dd3f9504b210a9cfaa43" + ) + version( + "0.15.5", sha256="a13b74dd3c45f758d4ebdb224be8f1ab8ef58b3c0ffc1783a8c7d9f4f50227e6" + ) + version( + "0.15.4", sha256="a0b915f0815982fb2a09161cb8f31708052d0951c3ba433ccc5e1aa276507ca6" + ) + version( + "0.15.3", sha256="cfd1281b1748288e59762c0e174d64d8bcb2b70e7c57bc4a1203c8825af24ac3" + ) + version( + "0.15.2", sha256="0a73e8bb2ff2feecfc5d56e6f458f5b99290ef34f565ffb2665801ff7de6af7a" + ) + version( + "0.15.1", sha256="ca5c2dcd367d6c0df87185b9082929d255358f5391923269335782b213d52655" + ) + version( + "0.15.0", sha256="590abe38f8be026d78457fe3b5200895b3543e58ac3fc1dd792c6333ea11af64" + ) + version( + "0.12.2", sha256="903a7b87b74635244548b30d30db4c8947fe64c5198f58899ddcd3a13c23bb26" + ) + version( + "0.11.15", sha256="455d7798ac263266dbd38d4841f7534dd35ca9c3da4a8df303f8488f38f3bcc0" + ) + version( + "0.11.11", sha256="e72c46bc14405cba7a26bd2ce28df734471bc9016bc8b4cb69466c2c14c2f7e5" + ) + depends_on("python@3.9:", when="@3.1:", type=("build", "run")) depends_on("python@3.8:", when="@2.3:", type=("build", "run")) depends_on("python@:3.9", when="@:0.12", type=("build", "run")) depends_on("py-flit-core@:3", when="@2.3.7:", type="build") diff --git a/var/spack/repos/builtin/packages/py-wheel/package.py b/var/spack/repos/builtin/packages/py-wheel/package.py index 38e4c3062d690a..582918513d73f4 100644 --- a/var/spack/repos/builtin/packages/py-wheel/package.py +++ b/var/spack/repos/builtin/packages/py-wheel/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -43,5 +44,4 @@ def install(self, spec, prefix): # To build wheel from source, you need setuptools and wheel already installed. # We get around this by using a pre-built wheel, see: # https://discuss.python.org/t/bootstrapping-a-specific-version-of-pip/12306 - args = std_pip_args + ["--prefix=" + prefix, self.stage.archive_file] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={prefix}", self.stage.archive_file) diff --git a/var/spack/repos/builtin/packages/py-x-clip/package.py b/var/spack/repos/builtin/packages/py-x-clip/package.py new file mode 100644 index 00000000000000..9dfcfda16ca37f --- /dev/null +++ b/var/spack/repos/builtin/packages/py-x-clip/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class PyXClip(PythonPackage): + """A concise but complete implementation of CLIP with various experimental + improvements from recent papers""" + + homepage = "https://github.com/lucidrains/x-clip" + pypi = "x-clip/x-clip-0.14.4.tar.gz" + + license("MIT", checked_by="alex391") + + version("0.14.4", sha256="e2539953f1c81a2ab892843c2bc02c218f4ac410cf10ce37495830f6a0e259c6") + + depends_on("py-setuptools", type="build") + depends_on("py-beartype", type=("build", "run")) + depends_on("py-einops@0.6:", type=("build", "run")) + depends_on("py-ftfy", type=("build", "run")) + depends_on("py-regex", type=("build", "run")) + depends_on("py-torch@1.6:", type=("build", "run")) + depends_on("py-torchvision", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/pygmo/package.py b/var/spack/repos/builtin/packages/pygmo/package.py index bd04f292aae63d..9f26a46160084f 100644 --- a/var/spack/repos/builtin/packages/pygmo/package.py +++ b/var/spack/repos/builtin/packages/pygmo/package.py @@ -21,7 +21,8 @@ class Pygmo(CMakePackage): version("master", branch="master") version("2.18.0", sha256="9f081cc973297894af09f713f889870ac452bfb32b471f9f7ba08a5e0bb9a125") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="Build shared libraries") diff --git a/var/spack/repos/builtin/packages/pystring/package.py b/var/spack/repos/builtin/packages/pystring/package.py new file mode 100644 index 00000000000000..9d69f87adb5a2d --- /dev/null +++ b/var/spack/repos/builtin/packages/pystring/package.py @@ -0,0 +1,21 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Pystring(CMakePackage): + """Pystring is a collection of C++ functions which match the interface and behavior + of python's string class methods using std::string.""" + + git = "https://github.com/imageworks/pystring" + url = "https://github.com/imageworks/pystring/archive/refs/tags/v1.1.4.tar.gz" + + license("Apache-2.0") + + version("1.1.4", sha256="49da0fe2a049340d3c45cce530df63a2278af936003642330287b68cefd788fb") + + # Core dependencies + depends_on("cmake@3.27.9:", type="build") diff --git a/var/spack/repos/builtin/packages/pythia6/package.py b/var/spack/repos/builtin/packages/pythia6/package.py index f28bf5c970de27..a027a19c570c69 100644 --- a/var/spack/repos/builtin/packages/pythia6/package.py +++ b/var/spack/repos/builtin/packages/pythia6/package.py @@ -138,9 +138,7 @@ def patch(self): # Use our provided CMakeLists.txt. The Makefile provided with # the source is GCC (gfortran) specific, and would have required # additional patching for the +root variant. - llnl.util.filesystem.copy( - os.path.join(os.path.dirname(__file__), "CMakeLists.txt"), self.stage.source_path - ) + copy(os.path.join(os.path.dirname(__file__), "CMakeLists.txt"), self.stage.source_path) # Apply the variant value at the relevant place in the source. filter_file( r"^(\s+PARAMETER\s*\(\s*NMXHEP\s*=\s*)\d+", diff --git a/var/spack/repos/builtin/packages/pythia8/package.py b/var/spack/repos/builtin/packages/pythia8/package.py index 00145d163e6d08..9da588a4266213 100644 --- a/var/spack/repos/builtin/packages/pythia8/package.py +++ b/var/spack/repos/builtin/packages/pythia8/package.py @@ -12,7 +12,7 @@ class Pythia8(AutotoolsPackage): the evolution from a few-body hard process to a complex multiparticle final state.""" - homepage = "http://home.thep.lu.se/Pythia/" + homepage = "https://pythia.org/" url = "https://pythia.org/download/pythia83/pythia8306.tgz" list_url = "https://pythia.org/releases/" @@ -22,6 +22,7 @@ class Pythia8(AutotoolsPackage): license("GPL-2.0-only") + version("8.312", sha256="bad98e2967b687046c4568c9091d630a0c31b628745c021a994aba4d1d50f8ea") version("8.311", sha256="2782d5e429c1543c67375afe547fd4c4ca0720309deb008f7db78626dc7d1464") version("8.310", sha256="90c811abe7a3d2ffdbf9b4aeab51cf6e0a5a8befb4e3efa806f3d5b9c311e227") version("8.309", sha256="5bdafd9f2c4a1c47fd8a4e82fb9f0d8fcfba4de1003b8e14be4e0347436d6c33") @@ -131,17 +132,20 @@ class Pythia8(AutotoolsPackage): filter_compiler_wrappers("Makefile.inc", relative_root="share/Pythia8/examples") @run_before("configure") - def setup_cxxstd(self): + def setup_configure(self): filter_file( r"-std=c\+\+[0-9][0-9]", f"-std=c++{self.spec.variants['cxxstd'].value}", "configure" ) - # Fix for https://gitlab.com/Pythia8/releases/-/issues/428 - @when("@:8.311") - def patch(self): - filter_file( - r"[/]examples[/]Makefile[.]inc\|;n' \\", "/examples/Makefile.inc|' \\", "configure" - ) + # Fix for https://gitlab.com/Pythia8/releases/-/issues/428 + with when("@:8.311"): + filter_file( + r"[/]examples[/]Makefile[.]inc\|;n' \\", "/examples/Makefile.inc|' \\", "configure" + ) + + # Fix for https://gitlab.com/Pythia8/releases/-/issues/523 + with when("@8.307:8.312 cxxstd=20"): + patch("pythia8-cpp20-fjcore-forward-decl.patch") def configure_args(self): args = [] diff --git a/var/spack/repos/builtin/packages/pythia8/pythia8-cpp20-fjcore-forward-decl.patch b/var/spack/repos/builtin/packages/pythia8/pythia8-cpp20-fjcore-forward-decl.patch new file mode 100644 index 00000000000000..447e73cba582fb --- /dev/null +++ b/var/spack/repos/builtin/packages/pythia8/pythia8-cpp20-fjcore-forward-decl.patch @@ -0,0 +1,37 @@ +diff --git a/src/FJcore.cc b/src/FJcore.cc +index c60108e2..afd32eee 100644 +--- a/src/FJcore.cc ++++ b/src/FJcore.cc +@@ -730,14 +730,10 @@ FJCORE_BEGIN_NAMESPACE // defined in fastjet/internal/base.hh + class ClosestPair2D : public ClosestPair2DBase { + public: + ClosestPair2D(const std::vector & positions, +- const Coord2D & left_corner, const Coord2D & right_corner) { +- _initialize(positions, left_corner, right_corner, positions.size()); +- }; ++ const Coord2D & left_corner, const Coord2D & right_corner); + ClosestPair2D(const std::vector & positions, + const Coord2D & left_corner, const Coord2D & right_corner, +- const unsigned int max_size) { +- _initialize(positions, left_corner, right_corner, max_size); +- }; ++ const unsigned int max_size); + void closest_pair(unsigned int & ID1, unsigned int & ID2, + double & distance2) const; + void remove(unsigned int ID); +@@ -808,6 +804,15 @@ public: + return coord.distance2(other.coord); + }; + }; ++inline ClosestPair2D::ClosestPair2D(const std::vector & positions, ++ const Coord2D & left_corner, const Coord2D & right_corner) { ++ _initialize(positions, left_corner, right_corner, positions.size()); ++}; ++inline ClosestPair2D::ClosestPair2D(const std::vector & positions, ++ const Coord2D & left_corner, const Coord2D & right_corner, ++ const unsigned int max_size) { ++ _initialize(positions, left_corner, right_corner, max_size); ++}; + inline bool floor_ln2_less(unsigned x, unsigned y) { + if (x>y) return false; + return (x < (x^y)); // beware of operator precedence... diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index 0874dfcee71f7a..789cc0d0e65f97 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -16,6 +16,7 @@ import llnl.util.tty as tty from llnl.util.lang import dedupe +import spack.paths from spack.build_environment import dso_suffix, stat_suffix from spack.package import * from spack.util.prefix import Prefix @@ -1088,7 +1089,7 @@ def libs(self): if lib: return lib - raise spack.error.NoLibrariesError( + raise NoLibrariesError( "Unable to find {} libraries with the following names:\n\n* ".format(self.name) + "\n* ".join(candidates) ) @@ -1114,7 +1115,7 @@ def headers(self): config_h = headers[0] break else: - raise spack.error.NoHeadersError( + raise NoHeadersError( "Unable to locate {} headers in any of these locations:\n\n* ".format(self.name) + "\n* ".join(candidates) ) diff --git a/var/spack/repos/builtin/packages/qemu/package.py b/var/spack/repos/builtin/packages/qemu/package.py index c095b9a6a6bd98..8ac1e92bf78b3e 100644 --- a/var/spack/repos/builtin/packages/qemu/package.py +++ b/var/spack/repos/builtin/packages/qemu/package.py @@ -139,7 +139,7 @@ class Qemu(AutotoolsPackage): @when("@9:") def configure_args(self): - return [ + args = [ "--disable-bsd-user", "--disable-guest-agent", "--disable-sdl", @@ -155,3 +155,11 @@ def configure_args(self): "--enable-zstd", "--disable-docs", ] + extra_cflags = "-Wno-unknown-warning-option" + if self.spec.satisfies("%apple-clang platform=darwin"): + # qemu 9: uses pthread_jit_write_protect_np which requires OSX 11.0 or newer + extra_cflags += " -mmacosx-version-min=11.0" + args.append(f"--extra-cflags={extra_cflags}") + args.append(f"--extra-cxxflags={extra_cflags}") + + return args diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py index 5b9996e04f7427..b39e9d59e491f8 100644 --- a/var/spack/repos/builtin/packages/qmcpack/package.py +++ b/var/spack/repos/builtin/packages/qmcpack/package.py @@ -145,7 +145,6 @@ class Qmcpack(CMakePackage, CudaPackage): cpp14_warning = "QMCPACK v3.6.0 or later requires a " "compiler with support for C++14" conflicts("%gcc@:4", when="@3.6.0:", msg=cpp14_warning) conflicts("%intel@:17", when="@3.6.0:", msg=cpp14_warning) - conflicts("%pgi@:17", when="@3.6.0:", msg=cpp14_warning) conflicts("%clang@:3.4", when="@3.6.0:", msg=cpp14_warning) conflicts("+afqmc", when="@:3.6.0", msg="AFQMC not recommended before v3.7") @@ -167,7 +166,6 @@ class Qmcpack(CMakePackage, CudaPackage): "Intel compiler when linking against Intel MKL" ) conflicts("%gcc", when="@:3.4.0 ^intel-mkl", msg=mkl_warning) - conflicts("%pgi", when="@:3.4.0 ^intel-mkl", msg=mkl_warning) conflicts("%llvm", when="@:3.4.0 ^intel-mkl", msg=mkl_warning) # Dependencies match those in the QMCPACK manual. diff --git a/var/spack/repos/builtin/packages/qt-base/package.py b/var/spack/repos/builtin/packages/qt-base/package.py index ca3acad6543bf7..ff1d8f5a4651cd 100644 --- a/var/spack/repos/builtin/packages/qt-base/package.py +++ b/var/spack/repos/builtin/packages/qt-base/package.py @@ -27,6 +27,11 @@ def get_url(qualname): _url = "https://github.com/qt/{}/archive/refs/tags/v6.2.3.tar.gz" return _url.format(qualname.lower()) + @staticmethod + def get_git(qualname): + _git = "https://github.com/qt/{}.git" + return _git.format(qualname.lower()) + @staticmethod def get_list_url(qualname): _list_url = "https://github.com/qt/{}/tags" diff --git a/var/spack/repos/builtin/packages/qt-tools/package.py b/var/spack/repos/builtin/packages/qt-tools/package.py new file mode 100644 index 00000000000000..afb28b8a766829 --- /dev/null +++ b/var/spack/repos/builtin/packages/qt-tools/package.py @@ -0,0 +1,60 @@ +# Copyright 2013-2024 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) + + +from spack.package import * +from spack.pkg.builtin.qt_base import QtBase, QtPackage + + +class QtTools(QtPackage): + """Qt Tools contains tools like Qt Designer.""" + + url = QtPackage.get_url(__qualname__) + git = QtPackage.get_git(__qualname__) + list_url = QtPackage.get_list_url(__qualname__) + + maintainers("wdconinc") + + license("BSD-3-Clause") + + # src/assistant/qlitehtml is a submodule that is not in the git archive + version("6.7.3", commit="ec4747e62a837a0262212a5f4fb03734660c7360", submodules=True) + version("6.7.2", commit="46ffaed90df8c14d67b4b16fdf5e0b87ab227c88", submodules=True) + + variant( + "assistant", + default=False, + description="Qt Assistant for viewing on-line documentation in Qt help file format.", + ) + variant( + "designer", + default=False, + description="Qt Widgets Designer for designing and building GUIs with Qt Widgets.", + ) + + depends_on("llvm +clang") + + depends_on("qt-base +network") + depends_on("qt-base +widgets", when="+designer") + + for _v in QtBase.versions: + v = str(_v) + depends_on("qt-base@" + v, when="@" + v) + + def cmake_args(self): + spec = self.spec + + args = super().cmake_args() + [] + + def define(cmake_var, value): + args.append(self.define(cmake_var, value)) + + if spec.satisfies("+assistant"): + define("FEATURE_assistant", True) + + if spec.satisfies("+designer"): + define("FEATURE_designer", True) + + return args diff --git a/var/spack/repos/builtin/packages/quantum-espresso/package.py b/var/spack/repos/builtin/packages/quantum-espresso/package.py index af1d61855195d3..76cb719bcfbaee 100644 --- a/var/spack/repos/builtin/packages/quantum-espresso/package.py +++ b/var/spack/repos/builtin/packages/quantum-espresso/package.py @@ -25,6 +25,7 @@ class QuantumEspresso(CMakePackage, Package): license("GPL-2.0-only") version("develop", branch="develop") + version("7.4", sha256="b15dcfe25f4fbf15ccd34c1194021e90996393478226e601d876f7dea481d104") version("7.3.1", sha256="2c58b8fadfe4177de5a8b69eba447db5e623420b070dea6fd26c1533b081d844") version("7.3", sha256="edc2a0f3315c69966df4f82ec86ab9f682187bc9430ef6d2bacad5f27f08972c") version("7.2", sha256="b348a4a7348b66a73545d9ca317a2645755c98d343c1cfe8def475ad030808c0") @@ -225,11 +226,6 @@ class QuantumEspresso(CMakePackage, Package): # EPW doesn't gets along well with OpenMPI 2.x.x conflicts("^openmpi@2.0.0:2", msg="OpenMPI version incompatible with EPW") - # EPW also doesn't gets along well with PGI 17.x + OpenMPI 1.10.7 - conflicts( - "^openmpi@1.10.7%pgi@17.0:17.12", msg="PGI+OpenMPI version combo incompatible with EPW" - ) - variant( "environ", default=False, diff --git a/var/spack/repos/builtin/packages/quicksilver/package.py b/var/spack/repos/builtin/packages/quicksilver/package.py index 61357eed447601..061619b2b75648 100644 --- a/var/spack/repos/builtin/packages/quicksilver/package.py +++ b/var/spack/repos/builtin/packages/quicksilver/package.py @@ -13,7 +13,7 @@ class Quicksilver(MakefilePackage): tags = ["proxy-app"] - homepage = "https://codesign.llnl.gov/quicksilver.php" + homepage = "https://asc.llnl.gov/codes/proxy-apps/quicksilver" url = "https://github.com/LLNL/Quicksilver/tarball/V1.0" git = "https://github.com/LLNL/Quicksilver.git" diff --git a/var/spack/repos/builtin/packages/r-acepack/package.py b/var/spack/repos/builtin/packages/r-acepack/package.py index 28353cb981e31a..32eda730e5b710 100644 --- a/var/spack/repos/builtin/packages/r-acepack/package.py +++ b/var/spack/repos/builtin/packages/r-acepack/package.py @@ -29,4 +29,5 @@ class RAcepack(RPackage): license("MIT") + version("1.4.2", sha256="5bffcd12b783f372bb6c50e35317744ac31597c91b6433442a7b0dce2f66ac91") version("1.4.1", sha256="82750507926f02a696f6cc03693e8d4a5ee7e92500c8c15a16a9c12addcd28b9") diff --git a/var/spack/repos/builtin/packages/r-adabag/package.py b/var/spack/repos/builtin/packages/r-adabag/package.py index 343b8c468d85a3..1f489a0c5bd9b8 100644 --- a/var/spack/repos/builtin/packages/r-adabag/package.py +++ b/var/spack/repos/builtin/packages/r-adabag/package.py @@ -34,12 +34,17 @@ class RAdabag(RPackage): license("GPL-2.0-or-later") + version("5.0", sha256="ec58756fda2e64753d21e28d9e27ed34f28020045b199a58dcea06a3e2c3d60e") version("4.2", sha256="47019eb8cefc8372996fbb2642f64d4a91d7cedc192690a8d8be6e7e03cd3c81") version("4.1", sha256="ff938c36122cdf58a71a59a6bf79a3c7816966ee7cc4907c4a0a3c0732e3d028") + depends_on("r@4.0.0:", type=("build", "run"), when="@5.0:") depends_on("r-rpart", type=("build", "run")) depends_on("r-caret", type=("build", "run")) - depends_on("r-foreach", type=("build", "run")) + depends_on("r-consrank@2.1.3:", type=("build", "run"), when="@5.0:") depends_on("r-doparallel", type=("build", "run")) + depends_on("r-dplyr", type=("build", "run"), when="@5.0:") + depends_on("r-foreach", type=("build", "run")) + depends_on("r-tidyr", type=("build", "run"), when="@5.0:") depends_on("r-mlbench", type=("build", "run"), when="@:4.1") diff --git a/var/spack/repos/builtin/packages/r-adegraphics/package.py b/var/spack/repos/builtin/packages/r-adegraphics/package.py index 1048a74d065fdc..a83b2cce4d9bcc 100644 --- a/var/spack/repos/builtin/packages/r-adegraphics/package.py +++ b/var/spack/repos/builtin/packages/r-adegraphics/package.py @@ -17,6 +17,7 @@ class RAdegraphics(RPackage): license("GPL-2.0-or-later") + version("1.0-21", sha256="e02a92b3a03220fd1f905f9541f506e43ad75b385a7febf74c80690364faeba8") version("1.0-18", sha256="8fe07fc0f73e9917e098de2ee8e6fdb3e07775446683b6222692a3298e4d563c") version("1.0-16", sha256="7ba59ce9aeefe1c25b4b118d08ef458ffd34115412c147cc428629e72a82ec3a") version("1.0-15", sha256="87bbcd072e9a898955f5ede4315e82365086a50a2887bf5bd2e94bbb4d3f678a") diff --git a/var/spack/repos/builtin/packages/r-adephylo/package.py b/var/spack/repos/builtin/packages/r-adephylo/package.py index 225b8bc1cfdce0..f113150a303429 100644 --- a/var/spack/repos/builtin/packages/r-adephylo/package.py +++ b/var/spack/repos/builtin/packages/r-adephylo/package.py @@ -16,6 +16,7 @@ class RAdephylo(RPackage): license("GPL-2.0-or-later") + version("1.1-16", sha256="b5ce5de26bbe6e40ca0650650acac3f613e5170d0b14dc5d6e6bbe83c416ce58") version("1.1-13", sha256="2aa132fee9d0a14ac09b0a96af40ac332cb4e13c892908803c335aa7319ca76d") version("1.1-11", sha256="154bf2645eac4493b85877933b9445442524ca4891aefe4e80c294c398cff61a") diff --git a/var/spack/repos/builtin/packages/r-adespatial/package.py b/var/spack/repos/builtin/packages/r-adespatial/package.py index 7fe07cbf9ecb7a..dbd61e3dc83305 100644 --- a/var/spack/repos/builtin/packages/r-adespatial/package.py +++ b/var/spack/repos/builtin/packages/r-adespatial/package.py @@ -19,6 +19,7 @@ class RAdespatial(RPackage): license("GPL-2.0-or-later") + version("0.3-23", sha256="70e0878b13212f9c450bf1e2bd1c5be87a1e24fed942941855a8dd2dd0c05f33") version("0.3-21", sha256="4ff65f9bc05892a2d37d34ab2b77dbd24f980adc891f5f94f8e56aec771ea79f") version("0.3-20", sha256="f88e009563087c52af5be490bd111cc38b0b70437bbfa189e846080a069b64eb") version("0.3-19", sha256="db50f1c42961e40bcef6d714a89a09b1345dab2dd013cea8e2122fdf99d5d223") diff --git a/var/spack/repos/builtin/packages/r-aer/package.py b/var/spack/repos/builtin/packages/r-aer/package.py index 8e4e5b57027973..013efef3cbe7ef 100644 --- a/var/spack/repos/builtin/packages/r-aer/package.py +++ b/var/spack/repos/builtin/packages/r-aer/package.py @@ -15,6 +15,7 @@ class RAer(RPackage): cran = "AER" + version("1.2-12", sha256="55c7b0f17ecd0dc6e1c54ab09b40e89676f44658eaad444c818133fae8d1ea86") version("1.2-10", sha256="650a5fb54a8addf8c86f1e0f88f4fac5349731bc5bf34762a991022140eedbdc") version("1.2-9", sha256="3b79390b14766419fc1e8912689bc462d4beb01aff9dad26d628aed69d04540d") version("1.2-7", sha256="3aee5c606313710c2dca6c1e9b2c20a145aa33f2a3ecc5cfcec66c8e91838a93") diff --git a/var/spack/repos/builtin/packages/r-afex/package.py b/var/spack/repos/builtin/packages/r-afex/package.py index 8d837804708020..1cf3e17b72d987 100644 --- a/var/spack/repos/builtin/packages/r-afex/package.py +++ b/var/spack/repos/builtin/packages/r-afex/package.py @@ -26,6 +26,7 @@ class RAfex(RPackage): license("GPL-2.0-or-later") + version("1.3-1", sha256="4a64fb7e86e3d081e576c0d744d1613f391656082962c5799cf3fc5e2ca631a8") version("1.3-0", sha256="f8e276a1070288c54b83db1d1214fd88fe8d8b8698cf0c2743ef2a45f61e1933") version("1.2-1", sha256="e3a8cecd46db9521039275a5bf27937afb3ec4021644cc4fac94096cc585aacb") version("1.2-0", sha256="8b57ffb8ba2f6354185fc79c8b0cab2703d753b89a100f4325bb2e4c7a3531c2") diff --git a/var/spack/repos/builtin/packages/r-amelia/package.py b/var/spack/repos/builtin/packages/r-amelia/package.py index ac363443653c3e..d2a70da851ad7b 100644 --- a/var/spack/repos/builtin/packages/r-amelia/package.py +++ b/var/spack/repos/builtin/packages/r-amelia/package.py @@ -27,6 +27,7 @@ class RAmelia(RPackage): cran = "Amelia" + version("1.8.2", sha256="4fb24a247ca20ba942e854f21e366fbbaf8fbcabc99efbb537511a10a732fc3e") version("1.8.1", sha256="120ce62a2acfc845dbeb155ce3f33b41ebad324bc73693a918a95194a9fc47e4") version("1.8.0", sha256="3ec1d5a68dac601b354227916aa8ec72fa1216b603dd887aae2b24cb69b5995e") version("1.7.6", sha256="63c08d374aaf78af46c34dc78da719b3085e58d9fabdc76c6460d5193a621bea") diff --git a/var/spack/repos/builtin/packages/r-aod/package.py b/var/spack/repos/builtin/packages/r-aod/package.py index bb1c02ed208009..230890b99d68f4 100644 --- a/var/spack/repos/builtin/packages/r-aod/package.py +++ b/var/spack/repos/builtin/packages/r-aod/package.py @@ -19,6 +19,7 @@ class RAod(RPackage): license("GPL-2.0-or-later") + version("1.3.3", sha256="b7245e8abf7d78cdfa7f74f6d90f79a418b883058aa3edd5977a60bdbed4087e") version("1.3.2", sha256="9b85be7b12b31ac076f2456853a5b18d8a79ce2b86d00055264529a0cd28515c") version("1.3.1", sha256="052d8802500fcfdb3b37a8e3e6f3fbd5c3a54e48c3f68122402d2ea3a15403bc") diff --git a/var/spack/repos/builtin/packages/r-ape/package.py b/var/spack/repos/builtin/packages/r-ape/package.py index 79c01e29ef56da..7ab951511fa02a 100644 --- a/var/spack/repos/builtin/packages/r-ape/package.py +++ b/var/spack/repos/builtin/packages/r-ape/package.py @@ -29,6 +29,7 @@ class RApe(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("5.8", sha256="24ce729979e1bcc60317e71e5100ce54156ceb7484917b0d64260f733ae84d24") version("5.7-1", sha256="8b09c71218d8aa629e43bc807b433a4e30a61847d91b2810e31c366f0fe5057a") version("5.6-2", sha256="9b62450a0390a1f07df007d348ad4cedcd814d42cb11c5a300ed33550fd41257") version("5.6-1", sha256="25401e036576eed1200e15bf68879ccd85611303a3508b989e15164cd4c0f7f7") diff --git a/var/spack/repos/builtin/packages/r-aplot/package.py b/var/spack/repos/builtin/packages/r-aplot/package.py index a13354904ec241..537d9efc7550a6 100644 --- a/var/spack/repos/builtin/packages/r-aplot/package.py +++ b/var/spack/repos/builtin/packages/r-aplot/package.py @@ -20,6 +20,7 @@ class RAplot(RPackage): license("Artistic-2.0") + version("0.2.3", sha256="1fb062050199933f724164118cc3e5d85b60a3a4d4a466016bed2928b0310d6a") version("0.1.10", sha256="d937768241f887628b88bb3b49dd6cbe9b7dae39ae7054e7380a9836721a67d1") version("0.1.8", sha256="d931d7769dc7ce4bc938e8c068973721e89da0aa5f40a04f8a9119621b33459c") version("0.1.7", sha256="f6250f5f6d1addc8d5717be80a92c569bfd83d35bce2e3dbeb251c9ae1be8616") @@ -27,9 +28,11 @@ class RAplot(RPackage): version("0.1.4", sha256="cde9dfc1c6b38e370c1f7338651c37727efa57d52b646fec6b021855809492ac") version("0.1.2", sha256="899c4d101ddcedb1eba9803d78cf02288b63de25e2879add8add1165167509f0") + depends_on("r@4.1.0:", type=("build", "run"), when="@0.2.0:") depends_on("r-ggfun@0.0.4:", type=("build", "run"), when="@0.1.2:") depends_on("r-ggfun@0.0.6:", type=("build", "run"), when="@0.1.4:") depends_on("r-ggfun@0.0.9:", type=("build", "run"), when="@0.1.10:") + depends_on("r-ggfun@0.1.3:", type=("build", "run"), when="@0.2.1:") depends_on("r-ggplot2", type=("build", "run")) depends_on("r-ggplotify", type=("build", "run")) depends_on("r-patchwork", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-argparse/package.py b/var/spack/repos/builtin/packages/r-argparse/package.py index fbacffb18313e8..758c817412887a 100644 --- a/var/spack/repos/builtin/packages/r-argparse/package.py +++ b/var/spack/repos/builtin/packages/r-argparse/package.py @@ -17,6 +17,7 @@ class RArgparse(RPackage): license("GPL-2.0-or-later") + version("2.2.3", sha256="a50cc4e1221f063e472a8cfe7e881a1d4abed5ef93cf40d5f65a2528cdfd2674") version("2.2.2", sha256="b62c9bf5e6ca35fb7a2e614a916815c04cbf6c6db3f89f99b4df76470a4a856d") version("2.1.6", sha256="2ad7faad795878b88969ac5d91ba38f4e96deb85dfea7148c3510f0eaa3de592") version("2.1.5", sha256="83e112beb47733849980b286d93ac930f0cbe6ac78fcb94fc9f6b0eea882658d") diff --git a/var/spack/repos/builtin/packages/r-arm/package.py b/var/spack/repos/builtin/packages/r-arm/package.py new file mode 100644 index 00000000000000..c451ac36e19d21 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-arm/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RArm(RPackage): + """Functions to accompany A. Gelman and J. Hill, Data Analysis Using + Regression and Multilevel/Hierarchical Models, Cambridge University + Press, 2007.""" + + homepage = "https://github.com/suyusung/arm" + cran = "arm" + + license("GPL-2.0-or-later", checked_by="wdconinc") + + version("1.14-4", sha256="425bcb0afea2efb668d15ed8daa430bb356c62587eba806fd91e37afac1807bd") + + depends_on("r@3.1.0:", type=("build", "run")) + depends_on("r-mass", type=("build", "run")) + depends_on("r-matrix@1.0:", type=("build", "run")) + depends_on("r-lme4@1.0:", type=("build", "run")) + depends_on("r-abind", type=("build", "run")) + depends_on("r-coda", type=("build", "run")) + depends_on("r-nlme", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-askpass/package.py b/var/spack/repos/builtin/packages/r-askpass/package.py index 8c7d5a5d3ee88b..76563eb0efe205 100644 --- a/var/spack/repos/builtin/packages/r-askpass/package.py +++ b/var/spack/repos/builtin/packages/r-askpass/package.py @@ -22,6 +22,7 @@ class RAskpass(RPackage): license("MIT") + version("1.2.0", sha256="b922369781934d0ffc8d0c0177e8ace56796c2e6a726f65e460c16f792592cef") version("1.1", sha256="db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f") depends_on("r-sys@2.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-assertive-code/package.py b/var/spack/repos/builtin/packages/r-assertive-code/package.py index 81b3036035ef93..cfab4f28a21d34 100644 --- a/var/spack/repos/builtin/packages/r-assertive-code/package.py +++ b/var/spack/repos/builtin/packages/r-assertive-code/package.py @@ -16,6 +16,7 @@ class RAssertiveCode(RPackage): cran = "assertive.code" + version("0.0-4", sha256="2f820474ed20e06f65b284962c87cd1e85220a11cc7fcde09716f0eee5821387") version("0.0-3", sha256="ef80e8d1d683d776a7618e78ddccffca7f72ab4a0fcead90c670bb8f8cb90be2") depends_on("r@3.0.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-backports/package.py b/var/spack/repos/builtin/packages/r-backports/package.py index 45f7f2edd6a58b..9fa8a9c63d7d64 100644 --- a/var/spack/repos/builtin/packages/r-backports/package.py +++ b/var/spack/repos/builtin/packages/r-backports/package.py @@ -20,6 +20,7 @@ class RBackports(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.5.0", sha256="0d3ed9db8f1505e88967f48d669b2a257e0c6b7e6320ea64b946c1bd40897ca2") version("1.4.1", sha256="845c3c59fbb05e5a892c4231b955a0afdd331d82b7cc815bcff0672023242474") version("1.4.0", sha256="e7611565d24a852ad8b08579a7c67ad9121c1bda148bade98c7bec686e8dabbf") version("1.2.1", sha256="a2834bbd57e305e5d8010322f1906ea1789b3b5ba5eca77c5ff4248aceb7c2d5") diff --git a/var/spack/repos/builtin/packages/r-bayesm/package.py b/var/spack/repos/builtin/packages/r-bayesm/package.py index faebd2b48d6b2d..6af5198de1b65c 100644 --- a/var/spack/repos/builtin/packages/r-bayesm/package.py +++ b/var/spack/repos/builtin/packages/r-bayesm/package.py @@ -33,6 +33,7 @@ class RBayesm(RPackage): license("GPL-2.0-or-later") + version("3.1-6", sha256="17d72b9cdc090845f98e7a04640380d0baef8bc23d1487c8f64dc192fdb93cb5") version("3.1-5", sha256="f223074ca41ede293b48350eac77a565e034f0f8cf3dd72d0e1d126cc58047a2") version("3.1-4", sha256="061b216c62bc72eab8d646ad4075f2f78823f9913344a781fa53ea7cf4a48f94") version("3.1-3", sha256="51e4827eca8cd4cf3626f3c2282543df7c392b3ffb843f4bfb386fe104642a10") diff --git a/var/spack/repos/builtin/packages/r-bayesplot/package.py b/var/spack/repos/builtin/packages/r-bayesplot/package.py index adec1f7bebb528..3910a5bca320be 100644 --- a/var/spack/repos/builtin/packages/r-bayesplot/package.py +++ b/var/spack/repos/builtin/packages/r-bayesplot/package.py @@ -22,6 +22,7 @@ class RBayesplot(RPackage): license("GPL-3.0-or-later") + version("1.11.1", sha256="4f71e67391e0135acd3e890989b87025f3f8160242f532a8e1a0ed74ed0f3830") version("1.10.0", sha256="bb4cb92b1ae4cf8ae5f4b5cb092aba34af3d820d137e1f2265cca8f3e85113ff") version("1.9.0", sha256="0a81a4b99cf781334e57cfc3c469fad8b932a68204016a3bbca33cab4e2a1e43") version("1.8.1", sha256="d8d74201ea91fa5438714686ca22a947ec9375b6c12b0cfef010c57104b1aa2a") @@ -30,7 +31,9 @@ class RBayesplot(RPackage): depends_on("r@3.1.0:", type=("build", "run")) depends_on("r-dplyr@0.8.0:", type=("build", "run")) depends_on("r-ggplot2@3.0.0:", type=("build", "run")) + depends_on("r-ggplot2@3.4.0:", type=("build", "run"), when="@1.11.0:") depends_on("r-ggridges", type=("build", "run")) + depends_on("r-ggridges@0.5.5:", type=("build", "run"), when="@1.11.1:") depends_on("r-glue", type=("build", "run")) depends_on("r-posterior", type=("build", "run"), when="@1.9.0:") depends_on("r-reshape2", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-bglr/package.py b/var/spack/repos/builtin/packages/r-bglr/package.py index 98a96e20b9e8e5..0a9e961c88b077 100644 --- a/var/spack/repos/builtin/packages/r-bglr/package.py +++ b/var/spack/repos/builtin/packages/r-bglr/package.py @@ -13,6 +13,7 @@ class RBglr(RPackage): license("GPL-3.0-only") + version("1.1.2", sha256="39476f3739bd86905a379e2d5de86ef1f8b0e10c311e350d95ce7aadb7b28224") version("1.1.0", sha256="97c5bb8a461eb408e907693811b2d917efc993000da06591a83a3f5529451ea7") version("1.0.9", sha256="440a96f9f502e0d6ecc8c00720d1ccdbab5ee8223e1def6c930edaa9a9de9099") version("1.0.8", sha256="5e969590d80b2f272c02a43b487ab1ffa13af386e0342993e6ac484fc82c9b95") diff --git a/var/spack/repos/builtin/packages/r-bh/package.py b/var/spack/repos/builtin/packages/r-bh/package.py index ec028b901db5d5..5745307b54dc54 100644 --- a/var/spack/repos/builtin/packages/r-bh/package.py +++ b/var/spack/repos/builtin/packages/r-bh/package.py @@ -26,6 +26,7 @@ class RBh(RPackage): cran = "BH" + version("1.84.0-0", sha256="6fb660755f572cd975073d7052075654acf8db12d208954ca223b8e4f77ef1ac") version("1.81.0-1", sha256="f51c8badd6f181e06353314e1d15a6ec1495cc498ee74b6fa4ea8aba6e97ff64") version("1.78.0-0", sha256="3b9e9d07682013e0c06a396dda176b405eab99a7273eca6c40d1b4c4110e8cb3") version("1.75.0-0", sha256="ae4c10992607dd697663f60675a46a5770851da159330bb63c4a68890bdd6f5a") diff --git a/var/spack/repos/builtin/packages/r-biasedurn/package.py b/var/spack/repos/builtin/packages/r-biasedurn/package.py index 9b626313ab0e13..4efc158c227c7a 100644 --- a/var/spack/repos/builtin/packages/r-biasedurn/package.py +++ b/var/spack/repos/builtin/packages/r-biasedurn/package.py @@ -18,6 +18,7 @@ class RBiasedurn(RPackage): cran = "BiasedUrn" + version("2.0.12", sha256="29b3b596431c5364e3be9aae2068adb44a205de31c66ec3fa1ef06a4ab8c5792") version("2.0.9", sha256="bac62bbbc3e2417772f8784996a6c2d0857adb42e86e46b1a9703b187a406b09") version("2.0.8", sha256="205e7f8da8fba76fbf4bd9d12a027599b685dedecc818aad39de5c51dc47b856") version("1.07", sha256="2377c2e59d68e758a566452d7e07e88663ae61a182b9ee455d8b4269dda3228e") diff --git a/var/spack/repos/builtin/packages/r-bigalgebra/package.py b/var/spack/repos/builtin/packages/r-bigalgebra/package.py index 741c9a4ca2443b..229d37cdbb44cc 100644 --- a/var/spack/repos/builtin/packages/r-bigalgebra/package.py +++ b/var/spack/repos/builtin/packages/r-bigalgebra/package.py @@ -22,6 +22,7 @@ class RBigalgebra(RPackage): license("LGPL-3.0-only OR Apache-2.0") + version("1.1.1", sha256="fc6a48b940cca86caf8372648a1b1e4066f2f6d618a77303a1c8766c5b7bbf1f") version("1.1.0", sha256="e51530287a64826a3dfb55f41594bc8123b7b4c9b2074f6c8de218fa8b525734") version("1.0.1", sha256="ff7e261d0aa0e0f498e926d923ac62fc5cb783fa1f74bb2ff76a09167388a9d2") version("1.0.0", sha256="f186b603bd660be0cc5b7a52c943e23e92fef264f0bc96a8858e38df6cfc4085") diff --git a/var/spack/repos/builtin/packages/r-biglm/package.py b/var/spack/repos/builtin/packages/r-biglm/package.py new file mode 100644 index 00000000000000..9fd2391596f2fa --- /dev/null +++ b/var/spack/repos/builtin/packages/r-biglm/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RBiglm(RPackage): + """Regression for data too large to fit in memory.""" + + homepage = "https://cran.r-project.org/web/packages/biglm/index.html" + cran = "biglm" + + license("GPL-2.0-or-later", checked_by="wdconinc") + + version("0.9-3", sha256="805d483dc58c041f1616267abeb39cecaaf7271a34e90668a5439383bf9a0d58") + + depends_on("r-dbi", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-bigmemory-sri/package.py b/var/spack/repos/builtin/packages/r-bigmemory-sri/package.py index 80deb2b010e4ce..780050cf95248f 100644 --- a/var/spack/repos/builtin/packages/r-bigmemory-sri/package.py +++ b/var/spack/repos/builtin/packages/r-bigmemory-sri/package.py @@ -14,5 +14,6 @@ class RBigmemorySri(RPackage): cran = "bigmemory.sri" + version("0.1.8", sha256="029a4ed24aa17636a20b83857d55fe6a9283acb8b647cbc75280dea8ec987771") version("0.1.6", sha256="3bfa6ac966ce0ea93283f5856a853d0ee5ff85aedd7a7d1ca8a93d0aa642860c") version("0.1.3", sha256="55403252d8bae9627476d1f553236ea5dc7aa6e54da6980526a6cdc66924e155") diff --git a/var/spack/repos/builtin/packages/r-bigmemory/package.py b/var/spack/repos/builtin/packages/r-bigmemory/package.py index caeca61193a357..24f9e0ec3bad7b 100644 --- a/var/spack/repos/builtin/packages/r-bigmemory/package.py +++ b/var/spack/repos/builtin/packages/r-bigmemory/package.py @@ -18,6 +18,7 @@ class RBigmemory(RPackage): license("LGPL-3.0-only OR Apache-2.0") + version("4.6.4", sha256="fe3f576c0d87fd2820c0f436a202261dff353e50e5b86dd9c80fdea7ad60002d") version("4.6.1", sha256="b56e157c87ed6c4fc69d4cb9c697ae9a2001726e776e41aa7c48b35327b65141") version("4.5.36", sha256="18c67fbe6344b2f8223456c4f19ceebcf6c1166255eab81311001fd67a45ef0e") diff --git a/var/spack/repos/builtin/packages/r-bindrcpp/package.py b/var/spack/repos/builtin/packages/r-bindrcpp/package.py index 8bb8749e9957a2..dc804e6f7b7cfe 100644 --- a/var/spack/repos/builtin/packages/r-bindrcpp/package.py +++ b/var/spack/repos/builtin/packages/r-bindrcpp/package.py @@ -16,6 +16,7 @@ class RBindrcpp(RPackage): license("MIT") + version("0.2.3", sha256="662dae785aee715855415f4e743281ccbf0832e426084dc2f0ca9c9c908ec9fa") version("0.2.2", sha256="48130709eba9d133679a0e959e49a7b14acbce4f47c1e15c4ab46bd9e48ae467") version("0.2", sha256="d0efa1313cb8148880f7902a4267de1dcedae916f28d9a0ef5911f44bf103450") diff --git a/var/spack/repos/builtin/packages/r-biocmanager/package.py b/var/spack/repos/builtin/packages/r-biocmanager/package.py index 8bf3a70367d48d..40c1b0dc44710f 100644 --- a/var/spack/repos/builtin/packages/r-biocmanager/package.py +++ b/var/spack/repos/builtin/packages/r-biocmanager/package.py @@ -13,6 +13,7 @@ class RBiocmanager(RPackage): cran = "BiocManager" + version("1.30.24", sha256="645c423bb144dbd476cb308678bd36e06c1a3494115f157166dd3f59955ec7d1") version("1.30.20", sha256="b9e72d7687abbd785a69fecb530ec86ad92257a6be95b8e15953b193a516d5ea") version("1.30.19", sha256="6897ab1c58ab2fa3108e22d70bc4150c683bb4ac29355ba7886b88acc30c18e2") version("1.30.18", sha256="f763126b45614e1b83260da5311923eac50db24002f3c22fa5f667434a5b5c35") diff --git a/var/spack/repos/builtin/packages/r-biomartr/package.py b/var/spack/repos/builtin/packages/r-biomartr/package.py index cef67089bb4cdf..cc61ee3ef53e41 100644 --- a/var/spack/repos/builtin/packages/r-biomartr/package.py +++ b/var/spack/repos/builtin/packages/r-biomartr/package.py @@ -25,6 +25,7 @@ class RBiomartr(RPackage): license("GPL-2.0-only") + version("1.0.7", sha256="9d1d5c51b61ee67ce7ca18afdb0a136ef5709d92d077d80163f9d52ee6c28645") version("1.0.2", sha256="7fd6cccd915aa39e593fb7591107ab9792d98a119dd42f3f666e5184f4e42743") version("0.9.2", sha256="d88085696e9c5614828602254c33f2cdd3bbfeebc2f21a705eee3cb961097c89") diff --git a/var/spack/repos/builtin/packages/r-bitops/package.py b/var/spack/repos/builtin/packages/r-bitops/package.py index 2816e2f8001961..7cfcdeb49bb03b 100644 --- a/var/spack/repos/builtin/packages/r-bitops/package.py +++ b/var/spack/repos/builtin/packages/r-bitops/package.py @@ -16,6 +16,7 @@ class RBitops(RPackage): license("GPL-2.0-or-later") + version("1.0-8", sha256="78a14b9f69645dc65e1973e1f1a9968c53d5c5edc6aa1ac85661e1112f212738") version("1.0-7", sha256="e9b5fc92c39f94a10cd0e13f3d6e2a9c17b75ea01467077a51d47a5f708517c4") version("1.0-6", sha256="9b731397b7166dd54941fb0d2eac6df60c7a483b2e790f7eb15b4d7b79c9d69c") diff --git a/var/spack/repos/builtin/packages/r-blavaan/package.py b/var/spack/repos/builtin/packages/r-blavaan/package.py index 5858afc3246bf0..c6e8ec7059fbc3 100644 --- a/var/spack/repos/builtin/packages/r-blavaan/package.py +++ b/var/spack/repos/builtin/packages/r-blavaan/package.py @@ -18,6 +18,7 @@ class RBlavaan(RPackage): license("GPL-3.0-or-later") + version("0.5-5", sha256="a8d3bc5e9d15a2e8496950e87ed3c6bc6d769e761ec068e1f063f2d255330b6d") version("0.4-7", sha256="43577264a1faff3cf98fce2c03b729816b40a82d36846458b8026b62da3008c3") version("0.4-3", sha256="a9f9f7b32aab7e7f179340c9f0f9d154b5fac51352c4fd590d317c201fe81b74") version("0.4-1", sha256="afb077d72f84ef0b6f45ef2ccb8335358042943c32a3472a9ca239ebca1c4aa4") @@ -29,6 +30,7 @@ class RBlavaan(RPackage): depends_on("r-lavaan@0.6-7:", type=("build", "run"), when="@0.3-18:") depends_on("r-lavaan@0.6-10:", type=("build", "run"), when="@0.4-1:") depends_on("r-lavaan@0.6-14:", type=("build", "run"), when="@0.4-7:") + depends_on("r-lavaan@0.6-17:", type=("build", "run"), when="@0.5-3:") depends_on("r-rcpp@0.12.15:", type=("build", "run")) depends_on("r-coda", type=("build", "run")) depends_on("r-mnormt", type=("build", "run")) @@ -36,6 +38,7 @@ class RBlavaan(RPackage): depends_on("r-loo@2.0:", type=("build", "run")) depends_on("r-rstan@2.19.2:", type=("build", "run")) depends_on("r-rstan@2.21.2:", type=("build", "run"), when="@0.3-18:") + depends_on("r-rstan@2.26.0:", type=("build", "run"), when="@0.5-2:") depends_on("r-rstantools@1.5.0:", type=("build", "run")) depends_on("r-rcppparallel@5.0.1:", type=("build", "run")) depends_on("r-bayesplot", type=("build", "run")) @@ -43,6 +46,7 @@ class RBlavaan(RPackage): depends_on("r-future-apply", type=("build", "run")) depends_on("r-tmvnsim", type=("build", "run"), when="@0.3-18:") depends_on("r-stanheaders@2.18.1:", type=("build", "run")) + depends_on("r-stanheaders@2.26.0:", type=("build", "run"), when="@0.5-2:") depends_on("r-bh@1.69.0:", type=("build", "run")) depends_on("r-rcppeigen@0.3.3.4.0:", type=("build", "run")) depends_on("gmake", type="build") diff --git a/var/spack/repos/builtin/packages/r-blockmodeling/package.py b/var/spack/repos/builtin/packages/r-blockmodeling/package.py index bc330e7b024276..a8fc9d5846caa1 100644 --- a/var/spack/repos/builtin/packages/r-blockmodeling/package.py +++ b/var/spack/repos/builtin/packages/r-blockmodeling/package.py @@ -16,6 +16,7 @@ class RBlockmodeling(RPackage): license("GPL-2.0-or-later") + version("1.1.5", sha256="3b6f910078c29b801651e3a686112e41e456c517e1b99fcda11bb12681bb1503") version("1.1.4", sha256="69ce17ed96ca754a6308edb62188e0040e357568b975ce8986f68ecb2fead2b8") version("1.1.3", sha256="5f705f92c9b96dcbdd6f109c6a99f88d70c576485369700b82391b6a75afbda6") version("1.0.5", sha256="18c227bb52f28aff4dae8929563474e3e006e238438c823b67dc6baa897f88ed") diff --git a/var/spack/repos/builtin/packages/r-bookdown/package.py b/var/spack/repos/builtin/packages/r-bookdown/package.py index b798a80533ab1a..2346bd0d8644cc 100644 --- a/var/spack/repos/builtin/packages/r-bookdown/package.py +++ b/var/spack/repos/builtin/packages/r-bookdown/package.py @@ -16,6 +16,7 @@ class RBookdown(RPackage): license("GPL-3.0-only") + version("0.40", sha256="58df4a044704b6c42a397f4e430a7fc8f6171bad1447872119aceafd158eac39") version("0.33", sha256="2288e1d0c383e6ab49202a18db6cc1a04c3adc1b25da646cc46167bc6c2892c3") version("0.29", sha256="5b4e3dc44a5c6574e3d9e19ebe7897d3ddcf6eaffe8214e1d272b545929ff723") version("0.26", sha256="c6207288cb72ea7c555cbad449c61278e94b742cac1f610879fb3f2d60b2b185") @@ -41,6 +42,7 @@ class RBookdown(RPackage): depends_on("r-xfun@0.13:", type=("build", "run"), when="@0.21:") depends_on("r-xfun@0.22:", type=("build", "run"), when="@0.24:") depends_on("r-xfun@0.29:", type=("build", "run"), when="@0.26:") + depends_on("r-xfun@0.39:", type=("build", "run"), when="@0.34:") depends_on("r-tinytex@0.12:", type=("build", "run"), when="@0.12:") depends_on("r-yaml@2.1.14:", type=("build", "run")) depends_on("r-yaml@2.1.19:", type=("build", "run"), when="@0.21:") diff --git a/var/spack/repos/builtin/packages/r-boot/package.py b/var/spack/repos/builtin/packages/r-boot/package.py index ae81554a166608..1d7b2442cba173 100644 --- a/var/spack/repos/builtin/packages/r-boot/package.py +++ b/var/spack/repos/builtin/packages/r-boot/package.py @@ -17,6 +17,7 @@ class RBoot(RPackage): license("custom") + version("1.3-30", sha256="5509d62bd6e6c21b6ef352ab7846d89027bddbfb727fd0cf55da59558bd3fe97") version("1.3-28.1", sha256="d4cde76fcc8ccc7ffa329de69147b66a6a93a10188e89342fd18207b1d02ff53") version("1.3-28", sha256="9f7158fd2714659f590c3955651893dc24bd8f39196bc5a4cc35b0b031744a32") version("1.3-25", sha256="464835fcb453072346ce49e4ae318e04c9dba682349be49db616623b6088fbbe") diff --git a/var/spack/repos/builtin/packages/r-brew/package.py b/var/spack/repos/builtin/packages/r-brew/package.py index 1e2398a8ea0e41..df202638bc1f7b 100644 --- a/var/spack/repos/builtin/packages/r-brew/package.py +++ b/var/spack/repos/builtin/packages/r-brew/package.py @@ -17,6 +17,7 @@ class RBrew(RPackage): license("GPL-2.0-only") + version("1.0-10", sha256="4181f7334e032ae0775c5dec49d6137eb25d5430ca3792d321793307b3dda38f") version("1.0-8", sha256="11652d5a7042d645cc5be5f9f97ff4d46083cea7d3ad2dd6ad1570b52c097826") version("1.0-7", sha256="38b859c1dca63479f6937c593da8f806f2b3279585bb6e20ecff1b898469e76e") version("1.0-6", sha256="d70d1a9a01cf4a923b4f11e4374ffd887ad3ff964f35c6f9dc0f29c8d657f0ed") diff --git a/var/spack/repos/builtin/packages/r-brio/package.py b/var/spack/repos/builtin/packages/r-brio/package.py index c4feef388bd3a2..310d3f655b639c 100644 --- a/var/spack/repos/builtin/packages/r-brio/package.py +++ b/var/spack/repos/builtin/packages/r-brio/package.py @@ -17,5 +17,8 @@ class RBrio(RPackage): license("MIT") + version("1.1.5", sha256="a9f22335ea39039de25bb27bccd5ff1ffb2b743579b31d150b6b91c9ea81d0b8") version("1.1.3", sha256="eaa89041856189bee545bf1c42c7920a0bb0f1f70bb477487c467ee3e8fedcc6") version("1.1.0", sha256="6bb3a3b47bea13f1a1e3dcdc8b9f688502643e4b40a481a34aa04a261aabea38") + + depends_on("r@3.6:", when="@1.1.4:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-brms/package.py b/var/spack/repos/builtin/packages/r-brms/package.py index e1ce9accb9fbff..45567c81d85fff 100644 --- a/var/spack/repos/builtin/packages/r-brms/package.py +++ b/var/spack/repos/builtin/packages/r-brms/package.py @@ -29,6 +29,7 @@ class RBrms(RPackage): license("GPL-2.0-only") + version("2.21.0", sha256="7289ff33c2a4b83584b7fece0a6aa53fd14b5881a467d417fbca5dbf62ec5d58") version("2.19.0", sha256="0e146842c7acfcc6b8273df536eabb5279fb3bf2ae27ce1696f7d838d94fe5c1") version("2.18.0", sha256="63914be03cd1c4e6333317d22d7827ba2dc0414cb0dc88337cf74763ba07e111") version("2.17.0", sha256="24e5a3a40b81bea558e8f660d0de7fd1a4c2080c7553baac98f34dd2682ece71") @@ -37,20 +38,22 @@ class RBrms(RPackage): version("2.15.0", sha256="c11701d1d8758590b74bb845b568b736e4455a81b114c7dfde0b27b7bd1bcc2f") depends_on("r@3.5.0:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@2.20.1:") depends_on("r-rcpp@0.12.0:", type=("build", "run")) depends_on("r-rstan@2.19.2:", type=("build", "run")) + depends_on("r-rstan@2.29.0:", type=("build", "run"), when="@2.21.0:") depends_on("r-ggplot2@2.0.0:", type=("build", "run")) depends_on("r-loo@2.3.1:", type=("build", "run")) depends_on("r-posterior@1.0.0:", type=("build", "run"), when="@2.16:") - depends_on("r-matrix@1.1.1:", type=("build", "run")) + depends_on("r-matrix@1.1-1:", type=("build", "run")) depends_on("r-mgcv@1.8-13:", type=("build", "run")) depends_on("r-rstantools@2.1.1:", type=("build", "run")) depends_on("r-bayesplot@1.5.0:", type=("build", "run")) - depends_on("r-shinystan@2.4.0:", type=("build", "run")) depends_on("r-bridgesampling@0.3-0:", type=("build", "run")) depends_on("r-glue@1.3.0:", type=("build", "run")) depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@2.19.0:") depends_on("r-future@1.19.0:", type=("build", "run")) + depends_on("r-future-apply@1.0.0:", type=("build", "run"), when="@2.21.0:") depends_on("r-matrixstats", type=("build", "run")) depends_on("r-nleqslv", type=("build", "run")) depends_on("r-nlme", type=("build", "run")) @@ -58,4 +61,5 @@ class RBrms(RPackage): depends_on("r-abind", type=("build", "run")) depends_on("r-backports", type=("build", "run")) + depends_on("r-shinystan@2.4.0:", type=("build", "run"), when="@:2.20.4") depends_on("r-projpred@2.0.0:", type=("build", "run"), when="@:2.16.1") diff --git a/var/spack/repos/builtin/packages/r-broom-helpers/package.py b/var/spack/repos/builtin/packages/r-broom-helpers/package.py new file mode 100644 index 00000000000000..ac7b5314beae70 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-broom-helpers/package.py @@ -0,0 +1,32 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RBroomHelpers(RPackage): + """Provides suite of functions to work with regression model 'broom::tidy()' + tibbles. The suite includes functions to group regression model terms by + variable, insert reference and header rows for categorical variables, add + variable labels, and more.""" + + homepage = "https://larmarange.github.io/broom.helpers/" + cran = "broom.helpers" + + license("GPL-3.0-or-later", checked_by="wdconinc") + + version("1.16.0", sha256="9a7bac8678cdcc9a7e0f3b6d287d375fd5f1e880c916ac4d661f02c2c84e2715") + + depends_on("r@4.2:", type=("build", "run"), when="@1.16.0:") + depends_on("r-broom@0.8:", type=("build", "run")) + depends_on("r-cli", type=("build", "run")) + depends_on("r-dplyr", type=("build", "run")) + depends_on("r-labelled", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run")) + depends_on("r-purrr", type=("build", "run")) + depends_on("r-rlang@1.0.1:", type=("build", "run")) + depends_on("r-stringr", type=("build", "run")) + depends_on("r-tibble", type=("build", "run")) + depends_on("r-tidyr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-broom/package.py b/var/spack/repos/builtin/packages/r-broom/package.py index 0f48847a4c438b..f755b886c9eb82 100644 --- a/var/spack/repos/builtin/packages/r-broom/package.py +++ b/var/spack/repos/builtin/packages/r-broom/package.py @@ -22,6 +22,7 @@ class RBroom(RPackage): license("MIT") + version("1.0.6", sha256="24cf36248dffbde38d3d81befa679e362bfd0526b9843bc536a85452a19fbccf") version("1.0.4", sha256="1d5f11b509786a8a45ffdd137243e24d6445f2944947cbd62a0734a06add0ad6") version("1.0.1", sha256="4b5e5aa485f0e23ed993088fc84159e31a00087e3a12327071dda25193382892") version("0.8.0", sha256="66a1095d4430450dc810a5cea61cd7e7bee0e23739dcf5ddc5b57c9894fcf999") @@ -39,7 +40,6 @@ class RBroom(RPackage): depends_on("r-backports", type=("build", "run"), when="@0.5.0:") depends_on("r-dplyr", type=("build", "run")) depends_on("r-dplyr@1.0.0:", type=("build", "run"), when="@0.7.3:") - depends_on("r-ellipsis", type=("build", "run"), when="@0.7.3:") depends_on("r-generics@0.0.2:", type=("build", "run"), when="@0.5.1:") depends_on("r-glue", type=("build", "run"), when="@0.7.3:") depends_on("r-lifecycle", type=("build", "run"), when="@1.0.4:") @@ -51,6 +51,7 @@ class RBroom(RPackage): depends_on("r-tidyr", type=("build", "run")) depends_on("r-tidyr@1.0.0:", type=("build", "run"), when="@0.7.3:") + depends_on("r-ellipsis", type=("build", "run"), when="@0.7.3:1.0.5") depends_on("r-plyr", type=("build", "run"), when="@:0.4.2") depends_on("r-psych", type=("build", "run"), when="@:0.4.2") depends_on("r-reshape2", type=("build", "run"), when="@:0.5.2") diff --git a/var/spack/repos/builtin/packages/r-bslib/package.py b/var/spack/repos/builtin/packages/r-bslib/package.py index f664c309595d6e..d277073d6ab0ed 100644 --- a/var/spack/repos/builtin/packages/r-bslib/package.py +++ b/var/spack/repos/builtin/packages/r-bslib/package.py @@ -18,20 +18,27 @@ class RBslib(RPackage): license("MIT") + version("0.8.0", sha256="fd182ddb1b128691d2b0c12882361732a23d451dbf4052ba70b11257e8d44b03") version("0.4.2", sha256="9a40b7a1bbe409af273e1e940d921ab198ea576548f06f055f552f70ff822f19") version("0.4.1", sha256="4ebd1fc84cd19b414e8f8c13fb95270fc28ede125b6e58b08c574ca8c9e0e62f") version("0.4.0", sha256="fbea4ecec726f23618e825624f1d9c03939f765ca5a490b171ebf95b815475c2") version("0.3.1", sha256="5f5cb56e5cab9039a24cd9d70d73b69c2cab5b2f5f37afc15f71dae0339d9849") depends_on("r@2.10:", type=("build", "run")) + depends_on("r-fastmap@1.1.1:", type=("build", "run"), when="@0.7.0:") depends_on("r-htmltools@0.5.2:", type=("build", "run")) depends_on("r-htmltools@0.5.4:", type=("build", "run"), when="@0.4.2:") + depends_on("r-htmltools@0.5.7:", type=("build", "run"), when="@0.6.0:") + depends_on("r-htmltools@0.5.8:", type=("build", "run"), when="@0.7.0:") depends_on("r-jsonlite", type=("build", "run")) depends_on("r-sass@0.4.0:", type=("build", "run")) depends_on("r-jquerylib@0.1.3:", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@0.6.0:") depends_on("r-rlang", type=("build", "run")) depends_on("r-memoise", type=("build", "run"), when="@0.4.0:") depends_on("r-memoise@2.0.1:", type=("build", "run"), when="@0.4.1:") depends_on("r-mime", type=("build", "run"), when="@0.4.2:") + depends_on("r-sass@0.4.0:", type=("build", "run"), when="@0.5.0:") + depends_on("r-sass@0.4.9:", type=("build", "run"), when="@0.6.2:") depends_on("r-base64enc", type=("build", "run"), when="@0.4.2:") depends_on("r-cachem", type=("build", "run"), when="@0.4.0:") diff --git a/var/spack/repos/builtin/packages/r-bwstest/package.py b/var/spack/repos/builtin/packages/r-bwstest/package.py index 85a8808096db96..159401ee9c577b 100644 --- a/var/spack/repos/builtin/packages/r-bwstest/package.py +++ b/var/spack/repos/builtin/packages/r-bwstest/package.py @@ -17,6 +17,7 @@ class RBwstest(RPackage): cran = "BWStest" + version("0.2.3", sha256="4bc4cc27fcf0aa60c6497048b74528923aae852c98480900204835a8ebd714b2") version("0.2.2", sha256="faff1dd698f1673a6befacb94d14281077d4c19be035a0a3bf85d77c1dfd5509") depends_on("r-memoise", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-cachem/package.py b/var/spack/repos/builtin/packages/r-cachem/package.py index b12ed8ef58ff60..7e5d9cc36ea52c 100644 --- a/var/spack/repos/builtin/packages/r-cachem/package.py +++ b/var/spack/repos/builtin/packages/r-cachem/package.py @@ -17,8 +17,10 @@ class RCachem(RPackage): license("MIT") + version("1.1.0", sha256="550839fc2ae5d865db475ba2c1714144f07fa0c052c72135b0e4a70287492e21") version("1.0.7", sha256="234fad2a947d1e1fb87d3fa92abf9197877772e31bc81ae5991ae69689b6320a") version("1.0.6", sha256="9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864") depends_on("r-rlang", type=("build", "run")) depends_on("r-fastmap", type=("build", "run")) + depends_on("r-fastmap@1.2.0:", when="@1.1.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-cairo/package.py b/var/spack/repos/builtin/packages/r-cairo/package.py index 8f025f25711620..f852fcb5fb764f 100644 --- a/var/spack/repos/builtin/packages/r-cairo/package.py +++ b/var/spack/repos/builtin/packages/r-cairo/package.py @@ -25,6 +25,7 @@ class RCairo(RPackage): cran = "Cairo" + version("1.6-2", sha256="6b6f4c6f93178a1295860a9dc6dc45e60fec70f684d5c8d0b59baf5b8dd44d62") version("1.6-0", sha256="c762ac1d8daa4af527342360c256ed742de4e3031d997e9e59c9a369fcafb7d3") version("1.5-15", sha256="bb3ab1ff6431c15eb01a66ddf90695cd9a2af3d5a384753f5180cd0401d2e89d") version("1.5-14", sha256="067751face3b5771e72f9fb49bfeefb3a7bbecc060b672ab4393cb5935204c7b") @@ -34,5 +35,14 @@ class RCairo(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r@2.4.0:", type=("build", "run")) - depends_on("cairo@1.2:") + # "The Cairo package requires cairo library 1.2.0 or higher with PNG support enabled" + # See https://www.rforge.net/Cairo/ + depends_on("cairo@1.2: +png") + # Disabled PDF support results in compilation failures in 1.6-1:1.6-2 + # See https://github.com/s-u/Cairo/pull/48 + depends_on("cairo +pdf", type=("build", "run"), when="@1.6-1:1.6-2") + # When cairo +ft, must also have +fc, for cairo_ft_font_face_create_for_pattern test + conflicts( + "^cairo ~fc", when="^cairo +ft", msg="For cairo freetype support, also need fontconfig." + ) depends_on("libxt") diff --git a/var/spack/repos/builtin/packages/r-callr/package.py b/var/spack/repos/builtin/packages/r-callr/package.py index 33abeee94dda7b..6e0b3731df7045 100644 --- a/var/spack/repos/builtin/packages/r-callr/package.py +++ b/var/spack/repos/builtin/packages/r-callr/package.py @@ -17,6 +17,7 @@ class RCallr(RPackage): license("MIT") + version("3.7.6", sha256="e4bce367e869e42eaeea05566d2033d8cee2103179b11cd9a401440b58a351f8") version("3.7.3", sha256="567bfedf073a1d4c5785f0553341608a214938110567b9a6495ff20ebb2fd04e") version("3.7.2", sha256="12da8a212679e450d8d43c3c6e61ed09b82047f376f316f6f6392f1638580307") version("3.7.0", sha256="d67255148595c6d0ba4c4d241bc9f6b5e00cafe25fdc13e38c10acc38653360a") diff --git a/var/spack/repos/builtin/packages/r-caracas/package.py b/var/spack/repos/builtin/packages/r-caracas/package.py index fea4048e4ef3cd..ab1edfe599ffd9 100644 --- a/var/spack/repos/builtin/packages/r-caracas/package.py +++ b/var/spack/repos/builtin/packages/r-caracas/package.py @@ -17,6 +17,7 @@ class RCaracas(RPackage): license("GPL-2.0-or-later") + version("2.1.1", sha256="3b31b5b1c2fa038e5a6df12cfe62390f9af0461873a38921d6c26468363c2661") version("2.0.0", sha256="9271239bf7457787371cbd44be74cb9909d67ab7c975b1744d8cf60d8b044b95") version("1.1.2", sha256="9c726c77508617e74d1a11ac6e276973df42e1ad81145db455cc6e420526c757") version("1.1.1", sha256="e14487c9492417cf5c7d7373c37dbb4fea4d91180a1a03154e51eaa7878b2769") diff --git a/var/spack/repos/builtin/packages/r-cardata/package.py b/var/spack/repos/builtin/packages/r-cardata/package.py index 400ff9f35c8e94..6966be3fb0b7df 100644 --- a/var/spack/repos/builtin/packages/r-cardata/package.py +++ b/var/spack/repos/builtin/packages/r-cardata/package.py @@ -19,4 +19,4 @@ class RCardata(RPackage): version("3.0-2", sha256="3b5c4eff1cc1e456a5331084774503eaa06cf61fb7acf6b9e8a6bfabd5735494") depends_on("r@3.0:", type=("build", "run")) - depends_on("r@3.5:", type=("build", "run"), when="@3.0-4:") + depends_on("r@3.5.0:", type=("build", "run"), when="@3.0-4:") diff --git a/var/spack/repos/builtin/packages/r-caretensemble/package.py b/var/spack/repos/builtin/packages/r-caretensemble/package.py index a3114fbd68ace9..8423e8ff99ac32 100644 --- a/var/spack/repos/builtin/packages/r-caretensemble/package.py +++ b/var/spack/repos/builtin/packages/r-caretensemble/package.py @@ -20,15 +20,20 @@ class RCaretensemble(RPackage): license("MIT") + version("4.0.0", sha256="9177ad477fd2872e944231764227bcf5e2eabc9916dabce91f1a2a2decc98f43") version("2.0.2", sha256="d8fcf3742beddc723b68677682708408cc11dcb8b36a0f70f03e7c4763e04f4d") version("2.0.1", sha256="7e595e604ce2d9d32afbc5404e6fcbcd7f80e687316e9ca3303aca3e44c3ef88") depends_on("r@3.2.0:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@4.0.0:") depends_on("r-pbapply", type=("build", "run")) depends_on("r-ggplot2", type=("build", "run")) - depends_on("r-digest", type=("build", "run")) - depends_on("r-plyr", type=("build", "run")) + depends_on("r-patchwork", type=("build", "run"), when="@4.0.0:") + depends_on("r-rlang", type=("build", "run"), when="@4.0.0:") depends_on("r-lattice", type=("build", "run")) - depends_on("r-gridextra", type=("build", "run")) depends_on("r-data-table", type=("build", "run")) depends_on("r-caret", type=("build", "run")) + + depends_on("r-digest", type=("build", "run"), when="@:2.0.3") + depends_on("r-gridextra", type=("build", "run"), when="@:2.0.3") + depends_on("r-plyr", type=("build", "run"), when="@:2.0.3") diff --git a/var/spack/repos/builtin/packages/r-caroline/package.py b/var/spack/repos/builtin/packages/r-caroline/package.py index a4db03a3608980..ec7b9872f210f8 100644 --- a/var/spack/repos/builtin/packages/r-caroline/package.py +++ b/var/spack/repos/builtin/packages/r-caroline/package.py @@ -24,6 +24,7 @@ class RCaroline(RPackage): license("Artistic-2.0") + version("0.9.2", sha256="04dfc574b5f763b8c09e57b68657b8ae7e6aae36083dd71819c96f971d660297") version("0.9.0", sha256="7231daacf2f0e89d9363ea919071f8352ae487011f56e84a4054de11a9243ac8") version("0.8.0", sha256="58f464711f7279ca2aa173e6ce29d3308e01db37dccefbbf14cd7720c0231976") version("0.7.6", sha256="e7ba948f7d87f091b498dd0eec2ca4fdad7af4e2bbb67e0945c2f0d3f2eadda9") diff --git a/var/spack/repos/builtin/packages/r-cca/package.py b/var/spack/repos/builtin/packages/r-cca/package.py index c33b4e205c0b17..d6929127836ff9 100644 --- a/var/spack/repos/builtin/packages/r-cca/package.py +++ b/var/spack/repos/builtin/packages/r-cca/package.py @@ -17,6 +17,7 @@ class RCca(RPackage): cran = "CCA" + version("1.2.2", sha256="f3b347f15dadd887f31206906e845c4893ec0cd7dc0c7e97c11001434c3d2e64") version("1.2.1", sha256="28febfce7c46039240346410e70f9d8795b536fc4e7e0d48d5370bd23cba9bd0") depends_on("r@2.10:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-checkmate/package.py b/var/spack/repos/builtin/packages/r-checkmate/package.py index ac294085f09e84..92cbecec4f401f 100644 --- a/var/spack/repos/builtin/packages/r-checkmate/package.py +++ b/var/spack/repos/builtin/packages/r-checkmate/package.py @@ -17,6 +17,7 @@ class RCheckmate(RPackage): license("BSD-3-Clause") + version("2.3.2", sha256="7255732d6c2da51204128a910e8c0d05246324a0402fca4d0d99433af40a88e3") version("2.1.0", sha256="b784dd5163a0350d084ef34882d9781373839dedeaa9a8b8e6187d773d0d21c6") version("2.0.0", sha256="0dc25b0e20c04836359df1885d099c6e4ad8ae0e585a9e4107f7ea945d9c6fa4") version("1.9.4", sha256="faa25754b757fe483b876f5d07b73f76f69a1baa971420892fadec4af4bbad21") diff --git a/var/spack/repos/builtin/packages/r-chemometrics/package.py b/var/spack/repos/builtin/packages/r-chemometrics/package.py index fac0b96c3e44e6..be933d41dffa02 100644 --- a/var/spack/repos/builtin/packages/r-chemometrics/package.py +++ b/var/spack/repos/builtin/packages/r-chemometrics/package.py @@ -16,6 +16,7 @@ class RChemometrics(RPackage): license("GPL-3.0-or-later") + version("1.4.4", sha256="fd0edb1ebe321ff7677d0a668d7dfc79a7cd55f408a53d1f13db4cf6347aa881") version("1.4.2", sha256="b705832fa167dc24b52b642f571ed1efd24c5f53ba60d02c7797986481b6186a") version("1.4.1", sha256="7646da0077657d672356204aa2094be68e10ec13617f92ae97ff53a389053905") version("1.3.9", sha256="553eda53789b6a4d0f77842c175f98be5b9a04bccc9d2ba0ecde1bb5c8a53f21") diff --git a/var/spack/repos/builtin/packages/r-chron/package.py b/var/spack/repos/builtin/packages/r-chron/package.py index fbce82e224f0a4..eb9105173b6998 100644 --- a/var/spack/repos/builtin/packages/r-chron/package.py +++ b/var/spack/repos/builtin/packages/r-chron/package.py @@ -15,6 +15,7 @@ class RChron(RPackage): license("GPL-2.0-only") + version("2.3-61", sha256="a096957625a0438075b3486322ee07c753c7c4ba3efcd04a3ac92476d6c43b9b") version("2.3-60", sha256="0e0675cec55b6cea87fc5776846215e0445442554684120079e66013067491ee") version("2.3-58", sha256="057fc628cde330c22b9d20365316d3632c2d217f4f2f97d39b1d1a2c93f766d0") version("2.3-57", sha256="9645d86a84d1afc12a0accf4f826fdd40e6d050a313424ad70f8085e8f19c232") diff --git a/var/spack/repos/builtin/packages/r-circlize/package.py b/var/spack/repos/builtin/packages/r-circlize/package.py index 2409a909fa5ac3..e480f4d031c79d 100644 --- a/var/spack/repos/builtin/packages/r-circlize/package.py +++ b/var/spack/repos/builtin/packages/r-circlize/package.py @@ -25,6 +25,7 @@ class RCirclize(RPackage): license("MIT") + version("0.4.16", sha256="16dc32c7704906d13a9e5281bb396e92fb89a6b17fa5e201953240726b650b67") version("0.4.15", sha256="d602d55313fe7c675109153d6ed3b99bdba5292e1deefed71d5a21e0db595cc7") version("0.4.13", sha256="6cbadbf8e8b1abbd71a79080677d2b95f2bdd18f2e4d707c32d5c2ff26c5369b") version("0.4.12", sha256="b3b60caa5292cf980cf474c85f59582f6862925631a4da86a78eac05903252f4") @@ -33,6 +34,7 @@ class RCirclize(RPackage): version("0.4.0", sha256="abdc1bbe264be42c1d7b65869979da7cd131032fd6fd3f11f9744dae54e83f5c") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@0.4.16:") depends_on("r-globaloptions@0.1.0:", type=("build", "run")) depends_on("r-globaloptions@0.1.2:", type=("build", "run"), when="@0.4.12:") depends_on("r-shape", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-clarabel/package.py b/var/spack/repos/builtin/packages/r-clarabel/package.py new file mode 100644 index 00000000000000..8c78cdb0e87d5f --- /dev/null +++ b/var/spack/repos/builtin/packages/r-clarabel/package.py @@ -0,0 +1,28 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RClarabel(RPackage): + """A versatile interior point solver that solves linear programs (LPs), + quadratic programs (QPs), second-order cone programs (SOCPs), semidefinite + programs (SDPs), and problems with exponential and power cone constraints + (). For quadratic objectives, unlike interior + point solvers based on the standard homogeneous self-dual embedding (HSDE) + model, 'Clarabel' handles quadratic objective without requiring any + epigraphical reformulation of its objective function. It can therefore + be significantly faster than other HSDE-based solvers for problems with + quadratic objective functions. Infeasible problems are detected using using + a homogeneous embedding technique.""" + + homepage = "https://oxfordcontrol.github.io/clarabel-r/" + cran = "clarabel" + + license("Apache-2.0", checked_by="wdconinc") + + version("0.9.0", sha256="50963022f8e5dc9d956193acf7b87194548dc4b3555bd844aa1f9f4d34f2c6bc") + + depends_on("rust", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-class/package.py b/var/spack/repos/builtin/packages/r-class/package.py index 8516aabd74339f..a55127d71da348 100644 --- a/var/spack/repos/builtin/packages/r-class/package.py +++ b/var/spack/repos/builtin/packages/r-class/package.py @@ -16,6 +16,7 @@ class RClass(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("7.3-22", sha256="b6994164e93843fcc7e08dfdc8c8b4af6a5a10ef7153d2e72a6855342508d15c") version("7.3-21", sha256="0c19404aa4d2da61a62495e788b07c8e429c4c5ee64486ea5e6dd347bcaecddf") version("7.3-20", sha256="e65b046bc72b312ff0c5dc7feba4fa3e9bc63387274d44911493782b85f65483") version("7.3-19", sha256="7820ae94b22009561a69ed1f8b2ca2a3814be6a656e9884738206997caecbe37") diff --git a/var/spack/repos/builtin/packages/r-classint/package.py b/var/spack/repos/builtin/packages/r-classint/package.py index 5eec1170fb0079..ebc37fb90d13bf 100644 --- a/var/spack/repos/builtin/packages/r-classint/package.py +++ b/var/spack/repos/builtin/packages/r-classint/package.py @@ -14,6 +14,7 @@ class RClassint(RPackage): cran = "classInt" + version("0.4-10", sha256="c3561eafbc493ac02840191d4f1e4d2ef437ca8eb20f41fc5eca28f00ee42b8b") version("0.4-9", sha256="5b11af7d08f8793c7b47ee7c68b8e371cb23027165d30abddbd8b2abcc20e1c3") version("0.4-8", sha256="6ae9617f5b71bbecfa204a4f36b5972808bafd060d87a4a5bac17f3ad2ca59b3") version("0.4-3", sha256="9ede7a2a7a6b6c114919a3315a884fb592e33b037a50a4fe45cbd4fe2fc434ac") diff --git a/var/spack/repos/builtin/packages/r-cli/package.py b/var/spack/repos/builtin/packages/r-cli/package.py index ff4540746592ae..95dd64f635eea6 100644 --- a/var/spack/repos/builtin/packages/r-cli/package.py +++ b/var/spack/repos/builtin/packages/r-cli/package.py @@ -20,6 +20,7 @@ class RCli(RPackage): license("MIT") + version("3.6.3", sha256="4295085f11221c54b1dd2b1d39a675a85dfd9f900294297567e1d36f65ac4841") version("3.6.1", sha256="be3006cec7e67f9ae25e21b4658c4bec680038c2ef7467df5f14da3311a05e36") version("3.4.1", sha256="1c585efbfd8b8685c66fac34bcb60f28c351691bb4b9931df214e6e47fd9744e") version("3.3.0", sha256="c3a9ebbcb9017fb9aeda4f7df5ca981e42b169cbd7ce13e592cda2cd74250d63") @@ -34,7 +35,7 @@ class RCli(RPackage): version("1.0.0", sha256="8fa3dbfc954ca61b8510f767ede9e8a365dac2ef95fe87c715a0f37d721b5a1d") depends_on("r@2.10:", type=("build", "run")) - depends_on("r@3,4:", type=("build", "run"), when="@3.3.0:") + depends_on("r@3.4:", type=("build", "run"), when="@3.3.0:") depends_on("r-assertthat", type=("build", "run"), when="@:2.3") depends_on("r-crayon@1.3.4:", type=("build", "run"), when="@:2.2") diff --git a/var/spack/repos/builtin/packages/r-clock/package.py b/var/spack/repos/builtin/packages/r-clock/package.py index 89ddd6dd78c8f9..628d6fd076636d 100644 --- a/var/spack/repos/builtin/packages/r-clock/package.py +++ b/var/spack/repos/builtin/packages/r-clock/package.py @@ -20,10 +20,18 @@ class RClock(RPackage): license("MIT") + version("0.7.1", sha256="432d2fc39d3f20e348f09a9b6136a02a588db585bab428d184da71bf6aa1f0d8") version("0.6.1", sha256="f80c385fd8229538968ffb71d7de53ddc82bfcec6641f8e76f299546c43c1702") depends_on("r@3.4:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@0.7.1:") + depends_on("r-cli@3.6.1:", type=("build", "run"), when="@0.7.0:") + depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@0.7.0:") depends_on("r-rlang@1.0.4:", type=("build", "run")) + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@0.7.0:") depends_on("r-tzdb@0.3.0:", type=("build", "run")) + depends_on("r-tzdb@0.4.0:", type=("build", "run"), when="@0.7.0:") depends_on("r-vctrs@0.4.1:", type=("build", "run")) + depends_on("r-vctrs@0.6.1:", type=("build", "run"), when="@0.7.0:") depends_on("r-cpp11@0.4.2:", type=("build", "run")) + depends_on("r-cpp11@0.4.3:", type=("build", "run"), when="@0.7.0:") diff --git a/var/spack/repos/builtin/packages/r-clue/package.py b/var/spack/repos/builtin/packages/r-clue/package.py index ded46e1b06dce7..a7dd171c0947b7 100644 --- a/var/spack/repos/builtin/packages/r-clue/package.py +++ b/var/spack/repos/builtin/packages/r-clue/package.py @@ -13,6 +13,7 @@ class RClue(RPackage): license("GPL-2.0-only") + version("0.3-65", sha256="bdf8fdd35fb2b1c65d09766da79d930fa664a00aa497f03b636400eecb623ef8") version("0.3-64", sha256="f45cb7a84c87ddca2b9f7c2ea9505016d002e6fda23322e6d57466c7a4de28af") version("0.3-62", sha256="575a3fa2c4aa1ae5c7e35f4462f2f331d291d87916aa12f0d11f61988d5e1ed2") version("0.3-61", sha256="71311b16ce380fd9a8834be95b55b3d1b47e4ee2b8acb35b8d481138c314dc31") diff --git a/var/spack/repos/builtin/packages/r-cluster/package.py b/var/spack/repos/builtin/packages/r-cluster/package.py index 096fb45278e77f..f1e39c92bf6c65 100644 --- a/var/spack/repos/builtin/packages/r-cluster/package.py +++ b/var/spack/repos/builtin/packages/r-cluster/package.py @@ -17,6 +17,7 @@ class RCluster(RPackage): license("GPL-2.0-or-later") + version("2.1.6", sha256="d1c50efafd35a55387cc5b36086b97d5591e0b33c48dc718005d2f5907113164") version("2.1.4", sha256="c6f10ceca29a176ba833f24ebf71fd451629052c2338398ba286df5689d6f5b6") version("2.1.3", sha256="a3ad7a9455d634c4e0c6ccf8ea7a3a392a0ecf9c2bdb368d127ffa68a93164a9") version("2.1.2", sha256="5c8aa760fb6dda4fcfe6196e561ffcd2dc12b1a6c7659cb90be2cde747311499") diff --git a/var/spack/repos/builtin/packages/r-clustergeneration/package.py b/var/spack/repos/builtin/packages/r-clustergeneration/package.py index 603effe4592e1f..7a15cdce707579 100644 --- a/var/spack/repos/builtin/packages/r-clustergeneration/package.py +++ b/var/spack/repos/builtin/packages/r-clustergeneration/package.py @@ -20,6 +20,7 @@ class RClustergeneration(RPackage): cran = "clusterGeneration" + version("1.3.8", sha256="0f842256582ab41bcd00ee08ea6d7e231ff362fe0156a53347873e9636f73a70") version("1.3.7", sha256="534f29d8f7ed11e6e9a496f15845b588ec7133f3da5e6def8140b88500e52d5c") version("1.3.4", sha256="7c591ad95a8a9d7fb0e4d5d80dfd78f7d6a63cf7d11eb53dd3c98fdfb5b868aa") diff --git a/var/spack/repos/builtin/packages/r-coda/package.py b/var/spack/repos/builtin/packages/r-coda/package.py index 4824988bbbc910..28d673c5b7bbcd 100644 --- a/var/spack/repos/builtin/packages/r-coda/package.py +++ b/var/spack/repos/builtin/packages/r-coda/package.py @@ -17,10 +17,11 @@ class RCoda(RPackage): license("GPL-2.0-or-later") + version("0.19-4.1", sha256="f4b451d86fbb56ff9ade043ddd6b0944368c37d0dad12d02837750ecdc708ad6") version("0.19-4", sha256="422d3cfd34797a3631e9c4812431940599c0ca4bb9937797bed07b7b1d6fe58f") version("0.19-3", sha256="d3df1fc848bcf1af8fae13d61eeab60e99a3d4b4db384bec4326f909f502c5d6") version("0.19-2", sha256="678a7e6a87a2723089daeb780ea37ac3d4319b37eabe26928ea3fa9c9b1eda0d") version("0.19-1", sha256="d41ff5731da6805170769dba75dd011ab33f916d15b2336001f279e21a524491") - depends_on("r@2.14:", type=("build", "run")) + depends_on("r@2.14.0:", type=("build", "run")) depends_on("r-lattice", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-codetools/package.py b/var/spack/repos/builtin/packages/r-codetools/package.py index a4c600538894b7..03c20803e6b947 100644 --- a/var/spack/repos/builtin/packages/r-codetools/package.py +++ b/var/spack/repos/builtin/packages/r-codetools/package.py @@ -13,6 +13,7 @@ class RCodetools(RPackage): license("GPL-2.0-or-later") + version("0.2-20", sha256="3be6f375ec178723ddfd559d1e8e85bfeee04a5fbaf9f53f2f844e1669fea863") version("0.2-19", sha256="c4b7e567c87f33dad85de92f79641e5e5b5deede6d19a9dfa47133d191782dab") version("0.2-18", sha256="1a9ea6b9792dbd1688078455929385acc3a5e4bef945c77bec1261fa4a084c28") version("0.2-16", sha256="c276757c3adabaf700f2ea25835892b09bc1bd438ebd17c805ea9073ed8a74b6") diff --git a/var/spack/repos/builtin/packages/r-coin/package.py b/var/spack/repos/builtin/packages/r-coin/package.py index 0ea41175c6c825..857799c03dd7a2 100644 --- a/var/spack/repos/builtin/packages/r-coin/package.py +++ b/var/spack/repos/builtin/packages/r-coin/package.py @@ -17,6 +17,7 @@ class RCoin(RPackage): license("GPL-2.0-only") + version("1.4-3", sha256="8a6302dbf3ef570cd9f69ce7b6cd3d3b928dc776f840bbd767af132e0080b974") version("1.4-2", sha256="7546d1f27a82d98b4b3e43e4659eba0f74a67d5919ce85d2fb360282ba3cfbb2") version("1.3-1", sha256="5de2519a6e2b059bba9d74c58085cccaff1aaaa0454586ed164a108ebd1b2062") version("1.3-0", sha256="adcebb37e0a7dfddbf8ec1e09c12a809bd76d90b5b8ff2b1048a75252ba11ef8") diff --git a/var/spack/repos/builtin/packages/r-colorspace/package.py b/var/spack/repos/builtin/packages/r-colorspace/package.py index b5d6797bda4ef3..f0c3b42f1c85f1 100644 --- a/var/spack/repos/builtin/packages/r-colorspace/package.py +++ b/var/spack/repos/builtin/packages/r-colorspace/package.py @@ -29,6 +29,7 @@ class RColorspace(RPackage): license("BSD-3-Clause") + version("2.1-1", sha256="e721cee5f4d6e4b0fc8eb18265e316b4f856fd3be02f0775a26032663758cd0b") version("2.1-0", sha256="04078abb6b54119c90dc7085d62916bf292ccb163e213f9ea70567d1be82614c") version("2.0-3", sha256="e75681cc4dd6e4b70303fd96a6d4597065dc6bffcaa4ae4244b73ff19016857f") version("2.0-2", sha256="b891cd2ec129ed5f116429345947bcaadc33969758a108521eb0cf36bd12183a") diff --git a/var/spack/repos/builtin/packages/r-commonmark/package.py b/var/spack/repos/builtin/packages/r-commonmark/package.py index e06c44e2ace496..63ca1a3691e1ee 100644 --- a/var/spack/repos/builtin/packages/r-commonmark/package.py +++ b/var/spack/repos/builtin/packages/r-commonmark/package.py @@ -20,6 +20,7 @@ class RCommonmark(RPackage): license("BSD-2-Clause") + version("1.9.1", sha256="9517a13f4ce4a99bb157493453b04419b222cb65a9471cd3b11e5045ac0db53b") version("1.9.0", sha256="6dd01a5a26c8d436486abf69c2f6ad0f8dd1c811f575c31983aeb4dbd376548f") version("1.8.1", sha256="96adcb093de3d2e48811af402da70e7222a313b97f1e979e0cbe84dd59bd5cbe") version("1.8.0", sha256="7d07e72937b1cf158e69f183722bf79dbb91b8967a9dd29f4fa145500c2be668") diff --git a/var/spack/repos/builtin/packages/r-compositions/package.py b/var/spack/repos/builtin/packages/r-compositions/package.py index 03906a4d14925f..435acef76ce519 100644 --- a/var/spack/repos/builtin/packages/r-compositions/package.py +++ b/var/spack/repos/builtin/packages/r-compositions/package.py @@ -17,6 +17,7 @@ class RCompositions(RPackage): license("GPL-2.0-or-later") + version("2.0-8", sha256="c5063488f456992b5821458b3237322addffd3451ae91f9474707886971ef290") version("2.0-6", sha256="45d374ebfdcc2c9f6cc738d196caf83a2297ed2aefe2cc99007fcbeb78a61c34") version("2.0-4", sha256="7b9c7a3bf654fb02d9eb1b4a7566469b2f5232f3b2c1b324c02239fd31060faf") version("2.0-1", sha256="84a291308faf858e5a9d9570135c2da5e57b0887f407903485fa85d09da61a0f") @@ -28,6 +29,6 @@ class RCompositions(RPackage): depends_on("r-tensora", type=("build", "run")) depends_on("r-robustbase", type=("build", "run")) depends_on("r-bayesm", type=("build", "run")) - depends_on("r-mass", type=("build", "run"), when="@2.0-1:") + depends_on("r-mass", type=("build", "run"), when="@2.0-0:") - depends_on("r-energy", type=("build", "run"), when="@:1.40-2") + depends_on("r-energy", type=("build", "run"), when="@:1.40-5") diff --git a/var/spack/repos/builtin/packages/r-consrank/package.py b/var/spack/repos/builtin/packages/r-consrank/package.py new file mode 100644 index 00000000000000..239fde3bd397ce --- /dev/null +++ b/var/spack/repos/builtin/packages/r-consrank/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RConsrank(RPackage): + """Compute the median ranking according to the Kemeny's axiomatic approach.""" + + homepage = "https://www.r-project.org/" + cran = "ConsRank" + + license("GPL-3.0-or-later", checked_by="wdconinc") + + version("2.1.4", sha256="c213c6008fcb617a2144d75b41b25520ffadcf38686cc5050e10ce1363ac3000") + + depends_on("r-rgl", type=("build", "run")) + depends_on("r-rlist@0.4.2:", type=("build", "run")) + depends_on("r-proxy", type=("build", "run")) + depends_on("r-gtools", type=("build", "run")) + depends_on("r-tidyr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-construct/package.py b/var/spack/repos/builtin/packages/r-construct/package.py index 14f97e5aeaac70..3b81c3cdc7b86b 100644 --- a/var/spack/repos/builtin/packages/r-construct/package.py +++ b/var/spack/repos/builtin/packages/r-construct/package.py @@ -18,6 +18,7 @@ class RConstruct(RPackage): cran = "conStruct" + version("1.0.6", sha256="110982ed8036ccefb6bf662909779521e1b9095e9e0b5b99973df23171a5b502") version("1.0.5", sha256="4d953073bd1f374a91655b4889ab1b65d92a1c89ea39eb3dac5cd852a42b8a7c") version("1.0.4", sha256="4e585b718a361061bc1432cea46fc65f802fb0ef58e4516d33e1af99bbfe90ce") version("1.0.3", sha256="b449c133a944ad05a28f84f312ed4ccbc1574c4659aa09c678618d2ae9008310") @@ -26,12 +27,14 @@ class RConstruct(RPackage): depends_on("r@3.4.0:", type=("build", "run")) depends_on("r-rcpp@0.12.0:", type=("build", "run")) depends_on("r-rstan@2.18.1:", type=("build", "run")) + depends_on("r-rstan@2.26.0:", type=("build", "run"), when="@1.0.6:") depends_on("r-rstantools@1.5.0:", type=("build", "run")) depends_on("r-caroline", type=("build", "run")) depends_on("r-gtools", type=("build", "run")) depends_on("r-foreach", type=("build", "run")) depends_on("r-doparallel", type=("build", "run")) depends_on("r-stanheaders@2.18.0:", type=("build", "run")) + depends_on("r-stanheaders@2.26.0:", type=("build", "run"), when="@1.0.6:") depends_on("r-bh@1.66.0:", type=("build", "run")) depends_on("r-rcppeigen@0.3.3.3.0:", type=("build", "run")) depends_on("r-rcppparallel@5.0.1:", type=("build", "run"), when="@1.0.5:") diff --git a/var/spack/repos/builtin/packages/r-convevol/package.py b/var/spack/repos/builtin/packages/r-convevol/package.py index 6dbcbc60cf8bb3..4f660abb02c5f2 100644 --- a/var/spack/repos/builtin/packages/r-convevol/package.py +++ b/var/spack/repos/builtin/packages/r-convevol/package.py @@ -18,6 +18,7 @@ class RConvevol(RPackage): license("GPL-2.0-only") + version("2.2.1", sha256="9b197d8735e61f78825ec2d81380b0f4352a3783c2c51254f4eb415ab45a9b48") version("2.0.0", sha256="690664b93c1f144a409e80b2ebfc20dc34f0eb9405607d15e066e8db573e84de") version("1.3", sha256="d6b24b9796a559f5280e277746189d141151ade4b14cc6b4c2d9d496d7f314ac") @@ -25,5 +26,7 @@ class RConvevol(RPackage): depends_on("r-ape", type=("build", "run")) depends_on("r-cluster", type=("build", "run")) depends_on("r-geiger", type=("build", "run")) - depends_on("r-mass", type=("build", "run")) + depends_on("r-magick", type=("build", "run"), when="@2.2.0:") depends_on("r-phytools", type=("build", "run")) + + depends_on("r-mass", type=("build", "run"), when="@:2.1") diff --git a/var/spack/repos/builtin/packages/r-copula/package.py b/var/spack/repos/builtin/packages/r-copula/package.py index 79f7bee3610390..c4ca7bbfcd9f71 100644 --- a/var/spack/repos/builtin/packages/r-copula/package.py +++ b/var/spack/repos/builtin/packages/r-copula/package.py @@ -26,6 +26,7 @@ class RCopula(RPackage): license("GPL-3.0-or-later OR custom") + version("1.1-4", sha256="f4d78b7f4860797620dfe15c62cbeeb319b2dbbacab75062652d467c4ef6504f") version("1.1-2", sha256="88f9454d25e4dcdf53d8ca5156daf48e664769f5e13b1e835ed64f37251587d3") version("1.1-0", sha256="9ab76e6256534db2a18d3880143b8c67e385767010de861bbde25212aa75d924") version("1.0-1", sha256="d09b2ccffc7379e48b00952aa6b282baf502feebaf55cc44e93f881d7b909742") diff --git a/var/spack/repos/builtin/packages/r-corrplot/package.py b/var/spack/repos/builtin/packages/r-corrplot/package.py index dd132968c1ab4d..8313ed99b37ff4 100644 --- a/var/spack/repos/builtin/packages/r-corrplot/package.py +++ b/var/spack/repos/builtin/packages/r-corrplot/package.py @@ -17,6 +17,7 @@ class RCorrplot(RPackage): license("MIT") + version("0.94", sha256="8e855daf7392dfec8dab7da2845b6d01e24030837a66ce7d8d4673eb0a7e55f4") version("0.92", sha256="e8c09f963f9c4837036c439ebfe00fa3a6e462ccbb786d2cf90850ddcd9428bd") version("0.84", sha256="0dce5e628ead9045580a191f60c58fd7c75b4bbfaaa3307678fc9ed550c303cc") version("0.77", sha256="54b66ff995eaf2eee3f3002509c6f27bb5bd970b0abde41893ed9387e93828d3") diff --git a/var/spack/repos/builtin/packages/r-countrycode/package.py b/var/spack/repos/builtin/packages/r-countrycode/package.py index f0a9746bc72f6d..e6fe87390dc26e 100644 --- a/var/spack/repos/builtin/packages/r-countrycode/package.py +++ b/var/spack/repos/builtin/packages/r-countrycode/package.py @@ -16,6 +16,7 @@ class RCountrycode(RPackage): license("GPL-3.0-only") + version("1.6.0", sha256="f9db110e32c0bcc90eed85303277660de37a777681bb78e8898b6fc5f2253db6") version("1.4.0", sha256="99dfe7652c1e631b9e0f8fac0b0163e7a3fdde8476498555d553e0d1c5fdccc4") version("1.3.0", sha256="34361416e771ece1d56dc56f79416c8b7f9591885773becae270684d095bc70f") version("1.2.0", sha256="32c65702dcc33d512ff99f14c12f4e0c48fe7ed7c8aa2f0a64194576d129dd40") diff --git a/var/spack/repos/builtin/packages/r-covr/package.py b/var/spack/repos/builtin/packages/r-covr/package.py index 70d3c8adc89a3c..b989c17a9f81b8 100644 --- a/var/spack/repos/builtin/packages/r-covr/package.py +++ b/var/spack/repos/builtin/packages/r-covr/package.py @@ -21,6 +21,7 @@ class RCovr(RPackage): license("MIT") + version("3.6.4", sha256="2b6204036510c629d0b1d58daaee34d4e38baf54164f8d4c9afd6d6b1fb1862a") version("3.6.2", sha256="ace68ce7516147b4d77f591a498cbd7b2803062c1b47252e7a35081af0ea485b") version("3.6.1", sha256="ffbe15438c1a4f274c14cacfb944480e284f1ab60808d5e840c015cc57c51157") version("3.5.1", sha256="a54cfc3623ea56084158ac5d7fe33f216f45191f6dcddab9c9ed4ec1d9d8ac6c") diff --git a/var/spack/repos/builtin/packages/r-cowplot/package.py b/var/spack/repos/builtin/packages/r-cowplot/package.py index a70068b2f3d8c6..3666e21891ece6 100644 --- a/var/spack/repos/builtin/packages/r-cowplot/package.py +++ b/var/spack/repos/builtin/packages/r-cowplot/package.py @@ -21,6 +21,7 @@ class RCowplot(RPackage): license("GPL-2.0-only") + version("1.1.3", sha256="8756971af5c50381cf00ec7ed622fd5cf3d70f534bdfa3ebadd157b5aef5b273") version("1.1.1", sha256="c7dce625b456dffc59ba100c816e16226048d12fdd29a7335dc1f6f6e12eed48") version("1.0.0", sha256="70f9a7c46d10f409d1599f1afc9fd3c947051cf2b430f01d903c64ef1e6c98a5") version("0.9.3", sha256="3e10475fd7506ea9297ed72eb1a3acf858c6fa99d26e46fc39654eba000c3dcb") @@ -33,6 +34,7 @@ class RCowplot(RPackage): depends_on("r@3.5.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-ggplot2@2.1.1:", type=("build", "run")) depends_on("r-ggplot2@2.2.1:", type=("build", "run"), when="@1.1.1:") + depends_on("r-ggplot2@3.4.0:", type=("build", "run"), when="@1.1.2:") depends_on("r-gtable", type=("build", "run")) depends_on("r-rlang", type=("build", "run"), when="@1.0.0:") depends_on("r-scales", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-cpp11/package.py b/var/spack/repos/builtin/packages/r-cpp11/package.py index 4a36d4ce113448..5bbad8485e760f 100644 --- a/var/spack/repos/builtin/packages/r-cpp11/package.py +++ b/var/spack/repos/builtin/packages/r-cpp11/package.py @@ -18,7 +18,10 @@ class RCpp11(RPackage): license("MIT") + version("0.4.7", sha256="801d1266824c3972642bce2db2a5fd0528a65ec845c58eb5a886edf082264344") version("0.4.3", sha256="f1a60e4971a86dbbcf6a16bbd739b59bb66d9c45d93cfd8dedc2a87e302598f1") version("0.4.2", sha256="403ce0bf82358d237176053b0fb1e958cb6bfa4d0fb3555bf5801db6a6939b99") version("0.4.0", sha256="1768fd07dc30dfbbf8f3fb1a1183947cb7e1dfd909165c4d612a63c163a41e87") version("0.2.5", sha256="6fef9306c0c3043252c987e77c99ef679b2ea46dffafae318dbeb38ad21a2e20") + + depends_on("r@3.5.0:", when="@0.4.6:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-crayon/package.py b/var/spack/repos/builtin/packages/r-crayon/package.py index 23db2f98c1a514..087de49d926ef8 100644 --- a/var/spack/repos/builtin/packages/r-crayon/package.py +++ b/var/spack/repos/builtin/packages/r-crayon/package.py @@ -19,6 +19,7 @@ class RCrayon(RPackage): license("MIT") + version("1.5.3", sha256="3e74a0685541efb5ea763b92cfd5c859df71c46b0605967a0b5dbb7326e9da69") version("1.5.2", sha256="70a9a505b5b3c0ee6682ad8b965e28b7e24d9f942160d0a2bad18eec22b45a7a") version("1.5.1", sha256="c025c73b78a8e88e8e4363c8e1a941da5089a7baea39e59ea5342ab9ebe45df9") version("1.4.2", sha256="ee34397f643e76e30588068d4c93bd3c9afd2193deacccacb3bffcadf141b857") diff --git a/var/spack/repos/builtin/packages/r-credentials/package.py b/var/spack/repos/builtin/packages/r-credentials/package.py index 8ac8114ba6a88c..42f4e0ea427aa2 100644 --- a/var/spack/repos/builtin/packages/r-credentials/package.py +++ b/var/spack/repos/builtin/packages/r-credentials/package.py @@ -21,6 +21,7 @@ class RCredentials(RPackage): license("MIT") + version("2.0.1", sha256="2c7cfc45bd4afa9a2c2b85d43e907b212da3468781e1b617737bd095253c358b") version("1.3.2", sha256="2ffa7c11bedbfa034adf553d0a2f2e4f6a496b858af753a09a89219cff9028b8") version("1.3.0", sha256="c119ec26fd97b977c3b0cd1eb8fad3c59b84df6262c3adbf5ee9f3d6c9903ff1") diff --git a/var/spack/repos/builtin/packages/r-crosstalk/package.py b/var/spack/repos/builtin/packages/r-crosstalk/package.py index 1009261d8ce7d9..352064eb784a87 100644 --- a/var/spack/repos/builtin/packages/r-crosstalk/package.py +++ b/var/spack/repos/builtin/packages/r-crosstalk/package.py @@ -17,6 +17,7 @@ class RCrosstalk(RPackage): license("MIT") + version("1.2.1", sha256="680cf08416d6d5a1194dd85ee5695c268af9d4d01b201448e1d486c6e06014f1") version("1.2.0", sha256="4237baab35cd246a8a98fb9cf4ce53b6ddbc31d00742ded4edea0479613d1ea0") version("1.1.0.1", sha256="36a70b10bc11826e314c05f9579fd791b9ac3b3a2cfed4d4ca74ce1ad991300e") version("1.0.0", sha256="b31eada24cac26f24c9763d9a8cbe0adfd87b264cf57f8725027fe0c7742ca51") diff --git a/var/spack/repos/builtin/packages/r-crul/package.py b/var/spack/repos/builtin/packages/r-crul/package.py index c7e94bb9af06da..ac399ca1e4713e 100644 --- a/var/spack/repos/builtin/packages/r-crul/package.py +++ b/var/spack/repos/builtin/packages/r-crul/package.py @@ -20,6 +20,7 @@ class RCrul(RPackage): license("MIT") + version("1.5.0", sha256="db733778d2815f9d974b00e8df7c821cd638e069e08d73adfa606add201ebd9d") version("1.3", sha256="8058617d8b3724acb5b89d0e6e63f381df5c56565128b250a65eceb2b8081e2d") version("1.2.0", sha256="be1a149b21cf219ef55adfb56a6a5eb9892a9acf0d5f5421a22e52f2a7066f8c") version("1.0.0", sha256="2ade500f6cf89b2d0ca8496b8d4df9937d6f802a35c9ad10d9fab8632cdb1027") diff --git a/var/spack/repos/builtin/packages/r-cubature/package.py b/var/spack/repos/builtin/packages/r-cubature/package.py index 23a01172eb0065..d00dfb9d66a437 100644 --- a/var/spack/repos/builtin/packages/r-cubature/package.py +++ b/var/spack/repos/builtin/packages/r-cubature/package.py @@ -20,6 +20,7 @@ class RCubature(RPackage): license("GPL-3.0-only") + version("2.1.1", sha256="b37220e733f4e610e089e69896f66dc5bc461478a040321c19600ec5d07ea684") version("2.0.4.6", sha256="330c9dc2be9bf6815473fd40efa8c2de47c1ed286cb097d0ff846b56c9e9f95a") version("2.0.4.5", sha256="a81f118e5b7950a4a29e5509f8a40d7b87544fb25783917242000561379c9023") version("2.0.4.4", sha256="087b3b2c4f25d873fa95e9d38766a17a7201d03a6f4960f1e080a8db8b67d569") diff --git a/var/spack/repos/builtin/packages/r-cubist/package.py b/var/spack/repos/builtin/packages/r-cubist/package.py index 1a753e92853b01..5467bc8701a8e1 100644 --- a/var/spack/repos/builtin/packages/r-cubist/package.py +++ b/var/spack/repos/builtin/packages/r-cubist/package.py @@ -13,6 +13,7 @@ class RCubist(RPackage): cran = "Cubist" + version("0.4.4", sha256="51d5fff104b69de75e08a3e14eaf67ff13ffda5be4b60f79236793475c241590") version("0.4.2.1", sha256="f07afed59019a3febc04acc3e58728e42b42910940a1d529f9fc482931d09157") version("0.4.0", sha256="3a1f74d44300e3a38a10e3693fc019cfcca221d62d7c416abebb20811e965578") version("0.3.0", sha256="88a76e7f858a8e978a73a97ce6a3504201d889517b39ce862cef734dcf9eb263") diff --git a/var/spack/repos/builtin/packages/r-curl/package.py b/var/spack/repos/builtin/packages/r-curl/package.py index 20b768c144e07b..c9a7978dd28100 100644 --- a/var/spack/repos/builtin/packages/r-curl/package.py +++ b/var/spack/repos/builtin/packages/r-curl/package.py @@ -23,6 +23,7 @@ class RCurl(RPackage): license("MIT") + version("5.2.1", sha256="4a7a4d8c08aa1bca2fcd9c58ade7b4b0ea2ed9076d0521071be29baac8adfa90") version("5.0.0", sha256="d7f3cac9b513914ffa8f6f64e6fa5dd96c8273378ace6b0c16b71bc6ba59c9b2") version("4.3.3", sha256="3567b6acad40dad68acfe07511c853824839d451a50219a96dd6d125ed617c9e") version("4.3.2", sha256="90b1facb4be8b6315bb3d272ba2dd90b88973f6ea1ab7f439550230f8500a568") diff --git a/var/spack/repos/builtin/packages/r-cvxr/package.py b/var/spack/repos/builtin/packages/r-cvxr/package.py index 20ace982f7755c..d12dc088cf45ed 100644 --- a/var/spack/repos/builtin/packages/r-cvxr/package.py +++ b/var/spack/repos/builtin/packages/r-cvxr/package.py @@ -22,13 +22,15 @@ class RCvxr(RPackage): license("Apache-2.0") + version("1.0-14", sha256="4d027cc2b933720ded4edcc098fde1259992673825abdb109fd84fee4af57cdb") version("1.0-11", sha256="e92a9638f35f4909e2a29c3b7106081e3dae7ff88b14bb6466b87fbdc80b972a") depends_on("r@3.4.0:", type=("build", "run")) depends_on("r-r6", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) - depends_on("r-rcpp", type=("build", "run")) + depends_on("r-rcpp@0.12.12:", type=("build", "run")) depends_on("r-bit64", type=("build", "run")) + depends_on("r-clarabel@0.9.0:", type=("build", "run"), when="@1.0-14:") depends_on("r-gmp", type=("build", "run")) depends_on("r-rmpfr", type=("build", "run")) depends_on("r-ecosolver@0.5.4:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-data-table/package.py b/var/spack/repos/builtin/packages/r-data-table/package.py index 425c739112781e..c80fffb70863d6 100644 --- a/var/spack/repos/builtin/packages/r-data-table/package.py +++ b/var/spack/repos/builtin/packages/r-data-table/package.py @@ -18,6 +18,7 @@ class RDataTable(RPackage): license("MPL-2.0-no-copyleft-exception") + version("1.15.4", sha256="ab8065ff946d59ecaaf5eaf91a975495c07c30caad97a71205c72e41a740cb53") version("1.14.8", sha256="14b2ce5367df9c9bb58f373555066f5dcb629c156149b5565de36d69557139fd") version("1.14.4", sha256="4862a7c26e8309108fd1f5296616407b9ff9e4e1be5cdedcb717f114c2e348f0") version("1.14.2", sha256="f741b951e5937440139514aedbae78dbd6862d825066848bdb006aa02c2f3d2b") diff --git a/var/spack/repos/builtin/packages/r-dbi/package.py b/var/spack/repos/builtin/packages/r-dbi/package.py index bab7446c766bc7..1eafed4f136ba7 100644 --- a/var/spack/repos/builtin/packages/r-dbi/package.py +++ b/var/spack/repos/builtin/packages/r-dbi/package.py @@ -15,6 +15,7 @@ class RDbi(RPackage): cran = "DBI" + version("1.2.3", sha256="cf6708a7566a80929f06575aa345fae354714159ed5fab5db14306fc5d0d2dbe") version("1.1.3", sha256="38bb33753da5bddb78893a5228a5d269dae3bf16f21dc5d9853ac9c24d31428d") version("1.1.2", sha256="56ec377d471c76ac234ddfd313bd01a050c99fb6fa5f704f5333b34a5d714f58") version("1.1.1", sha256="572ab3b8a6421d0ac3e7665c4c842826f1723af98fca25d4f43edb419e771344") diff --git a/var/spack/repos/builtin/packages/r-dbplyr/package.py b/var/spack/repos/builtin/packages/r-dbplyr/package.py index 5841bc5e46143a..566669b469d76d 100644 --- a/var/spack/repos/builtin/packages/r-dbplyr/package.py +++ b/var/spack/repos/builtin/packages/r-dbplyr/package.py @@ -18,6 +18,7 @@ class RDbplyr(RPackage): license("MIT") + version("2.5.0", sha256="bb475bdbe89487b189ecc257b5c92007a7458803c81aa77bfc4ed46f5f24bcff") version("2.3.2", sha256="0ddc00595ec6b21962d0bb6f470f5f7c9d61c74a4f92681a37e94e1295707fac") version("2.2.1", sha256="a6f3f644c068fe1a3b3e99a3a10de55a150d43ef20b5130e6724d142afcb0df7") version("2.1.1", sha256="aba4cf47b85ab240fd3ec4cd8d512f6e1958201e151577c1a2ebc3d6ebc5bc08") @@ -30,34 +31,45 @@ class RDbplyr(RPackage): version("1.1.0", sha256="7b1e456a2d1056fa6284582cd82d2df66d06b3eea92e9995f5a91a45f246f69d") depends_on("r@3.1:", type=("build", "run")) + depends_on("r@3.6:", type=("build", "run"), when="@2.4.0:") depends_on("r-blob@1.2.0:", type=("build", "run"), when="@2.0.0:") depends_on("r-cli@3.3.0:", type=("build", "run"), when="@2.2.1:") depends_on("r-cli@3.4.1:", type=("build", "run"), when="@2.3.2:") + depends_on("r-cli@3.6.1:", type=("build", "run"), when="@2.4.0:") depends_on("r-dbi@1.0.0:", type=("build", "run")) + depends_on("r-dbi@1.1.3:", type=("build", "run"), when="@2.4.0:") depends_on("r-dplyr@0.8.0:", type=("build", "run")) depends_on("r-dplyr@1.0.3:", type=("build", "run"), when="@2.1.0") depends_on("r-dplyr@1.0.4:", type=("build", "run"), when="@2.1.1:") depends_on("r-dplyr@1.0.9:", type=("build", "run"), when="@2.2.1:") depends_on("r-dplyr@1.1.0:", type=("build", "run"), when="@2.3.2:") + depends_on("r-dplyr@1.1.2:", type=("build", "run"), when="@2.4.0:") depends_on("r-glue@1.2.0:", type=("build", "run")) + depends_on("r-glue@1.6.2:", type=("build", "run"), when="@2.4.0:") depends_on("r-lifecycle", type=("build", "run"), when="@2.0.0:") depends_on("r-lifecycle@1.0.0:", type=("build", "run"), when="@2.1.1:") depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@2.3.2:") depends_on("r-magrittr", type=("build", "run"), when="@2.0.0:") depends_on("r-pillar@1.5.0:", type=("build", "run"), when="@2.2.1:") + depends_on("r-pillar@1.9.0:", type=("build", "run"), when="@2.4.0:") depends_on("r-purrr@0.2.5:", type=("build", "run")) depends_on("r-purrr@1.0.1:", type=("build", "run"), when="@2.3.2:") depends_on("r-r6@2.2.2:", type=("build", "run")) depends_on("r-rlang@0.2.0:", type=("build", "run")) depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@2.2.1:") depends_on("r-rlang@1.0.6:", type=("build", "run"), when="@2.3.2:") + depends_on("r-rlang@1.1.1:", type=("build", "run"), when="@2.4.0:") depends_on("r-tibble@1.4.2:", type=("build", "run")) + depends_on("r-tibble@3.2.1:", type=("build", "run"), when="@2.4.0:") depends_on("r-tidyr@1.3.0:", type=("build", "run"), when="@2.3.2:") depends_on("r-tidyselect@0.2.4:", type=("build", "run")) depends_on("r-tidyselect@1.2.0:", type=("build", "run"), when="@2.3.2:") + depends_on("r-tidyselect@1.2.1:", type=("build", "run"), when="@2.4.0:") depends_on("r-vctrs", type=("build", "run"), when="@2.1:") depends_on("r-vctrs@0.4.1:", type=("build", "run"), when="@2.2.1:") depends_on("r-vctrs@0.5.0:", type=("build", "run"), when="@2.3.2:") + depends_on("r-vctrs@0.6.3:", type=("build", "run"), when="@2.4.0:") depends_on("r-withr", type=("build", "run"), when="@2.0.0:") + depends_on("r-withr@2.5.0:", type=("build", "run"), when="@2.4.0:") depends_on("r-ellipsis", type=("build", "run"), when="@2.1.1") depends_on("r-assertthat", type=("build", "run"), when="@:2.2.1") diff --git a/var/spack/repos/builtin/packages/r-debugme/package.py b/var/spack/repos/builtin/packages/r-debugme/package.py index d17b8edc7477a6..f74474f44401b3 100644 --- a/var/spack/repos/builtin/packages/r-debugme/package.py +++ b/var/spack/repos/builtin/packages/r-debugme/package.py @@ -16,6 +16,8 @@ class RDebugme(RPackage): license("MIT") + version("1.2.0", sha256="b22605ad3b20d460308d8c9c18116e56c4d6ff10577608eaf58802998171f099") version("1.1.0", sha256="4dae0e2450d6689a6eab560e36f8a7c63853abbab64994028220b8fd4b793ab1") + depends_on("r@3.6:", type=("build", "run"), when="@1.2.0:") depends_on("r-crayon", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-deldir/package.py b/var/spack/repos/builtin/packages/r-deldir/package.py index 4bc422d960cefa..32d433d942d9b0 100644 --- a/var/spack/repos/builtin/packages/r-deldir/package.py +++ b/var/spack/repos/builtin/packages/r-deldir/package.py @@ -19,6 +19,7 @@ class RDeldir(RPackage): license("GPL-2.0-or-later") + version("2.0-4", sha256="d418acb28ec3707b6d64c7466d0cefbb49b098537f37558d8f7a5befd34a4653") version("1.0-6", sha256="6df6d8325c607e0b7d63cbc53c29e774eff95ad4acf9c7ec8f70693b0505f8c5") version("0.2-3", sha256="2d24800f5ec6ad9dc57b9b265365b29c07717f4562d8f3e6344336d3340c364e") version("0.1-23", sha256="e0112bce9fc94daf73596a0fff9b3958b80872e3bbb487be73e157b13a6f201d") diff --git a/var/spack/repos/builtin/packages/r-deoptimr/package.py b/var/spack/repos/builtin/packages/r-deoptimr/package.py index d2de5443815614..8fcfa4dfa7a701 100644 --- a/var/spack/repos/builtin/packages/r-deoptimr/package.py +++ b/var/spack/repos/builtin/packages/r-deoptimr/package.py @@ -19,6 +19,7 @@ class RDeoptimr(RPackage): cran = "DEoptimR" + version("1.1-3", sha256="8dd8a61b07b02022493d7021dc62ef2c4dc2d596cff897846713c5f8dd784694") version("1.0-12", sha256="6136f98031bceaa691c5725222eca2d0f750a7b7fb60216480633635a9613d79") version("1.0-11", sha256="1874b30f4b75f9bfa891986598f1ebe1fce27fdced14f8f417d3535cac08165b") version("1.0-10", sha256="774f7ba0ac9c73aaab4567024b98afdb58098905726e72bceeeb9e380e782ad5") diff --git a/var/spack/repos/builtin/packages/r-desc/package.py b/var/spack/repos/builtin/packages/r-desc/package.py index 2fb79bce33298f..c56459871e19b8 100644 --- a/var/spack/repos/builtin/packages/r-desc/package.py +++ b/var/spack/repos/builtin/packages/r-desc/package.py @@ -16,6 +16,7 @@ class RDesc(RPackage): license("MIT") + version("1.4.3", sha256="54468da73dd78fc9e7c565c41cfe3331802c2134b2e61a9ad197215317092f26") version("1.4.2", sha256="758acf14be478c09ba7e84ade3a7ce512becf35d44e5e6a997b932065f2a227c") version("1.4.1", sha256="8f9ebb51eccf925b2e76bc65ecf495e8f3882b8c0053023f396622f0402d6f54") version("1.4.0", sha256="8220e4c706449b8121b822e70b1414f391ef419aed574836a234c63b83e5d649") @@ -25,7 +26,7 @@ class RDesc(RPackage): depends_on("r@3.4:", type=("build", "run"), when="@1.4.1:") depends_on("r-cli", type=("build", "run"), when="@1.4.1:") depends_on("r-r6", type=("build", "run")) - depends_on("r-rprojroot", type=("build", "run")) + depends_on("r-rprojroot", type=("build", "run"), when="@:1.4.2") depends_on("r-assertthat", type=("build", "run"), when="@:1.2") depends_on("r-crayon", type=("build", "run"), when="@:1.4.0") diff --git a/var/spack/repos/builtin/packages/r-desolve/package.py b/var/spack/repos/builtin/packages/r-desolve/package.py index 45407eb75ae902..2b64e6e85b1f13 100644 --- a/var/spack/repos/builtin/packages/r-desolve/package.py +++ b/var/spack/repos/builtin/packages/r-desolve/package.py @@ -23,6 +23,7 @@ class RDesolve(RPackage): cran = "deSolve" + version("1.40", sha256="8c09ae6bb6875b569b9844eede30b790f39fc227f5c9d045fa63ce1b22f500ef") version("1.35", sha256="96f17f497713754f84ff56c3538c6d05b9f5229f9a2a32aafec7d7cdc721d488") version("1.34", sha256="2254305f44dde22ac685fef4c60e29a0608af0197c803107365d1d80b75c9f21") version("1.33", sha256="71de979e05ce7e472308ac5218e97efe976051364ba579b10940dc1fe4c8b684") diff --git a/var/spack/repos/builtin/packages/r-diagrammer/package.py b/var/spack/repos/builtin/packages/r-diagrammer/package.py index 4e71673b051285..76de9e965df287 100644 --- a/var/spack/repos/builtin/packages/r-diagrammer/package.py +++ b/var/spack/repos/builtin/packages/r-diagrammer/package.py @@ -18,6 +18,7 @@ class RDiagrammer(RPackage): cran = "DiagrammeR" + version("1.0.11", sha256="e873e3d6e198232408161661001ddcb04c9a56065bb4703c925e538462f4c4df") version("1.0.9", sha256="64a426fe27110dddd8b0c1223ae4c397a2e553ae5e81ddd4ff67c026cfc40abf") version("1.0.8", sha256="b9157b26215edda4fe0a1b9330a597d5b01a5d7e660a9832f593b87c584dd233") version("1.0.7", sha256="6af291a7136657b9f7c67b96cd7f3afe99662cf5a477ebbb213a6c53df623050") @@ -28,10 +29,10 @@ class RDiagrammer(RPackage): depends_on("r@3.2.0:", type=("build", "run"), when="@0.9.2:") depends_on("r@3.5.0:", type=("build", "run"), when="@1.0.7") + depends_on("r-cli", type=("build", "run"), when="@1.0.11:") depends_on("r-dplyr@0.7.4:", type=("build", "run"), when="@1.0.0:") depends_on("r-dplyr@0.7.6:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-dplyr@1.0.7:", type=("build", "run"), when="@1.0.7:") - depends_on("r-downloader@0.4:", type=("build", "run"), when="@1.0.0:") depends_on("r-glue@1.2.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-glue@1.3.0:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-glue@1.5.0:", type=("build", "run"), when="@1.0.7:") @@ -43,8 +44,7 @@ class RDiagrammer(RPackage): depends_on("r-igraph@1.1.2:", type=("build", "run")) depends_on("r-igraph@1.2.2:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-igraph@1.2.11:", type=("build", "run"), when="@1.0.7:") - depends_on("r-influencer@0.1.0:", type=("build", "run")) - depends_on("r-influencer@0.1.0.1:", type=("build", "run"), when="@1.0.7:") + depends_on("r-igraph@1.4.0:", type=("build", "run"), when="@1.0.11:") depends_on("r-magrittr@1.5:", type=("build", "run"), when="@1.0.0:") depends_on("r-purrr@0.2.4:", type=("build", "run"), when="@1.0.0:") depends_on("r-purrr@0.2.5:", type=("build", "run"), when="@1.0.6.1:") @@ -55,6 +55,7 @@ class RDiagrammer(RPackage): depends_on("r-rlang@0.2.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-rlang@0.2.2:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-rlang@0.4:", type=("build", "run"), when="@1.0.7:") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.0.11:") depends_on("r-rstudioapi@0.7:", type=("build", "run")) depends_on("r-scales@0.5.0:", type=("build", "run")) depends_on("r-scales@1.0.0:", type=("build", "run"), when="@1.0.6.1:") @@ -67,11 +68,15 @@ class RDiagrammer(RPackage): depends_on("r-tidyr@0.8.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-tidyr@0.8.1:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-tidyr@1.1:", type=("build", "run"), when="@1.0.7:") - depends_on("r-viridis@0.5.0:", type=("build", "run"), when="@1.0.0:") - depends_on("r-viridis@0.5.1:", type=("build", "run"), when="@1.0.6.1:") - depends_on("r-viridis@0.6.2:", type=("build", "run"), when="@1.0.7:") + depends_on("r-viridislite@0.4.2:", type=("build", "run"), when="@1.0.11:") depends_on("r-visnetwork@2.0.3:", type=("build", "run")) depends_on("r-visnetwork@2.0.4:", type=("build", "run"), when="@1.0.6.1:") depends_on("r-visnetwork@2.1.0:", type=("build", "run"), when="@1.0.7:") + depends_on("r-downloader@0.4:", type=("build", "run"), when="@1.0.0:1.0.10") + depends_on("r-influencer@0.1.0:", type=("build", "run"), when="@:1.0.9") + depends_on("r-influencer@0.1.0.1:", type=("build", "run"), when="@1.0.7:1.0.9") + depends_on("r-viridis@0.5.0:", type=("build", "run"), when="@1.0.0:1.0.10") + depends_on("r-viridis@0.5.1:", type=("build", "run"), when="@1.0.6.1:1.0.10") + depends_on("r-viridis@0.6.2:", type=("build", "run"), when="@1.0.7:1.0.10") depends_on("r-rgexf@0.15.3:", type=("build", "run"), when="@1.0.0:1.0.1") diff --git a/var/spack/repos/builtin/packages/r-digest/package.py b/var/spack/repos/builtin/packages/r-digest/package.py index 48150288b8933d..e41ec4e9dfd3d0 100644 --- a/var/spack/repos/builtin/packages/r-digest/package.py +++ b/var/spack/repos/builtin/packages/r-digest/package.py @@ -30,6 +30,7 @@ class RDigest(RPackage): license("GPL-2.0-or-later") + version("0.6.37", sha256="82c4d149994b8a4a9af930f5a8e47420829935abed41f3f9030e94b6a48f0321") version("0.6.31", sha256="5a284f490eaca6750f695f00a584cfca3f180ca1046ac1107202141149d431b9") version("0.6.30", sha256="7b8059943be7dba6053268dfcc229de1bb0b55db497b2943541a6abace076aa7") version("0.6.29", sha256="792c1f14a4c8047745152f5e45ce7351978af8d770c29d2ea39c7acd5d619cd9") diff --git a/var/spack/repos/builtin/packages/r-diptest/package.py b/var/spack/repos/builtin/packages/r-diptest/package.py index c862c0b74dbd63..30f2f17795fbeb 100644 --- a/var/spack/repos/builtin/packages/r-diptest/package.py +++ b/var/spack/repos/builtin/packages/r-diptest/package.py @@ -17,5 +17,6 @@ class RDiptest(RPackage): license("GPL-2.0-or-later") + version("0.77-1", sha256="224eae00f483ce0fb131719065667227417cc98ad2beda55bfd5efe2bb612813") version("0.76-0", sha256="508a5ebb161519cd0fcd156dc047b51becb216d545d62c6522496463f94ec280") version("0.75-7", sha256="462900100ca598ef21dbe566bf1ab2ce7c49cdeab6b7a600a50489b05f61b61b") diff --git a/var/spack/repos/builtin/packages/r-dismo/package.py b/var/spack/repos/builtin/packages/r-dismo/package.py index 93aedbad8f5705..0e2778904d45d0 100644 --- a/var/spack/repos/builtin/packages/r-dismo/package.py +++ b/var/spack/repos/builtin/packages/r-dismo/package.py @@ -17,6 +17,7 @@ class RDismo(RPackage): license("GPL-3.0-or-later") + version("1.3-14", sha256="67a0f2e95562dd2aa612d52dfffab86985b52591a5ed7891b58b26667b394cd7") version("1.3-9", sha256="3924521db67716b004a4c870985c65d037edfe926b14222740fd6c2b2093beee") version("1.3-5", sha256="812e1932d42c0f40acf2ab5c5b2d068f93128caf648626e1d11baf1a09340ee7") version("1.3-3", sha256="fd65331ac18a4287ba0856b90508ddd0e2738c653eecc5f3eb2b14e1d06949ca") diff --git a/var/spack/repos/builtin/packages/r-distributional/package.py b/var/spack/repos/builtin/packages/r-distributional/package.py index 524f21bd63874b..7daba35a5cbb47 100644 --- a/var/spack/repos/builtin/packages/r-distributional/package.py +++ b/var/spack/repos/builtin/packages/r-distributional/package.py @@ -21,6 +21,7 @@ class RDistributional(RPackage): license("GPL-3.0-only") + version("0.4.0", sha256="09b5f3279bed4c79575f75d5f7f5e3e593c7838434a78c89f0b7184e8f20e602") version("0.3.2", sha256="c883d633398233aee5a8ca6b587687f765bdfe0732a84e4961e7f71ac0d008f8") version("0.3.1", sha256="727e56cbcf0c8a8adacca8030214ddbd14f68ee28d0aad716467bd68b027235f") version("0.3.0", sha256="fab36c7346617d8f2ca4b3cd0e3c9da93cb2f95fb7f102a3ae88670e694751d6") @@ -30,9 +31,10 @@ class RDistributional(RPackage): depends_on("r-rlang@0.4.5:", type=("build", "run")) depends_on("r-generics", type=("build", "run")) depends_on("r-numderiv", type=("build", "run")) - depends_on("r-ggplot2", type=("build", "run")) - depends_on("r-scales", type=("build", "run")) - depends_on("r-farver", type=("build", "run")) - depends_on("r-digest", type=("build", "run")) depends_on("r-lifecycle", type=("build", "run")) + + depends_on("r-ggplot2", type=("build", "run"), when="@:0.3.2") + depends_on("r-scales", type=("build", "run"), when="@:0.3.2") + depends_on("r-farver", type=("build", "run"), when="@:0.3.2") + depends_on("r-digest", type=("build", "run"), when="@:0.3.2") depends_on("r-ellipsis", type=("build", "run"), when="@:0.3.0") diff --git a/var/spack/repos/builtin/packages/r-diversitree/package.py b/var/spack/repos/builtin/packages/r-diversitree/package.py index 4b3d646833192c..9960ba3b24c41f 100644 --- a/var/spack/repos/builtin/packages/r-diversitree/package.py +++ b/var/spack/repos/builtin/packages/r-diversitree/package.py @@ -21,6 +21,7 @@ class RDiversitree(RPackage): license("GPL-2.0-or-later") + version("0.10-0", sha256="c13627e04bc55b61de218a6bf6fa44680970604f82eed88417d1de5717d782f6") version("0.9-16", sha256="4c236970b58e56b922352f3f5d97010c74d8ec5783b375c311fe11abfb99f967") version("0.9-15", sha256="c739ef3d4fcc24fd6855b1d297d31e0f89fbaff1efe8a2d149044458ecd363ea") version("0.9-11", sha256="4caa6a468f93de9f1c8c30e4457f34bb8346e1acdaf74f684005bfa86a950ecb") diff --git a/var/spack/repos/builtin/packages/r-doby/package.py b/var/spack/repos/builtin/packages/r-doby/package.py index 8c7015b84464a4..9f989aca41cd1f 100644 --- a/var/spack/repos/builtin/packages/r-doby/package.py +++ b/var/spack/repos/builtin/packages/r-doby/package.py @@ -16,16 +16,25 @@ class RDoby(RPackage): cran = "doBy" + version("4.6.22", sha256="2aa7e236de98af73de54a46214ceac50fdf69d90b12bb37f2779a501f40b0b0d") version("4.6.16", sha256="d5937eb57d293b0bc2e581ff2e1e628671cb4eacddc0b9574dc28a5316ecbbe7") depends_on("r@3.6.0:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@4.6.18:") + depends_on("r@4.2.0:", type=("build", "run"), when="@4.6.21:") + depends_on("r-boot", type=("build", "run"), when="@4.6.21:") depends_on("r-broom", type=("build", "run")) + depends_on("r-cowplot", type=("build", "run"), when="@4.6.21:") depends_on("r-deriv", type=("build", "run")) depends_on("r-dplyr", type=("build", "run")) depends_on("r-ggplot2", type=("build", "run")) depends_on("r-mass", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) - depends_on("r-magrittr", type=("build", "run")) depends_on("r-microbenchmark", type=("build", "run")) - depends_on("r-pbkrtest@0.4-8.1:", type=("build", "run")) + depends_on("r-modelr", type=("build", "run"), when="@4.6.21:") + depends_on("r-rlang", type=("build", "run"), when="@4.6.21:") depends_on("r-tibble", type=("build", "run")) + depends_on("r-tidyr", type=("build", "run"), when="@4.6.21:") + + depends_on("r-magrittr", type=("build", "run"), when="@:4.6.20") + depends_on("r-pbkrtest@0.4-8.1:", type=("build", "run"), when="@:4.6.21") diff --git a/var/spack/repos/builtin/packages/r-dotcall64/package.py b/var/spack/repos/builtin/packages/r-dotcall64/package.py index 5c78fcd8358243..7a7a3864f9f14f 100644 --- a/var/spack/repos/builtin/packages/r-dotcall64/package.py +++ b/var/spack/repos/builtin/packages/r-dotcall64/package.py @@ -18,6 +18,7 @@ class RDotcall64(RPackage): cran = "dotCall64" + version("1.1-1", sha256="21b8d7d747c07aaf8a82d61ec98fe0539afcaa5a565d9c2fc55be65b6af2c91b") version("1.0-2", sha256="e0c7728aebbea5ebf06dfeefae4fc0a240e6dde7c2bf13f2ed041b91d337a4ac") version("1.0-1", sha256="f10b28fcffb9453b1d8888a72c8fd2112038b5ac33e02a481492c7bd249aa5c6") version("1.0-0", sha256="69318dc6b8aecc54d4f789c8105e672198363b395f1a764ebaeb54c0473d17ad") diff --git a/var/spack/repos/builtin/packages/r-downlit/package.py b/var/spack/repos/builtin/packages/r-downlit/package.py index 5a2e92028e3ebc..a6930c886134dd 100644 --- a/var/spack/repos/builtin/packages/r-downlit/package.py +++ b/var/spack/repos/builtin/packages/r-downlit/package.py @@ -18,9 +18,11 @@ class RDownlit(RPackage): license("MIT") + version("0.4.4", sha256="55c377dcee4adc48c1060e14079f3d1832453d066a2cf070530caa210c48f828") version("0.4.2", sha256="33dff66909104d1a5ba8e57b1288986e82b61fd5e91dce0cd358d53724b37e3c") depends_on("r@3.4.0:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@0.4.4:") depends_on("r-brio", type=("build", "run")) depends_on("r-desc", type=("build", "run")) depends_on("r-digest", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-dplyr/package.py b/var/spack/repos/builtin/packages/r-dplyr/package.py index edd2e01091e8c2..85d7aff1f78b78 100644 --- a/var/spack/repos/builtin/packages/r-dplyr/package.py +++ b/var/spack/repos/builtin/packages/r-dplyr/package.py @@ -16,6 +16,7 @@ class RDplyr(RPackage): license("MIT") + version("1.1.4", sha256="cf730414d5d4ab387b4e9890a4b1df9d17a3903488e8da8df1cf2e11e44558cb") version("1.1.2", sha256="c220c38a3a44977c43eeae3d9aef90e8bb297150cad0993ea8d3cc13150096e3") version("1.0.10", sha256="3ab639f627b4e439052df18f193f0ccab223225a4ae2ff8c18aba4f9807e0f2b") version("1.0.9", sha256="e2e1f7312618b4e32ada9a1da79cef32eaec12acd408c973a6b069c6be4fb46b") @@ -63,6 +64,7 @@ class RDplyr(RPackage): depends_on("r-vctrs@0.3.5:", type=("build", "run"), when="@1.0.3:") depends_on("r-vctrs@0.4.1:", type=("build", "run"), when="@1.0.9:") depends_on("r-vctrs@0.6.0:", type=("build", "run"), when="@1.1.2:") + depends_on("r-vctrs@0.6.4:", type=("build", "run"), when="@1.1.4:") depends_on("r-pillar@1.5.1:", type=("build", "run"), when="@1.0.6:") depends_on("r-pillar@1.9.0:", type=("build", "run"), when="@1.1.2:") diff --git a/var/spack/repos/builtin/packages/r-dqrng/package.py b/var/spack/repos/builtin/packages/r-dqrng/package.py index 51a7793a1b342a..f85215b4c79aa9 100644 --- a/var/spack/repos/builtin/packages/r-dqrng/package.py +++ b/var/spack/repos/builtin/packages/r-dqrng/package.py @@ -26,10 +26,12 @@ class RDqrng(RPackage): license("AGPL-3.0-only OR custom") + version("0.4.1", sha256="3d9df935020c3c2538bc712456079925c4b379d67407c83fbc008340e353288f") version("0.3.0", sha256="4beeabfe245ce7196b07369f2a7d277cb08869ad8b45a22c6354c4cc70a39abb") version("0.2.1", sha256="e149c105b1db31e7f46b1aebf31d911a109e380923f3696fc56a53197fc1e866") depends_on("r@3.1.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@0.3.1:") depends_on("r-rcpp@0.12.16:", type=("build", "run")) depends_on("r-bh@1.64.0-1:", type=("build", "run")) depends_on("r-sitmo@2.0.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-dt/package.py b/var/spack/repos/builtin/packages/r-dt/package.py index 3fd34dff09e433..db589f34335ce1 100644 --- a/var/spack/repos/builtin/packages/r-dt/package.py +++ b/var/spack/repos/builtin/packages/r-dt/package.py @@ -18,6 +18,7 @@ class RDt(RPackage): license("Apache-2.0") + version("0.33", sha256="e145dadb1ce3db7c837f4313a8b5615b5b8ae63063ec2df93e528529717b27b8") version("0.27", sha256="e32fdccd2be430933cff88a9ce79045bfdbe3e08e0cd8d15037445808613289a") version("0.26", sha256="c412932be126d44f415559258e1d65adc0e84c3dfb9a70ce3196a2f877f7030c") version("0.25", sha256="0dfc8713062e1fe4e0428936367f35a0a41616c27b6d9b002bdfda58091c442b") @@ -35,6 +36,7 @@ class RDt(RPackage): depends_on("r-htmltools@0.3.6:", type=("build", "run")) depends_on("r-htmlwidgets@1.3:", type=("build", "run")) + depends_on("r-httpuv", type=("build", "run"), when="@0.29:") depends_on("r-jsonlite@0.9.16:", type=("build", "run"), when="@0.8:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-crosstalk", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-e1071/package.py b/var/spack/repos/builtin/packages/r-e1071/package.py index b2e66ec2aebcf4..dfeed53f3b378e 100644 --- a/var/spack/repos/builtin/packages/r-e1071/package.py +++ b/var/spack/repos/builtin/packages/r-e1071/package.py @@ -18,6 +18,7 @@ class RE1071(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.7-14", sha256="754d97ab073acc07b909a190f87f021e31e07269c8632c53166a6c2843e65195") version("1.7-13", sha256="da94e191af6e69aa0f9e3250d4b823674cc869339d914f761ebf2824177b6b2f") version("1.7-12", sha256="91e052d0a521db74a66df90adb28db601f2a2cca38b03dcad030ac2fdc5c5dcf") version("1.7-11", sha256="48c18e10e7cabc742d37b563672e2eddb6061f2378b69e5563be79ab9948d92f") diff --git a/var/spack/repos/builtin/packages/r-earth/package.py b/var/spack/repos/builtin/packages/r-earth/package.py index 92e3c072bb9b80..3fae5b8896208a 100644 --- a/var/spack/repos/builtin/packages/r-earth/package.py +++ b/var/spack/repos/builtin/packages/r-earth/package.py @@ -17,6 +17,7 @@ class REarth(RPackage): license("GPL-3.0-only") + version("5.3.3", sha256="786a0fcabb3db13e0e0a4ba61ecccb7e171030b39bc97926f8e7159485d2f572") version("5.3.2", sha256="c844d75edf9a2706a911bb05ed4287aad9acf6f3fed357e037763a300eac0bea") version("5.3.1", sha256="0bbe06ba974ceb8ec5de1d59cb53f9487d1828d7130fe2503c48b6cb449c4b03") version("5.3.0", sha256="05ace806271a74b3ddf8718a93237fe2a8550a8659ebd87f8079c0bda5e02437") @@ -26,4 +27,6 @@ class REarth(RPackage): depends_on("r-formula@1.2-3:", type=("build", "run")) depends_on("r-plotmo@3.5.4:", type=("build", "run")) depends_on("r-plotmo@3.6.0:", type=("build", "run"), when="@5.3.0") - depends_on("r-teachingdemos@2.10:", type=("build", "run")) + depends_on("r-plotmo@3.6.0:", type=("build", "run"), when="@5.3.3:") + + depends_on("r-teachingdemos@2.10:", type=("build", "run"), when="@:5.3.2") diff --git a/var/spack/repos/builtin/packages/r-ecosolver/package.py b/var/spack/repos/builtin/packages/r-ecosolver/package.py index d61d3979d157fa..bb57f5be6aba83 100644 --- a/var/spack/repos/builtin/packages/r-ecosolver/package.py +++ b/var/spack/repos/builtin/packages/r-ecosolver/package.py @@ -17,6 +17,7 @@ class REcosolver(RPackage): cran = "ECOSolveR" + version("0.5.5", sha256="2594ed1602b2fe159cc9aff3475e9cba7c1927b496c3daeabc1c0d227943ecc7") version("0.5.4", sha256="5d7489e8176c1df3f3f1290732243429280efca4f837916e6b6faa6dc8a8e324") depends_on("gmake", type="build") diff --git a/var/spack/repos/builtin/packages/r-ecp/package.py b/var/spack/repos/builtin/packages/r-ecp/package.py index ed1b5341819a84..7aec827a94f122 100644 --- a/var/spack/repos/builtin/packages/r-ecp/package.py +++ b/var/spack/repos/builtin/packages/r-ecp/package.py @@ -21,6 +21,7 @@ class REcp(RPackage): license("GPL-2.0-or-later") + version("3.1.5", sha256="9e2389632447a80a5e9937f15a98c092c33f5460e6ceb904971fcff3eda8a29e") version("3.1.4", sha256="1b98bf25a7659517dc98d1b950fe2a5fed9ef8f750893b3a9e06e9c6d59cc04d") version("3.1.3", sha256="a80ab10bafe30cc96287b9220e44c4b4eda40f5dd0546e4d2a2e1baab514c058") version("3.1.1", sha256="d2ab194e22e6ab0168222fbccfcf2e25c6cd51a73edc959086b0c6e0a7410268") diff --git a/var/spack/repos/builtin/packages/r-ellipse/package.py b/var/spack/repos/builtin/packages/r-ellipse/package.py index 7c791bf1b5db54..e798ce3b2b66b6 100644 --- a/var/spack/repos/builtin/packages/r-ellipse/package.py +++ b/var/spack/repos/builtin/packages/r-ellipse/package.py @@ -20,6 +20,7 @@ class REllipse(RPackage): license("GPL-2.0-or-later") + version("0.5.0", sha256="cde8553973ce2cc04324318b3df13890d585987171fedfe2efbf1430f82cc2f3") version("0.4.5", sha256="39c475851380deeb9361464f8f32fa2ee250f24604791c00680a54aaaaba8936") version("0.4.3", sha256="02ef2b11c3462a8b800332e522183f4c7c40c7d2d66c5174d5f3f6d8cc68a946") version("0.4.2", sha256="1719ce9a00b9ac4d56dbf961803085b892d3359726fda3567bb989ddfed9a5f2") diff --git a/var/spack/repos/builtin/packages/r-emmeans/package.py b/var/spack/repos/builtin/packages/r-emmeans/package.py index bf2a67120a07ba..150e26a6496be0 100644 --- a/var/spack/repos/builtin/packages/r-emmeans/package.py +++ b/var/spack/repos/builtin/packages/r-emmeans/package.py @@ -21,6 +21,7 @@ class REmmeans(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.10.4", sha256="66653623c5984f99ba481a8611d6cf3b829e577f07bbe4043f279a3f8fbadcc3") version("1.8.5", sha256="5c88b415b5a42d8c1aa63af090c4987326530ea6d0e60bab9b5fb7e99a982415") version("1.8.2", sha256="785973457d8a6547df489f87b62987d44a68c4b9018661d38ca11ee34e49d209") version("1.8.1-1", sha256="79fc5e44255427b038d0dbe2c9887d84984baacb11bb9a9078cd8d0dca2e6577") diff --git a/var/spack/repos/builtin/packages/r-envstats/package.py b/var/spack/repos/builtin/packages/r-envstats/package.py index 6a03accb0d17c2..58fae609b76cca 100644 --- a/var/spack/repos/builtin/packages/r-envstats/package.py +++ b/var/spack/repos/builtin/packages/r-envstats/package.py @@ -23,6 +23,7 @@ class REnvstats(RPackage): cran = "EnvStats" + version("2.8.1", sha256="12952b9eaa64b7bdbaaa5c6b7acb3aa1028ddfa4e5de7ddfea54f900c452d6a6") version("2.7.0", sha256="09a6f0d5b60856c7298371e4a8a085a1db7abf0e71ccb9a2dc9ca24248fb5d81") version("2.5.0", sha256="4f77aa66c9dbbe411370a6dd5b9e514823d5506bbcdad9dc09a9e4268d65a7f7") version("2.4.0", sha256="49459e76412037b3d8021bd83ee93d140bc3e715a2a2282a347ef60061900514") diff --git a/var/spack/repos/builtin/packages/r-ergm/package.py b/var/spack/repos/builtin/packages/r-ergm/package.py index b5434cfa37b655..f30fe867777458 100644 --- a/var/spack/repos/builtin/packages/r-ergm/package.py +++ b/var/spack/repos/builtin/packages/r-ergm/package.py @@ -19,6 +19,7 @@ class RErgm(RPackage): license("GPL-3.0-only") + version("4.6.0", sha256="b471a60c39eb5b478e06dd0caf1d085f4b0927f1c260de699f1c8d4fe831a7f7") version("4.4.0", sha256="2db152cc7fdd71d6f0065603405f30bf5e206591da39b8f542178ec6d6126173") version("4.3.1", sha256="3ff63c81ea4061ac0c79247fcd2e614494624f7f1df57a4634927e7e90800ed3") version("4.2.3", sha256="35d15373d4a8445872eb3713c81c6c6ac34b72096e0cdb04292a468e65ae9288") @@ -44,7 +45,7 @@ class RErgm(RPackage): depends_on("r-trust@0.1.7:", type=("build", "run")) depends_on("r-trust@0.1.8:", type=("build", "run"), when="@4.1.2:") depends_on("r-matrix@1.2-17:", type=("build", "run")) - depends_on("r-matrix@1.3.2:", type=("build", "run"), when="@4.1.2:") + depends_on("r-matrix@1.3-2:", type=("build", "run"), when="@4.1.2:") depends_on("r-lpsolveapi@5.5.2.0.17.7:", type=("build", "run"), when="@4.1.2:") depends_on("r-mass@7.3-51.4:", type=("build", "run")) depends_on("r-mass@7.3.53.1:", type=("build", "run"), when="@4.1.2:") @@ -54,6 +55,7 @@ class RErgm(RPackage): depends_on("r-statnet-common@4.6.0:", type=("build", "run"), when="@4.2.1:") depends_on("r-statnet-common@4.7.0:", type=("build", "run"), when="@4.3.1:") depends_on("r-statnet-common@4.8.0:", type=("build", "run"), when="@4.4.0:") + depends_on("r-statnet-common@4.9.0:", type=("build", "run"), when="@4.5.0:") depends_on("r-rle", type=("build", "run"), when="@3.11.0:") depends_on("r-rle@0.9.2:", type=("build", "run"), when="@4.1.2:") depends_on("r-purrr@0.3.2:", type=("build", "run"), when="@3.10.0:") diff --git a/var/spack/repos/builtin/packages/r-estimability/package.py b/var/spack/repos/builtin/packages/r-estimability/package.py index 545001ea96da06..9a246b6ec6a3a9 100644 --- a/var/spack/repos/builtin/packages/r-estimability/package.py +++ b/var/spack/repos/builtin/packages/r-estimability/package.py @@ -19,5 +19,9 @@ class REstimability(RPackage): license("GPL-3.0-or-later") + version("1.5.1", sha256="3ca6b96a39fd8877e8636f94d20f34308b7296c1376c646703d27df8591644e9") version("1.4.1", sha256="c65aaf1e452f3947013d3ce05ae674d48492081f615a942592dc91db780f1124") version("1.3", sha256="a33179c5fbd6a1a623d90cb6f1743148f92c09429fac466867f3ea70946a2e32") + + depends_on("r@4.1.0:", when="@1.5.1:", type=("build", "run")) + depends_on("r@4.3.0:", when="@1.5:1.5.0", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-europepmc/package.py b/var/spack/repos/builtin/packages/r-europepmc/package.py index 64a9c094626f88..082450f3c9e538 100644 --- a/var/spack/repos/builtin/packages/r-europepmc/package.py +++ b/var/spack/repos/builtin/packages/r-europepmc/package.py @@ -25,6 +25,7 @@ class REuropepmc(RPackage): license("GPL-3.0-only") + version("0.4.3", sha256="25945534527bd89a6dcd9e371e3c2a68f3fe2046587daf1563be16eac9dd1998") version("0.4.1", sha256="c1ba91a2a99432cabe18e86fea33ac9d20dbb3ac0b58f430d464b4d8ecba4a9a") version("0.4", sha256="d55f62963d0ee84830654bbc78f4ad8285e376b04be137cbeaf8ad2a98b7969c") version("0.3", sha256="5044a253d223e2bb8502063cd03c0fe4db856467e497d650da7ccd8f75d0f8d9") diff --git a/var/spack/repos/builtin/packages/r-evaluate/package.py b/var/spack/repos/builtin/packages/r-evaluate/package.py index 86aeb872a928c8..bb16d16b85b129 100644 --- a/var/spack/repos/builtin/packages/r-evaluate/package.py +++ b/var/spack/repos/builtin/packages/r-evaluate/package.py @@ -16,6 +16,7 @@ class REvaluate(RPackage): license("MIT") + version("0.24.0", sha256="e23d764a58e7525257d57da4ccfee9d6f63b5b3c18bf01c76818ec8c9c587fd6") version("0.20", sha256="35f5d9e85603600b58960923d591c5ca1115153febba7c612867d8b5598afff0") version("0.18", sha256="7f4eecdc97ac286d5c7a39c454fe6798da38ef634bf9305c595faa8facb2bf36") version("0.17", sha256="49c743c94cb967911af0e5555861a3762cd840b98578882671b583cff86ba963") @@ -26,5 +27,6 @@ class REvaluate(RPackage): version("0.9", sha256="e8118c9d6ec479c0e712913848404431b6b6c0282f3c131acaf9a677ab5fc6ae") depends_on("r@3.0.2:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@0.24.0:") depends_on("r-stringr@0.6.2:", type=("build", "run"), when="@:0.11") diff --git a/var/spack/repos/builtin/packages/r-evd/package.py b/var/spack/repos/builtin/packages/r-evd/package.py index 09a3a103566d78..5737dac4e00dac 100644 --- a/var/spack/repos/builtin/packages/r-evd/package.py +++ b/var/spack/repos/builtin/packages/r-evd/package.py @@ -19,6 +19,7 @@ class REvd(RPackage): license("GPL-3.0-only") + version("2.3-7", sha256="4a899df15d39be4a8d544de4f5e4690b4673790a46da6a6c9c2a70fef3b55648") version("2.3-6.1", sha256="662c592d3f5c5693dbf1c673d1137c4a60a347e330b71be1f3933f201d2c8971") version("2.3-6", sha256="8edb8bc4f06d246c4343fd923bb5d5df99724d6db8821bfd996220343a834cb6") version("2.3-3", sha256="2fc5ef2e0c3a2a9392425ddd45914445497433d90fb80b8c363877baee4559b4") diff --git a/var/spack/repos/builtin/packages/r-exactextractr/package.py b/var/spack/repos/builtin/packages/r-exactextractr/package.py index 28eb6fe05f63c0..a9a6e5b05899d3 100644 --- a/var/spack/repos/builtin/packages/r-exactextractr/package.py +++ b/var/spack/repos/builtin/packages/r-exactextractr/package.py @@ -16,6 +16,7 @@ class RExactextractr(RPackage): license("Apache-2.0") + version("0.10.0", sha256="9b7fc3c6f0e9e89596a1992240ecbb8e2893f4addffaecbd852403c10a0943de") version("0.9.1", sha256="f0cf367c25a45b09eda1d435c8c818590ff4de86162f675e3172821d1853f4a1") version("0.9.0", sha256="705a355534f427dc832af2a294aaf928c10c72d6335d38aed86da64d814eb18d") version("0.8.2", sha256="cc32ab3af8d881a7e7836c296ea42f3fdabf3373ec1de0b154dbfe9870ee8a74") diff --git a/var/spack/repos/builtin/packages/r-expm/package.py b/var/spack/repos/builtin/packages/r-expm/package.py index 944d12211ff647..c1ece1ae786473 100644 --- a/var/spack/repos/builtin/packages/r-expm/package.py +++ b/var/spack/repos/builtin/packages/r-expm/package.py @@ -16,6 +16,7 @@ class RExpm(RPackage): license("GPL-2.0-or-later") + version("1.0-0", sha256="02c536f8f6af55b132210a50b1e9694a3549806bf97c49e0fe03595945aab254") version("0.999-7", sha256="28f249b914b8dd33eee16663fc793e57afd0e301e16067bf9f27fa8e591ba0f1") version("0.999-6", sha256="2c79912fd2e03fcf89c29f09555880934402fcb2359af8b4579d79b4f955addc") version("0.999-4", sha256="58d06427a08c9442462b00a5531e2575800be13ed450c5a1546261251e536096") diff --git a/var/spack/repos/builtin/packages/r-factominer/package.py b/var/spack/repos/builtin/packages/r-factominer/package.py index 39b8379a45a501..d1dab128f04a46 100644 --- a/var/spack/repos/builtin/packages/r-factominer/package.py +++ b/var/spack/repos/builtin/packages/r-factominer/package.py @@ -20,6 +20,7 @@ class RFactominer(RPackage): cran = "FactoMineR" + version("2.11", sha256="32c26b42cb4dd8d7a8c845f1e8562fa0e3ebded19d3c1284c3504df09974f063") version("2.8", sha256="c09086f7ae4c4855ed6f1e8303b497e250ab6cf101feb3db6c8a93510e5ff851") version("2.6", sha256="81261608c097b863e004a0c6cdc4bdfd6e7bf49c6ec20e211233eda2e5268f75") version("2.4", sha256="b9e3adce9a66b4daccc85fa67cb0769d6be230beeb126921b386ccde5db2e851") diff --git a/var/spack/repos/builtin/packages/r-fansi/package.py b/var/spack/repos/builtin/packages/r-fansi/package.py index 11d4708e17ef0a..74f31d835c3a2a 100644 --- a/var/spack/repos/builtin/packages/r-fansi/package.py +++ b/var/spack/repos/builtin/packages/r-fansi/package.py @@ -16,6 +16,7 @@ class RFansi(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.0.6", sha256="ea9dc690dfe50a7fad7c5eb863c157d70385512173574c56f4253b6dfe431863") version("1.0.4", sha256="3163214e6c40922bbb495229259ed8ce1bebd98b77098a6936d234e43da9c49f") version("1.0.3", sha256="86a7b83d8c9d28baebbde310cd0b459d0950a9c7ff1a6276ce5858f6a89bc06a") version("1.0.2", sha256="d1e2cf2e10613abe19071e3dab7c564ebcf85ad13cbee25fa1999267af01b557") diff --git a/var/spack/repos/builtin/packages/r-farver/package.py b/var/spack/repos/builtin/packages/r-farver/package.py index e7d36ca104c4c7..980cb7118eb652 100644 --- a/var/spack/repos/builtin/packages/r-farver/package.py +++ b/var/spack/repos/builtin/packages/r-farver/package.py @@ -21,6 +21,7 @@ class RFarver(RPackage): license("MIT") + version("2.1.2", sha256="528823b95daab4566137711f1c842027a952bea1b2ae6ff098e2ca512b17fe25") version("2.1.1", sha256="0dcfda6ca743f465372790bcff1bcbc6a7145fdac1c682b021f654e8c6c996ce") version("2.1.0", sha256="e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4") version("2.0.3", sha256="0e1590df79ec6078f10426411b96216b70568a4eaf3ffd84ca723add0ed8e5cc") diff --git a/var/spack/repos/builtin/packages/r-fastcluster/package.py b/var/spack/repos/builtin/packages/r-fastcluster/package.py index bdc1f96110fb45..685ab3f3993557 100644 --- a/var/spack/repos/builtin/packages/r-fastcluster/package.py +++ b/var/spack/repos/builtin/packages/r-fastcluster/package.py @@ -24,6 +24,7 @@ class RFastcluster(RPackage): license("BSD-2-Clause OR GPL-2.0-only OR custom") + version("1.2.6", sha256="852a05458fb0b64497e9cf8f0182b599d1c2b1e9af03ec45f7c0c9280c1f8d19") version("1.2.3", sha256="1f229129e1cddc78c7bb5ecc90c4d28ed810ee68cf210004c7cdfa12cfaf2a01") version("1.1.25", sha256="f3661def975802f3dd3cec5b2a1379f3707eacff945cf448e33aec0da1ed4205") diff --git a/var/spack/repos/builtin/packages/r-fastdigest/package.py b/var/spack/repos/builtin/packages/r-fastdigest/package.py index aa1aea798887eb..b6fe0390d79008 100644 --- a/var/spack/repos/builtin/packages/r-fastdigest/package.py +++ b/var/spack/repos/builtin/packages/r-fastdigest/package.py @@ -23,4 +23,5 @@ class RFastdigest(RPackage): license("Artistic-2.0") + version("0.6-4", sha256="b2b6a550d90446bed911c9ad7642efd2a869257ecc5b9eb57e66b2cd4ef109a0") version("0.6-3", sha256="62a04aa39f751cf9bb7ff43cadb3c1a8d2270d7f3e8550a2d6ca9e1d8ca09a09") diff --git a/var/spack/repos/builtin/packages/r-fastdummies/package.py b/var/spack/repos/builtin/packages/r-fastdummies/package.py new file mode 100644 index 00000000000000..44ff1bb9982993 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-fastdummies/package.py @@ -0,0 +1,24 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RFastdummies(RPackage): + """Fast Creation of Dummy (Binary) Columns and Rows from Categorical + Variables.""" + + homepage = "https://jacobkap.github.io/fastDummies/" + cran = "fastDummies" + + license("MIT", checked_by="wdconinc") + + version("1.7.4", sha256="95904d4b67efc3faafa47cae9473c9d75653bc3fb6ad0083869ebf9f7960dd08") + + depends_on("r@2.1:", type=("build", "run")) + depends_on("r@2.10:", type=("build", "run"), when="@1.0.0:") + depends_on("r-data-table", type=("build", "run")) + depends_on("r-tibble", type=("build", "run")) + depends_on("r-stringr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-fastica/package.py b/var/spack/repos/builtin/packages/r-fastica/package.py index 9c64c3130cfe5d..a22516c3b12f62 100644 --- a/var/spack/repos/builtin/packages/r-fastica/package.py +++ b/var/spack/repos/builtin/packages/r-fastica/package.py @@ -14,6 +14,7 @@ class RFastica(RPackage): cran = "fastICA" + version("1.2-5.1", sha256="65916ee9a44598a5d50c43d96de5fb11730e0a5a5938e5859f1a928d31f3d985") version("1.2-3", sha256="e9ef82644cb64bb49ae3b7b6e0885f4fb2dc08ae030f8c76fe8dd8507b658950") version("1.2-2", sha256="32223593374102bf54c8fdca7b57231e4f4d0dd0be02d9f3500ad41b1996f1fe") diff --git a/var/spack/repos/builtin/packages/r-fastmap/package.py b/var/spack/repos/builtin/packages/r-fastmap/package.py index a97657a321fe86..3d50ab69ba3b09 100644 --- a/var/spack/repos/builtin/packages/r-fastmap/package.py +++ b/var/spack/repos/builtin/packages/r-fastmap/package.py @@ -20,6 +20,7 @@ class RFastmap(RPackage): license("MIT") + version("1.2.0", sha256="b1da04a2915d1d057f3c2525e295ef15016a64e6667eac83a14641bbd83b9246") version("1.1.1", sha256="3623809dd016ae8abd235200ba7834effc4b916915a059deb76044137c5c7173") version("1.1.0", sha256="9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b") version("1.0.1", sha256="4778b05dfebd356f8df980dfeff3b973a72bca14898f870e5c40c1d84db9faec") diff --git a/var/spack/repos/builtin/packages/r-fastmatch/package.py b/var/spack/repos/builtin/packages/r-fastmatch/package.py index e95677e309d607..3d5773182b04bf 100644 --- a/var/spack/repos/builtin/packages/r-fastmatch/package.py +++ b/var/spack/repos/builtin/packages/r-fastmatch/package.py @@ -18,6 +18,7 @@ class RFastmatch(RPackage): license("GPL-2.0-only") + version("1.1-4", sha256="9a914cac9c1ea2984bd44eebe421e1636504907a8064ae26347fe3ec2b9bd56b") version("1.1-3", sha256="1defa0b08bc3f48e4c3e4ba8df4f1b9e8299932fd8c747c67d32de44f90b9861") version("1.1-0", sha256="20b51aa4838dbe829e11e951444a9c77257dcaf85130807508f6d7e76797007d") diff --git a/var/spack/repos/builtin/packages/r-fastmatrix/package.py b/var/spack/repos/builtin/packages/r-fastmatrix/package.py index c086bcc21e1cb0..27102cdc092b2a 100644 --- a/var/spack/repos/builtin/packages/r-fastmatrix/package.py +++ b/var/spack/repos/builtin/packages/r-fastmatrix/package.py @@ -30,6 +30,7 @@ class RFastmatrix(RPackage): license("GPL-3.0-only") + version("0.5-772", sha256="72601bae9a59f467c5da9ccf08788f0233cdbb2420b6b2aa43a42a2632ff9c55") version("0.5", sha256="fb5f251a98425161e9dbbbb7edf95226725255b1474aad03ab046c7c6c6c3f12") version("0.4-1245", sha256="ee2e12b5dcda4585cca21f2c0ac144706f6fd26024586e91d622c6cd66d1d873") version("0.4-1", sha256="494a1aad38dcec28956eba8d095c964b20c5388dfb6dc2a23848ae37ea61cde5") diff --git a/var/spack/repos/builtin/packages/r-fda/package.py b/var/spack/repos/builtin/packages/r-fda/package.py index 0f5aa30a7f3f83..93a4d3a3d05bdd 100644 --- a/var/spack/repos/builtin/packages/r-fda/package.py +++ b/var/spack/repos/builtin/packages/r-fda/package.py @@ -19,6 +19,7 @@ class RFda(RPackage): license("GPL-2.0-or-later") + version("6.1.8", sha256="ef8d858a2879491aa2c441d171ba14462bf27852d16e8420fa49aab83f42c407") version("6.0.5", sha256="14445776fc65284cd6cae98e5b4dd14c2626d96db5f78c0fcc6aabce5419b8f1") version("6.0.3", sha256="205814b9812664e8201221f99e0e8391aa49dba2ae287dc404c57c0c492477d3") version("5.5.1", sha256="dcaa2f6ae226d35855bc79c6967f60d45404b984c0afaec215b139c4b8dea23a") diff --git a/var/spack/repos/builtin/packages/r-ff/package.py b/var/spack/repos/builtin/packages/r-ff/package.py index 04017a2835a3ce..ad2bec47239335 100644 --- a/var/spack/repos/builtin/packages/r-ff/package.py +++ b/var/spack/repos/builtin/packages/r-ff/package.py @@ -56,6 +56,7 @@ class RFf(RPackage): license("GPL-2.0-only OR GPL-3.0-only OR custom") + version("4.0.12", sha256="08af355a9a10fe29d48d085abc7cf1f975e1a4a670668a4f8d9632d087fb41bf") version("4.0.9", sha256="722053271987a0c9673c3ff9e7968bbab47979d529a2fe6bb1a3179408ee3c4f") version("4.0.7", sha256="0a47333d31c7afc3f95387166e21a3e4c763cbef47d9b5927753aef4ff8d83fa") version("4.0.5", sha256="9aba9e271144ec224063ddba0d791e2fcdb9c912d48fdc49e204fce628355037") diff --git a/var/spack/repos/builtin/packages/r-fields/package.py b/var/spack/repos/builtin/packages/r-fields/package.py index 27cb884cc0d33f..9cb19fc61483cf 100644 --- a/var/spack/repos/builtin/packages/r-fields/package.py +++ b/var/spack/repos/builtin/packages/r-fields/package.py @@ -38,6 +38,7 @@ class RFields(RPackage): license("GPL-2.0-or-later") + version("16.2", sha256="3910950cd5476e7e3d17d00dabfa37a6491019426c74b6955a2fbe5648a3b3e4") version("14.1", sha256="57c4c5592443d2ee869014b3199989b5edd1aff52e24f1cd313b8f9b34a95434") version("13.3", sha256="c652838b1ae7eb368831522824bfbc1d1db7b9d1db5e9bb52b194098549944c3") version("11.6", sha256="8600d1d992c40668cc2ab01b3c17d0e1bd44a001ec7ba9f468bc0e9ef87c59db") @@ -46,5 +47,6 @@ class RFields(RPackage): depends_on("r@3.0:", type=("build", "run")) depends_on("r@3.5.0:", type=("build", "run"), when="@14.1:") depends_on("r-spam", type=("build", "run")) - depends_on("r-viridis", type=("build", "run"), when="@13.3:") + depends_on("r-viridis", type=("build", "run"), when="@13.3:14.2") + depends_on("r-viridislite", type=("build", "run"), when="@14.3:") depends_on("r-maps", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-filehash/package.py b/var/spack/repos/builtin/packages/r-filehash/package.py index 3c931a8239a848..a4cc9c8297b388 100644 --- a/var/spack/repos/builtin/packages/r-filehash/package.py +++ b/var/spack/repos/builtin/packages/r-filehash/package.py @@ -23,6 +23,7 @@ class RFilehash(RPackage): license("GPL-2.0-or-later") + version("2.4-6", sha256="558b446ba354c6fa88f694e8d6d068f999d1e7b626164eb2aeacccbb0dee81b1") version("2.4-5", sha256="3b1ee2794dd61e525ee44db16611c65957691d77bb26ae481eba988bb55da22c") version("2.4-3", sha256="f394e2c93233e8ad1c104562ea9349855dc8e303131f559cd59834f9aa3e41bd") version("2.4-2", sha256="b6d056f75d45e315943a4618f5f62802612cd8931ba3f9f474b595140a3cfb93") diff --git a/var/spack/repos/builtin/packages/r-filelock/package.py b/var/spack/repos/builtin/packages/r-filelock/package.py index 3aba76da0895bd..18bd42a6d440a9 100644 --- a/var/spack/repos/builtin/packages/r-filelock/package.py +++ b/var/spack/repos/builtin/packages/r-filelock/package.py @@ -16,8 +16,7 @@ class RFilelock(RPackage): license("MIT") + version("1.0.3", sha256="2dcd0ec453f5ec4d96f69b0c472569d57d3c5f9956a82a48492ee02f12071137") version("1.0.2", sha256="ac2915950789b16c43a625a2b8dab6ba423588db4a7d0daa75b74518b82b1403") - depends_on("r-callr@2.0.0:", type=("build", "run")) - depends_on("r-covr", type=("build", "run")) - depends_on("r-testthat", type=("build", "run")) + depends_on("r@3.4:", type=("build", "run"), when="@1.0.3:") diff --git a/var/spack/repos/builtin/packages/r-fitdistrplus/package.py b/var/spack/repos/builtin/packages/r-fitdistrplus/package.py index 5602ed82aa10b0..9dcf4e3b4c9b4e 100644 --- a/var/spack/repos/builtin/packages/r-fitdistrplus/package.py +++ b/var/spack/repos/builtin/packages/r-fitdistrplus/package.py @@ -24,6 +24,7 @@ class RFitdistrplus(RPackage): license("GPL-2.0-or-later") + version("1.2-1", sha256="68b4215a9dfff65880a3ba6f7febe4929b197611344932b79af05d91dc584558") version("1.1-11", sha256="26274f2b710b2417a8bca314d400abf320d4ccf0387ad082743056699501b53d") version("1.1-8", sha256="f3c72310f40773b3839a9506c3cb781d044e09b94f2f38d332bb24e5f9960f5a") version("1.1-6", sha256="17c2990041a3bb7479f3c3a6d13d96c989db8eaddab17eff7e1fbe172a5b96be") @@ -34,5 +35,6 @@ class RFitdistrplus(RPackage): depends_on("r@3.5.0:", type=("build", "run"), when="@1.1-6:") depends_on("r-mass", type=("build", "run")) depends_on("r-survival", type=("build", "run")) + depends_on("r-rlang", type=("build", "run"), when="@1.2-1:") depends_on("r-npsurv", type=("build", "run"), when="@:1.0-14") diff --git a/var/spack/repos/builtin/packages/r-flexclust/package.py b/var/spack/repos/builtin/packages/r-flexclust/package.py index bbc9fff7000e54..5566dbaf222ce6 100644 --- a/var/spack/repos/builtin/packages/r-flexclust/package.py +++ b/var/spack/repos/builtin/packages/r-flexclust/package.py @@ -21,6 +21,7 @@ class RFlexclust(RPackage): license("GPL-2.0-only") + version("1.4-2", sha256="0c4720d691e36091cedafa26ee1f0ddc7af931168096df00b9bf6d64fdd35a55") version("1.4-1", sha256="d67977df059e622832358069509f8968d506074320a45d34bfd21c65f898538d") version("1.4-0", sha256="82fe445075a795c724644864c7ee803c5dd332a89ea9e6ccf7cd1ae2d1ecfc74") version("1.3-5", sha256="dbf49969c93a7b314d9dc3299a0764ed9a804ba7dcbdc08a1235f244f4b85059") diff --git a/var/spack/repos/builtin/packages/r-fnn/package.py b/var/spack/repos/builtin/packages/r-fnn/package.py index c9e235eb4dcf0a..96565f2e33a4b6 100644 --- a/var/spack/repos/builtin/packages/r-fnn/package.py +++ b/var/spack/repos/builtin/packages/r-fnn/package.py @@ -15,6 +15,7 @@ class RFnn(RPackage): cran = "FNN" + version("1.1.4", sha256="db4db5a348c6051fe547193c282b6e5cc839f68f51e0afccf4939f35e9a2fc27") version("1.1.3.2", sha256="d701a13487979ebb07a071f4cc83fcf4daea5832d1f3923bce1e0d671dfe0e87") version("1.1.3.1", sha256="52b0e20611481a95bced40be4126f44b002fd3a9c4c9674bb34db4e1e3b5be5a") version("1.1.3", sha256="de763a25c9cfbd19d144586b9ed158135ec49cf7b812938954be54eb2dc59432") @@ -26,3 +27,4 @@ class RFnn(RPackage): version("0.6-2", sha256="f1fc410c341175bdb11a75b063c8c987e15b632378b56148d3566b91fca53a31") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@1.1.4:") diff --git a/var/spack/repos/builtin/packages/r-fontawesome/package.py b/var/spack/repos/builtin/packages/r-fontawesome/package.py index 90a63abb63170b..8709192c266922 100644 --- a/var/spack/repos/builtin/packages/r-fontawesome/package.py +++ b/var/spack/repos/builtin/packages/r-fontawesome/package.py @@ -19,6 +19,7 @@ class RFontawesome(RPackage): license("MIT") + version("0.5.2", sha256="da3de2a9717084d1400d48edd783f06c66b8c910ce9c8d753d1b7d99be1c5cc9") version("0.5.1", sha256="f4ebbbe2ee8d2e2c0342b72095cfe668bd9800ea6c4bf7180300544bde7e566c") version("0.4.0", sha256="760a0bc5b50ddbce1160b123f3b3d76342167519d75641dc2c5b952fa8d4242f") version("0.3.0", sha256="4deefcf4d4580d84213f863351c2a23c39adbd2f8762d7477ec2faa8235a1a31") diff --git a/var/spack/repos/builtin/packages/r-forecast/package.py b/var/spack/repos/builtin/packages/r-forecast/package.py index 713c688d18cd1c..0a502898804931 100644 --- a/var/spack/repos/builtin/packages/r-forecast/package.py +++ b/var/spack/repos/builtin/packages/r-forecast/package.py @@ -17,6 +17,7 @@ class RForecast(RPackage): license("GPL-3.0-only") + version("8.23.0", sha256="ffc3d41138f498fb286f0ebfeb72d15f9f7a8e953abf3c351ebf95fc188a1880") version("8.21", sha256="fdd131795a9d3fb399d76a9aa66a0c276637caaa9ec0c75fbe386189d005c6c2") version("8.18", sha256="5920baa8d9d81988000d0e2edcea61c05126b5cb923cb5921a6fcd7bc312d8dd") version("8.16", sha256="9f01eb895a883a7e1e23725b167b46edc1b0b152fd4120278aaa5f7b2621767f") @@ -39,5 +40,6 @@ class RForecast(RPackage): depends_on("r-timedate", type=("build", "run")) depends_on("r-tseries", type=("build", "run")) depends_on("r-urca", type=("build", "run"), when="@8.6:") + depends_on("r-withr", type=("build", "run"), when="@8.23.0:") depends_on("r-zoo", type=("build", "run")) depends_on("r-rcpparmadillo@0.2.35:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-foreign/package.py b/var/spack/repos/builtin/packages/r-foreign/package.py index 18e6d6ac46ac42..65ef468cb2d7ab 100644 --- a/var/spack/repos/builtin/packages/r-foreign/package.py +++ b/var/spack/repos/builtin/packages/r-foreign/package.py @@ -18,6 +18,7 @@ class RForeign(RPackage): license("GPL-2.0-or-later") + version("0.8-87", sha256="1a24acf4c8e87acc740599e950388b88e5beab7e54f699a015366fbd86db2856") version("0.8-84", sha256="17edf302c7568a122dc496a61a4a886ef7c02224a235d945b473611c79c98549") version("0.8-83", sha256="87eae73f780b6bbcf0a45b3e21d1c87be0404aa2d5b455df92ab45516030721b") version("0.8-82", sha256="f8ed0684d59bec7f3a39cde1aa5ec7b3e6e36aaecacb28120c9c54f7b13f80fb") diff --git a/var/spack/repos/builtin/packages/r-fpc/package.py b/var/spack/repos/builtin/packages/r-fpc/package.py index 7b29d95d0fb7a3..9ef1e36324eb2d 100644 --- a/var/spack/repos/builtin/packages/r-fpc/package.py +++ b/var/spack/repos/builtin/packages/r-fpc/package.py @@ -30,6 +30,7 @@ class RFpc(RPackage): license("GPL-2.0-or-later") + version("2.2-12", sha256="555996b4c7e78a28067df25ac657b5065ec79b6b2cd76080382c2d5b43104787") version("2.2-10", sha256="99b4548f2eca1a092a31bc2fa4e4bd1d6b50fdfacf3218588c879ceec99147d2") version("2.2-9", sha256="29b0006e96c8645645d215d3378551bd6525aaf45abde2d9f12933cf6e75fa38") version("2.2-3", sha256="8100a74e6ff96b1cd65fd22494f2d200e54ea5ea533cfca321fa494914bdc3b7") diff --git a/var/spack/repos/builtin/packages/r-fracdiff/package.py b/var/spack/repos/builtin/packages/r-fracdiff/package.py index ac7209584ba049..fe3009ec5e6448 100644 --- a/var/spack/repos/builtin/packages/r-fracdiff/package.py +++ b/var/spack/repos/builtin/packages/r-fracdiff/package.py @@ -18,6 +18,7 @@ class RFracdiff(RPackage): license("GPL-2.0-or-later") + version("1.5-3", sha256="0f90946b4092feff93fad094a2c91bb47c8051595210e86c029c70238dbf7fc0") version("1.5-2", sha256="ac5f881330287f5bc68b5cdce4fb74156a95356ffb875ee171538bc44200f437") version("1.5-1", sha256="b8103b32a4ca3a59dda1624c07da08ecd144c7a91a747d1f4663e99421950eb6") version("1.4-2", sha256="983781cedc2b4e3ba9fa020213957d5133ae9cd6710bc61d6225728e2f6e850e") diff --git a/var/spack/repos/builtin/packages/r-fs/package.py b/var/spack/repos/builtin/packages/r-fs/package.py index 01da707587f2e4..03481f2bd0ad51 100644 --- a/var/spack/repos/builtin/packages/r-fs/package.py +++ b/var/spack/repos/builtin/packages/r-fs/package.py @@ -16,6 +16,7 @@ class RFs(RPackage): license("MIT") + version("1.6.4", sha256="7e06290f2dbe36f54fdf51b748a4b00b8b0f68967b5754e37e0c83df7fea5ac8") version("1.6.2", sha256="548b7c0ed5ab26dc4fbd88707ae12987bcaef834dbc6de4e17d453846dc436b2") version("1.5.2", sha256="35cad1781d6d17c1feb56adc4607079c6844b63794d0ce1e74bb18dbc11e1987") version("1.5.0", sha256="36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897") @@ -23,6 +24,7 @@ class RFs(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@1.6.2:") + depends_on("r@3.6:", type=("build", "run"), when="@1.6.4:") depends_on("gmake", type="build") depends_on("r-rcpp", type=("build", "run"), when="@:1.3.1") diff --git a/var/spack/repos/builtin/packages/r-future-apply/package.py b/var/spack/repos/builtin/packages/r-future-apply/package.py index 43d35b3845b46a..7854e9a90cf52f 100644 --- a/var/spack/repos/builtin/packages/r-future-apply/package.py +++ b/var/spack/repos/builtin/packages/r-future-apply/package.py @@ -19,6 +19,7 @@ class RFutureApply(RPackage): cran = "future.apply" + version("1.11.2", sha256="f4a635b0fa5e0d826d2f8da6bc1fa5bb055e640c29a85c644931d08ab2d81387") version("1.10.0", sha256="dee92dd84812fe8c55064c0f0e6d806c0c29848b5a5fc4a7725d6a4b623e94aa") version("1.9.1", sha256="4f22ccd5caa62077581c6adc4d35543451e547220270aed3f1abcbaa6a202133") version("1.9.0", sha256="6166c1c5ce30b9745059c3d30c8110f7c1d51871e58aa414f195cb1f91c467f5") diff --git a/var/spack/repos/builtin/packages/r-future/package.py b/var/spack/repos/builtin/packages/r-future/package.py index 5cdaa6a99430cc..3cc6d0ecc884f0 100644 --- a/var/spack/repos/builtin/packages/r-future/package.py +++ b/var/spack/repos/builtin/packages/r-future/package.py @@ -28,6 +28,7 @@ class RFuture(RPackage): license("LGPL-2.1-or-later") + version("1.34.0", sha256="5839d4fd1f8beb1b18b27a7c50c1eb2bb5d80acd926b1bce9323637c8b2dfa5d") version("1.32.0", sha256="d5bb74512d069745184dd580a36449dc0b50d95b1cbbbc1605db82de596f2f76") version("1.29.0", sha256="856d1fd51d2f998c6572490c49fdcc27e5f3e0c1ade75eecdbf64a2cd0954373") version("1.28.0", sha256="6fdda66acd9a255e5baa70ff5dacd3c57ab2ecc2d87fd6abeebdfb939c051bf6") @@ -52,3 +53,4 @@ class RFuture(RPackage): depends_on("r-parallelly@1.30.0:", type=("build", "run"), when="@1.24.0:") depends_on("r-parallelly@1.32.1:", type=("build", "run"), when="@1.28.0:") depends_on("r-parallelly@1.34.0:", type=("build", "run"), when="@1.32.0:") + depends_on("r-parallelly@1.38.0:", type=("build", "run"), when="@1.34.0:") diff --git a/var/spack/repos/builtin/packages/r-gamlss-data/package.py b/var/spack/repos/builtin/packages/r-gamlss-data/package.py index 327f62a42ea766..da3363959306e1 100644 --- a/var/spack/repos/builtin/packages/r-gamlss-data/package.py +++ b/var/spack/repos/builtin/packages/r-gamlss-data/package.py @@ -15,6 +15,7 @@ class RGamlssData(RPackage): cran = "gamlss.data" + version("6.0-6", sha256="bae0db19d95500b3f49f855d4ebd3ddb071c5e2d9104b27e0a73865f4909ab22") version("6.0-2", sha256="dbb3b6f855540928ccdbda497f8d552144895e34565799e8b595e704096db71e") version("5.1-4", sha256="0d3777d8c3cd76cef273aa6bde40a91688719be401195ed9bfd1e85bd7d5eeb5") version("5.1-3", sha256="4941180e7eebe97678ba02ca24c2a797bcb69d92cd34600215a94110e2a70470") diff --git a/var/spack/repos/builtin/packages/r-gamlss-dist/package.py b/var/spack/repos/builtin/packages/r-gamlss-dist/package.py index 46a8f63ad000cd..dc7b3e2380d3a0 100644 --- a/var/spack/repos/builtin/packages/r-gamlss-dist/package.py +++ b/var/spack/repos/builtin/packages/r-gamlss-dist/package.py @@ -21,6 +21,7 @@ class RGamlssDist(RPackage): cran = "gamlss.dist" + version("6.1-1", sha256="d2db3a7658799c2ef212aa18cb75a3ecf4f73faf8c13dfdc3c14b21ae0129069") version("6.0-5", sha256="0f88afdfb148de79d3ece66bf4631ea0dc3ecf1188680802abffd6bc7139a20e") version("6.0-3", sha256="ec90ea83cd81b894c73f987f69814077697be33abf0708e0f3e2a39d02c912bf") version("6.0-1", sha256="b563b4de6bcedcfa4f8d29198a47004e38fd2de6e0509c788015d4e3feb18154") diff --git a/var/spack/repos/builtin/packages/r-gamlss/package.py b/var/spack/repos/builtin/packages/r-gamlss/package.py index b052d0e2dc7a78..4ab3444a07606e 100644 --- a/var/spack/repos/builtin/packages/r-gamlss/package.py +++ b/var/spack/repos/builtin/packages/r-gamlss/package.py @@ -20,6 +20,7 @@ class RGamlss(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("5.4-22", sha256="01e6908df92691147b884a8d58025473e18d7bf58d5f5a2d7e4f18b2a451fe2d") version("5.4-12", sha256="9f791039f7e5c3cf3f6a2da955994a8c41c43044a2d77d99b289e4f82118a6f0") version("5.4-3", sha256="6619d4fdc183ab492615d44961a126c827d18db20a0d59362e54de877f0a3076") version("5.3-4", sha256="72707187471fd35c5379ae8c9b7b0ca87e302557f09cb3979d1cdb2e2500b01a") diff --git a/var/spack/repos/builtin/packages/r-gargle/package.py b/var/spack/repos/builtin/packages/r-gargle/package.py index 9f396884521579..9e65e185270fa3 100644 --- a/var/spack/repos/builtin/packages/r-gargle/package.py +++ b/var/spack/repos/builtin/packages/r-gargle/package.py @@ -18,12 +18,14 @@ class RGargle(RPackage): license("MIT") + version("1.5.2", sha256="4a5beb046eb50a168b4baf5d1fcd8ac20d698e7fcb6b6ef46a436ded5b039001") version("1.4.0", sha256="8e0f1edf5595d4fd27bd92f98af1cc0c1349975803d9d6f3ff0c25ee2440498b") version("1.2.1", sha256="f367e2c82f403167ae84058303a4fb0402664558a2abf0b495474a7ef1a2f020") version("1.2.0", sha256="4d46ca2933f19429ca5a2cfe47b4130a75c7cd9931c7758ade55bac0c091d73b") depends_on("r@3.3:", type=("build", "run")) depends_on("r@3.5:", type=("build", "run"), when="@1.2.1:") + depends_on("r@3.6:", type=("build", "run"), when="@1.5.0:") depends_on("r-cli@3.0.0:", type=("build", "run")) depends_on("r-cli@3.0.1:", type=("build", "run"), when="@1.4.0:") depends_on("r-fs@1.3.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-gbm/package.py b/var/spack/repos/builtin/packages/r-gbm/package.py index 6204c12b686f29..2c6bed64576bc3 100644 --- a/var/spack/repos/builtin/packages/r-gbm/package.py +++ b/var/spack/repos/builtin/packages/r-gbm/package.py @@ -20,6 +20,7 @@ class RGbm(RPackage): license("GPL-2.0-or-later OR custom") + version("2.2.2", sha256="029ad2bac10c98979cf69206e94f2cc51a50667ec035f2474c44fb841950c4f4") version("2.1.8.1", sha256="8d2456124552658ee9500707c4e9992cf42cb88705008c32ea258efb4f2be80b") version("2.1.8", sha256="7d5de3b980b8f23275e86ac9bed48a497c9aa53c58e407dfd676309f38272ec1") version("2.1.5", sha256="06fbde10639dfa886554379b40a7402d1f1236a9152eca517e97738895a4466f") diff --git a/var/spack/repos/builtin/packages/r-gbrd/package.py b/var/spack/repos/builtin/packages/r-gbrd/package.py index e44000f09e38d6..39d79da7326703 100644 --- a/var/spack/repos/builtin/packages/r-gbrd/package.py +++ b/var/spack/repos/builtin/packages/r-gbrd/package.py @@ -14,4 +14,5 @@ class RGbrd(RPackage): cran = "gbRd" + version("0.4.12", sha256="48cd1d2a845f4b54c307473d2fa07a4ef6a644272f91c6a953844e66cd832338") version("0.4-11", sha256="0251f6dd6ca987a74acc4765838b858f1edb08b71dbad9e563669b58783ea91b") diff --git a/var/spack/repos/builtin/packages/r-gdalutilities/package.py b/var/spack/repos/builtin/packages/r-gdalutilities/package.py index 125dafba92f0de..671c68f93728d8 100644 --- a/var/spack/repos/builtin/packages/r-gdalutilities/package.py +++ b/var/spack/repos/builtin/packages/r-gdalutilities/package.py @@ -23,6 +23,7 @@ class RGdalutilities(RPackage): cran = "gdalUtilities" + version("1.2.5", sha256="2a72e990080ad626205c78edc6614959b564413b7fc23132008b7259723571a7") version("1.2.4", sha256="56d2582324977f2ae0a8bc42f740cd93b22c71eb8ee6a68b5b07083e409db8c7") version("1.2.1", sha256="8f5dcc0c077bf972da9d574c62c992935311afb76a97f03ace719bc6da214a9c") version("1.2.0", sha256="ead446f7f77f952b72b9ed80c5e415cb9d8d30cfb2439c8d1a8156fa55e2b65b") diff --git a/var/spack/repos/builtin/packages/r-gdata/package.py b/var/spack/repos/builtin/packages/r-gdata/package.py index 51ff21edf0d933..1c24477f549ead 100644 --- a/var/spack/repos/builtin/packages/r-gdata/package.py +++ b/var/spack/repos/builtin/packages/r-gdata/package.py @@ -35,6 +35,7 @@ class RGdata(RPackage): license("GPL-2.0-only") + version("3.0.0", sha256="a456b9921765a705fe8e51780dfbbc6ca005abc948b2f80effeccd468601b17f") version("2.18.0.1", sha256="5e2f3d5b9398d52a4c07a4d35f5f936450a44567c7db8d8f68b4cc6946e032d9") version("2.18.0", sha256="4b287f59f5bbf5fcbf18db16477852faac4a605b10c5284c46b93fa6e9918d7f") version("2.17.0", sha256="8097ec0e4868f6bf746f821cff7842f696e874bb3a84f1b2aa977ecd961c3e4e") diff --git a/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py b/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py index dde99a8f618eeb..22091935c7cd04 100644 --- a/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py +++ b/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py @@ -47,3 +47,4 @@ class RGenomeinfodbdata(RPackage): depends_on("r@3.5:", type=("build", "run"), when="@1.2.1:") depends_on("r@3.3:", type=("build", "run"), when="@0.99.0:1.1.0") + depends_on("r@3.5.0:", type=("build", "run"), when="@1.2.10:") diff --git a/var/spack/repos/builtin/packages/r-gensa/package.py b/var/spack/repos/builtin/packages/r-gensa/package.py index 7402c6808fc250..96402ef9a7036a 100644 --- a/var/spack/repos/builtin/packages/r-gensa/package.py +++ b/var/spack/repos/builtin/packages/r-gensa/package.py @@ -14,6 +14,7 @@ class RGensa(RPackage): cran = "GenSA" + version("1.1.14", sha256="66e455bb0e66d3c04af84d9dddc9b89f40b4cf9fe9ad1cf0714bcf30aa1b6837") version("1.1.8", sha256="375e87541eb6b098584afccab361dc28ff09d03cf1d062ff970208e294eca216") version("1.1.7", sha256="9d99d3d0a4b7770c3c3a6de44206811272d78ab94481713a8c369f7d6ae7b80f") diff --git a/var/spack/repos/builtin/packages/r-geometries/package.py b/var/spack/repos/builtin/packages/r-geometries/package.py index 68728af1d3adf2..7c262ea9eb8c39 100644 --- a/var/spack/repos/builtin/packages/r-geometries/package.py +++ b/var/spack/repos/builtin/packages/r-geometries/package.py @@ -18,6 +18,7 @@ class RGeometries(RPackage): license("MIT") + version("0.2.4", sha256="c6292acc336bb8520b8cb3672566f993fd077cb1f6f980ae39b9c9f56b971410") version("0.2.2", sha256="32d3063de0f8a751382788f85ebaee5f39d68e486253c159d553bb3d72d69141") version("0.2.0", sha256="8cf5094f3c2458fef5d755799c766afd27c66cd1c292574a6ab532d608360314") diff --git a/var/spack/repos/builtin/packages/r-geomorph/package.py b/var/spack/repos/builtin/packages/r-geomorph/package.py index 6cce7f23134a71..d4144663fb4bb0 100644 --- a/var/spack/repos/builtin/packages/r-geomorph/package.py +++ b/var/spack/repos/builtin/packages/r-geomorph/package.py @@ -18,6 +18,7 @@ class RGeomorph(RPackage): license("GPL-3.0-or-later") + version("4.0.8", sha256="14b4ad5a03fb58d9e7d02ddc4d0756553e9480ded3e68fd699249d58870f0c55") version("4.0.5", sha256="900d41f95a610b026763797f290ce94c10827a59b05030ed01c841c59264313b") version("4.0.4", sha256="dfded29070bc06bf1dc0d6fedaa16fea9f8eef76f0a7443a11f2835c328c6b0a") version("4.0.3", sha256="8fd77bedf2ee85f1e4aaac4b22253810d12dba0b79d78d67695d237b7184e263") @@ -31,9 +32,11 @@ class RGeomorph(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r@3.1.0:", type=("build", "run")) depends_on("r@3.5.0:", type=("build", "run"), when="@3.3.2:") + depends_on("r@4.4.0:", type=("build", "run"), when="@4.0.8:") depends_on("r-matrix", type=("build", "run")) depends_on("r-rrpp", type=("build", "run"), when="@3.0.7:") depends_on("r-rrpp@1.0.0:", type=("build", "run"), when="@4.0.1:") + depends_on("r-rrpp@2.0.1:", type=("build", "run"), when="@4.0.8:") depends_on("r-rgl", type=("build", "run")) depends_on("r-jpeg", type=("build", "run")) depends_on("r-ape", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-geor/package.py b/var/spack/repos/builtin/packages/r-geor/package.py index 60cc131b92cec1..9ac4d6fd8b8ad9 100644 --- a/var/spack/repos/builtin/packages/r-geor/package.py +++ b/var/spack/repos/builtin/packages/r-geor/package.py @@ -15,6 +15,7 @@ class RGeor(RPackage): cran = "geoR" + version("1.9-4", sha256="ae9d977cebe0f93b2593542f8d6d060467984dcf174e84ba632307c035d7ebbd") version("1.9-2", sha256="7ce3f5256a33a9de71b22a08caba634e77344889aac7d9eed02625a90254b9d9") version("1.8-1", sha256="990647804590b925a50f72897b24bbabd331cebef0be1696a60528b2f79d6fd3") version("1.7-5.2.1", sha256="3895e49c005a5745738d190ccaad43bb0aa49c74465d4d0b4dd88c5850ed63b9") diff --git a/var/spack/repos/builtin/packages/r-gert/package.py b/var/spack/repos/builtin/packages/r-gert/package.py index 3ac439d4207bab..1f603de052fbb8 100644 --- a/var/spack/repos/builtin/packages/r-gert/package.py +++ b/var/spack/repos/builtin/packages/r-gert/package.py @@ -19,6 +19,7 @@ class RGert(RPackage): license("MIT") + version("2.1.1", sha256="42037c041b284ae7ef4da68b784f2dfc3f72701534a8330265b1abc382eda964") version("1.9.2", sha256="42ca1b4bcafb1fdbbc7f54df0ee4476ecd19e9e7d563b53fe7064e0086ab665e") version("1.9.1", sha256="751d18760a08ae00b8de73dc3e564cf4e76b1f47c7179101320e1b70152e1fdd") version("1.6.0", sha256="8c440aeebabf1cb3b57124ec9280e0f46b2ab56f2bca07d72b5c7a7f4edc2964") diff --git a/var/spack/repos/builtin/packages/r-getopt/package.py b/var/spack/repos/builtin/packages/r-getopt/package.py index 79b26170f133a6..a2d60d3cedcf59 100644 --- a/var/spack/repos/builtin/packages/r-getopt/package.py +++ b/var/spack/repos/builtin/packages/r-getopt/package.py @@ -19,6 +19,7 @@ class RGetopt(RPackage): license("GPL-2.0-or-later") + version("1.20.4", sha256="87d36cbe6dba41dbc1d78d845210266cdd08c7440d977d738a6e45db14221e8b") version("1.20.3", sha256="531f5fdfdcd6b96a73df2b39928418de342160ac1b0043861e9ea844f9fbf57f") version("1.20.2", sha256="3d6c12d32d6cd4b2909be626e570e158b3ed960e4739510e3a251e7f172de38e") version("1.20.1", sha256="1522c35b13e8546979725a68b75e3bc9d156fb06569067472405f6b8591d8654") diff --git a/var/spack/repos/builtin/packages/r-ggally/package.py b/var/spack/repos/builtin/packages/r-ggally/package.py index dac799bacf2cfd..8a2907206754e0 100644 --- a/var/spack/repos/builtin/packages/r-ggally/package.py +++ b/var/spack/repos/builtin/packages/r-ggally/package.py @@ -18,6 +18,7 @@ class RGgally(RPackage): cran = "GGally" + version("2.2.1", sha256="8bb326665936a63f6eef92a2af1a11d1fae78dbd28d6980608d2b38ee1f586c6") version("2.1.2", sha256="30352f36bf061bc98bdd5fa373ea0f23d007040bd908c7c018c8e627e0fb28e5") version("2.1.0", sha256="7ffb86b8a4e79543cf7e6bb1e3684d738ecd8e0ba89e8ef38991898b18dd6c53") version("1.4.0", sha256="9a47cdf004c41f5e4024327b94227707f4dad3a0ac5556d8f1fba9bf0a6355fe") @@ -27,15 +28,20 @@ class RGgally(RPackage): depends_on("r-ggplot2@2.2.0:", type=("build", "run")) depends_on("r-ggplot2@3.3.0:", type=("build", "run"), when="@2.1.0:") depends_on("r-ggplot2@3.3.4:", type=("build", "run"), when="@2.1.2:") + depends_on("r-ggplot2@3.4.4:", type=("build", "run"), when="@2.2.0:") depends_on("r-dplyr@1.0.0:", type=("build", "run"), when="@2.1.0:") - depends_on("r-forcats", type=("build", "run"), when="@2.1.0:") + depends_on("r-ggstats", type=("build", "run"), when="@2.2.0:") depends_on("r-gtable@0.2.0:", type=("build", "run")) depends_on("r-lifecycle", type=("build", "run"), when="@2.1.0:") depends_on("r-plyr@1.8.3:", type=("build", "run")) depends_on("r-progress", type=("build", "run")) depends_on("r-rcolorbrewer", type=("build", "run")) - depends_on("r-reshape@0.8.5:", type=("build", "run")) depends_on("r-rlang", type=("build", "run"), when="@1.4.0:") depends_on("r-scales@1.1.0:", type=("build", "run"), when="@2.1.0:") depends_on("r-tidyr", type=("build", "run"), when="@2.1.0:") + depends_on("r-tidyr@1.3.0:", type=("build", "run"), when="@2.2.0:") + depends_on("r-magrittr", type=("build", "run"), when="@2.2.0:") depends_on("openssl", when="@1.4.0:") + + depends_on("r-forcats", type=("build", "run"), when="@2.1.0:2.1") + depends_on("r-reshape@0.8.5:", type=("build", "run"), when="@:2.1") diff --git a/var/spack/repos/builtin/packages/r-ggbeeswarm/package.py b/var/spack/repos/builtin/packages/r-ggbeeswarm/package.py index 5915714aff0413..d8738700faaf25 100644 --- a/var/spack/repos/builtin/packages/r-ggbeeswarm/package.py +++ b/var/spack/repos/builtin/packages/r-ggbeeswarm/package.py @@ -17,12 +17,14 @@ class RGgbeeswarm(RPackage): license("GPL-3.0-or-later") + version("0.7.2", sha256="fd7ca265bb892dde514d5f8d6a853fb8b32d7a673b05e9c8b50544a523299ce5") version("0.7.1", sha256="f41550335149bc2122fed0dd280d980cecd02ace79e042d5e03c1f102200ac92") version("0.6.0", sha256="bbac8552f67ff1945180fbcda83f7f1c47908f27ba4e84921a39c45d6e123333") depends_on("r@3.0.0:", type=("build", "run")) depends_on("r@3.5.0:", type=("build", "run"), when="@0.7.1:") depends_on("r-beeswarm", type=("build", "run")) + depends_on("r-cli", type=("build", "run"), when="@0.7.2:") depends_on("r-lifecycle", type=("build", "run"), when="@0.7.1:") depends_on("r-ggplot2@2.0:", type=("build", "run")) depends_on("r-ggplot2@3.3.0:", type=("build", "run"), when="@0.7.1:") diff --git a/var/spack/repos/builtin/packages/r-ggdendro/package.py b/var/spack/repos/builtin/packages/r-ggdendro/package.py index 657d9a4d49f566..21bfda18c262aa 100644 --- a/var/spack/repos/builtin/packages/r-ggdendro/package.py +++ b/var/spack/repos/builtin/packages/r-ggdendro/package.py @@ -21,9 +21,11 @@ class RGgdendro(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("0.2.0", sha256="1940c34ddb30083a4c3bc3be98b6b466dcc78e03ac22a32088744db8bff7aa69") version("0.1.23", sha256="3a33e988c4fe12eec540876ad8ba09bda998773b2d2a90e043ebae4a69fa8eb8") version("0.1.22", sha256="f0a65f3498c1abc3076df0fb56364b63bdf5d212d8931f85bcc6997510916b6a") version("0.1-20", sha256="125cae904fa5d426cccaf32ebe9c6297e9ef0c6fd3f19f61513834d03a0cf8ff") + depends_on("r@3.5:", type=("build", "run"), when="@0.2.0:") depends_on("r-mass", type=("build", "run")) depends_on("r-ggplot2@0.9.2:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ggforce/package.py b/var/spack/repos/builtin/packages/r-ggforce/package.py index 0c73a818132577..cf8063a2423eb8 100644 --- a/var/spack/repos/builtin/packages/r-ggforce/package.py +++ b/var/spack/repos/builtin/packages/r-ggforce/package.py @@ -19,6 +19,7 @@ class RGgforce(RPackage): license("MIT") + version("0.4.2", sha256="c145b0e6ed6847d409ed2fe103b81234855bc0661cde2bfb4410fb23680e51a8") version("0.4.1", sha256="b44219fb63c45fa003c64bca323452f16dcace635204bc0127d3244c0f451873") version("0.3.3", sha256="2a283bb409da6b96929863a926b153bcc59b2c6f00551805db1d1d43e5929f2f") version("0.3.2", sha256="4cce8acb60ce06af44c1c76bbacd7de129eed9b51ed6a85e03a9bf55b0eff4d2") diff --git a/var/spack/repos/builtin/packages/r-ggfun/package.py b/var/spack/repos/builtin/packages/r-ggfun/package.py index 9c73c7fa48e7b7..c1aebd8afb1784 100644 --- a/var/spack/repos/builtin/packages/r-ggfun/package.py +++ b/var/spack/repos/builtin/packages/r-ggfun/package.py @@ -16,6 +16,7 @@ class RGgfun(RPackage): license("Artistic-2.0") + version("0.1.5", sha256="fe6c01fd68c17497f23f76dfd4e5a6edd79a6e86850b8c5054748f31527b16d3") version("0.0.9", sha256="5c740e9d1e73b77658f41ed65e21492f4e71b12c7c9ff4b9e52ebf5f8f197612") version("0.0.8", sha256="9471a12fc7af203a419767b845e6b6c1e63c080370cb8f2dac80187194122273") version("0.0.7", sha256="a83b5fb95f61e366f96d6d8e6b04dafff8e885e7c80c913614876b50ebb8e174") @@ -23,5 +24,8 @@ class RGgfun(RPackage): version("0.0.5", sha256="b1e340a8932d2cffbbbf6070ce96c9356599e9955a2b6534fcb17e599c575783") version("0.0.4", sha256="5926365f9a90baf47320baf48c40f515ef570f9c767484adea5f04219964d21e") + depends_on("r@4.1.0:", type=("build", "run"), when="@0.1.2:") + depends_on("r-cli", type=("build", "run"), when="@0.1.3:") + depends_on("r-dplyr", type=("build", "run"), when="@0.1.5:") depends_on("r-ggplot2", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ggmap/package.py b/var/spack/repos/builtin/packages/r-ggmap/package.py index 9a007a055fb28a..c0b6fe8a04fc48 100644 --- a/var/spack/repos/builtin/packages/r-ggmap/package.py +++ b/var/spack/repos/builtin/packages/r-ggmap/package.py @@ -18,6 +18,7 @@ class RGgmap(RPackage): license("GPL-2.0-only") + version("4.0.0", sha256="0de639357c066e3b632eb960fd811276558ce29aefa2f77ef711ff5841c734f5") version("3.0.2", sha256="ba5fe3975fd4ca1a5fbda4910c9705ac2edacec75c658177edaf87f1c55cdcae") version("3.0.1", sha256="fc824b547f1fd0b52b6fbd18a82fe6f29f97b1f592e2c61baf4686ddfd47e35d") version("3.0.0", sha256="96c24ffdc0710d0633ac4721d599d2c06f43a29c59d1e85c94ff0af30dfdb58d") @@ -26,7 +27,6 @@ class RGgmap(RPackage): depends_on("r@3.1.0:", type=("build", "run")) depends_on("r-ggplot2@2.2.0:", type=("build", "run")) - depends_on("r-rgooglemaps", type=("build", "run")) depends_on("r-png", type=("build", "run")) depends_on("r-plyr", type=("build", "run")) depends_on("r-jpeg", type=("build", "run")) @@ -44,6 +44,7 @@ class RGgmap(RPackage): depends_on("r-cli", type=("build", "run"), when="@3.0.1:") depends_on("r-rlang", type=("build", "run"), when="@3.0.1:") + depends_on("r-rgooglemaps", type=("build", "run"), when="@:3.0.2") depends_on("r-proto", type=("build", "run"), when="@:2.6.2") depends_on("r-reshape2", type=("build", "run"), when="@:2.6.2") depends_on("r-mapproj", type=("build", "run"), when="@:2.6.2") diff --git a/var/spack/repos/builtin/packages/r-ggnewscale/package.py b/var/spack/repos/builtin/packages/r-ggnewscale/package.py index 5c0d929a7f8163..8e4518e837e3e9 100644 --- a/var/spack/repos/builtin/packages/r-ggnewscale/package.py +++ b/var/spack/repos/builtin/packages/r-ggnewscale/package.py @@ -15,6 +15,8 @@ class RGgnewscale(RPackage): license("GPL-3.0-only") + version("0.5.0", sha256="b7f0dcb38d0e8cb4179d92f38b20489905ceb2a9602b68e2c72997d795c4df2d") version("0.4.8", sha256="c7fefa6941ecbc789507e59be13fa96327fe2549681a938c43beb06ca22a9700") depends_on("r-ggplot2@3.0.0:", type=("build", "run")) + depends_on("r-ggplot2@3.5.0:", type=("build", "run"), when="@0.5.0:") diff --git a/var/spack/repos/builtin/packages/r-ggplot2/package.py b/var/spack/repos/builtin/packages/r-ggplot2/package.py index a7f919b38cc0f8..61b80a6a7fcfec 100644 --- a/var/spack/repos/builtin/packages/r-ggplot2/package.py +++ b/var/spack/repos/builtin/packages/r-ggplot2/package.py @@ -35,12 +35,12 @@ class RGgplot2(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.2:", type=("build", "run"), when="@3.2.0:") depends_on("r@3.3:", type=("build", "run"), when="@3.3.4:") + depends_on("r@3.5:", type=("build", "run"), when="@3.5.0:") depends_on("r-cli", type=("build", "run"), when="@3.4.0:") depends_on("r-glue", type=("build", "run"), when="@3.3.3:") depends_on("r-gtable@0.1.1:", type=("build", "run")) depends_on("r-isoband", type=("build", "run"), when="@3.3.3:") - depends_on("r-lifecycle@1.0.1:", type=("build", "run"), when="@3.4.0:") - depends_on("r-lifecycle@unknown:", type=("build", "run"), when="@3.4.2:") + depends_on("r-lifecycle@1.0.1.1:", type=("build", "run"), when="@3.4.0:") depends_on("r-mass", type=("build", "run")) depends_on("r-mgcv", type=("build", "run"), when="@3.2.0:") depends_on("r-rlang@0.3.0:", type=("build", "run"), when="@3.0.0:") @@ -52,6 +52,7 @@ class RGgplot2(RPackage): depends_on("r-scales@1.3.0:", type=("build", "run"), when="@3.5.0:") depends_on("r-tibble", type=("build", "run")) depends_on("r-vctrs@0.5.0:", type=("build", "run"), when="@3.4.0:") + depends_on("r-vctrs@0.6.0:", type=("build", "run"), when="@3.5.1:") depends_on("r-withr@2.0.0:", type=("build", "run"), when="@3.0.0:") depends_on("r-withr@2.5.0:", type=("build", "run"), when="@3.4.0:") diff --git a/var/spack/repos/builtin/packages/r-ggplotify/package.py b/var/spack/repos/builtin/packages/r-ggplotify/package.py index b87ca84a9d7d12..561d5ea54761cd 100644 --- a/var/spack/repos/builtin/packages/r-ggplotify/package.py +++ b/var/spack/repos/builtin/packages/r-ggplotify/package.py @@ -19,6 +19,7 @@ class RGgplotify(RPackage): license("Artistic-2.0") + version("0.1.2", sha256="01bae5759e14e211bddb04413e094ba31399b513989894ea08602d202f990e87") version("0.1.0", sha256="178f73d6d3dc391c3efb1a62c95fe38587044f9e3288dffb915d3687941bb38a") version("0.0.5", sha256="035ea6a70023c4819c8a486d0fd94c2765aa4d6df318747e104eeb9829b9d65d") version("0.0.3", sha256="7e7953a2933aa7127a0bac54375e3e0219a0744cfc3249c3d7b76065f7a51892") diff --git a/var/spack/repos/builtin/packages/r-ggraph/package.py b/var/spack/repos/builtin/packages/r-ggraph/package.py index cc887295f08b27..ad065c45374b10 100644 --- a/var/spack/repos/builtin/packages/r-ggraph/package.py +++ b/var/spack/repos/builtin/packages/r-ggraph/package.py @@ -19,6 +19,7 @@ class RGgraph(RPackage): license("MIT") + version("2.2.1", sha256="4405f8a907ad8fee68b5d4991f0bc8f35d6c0facbb7467c2ce425d3ec8b23af1") version("2.1.0", sha256="686fdb22dc4f613273fb755ec42399a208b4d10348eecd1a217afd4612245c1f") version("2.0.6", sha256="7b0ac90d834a3ce5641b4bca159d59d09607ddaab592908361b75cffb648d40a") version("2.0.5", sha256="e36ad49dba92ee8652e18b1fb197be0ceb9f0a2f8faee2194453a62578449654") @@ -27,20 +28,25 @@ class RGgraph(RPackage): depends_on("r@2.10:", type=("build", "run")) depends_on("r-ggplot2@3.0.0:", type=("build", "run")) - depends_on("r-rcpp@0.12.2:", type=("build", "run")) + depends_on("r-ggplot2@3.5.0:", type=("build", "run"), when="@2.2.0:") depends_on("r-dplyr", type=("build", "run")) depends_on("r-ggforce@0.3.1:", type=("build", "run")) depends_on("r-igraph@1.0.0:", type=("build", "run")) depends_on("r-scales", type=("build", "run")) depends_on("r-mass", type=("build", "run")) - depends_on("r-digest", type=("build", "run")) - depends_on("r-gtable", type=("build", "run")) depends_on("r-ggrepel", type=("build", "run")) depends_on("r-viridis", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) depends_on("r-tidygraph", type=("build", "run")) depends_on("r-graphlayouts@0.5.0:", type=("build", "run")) + depends_on("r-graphlayouts@1.1.0:", type=("build", "run"), when="@2.2.0:") depends_on("r-withr", type=("build", "run"), when="@2.0.4:") depends_on("r-lifecycle", type=("build", "run"), when="@2.1.0:") + depends_on("r-memoise", type=("build", "run"), when="@2.2.0:") depends_on("r-vctrs", type=("build", "run"), when="@2.1.0:") depends_on("r-cli", type=("build", "run"), when="@2.1.0:") + depends_on("r-cpp11", type=("build", "run"), when="@2.2.0:") + + depends_on("r-rcpp@0.12.2:", type=("build", "run"), when="@:2.1.0") + depends_on("r-digest", type=("build", "run"), when="@:2.1.0") + depends_on("r-gtable", type=("build", "run"), when="@:2.1.0") diff --git a/var/spack/repos/builtin/packages/r-ggrastr/package.py b/var/spack/repos/builtin/packages/r-ggrastr/package.py index 67f07d652dc2fc..c25cf879ec2d05 100644 --- a/var/spack/repos/builtin/packages/r-ggrastr/package.py +++ b/var/spack/repos/builtin/packages/r-ggrastr/package.py @@ -18,6 +18,7 @@ class RGgrastr(RPackage): license("MIT") + version("1.0.2", sha256="cb27406dca99cea6440adf6edb7eb53141b60322452f5a5d4409e36516ad20d1") version("1.0.1", sha256="82d6e90fa38dec85e829f71018532ed5b709a50a585455fc07cb3bae282f5d1f") depends_on("r@3.2.2:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ggrepel/package.py b/var/spack/repos/builtin/packages/r-ggrepel/package.py index ecb836d2bb666f..790f13ec54257d 100644 --- a/var/spack/repos/builtin/packages/r-ggrepel/package.py +++ b/var/spack/repos/builtin/packages/r-ggrepel/package.py @@ -17,6 +17,7 @@ class RGgrepel(RPackage): license("GPL-3.0-only OR custom") + version("0.9.5", sha256="d1e600e56c2ad345961ed23f30f04b81c631ff94bd6762a260c62e0206cf8caa") version("0.9.3", sha256="b9eba0e2edee84db0276b49e4834b65f5369edc4bc56f4cacc13e0d1c39a005c") version("0.9.2", sha256="0a3088c48177528e2a65defebbc4f09a744ebb44408588f688811f8d0d827488") version("0.9.1", sha256="29fb916d4799ba6503a5dd019717ffdf154d2aaae9ff1736f03e2be24af6bdfc") diff --git a/var/spack/repos/builtin/packages/r-ggridges/package.py b/var/spack/repos/builtin/packages/r-ggridges/package.py index b91e7d0b8d3c0e..48fae13e222df0 100644 --- a/var/spack/repos/builtin/packages/r-ggridges/package.py +++ b/var/spack/repos/builtin/packages/r-ggridges/package.py @@ -17,6 +17,7 @@ class RGgridges(RPackage): license("GPL-2.0-only OR custom") + version("0.5.6", sha256="efccaa309a150d11c6b402b912e618ea041f25cca3101f32cd821a6f41684e35") version("0.5.4", sha256="2bf71c2034804cec637e6748dc51d8cadad01d3ea4d14ace754327f082e8d851") version("0.5.3", sha256="f5eafab17f2d4a8a2a83821ad3e96ae7c26b62bbce9de414484c657383c7b42e") version("0.5.1", sha256="01f87cdcdf2052ed9c078d9352465cdeda920a41e2ca55bc154c1574fc651c36") @@ -27,6 +28,7 @@ class RGgridges(RPackage): depends_on("r@3.2:", type=("build", "run")) depends_on("r-ggplot2@2.2.0:", type=("build", "run")) depends_on("r-ggplot2@3.0.0:", type=("build", "run"), when="@0.5.3:") + depends_on("r-ggplot2@3.4.0:", type=("build", "run"), when="@0.5.5:") depends_on("r-scales@0.4.1:", type=("build", "run")) depends_on("r-withr@2.1.1:", type=("build", "run"), when="@0.5.0:") diff --git a/var/spack/repos/builtin/packages/r-ggsci/package.py b/var/spack/repos/builtin/packages/r-ggsci/package.py index 5c5f4a75fb76d5..fd0574863f1f4b 100644 --- a/var/spack/repos/builtin/packages/r-ggsci/package.py +++ b/var/spack/repos/builtin/packages/r-ggsci/package.py @@ -17,6 +17,7 @@ class RGgsci(RPackage): license("GPL-3.0-or-later") + version("3.2.0", sha256="41d8ed4c01c3740028bdf2ba9c5550f1142061e4a40c93b1d2160719c59c3c4a") version("3.0.0", sha256="8901316516d78f82a2a8685d93ba479424bcfd8cb5e28a28adbd50e68964e129") version("2.9", sha256="4af14e6f3657134c115d5ac5e65a2ed74596f9a8437c03255447cd959fe9e33c") version("2.8", sha256="b4ce7adce7ef23edf777866086f98e29b2b45b58fed085bbd1ffe6ab52d74ae8") diff --git a/var/spack/repos/builtin/packages/r-ggstats/package.py b/var/spack/repos/builtin/packages/r-ggstats/package.py new file mode 100644 index 00000000000000..b1b3678954085a --- /dev/null +++ b/var/spack/repos/builtin/packages/r-ggstats/package.py @@ -0,0 +1,33 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RGgstats(RPackage): + """Provides new statistics, new geometries and new positions for + 'ggplot2' and a suite of functions to facilitate the creation of + statistical plots.""" + + homepage = "https://larmarange.github.io/ggstats/" + cran = "ggstats" + + license("GPL-3.0-or-later", checked_by="wdconinc") + + version("0.6.0", sha256="f80aaa229f542cb18174b9ab82b0026c6bd3331f22bf2662712ab6af480b6d80") + + depends_on("r-broom-helpers@1.14.0:", type=("build", "run")) + depends_on("r-cli", type=("build", "run")) + depends_on("r-dplyr", type=("build", "run")) + depends_on("r-forcats", type=("build", "run")) + depends_on("r-ggplot2@3.4.0:", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run")) + depends_on("r-magrittr", type=("build", "run")) + depends_on("r-patchwork", type=("build", "run")) + depends_on("r-purrr", type=("build", "run")) + depends_on("r-rlang", type=("build", "run")) + depends_on("r-scales", type=("build", "run")) + depends_on("r-stringr", type=("build", "run")) + depends_on("r-tidyr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ggthemes/package.py b/var/spack/repos/builtin/packages/r-ggthemes/package.py index a2689071ebba13..d325a1add6f3ba 100644 --- a/var/spack/repos/builtin/packages/r-ggthemes/package.py +++ b/var/spack/repos/builtin/packages/r-ggthemes/package.py @@ -19,11 +19,13 @@ class RGgthemes(RPackage): license("GPL-2.0-only") + version("5.1.0", sha256="074819acfe8bb2233426a0fef3bb448c5ce817bb14d517252fa05932e28bbd0e") version("4.2.4", sha256="7b35168cf5b68f6f52dd533a1b345ec87e09d1a85ca68e8dc5377cdf95718567") version("4.2.0", sha256="5bb3fe94819fe2cce7865f07a6e6ea5c59d3996f78d1c0836ad406f69efb3367") depends_on("r@3.3.0:", type=("build", "run")) depends_on("r-ggplot2@3.0.0:", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@5.0.0:") depends_on("r-purrr", type=("build", "run")) depends_on("r-scales", type=("build", "run")) depends_on("r-stringr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ggvis/package.py b/var/spack/repos/builtin/packages/r-ggvis/package.py index ac8864a19c3d79..75ead306ea1f9d 100644 --- a/var/spack/repos/builtin/packages/r-ggvis/package.py +++ b/var/spack/repos/builtin/packages/r-ggvis/package.py @@ -17,6 +17,7 @@ class RGgvis(RPackage): license("GPL-2.0-only OR custom") + version("0.4.9", sha256="69b9d184789c90aedd2f336d43033a8b710a16b052580bf9e7ce229ac25ba12f") version("0.4.8", sha256="3d5480a0b97a57c26b595785f826b13d7695dab1f1dd8fcf5d7964fa8546a26a") version("0.4.7", sha256="9e6b067e11d497c796d42156570e2481afb554c5db265f42afbb74d2ae0865e3") version("0.4.4", sha256="1332ea122b768688c8a407a483be80febc4576de0ec8929077738421b27cafaf") diff --git a/var/spack/repos/builtin/packages/r-gh/package.py b/var/spack/repos/builtin/packages/r-gh/package.py index e20962e5930ff1..7be200eaeec618 100644 --- a/var/spack/repos/builtin/packages/r-gh/package.py +++ b/var/spack/repos/builtin/packages/r-gh/package.py @@ -15,6 +15,7 @@ class RGh(RPackage): license("MIT") + version("1.4.1", sha256="76bd3f2a31eeaf76a633362899a20b0f7e8fb6159d4777baf3da2a47854292af") version("1.4.0", sha256="68c69fcd18429b378e639a09652465a4e92b7b5b5704804d0c5b1ca2b9b58b71") version("1.3.1", sha256="fbaea2abdeceb03d28839fd0e58c2eea01092f9ef92dcc044718ef0d298612ef") version("1.3.0", sha256="a44039054e8ca56496f2d9c7a10cdadf4a7383bc91086e768ba7e7f1fbcaed1c") @@ -23,13 +24,16 @@ class RGh(RPackage): version("1.0.1", sha256="f3c02b16637ae390c3599265852d94b3de3ef585818b260d00e7812595b391d2") depends_on("r@3.4:", type=("build", "run"), when="@1.3.1:") + depends_on("r@3.6:", type=("build", "run"), when="@1.4.1:") depends_on("r-cli", type=("build", "run"), when="@1.1.0:") depends_on("r-cli@2.0.1:", type=("build", "run"), when="@1.2.0:") depends_on("r-cli@3.0.1:", type=("build", "run"), when="@1.3.1:") depends_on("r-gitcreds", type=("build", "run"), when="@1.2.0:") + depends_on("r-glue", type=("build", "run"), when="@1.4.1:") depends_on("r-httr2", type=("build", "run"), when="@1.4.0:") depends_on("r-ini", type=("build", "run")) depends_on("r-jsonlite", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@1.4.1:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.4.0:") depends_on("r-httr@1.2:", type=("build", "run"), when="@1.1.0:1.3.1") diff --git a/var/spack/repos/builtin/packages/r-git2r/package.py b/var/spack/repos/builtin/packages/r-git2r/package.py index a6718ceec1ce27..3586585e516b06 100644 --- a/var/spack/repos/builtin/packages/r-git2r/package.py +++ b/var/spack/repos/builtin/packages/r-git2r/package.py @@ -17,6 +17,7 @@ class RGit2r(RPackage): license("GPL-2.0-only") + version("0.33.0", sha256="1855b68d0e22566f1c255fdcb8e13282a2bebf55cbc804a8591dc8047f0e1895") version("0.32.0", sha256="1b5d254c0c684a56751d26d482823d0006964eb1f55c558f365d037f5e984671") version("0.31.0", sha256="f1db9278fa4604600a64beaedcf86dda595d7c8a10cdb1f7300a6635e73cd66d") version("0.30.1", sha256="85d913ddc7659e32c1b98ebc247fa1cc1b7717a5bd413fa78ea84696986ca840") @@ -30,6 +31,7 @@ class RGit2r(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@0.31.0:") + depends_on("r@4.0:", type=("build", "run"), when="@0.33.0:") depends_on("libgit2") depends_on("zlib-api") depends_on("openssl") diff --git a/var/spack/repos/builtin/packages/r-glmnet/package.py b/var/spack/repos/builtin/packages/r-glmnet/package.py index 1f613f021ac739..31e9bf049919c1 100644 --- a/var/spack/repos/builtin/packages/r-glmnet/package.py +++ b/var/spack/repos/builtin/packages/r-glmnet/package.py @@ -20,6 +20,7 @@ class RGlmnet(RPackage): license("GPL-2.0-only") + version("4.1-8", sha256="1ddbe5ce07076d1bdf58b0202ebd0ceac8eeb4796c5175681adb9e58c30ddcfe") version("4.1-7", sha256="b3a0b606d99df0256eb68e6ebd271e071b246900a4379641af2e7d548c70eaa8") version("4.1-4", sha256="f6b0f70a0b3d81ff91c2b94f795a2a32e90dd458270f1a29e49e085dd65000f9") version("4.1-3", sha256="64bc35aa40b6e580cfb8a21e649eb103e996e8747a10c476b8bb9545c846325a") diff --git a/var/spack/repos/builtin/packages/r-globals/package.py b/var/spack/repos/builtin/packages/r-globals/package.py index 954094aeca6e63..c9c1cca547b182 100644 --- a/var/spack/repos/builtin/packages/r-globals/package.py +++ b/var/spack/repos/builtin/packages/r-globals/package.py @@ -19,6 +19,7 @@ class RGlobals(RPackage): license("LGPL-2.1-or-later") + version("0.16.3", sha256="d73ced94248d8b81d29d774bdfc41496274d7da683a5d84440aed6a501a18c5b") version("0.16.2", sha256="682c26a95fa6c4e76a3a875be1a3192fc5b88e036c80dfa3b256add0336d770a") version("0.16.1", sha256="f7f63a575a3dd518c6afeabb4116bd26692a2a250df113059bc1a5b4711a1e95") version("0.15.0", sha256="f83689a420590b0d62b049c40a944c1c8c7202b3f1cc12102712c63104e99496") diff --git a/var/spack/repos/builtin/packages/r-glue/package.py b/var/spack/repos/builtin/packages/r-glue/package.py index a52dfa812fa89f..e31323deda5e22 100644 --- a/var/spack/repos/builtin/packages/r-glue/package.py +++ b/var/spack/repos/builtin/packages/r-glue/package.py @@ -19,6 +19,7 @@ class RGlue(RPackage): license("MIT") + version("1.7.0", sha256="1af51b51f52c1aeb3bfe9349f55896dd78b5542ffdd5654e432e4d646e4a86dc") version("1.6.2", sha256="9da518f12be584c90e75fe8e07f711ee3f6fc0d03d817f72c25dc0f66499fdbf") version("1.6.1", sha256="318c2f9544f1204216009f512793c44d6bbe178ff2012f56fa5ffb5e1da978db") version("1.6.0", sha256="77bef37ef2c47aad6188ea772880591c5763cce4b1c256e10e68e7c3ec6b4338") @@ -32,3 +33,4 @@ class RGlue(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.2:", type=("build", "run"), when="@1.4.2:") depends_on("r@3.4:", type=("build", "run"), when="@1.6.0:") + depends_on("r@3.6:", when="@1.7.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-gmodels/package.py b/var/spack/repos/builtin/packages/r-gmodels/package.py index f43e4c2660faf2..7f1cf3a5fa3244 100644 --- a/var/spack/repos/builtin/packages/r-gmodels/package.py +++ b/var/spack/repos/builtin/packages/r-gmodels/package.py @@ -13,6 +13,7 @@ class RGmodels(RPackage): license("GPL-2.0-only") + version("2.19.1", sha256="bb57b83274dcc6c62eeb0d0b041d81ed19daca927bcd3872c4667ccfe3e9888d") version("2.18.1.1", sha256="da7d48021b7cd2fd8a7cd8d0bb9658b12342a32698a13877b25ca94aa03f1e95") version("2.18.1", sha256="626140a34eb8c53dd0a06511a76c71bc61c48777fa76fcc5e6934c9c276a1369") version("2.16.2", sha256="ab018894bdb376c5bd6bc4fbc4fe6e86590f4106795a586ef196fbb6699ec47d") diff --git a/var/spack/repos/builtin/packages/r-gmp/package.py b/var/spack/repos/builtin/packages/r-gmp/package.py index 85d4797c3a266d..615fba4dd2f4ca 100644 --- a/var/spack/repos/builtin/packages/r-gmp/package.py +++ b/var/spack/repos/builtin/packages/r-gmp/package.py @@ -17,6 +17,7 @@ class RGmp(RPackage): license("GPL-2.0-or-later") + version("0.7-4", sha256="a7d6b40f77d2619c11db5170b8f47336f7c5fa1db7eed0ac9d8a432e41053919") version("0.7-1", sha256="a6873dc65218905cb7615cb8e2522258f3740e29c0632473d58a1cb409835db6") version("0.6-7", sha256="6333fe691f267aa29f8078f7f738dda50c496f660357276fd33e28d607363f85") version("0.6-6", sha256="87fa95a8084855d2137b3863b6b8f3c277280dbe3a6a230e359cf32c3bed2793") diff --git a/var/spack/repos/builtin/packages/r-googleauthr/package.py b/var/spack/repos/builtin/packages/r-googleauthr/package.py index 81e0152f89bdf7..6e7953fb88d944 100644 --- a/var/spack/repos/builtin/packages/r-googleauthr/package.py +++ b/var/spack/repos/builtin/packages/r-googleauthr/package.py @@ -15,6 +15,7 @@ class RGoogleauthr(RPackage): cran = "googleAuthR" + version("2.0.2", sha256="fd55c85b5f78aa52b6e5cabd4143162cb497ab7288c8db3676acf58a0f393996") version("2.0.1", sha256="9b19a63bc250151674f20b27389baa95c10cc62dc7c3c0ff12a8d684bdb8a14b") version("2.0.0", sha256="ba504baf3bde2e1b3e988bee7602df5765cc6ca542cf0ab76a782c4e60966feb") diff --git a/var/spack/repos/builtin/packages/r-googledrive/package.py b/var/spack/repos/builtin/packages/r-googledrive/package.py index 9f39117c087821..c9e45bb0cf687a 100644 --- a/var/spack/repos/builtin/packages/r-googledrive/package.py +++ b/var/spack/repos/builtin/packages/r-googledrive/package.py @@ -15,20 +15,24 @@ class RGoogledrive(RPackage): license("MIT") + version("2.1.1", sha256="0b8b4f74ba3630b0347249a32a80bc5fc2e8b63ad2952702f30162bd2d38fb82") version("2.1.0", sha256="0d70353bbf1bebc96d3987ebd9cbb2b0902e6ddc4cdccece3d07c2bb688c4b74") version("2.0.0", sha256="605c469a6a086ef4b049909c2e20a35411c165ce7ce4f62d68fd39ffed8c5a26") depends_on("r@3.3:", type=("build", "run")) depends_on("r@3.5:", type=("build", "run"), when="@2.1.0:") + depends_on("r@3.6:", type=("build", "run"), when="@2.1.1:") depends_on("r-cli@3.0.0:", type=("build", "run")) depends_on("r-gargle@1.2.0:", type=("build", "run")) depends_on("r-gargle@1.3.0:", type=("build", "run"), when="@2.1.0:") + depends_on("r-gargle@1.5.0:", type=("build", "run"), when="@2.1.1:") depends_on("r-glue@1.4.2:", type=("build", "run")) depends_on("r-httr", type=("build", "run")) depends_on("r-jsonlite", type=("build", "run")) depends_on("r-lifecycle", type=("build", "run")) depends_on("r-magrittr", type=("build", "run")) depends_on("r-pillar", type=("build", "run")) + depends_on("r-pillar@1.9.0:", type=("build", "run"), when="@2.1.1:") depends_on("r-purrr@0.2.3:", type=("build", "run")) depends_on("r-purrr@1.0.1:", type=("build", "run"), when="@2.1.0:") depends_on("r-rlang@0.4.9:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-googlesheets4/package.py b/var/spack/repos/builtin/packages/r-googlesheets4/package.py index a959eb236b1151..0a1afe0dc2984a 100644 --- a/var/spack/repos/builtin/packages/r-googlesheets4/package.py +++ b/var/spack/repos/builtin/packages/r-googlesheets4/package.py @@ -21,6 +21,7 @@ class RGooglesheets4(RPackage): license("MIT") + version("1.1.1", sha256="c5cc63348c54b9de8492e7b12b249245746ea1ff33e306f12431f4fc9386fccf") version("1.1.0", sha256="50e15543bef5b8d8cda36f6ea8a1d59b256d889cd3cedddc91f00ae30c8c8ec9") version("1.0.1", sha256="284ecbce98944093cb065c1b0b32074eae7b45fd74b87d7815c7ca6deca76591") version("1.0.0", sha256="0a107d76aac99d6db48d97ce55810c1412b2197f457b8476f676169a36c7cc7a") @@ -28,11 +29,13 @@ class RGooglesheets4(RPackage): depends_on("r@3.3:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@1.0.1:") depends_on("r@3.5:", type=("build", "run"), when="@1.1.0:") + depends_on("r@3.6:", type=("build", "run"), when="@1.1.1:") depends_on("r-cellranger", type=("build", "run")) depends_on("r-cli@3.0.0:", type=("build", "run")) depends_on("r-curl", type=("build", "run")) depends_on("r-gargle@1.2.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-gargle@1.3.0:", type=("build", "run"), when="@1.1.0:") + depends_on("r-gargle@1.5.0:", type=("build", "run"), when="@1.1.1:") depends_on("r-glue@1.3.0:", type=("build", "run")) depends_on("r-googledrive@2.0.0:", type=("build", "run")) depends_on("r-googledrive@2.1.0:", type=("build", "run"), when="@1.1.0:") diff --git a/var/spack/repos/builtin/packages/r-googlevis/package.py b/var/spack/repos/builtin/packages/r-googlevis/package.py index 8200e7c0d62bdc..93a6e5b93d23dd 100644 --- a/var/spack/repos/builtin/packages/r-googlevis/package.py +++ b/var/spack/repos/builtin/packages/r-googlevis/package.py @@ -19,6 +19,7 @@ class RGooglevis(RPackage): license("CC-BY-SA-4.0") + version("0.7.3", sha256="5647ff552de5216b56ae758f29e411d04b754f482adbd3f41277d741b7708c6b") version("0.7.1", sha256="335931059ea8645f824b01a06d30fafb4e38b47cd610a5eee20628801767f218") version("0.7.0", sha256="5f1636024e678f9973e3ce605b46f46ea9cdffd58b98e315b495e66f34eb02e9") version("0.6.11", sha256="f8c90b6c51da7bf184bff6762d98fc24faba1b634724ecdb987161ee10987b97") diff --git a/var/spack/repos/builtin/packages/r-gparotation/package.py b/var/spack/repos/builtin/packages/r-gparotation/package.py index d1a486174641af..20c35487d6b2e6 100644 --- a/var/spack/repos/builtin/packages/r-gparotation/package.py +++ b/var/spack/repos/builtin/packages/r-gparotation/package.py @@ -14,6 +14,7 @@ class RGparotation(RPackage): cran = "GPArotation" + version("2024.3-1", sha256="88f657af29789591d581e0c529fd50ef1307abfb33e0403209bd3e591e2654da") version("2023.3-1", sha256="8748086c3d45286b7c9a81f0f8e58df75a09ba555d48a6eb8cd94af0c7c92a26") version("2022.10-2", sha256="04f72d8f3a9c204df5df904be563ec272a8437a707daee8823b2a690dde21917") version("2022.4-1", sha256="231e7edcdcc091fbecfb4f2e88d1a4344967cf7ea58074b385a4b8b48d9da224") diff --git a/var/spack/repos/builtin/packages/r-gplots/package.py b/var/spack/repos/builtin/packages/r-gplots/package.py index bde5c06bef5850..f56d39a4537021 100644 --- a/var/spack/repos/builtin/packages/r-gplots/package.py +++ b/var/spack/repos/builtin/packages/r-gplots/package.py @@ -34,6 +34,7 @@ class RGplots(RPackage): license("GPL-2.0-only") + version("3.1.3.1", sha256="1ae1de94f27583ad84543a15f042b8dbd0850c56447929c7157787d755211af2") version("3.1.3", sha256="9f853b9e205264d087e61e8825f797ce36c9eb585b187dab794563613a526716") version("3.1.1", sha256="f9ae19c2574b6d41adbeccaf7bc66cf56d7b2769004daba7e0038d5fbd821339") version("3.0.1.1", sha256="7db103f903a25d174cddcdfc7b946039b61e236c95084b90ad17f1a41da3770c") diff --git a/var/spack/repos/builtin/packages/r-graphlayouts/package.py b/var/spack/repos/builtin/packages/r-graphlayouts/package.py index 7a0aadaed50965..57e5a06145277f 100644 --- a/var/spack/repos/builtin/packages/r-graphlayouts/package.py +++ b/var/spack/repos/builtin/packages/r-graphlayouts/package.py @@ -19,6 +19,7 @@ class RGraphlayouts(RPackage): license("MIT") + version("1.1.1", sha256="7bc2459a02b1339ac01184a76687a3e50de5680f4699b5966a3f2e6a882f3801") version("0.8.4", sha256="778d8f7e190b05d0dbbaa7e6dbdfc0b8fef3c83b71333a6fa89926e6c04690fd") version("0.8.3", sha256="f9e4e5d794b4d1c6eba962490b3220d09b73e10893f5fa3be210240bfc654421") version("0.8.2", sha256="0fa2777a2c159f3ef1209cd96838d2651d144c9c971abfef1d22bc6376f47bec") diff --git a/var/spack/repos/builtin/packages/r-grbase/package.py b/var/spack/repos/builtin/packages/r-grbase/package.py index ce963aa539325e..d304465f2f6ae2 100644 --- a/var/spack/repos/builtin/packages/r-grbase/package.py +++ b/var/spack/repos/builtin/packages/r-grbase/package.py @@ -26,6 +26,7 @@ class RGrbase(RPackage): cran = "gRbase" + version("2.0.2", sha256="36720e49b82e360166386c9b3bf17838aeb6d9b921e7e01d48f8a115f9a02e97") version("1.8.9", sha256="dacab442d896e4593c6196e8446b75c4144a1c4ebc3f039dc624516038193d7e") version("1.8.8", sha256="fdd5d1ca8adb74e8bd2b210c9a652a10e60a90b40450cd8a295b06af41acf9db") version("1.8.7", sha256="01d77e1b029ac22b4e13f07384285f363733a42aba842eddfc5e1aceea99f808") @@ -35,13 +36,15 @@ class RGrbase(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r@3.0.2:", type=("build", "run")) depends_on("r@3.6.0:", type=("build", "run"), when="@1.8-6.7:") - depends_on("r-biocmanager", type=("build", "run"), when="@1.8.7:") - depends_on("r-graph", type=("build", "run")) - depends_on("r-rbgl", type=("build", "run")) - depends_on("r-rgraphviz", type=("build", "run"), when="@1.8-6.7:") + depends_on("r@4.2.0:", type=("build", "run"), when="@2.0.2:") depends_on("r-igraph", type=("build", "run")) - depends_on("r-magrittr", type=("build", "run")) + depends_on("r-magrittr", type=("build", "run"), when="@:2.0.1") depends_on("r-matrix", type=("build", "run")) depends_on("r-rcpp@0.11.1:", type=("build", "run")) depends_on("r-rcppeigen", type=("build", "run")) depends_on("r-rcpparmadillo", type=("build", "run")) + + depends_on("r-biocmanager", type=("build", "run"), when="@1.8.7:1.9") + depends_on("r-graph", type=("build", "run"), when="@:1.9") + depends_on("r-rbgl", type=("build", "run"), when="@:1.9") + depends_on("r-rgraphviz", type=("build", "run"), when="@1.8-6.7:1.9") diff --git a/var/spack/repos/builtin/packages/r-gsa/package.py b/var/spack/repos/builtin/packages/r-gsa/package.py index 71c0da0a61bfdb..cb18bcb178375d 100644 --- a/var/spack/repos/builtin/packages/r-gsa/package.py +++ b/var/spack/repos/builtin/packages/r-gsa/package.py @@ -11,5 +11,6 @@ class RGsa(RPackage): cran = "GSA" + version("1.03.3", sha256="5459786190f40339addc45e7bb58c6a983548aa8feac7277ea7ec0662c5a282c") version("1.03.2", sha256="177d6059fc645d3d8883806d2dea1c5dfc68efdada9aadde8a96b6d57acf35b8") version("1.03.1", sha256="e192d4383f53680dbd556223ea5f8cad6bae62a80a337ba5fd8d05a8aee6a917") diff --git a/var/spack/repos/builtin/packages/r-gsodr/package.py b/var/spack/repos/builtin/packages/r-gsodr/package.py index da64fb09535cc8..128bd3219c47a2 100644 --- a/var/spack/repos/builtin/packages/r-gsodr/package.py +++ b/var/spack/repos/builtin/packages/r-gsodr/package.py @@ -31,6 +31,7 @@ class RGsodr(RPackage): license("MIT") + version("4.1.1", sha256="d5bf80244b5562206f459cb0ed588c11f8edf4eb2a26e2715be7938ec6be92e0") version("3.1.8", sha256="f43668b14be30632086b832be83c74fa7c25e123fbce0d0203e992a0c11e7c8d") version("3.1.6", sha256="fbeac54e86fba1e4415b41608ca59cf50be1b421cc890eb5c5b0d6d1c9229f6a") version("3.1.5", sha256="37682141707d7e29fab653ccdeb154fea2c085080f686b33f1a54140608e824d") @@ -43,7 +44,7 @@ class RGsodr(RPackage): depends_on("r-curl", type=("build", "run")) depends_on("r-data-table@1.11.6:", type=("build", "run"), when="@:2.1.2") depends_on("r-data-table", type=("build", "run")) - depends_on("r-httr", type=("build", "run")) depends_on("r-r-utils", type=("build", "run")) + depends_on("r-httr", type=("build", "run"), when="@:3.1.8") depends_on("r-future-apply", type=("build", "run"), when="@:2.1.2") diff --git a/var/spack/repos/builtin/packages/r-gss/package.py b/var/spack/repos/builtin/packages/r-gss/package.py index 6cc95a075d8364..22b02013056b76 100644 --- a/var/spack/repos/builtin/packages/r-gss/package.py +++ b/var/spack/repos/builtin/packages/r-gss/package.py @@ -16,6 +16,7 @@ class RGss(RPackage): license("GPL-2.0-or-later") + version("2.2-7", sha256="3b13144702c570c83462b4ea2ad17f4bd630cff5bf2ab0347a33c7e86a4f3f6a") version("2.2-4", sha256="953e89dfe3bee9cac51df3e5325bf4d1496ad76e4393706c4efdb1834c0c7441") version("2.2-3", sha256="24306401cf4e5869f8a690eca7e17c044ece83edd66969bd2daf5976272d244b") version("2.2-2", sha256="1da4da894378ee730cff9628e8b4d2a0d7dfa344b94e5bce6953e66723c21fe4") diff --git a/var/spack/repos/builtin/packages/r-gtable/package.py b/var/spack/repos/builtin/packages/r-gtable/package.py index 1e05bf47a54989..eb6c091d62ce6d 100644 --- a/var/spack/repos/builtin/packages/r-gtable/package.py +++ b/var/spack/repos/builtin/packages/r-gtable/package.py @@ -19,6 +19,7 @@ class RGtable(RPackage): license("MIT") + version("0.3.5", sha256="b19fc1a30359945adbab7d4e915fe95523a839c380e34ae705d70b7ebddeea72") version("0.3.3", sha256="2f9a58d978e2a487b7fd8841539ea33cf948e55ddf6f7a9bd2dd3362600a7b3a") version("0.3.1", sha256="8bd62c5722d5188914d667cabab12991c555f657f4f5ce7b547571ae3aec7cb5") version("0.3.0", sha256="fd386cc4610b1cc7627dac34dba8367f7efe114b968503027fb2e1265c67d6d3") diff --git a/var/spack/repos/builtin/packages/r-gtools/package.py b/var/spack/repos/builtin/packages/r-gtools/package.py index 2a6d23fc12c779..9cff33ad4e6d23 100644 --- a/var/spack/repos/builtin/packages/r-gtools/package.py +++ b/var/spack/repos/builtin/packages/r-gtools/package.py @@ -45,6 +45,7 @@ class RGtools(RPackage): license("GPL-2.0-only") + version("3.9.5", sha256="dee9b6c1152db1a5dc427d074b32bbbb738708683f17a95e0e95e4d79fdf174b") version("3.9.4", sha256="59cf8b194fe98b1cc05dbb4d686810a1068f59d8b402b731548a898ece85f111") version("3.9.3", sha256="7afb53277b382d5752f4597ae433f3c0addf5e8eb24d01a9562faf2a01e33133") version("3.9.2.1", sha256="ec5febad7bb33812684b39679b0bce8a668361b87714f7388546e0f4ac02af5f") diff --git a/var/spack/repos/builtin/packages/r-gwmodel/package.py b/var/spack/repos/builtin/packages/r-gwmodel/package.py index 4a83437510d5c0..74c48ee274fa76 100644 --- a/var/spack/repos/builtin/packages/r-gwmodel/package.py +++ b/var/spack/repos/builtin/packages/r-gwmodel/package.py @@ -24,6 +24,7 @@ class RGwmodel(RPackage): cran = "GWmodel" + version("2.3-3", sha256="5f69d000d7ffba491f1dafbad5ec0b5fcbbdb28831092252a8b409163d6ad33c") version("2.2-9", sha256="3696e0f24994df4f393dbcb2e74bc0808704b80e1203247be3911fc3bcdb5f18") version("2.2-8", sha256="5b1890dbf75502e89b651efd9158be77b3cfa764a5717f9889f438ed2b0a4da2") version("2.2-2", sha256="4e2b221b85fbc828ffc4f057c137ded849afcaac2a75c27d2d6d0a6db17f8a06") @@ -32,14 +33,18 @@ class RGwmodel(RPackage): version("2.0-9", sha256="b479af2c19d4aec30f1883d00193d52e342c609c1badcb51cc0344e4404cffa7") depends_on("r@3.0.0:", type=("build", "run")) - depends_on("r-maptools@0.5-2:", type=("build", "run")) depends_on("r-robustbase", type=("build", "run")) + depends_on("r-sf", type=("build", "run"), when="@2.3-1:") depends_on("r-sp", type=("build", "run")) - depends_on("r-sp@1.4-0:", type=("build", "run"), when="@2.2-2:") - depends_on("r-rcpp", type=("build", "run")) + depends_on("r-sp@1.4-0.1:", type=("build", "run"), when="@2.2-0:") depends_on("r-spatialreg", type=("build", "run")) depends_on("r-spacetime", type=("build", "run")) depends_on("r-spdep", type=("build", "run")) depends_on("r-fnn", type=("build", "run"), when="@2.1-1:") + depends_on("r-rcpp", type=("build", "run")) + depends_on("r-rcpp@1.0.12:", type=("build", "run"), when="@2.3-3:") depends_on("r-rcpparmadillo", type=("build", "run")) + depends_on("r-rcppeigen", type=("build", "run"), when="@2.3-3:") depends_on("gmake", type="build") + + depends_on("r-maptools@0.5-2:", type=("build", "run"), when="@:2.2") diff --git a/var/spack/repos/builtin/packages/r-hardhat/package.py b/var/spack/repos/builtin/packages/r-hardhat/package.py index 88330864e76803..9966baaf3eec55 100644 --- a/var/spack/repos/builtin/packages/r-hardhat/package.py +++ b/var/spack/repos/builtin/packages/r-hardhat/package.py @@ -21,6 +21,7 @@ class RHardhat(RPackage): license("MIT") + version("1.4.0", sha256="46d023ddfc8f940cd889478fa91c42e894a0df58a10f3b6c0eb688a500b2b3ad") version("1.3.0", sha256="fe9ff009e2ba6dd4d70cbb541430f88d85c0a28d6a1c2772e4910c79b81fe82e") version("1.2.0", sha256="f9320eccb1b5f624a46fa074e3ccc202c383b77098ecd08b193aeb47daedad78") version("1.0.0", sha256="2740dc243a440e7d32370a78f9258255faea6d900075901cf6009c651769e7bd") diff --git a/var/spack/repos/builtin/packages/r-haven/package.py b/var/spack/repos/builtin/packages/r-haven/package.py index 220171dbcea1f1..8bd719fa2b8022 100644 --- a/var/spack/repos/builtin/packages/r-haven/package.py +++ b/var/spack/repos/builtin/packages/r-haven/package.py @@ -33,6 +33,7 @@ class RHaven(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.2:", type=("build", "run"), when="@2.1.1:") depends_on("r@3.4:", type=("build", "run"), when="@2.5.0:") + depends_on("r@3.6:", type=("build", "run"), when="@2.5.4:") depends_on("r-cli@3.0.0:", type=("build", "run"), when="@2.5.0:") depends_on("r-forcats@0.2.0:", type=("build", "run")) depends_on("r-hms", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-hdf5r/package.py b/var/spack/repos/builtin/packages/r-hdf5r/package.py index 259c32003b9f16..257fb41bb7df3f 100644 --- a/var/spack/repos/builtin/packages/r-hdf5r/package.py +++ b/var/spack/repos/builtin/packages/r-hdf5r/package.py @@ -20,6 +20,7 @@ class RHdf5r(RPackage): license("Apache-2.0 OR custom") + version("1.3.11", sha256="9795d667bc72acfabece1e3ece1aa4e60e8194cb4eb8b46985efccd19a55a8c4") version("1.3.8", sha256="b53281e2cf57447965849748e972de2f7fe8df0cee3538ef5813c33c7ed2302b") version("1.3.7", sha256="6e8a02843ed1c970cb41f97e2acee34853d3b70ce617bc9bcff07c41b98f295b") version("1.3.5", sha256="87b75173ab226a9fbaa5b28289349f3c56b638629560a172994b8f9323c1622f") diff --git a/var/spack/repos/builtin/packages/r-hh/package.py b/var/spack/repos/builtin/packages/r-hh/package.py index da38dfed21b413..9f8fc014c5f88f 100644 --- a/var/spack/repos/builtin/packages/r-hh/package.py +++ b/var/spack/repos/builtin/packages/r-hh/package.py @@ -25,6 +25,7 @@ class RHh(RPackage): cran = "HH" + version("3.1-52", sha256="d5495e18df65de613d9bdc43729ca2ac27746b15b90c06502b2ee5e2458d0383") version("3.1-49", sha256="12cef0cb0a07c745026d925aee2970913e1f3f0705a58bc2741bf4940c80b87b") version("3.1-47", sha256="50910ac7de49122df56c6e42413535601c74bbef9240ad8977e3267273d087c0") version("3.1-43", sha256="2ed35c8fc97092e9d2ce3439a2ec342d5d7bd93ad8f5266995cc80d88cd2235b") diff --git a/var/spack/repos/builtin/packages/r-highr/package.py b/var/spack/repos/builtin/packages/r-highr/package.py index 7452077ba82f4a..ea8d5febbdadff 100644 --- a/var/spack/repos/builtin/packages/r-highr/package.py +++ b/var/spack/repos/builtin/packages/r-highr/package.py @@ -17,6 +17,7 @@ class RHighr(RPackage): license("GPL-2.0-or-later") + version("0.11", sha256="e90d14284001963325a84a9dbeef029609d52515da8d65c87ae61be21b7fe0a7") version("0.10", sha256="ec55bc1ff66390ed66806dc2a7b6c17dbfd089b3d73fe2e369017f8cb4bc347b") version("0.9", sha256="beff11390d936c90fdcc00e7ed0eb72220f3de403a51b56659e3d3e0b6d8ed4d") version("0.8", sha256="4bd01fba995f68c947a99bdf9aca15327a5320151e10bd0326fad50a6d8bc657") diff --git a/var/spack/repos/builtin/packages/r-hmisc/package.py b/var/spack/repos/builtin/packages/r-hmisc/package.py index 2ea88f61d0f89b..e2dc348b458769 100644 --- a/var/spack/repos/builtin/packages/r-hmisc/package.py +++ b/var/spack/repos/builtin/packages/r-hmisc/package.py @@ -17,6 +17,7 @@ class RHmisc(RPackage): cran = "Hmisc" + version("5.1-3", sha256="3c61772ff7a78ca5855189faa810c74117dc5df240103adc6e90eb94e9c605eb") version("5.0-1", sha256="db390f8f8a150cb5cffb812e9609a8e8632ceae0dc198528f190fd670ba8fa59") version("4.7-1", sha256="325d571a68b2198eabd258a8d86143cac659ffa70e474088a18e9b58ab882e7f") version("4.7-0", sha256="29ec2d9ca11c790c350e93323126bef4f498c69c41c31bb335fd04671e0f87bd") @@ -26,6 +27,7 @@ class RHmisc(RPackage): version("4.2-0", sha256="9e9614673288dd00295f250fa0bf96fc9e9fed692c69bf97691081c1a01411d9") version("4.1-1", sha256="991db21cdf73ffbf5b0239a4876b2e76fd243ea33528afd88dc968792f281498") + depends_on("r@4.1.0:", type=("build", "run"), when="@5.1-2:") depends_on("r-formula", type=("build", "run")) depends_on("r-ggplot2@2.2:", type=("build", "run")) depends_on("r-cluster", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-hoardr/package.py b/var/spack/repos/builtin/packages/r-hoardr/package.py index 1002268151896c..dfeffebdd952c2 100644 --- a/var/spack/repos/builtin/packages/r-hoardr/package.py +++ b/var/spack/repos/builtin/packages/r-hoardr/package.py @@ -19,6 +19,7 @@ class RHoardr(RPackage): license("MIT") + version("0.5.4", sha256="4e031ac1317584451c09bc8288ed73fb2d6ceea3c10d29dbb4be08157e489a37") version("0.5.3", sha256="b9e4d1350e1fde7db922e55128306e3768ee46ff9532f05c96543dcae383647c") version("0.5.2", sha256="819113f0e25da105f120a676b5173872a4144f2f6f354cad14b35f898e76dc54") diff --git a/var/spack/repos/builtin/packages/r-htmltable/package.py b/var/spack/repos/builtin/packages/r-htmltable/package.py index e381c8773dc321..d6fc8d50c56630 100644 --- a/var/spack/repos/builtin/packages/r-htmltable/package.py +++ b/var/spack/repos/builtin/packages/r-htmltable/package.py @@ -18,6 +18,7 @@ class RHtmltable(RPackage): cran = "htmlTable" + version("2.4.3", sha256="3739d01bff313ccd206b63940a8252b037f0521d041c721a4e0d195abd6ef6dd") version("2.4.1", sha256="3a7f3e75d886dc398fd1d3cae907b536fff6af3a3d2c18349ef12ec06d310f93") version("2.4.0", sha256="4ca2b5616d77cfeee8ae5ca74307b86407d478b12d1ce17ba9c447e233b89a9d") version("2.1.0", sha256="4049339b317cbec1c8c7930e2e36cf0fc8b002516092dd270bb794d8db02f0bf") @@ -25,6 +26,7 @@ class RHtmltable(RPackage): version("1.11.2", sha256="64a273b1cdf07a7c57b9031315ca665f95d78e70b4320d020f64a139278877d1") version("1.9", sha256="5b487a7f33af77db7d987bf61f3ef2ba18bb629fe7b9802409f8b3485c603132") + depends_on("r@4.1:", type=("build", "run"), when="@2.4.2:") depends_on("r-stringr", type=("build", "run")) depends_on("r-knitr@1.6:", type=("build", "run")) depends_on("r-magrittr@1.5:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-htmltools/package.py b/var/spack/repos/builtin/packages/r-htmltools/package.py index 8af75e17e41365..643f2b00c2104c 100644 --- a/var/spack/repos/builtin/packages/r-htmltools/package.py +++ b/var/spack/repos/builtin/packages/r-htmltools/package.py @@ -15,6 +15,7 @@ class RHtmltools(RPackage): license("GPL-2.0-or-later") + version("0.5.8.1", sha256="f9f62293ec06c353c4584db6ccedb06a2da12e485208bd26b856f17dd013f176") version("0.5.5", sha256="c8b23fab855a89c6ed0f6d6c7cad0ff9c5ae329c0bdb479940443ee752f26659") version("0.5.3", sha256="2c451b369ea8918358e2b280f548816664fe0143222c609e6bfb1f9cd2f7324f") version("0.5.2", sha256="7dc7d50436e5a82a5801f85bcd2f572a06a98b4027d71aa17b4854ec9b2767fb") @@ -26,9 +27,10 @@ class RHtmltools(RPackage): depends_on("r@2.14.1:", type=("build", "run")) depends_on("r-digest", type=("build", "run")) depends_on("r-base64enc", type=("build", "run"), when="@0.5.1:") - depends_on("r-rlang@0.4.10:", type=("build", "run"), when="@0.5.2:") depends_on("r-rlang", type=("build", "run"), when="@0.5.1:") + depends_on("r-rlang@0.4.10:", type=("build", "run"), when="@0.5.2:") + depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@0.5.7:") depends_on("r-fastmap@1.1.0:", type=("build", "run"), when="@0.5.2:") - depends_on("r-ellipsis", type=("build", "run"), when="@0.5.5:") + depends_on("r-ellipsis", type=("build", "run"), when="@0.5.5:0.5.7") depends_on("r-rcpp", type=("build", "run"), when="@:0.3.6") diff --git a/var/spack/repos/builtin/packages/r-htmlwidgets/package.py b/var/spack/repos/builtin/packages/r-htmlwidgets/package.py index 95e0cbd21c22d1..f7b0a0c38e3e75 100644 --- a/var/spack/repos/builtin/packages/r-htmlwidgets/package.py +++ b/var/spack/repos/builtin/packages/r-htmlwidgets/package.py @@ -17,6 +17,7 @@ class RHtmlwidgets(RPackage): license("MIT") + version("1.6.4", sha256="7cb08f0b30485dac26f72e4056ec4ed8825d1398e8b9f25ed63db228fe3a0ed0") version("1.6.2", sha256="7fda1672a4c0fbc203c790677b6ee7c40d2c2d72be4f6772f75288fc712b10bc") version("1.5.4", sha256="1a3fc60f40717de7f1716b754fd1c31a132e489a2560a278636ee78eba46ffc1") version("1.5.3", sha256="01a5833182cc224bd100be2815e57e67b524de9f2bb1542787b6e3d1303f0f29") @@ -27,6 +28,7 @@ class RHtmlwidgets(RPackage): depends_on("r-htmltools@0.3:", type=("build", "run")) depends_on("r-htmltools@0.5.4:", type=("build", "run"), when="@1.6.2:") + depends_on("r-htmltools@0.5.7:", type=("build", "run"), when="@1.6.3:") depends_on("r-jsonlite@0.9.16:", type=("build", "run")) depends_on("r-yaml", type=("build", "run")) depends_on("r-rmarkdown", type=("build", "run"), when="@1.6.2:") diff --git a/var/spack/repos/builtin/packages/r-httpuv/package.py b/var/spack/repos/builtin/packages/r-httpuv/package.py index e54167e7d60efd..8801ddadc3ef53 100644 --- a/var/spack/repos/builtin/packages/r-httpuv/package.py +++ b/var/spack/repos/builtin/packages/r-httpuv/package.py @@ -21,6 +21,7 @@ class RHttpuv(RPackage): license("GPL-2.0-or-later OR custom") + version("1.6.15", sha256="5e6ded3623a39df3e1db6cb7e7292b4c03c80b3c6c5faaac3b78b711cb205ed0") version("1.6.9", sha256="8d77f25b22fa7473b45007c2048e9a38d3792d59b2716e1fcdf9e99bd585d95d") version("1.6.6", sha256="41395fd324c5cb884d4f2a8060744758904119db22eeb312f2ea1e7ad7711293") version("1.6.5", sha256="f5f63629ca5e9d0e396a89982d95b5286726c0cb425166f35a3ad32a60a79156") diff --git a/var/spack/repos/builtin/packages/r-httr/package.py b/var/spack/repos/builtin/packages/r-httr/package.py index 028903fd0c251f..a66b9a2c55fda8 100644 --- a/var/spack/repos/builtin/packages/r-httr/package.py +++ b/var/spack/repos/builtin/packages/r-httr/package.py @@ -17,6 +17,7 @@ class RHttr(RPackage): license("MIT") + version("1.4.7", sha256="1555e6c2fb67bd38ff11b479f74aa287b2d93f4add487aec53b836ff07de3a3a") version("1.4.5", sha256="f93bac7f882b0df099abca47dd5aae3686fb3cd2d3e9926fcd639bcddff76f6c") version("1.4.4", sha256="41d82523f3ee260d409a7b5ae4136190cbc5aecbc270b40ed7064f83e7f5435d") version("1.4.3", sha256="9a8613fa96173ac910c021391af1ced4d0609169049c802cf7cdfe1c40897c6a") @@ -32,6 +33,7 @@ class RHttr(RPackage): depends_on("r@3.2:", type=("build", "run"), when="@1.4.1:") depends_on("r@3.5:", type=("build", "run"), when="@1.4.5:") depends_on("r-curl@3.0.0:", type=("build", "run")) + depends_on("r-curl@5.0.2:", type=("build", "run"), when="@1.4.7:") depends_on("r-jsonlite", type=("build", "run")) depends_on("r-mime", type=("build", "run")) depends_on("r-openssl@0.8:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-httr2/package.py b/var/spack/repos/builtin/packages/r-httr2/package.py index 4ca63c8d50684d..29f21c022cc990 100644 --- a/var/spack/repos/builtin/packages/r-httr2/package.py +++ b/var/spack/repos/builtin/packages/r-httr2/package.py @@ -18,15 +18,21 @@ class RHttr2(RPackage): license("MIT") + version("1.0.2", sha256="d1f8e37f74a59f4e1b3b886e5f453336ba14251e500acdccc8f4f7d2b9300048") version("0.2.2", sha256="5d1ab62541f7817112519f0f9d00d6a2555bab5b2da7f5c6d579b0c307d7f2bf") depends_on("r@3.4:", type=("build", "run")) + depends_on("r@4.0:", type=("build", "run"), when="@1.0.2:") depends_on("r-cli@3.0.0:", type=("build", "run")) depends_on("r-curl", type=("build", "run")) + depends_on("r-curl@5.1.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-glue", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@1.0.0:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-openssl", type=("build", "run")) depends_on("r-r6", type=("build", "run")) depends_on("r-rappdirs", type=("build", "run")) depends_on("r-rlang@1.0.0:", type=("build", "run")) + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.0.0:") + depends_on("r-vctrs@0.6.3:", type=("build", "run"), when="@1.0.0:") depends_on("r-withr", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-hydrogof/package.py b/var/spack/repos/builtin/packages/r-hydrogof/package.py index 3f5f11b161aa76..de6840e4a4d509 100644 --- a/var/spack/repos/builtin/packages/r-hydrogof/package.py +++ b/var/spack/repos/builtin/packages/r-hydrogof/package.py @@ -19,6 +19,7 @@ class RHydrogof(RPackage): cran = "hydroGOF" + version("0.6-0", sha256="fb1839da5d6c2d0bbff961b4bb39d149b487b59dc36017aada9d3484a842269e") version("0.4-0", sha256="6a109740e36549a9369b5960b869e5e0a296261df7b6faba6cb3bd338d59883b") depends_on("r@2.10.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-hydrotsm/package.py b/var/spack/repos/builtin/packages/r-hydrotsm/package.py index 2fd5cde5e956cc..5cfc85af6cc565 100644 --- a/var/spack/repos/builtin/packages/r-hydrotsm/package.py +++ b/var/spack/repos/builtin/packages/r-hydrotsm/package.py @@ -22,14 +22,18 @@ class RHydrotsm(RPackage): cran = "hydroTSM" + version("0.7-0", sha256="a6e1f0f74a5b8f3a7c05d020739342278b0a54e7b63a66a755db5599ebf94a8e") version("0.6-0", sha256="5be759845ce05ca579ed2657c85d497b78c3060d737e84fcd457153045db4ad7") depends_on("r@2.10.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@0.7-0:") depends_on("r-zoo@1.7-2:", type=("build", "run")) depends_on("r-xts@0.9-7:", type=("build", "run")) depends_on("r-e1071", type=("build", "run")) - depends_on("r-gstat", type=("build", "run")) - depends_on("r-automap", type=("build", "run")) - depends_on("r-sp@1.1-0:", type=("build", "run")) depends_on("r-lattice", type=("build", "run")) - depends_on("r-maptools", type=("build", "run")) + depends_on("r-classint", type=("build", "run"), when="@0.7-0:") + + depends_on("r-gstat", type=("build", "run"), when="@:0.6.0") + depends_on("r-automap", type=("build", "run"), when="@:0.6.0") + depends_on("r-sp@1.1-0:", type=("build", "run"), when="@:0.6.0") + depends_on("r-maptools", type=("build", "run"), when="@:0.6.0") diff --git a/var/spack/repos/builtin/packages/r-igraph/package.py b/var/spack/repos/builtin/packages/r-igraph/package.py index dba6d2beabbd6d..cb89fe650b86bf 100644 --- a/var/spack/repos/builtin/packages/r-igraph/package.py +++ b/var/spack/repos/builtin/packages/r-igraph/package.py @@ -17,6 +17,7 @@ class RIgraph(RPackage): license("GPL-2.0-or-later") + version("2.0.3", sha256="8e8a172d4567219474562cfb1085496be3ab356483c4e88011aca1fc3b2d8f76") version("1.4.2", sha256="7d5300adb1a25a6470cada8630e35ef416181147ab624d5a0a8d3552048c4ae5") version("1.3.5", sha256="9e615d67b6b5b57dfa54ec2bbc8c29da8f7c3fe82af1e35ab27273b1035b9bd4") version("1.3.1", sha256="505a2ba7c417ceaf869240cc1c9a5f3fbd75f8d9dfcfe048df1326c6ec41144e") @@ -28,12 +29,18 @@ class RIgraph(RPackage): version("1.0.1", sha256="dc64ed09b8b5f8d66ed4936cde3491974d6bc5178dd259b6eab7ef3936aa5602") depends_on("r@3.0.2:", type=("build", "run"), when="@1.4.2:") + depends_on("r@3.5.0:", type=("build", "run"), when="@1.5.0:") + depends_on("r-cli", type=("build", "run"), when="@1.5.0:") + depends_on("r-cpp11@0.2.0:", type=("build", "run"), when="@1.4.2:") + depends_on("r-cpp11@0.4.7:", type=("build", "run"), when="@1.6.0:") + depends_on("r-lifecycle", type=("build", "run"), when="@1.5.0.1:") + depends_on("r-vctrs", type=("build", "run"), when="@2.0.3:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) depends_on("r-pkgconfig@2.0.0:", type=("build", "run")) depends_on("r-rlang", type=("build", "run"), when="@1.3.5:") - depends_on("r-cpp11@0.2.0:", type=("build", "run"), when="@1.4.2:") + depends_on("r-vctrs", type=("build", "run"), when="@2.0.2:") depends_on("gmp") depends_on("gmp@4.38:", when="@1.2.11:") depends_on("libxml2") diff --git a/var/spack/repos/builtin/packages/r-imager/package.py b/var/spack/repos/builtin/packages/r-imager/package.py index b132cfee0f1611..6b36e21629cf9f 100644 --- a/var/spack/repos/builtin/packages/r-imager/package.py +++ b/var/spack/repos/builtin/packages/r-imager/package.py @@ -20,6 +20,7 @@ class RImager(RPackage): license("LGPL-3.0-only") + version("1.0.2", sha256="7c849086cb17d6c5aefc106217363e14afbcda2a9e0120687d40805b5e1c566a") version("0.42.19", sha256="187abccba648ecece5e466ca6333acd5c8fdd1476daa2d04d5fa9ec5400ae1e2") version("0.42.13", sha256="d90a9893d11190ba249c7fae5bd6517a77907efbce2941452cb2aec57bb5cf7f") version("0.42.11", sha256="47f8b7ff8d05a5191e30ad1869f12a62bdbe3142b22b12a6032dec9b5f8532a8") @@ -29,8 +30,10 @@ class RImager(RPackage): depends_on("r+X") depends_on("r@2.10.0:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-rcpp@0.11.5:", type=("build", "run")) + depends_on("r-rcpp@1.0.0:", type=("build", "run"), when="@1.0.1:") depends_on("r-stringr", type=("build", "run")) depends_on("r-png", type=("build", "run")) depends_on("r-jpeg", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-influencer/package.py b/var/spack/repos/builtin/packages/r-influencer/package.py index e3e60fa1dfd4aa..b26eeb2e580c49 100644 --- a/var/spack/repos/builtin/packages/r-influencer/package.py +++ b/var/spack/repos/builtin/packages/r-influencer/package.py @@ -20,6 +20,7 @@ class RInfluencer(RPackage): cran = "influenceR" + version("0.1.5", sha256="8164e4820f769032fab97c9ca486d33e83309641fcc4875065d8f5a43b20f58c") version("0.1.0.1", sha256="63c46f1175fced33fb1b78d4d56e37fbee09b408945b0106dac36e3344cd4766") version("0.1.0", sha256="4fc9324179bd8896875fc0e879a8a96b9ef2a6cf42a296c3b7b4d9098519e98a") diff --git a/var/spack/repos/builtin/packages/r-inline/package.py b/var/spack/repos/builtin/packages/r-inline/package.py index d7601ea0a0302b..0ac66b8e79a6c1 100644 --- a/var/spack/repos/builtin/packages/r-inline/package.py +++ b/var/spack/repos/builtin/packages/r-inline/package.py @@ -20,3 +20,5 @@ class RInline(RPackage): version("0.3.17", sha256="792857b2ebd408d6523424d2f6bb7297e241d4b28ab32372f6a9240c8cd554f3") version("0.3.15", sha256="ff043fe13c1991a3b285bed256ff4a9c0ba10bee764225a34b285875b7d69c68") version("0.3.14", sha256="fd34d6bf965148d26d983a022a0ff7bc1a5831f6ca066deee3f6139894dfc931") + + depends_on("r@2.4.0:", when="@0.3.16:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-insight/package.py b/var/spack/repos/builtin/packages/r-insight/package.py index 2f9f27c8ded0b6..23b0ce72763893 100644 --- a/var/spack/repos/builtin/packages/r-insight/package.py +++ b/var/spack/repos/builtin/packages/r-insight/package.py @@ -23,6 +23,7 @@ class RInsight(RPackage): license("GPL-3.0-only") + version("0.20.3", sha256="b60e189849cd3c368e9c2b2174e89c2dfbba3b34e84feb8a20af1bb758116bb2") version("0.19.1", sha256="1042629644c66b1a372fd4471d38adccc0c3a329879ef685b14b65575c1c98eb") version("0.18.6", sha256="ab0dc3c8ec765f2e93f7bcc3a7abb05140f71db24d50bf8cdd595a5a4e771cae") version("0.18.4", sha256="6e3f378bc2eb30c0300103bdd8a3e74371199b36867b45978ec9690a6fda0c5f") @@ -33,3 +34,4 @@ class RInsight(RPackage): depends_on("r@3.4:", type=("build", "run")) depends_on("r@3.5:", type=("build", "run"), when="@0.18.4:") + depends_on("r@3.6:", type=("build", "run"), when="@0.19.2:") diff --git a/var/spack/repos/builtin/packages/r-interp/package.py b/var/spack/repos/builtin/packages/r-interp/package.py index 800ecaf9a5b395..e7df13df3b210b 100644 --- a/var/spack/repos/builtin/packages/r-interp/package.py +++ b/var/spack/repos/builtin/packages/r-interp/package.py @@ -32,6 +32,7 @@ class RInterp(RPackage): license("GPL-2.0-or-later") + version("1.1-6", sha256="3674044e5334ecdf124054303929c084fc0797d3123e28576a230492ea6ecd34") version("1.1-4", sha256="4f7b5d388132a4d76e8635e2a7c4fa0d705df2b49e7d108faa16ce2236e34d06") version("1.1-3", sha256="b74e606b38cfb02985c1f9e3e45093620f76c0307b1b0b4058761e871eb5fa3f") diff --git a/var/spack/repos/builtin/packages/r-intervals/package.py b/var/spack/repos/builtin/packages/r-intervals/package.py index 60006c590a02ff..39f6181ad5177e 100644 --- a/var/spack/repos/builtin/packages/r-intervals/package.py +++ b/var/spack/repos/builtin/packages/r-intervals/package.py @@ -13,6 +13,7 @@ class RIntervals(RPackage): license("Artistic-2.0") + version("0.15.4", sha256="50c0e1e3aab3e7b72cc1f0a6559d96caa3a360e969c38538479907e6cbe39f8f") version("0.15.3", sha256="8501fef7c74b9be874e807839518aae85e79bf4a047cd52169b52c6d9b41dfc4") version("0.15.2", sha256="0bd23b0ce817ddd851238233d8a5420bf3a6d29e75fd361418cbc50118777c57") version("0.15.1", sha256="9a8b3854300f2055e1492c71932cc808b02feac8c4d3dbf6cba1c7dbd09f4ae4") diff --git a/var/spack/repos/builtin/packages/r-ipred/package.py b/var/spack/repos/builtin/packages/r-ipred/package.py index b07211585534a2..fe127d79a79c15 100644 --- a/var/spack/repos/builtin/packages/r-ipred/package.py +++ b/var/spack/repos/builtin/packages/r-ipred/package.py @@ -17,6 +17,7 @@ class RIpred(RPackage): license("GPL-2.0-or-later") + version("0.9-15", sha256="a4752de11121262f3f4c43163efa34e05e42cdf4f8496d8897be6f410dc0ee4b") version("0.9-14", sha256="81c83dc847d09c3db52ef15e36cd4dac38c50eead1008ddd458b9e89d7528f35") version("0.9-13", sha256="6168a062d93c2d3063c064a8f242cd3716dee99822e20363a1801261319c4c98") version("0.9-12", sha256="d6e1535704d39415a799d7643141ffa4f6f55597f03e763f4ccd5d8106005843") diff --git a/var/spack/repos/builtin/packages/r-iso/package.py b/var/spack/repos/builtin/packages/r-iso/package.py index 4f8ec037d0d2e6..1eb77a26957f0a 100644 --- a/var/spack/repos/builtin/packages/r-iso/package.py +++ b/var/spack/repos/builtin/packages/r-iso/package.py @@ -14,6 +14,7 @@ class RIso(RPackage): cran = "Iso" + version("0.0-21", sha256="b6842ae1c7b629ebb63355f50bb2e5d96e5696fa59590807ac6028b6dce28fa6") version("0.0-18.1", sha256="2fa5f78a7603cbae94a5e38e791938596a053d48c609a7c120a19cbb7d93c66f") version("0.0-18", sha256="2d7e8c4452653364ee086d95cea620c50378e30acfcff129b7261e1756a99504") version("0.0-17", sha256="c007d6eaf6335a15c1912b0804276ff39abce27b7a61539a91b8fda653629252") diff --git a/var/spack/repos/builtin/packages/r-jade/package.py b/var/spack/repos/builtin/packages/r-jade/package.py index 3047b0916d8a40..5ffd0424b211c2 100644 --- a/var/spack/repos/builtin/packages/r-jade/package.py +++ b/var/spack/repos/builtin/packages/r-jade/package.py @@ -18,6 +18,7 @@ class RJade(RPackage): cran = "JADE" + version("2.0-4", sha256="d4b3d65a33cae454d3ab13343bceabfb3f6b8004ac64ae7bd86dee92a1cd2055") version("2.0-3", sha256="56d68a993fa16fc6dec758c843960eee840814c4ca2271e97681a9d2b9e242ba") depends_on("r-clue", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-kableextra/package.py b/var/spack/repos/builtin/packages/r-kableextra/package.py index 38ae8c03eba9c4..16da516e32d068 100644 --- a/var/spack/repos/builtin/packages/r-kableextra/package.py +++ b/var/spack/repos/builtin/packages/r-kableextra/package.py @@ -18,20 +18,23 @@ class RKableextra(RPackage): cran = "kableExtra" + version("1.4.0", sha256="8fe2cc9fc2e8991685c4dc9e4904459e6f572c945319befde36d76f3ab527409") version("1.3.4", sha256="091ffac282cf9257edcec1a06da38b5e6516f111296bedb934e32f5692ffbbb0") depends_on("r@3.1.0:", type=("build", "run")) depends_on("r-knitr@1.16:", type=("build", "run")) + depends_on("r-knitr@1.33:", type=("build", "run"), when="@1.4.0:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-stringr@1.0:", type=("build", "run")) depends_on("r-xml2@1.1.1:", type=("build", "run")) - depends_on("r-rvest", type=("build", "run")) depends_on("r-rmarkdown@1.6.0:", type=("build", "run")) depends_on("r-scales", type=("build", "run")) depends_on("r-viridislite", type=("build", "run")) depends_on("r-htmltools", type=("build", "run")) depends_on("r-rstudioapi", type=("build", "run")) - depends_on("r-glue", type=("build", "run")) - depends_on("r-webshot", type=("build", "run")) depends_on("r-digest", type=("build", "run")) depends_on("r-svglite", type=("build", "run")) + + depends_on("r-rvest", type=("build", "run"), when="@:1.3.4") + depends_on("r-glue", type=("build", "run"), when="@:1.3.4") + depends_on("r-webshot", type=("build", "run"), when="@:1.3.4") diff --git a/var/spack/repos/builtin/packages/r-kernlab/package.py b/var/spack/repos/builtin/packages/r-kernlab/package.py index 7e1289948d4ed6..858ef588e51bb5 100644 --- a/var/spack/repos/builtin/packages/r-kernlab/package.py +++ b/var/spack/repos/builtin/packages/r-kernlab/package.py @@ -18,6 +18,7 @@ class RKernlab(RPackage): license("GPL-2.0-only") + version("0.9-33", sha256="70c0787d6d3762c89bb68218fbee19e861fcb5d4c05b787a9692055d95dd3061") version("0.9-32", sha256="654ef34e343deb4d2c4c139a44e5397d6e38876088ce1c53c7deb087935d6fdc") version("0.9-31", sha256="7359c665c1c5e6780e1ce44b143347c8eec839301c3079d7f19e29159873278a") version("0.9-30", sha256="48fc3a839ae57e8ab6ec26a34093ca3306391e7b271bef6e69812e2b4859ee81") diff --git a/var/spack/repos/builtin/packages/r-kernsmooth/package.py b/var/spack/repos/builtin/packages/r-kernsmooth/package.py index 2c19b6b76bcd3a..9977170c76e679 100644 --- a/var/spack/repos/builtin/packages/r-kernsmooth/package.py +++ b/var/spack/repos/builtin/packages/r-kernsmooth/package.py @@ -14,6 +14,7 @@ class RKernsmooth(RPackage): cran = "KernSmooth" + version("2.23-24", sha256="d0b3ec39547ffd92565e91b0c3bb637f3b30e7a46afe416d8790b8c4f528ac5f") version("2.23-20", sha256="20eb75051e2473933d41eedc9945b03c632847fd581e2207d452cf317fa5ec39") version("2.23-18", sha256="8334800c5ad2305539d2731b929ea34f50fa4269ba87277b699fd5be5b03c490") version("2.23-15", sha256="8b72d23ed121a54af188b2cda4441e3ce2646359309885f6455b82c0275210f6") diff --git a/var/spack/repos/builtin/packages/r-klar/package.py b/var/spack/repos/builtin/packages/r-klar/package.py index bef15e27e149d0..b3bc4308d68310 100644 --- a/var/spack/repos/builtin/packages/r-klar/package.py +++ b/var/spack/repos/builtin/packages/r-klar/package.py @@ -20,6 +20,7 @@ class RKlar(RPackage): cran = "klaR" + version("1.7-3", sha256="d36c041c017cdb5ba3dbf7fb61d5ce3908d8e780eb2912fc99471394fcb8e3e5") version("1.7-2", sha256="8035c3edb8257973184ad5a2109fc7c77c32da913cb9dd0c2f1c373e6fccbd61") version("1.7-1", sha256="0354bafb1a202bc439660ecfcfe78359bc2881a69d15ff64afa049e4eb171d25") version("1.7-0", sha256="b4795250ef19fd1b5e1b9a59343fd01159a33dbdbb504a06258220e37a718198") diff --git a/var/spack/repos/builtin/packages/r-knitr/package.py b/var/spack/repos/builtin/packages/r-knitr/package.py index 08e5dd22e4f02d..0a605579aaacaa 100644 --- a/var/spack/repos/builtin/packages/r-knitr/package.py +++ b/var/spack/repos/builtin/packages/r-knitr/package.py @@ -17,6 +17,7 @@ class RKnitr(RPackage): license("GPL-2.0-or-later") + version("1.48", sha256="501b5926da7da1e8df61958639537e4c30110a0a8de07381afd92b31b9bff197") version("1.42", sha256="9344f1a0089e4da101def54aee38d7cfe3b2022d75c560141d8cc22ac65130f3") version("1.40", sha256="9b8f95ff367a0e52f024bda30315ec7cdd6a5b82371a1aaed95ab4eea78535bc") version("1.39", sha256="c91a65edebdca779af7f7480fa6636667497c9291ad55d6efd982db0bb91ac72") @@ -38,6 +39,7 @@ class RKnitr(RPackage): depends_on("r-evaluate@0.10:", type=("build", "run")) depends_on("r-evaluate@0.15:", type=("build", "run"), when="@1.39:") depends_on("r-highr", type=("build", "run")) + depends_on("r-highr@0.11:", type=("build", "run"), when="@1.47:") depends_on("r-yaml@2.1.19:", type=("build", "run")) depends_on("r-xfun", type=("build", "run"), when="@1.23:") depends_on("r-xfun@0.15:", type=("build", "run"), when="@1.30") @@ -46,6 +48,9 @@ class RKnitr(RPackage): depends_on("r-xfun@0.27:", type=("build", "run"), when="@1.37:") depends_on("r-xfun@0.29:", type=("build", "run"), when="@1.39:") depends_on("r-xfun@0.34:", type=("build", "run"), when="@1.42:") + depends_on("r-xfun@0.39:", type=("build", "run"), when="@1.43:") + depends_on("r-xfun@0.43:", type=("build", "run"), when="@1.46:") + depends_on("r-xfun@0.44:", type=("build", "run"), when="@1.47:") depends_on("pandoc", type="build") depends_on("py-rst2pdf", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ks/package.py b/var/spack/repos/builtin/packages/r-ks/package.py index 9ef0ad456fb171..9db06ce08da461 100644 --- a/var/spack/repos/builtin/packages/r-ks/package.py +++ b/var/spack/repos/builtin/packages/r-ks/package.py @@ -18,6 +18,7 @@ class RKs(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.14.2", sha256="f19130476cfafec26bba102b66ecbaeb80a9312c62d55eeec54d1aec75803fcb") version("1.14.0", sha256="2db9c56b7b0217b324bbf1e0f66bb94d3f7067a75c5823cbc7d369d63bbb4391") version("1.13.5", sha256="d1c4d06d704f301628455787ba929add1e774debc343d0952a768abea6cc7815") version("1.13.3", sha256="defb80df665d987f1751899f7a9809cb5a770f3c74266d7fbc7b9493616dce73") @@ -36,5 +37,6 @@ class RKs(RPackage): depends_on("r-mgcv", type=("build", "run")) depends_on("r-multicool", type=("build", "run")) depends_on("r-mvtnorm@1.0-0:", type=("build", "run")) - depends_on("r-plot3d", type=("build", "run"), when="@1.13.3:") depends_on("r-pracma", type=("build", "run"), when="@1.13.3:") + + depends_on("r-plot3d", type=("build", "run"), when="@1.13.3:1.14.1") diff --git a/var/spack/repos/builtin/packages/r-ksamples/package.py b/var/spack/repos/builtin/packages/r-ksamples/package.py index fc0bb71af3a616..b9363d05308dbc 100644 --- a/var/spack/repos/builtin/packages/r-ksamples/package.py +++ b/var/spack/repos/builtin/packages/r-ksamples/package.py @@ -24,6 +24,7 @@ class RKsamples(RPackage): cran = "kSamples" + version("1.2-10", sha256="2d66cc0511fb1be3190c5a285dcd93d02419468ee1ff5ae6d0838f16df2b578d") version("1.2-9", sha256="ba3ec4af3dfcf7cf12f0b784ef67bfea565e16985647ead904629886cc1542ff") depends_on("r-suppdists", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-labeling/package.py b/var/spack/repos/builtin/packages/r-labeling/package.py index cafeae89614e39..62202903af1a55 100644 --- a/var/spack/repos/builtin/packages/r-labeling/package.py +++ b/var/spack/repos/builtin/packages/r-labeling/package.py @@ -15,5 +15,6 @@ class RLabeling(RPackage): license("MIT OR custom") + version("0.4.3", sha256="c62f4fc2cc74377d7055903c5f1913b7295f7587456fe468592738a483e264f2") version("0.4.2", sha256="e022d79276173e0d62bf9e37d7574db65ab439eb2ae1833e460b1cff529bd165") version("0.3", sha256="0d8069eb48e91f6f6d6a9148f4e2dc5026cabead15dd15fc343eff9cf33f538f") diff --git a/var/spack/repos/builtin/packages/r-labelled/package.py b/var/spack/repos/builtin/packages/r-labelled/package.py index 7d3e5d852631fa..755ff749c69849 100644 --- a/var/spack/repos/builtin/packages/r-labelled/package.py +++ b/var/spack/repos/builtin/packages/r-labelled/package.py @@ -18,6 +18,7 @@ class RLabelled(RPackage): license("GPL-3.0-or-later") + version("2.13.0", sha256="9e2e82a42343b62f8a476d4dd7b13e9ffb3ee2c4e23bdf2cd29ef25b3dffa237") version("2.11.0", sha256="eddc5299ca448ea9c244960af65b95f4164495febd609f719e0f453598a0e5dd") version("2.10.0", sha256="5e93e29dcbbf0f6273b502b744695426e238ffe106f1db2bb5daeb1f17c9c40a") version("2.9.1", sha256="9eb10b245f64f3fb7346121aa4cd98638946e1cc4208dd5e28791ef8fd62fa40") @@ -34,5 +35,6 @@ class RLabelled(RPackage): depends_on("r-vctrs", type=("build", "run")) depends_on("r-stringr", type=("build", "run"), when="@2.9.0:") depends_on("r-tidyr", type=("build", "run")) + depends_on("r-tidyselect", type=("build", "run"), when="@2.13.0:") depends_on("r-pillar", type=("build", "run"), when="@:2.7.0") diff --git a/var/spack/repos/builtin/packages/r-later/package.py b/var/spack/repos/builtin/packages/r-later/package.py index 78f29762a9ee0d..0093ebf261d66f 100644 --- a/var/spack/repos/builtin/packages/r-later/package.py +++ b/var/spack/repos/builtin/packages/r-later/package.py @@ -16,6 +16,7 @@ class RLater(RPackage): license("MIT") + version("1.3.2", sha256="52f5073d33cd0d3c12e56526c9c53c323ebafcc79b22cc6e51fb0c41ee2b561e") version("1.3.0", sha256="08f50882ca3cfd2bb68c83f1fcfbc8f696f5cfb5a42c1448c051540693789829") version("1.1.0.1", sha256="71baa7beae774a35a117e01d7b95698511c3cdc5eea36e29732ff1fe8f1436cd") version("0.8.0", sha256="6b2a28b43c619b2c7890840c62145cd3a34a7ed65b31207fdedde52efb00e521") diff --git a/var/spack/repos/builtin/packages/r-lattice/package.py b/var/spack/repos/builtin/packages/r-lattice/package.py index 78c7afeb11b87a..ed00c72206705e 100644 --- a/var/spack/repos/builtin/packages/r-lattice/package.py +++ b/var/spack/repos/builtin/packages/r-lattice/package.py @@ -18,6 +18,7 @@ class RLattice(RPackage): license("GPL-2.0-or-later") + version("0.22-6", sha256="4b377211e472ece7872b9d6759f9b9c660b09594500462eb6146312a1d4d00f7") version("0.21-8", sha256="8ad3d6974262e6cab6cc8fec38aa279b5b2f2524adf6f3eab56f68302b60c329") version("0.20-45", sha256="22388d92bdb7d3959da84d7308d9026dd8226ef07580783729e8ad2f7d7507ad") version("0.20-44", sha256="57b908e3c7ada08a38ad857ee44f44fdf9cfa59d5d9500bda2ccc9c7e96cdb9b") diff --git a/var/spack/repos/builtin/packages/r-lava/package.py b/var/spack/repos/builtin/packages/r-lava/package.py index 25c4232c2beba6..e6488a566d15e6 100644 --- a/var/spack/repos/builtin/packages/r-lava/package.py +++ b/var/spack/repos/builtin/packages/r-lava/package.py @@ -23,6 +23,7 @@ class RLava(RPackage): license("GPL-3.0-only") + version("1.8.0", sha256="8db996eeca012c58736f2d3b97f569c03e9361e20f31513c090a9386eb87e87f") version("1.7.2.1", sha256="d42b1f5c7e4e76718e4f014c44608295f82b5de0eb25ce8e9b35c40c7839ef2e") version("1.7.0", sha256="3078da69f3828812bcd093acc2d1cd2c8cbc8480d81da222ae49a55bcb2e5e24") version("1.6.10", sha256="7a88f8a885872e2abb3011c446e9e1c4884cd4dbe6ab4cfe9207538e5560232e") @@ -32,6 +33,7 @@ class RLava(RPackage): version("1.4.7", sha256="d5cbd4835a94855478efb93051eece965db116ead203f4dd4e09d9a12d52f4bf") depends_on("r@3.0:", type=("build", "run")) + depends_on("r-cli", type=("build", "run"), when="@1.7.4:") depends_on("r-future-apply", type=("build", "run"), when="@1.6.10:") depends_on("r-progressr", type=("build", "run"), when="@1.6.10:") depends_on("r-numderiv", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-lavaan/package.py b/var/spack/repos/builtin/packages/r-lavaan/package.py index a1361283d1a7e9..abd18dcc20214a 100644 --- a/var/spack/repos/builtin/packages/r-lavaan/package.py +++ b/var/spack/repos/builtin/packages/r-lavaan/package.py @@ -16,6 +16,7 @@ class RLavaan(RPackage): license("GPL-2.0-or-later") + version("0.6-18", sha256="b907cacd6c4a2320138cb2206f17b60acf077453540bcb9cc94659fc9a48df51") version("0.6-15", sha256="9a43f3e999f9b3003a8c46a615902e01d6701d28a871d657751dd2ff3928ed9b") version("0.6-12", sha256="8048273e4102f8355ba123c8aff94a9e5a8e9ac9e02a73e986b106ceed4d079e") version("0.6-11", sha256="2cc193b82463a865cd8dadb7332409fdebf47e4035d5fe8dbf3414a7ae18d308") diff --git a/var/spack/repos/builtin/packages/r-leafem/package.py b/var/spack/repos/builtin/packages/r-leafem/package.py index 6a1ebaa35f5607..22feaf3df6f757 100644 --- a/var/spack/repos/builtin/packages/r-leafem/package.py +++ b/var/spack/repos/builtin/packages/r-leafem/package.py @@ -20,6 +20,7 @@ class RLeafem(RPackage): license("MIT") + version("0.2.3", sha256="defd5baa4383da4182e97d41145c7a9633a987de05c465eb99a7a452fbf375e3") version("0.2.0", sha256="97eb78b3eaf6012940f2c4f73effd8ff2d39aa46fef5f2ddf0005990b07dba8d") version("0.1.6", sha256="ca50e0a699f564449248511857a2df0d48cd07de3157e099478a19b533088156") version("0.1.3", sha256="6f123fc15efadb85d317c01003e3b7af5dc925cffe0bbe774b1b39b6bd67f304") diff --git a/var/spack/repos/builtin/packages/r-leaflet-providers/package.py b/var/spack/repos/builtin/packages/r-leaflet-providers/package.py index 6d3f39a792375b..725c0e21a19e07 100644 --- a/var/spack/repos/builtin/packages/r-leaflet-providers/package.py +++ b/var/spack/repos/builtin/packages/r-leaflet-providers/package.py @@ -18,6 +18,9 @@ class RLeafletProviders(RPackage): license("BSD-2-Clause") + version("2.0.0", sha256="c5ceeadc8088c9840a8249f0347501cdba0119be97219a01ea2050d1dd4a8666") version("1.9.0", sha256="9e8fc75c83313ab24663c2e718135459599549ed6e7396086cacb44e36cfd67b") depends_on("r@2.10:", type=("build", "run")) + + depends_on("r-htmltools", type=("build", "run"), when="@2.0.0:") diff --git a/var/spack/repos/builtin/packages/r-leaflet/package.py b/var/spack/repos/builtin/packages/r-leaflet/package.py index 7b17cf605c4ddb..2697b1eb836ab5 100644 --- a/var/spack/repos/builtin/packages/r-leaflet/package.py +++ b/var/spack/repos/builtin/packages/r-leaflet/package.py @@ -17,6 +17,7 @@ class RLeaflet(RPackage): license("GPL-3.0-only") + version("2.2.2", sha256="d2877b8d394116cc648456a828c5b825728be6a7afbbb3d55cc142c91a1ab8eb") version("2.1.2", sha256="26d8671e8c99d85a4c257d8fb8c07ba899a2b95f801652598578f5cc5c724039") version("2.1.1", sha256="32f6a043759a0d2d98ea05739b7b4c55a266aa01272e48243e3c44046c7a5677") version("2.0.4.1", sha256="b0f038295f1de5d32d9ffa1d0dbc1562320190f2f1365f3a5e95863fff88901f") @@ -25,17 +26,23 @@ class RLeaflet(RPackage): version("1.0.1", sha256="f25a8e10c9616ccb5504bb874c533bc44fb7e438e073d4fe4484dee0951a9bc3") depends_on("r@3.1.0:", type=("build", "run")) - depends_on("r-base64enc", type=("build", "run")) depends_on("r-crosstalk", type=("build", "run"), when="@2.0.0:") depends_on("r-htmlwidgets", type=("build", "run")) depends_on("r-htmlwidgets@1.5.4:", type=("build", "run"), when="@2.1.1:") depends_on("r-htmltools", type=("build", "run")) + depends_on("r-jquerylib", type=("build", "run"), when="@2.2.0:") + depends_on("r-leaflet-providers@1.8.0:", type=("build", "run"), when="@2.0.4.1:") + depends_on("r-leaflet-providers@2.0.0:", type=("build", "run"), when="@2.2.0:") depends_on("r-magrittr", type=("build", "run")) - depends_on("r-markdown", type=("build", "run")) depends_on("r-png", type=("build", "run")) depends_on("r-rcolorbrewer", type=("build", "run")) depends_on("r-raster", type=("build", "run")) + depends_on("r-raster@3.6.3:", type=("build", "run"), when="@2.2.0:") depends_on("r-scales@1.0.0:", type=("build", "run")) depends_on("r-sp", type=("build", "run")) - depends_on("r-viridis@0.5.1:", type=("build", "run"), when="@2.0.0:") - depends_on("r-leaflet-providers@1.8.0:", type=("build", "run"), when="@2.0.4.1:") + depends_on("r-viridislite", type=("build", "run"), when="@2.2.0:") + depends_on("r-xfun", type=("build", "run"), when="@2.2.0:") + + depends_on("r-base64enc", type=("build", "run"), when="@:2.1.2") + depends_on("r-markdown", type=("build", "run"), when="@:2.1.2") + depends_on("r-viridis@0.5.1:", type=("build", "run"), when="@2.0.0:2.1.2") diff --git a/var/spack/repos/builtin/packages/r-leaps/package.py b/var/spack/repos/builtin/packages/r-leaps/package.py index ee2ae5752b582d..fd8f9095f0cb51 100644 --- a/var/spack/repos/builtin/packages/r-leaps/package.py +++ b/var/spack/repos/builtin/packages/r-leaps/package.py @@ -15,5 +15,6 @@ class RLeaps(RPackage): license("GPL-2.0-or-later") + version("3.2", sha256="a0d6bebb676e5cdc0ecf3e3a07163ce0d60b6fe72a083d91f0413e11a8a96fad") version("3.1", sha256="3d7c3a102ce68433ecf167ece96a7ebb4207729e4defd0ac8fc00e7003f5c3b6") version("3.0", sha256="55a879cdad5a4c9bc3b5697dd4d364b3a094a49d8facb6692f5ce6af82adf285") diff --git a/var/spack/repos/builtin/packages/r-leiden/package.py b/var/spack/repos/builtin/packages/r-leiden/package.py index 045f47f7f5d4fd..17abea1f72de09 100644 --- a/var/spack/repos/builtin/packages/r-leiden/package.py +++ b/var/spack/repos/builtin/packages/r-leiden/package.py @@ -19,6 +19,7 @@ class RLeiden(RPackage): license("GPL-3.0-only OR custom") + version("0.4.3.1", sha256="a9ecbbcfa2724d8fdd0133af569278e036b25b6e2cbb23d453092cc6b3fc30e2") version("0.4.3", sha256="6a464b4b860e621749b3b701bb7ceb07e23c1a36be241c3e13b18105eb980938") version("0.4.2", sha256="cace86748c4aa1720508210658ee2f63f7875be5bac215084001fdc59d22e2bd") version("0.3.9", sha256="81754276e026a9a8436476365bbadf0f15a403a525a349cb56418da5d8edea0d") diff --git a/var/spack/repos/builtin/packages/r-lfe/package.py b/var/spack/repos/builtin/packages/r-lfe/package.py index fc00f5b69d04f5..0fc064e6a4f74c 100644 --- a/var/spack/repos/builtin/packages/r-lfe/package.py +++ b/var/spack/repos/builtin/packages/r-lfe/package.py @@ -24,6 +24,7 @@ class RLfe(RPackage): license("Artistic-2.0") + version("3.0-0", sha256="342d05c32932d0db755c35a7e27da1001a38e375866c6f61a18259faf0430399") version("2.9-0", sha256="7c9a9cd74ad98c65b67477eb6924409d7e372d01d7ed50fa2edb6fa34e02223c") version("2.8-8", sha256="0fc22928fa16f22ee66c8e426a0e994346ad2f67b3c5aea597f3eeffbd85ab71") version("2.8-7.1", sha256="d6a1efd8c43f84fa291e4959938f16e85bf5feef113515aaca1fe90075a78c50") diff --git a/var/spack/repos/builtin/packages/r-lhs/package.py b/var/spack/repos/builtin/packages/r-lhs/package.py index b04915a5a2d87d..7277c6a42daaf7 100644 --- a/var/spack/repos/builtin/packages/r-lhs/package.py +++ b/var/spack/repos/builtin/packages/r-lhs/package.py @@ -16,6 +16,7 @@ class RLhs(RPackage): license("GPL-3.0-only") + version("1.2.0", sha256="6b4b773c6b322f1ffb3e2ef49c244ec8a3958a0346a1cc8f42f0d0951e8b0724") version("1.1.6", sha256="e37fce44efe6a371677ba2f72f9e1e48270a0fdc60872d05def89270586cd23f") version("1.1.5", sha256="7a3c6fdcc953490e51026e17a0b1a9dc0ca8d03e6fc989457a7cdda2075b6339") version("1.1.3", sha256="e43b8d48db1cf26013697e2a798ed1d31d1ee1790f2ebfecb280176c0e0c06d1") diff --git a/var/spack/repos/builtin/packages/r-libcoin/package.py b/var/spack/repos/builtin/packages/r-libcoin/package.py index 34c66ac1f80a3e..b22b63182d8eb3 100644 --- a/var/spack/repos/builtin/packages/r-libcoin/package.py +++ b/var/spack/repos/builtin/packages/r-libcoin/package.py @@ -18,6 +18,7 @@ class RLibcoin(RPackage): license("GPL-2.0-only") + version("1.0-10", sha256="3023e0495d0789765bdf04c0ef0990a57b48fefa322c55f20e250d2d70d67eaf") version("1.0-9", sha256="2d7dd0b7c6dfc20472430570419ea36a714da7bbafd336da1fb53c5c6463d9eb") version("1.0-6", sha256="48afc1415fc89b29e4f2c8b6f6db3cffef1531580e5c806ad7cacf4afe6a4e5a") version("1.0-4", sha256="91dcbaa0ab8c2109aa54c3eda29ad0acd67c870efcda208e27acce9d641c09c5") diff --git a/var/spack/repos/builtin/packages/r-lifecycle/package.py b/var/spack/repos/builtin/packages/r-lifecycle/package.py index 6a72cd526ae15b..4ef0c7327b42d4 100644 --- a/var/spack/repos/builtin/packages/r-lifecycle/package.py +++ b/var/spack/repos/builtin/packages/r-lifecycle/package.py @@ -22,6 +22,7 @@ class RLifecycle(RPackage): license("MIT") + version("1.0.4", sha256="ada4d3c7e84b0c93105e888647c5754219a8334f6e1f82d5afaf83d4855b91cc") version("1.0.3", sha256="6459fdc3211585c0cdf120427579c12149b02161efe273a64b825c05e9aa69c2") version("1.0.1", sha256="1da76e1c00f1be96ca34e122ae611259430bf99d6a1b999fdef70c00c30f7ba0") version("0.2.0", sha256="29746e8dee05d4e36f9c612e8c7a903a4f648a36b3b94c9776e518c38a412224") @@ -29,7 +30,9 @@ class RLifecycle(RPackage): depends_on("r@3.2:", type=("build", "run")) depends_on("r@3.3:", type=("build", "run"), when="@1:") depends_on("r@3.4:", type=("build", "run"), when="@1.0.3:") + depends_on("r@3.6:", type=("build", "run"), when="@1.0.4:") depends_on("r-cli@3.4.0:", type=("build", "run"), when="@1.0.3:") depends_on("r-glue", type=("build", "run")) depends_on("r-rlang@0.4.0:", type=("build", "run")) depends_on("r-rlang@1.0.6:", type=("build", "run"), when="@1.0.3:") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.0.4:") diff --git a/var/spack/repos/builtin/packages/r-limsolve/package.py b/var/spack/repos/builtin/packages/r-limsolve/package.py index ae67f10b813fbf..2d042d4e43c85b 100644 --- a/var/spack/repos/builtin/packages/r-limsolve/package.py +++ b/var/spack/repos/builtin/packages/r-limsolve/package.py @@ -18,6 +18,7 @@ class RLimsolve(RPackage): cran = "limSolve" + version("1.5.7.1", sha256="a5945217bbf512724297883f8d7c65846a11202266b2b6bb3355372935e85b92") version("1.5.6", sha256="b97ea9930383634c8112cdbc42f71c4e93fe0e7bfaa8f401921835cb44cb49a0") depends_on("r@2.10:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-list/package.py b/var/spack/repos/builtin/packages/r-list/package.py new file mode 100644 index 00000000000000..25113da7b65aa9 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-list/package.py @@ -0,0 +1,30 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RList(RPackage): + """Allows researchers to conduct multivariate statistical analyses + of survey data with list experiments.""" + + homepage = "https://cran.r-project.org/web/packages/list/index.html" + cran = "list" + + license("GPL-2.0-or-later", checked_by="wdconinc") + + version("9.2.6", sha256="6a2b1dd9cdee87d739605fb38463cb6e04680c94b73f51fbd39b5552a62432e4") + + depends_on("r@3.2.0:", type=("build", "run")) + depends_on("r-sandwich@2.3-3:", type=("build", "run")) + depends_on("r-vgam@0.9-8:", type=("build", "run")) + depends_on("r-magic@1.5-6:", type=("build", "run")) + depends_on("r-gamlss-dist@4.3-4:", type=("build", "run")) + depends_on("r-mass@7.3-40:", type=("build", "run")) + depends_on("r-quadprog@1.5-5:", type=("build", "run")) + depends_on("r-corpcor@1.6.7:", type=("build", "run")) + depends_on("r-mvtnorm@1.0-2:", type=("build", "run")) + depends_on("r-coda@0.17-1:", type=("build", "run")) + depends_on("r-arm", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-listenv/package.py b/var/spack/repos/builtin/packages/r-listenv/package.py index d9370a0b79b499..568202242fdc86 100644 --- a/var/spack/repos/builtin/packages/r-listenv/package.py +++ b/var/spack/repos/builtin/packages/r-listenv/package.py @@ -17,6 +17,7 @@ class RListenv(RPackage): license("LGPL-2.1-or-later") + version("0.9.1", sha256="422aaf487b91c6512b83c05536f8dac255db79b16ee85254acc59a3fda8c1c3b") version("0.9.0", sha256="352841e04f0725d361b78cfdc75e00511f740d97237dd651ea86aa5484674887") version("0.8.0", sha256="fd2aaf3ff2d8d546ce33d1cb38e68401613975117c1f9eb98a7b41facf5c485f") version("0.7.0", sha256="6126020b111870baea08b36afa82777cd578e88c17db5435cd137f11b3964555") diff --git a/var/spack/repos/builtin/packages/r-lme4/package.py b/var/spack/repos/builtin/packages/r-lme4/package.py index cff157fee17a2d..024091b3a1bd35 100644 --- a/var/spack/repos/builtin/packages/r-lme4/package.py +++ b/var/spack/repos/builtin/packages/r-lme4/package.py @@ -18,6 +18,7 @@ class RLme4(RPackage): license("GPL-2.0-or-later") + version("1.1-35.5", sha256="7d6664db7ea96429562efe1058da58985d779d6fe79ec6f4e86ba68047135170") version("1.1-33", sha256="d956a5ed7cbcc016114a836bad89acf6cdafcd0f82a7d85e3805ced936b40910") version("1.1-31", sha256="5affd1e33d3fece5ec0a6c7663eb12328e64147f8aa92675ce6453c4fe72edfd") version("1.1-30", sha256="fdabdfc4b64cff05ae9506a766c948a953eeb6db71761f9401b36d6d9979300f") @@ -32,7 +33,9 @@ class RLme4(RPackage): depends_on("r@3.0.2:", type=("build", "run")) depends_on("r@3.2.0:", type=("build", "run"), when="@1.1-16:") depends_on("r@3.5.0:", type=("build", "run"), when="@1.1-31:") + depends_on("r@3.6.0:", type=("build", "run"), when="@1.1-35.5:") depends_on("r-matrix@1.2-1:", type=("build", "run")) + depends_on("r-matrix@1.2-3:", type=("build", "run"), when="@1.1-35.5:") depends_on("r-mass", type=("build", "run")) depends_on("r-lattice", type=("build", "run")) depends_on("r-boot", type=("build", "run"), when="@1.1-21:") @@ -41,5 +44,6 @@ class RLme4(RPackage): depends_on("r-nloptr@1.0.4:", type=("build", "run")) depends_on("r-rcpp@0.10.5:", type=("build", "run")) depends_on("r-rcppeigen", type=("build", "run")) + depends_on("r-rcppeigen@0.3.3.9.4:", type=("build", "run"), when="@1.1-35.1:") depends_on("r-statmod", type=("build", "run"), when="@1.1-26") diff --git a/var/spack/repos/builtin/packages/r-locfit/package.py b/var/spack/repos/builtin/packages/r-locfit/package.py index 932e614ba5fe22..8f0bbe58bb0d0f 100644 --- a/var/spack/repos/builtin/packages/r-locfit/package.py +++ b/var/spack/repos/builtin/packages/r-locfit/package.py @@ -16,6 +16,7 @@ class RLocfit(RPackage): license("GPL-2.0-or-later") + version("1.5-9.10", sha256="4c20661814993a87ca435f42b0814bacb87c5a9ccc2ff55e4cae718cb176ac06") version("1.5-9.7", sha256="48e5fcd089fbc609d8e4c62c390425fba1dd167ad95ae0bddc175cbbe1517aff") version("1.5-9.6", sha256="1ee89e4003cb769feae61ada7ac0a971df30644824f7ed84a21dd5719f713476") version("1.5-9.5", sha256="fd9f2bad9d8beec8be4843dc80e38ebe0f388835a7003490f67e57eeb9e6de23") diff --git a/var/spack/repos/builtin/packages/r-loo/package.py b/var/spack/repos/builtin/packages/r-loo/package.py index 68f9e89684aefd..909a7fd95d6a7e 100644 --- a/var/spack/repos/builtin/packages/r-loo/package.py +++ b/var/spack/repos/builtin/packages/r-loo/package.py @@ -24,6 +24,7 @@ class RLoo(RPackage): license("GPL-3.0-or-later") + version("2.8.0", sha256="aab727a95a2e1c0e5005188e7daa6eba52455fa0c5869130d53cee5a8963244c") version("2.6.0", sha256="66da60fdf53a62cbc93797fa696a4cc43bce77f1721dd4bc1a58d25b3f981210") version("2.5.1", sha256="866a2f54a4e8726cc3062e27daa8a073e6ac4aeb6719af7845284f7a668745f1") version("2.4.1", sha256="bc21fb6b4a93a7e95ee1be57e4e787d731895fb8b4743c26b30b43adee475b50") @@ -35,4 +36,5 @@ class RLoo(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r-checkmate", type=("build", "run")) depends_on("r-matrixstats@0.52:", type=("build", "run")) + depends_on("r-posterior@1.5.0:", type=("build", "run"), when="@2.7.0:") depends_on("pandoc@1.12.3:") diff --git a/var/spack/repos/builtin/packages/r-lpsolve/package.py b/var/spack/repos/builtin/packages/r-lpsolve/package.py index 01847c815886ce..208dbf496237fb 100644 --- a/var/spack/repos/builtin/packages/r-lpsolve/package.py +++ b/var/spack/repos/builtin/packages/r-lpsolve/package.py @@ -17,6 +17,7 @@ class RLpsolve(RPackage): cran = "lpSolve" + version("5.6.20", sha256="3ffe06a0685123c36cd306b874f89a59a70c864c8f78c5569f82a86abedc21db") version("5.6.18", sha256="751e1926fcd81b852b6c0d5ea7ecd9311ef6fbdbce9143b7872fea79590de712") version("5.6.17", sha256="f725802bd9dc05c6913daf48f2458441ad4d2996056d0942737886d8b76c9288") version("5.6.16", sha256="18a11e5184914e02b056d3d8f54ad92e4bbce651d930d61430570b4ae2ecbb2a") diff --git a/var/spack/repos/builtin/packages/r-lpsolveapi/package.py b/var/spack/repos/builtin/packages/r-lpsolveapi/package.py index 3e313013b17d7f..9018b79f2c8f14 100644 --- a/var/spack/repos/builtin/packages/r-lpsolveapi/package.py +++ b/var/spack/repos/builtin/packages/r-lpsolveapi/package.py @@ -16,6 +16,9 @@ class RLpsolveapi(RPackage): cran = "lpSolveAPI" + version( + "5.5.2.0-17.12", sha256="4f00a9d27055ddf3e2a4b0a529b720861b9f916f2ceb1fe0b71e4c52da5b70ef" + ) version( "5.5.2.0-17.9", sha256="7b52ecf3f1174f771fe24e62502be6d31acc3e48a12473e35ad0a89fc2517811" ) diff --git a/var/spack/repos/builtin/packages/r-lubridate/package.py b/var/spack/repos/builtin/packages/r-lubridate/package.py index f3ea109ef55c62..a2b37be10874df 100644 --- a/var/spack/repos/builtin/packages/r-lubridate/package.py +++ b/var/spack/repos/builtin/packages/r-lubridate/package.py @@ -20,6 +20,7 @@ class RLubridate(RPackage): license("GPL-2.0-or-later") + version("1.9.3", sha256="2b6e1406d231b0a14d60b99cc406d159fea5465a5694725ad25343f12cf37fff") version("1.9.2", sha256="8976431a4affe989261cbaa5e09cd44bb42a3b16eed59a42c1698da34c6544a7") version("1.9.0", sha256="b936041f8a71894ef930cfff61b45833e0dd148b5b16697f4f541d25b31a903a") version("1.8.0", sha256="87d66efdb1f3d680db381d7e40a202d35645865a0542e2f270ef008a19002ba5") diff --git a/var/spack/repos/builtin/packages/r-lwgeom/package.py b/var/spack/repos/builtin/packages/r-lwgeom/package.py index c25ea73c5d5419..2b09ba6336888f 100644 --- a/var/spack/repos/builtin/packages/r-lwgeom/package.py +++ b/var/spack/repos/builtin/packages/r-lwgeom/package.py @@ -17,6 +17,7 @@ class RLwgeom(RPackage): license("GPL-2.0-only") + version("0.2-14", sha256="26db6cf7dbc8cf43a70e5e2a34941a1c4b65e182f86f58d64ff9f614b3be929c") version("0.2-11", sha256="7fd73cf58981f9566d946bf63ed6575ea0c70634abeaf4e60ef9615040d63419") version("0.2-9", sha256="69b2a2efdafb0b32c801932eee7cd2c4b8402cede6487f4dfea4e14873091aa8") version("0.2-8", sha256="f48a92de222da0590b37a30d5cbf2364555044a842795f6b488afecc650b8b34") @@ -25,8 +26,10 @@ class RLwgeom(RPackage): depends_on("r@3.3.0:", type=("build", "run")) depends_on("r-rcpp", type=("build", "run")) depends_on("r-units", type=("build", "run")) - depends_on("r-sf@0.9-3:", type=("build", "run")) - depends_on("r-sf@0.6-0:", type=("build", "run"), when="@0.2-9:") + depends_on("r-sf@0.6-0:", type=("build", "run"), when="@0.1-3:") + depends_on("r-sf@0.9-0:", type=("build", "run"), when="@0.2-2:") + depends_on("r-sf@0.9-3:", type=("build", "run"), when="@0.2-4:") + depends_on("r-sf@1.0-15:", type=("build", "run"), when="@0.2-14:") depends_on("geos@3.5.0:") depends_on("proj@4.8.0:6.999") depends_on("sqlite", when="@0.2-8:") diff --git a/var/spack/repos/builtin/packages/r-magick/package.py b/var/spack/repos/builtin/packages/r-magick/package.py index c722a4b67cdcd6..f8f507f93f4ee0 100644 --- a/var/spack/repos/builtin/packages/r-magick/package.py +++ b/var/spack/repos/builtin/packages/r-magick/package.py @@ -24,6 +24,7 @@ class RMagick(RPackage): license("MIT") + version("2.8.4", sha256="45c803370f0d96b729db8114b3e2187cbe6fac13133b67b96a91c8eae734ea0a") version("2.7.4", sha256="e28d67737590f8c19e4cf00a9c74e59d0e45f9ece363ed105b5f40e821e8f02f") version("2.7.3", sha256="83877b2e23ea43fbc1164de9c2422eafbe7858393ac384df5adf3a7eec122441") version("2.6.0", sha256="66585336e3ff18793ae9e2726af67a6672622f270468670ab5fe5e013bc48ecc") diff --git a/var/spack/repos/builtin/packages/r-maldiquant/package.py b/var/spack/repos/builtin/packages/r-maldiquant/package.py index 3d646cd433c5c9..baf6e8c6a16971 100644 --- a/var/spack/repos/builtin/packages/r-maldiquant/package.py +++ b/var/spack/repos/builtin/packages/r-maldiquant/package.py @@ -20,6 +20,7 @@ class RMaldiquant(RPackage): cran = "MALDIquant" + version("1.22.3", sha256="fd094f0ea1a163ad1bd290e789ad827a76075d82ae5ce8a8e53a7095a7479383") version("1.22.1", sha256="0a52a55dbe76a7e7ca50c5555fea4381eeda0c215c66e420d8dc9bfd2992411c") version("1.21", sha256="0771f82034aa6a77af67f3572c900987b7e6b578d04d707c6e06689d021a2ff8") version("1.19.3", sha256="a730327c1f8d053d29e558636736b7b66d0671a009e0004720b869d2c76ff32c") diff --git a/var/spack/repos/builtin/packages/r-mapplots/package.py b/var/spack/repos/builtin/packages/r-mapplots/package.py index f19a3424c1f2e9..4ec8d101b21783 100644 --- a/var/spack/repos/builtin/packages/r-mapplots/package.py +++ b/var/spack/repos/builtin/packages/r-mapplots/package.py @@ -18,6 +18,7 @@ class RMapplots(RPackage): license("GPL-2.0-or-later") + version("1.5.2", sha256="ed0e151d6865549d1a10882984a7fb29bc89a7b94ad69e512f90937b981c8a18") version("1.5.1", sha256="37e96d34f37922180e07bb63b4514e07d42eee5bbf0885b278286ee48cf142a3") depends_on("r@2.10.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-maps/package.py b/var/spack/repos/builtin/packages/r-maps/package.py index b6b6e19dc51794..13840200da6784 100644 --- a/var/spack/repos/builtin/packages/r-maps/package.py +++ b/var/spack/repos/builtin/packages/r-maps/package.py @@ -16,6 +16,7 @@ class RMaps(RPackage): license("GPL-2.0-only") + version("3.4.2", sha256="53e57b889f1779cfd4a116a8ed3eded7ed29a73a1b9506248772a389c8404b0c") version("3.4.1", sha256="e693a5218ed8122e92d73a98a475d9016f2293c7852c8048677daa7649086400") version("3.4.0", sha256="7918ccb2393ca19589d4c4e77d9ebe863dc6317ebfc1ff41869dbfaf439f5747") version("3.3.0", sha256="199afe19a4edcef966ae79ef802f5dcc15a022f9c357fcb8cae8925fe8bd2216") diff --git a/var/spack/repos/builtin/packages/r-maptools/package.py b/var/spack/repos/builtin/packages/r-maptools/package.py index 8ca517229139e6..00278c11b817e3 100644 --- a/var/spack/repos/builtin/packages/r-maptools/package.py +++ b/var/spack/repos/builtin/packages/r-maptools/package.py @@ -17,6 +17,7 @@ class RMaptools(RPackage): cran = "maptools" + version("1.1-8", sha256="5e8579e3f559161935f1dde622ece703eefa2a28a677ce553d7f27611e66e0f7") version( "1.1-6", sha256="d6a5df52db03b2231f21921b693c67f85df3c3b376181aa13ef4f21710f69308", diff --git a/var/spack/repos/builtin/packages/r-mapview/package.py b/var/spack/repos/builtin/packages/r-mapview/package.py index aa7f0dc717b86c..47f23046d54658 100644 --- a/var/spack/repos/builtin/packages/r-mapview/package.py +++ b/var/spack/repos/builtin/packages/r-mapview/package.py @@ -18,6 +18,7 @@ class RMapview(RPackage): license("GPL-3.0-or-later OR custom") + version("2.11.2", sha256="414d7f732b3aaf62005e279d7b0febf50aed2183bf05522c4fccaa92117328b0") version("2.11.0", sha256="87f8cf562a0918201082a743438b9af47429bdb8871511235d72505107f4d30a") version("2.10.0", sha256="b597902c654b9abf1163bb9d4f1044fef85d0a52c8dc6538ca46b0024f63baaa") version("2.9.0", sha256="170cb2b5e67cbeb177f87bd2eab1ecabc44a1042addbcd95a85b2ec4a00eb690") @@ -33,10 +34,12 @@ class RMapview(RPackage): depends_on("r-leafpop", type=("build", "run")) depends_on("r-png", type=("build", "run")) depends_on("r-raster", type=("build", "run")) + depends_on("r-raster@3.6.3:", type=("build", "run"), when="@2.11.2:") depends_on("r-satellite", type=("build", "run")) depends_on("r-scales@0.2.5:", type=("build", "run")) depends_on("r-servr", type=("build", "run"), when="@2.10.0:") depends_on("r-sf", type=("build", "run")) depends_on("r-sp", type=("build", "run")) - depends_on("r-webshot", type=("build", "run")) depends_on("gmake", type="build") + + depends_on("r-webshot", type=("build", "run"), when="@:2.11.0") diff --git a/var/spack/repos/builtin/packages/r-markdown/package.py b/var/spack/repos/builtin/packages/r-markdown/package.py index 2453101e8ecc16..6f3ed794bbd62b 100644 --- a/var/spack/repos/builtin/packages/r-markdown/package.py +++ b/var/spack/repos/builtin/packages/r-markdown/package.py @@ -19,6 +19,7 @@ class RMarkdown(RPackage): license("MIT") + version("1.13", sha256="385421c674cf5bf2ba04d1df7c16bb5d857bec03755a36321999ac37f5b3cfd9") version("1.6", sha256="46228b8d8161ae4b651b4662364eb35a3b91e6a7a457fe99d0e709f2a6f559ea") version("1.3", sha256="b1773e94e7b927c3a8540c2704b06e0f7721a0e3538a93abd58fff420ecb30f1") version("1.1", sha256="8d8cd47472a37362e615dbb8865c3780d7b7db694d59050e19312f126e5efc1b") diff --git a/var/spack/repos/builtin/packages/r-mass/package.py b/var/spack/repos/builtin/packages/r-mass/package.py index 035d1ed9007e9a..4120bc3c4d1d11 100644 --- a/var/spack/repos/builtin/packages/r-mass/package.py +++ b/var/spack/repos/builtin/packages/r-mass/package.py @@ -14,6 +14,7 @@ class RMass(RPackage): cran = "MASS" + version("7.3-61", sha256="3144c8bf579dd7b7c47c259728c27f53f53e294e7ed307da434dfd144e800a90") version("7.3-59", sha256="454200bec7a52835fbb7f9fe8e01a7aaa728b3ab87b068fc6d900e01c930da5a") version("7.3-58.1", sha256="f704e4e2fb131740d023ae1755c925c2e684886a3061b08e26397135f1231420") version("7.3-57", sha256="bd8b880105bc1aadb2db699086f74bd92a8611287979a24243187f9d80795a8d") @@ -28,3 +29,4 @@ class RMass(RPackage): depends_on("r@3.1.0:", type=("build", "run")) depends_on("r@3.3.0:", type=("build", "run"), when="@7.3-55:") depends_on("r@4.2.0:", type=("build", "run"), when="@7.3-59:") + depends_on("r@4.4.0:", type=("build", "run"), when="@7.3-60.1:") diff --git a/var/spack/repos/builtin/packages/r-matlab/package.py b/var/spack/repos/builtin/packages/r-matlab/package.py index 1483e712473cd4..f0b0666a19effa 100644 --- a/var/spack/repos/builtin/packages/r-matlab/package.py +++ b/var/spack/repos/builtin/packages/r-matlab/package.py @@ -15,6 +15,7 @@ class RMatlab(RPackage): license("Artistic-2.0") + version("1.0.4.1", sha256="fc3fba560b73a9bf0a4f317340856c91af2c9dcc80f5df291f3f7e6d6ac4fd50") version("1.0.4", sha256="1988a2220703444a575f2bad4eb090a0da71478599eb53081dd7237b7ec216ea") version("1.0.2", sha256="a23dec736c51ae1864c1a53caac556a2f98e8020138a3b121badb0f5b7984154") diff --git a/var/spack/repos/builtin/packages/r-matrix/package.py b/var/spack/repos/builtin/packages/r-matrix/package.py index 16dbc8fe2f7cd9..a2d8cda3aa2754 100644 --- a/var/spack/repos/builtin/packages/r-matrix/package.py +++ b/var/spack/repos/builtin/packages/r-matrix/package.py @@ -18,6 +18,7 @@ class RMatrix(RPackage): license("GPL-3.0-only") + version("1.7-0", sha256="fb97bba0df370222eb4f7e2da2e94dd01053b5e054b1c51829ff9a6efc08ad37") version("1.5-4", sha256="15ceb61993d61b442068104abb46e6d91b5a1179c01eeb64563b853abab66f06") version("1.5-1", sha256="557dba0358172d67dc63eb5db90841915bb5ce1528f941a8005ae808d635575d") version("1.4-1", sha256="42b24f1d1e94482b0ff0ef1292e2df29f69694bdbee47b3d6bfeec46fafb2f7e") @@ -32,7 +33,8 @@ class RMatrix(RPackage): version("1.2-6", sha256="4b49b639b7bf612fa3d1c1b1c68125ec7859c8cdadae0c13f499f24099fd5f20") depends_on("r@3.0.1:", type=("build", "run")) - depends_on("r@3.2.0:", type=("build", "run"), when="@1.2.13:") + depends_on("r@3.2.0:", type=("build", "run"), when="@1.2-13:") depends_on("r@3.6.0:", type=("build", "run"), when="@1.3-2:") depends_on("r@3.5.0:", type=("build", "run"), when="@1.3-3:") + depends_on("r@4.4.0:", type=("build", "run"), when="@1.7-0:") depends_on("r-lattice", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-matrixmodels/package.py b/var/spack/repos/builtin/packages/r-matrixmodels/package.py index ead6d5734c31cb..d5839d1ec77a7c 100644 --- a/var/spack/repos/builtin/packages/r-matrixmodels/package.py +++ b/var/spack/repos/builtin/packages/r-matrixmodels/package.py @@ -14,6 +14,7 @@ class RMatrixmodels(RPackage): cran = "MatrixModels" + version("0.5-3", sha256="c2db5406c6b0b9d348b44eea215a39c64fc087099fea1342a04d50326577f20f") version("0.5-1", sha256="3fc55bdfa5ab40c75bf395e90983d14c9715078c33c727c1658e4e1f36e43ea9") version("0.5-0", sha256="a87faf1a185219f79ea2307e6787d293e1d30bf3af9398e8cfe1e079978946ed") version("0.4-1", sha256="fe878e401e697992a480cd146421c3a10fa331f6b37a51bac83b5c1119dcce33") @@ -22,3 +23,4 @@ class RMatrixmodels(RPackage): depends_on("r@3.6.0:", type=("build", "run"), when="@0.5-1:") depends_on("r-matrix@1.1-5:", type=("build", "run")) depends_on("r-matrix@1.4-2:", type=("build", "run"), when="@0.5-1:") + depends_on("r-matrix@1.6-0:", type=("build", "run"), when="@0.5-2:") diff --git a/var/spack/repos/builtin/packages/r-matrixstats/package.py b/var/spack/repos/builtin/packages/r-matrixstats/package.py index aeb8639d0862ff..5a90d3d3337f3f 100644 --- a/var/spack/repos/builtin/packages/r-matrixstats/package.py +++ b/var/spack/repos/builtin/packages/r-matrixstats/package.py @@ -17,6 +17,7 @@ class RMatrixstats(RPackage): cran = "matrixStats" + version("1.3.0", sha256="413ee607d95b243c514b4a7c4944c2caea1fb264d27c96ff547c3939f893245a") version("0.63.0", sha256="c000b60421742eb035ff4ceedd3e588a79e4b28985484f0c81361e5a6c351f5f") version("0.62.0", sha256="85e2016b6dd20cbfe32d38a2ef2578ae80e688d9a3590aefd1d2f4bf4bd44eca") version("0.61.0", sha256="dbd3c0ec59b1ae62ff9b4c2c90c4687cbd680d1796f6fdd672319458d4d2fd9a") diff --git a/var/spack/repos/builtin/packages/r-mclust/package.py b/var/spack/repos/builtin/packages/r-mclust/package.py index 76ad0b7e0e52ee..4eb1b82d5c4fba 100644 --- a/var/spack/repos/builtin/packages/r-mclust/package.py +++ b/var/spack/repos/builtin/packages/r-mclust/package.py @@ -19,6 +19,7 @@ class RMclust(RPackage): license("GPL-2.0-or-later") + version("6.1.1", sha256="ddd7018e5e6ea7f92c7fc9872b391491b7e91c2cd89ef1dcaf4408afb5116775") version("6.0.0", sha256="de7c306ecba1ef0f4e4a56c748ce08149417496b711beefb032d561a4c28122a") version("5.4.10", sha256="2a1bbbf3c4a17df08d1ba8bc4d3c6d9c7241ed5fd68b8aabe660115597b60672") version("5.4.9", sha256="65f123c6af86cf5eb511c81ae0eafa60da7b2085bfea1a08bdc3116081da9568") diff --git a/var/spack/repos/builtin/packages/r-mcmc/package.py b/var/spack/repos/builtin/packages/r-mcmc/package.py index 3e32f58cefdc73..0b65a3ddbd6c91 100644 --- a/var/spack/repos/builtin/packages/r-mcmc/package.py +++ b/var/spack/repos/builtin/packages/r-mcmc/package.py @@ -21,6 +21,8 @@ class RMcmc(RPackage): license("MIT") + version("0.9-8", sha256="6a06440d4b58e8a7f122747d92046ff40da4bb58a20bf642228a648a0c826ea7") version("0.9-7", sha256="b7c4d3d5f9364c67a4a3cd49296a61c315ad9bd49324a22deccbacb314aa8260") depends_on("r@3.0.2:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@0.9-8:") diff --git a/var/spack/repos/builtin/packages/r-mcmcglmm/package.py b/var/spack/repos/builtin/packages/r-mcmcglmm/package.py index 7519f5075145a7..83cd8b62c2138e 100644 --- a/var/spack/repos/builtin/packages/r-mcmcglmm/package.py +++ b/var/spack/repos/builtin/packages/r-mcmcglmm/package.py @@ -15,6 +15,7 @@ class RMcmcglmm(RPackage): cran = "MCMCglmm" + version("2.36", sha256="66ffd9aaf8035c7abe7208c8514c60cb56c8c6a170de207d6608f5c44a4f8af1") version("2.34", sha256="829151cca93b05979ece98157e7789d5e5c1c0b4942d69aa9886de03d16091f1") version("2.33", sha256="b56d72e799f8ed5fa2a05ecc743e5b8051f9cc2de57ad3e6de2dcb1c1715d4fc") version("2.32", sha256="a9156e1e0d0f912f2f239476dc8765dc61c480f903381be7ec5db05bd6d3f0b3") diff --git a/var/spack/repos/builtin/packages/r-mcmcpack/package.py b/var/spack/repos/builtin/packages/r-mcmcpack/package.py index 80a0d6ac68dc0b..4e3e289afdfbdf 100644 --- a/var/spack/repos/builtin/packages/r-mcmcpack/package.py +++ b/var/spack/repos/builtin/packages/r-mcmcpack/package.py @@ -19,6 +19,7 @@ class RMcmcpack(RPackage): cran = "MCMCpack" + version("1.7-0", sha256="846073d710017ec1dc9a2b4616cb6aeb60ce04e3500a37214522818d34045def") version("1.6-3", sha256="cb14ba20690b31fd813b05565484c866425f072a5ad99a5cbf1da63588958db3") version("1.6-0", sha256="b5b9493457d11d4dca12f7732bd1b3eb1443852977c8ee78393126f13deaf29b") version("1.5-0", sha256="795ffd3d62bf14d3ecb3f5307bd329cd75798cf4b270ff0e768bc71a35de0ace") @@ -26,9 +27,8 @@ class RMcmcpack(RPackage): depends_on("r@3.6:", type=("build", "run")) depends_on("r-coda@0.11-3:", type=("build", "run")) depends_on("r-lattice", type=("build", "run")) + depends_on("r-mass", type=("build", "run")) depends_on("r-mcmc", type=("build", "run")) depends_on("r-quantreg", type=("build", "run")) - depends_on("r-mass", type=("build", "run"), when="@:1.6-0") - conflicts("%gcc@:3") diff --git a/var/spack/repos/builtin/packages/r-mco/package.py b/var/spack/repos/builtin/packages/r-mco/package.py index 1f9d061f04060d..541e0636bd3294 100644 --- a/var/spack/repos/builtin/packages/r-mco/package.py +++ b/var/spack/repos/builtin/packages/r-mco/package.py @@ -17,8 +17,10 @@ class RMco(RPackage): license("GPL-2.0-only") + version("1.17", sha256="8288e99159a541855bd286baf586e61201e286dfd244080aef128871b1699ea2") version("1.15.6", sha256="17ebe279cb9c89b7cd8054ac50d3b657d2b10dadbc584b88da7e79c3a9680582") version("1.0-15.1", sha256="3c13ebc8c1f1bfa18f3f95b3998c57fde5259876e92456b6c6d4c59bef07c193") version("1.0-15", sha256="a25e3effbb6dcae735fdbd6c0bfc775e9fbbcc00dc00076b69c53fe250627055") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.4.0:", type=("build", "run"), when="@1.17:") diff --git a/var/spack/repos/builtin/packages/r-mda/package.py b/var/spack/repos/builtin/packages/r-mda/package.py index ea00d0f377f547..555d28efb4f2f8 100644 --- a/var/spack/repos/builtin/packages/r-mda/package.py +++ b/var/spack/repos/builtin/packages/r-mda/package.py @@ -16,6 +16,7 @@ class RMda(RPackage): license("GPL-2.0-only") + version("0.5-4", sha256="f25f7f28807d0fa478b1b55eb9d026ebc30577d9d5ff288f9abfe1f3fdb8a759") version("0.5-3", sha256="bda6409c17f385fae97da458cc742334e7b47aab8217a975b7551e2e18d38463") version("0.5-2", sha256="344f2053215ddf535d1554b4539e9b09067dac878887cc3eb995cef421fc00c3") version("0.4-10", sha256="7036bc622a8fea5b2de94fc19e6b64f5f0c27e5d743ae7646e116af08c9de6a5") diff --git a/var/spack/repos/builtin/packages/r-memisc/package.py b/var/spack/repos/builtin/packages/r-memisc/package.py index 983cf8f3557f92..b79ef63ca60b04 100644 --- a/var/spack/repos/builtin/packages/r-memisc/package.py +++ b/var/spack/repos/builtin/packages/r-memisc/package.py @@ -20,6 +20,7 @@ class RMemisc(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("0.99.31.7", sha256="b403185850520db18ebd608df85c76df80e6c64af428cdc4e49c2fe487483637") version("0.99.31.6", sha256="52336b4ffc6e60c3ed10ccc7417231582b0d2e4c5c3b2184396a7d3ca9c1d96e") depends_on("r@3.3.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-mendelianrandomization/package.py b/var/spack/repos/builtin/packages/r-mendelianrandomization/package.py index 45e0017a92fe46..c2aaec6da70b17 100644 --- a/var/spack/repos/builtin/packages/r-mendelianrandomization/package.py +++ b/var/spack/repos/builtin/packages/r-mendelianrandomization/package.py @@ -17,6 +17,7 @@ class RMendelianrandomization(RPackage): cran = "MendelianRandomization" + version("0.10.0", sha256="0851e91f826424f20fd4a58348ffe161d147bdc091d24d676e14d4cd6180e13c") version("0.7.0", sha256="cad7cc1b6964fc7d299864378694c5fd947caa83796a1958e581299796b854c7") depends_on("r@3.0.1:", type=("build", "run")) @@ -30,3 +31,6 @@ class RMendelianrandomization(RPackage): depends_on("r-quantreg@5.01:", type=("build", "run")) depends_on("r-rjson", type=("build", "run")) depends_on("r-glmnet", type=("build", "run")) + depends_on("r-numderiv", type=("build", "run"), when="@0.10.0:") + depends_on("r-rcpp", type=("build", "run"), when="@0.10.0:") + depends_on("r-rcpparmadillo", type=("build", "run"), when="@0.10.0:") diff --git a/var/spack/repos/builtin/packages/r-meta/package.py b/var/spack/repos/builtin/packages/r-meta/package.py index 9a1facc53419c3..aa15244e8da6c7 100644 --- a/var/spack/repos/builtin/packages/r-meta/package.py +++ b/var/spack/repos/builtin/packages/r-meta/package.py @@ -26,11 +26,18 @@ class RMeta(RPackage): license("GPL-2.0-or-later") + version("7.0-0", sha256="d8ead9c94f0d2b42766b8ea8358f40d0641cdcc9c25ba4b9a5fff1a59497de7d") version("6.2-1", sha256="2c2a0d4d8f3b07211120b232a155e3e1312164ce18817e0d5693c8da5da1d6cc") version("6.2-0", sha256="8ec8fb412996bbe17d3ca073f15c191a77bad486b08f39d7b8c2d07360ad5781") depends_on("r@4.0.0:", type=("build", "run")) - depends_on("r-metafor@3.0-0:", type=("build", "run")) - depends_on("r-lme4", type=("build", "run")) depends_on("r-compquadform", type=("build", "run")) + depends_on("r-dplyr", type=("build", "run"), when="@7.0-0:") + depends_on("r-lme4", type=("build", "run")) + depends_on("r-magrittr", type=("build", "run"), when="@7.0-0:") + depends_on("r-metadat", type=("build", "run"), when="@7.0-0:") + depends_on("r-metafor@3.0-0:", type=("build", "run")) + depends_on("r-purrr", type=("build", "run"), when="@7.0-0:") + depends_on("r-readr", type=("build", "run"), when="@7.0-0:") + depends_on("r-stringr", type=("build", "run"), when="@7.0-0:") depends_on("r-xml2", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-metafor/package.py b/var/spack/repos/builtin/packages/r-metafor/package.py index 0d7716b13f57a3..df0be2ae80919e 100644 --- a/var/spack/repos/builtin/packages/r-metafor/package.py +++ b/var/spack/repos/builtin/packages/r-metafor/package.py @@ -31,6 +31,7 @@ class RMetafor(RPackage): license("GPL-2.0-or-later") + version("4.6-0", sha256="07344cc3bd87b8bd25ef998e9a6ce322ae8e448ef5af06ec3e79631724e18666") version("4.0-0", sha256="5cd552ebaf225b745c2e4d944ca80986dd1ad6f1a4c902fb646f3cb11b8dc23b") version("3.8-1", sha256="d694577f954144d8a5eeab6521fe1c87e68ddf9ecfd7ccc915d01533371b0514") diff --git a/var/spack/repos/builtin/packages/r-metap/package.py b/var/spack/repos/builtin/packages/r-metap/package.py index 514c44074d9418..4e144ec6e71eb2 100644 --- a/var/spack/repos/builtin/packages/r-metap/package.py +++ b/var/spack/repos/builtin/packages/r-metap/package.py @@ -19,6 +19,7 @@ class RMetap(RPackage): license("GPL-2.0-only") + version("1.11", sha256="34e8c9fc3ccaae23f57389001987de02339416f843084869f92ff635052093b7") version("1.8", sha256="ee9501a8de8a4c47af1632e6053e42ef53fc4b8bdf0f2759edc4d3eefaf5552b") version("1.7", sha256="d9b511607d0e37de4428549061c5577a4e812b0f55bb7ed887d1b24711f58c42") version("1.4", sha256="5fac23d823d0ad4eebc3f97620364e25f7b41f8d0c3579f6c09ec059940b85a5") diff --git a/var/spack/repos/builtin/packages/r-mgcv/package.py b/var/spack/repos/builtin/packages/r-mgcv/package.py index a0e59e0b84eee7..92416dc5bfd334 100644 --- a/var/spack/repos/builtin/packages/r-mgcv/package.py +++ b/var/spack/repos/builtin/packages/r-mgcv/package.py @@ -21,6 +21,7 @@ class RMgcv(RPackage): license("GPL-2.0-or-later") + version("1.9-1", sha256="700fbc37bedd3a49505b9bc4949faee156d9cfb4f669d797d06a10a15a5bdb32") version("1.8-42", sha256="087fc38b64ad06f2149eafc54f2679dd8840cf6fc488e66cf131e3c1de2db6c7") version("1.8-41", sha256="2f7a030fe2be75edef6bd96147df46c2262f3cdc44c383d8f82b401df44fe690") version("1.8-40", sha256="dbe627266c3b339232e2d4228d5370ba88c86540319e6891d161242efba7e4a5") diff --git a/var/spack/repos/builtin/packages/r-mice/package.py b/var/spack/repos/builtin/packages/r-mice/package.py index d61198a6c3e1b1..8fe870277bf45a 100644 --- a/var/spack/repos/builtin/packages/r-mice/package.py +++ b/var/spack/repos/builtin/packages/r-mice/package.py @@ -25,6 +25,7 @@ class RMice(RPackage): license("GPL-2.0-or-later") + version("3.16.0", sha256="29f0285185a540337e9dde2357690c82d174f115be701ee2f0a7083173a44040") version("3.15.0", sha256="3d64dd260e3dce9c4c2f7be8c99f3063769df9ccfd3a0fc827c2de0ac842e87b") version("3.14.0", sha256="f87bb73d8bfee36c6bf4f15779c59ff6b70c70ca25b1388b4ee236757276d605") version("3.12.0", sha256="575d9e650d5fc8cd66c0b5a2f1e659605052b26d61f772fff5eed81b414ef144") @@ -36,9 +37,13 @@ class RMice(RPackage): depends_on("r-broom", type=("build", "run")) depends_on("r-dplyr", type=("build", "run")) depends_on("r-generics", type=("build", "run"), when="@3.12.0:") + depends_on("r-glmnet", type=("build", "run"), when="@3.16.0:") depends_on("r-lattice", type=("build", "run")) + depends_on("r-mitml", type=("build", "run"), when="@3.16.0:") + depends_on("r-nnet", type=("build", "run"), when="@3.16.0:") depends_on("r-rcpp", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) + depends_on("r-rpart", type=("build", "run"), when="@3.16.0:") depends_on("r-tidyr", type=("build", "run"), when="@3.12.0:") depends_on("r-cpp11", type=("build", "run"), when="@3.12.0:") diff --git a/var/spack/repos/builtin/packages/r-microbenchmark/package.py b/var/spack/repos/builtin/packages/r-microbenchmark/package.py index 5382fa8ac55b1f..6b43c99afc58e2 100644 --- a/var/spack/repos/builtin/packages/r-microbenchmark/package.py +++ b/var/spack/repos/builtin/packages/r-microbenchmark/package.py @@ -16,5 +16,6 @@ class RMicrobenchmark(RPackage): license("BSD-2-Clause") + version("1.4.10", sha256="04cc41be72708dce8d31ff1cb105d88cc9f167250ea00fe9a165c99204b9b481") version("1.4.9", sha256="443d2caf370ef33e4ac2773176ad9eb86f8790f43b430968ef9647699dbbffd2") version("1.4-7", sha256="268f13c6323dd28cc2dff7e991bb78b814a8873b4a73f4a3645f40423da984f6") diff --git a/var/spack/repos/builtin/packages/r-minqa/package.py b/var/spack/repos/builtin/packages/r-minqa/package.py index 44337b542c5dce..a7dfbe87cb1f96 100644 --- a/var/spack/repos/builtin/packages/r-minqa/package.py +++ b/var/spack/repos/builtin/packages/r-minqa/package.py @@ -16,6 +16,7 @@ class RMinqa(RPackage): license("GPL-2.0-only") + version("1.2.8", sha256="5941e4b9b01978fc6d9fe24e6ca60cca66883fe9fa6ff3cbfa32aa1ac9db5467") version("1.2.5", sha256="9b83562390990d04b2c61b63ac9a7c9ecab0d35c460d232596e3c73bdc89f4be") version("1.2.4", sha256="cfa193a4a9c55cb08f3faf4ab09c11b70412523767f19894e4eafc6e94cccd0c") diff --git a/var/spack/repos/builtin/packages/r-mlbench/package.py b/var/spack/repos/builtin/packages/r-mlbench/package.py index f70c74bece3ff7..c99a10467bc674 100644 --- a/var/spack/repos/builtin/packages/r-mlbench/package.py +++ b/var/spack/repos/builtin/packages/r-mlbench/package.py @@ -16,6 +16,7 @@ class RMlbench(RPackage): license("GPL-2.0-only") + version("2.1-5", sha256="4dbfd652adda7c0caf544d3a6cd23a2ee97c22faefe4d15b8a6782061cc9e76f") version("2.1-3", sha256="b1f92be633243185ab86e880a1e1ac5a4dd3c535d01ebd187a4872d0a8c6f194") version("2.1-1", sha256="748141d56531a39dc4d37cf0a5165a40b653a04c507e916854053ed77119e0e6") diff --git a/var/spack/repos/builtin/packages/r-mlr/package.py b/var/spack/repos/builtin/packages/r-mlr/package.py index 00c402838ed252..8927e32c22eb32 100644 --- a/var/spack/repos/builtin/packages/r-mlr/package.py +++ b/var/spack/repos/builtin/packages/r-mlr/package.py @@ -24,6 +24,7 @@ class RMlr(RPackage): license("BSD-2-Clause") + version("2.19.2", sha256="85e67049f1067a7eae0f0e5b5c4e4e46a25407a17750512220f438a0fa5097c5") version("2.19.1", sha256="9d52afd54d9d5746e798134d5675818cee65caa53d7eaf317d46ba88d5865202") version("2.19.0", sha256="1149c9b453896481c85906045aa82d511d96979ddecbe5a3faf04f9f4a5e6113") version("2.18.0", sha256="c2fe74e90ed32e5f4cbb0c09a1742051688d87db2f12dd408ddad0f5afc7f8d3") diff --git a/var/spack/repos/builtin/packages/r-mockery/package.py b/var/spack/repos/builtin/packages/r-mockery/package.py index 12e25a80e62f5f..8ccce8f80291d7 100644 --- a/var/spack/repos/builtin/packages/r-mockery/package.py +++ b/var/spack/repos/builtin/packages/r-mockery/package.py @@ -19,6 +19,7 @@ class RMockery(RPackage): license("MIT") + version("0.4.4", sha256="072220a0f2455fca91649fc7ce4ed503cfaa965aa769d1bd0fd6622b222845c3") version("0.4.3", sha256="9fc9f1565c51e51b33634e9fc5328211559a561f095bc4d0fa8bd8b7533d476a") version("0.4.2", sha256="988e249c366ee7faf277de004084cf5ca24b5c8a8c6e3842f1b1362ce2f7ea9b") version("0.4.1", sha256="959d83f8b21e9a89c06c73f310356790c2d63d5ba39b2b60c6777a4eb33909c1") diff --git a/var/spack/repos/builtin/packages/r-multcomp/package.py b/var/spack/repos/builtin/packages/r-multcomp/package.py index 6fd24c0aa9cc0a..3e709c8621b78d 100644 --- a/var/spack/repos/builtin/packages/r-multcomp/package.py +++ b/var/spack/repos/builtin/packages/r-multcomp/package.py @@ -19,6 +19,7 @@ class RMultcomp(RPackage): license("GPL-2.0-only") + version("1.4-26", sha256="a100bbdfaffb8b9cf9a59decf80267421673c4f1eef44c0bc3f77be16b3a69ec") version("1.4-23", sha256="425154a58bd8f2dbaff5d16e97b03473cbc0d571b1c2e4dd66a13c6d20a8cde1") version("1.4-20", sha256="328be4fa4189bde4a7bc645d9ae5ea071ebe31ed658c8c48c4e45aa8e8c42cfc") version("1.4-19", sha256="f03473b1cfbc714cd85a0ee948e2ecdb23bcdccbe95e27237ee25e9c71e3e557") diff --git a/var/spack/repos/builtin/packages/r-multcompview/package.py b/var/spack/repos/builtin/packages/r-multcompview/package.py index bbb75b1dc4deea..6e95f5fa844f20 100644 --- a/var/spack/repos/builtin/packages/r-multcompview/package.py +++ b/var/spack/repos/builtin/packages/r-multcompview/package.py @@ -18,5 +18,6 @@ class RMultcompview(RPackage): cran = "multcompView" + version("0.1-10", sha256="38f249b22758c9f727b1656d1a08c6022a06a1ea319364ff680147d64598ad8a") version("0.1-9", sha256="1f3993e9d51f3c7a711a881b6a20081a85ffab60c27828ceb3640a6b4c887397") version("0.1-8", sha256="123d539172ad6fc63d83d1fc7f356a5ed7b691e7803827480118bebc374fd8e5") diff --git a/var/spack/repos/builtin/packages/r-multicool/package.py b/var/spack/repos/builtin/packages/r-multicool/package.py index fd79b36bde6dc3..a709fbf6bab917 100644 --- a/var/spack/repos/builtin/packages/r-multicool/package.py +++ b/var/spack/repos/builtin/packages/r-multicool/package.py @@ -29,6 +29,7 @@ class RMulticool(RPackage): license("GPL-2.0-only") + version("1.0.1", sha256="bd72de1fbd7ea32018d6af09ac2af80871ebe26bf9dfdf1ba53f87e6cff56c1f") version("0.1-12", sha256="487d28d9c3c606be0cf56e2d8f8b0d79fb71949c68886ea9251fbb1c01664a36") version("0.1-11", sha256="1c907e64af2ac39facdf431a5691e69649f64af1f50e198ae39da5bf30026476") version("0.1-10", sha256="5bb0cb0d9eb64420c862877247a79bb0afadacfe23262ec8c3fa26e5e34d6ff9") diff --git a/var/spack/repos/builtin/packages/r-multitaper/package.py b/var/spack/repos/builtin/packages/r-multitaper/package.py index 024e7bbe305539..5784745e4d0d5c 100644 --- a/var/spack/repos/builtin/packages/r-multitaper/package.py +++ b/var/spack/repos/builtin/packages/r-multitaper/package.py @@ -22,6 +22,7 @@ class RMultitaper(RPackage): license("GPL-2.0-or-later") + version("1.0-17", sha256="3430ca62be2ee491d29b05e461647327a8977743241af2d3c39277c920170af3") version("1.0-15", sha256="837d71f3b46fbce2bea210449cf75e609f5363ff23b7808f5f115fdc51e6a3be") version("1.0-14", sha256="c84c122541dc2874131446e23b212259b3b00590d701efee49e6740fd74a8d13") diff --git a/var/spack/repos/builtin/packages/r-munsell/package.py b/var/spack/repos/builtin/packages/r-munsell/package.py index 44e8c0c4280f95..fd67db64021fb2 100644 --- a/var/spack/repos/builtin/packages/r-munsell/package.py +++ b/var/spack/repos/builtin/packages/r-munsell/package.py @@ -19,6 +19,7 @@ class RMunsell(RPackage): license("MIT") + version("0.5.1", sha256="03a2fd9ac40766cded96dfe33b143d872d0aaa262a25482ce19161ca959429a6") version("0.5.0", sha256="d0f3a9fb30e2b5d411fa61db56d4be5733a2621c0edf017d090bdfa5e377e199") version("0.4.3", sha256="397c3c90af966f48eebe8f5d9e40c41b17541f0baaa102eec3ea4faae5a2bd49") diff --git a/var/spack/repos/builtin/packages/r-mvtnorm/package.py b/var/spack/repos/builtin/packages/r-mvtnorm/package.py index 57fead3897e9ed..00d927b93df30a 100644 --- a/var/spack/repos/builtin/packages/r-mvtnorm/package.py +++ b/var/spack/repos/builtin/packages/r-mvtnorm/package.py @@ -16,6 +16,7 @@ class RMvtnorm(RPackage): license("GPL-2.0-only") + version("1.2-6", sha256="c4dedc3c296ed8e5fd2faecdba6de302bca1dd2e96b84fd846c47a54286acd31") version("1.1-3", sha256="ff4e302139ba631280fc9c4a2ab168596bfd09e17a805974199b043697c02448") version("1.1-1", sha256="e965dad5e93babb7ded25b5ebdbd52332191b61f897d68853a379a07620d45de") version("1.0-11", sha256="0321612de99aa9bc75a45c7e029d3372736014223cbdefb80d8cae600cbc7252") diff --git a/var/spack/repos/builtin/packages/r-nanotime/package.py b/var/spack/repos/builtin/packages/r-nanotime/package.py index 35af382e82f65e..07d29c1cd30997 100644 --- a/var/spack/repos/builtin/packages/r-nanotime/package.py +++ b/var/spack/repos/builtin/packages/r-nanotime/package.py @@ -18,6 +18,7 @@ class RNanotime(RPackage): license("GPL-2.0-or-later") + version("0.3.9", sha256="cc2965edfd68f83a84142ead27a5a84e1c5b2931ec911dddecb3e0bc3ffa79d8") version("0.3.7", sha256="a771782653aef62a071682907fd7bd611f7f98fc80beda227d619aae166ccb15") version("0.3.6", sha256="df751a5cb11ca9ac8762cd1e33bc73e7d20fde9339d2c46bc6f85873388568df") version("0.3.5", sha256="44deaae58452bacea4855d018212593811401c2afc460ffb11905479013923a0") diff --git a/var/spack/repos/builtin/packages/r-ncdf4/package.py b/var/spack/repos/builtin/packages/r-ncdf4/package.py index 874a36f0639b38..0c74f80b6a8f34 100644 --- a/var/spack/repos/builtin/packages/r-ncdf4/package.py +++ b/var/spack/repos/builtin/packages/r-ncdf4/package.py @@ -28,6 +28,7 @@ class RNcdf4(RPackage): license("GPL-3.0-or-later") + version("1.23", sha256="8b05fee9f79dc0605e487dd5d031d2c7dcaedec8f47904983b1c26739894da89") version("1.21", sha256="2f5ae7def382c595c66b6ed0ea0529f8337108eb73de39939f9762f3fb21b30d") version("1.19", sha256="cb8d139211fc7475c435ce9f6a43e47710603409dc523b053c8b7de9848dfb63") version("1.17", sha256="db95c4729d3187d1a56dfd019958216f442be6221bd15e23cd597e6129219af6") diff --git a/var/spack/repos/builtin/packages/r-network/package.py b/var/spack/repos/builtin/packages/r-network/package.py index bea112a0b85d98..9028bd9c21f7cd 100644 --- a/var/spack/repos/builtin/packages/r-network/package.py +++ b/var/spack/repos/builtin/packages/r-network/package.py @@ -17,6 +17,7 @@ class RNetwork(RPackage): license("GPL-2.0-or-later") + version("1.18.2", sha256="bf33892db9cabba9cd1597f09ef0e1277d63520a8cebd2d919e0d41fc706a27b") version("1.18.1", sha256="c80d70352967d8480cfa801f2a31bfe130e2ad4dbf2c07b0046e57f3013cd243") version("1.18.0", sha256="59f4b10174c87c8742c6b3c93c5e47833042375f5f872fdd23155b4a5244ce5b") version("1.17.2", sha256="9588a198807c8c68da147f479ca9af5bcb4468cf91b6a90b8044d313d9fa30f7") diff --git a/var/spack/repos/builtin/packages/r-nimble/package.py b/var/spack/repos/builtin/packages/r-nimble/package.py index 816780deebf76a..c85b3e059f6cea 100644 --- a/var/spack/repos/builtin/packages/r-nimble/package.py +++ b/var/spack/repos/builtin/packages/r-nimble/package.py @@ -28,6 +28,7 @@ class RNimble(RPackage): license("BSD-3-Clause OR GPL-2.0-or-later") + version("1.2.1", sha256="2e8571e73e5b7553ee84db376444c18e211d4ba542ed415004c5128cb6802587") version("0.13.1", sha256="dc70caab64a8a4e44fb13fa6d67f6f2a0453fa684669e24718758bb2a8cf8530") version("0.12.2", sha256="2af7a3ab159a7f0b3b4b139da1db45be4b602f2c0e115cb0403b060ab0101a1b") version("0.12.1", sha256="3520f3212a48c8cbe08a6a8e57b3a72180594f7c09f647d1daf417c9857867d8") @@ -38,5 +39,7 @@ class RNimble(RPackage): depends_on("r@3.1.2:", type=("build", "run")) depends_on("r-igraph", type=("build", "run")) depends_on("r-coda", type=("build", "run")) + depends_on("r-numderiv", type=("build", "run"), when="@1.2.1:") + depends_on("r-pracma", type=("build", "run"), when="@1.2.1:") depends_on("r-r6", type=("build", "run")) depends_on("gmake", type="build") diff --git a/var/spack/repos/builtin/packages/r-nleqslv/package.py b/var/spack/repos/builtin/packages/r-nleqslv/package.py index da58b461a9f1cf..86dd4de0c7dab7 100644 --- a/var/spack/repos/builtin/packages/r-nleqslv/package.py +++ b/var/spack/repos/builtin/packages/r-nleqslv/package.py @@ -19,6 +19,7 @@ class RNleqslv(RPackage): license("GPL-2.0-or-later") + version("3.3.5", sha256="1298172d2fe67d8d6b742ce7e792f6b897f081da5c94d34f14970ab531f04b3a") version("3.3.4", sha256="2783e7525bcd155dd8cedf5a41b7db65cd1fa0e095cd937371448316f3930fcf") version("3.3.3", sha256="2e46dfce95ddfd7ed5208413ee41f6bdf1ae18414fb1d0c146d9da3af12ac633") version("3.3.2", sha256="f54956cf67f9970bb3c6803684c84a27ac78165055745e444efc45cfecb63fed") diff --git a/var/spack/repos/builtin/packages/r-nlme/package.py b/var/spack/repos/builtin/packages/r-nlme/package.py index f08f3a4b2c5b65..38f6eeb5bc180b 100644 --- a/var/spack/repos/builtin/packages/r-nlme/package.py +++ b/var/spack/repos/builtin/packages/r-nlme/package.py @@ -15,6 +15,7 @@ class RNlme(RPackage): license("GPL-2.0-or-later") + version("3.1-166", sha256="237a14ee8d78755b11a7efe234b95be40b46fbdd1b4aaf463f6d532be1909762") version("3.1-162", sha256="ba6da2575554afa2614c4cba9971f8a9f8a07622d201284cb78899f3d6a2dc67") version("3.1-160", sha256="d4454623194876b083774c662fd223bc3b9e8325824cb758b8adecd5dc0d8a08") version("3.1-159", sha256="9bb05f5c3146e2d75078e668821485a3e9ca246fd5d7db2ef1963d3735d919bf") @@ -32,4 +33,5 @@ class RNlme(RPackage): depends_on("r@3.3.0:", type=("build", "run"), when="@3.1-131.1") depends_on("r@3.5.0:", type=("build", "run"), when="@3.1-134:3.1-135") depends_on("r@3.4.0:", type=("build", "run"), when="@3.1-135.5:") + depends_on("r@3.6.0:", type=("build", "run"), when="@3.1-165:") depends_on("r-lattice", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-nloptr/package.py b/var/spack/repos/builtin/packages/r-nloptr/package.py index 9d53c849160508..946812061b9981 100644 --- a/var/spack/repos/builtin/packages/r-nloptr/package.py +++ b/var/spack/repos/builtin/packages/r-nloptr/package.py @@ -25,6 +25,7 @@ class RNloptr(RPackage): license("LGPL-3.0-or-later") + version("2.1.1", sha256="4cdaf55dfdeb090119f2c2ca77f617962524654da4511bacd650f62bb6dad8ea") version("2.0.3", sha256="7b26ac1246fd1bd890817b0c3a145456c11aec98458b8518de863650b99616d7") version("2.0.0", sha256="65ca3149cfc9ba15ac10a91f34b5d86b20f5fd693f44e3edf3e392402911619a") version("1.2.2.3", sha256="af08b74fd5e7b4cb455fe67ed759346cbb8f3b9a4178f5f117e0092e5c9af6ff") @@ -32,7 +33,7 @@ class RNloptr(RPackage): version("1.2.1", sha256="1f86e33ecde6c3b0d2098c47591a9cd0fa41fb973ebf5145859677492730df97") version("1.0.4", sha256="84225b993cb1ef7854edda9629858662cc8592b0d1344baadea4177486ece1eb") - depends_on("r-testthat", when="@2.0.0:") + depends_on("r-testthat", when="@2.0.0:2.1.0") depends_on("nlopt@2.4.0:") depends_on("nlopt@2.7.0:", when="@2.0.0:") diff --git a/var/spack/repos/builtin/packages/r-nmf/package.py b/var/spack/repos/builtin/packages/r-nmf/package.py index 744605ac88498f..db582ce04fecb5 100644 --- a/var/spack/repos/builtin/packages/r-nmf/package.py +++ b/var/spack/repos/builtin/packages/r-nmf/package.py @@ -18,6 +18,7 @@ class RNmf(RPackage): cran = "NMF" + version("0.27", sha256="af4302efca4a7654fecd31c376f1bb3496428279a50b8d5691c8a7e66e3f3ef9") version("0.26", sha256="8d44562ef5f33f3811929f944c9d029ec25526d2ddddfe7c8a5b6e23adbc2ec0") version("0.24.0", sha256="481811d35b3bbc07e9a60e2f853b05ef26581b43be9c6c4bab81151b8dcadd93") version("0.23.0", sha256="0f0cca01b37bf46fce90d2e951df609d3d377908aa607825083fd0c47cc24753") diff --git a/var/spack/repos/builtin/packages/r-nmof/package.py b/var/spack/repos/builtin/packages/r-nmof/package.py index 52dcda0ebdde33..a19a76d26029a8 100644 --- a/var/spack/repos/builtin/packages/r-nmof/package.py +++ b/var/spack/repos/builtin/packages/r-nmof/package.py @@ -19,6 +19,7 @@ class RNmof(RPackage): cran = "NMOF" + version("2.8-0", sha256="6dc53a9be41e673e9b2fcb2783aa82090db5455f079b8aac4c388d679f6ec28a") version("2.7-1", sha256="b03e309df35b3fb0980c8a171e1cd1c69739fa6ab7a8992c043166fae4644e23") version("2.7-0", sha256="11eeda730262418f22d24d8f72d363a05ac4c3c1130b88f4eafb1b8d81c83160") version("2.5-1", sha256="0468ba72364cbdf90781824dfb1a60324203e2248d93cb6f1ffd6eb0d271f390") @@ -27,3 +28,4 @@ class RNmof(RPackage): version("1.6-0", sha256="5484cd43c28aaf23d560c2dde8bcd8dd440a205d2214eb50e02fe0bb42ec2755") depends_on("r@2.14:", type=("build", "run")) + depends_on("r@3.5:", type=("build", "run"), when="@2.8-0:") diff --git a/var/spack/repos/builtin/packages/r-nnet/package.py b/var/spack/repos/builtin/packages/r-nnet/package.py index 63b8c5fc3233c7..7dab7edbf0c014 100644 --- a/var/spack/repos/builtin/packages/r-nnet/package.py +++ b/var/spack/repos/builtin/packages/r-nnet/package.py @@ -16,6 +16,7 @@ class RNnet(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("7.3-19", sha256="a9241f469270d3b03bbab7dc0d3c6a06a84010af16ba82fd3bd6660b35382ce7") version("7.3-18", sha256="d29aebfb5cb00071eecf754d55db5d474a6fda88860df5c9d31ba89aa8d9e3d0") version("7.3-17", sha256="ee750bb8164aa058edf93823af987ab2c7ec64128dce2abeaae1b7d3661e9a67") version("7.3-14", sha256="5d1b9e9764d74d16c651f18f949aa4e9e2995ba64633cbfa2c6a7355ae30f4af") diff --git a/var/spack/repos/builtin/packages/r-nnls/package.py b/var/spack/repos/builtin/packages/r-nnls/package.py index 3fb292aa7e1d9c..e1575760df6669 100644 --- a/var/spack/repos/builtin/packages/r-nnls/package.py +++ b/var/spack/repos/builtin/packages/r-nnls/package.py @@ -17,4 +17,5 @@ class RNnls(RPackage): license("GPL-2.0-or-later") + version("1.5", sha256="cd70feb286f86f6dead75da693a8f67c9bd3b91eb738e6e6ac659e3b8c7a3452") version("1.4", sha256="0e5d77abae12bc50639d34354f96a8e079408c9d7138a360743b73bd7bce6c1f") diff --git a/var/spack/repos/builtin/packages/r-nonnest2/package.py b/var/spack/repos/builtin/packages/r-nonnest2/package.py index 3899ba0a474c87..a12129ba5a0b1a 100644 --- a/var/spack/repos/builtin/packages/r-nonnest2/package.py +++ b/var/spack/repos/builtin/packages/r-nonnest2/package.py @@ -20,6 +20,7 @@ class RNonnest2(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("0.5-7", sha256="e440c2464b3bd3b452e02583bb280eecba6acecf0f2c04b6b9fe4dcdd128db3e") version("0.5-5", sha256="027f510e322122fc75c936251a95ddd392f96047ac86e0fae6cf8f883ac7aab5") depends_on("r@3.0.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-nor1mix/package.py b/var/spack/repos/builtin/packages/r-nor1mix/package.py index 2f6b7907c37032..6e2747be40ceb2 100644 --- a/var/spack/repos/builtin/packages/r-nor1mix/package.py +++ b/var/spack/repos/builtin/packages/r-nor1mix/package.py @@ -19,5 +19,6 @@ class RNor1mix(RPackage): license("GPL-2.0-or-later") + version("1.3-3", sha256="97bfd0f8c847fa68bf607aaa465845a34ac8a7a262315073026a6a1937dd076e") version("1.3-0", sha256="9ce4ee92f889a4a4041b5ea1ff09396780785a9f12ac46f40647f74a37e327a0") version("1.2-3", sha256="435e6519e832ef5229c51ccb2619640e6b50dfc7470f70f0c938d18a114273af") diff --git a/var/spack/repos/builtin/packages/r-openssl/package.py b/var/spack/repos/builtin/packages/r-openssl/package.py index be058a55493255..eb061bf5d4ead6 100644 --- a/var/spack/repos/builtin/packages/r-openssl/package.py +++ b/var/spack/repos/builtin/packages/r-openssl/package.py @@ -24,6 +24,7 @@ class ROpenssl(RPackage): license("MIT") + version("2.2.1", sha256="25a12328d584212d8d4c095b3d2a71152c5d2bc4adda7a9addb25da01136f78d") version("2.0.6", sha256="77f3032a16270f0d1734f269b8d348eedc75b277812854386091143082c1b3f3") version("2.0.4", sha256="a1a5c65127c20c0ca3b46f2c4f4d3817276a887a231569537c1373e7740a5cec") version("2.0.3", sha256="7cde98520bec857f043fb6aae92334e2ae0dcd86108adc9b18ca298ec16286aa") diff --git a/var/spack/repos/builtin/packages/r-openxlsx/package.py b/var/spack/repos/builtin/packages/r-openxlsx/package.py index d9a311a07d2780..dfcb39680d2b42 100644 --- a/var/spack/repos/builtin/packages/r-openxlsx/package.py +++ b/var/spack/repos/builtin/packages/r-openxlsx/package.py @@ -18,6 +18,7 @@ class ROpenxlsx(RPackage): license("MIT") + version("4.2.6.1", sha256="c208c506a5d6a1d89a18c2b0bedceb467a461939128f2d7916efbf41e7a17aa9") version("4.2.5.2", sha256="ee7089e7e5832ef22ee0d0eebf7cca5096ce23afb2bcdb58700be62526fc9b67") version("4.2.5.1", sha256="64d224380809d8d19788b02daf9d6dae45262594b81f5e013d37d34daf0945c8") version("4.2.5", sha256="65d06d2819b656ac30fc78437ee712a83fb5a7ab750f56268e5c9e578c582519") diff --git a/var/spack/repos/builtin/packages/r-optimx/package.py b/var/spack/repos/builtin/packages/r-optimx/package.py index b079c0226ca9b2..de159d7b6492b7 100644 --- a/var/spack/repos/builtin/packages/r-optimx/package.py +++ b/var/spack/repos/builtin/packages/r-optimx/package.py @@ -22,10 +22,15 @@ class ROptimx(RPackage): license("GPL-2.0-only") + version( + "2023-10.21", sha256="0d732d5604c26af59cfb95b80ed4e226c9c10422e2d82a6cc06b92f9ba6a44b5" + ) version("2022-4.30", sha256="ebe9887a22296cf4b2db07981aaa1f898bf7c17fb61a4b398c228d4077d0b410") version( "2021-10.12", sha256="39384c856b5efa3992cd230548b60eff936d428111ad6ad5b8fb98a3bcbb7943" ) version("2020-4.2", sha256="6381c25c322287fc98ab1b2965d3f68c9a92c587c76aca1d33fd6428b2167101") + depends_on("r-nloptr", type=("build", "run"), when="@2023-10.21:") depends_on("r-numderiv", type=("build", "run")) + depends_on("r-pracma", type=("build", "run"), when="@2023-10.21:") diff --git a/var/spack/repos/builtin/packages/r-optparse/package.py b/var/spack/repos/builtin/packages/r-optparse/package.py index 90ab226ce4a23d..6e8cb4c2eadc4d 100644 --- a/var/spack/repos/builtin/packages/r-optparse/package.py +++ b/var/spack/repos/builtin/packages/r-optparse/package.py @@ -17,6 +17,7 @@ class ROptparse(RPackage): license("GPL-2.0-or-later") + version("1.7.5", sha256="0cc917505780786e69b8ceca4b3840ed7b0c011495108ec05af3871965415712") version("1.7.3", sha256="6287e1af051d4a65037900ce7b30bd962039450dd4eab63b6f2491eace6a07ed") version("1.7.1", sha256="324e304c13efd565d766766193d4ccd75e2cd949dfcfb416afc3939489071fe7") version("1.6.6", sha256="51779d497146e9354b1153713d939e81551e08948c2b00e4b117b1377c0b60d0") diff --git a/var/spack/repos/builtin/packages/r-ordinal/package.py b/var/spack/repos/builtin/packages/r-ordinal/package.py index 6e7cc275734d16..702e439b1bd0b8 100644 --- a/var/spack/repos/builtin/packages/r-ordinal/package.py +++ b/var/spack/repos/builtin/packages/r-ordinal/package.py @@ -25,6 +25,9 @@ class ROrdinal(RPackage): license("GPL-2.0-or-later") + version( + "2023.12-4.1", sha256="2c9dcfa438c964ff1825033d0759d25f404a2a4c5252b81e40f19cffc18e38b1" + ) version( "2022.11-16", sha256="5488ad1dfa531a09d017d68d7393d376c8bc49cceeaa6a3e5f7d57b99168d493" ) diff --git a/var/spack/repos/builtin/packages/r-osqp/package.py b/var/spack/repos/builtin/packages/r-osqp/package.py index a02f97fe441a75..22077432ac18db 100644 --- a/var/spack/repos/builtin/packages/r-osqp/package.py +++ b/var/spack/repos/builtin/packages/r-osqp/package.py @@ -18,10 +18,12 @@ class ROsqp(RPackage): license("Apache-2.0 OR custom") + version("0.6.3.3", sha256="ff3d8e4ec7764333144d461eb5ea7a4adbf5b5f29f84c3ec3e60a93802e2f5bb") version("0.6.0.8", sha256="14034045ae4ae5ec4eae4944653d41d94282fa85a0cd53614ac86f34fd02ed97") version("0.6.0.7", sha256="ee6584d02341e3f1d8fab3b2cb93defd6c48d561297d82a6bedb3e7541868203") depends_on("r-rcpp@0.12.14:", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) + depends_on("r-matrix@1.6-1:", type=("build", "run"), when="@0.6.3:") depends_on("r-r6", type=("build", "run")) depends_on("cmake", type="build") diff --git a/var/spack/repos/builtin/packages/r-packrat/package.py b/var/spack/repos/builtin/packages/r-packrat/package.py index f62071662ee0ed..55110d1834984e 100644 --- a/var/spack/repos/builtin/packages/r-packrat/package.py +++ b/var/spack/repos/builtin/packages/r-packrat/package.py @@ -17,6 +17,7 @@ class RPackrat(RPackage): license("GPL-2.0-only") + version("0.9.2", sha256="69df5943257e6c4d06f3d907241b668b53dedece72158ca935260b8b8e1672d7") version("0.9.1", sha256="414013c6044d2985e69bbc8494c152716b6f81ca15b329c731cfe8f965fd3344") version("0.8.1", sha256="45db0301fa6a0a6944b070ac219cd1fa754bac24e517e59758cdc51e8aed23da") version("0.8.0", sha256="3025b9052974bec00fb09299226b80004d48e611e15a65e5a0bc49d3538844ef") diff --git a/var/spack/repos/builtin/packages/r-paleotree/package.py b/var/spack/repos/builtin/packages/r-paleotree/package.py index 48507c3653e045..0f8149cfac109b 100644 --- a/var/spack/repos/builtin/packages/r-paleotree/package.py +++ b/var/spack/repos/builtin/packages/r-paleotree/package.py @@ -17,6 +17,7 @@ class RPaleotree(RPackage): license("CC0-1.0") + version("3.4.7", sha256="cb28c8a7929905b50094439423b7839174f7ae1b652607583528d44e102f6317") version("3.4.5", sha256="c4dceb3352b74730643aa9f62ceb7f020ce6763614ba334723aadf0eb003d125") version("3.4.4", sha256="8809c3395e6904669db8c7cc3b54dd5c3c76948c8568d310cf02e4a5dbc678e4") version("3.3.25", sha256="aa64b9120075581229439227a12db776d052b03eb5f9721692a16a9402ac8712") diff --git a/var/spack/repos/builtin/packages/r-pamr/package.py b/var/spack/repos/builtin/packages/r-pamr/package.py index b16f865fbb660a..4883fa47bb7a6a 100644 --- a/var/spack/repos/builtin/packages/r-pamr/package.py +++ b/var/spack/repos/builtin/packages/r-pamr/package.py @@ -15,9 +15,11 @@ class RPamr(RPackage): license("GPL-2.0-only") + version("1.57", sha256="01968f7620f1a5e4be1ce666f7ff52211b9dcf6cf5948112c7441aabae56af3d") version("1.56.1", sha256="d0e527f2336ee4beee91eefb2a8f0dfa96413d9b5a5841d6fc7ff821e67c9779") version("1.55", sha256="ed910194937a6097ec79234d84777856fd520b111a7c79f7c86dc607169cc3c3") depends_on("r@2.10:", type=("build", "run")) + depends_on("r@3.5:", type=("build", "run"), when="@1.57:") depends_on("r-cluster", type=("build", "run")) depends_on("r-survival", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-pan/package.py b/var/spack/repos/builtin/packages/r-pan/package.py index c50d192d007429..a44741afc873fa 100644 --- a/var/spack/repos/builtin/packages/r-pan/package.py +++ b/var/spack/repos/builtin/packages/r-pan/package.py @@ -20,5 +20,8 @@ class RPan(RPackage): license("GPL-3.0-only") + version("1.9", sha256="cd91232d653783ea7f34c0eebaa80c472b5501b21eea500c4c1a8e57116c6eea") version("1.6", sha256="adc0df816ae38bc188bce0aef3aeb71d19c0fc26e063107eeee71a81a49463b6") version("1.4", sha256="e6a83f0799cc9714f5052f159be6e82ececd013d1626f40c828cda0ceb8b76dc") + + depends_on("r@2.10:", when="@1.9:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-parallelly/package.py b/var/spack/repos/builtin/packages/r-parallelly/package.py index ad333a9de4556a..ca52c9bb829df0 100644 --- a/var/spack/repos/builtin/packages/r-parallelly/package.py +++ b/var/spack/repos/builtin/packages/r-parallelly/package.py @@ -24,6 +24,7 @@ class RParallelly(RPackage): license("LGPL-2.1-or-later") + version("1.38.0", sha256="632c823c64d1bb840b2a5ff2cb2f5ffc743d62d5090a3cde55a2ebdde230d1aa") version("1.35.0", sha256="3f5e9b6507196aab052c5e67f8b524b75aa356731c5eaffbadde76c967ad5dcd") version("1.32.1", sha256="31c685f59ac7ff702fe2720910780378113adf0df0baf048a62eef94524cca90") version("1.31.1", sha256="40c7fc3d842fa928448e574091a521bead2367bf97545c744ca78ea9af3117da") diff --git a/var/spack/repos/builtin/packages/r-party/package.py b/var/spack/repos/builtin/packages/r-party/package.py index 4c0783c34c9bbd..adb388f56785ea 100644 --- a/var/spack/repos/builtin/packages/r-party/package.py +++ b/var/spack/repos/builtin/packages/r-party/package.py @@ -30,6 +30,7 @@ class RParty(RPackage): license("GPL-2.0-only") + version("1.3-17", sha256="f0e076b1e743cf50274b57d3a69526461fac5e499fc33d73825f293076f27d4b") version("1.3-13", sha256="def05e7f0c59f1b1ecf0ab3929cff75ae8c2691aaf52292cad4371281b897e7b") version("1.3-11", sha256="3ea41a1775d40bc6d0bdf657b98d939d99f98925ac985a31c969735c56618c9c") version("1.3-10", sha256="e5892955f6ce662ade568e646d1d672c3ecbf5d4e74b4a887a353e6160f7b56a") diff --git a/var/spack/repos/builtin/packages/r-partykit/package.py b/var/spack/repos/builtin/packages/r-partykit/package.py index c65bd967e30c3f..aa345616874bed 100644 --- a/var/spack/repos/builtin/packages/r-partykit/package.py +++ b/var/spack/repos/builtin/packages/r-partykit/package.py @@ -25,6 +25,7 @@ class RPartykit(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("1.2-22", sha256="0f0015aa970b10a85d1fabfd2fcf35a6552e292fe151766e348c105f7f5c0adb") version("1.2-20", sha256="63509aa3ed2d7417ad284c037cef66bc837fdb7a97967957e79b9fee8ed2e0da") version("1.2-16", sha256="e643d4e29c1894497e3dd5fe274783319d0044dec50282ed807cebc21736ddb2") version("1.2-15", sha256="b2e9454b2f4b9a39c9581c5871462f00acef4eeee5696ce3e32cfa1468d1e3ac") diff --git a/var/spack/repos/builtin/packages/r-patchwork/package.py b/var/spack/repos/builtin/packages/r-patchwork/package.py index 96b701585f6847..f025aa8e9f73df 100644 --- a/var/spack/repos/builtin/packages/r-patchwork/package.py +++ b/var/spack/repos/builtin/packages/r-patchwork/package.py @@ -20,8 +20,11 @@ class RPatchwork(RPackage): license("MIT") + version("1.2.0", sha256="cc31ea13560c424de9bfe2287d926a7d9e6cc8da2d5561402bb145b4f51b68a1") version("1.1.2", sha256="dab9d5d2d704d591717eaa6efeacf09cb6cd7bee2ca2c46d18414e8503ac8977") version("1.1.1", sha256="cf0d7d9f92945729b499d6e343441c55007d5b371206d5389b9e5154dc7cf481") depends_on("r-ggplot2@3.0.0:", type=("build", "run")) depends_on("r-gtable", type=("build", "run")) + depends_on("r-cli", type=("build", "run"), when="@1.1.3:") + depends_on("r-rlang", type=("build", "run"), when="@1.1.3:") diff --git a/var/spack/repos/builtin/packages/r-pbapply/package.py b/var/spack/repos/builtin/packages/r-pbapply/package.py index 070035aca81824..221fc29544b036 100644 --- a/var/spack/repos/builtin/packages/r-pbapply/package.py +++ b/var/spack/repos/builtin/packages/r-pbapply/package.py @@ -19,6 +19,7 @@ class RPbapply(RPackage): license("GPL-2.0-or-later") + version("1.7-2", sha256="aeed8c8c308c7e3827daf10b01b8ed4b88c1d68cea57d72d67c600c0ce0dae13") version("1.7-0", sha256="64b8e931e0a09031c20b66173ce80a646043b8f135d329bc86226a11c6b706c0") version("1.5-0", sha256="effdfee286e5ba9534dc2ac3cee96590a37f5cd2af28c836d00c25ca9f070a55") version("1.4-3", sha256="8fe6287535be766b5a688810e2cc1ca4e668ac6b42b6e832473fe5701133eb21") diff --git a/var/spack/repos/builtin/packages/r-pbdzmq/package.py b/var/spack/repos/builtin/packages/r-pbdzmq/package.py index c3ee4bbac8befb..95da65e1e9c71b 100644 --- a/var/spack/repos/builtin/packages/r-pbdzmq/package.py +++ b/var/spack/repos/builtin/packages/r-pbdzmq/package.py @@ -22,6 +22,7 @@ class RPbdzmq(RPackage): license("GPL-3.0-or-later") + version("0.3-11", sha256="da7e204d857370201f75a05fbd808a2f409d440cc96855bb8f48f4a5dd75405b") version("0.3-9", sha256="d033238d0a9810581f6b40c7c75263cfc495a585653bbff98e957c37954e0fb6") version("0.3-8", sha256="eded4ccf6ee54a59e06061f1c6e67a8ec36e03c6ab2318af64446d8f95505465") version("0.3-7", sha256="df2d2be14b2f57a64d76cdda4c01fd1c3d9aa12221c63524c01c71849df11808") diff --git a/var/spack/repos/builtin/packages/r-pbkrtest/package.py b/var/spack/repos/builtin/packages/r-pbkrtest/package.py index 912c6de655b21b..9dba98bf8c20c6 100644 --- a/var/spack/repos/builtin/packages/r-pbkrtest/package.py +++ b/var/spack/repos/builtin/packages/r-pbkrtest/package.py @@ -24,6 +24,7 @@ class RPbkrtest(RPackage): license("GPL-2.0-or-later") + version("0.5.3", sha256="b03e5156fef6a4a2ea67c1d15c051799e63acafef2f89962c580645266e6ba63") version("0.5.2", sha256="8e79adf035a0fcf3c82145ad55847497379e009f7be880ba3007ebeb2e69b6e3") version("0.5.1", sha256="b2a3452003d93890f122423b3f2487dcb6925440f5b8a05578509e98b6aec7c5") version("0.5-0.1", sha256="f56525488c6efe4a5cbf849bf9a82747041478605b166c29bad54e464e46f469") @@ -35,12 +36,14 @@ class RPbkrtest(RPackage): depends_on("r@3.2.3:", type=("build", "run"), when="@0.4-6:") depends_on("r@3.5.0:", type=("build", "run"), when="@0.5-0.1:") depends_on("r@4.1.0:", type=("build", "run"), when="@0.5.2:") + depends_on("r@4.2.0:", type=("build", "run"), when="@0.5.3:") depends_on("r-lme4@1.1-10:", type=("build", "run")) depends_on("r-lme4@1.1-31:", type=("build", "run"), when="@0.5.2:") depends_on("r-broom", type=("build", "run"), when="@0.5-0.1:") + depends_on("r-doby", type=("build", "run"), when="@0.5.3:") depends_on("r-dplyr", type=("build", "run"), when="@0.5-0.1:") depends_on("r-mass", type=("build", "run")) - depends_on("r-matrix@1.2.3:", type=("build", "run")) + depends_on("r-matrix@1.2-3:", type=("build", "run")) depends_on("r-numderiv", type=("build", "run"), when="@0.5-0.1:") depends_on("r-knitr", type=("build", "run"), when="@0.5-0.1:0.5.1") depends_on("r-magrittr", type=("build", "run"), when="@0.5-0.1:0.5.1") diff --git a/var/spack/repos/builtin/packages/r-pcapp/package.py b/var/spack/repos/builtin/packages/r-pcapp/package.py index 536c2e65da8a9e..7a362a7396bf77 100644 --- a/var/spack/repos/builtin/packages/r-pcapp/package.py +++ b/var/spack/repos/builtin/packages/r-pcapp/package.py @@ -16,6 +16,7 @@ class RPcapp(RPackage): cran = "pcaPP" + version("2.0-5", sha256="674faed967016a19f9d927506d6b3f4fc7ff2b2ab5679b2368429ee2c61b7c10") version("2.0-3", sha256="1aac554f039753bf9d026090e47d66b82bf3f1f75479ed0adefa3f7bbb55d603") version("2.0-2", sha256="a18b66974e0bfa5af6505acd777d04fd605b32f06009073488ee2f44280bb54b") version("2.0-1", sha256="9690e2f263162452d5a14bd8c52264cb70b317d30907411af4e5b6df4086121a") @@ -28,4 +29,5 @@ class RPcapp(RPackage): version("1.9-60", sha256="9a4b471957ac39ed7c860e3165bf8e099b5b55cf814654adb58f9d19df2718e7") version("1.9-50", sha256="137637314fba6e11883c63b0475d8e50aa7f363e064baa1e70245f7692565b56") + depends_on("r@3.6.2:", type=("build", "run"), when="@2.0-4:") depends_on("r-mvtnorm", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-pegas/package.py b/var/spack/repos/builtin/packages/r-pegas/package.py index c60f86f2bc7398..955281e8108535 100644 --- a/var/spack/repos/builtin/packages/r-pegas/package.py +++ b/var/spack/repos/builtin/packages/r-pegas/package.py @@ -22,6 +22,7 @@ class RPegas(RPackage): license("GPL-2.0-or-later") + version("1.3", sha256="103eb2b29d70e71315809421abdf6f2e8ada9c466469c6e3e7cc0314b9cd3dc8") version("1.2", sha256="9d39f3937c09ea6e2189949a23879bb366f5ca1df3a6aac411c7d2b73837ad55") version("1.1", sha256="87ba91a819496dfc3abdcc792ff853a6d49caae6335598a24c23e8851505ed59") version("0.14", sha256="7df90e6c4a69e8dbed2b3f68b18f1975182475bf6f86d4159256b52fd5332053") diff --git a/var/spack/repos/builtin/packages/r-permute/package.py b/var/spack/repos/builtin/packages/r-permute/package.py index 28e711039470c9..3b23775f414c32 100644 --- a/var/spack/repos/builtin/packages/r-permute/package.py +++ b/var/spack/repos/builtin/packages/r-permute/package.py @@ -25,4 +25,4 @@ class RPermute(RPackage): version("0.9-5", sha256="d2885384a07497e8df273689d6713fc7c57a7c161f6935f3572015e16ab94865") version("0.9-4", sha256="a541a5f5636ddd67fd856d3e11224f15bc068e96e23aabe3e607a7e7c2fc1cf1") - depends_on("r@2.14:", type=("build", "run")) + depends_on("r@2.14.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-philentropy/package.py b/var/spack/repos/builtin/packages/r-philentropy/package.py index 3bca7876a36eb7..f8d68c8e47df70 100644 --- a/var/spack/repos/builtin/packages/r-philentropy/package.py +++ b/var/spack/repos/builtin/packages/r-philentropy/package.py @@ -22,6 +22,7 @@ class RPhilentropy(RPackage): license("GPL-2.0-only") + version("0.8.0", sha256="3aa6d4918168f4fe2c56ea3f26381b0ffc02f1d5b9b95e294bac1a34bf66be3e") version("0.7.0", sha256="ce72e2327aee80aeeb630caa33be6a35e4f2b8a7491842d8c21099b9c43584b7") version("0.6.0", sha256="138acf2aedab17c9d367def378e35c8aba80d9e786284b2866955cea1c24eeb6") version("0.5.0", sha256="b39e9a825458f3377e23b2a133180566780e89019e9d22a6a5b7ca87c49c412f") diff --git a/var/spack/repos/builtin/packages/r-phylobase/package.py b/var/spack/repos/builtin/packages/r-phylobase/package.py index 6ef5f16f86cbe7..877479fdf8108d 100644 --- a/var/spack/repos/builtin/packages/r-phylobase/package.py +++ b/var/spack/repos/builtin/packages/r-phylobase/package.py @@ -16,6 +16,7 @@ class RPhylobase(RPackage): license("GPL-2.0-or-later") + version("0.8.12", sha256="9b81ca60dc6215e74b720880cc2db3abc1f7e6d8785ea7d7df95a950f0778f20") version("0.8.10", sha256="5a44380ff49bab333a56f6f96157324ade8afb4af0730e013194c4badb0bf94b") depends_on("r-ade4", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-phytools/package.py b/var/spack/repos/builtin/packages/r-phytools/package.py index 894bf1daae403f..fbe68ae74b8380 100644 --- a/var/spack/repos/builtin/packages/r-phytools/package.py +++ b/var/spack/repos/builtin/packages/r-phytools/package.py @@ -32,6 +32,7 @@ class RPhytools(RPackage): license("GPL-2.0-or-later") + version("2.3-0", sha256="973020a695be3fef94a37d7d6732d9352b66e44d30feb554d267b6aeb646d081") version("1.5-1", sha256="f8be59abbff1f5032be4523c361da53b0d5b71677fedebba6d7cbae2dca7e101") version("1.2-0", sha256="ba3c684118c0eaab4601b21988c553ce7ee019df1714d2ac8d4451075f843b86") version("1.0-3", sha256="bfe2aec6aae8235264c1494eee42be494fed81a676c6de9e39c57a6e3682b37d") @@ -48,6 +49,7 @@ class RPhytools(RPackage): depends_on("r-clustergeneration", type=("build", "run")) depends_on("r-coda", type=("build", "run")) depends_on("r-combinat", type=("build", "run")) + depends_on("r-deoptim", type=("build", "run"), when="@2.2-0:") depends_on("r-doparallel", type=("build", "run"), when="@1.5-1:") depends_on("r-expm", type=("build", "run")) depends_on("r-foreach", type=("build", "run"), when="@1.5-1:") @@ -57,8 +59,8 @@ class RPhytools(RPackage): depends_on("r-numderiv", type=("build", "run")) depends_on("r-optimparallel", type=("build", "run"), when="@1.2-0:") depends_on("r-phangorn@2.3.1:", type=("build", "run")) - depends_on("r-plotrix", type=("build", "run")) depends_on("r-scatterplot3d", type=("build", "run")) depends_on("r-animation", type=("build", "run"), when="@:0.6-99") depends_on("r-gtools", type=("build", "run"), when="@0.6-99:0.7-70") + depends_on("r-plotrix", type=("build", "run"), when="@:2.0-2") diff --git a/var/spack/repos/builtin/packages/r-pinfsc50/package.py b/var/spack/repos/builtin/packages/r-pinfsc50/package.py index 2c0808598ccce2..c2f91b8d1d0764 100644 --- a/var/spack/repos/builtin/packages/r-pinfsc50/package.py +++ b/var/spack/repos/builtin/packages/r-pinfsc50/package.py @@ -21,6 +21,7 @@ class RPinfsc50(RPackage): license("GPL-2.0-or-later") + version("1.3.0", sha256="971627cf4567fdb34db26010f2db44cfac5ff07f327d3247e778638cc4e849bf") version("1.2.0", sha256="ed1fe214b9261feef8abfbf724c2bd9070d68e99a6ea95208aff2c57bbef8794") depends_on("r@3.2.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-pixmap/package.py b/var/spack/repos/builtin/packages/r-pixmap/package.py index 25158831a2b0b4..b8a1808f4d14be 100644 --- a/var/spack/repos/builtin/packages/r-pixmap/package.py +++ b/var/spack/repos/builtin/packages/r-pixmap/package.py @@ -16,5 +16,6 @@ class RPixmap(RPackage): license("GPL-2.0-only") + version("0.4-13", sha256="e3dbc641a0497575b45a4140dadc6bf43cdf39b02393f93f1b0ee4f4d026e711") version("0.4-12", sha256="893ba894d4348ba05e6edf9c1b4fd201191816b444a214f7a6b2c0a79b0a2aec") version("0.4-11", sha256="6fa010749a59cdf56aad9f81271473b7d55697036203f2cd5d81372bcded7412") diff --git a/var/spack/repos/builtin/packages/r-pkgbuild/package.py b/var/spack/repos/builtin/packages/r-pkgbuild/package.py index 9289da8fb73d33..35498c04a8df18 100644 --- a/var/spack/repos/builtin/packages/r-pkgbuild/package.py +++ b/var/spack/repos/builtin/packages/r-pkgbuild/package.py @@ -17,6 +17,7 @@ class RPkgbuild(RPackage): license("MIT") + version("1.4.4", sha256="5972843cd43654715cdbdd28f50af013fa3d1c213146654992b2b5f39ed0e2a8") version("1.4.0", sha256="357f3c40c99650eaa8a715991ff1355a553acb165f217ed204712f698ba55ed6") version("1.3.1", sha256="7c6a82d1e6b19e136a7d16095743c50cd7b6340eeda594e4a8e14d74972ddb48") version("1.2.0", sha256="2e19308d3271fefd5e118c6d132d6a2511253b903620b5417892c72d2010a963") @@ -26,15 +27,17 @@ class RPkgbuild(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@1.4.0:") + depends_on("r@3.5:", type=("build", "run"), when="@1.4.3:") depends_on("r-callr@2.0.0:", type=("build", "run")) depends_on("r-callr@3.2.0:", type=("build", "run"), when="@1.0.4:") depends_on("r-cli", type=("build", "run")) depends_on("r-cli@3.4.0:", type=("build", "run"), when="@1.4.0:") - depends_on("r-crayon", type=("build", "run")) depends_on("r-desc", type=("build", "run")) - depends_on("r-prettyunits", type=("build", "run")) depends_on("r-processx", type=("build", "run"), when="@1.4.0:") depends_on("r-r6", type=("build", "run")) - depends_on("r-rprojroot", type=("build", "run")) - depends_on("r-withr@2.1.2:", type=("build", "run")) - depends_on("r-withr@2.3.0:", type=("build", "run"), when="@1.3.1:") + + depends_on("r-crayon", type=("build", "run"), when="@:1.4.2") + depends_on("r-prettyunits", type=("build", "run"), when="@:1.4.2") + depends_on("r-rprojroot", type=("build", "run"), when="@:1.4.2") + depends_on("r-withr@2.1.2:", type=("build", "run"), when="@:1.4.0") + depends_on("r-withr@2.3.0:", type=("build", "run"), when="@1.3.1:1.4.0") diff --git a/var/spack/repos/builtin/packages/r-pkgcache/package.py b/var/spack/repos/builtin/packages/r-pkgcache/package.py index 4f7db9e75be88d..33d28cf77c928d 100644 --- a/var/spack/repos/builtin/packages/r-pkgcache/package.py +++ b/var/spack/repos/builtin/packages/r-pkgcache/package.py @@ -17,6 +17,7 @@ class RPkgcache(RPackage): license("MIT") + version("2.2.2", sha256="7ebd6cc5fc0325eae504877dfe9651f90e51b3b9778cecc8aae2671b617b5be3") version("2.1.0", sha256="cfc03c2060028097972c32c3f2d922d7a598dfd963e5e5250d85a3dfa2f2e206") version("2.0.3", sha256="80deafd60f15dda029536d4ce13c37ef91c49cb6636323daadbf3d64a67da028") version("2.0.2", sha256="6860b5b7046ef349c2fdad4ba3aecb57c7516fba952a19e3ff7cccb7f859f881") @@ -31,10 +32,8 @@ class RPkgcache(RPackage): depends_on("r-curl@3.2:", type=("build", "run")) depends_on("r-filelock", type=("build", "run")) depends_on("r-jsonlite", type=("build", "run")) - depends_on("r-prettyunits", type=("build", "run")) depends_on("r-r6", type=("build", "run")) depends_on("r-processx@3.3.0.9001:", type=("build", "run")) - depends_on("r-rappdirs", type=("build", "run")) depends_on("r-assertthat", type=("build", "run"), when="@:1.3.0") depends_on("r-digest", type=("build", "run"), when="@:1.3.0") @@ -42,3 +41,5 @@ class RPkgcache(RPackage): depends_on("r-tibble", type=("build", "run"), when="@:1.3.0") depends_on("r-uuid", type=("build", "run"), when="@:1.3.0") depends_on("r-glue", type=("build", "run"), when="@:2.0.2") + depends_on("r-prettyunits", type=("build", "run"), when="@:2.2.0") + depends_on("r-rappdirs", type=("build", "run"), when="@:2.2.0") diff --git a/var/spack/repos/builtin/packages/r-pkgdepends/package.py b/var/spack/repos/builtin/packages/r-pkgdepends/package.py index 73ba6e593b87db..fc85a9557a83dc 100644 --- a/var/spack/repos/builtin/packages/r-pkgdepends/package.py +++ b/var/spack/repos/builtin/packages/r-pkgdepends/package.py @@ -22,34 +22,38 @@ class RPkgdepends(RPackage): license("MIT") + version("0.7.2", sha256="b17e22d01250916b06868317359239ca9273d7765b5ead9481b47cf0d96acd26") version("0.5.0", sha256="eadc98e335f9d2cc10b31cf7a5b55fe3308266fbd6f46d5dbd37b5d90bfcf1bc") version("0.3.2", sha256="61db529965f973847b4d1337c6556527a89953cad09d231a6e6ca2145a426a21") version("0.3.1", sha256="8e4263a1792871ee9629b0d6a8caeb53b77012db3b5be91b432f3553cd2a80be") version("0.2.0", sha256="59afdbe0e59663088ba4facac5cd011a0a05b0b9c540103fb8b9f0a673bf4d94") depends_on("r@3.4:", type=("build", "run"), when="@0.3.1:") + depends_on("r@3.5:", type=("build", "run"), when="@0.7.0:") depends_on("r-callr@3.3.1:", type=("build", "run")) depends_on("r-cli@2.1.0:", type=("build", "run")) depends_on("r-cli@3.6.0:", type=("build", "run"), when="@0.5.0:") depends_on("r-curl", type=("build", "run")) depends_on("r-desc@1.2.0:", type=("build", "run")) + depends_on("r-desc@1.4.3:", type=("build", "run"), when="@0.7.1:") depends_on("r-filelock@1.0.2:", type=("build", "run")) - depends_on("r-glue", type=("build", "run")) depends_on("r-jsonlite", type=("build", "run")) depends_on("r-lpsolve", type=("build", "run")) depends_on("r-pkgbuild@1.0.2:", type=("build", "run")) depends_on("r-pkgcache@1.3.0:", type=("build", "run")) depends_on("r-pkgcache@2.0.0:", type=("build", "run"), when="@0.3.1:") depends_on("r-pkgcache@2.1.0:", type=("build", "run"), when="@0.5.0:") - depends_on("r-prettyunits@1.1.1:", type=("build", "run")) + depends_on("r-pkgcache@2.2.0:", type=("build", "run"), when="@0.6.0:") depends_on("r-processx@3.4.2:", type=("build", "run")) depends_on("r-ps", type=("build", "run")) depends_on("r-r6", type=("build", "run")) - depends_on("r-rprojroot", type=("build", "run")) - depends_on("r-withr@2.1.1:", type=("build", "run")) depends_on("r-zip@2.1.0:", type=("build", "run")) depends_on("r-zip@2.3.0:", type=("build", "run"), when="@0.5.0:") + depends_on("r-glue", type=("build", "run"), when="@:0.7.0") + depends_on("r-prettyunits@1.1.1:", type=("build", "run"), when="@:0.7.0") + depends_on("r-rprojroot", type=("build", "run"), when="@:0.7.0") + depends_on("r-withr@2.1.1:", type=("build", "run"), when="@:0.5.0") depends_on("r-rematch2", type=("build", "run"), when="@:0.2.0") depends_on("r-tibble", type=("build", "run"), when="@:0.2.0") depends_on("r-crayon", type=("build", "run"), when="@:0.3.2") diff --git a/var/spack/repos/builtin/packages/r-pkgdown/package.py b/var/spack/repos/builtin/packages/r-pkgdown/package.py index 14cb41076c0d5e..017b64e16034e3 100644 --- a/var/spack/repos/builtin/packages/r-pkgdown/package.py +++ b/var/spack/repos/builtin/packages/r-pkgdown/package.py @@ -17,29 +17,42 @@ class RPkgdown(RPackage): license("MIT") + version("2.1.0", sha256="c4d1df3b738d66e60db71e57c01c86c46f2fe58f972c9e2403c07a1436279fb4") version("2.0.7", sha256="f33872869dfa8319182d87e90eab3245ff69293b3b791471bf9538afb81b356a") version("2.0.6", sha256="d29a65c8a5b189fd89842e769f58f8c2369a55406269eabfb66d41d0fe1c7f69") depends_on("r@3.1.0:", type=("build", "run")) + depends_on("r@3.6:", type=("build", "run"), when="@2.0.8:") depends_on("r-bslib@0.3.1:", type=("build", "run")) + depends_on("r-bslib@0.5.1:", type=("build", "run"), when="@2.0.8:") depends_on("r-callr@2.0.2:", type=("build", "run")) depends_on("r-callr@3.7.3:", type=("build", "run"), when="@2.0.7:") depends_on("r-cli", type=("build", "run")) + depends_on("r-cli@3.6.1:", type=("build", "run"), when="@2.0.8:") depends_on("r-desc", type=("build", "run")) + depends_on("r-desc@1.4.0:", type=("build", "run"), when="@2.0.8:") depends_on("r-digest", type=("build", "run")) depends_on("r-downlit@0.4.0:", type=("build", "run")) + depends_on("r-downlit@0.4.4:", type=("build", "run"), when="@2.1.0:") + depends_on("r-fontawesome", type=("build", "run"), when="@2.1.0:") depends_on("r-fs@1.4.0:", type=("build", "run")) - depends_on("r-httr@1.4.2:", type=("build", "run")) + depends_on("r-httr2@1.0.0:", type=("build", "run"), when="@2.1.0:") depends_on("r-jsonlite", type=("build", "run")) - depends_on("r-magrittr", type=("build", "run")) - depends_on("r-memoise", type=("build", "run")) + depends_on("r-openssl", type=("build", "run"), when="@2.1.0:") depends_on("r-purrr", type=("build", "run")) + depends_on("r-purrr@1.0.0:", type=("build", "run"), when="@2.0.8:") depends_on("r-ragg", type=("build", "run")) depends_on("r-rlang@1.0.0:", type=("build", "run")) + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@2.0.9:") depends_on("r-rmarkdown@1.1.9007:", type=("build", "run")) + depends_on("r-rmarkdown@2.27:", type=("build", "run"), when="@2.1.0:") depends_on("r-tibble", type=("build", "run")) depends_on("r-whisker", type=("build", "run")) depends_on("r-withr@2.4.3:", type=("build", "run")) depends_on("r-xml2@1.3.1:", type=("build", "run")) depends_on("r-yaml", type=("build", "run")) depends_on("pandoc") + + depends_on("r-httr@1.4.2:", type=("build", "run"), when="@:2.0.9") + depends_on("r-magrittr", type=("build", "run"), when="@:2.0.9") + depends_on("r-memoise", type=("build", "run"), when="@:2.0.9") diff --git a/var/spack/repos/builtin/packages/r-pkgload/package.py b/var/spack/repos/builtin/packages/r-pkgload/package.py index 5d22035a99e780..3a6b717b956ef6 100644 --- a/var/spack/repos/builtin/packages/r-pkgload/package.py +++ b/var/spack/repos/builtin/packages/r-pkgload/package.py @@ -17,6 +17,7 @@ class RPkgload(RPackage): license("GPL-3.0-only") + version("1.4.0", sha256="09e4885e9cc25af29063a525da0b2ac9dd66fc7a95ea085bf5060312e3a67549") version("1.3.4", sha256="60b04b948cda4dc56257b1e89f9b0a4b1273cacecdb2bd995d66dd76e89926ce") version("1.3.3", sha256="b0898122876479cc4a35cd566654b3a7b50f8ac105565dbf3f8b9d4283816959") version("1.3.2.1", sha256="a1987b123fcbdb9d908b6dc55a04d3cf47d68cfa5090186e4876a429313374b2") @@ -31,10 +32,12 @@ class RPkgload(RPackage): depends_on("r-cli", type=("build", "run"), when="@1.1.0:") depends_on("r-cli@3.3.0:", type=("build", "run"), when="@1.3.0:") - depends_on("r-crayon", type=("build", "run"), when="@1.1.0:") + depends_on("r-crayon", type=("build", "run"), when="@1.1.0:1.3") depends_on("r-desc", type=("build", "run")) depends_on("r-glue", type=("build", "run"), when="@1.3.0:") depends_on("r-fs", type=("build", "run"), when="@1.3.0:") + depends_on("r-lifecycle", type=("build", "run"), when="@1.4.0:") + depends_on("r-processx", type=("build", "run"), when="@1.4.0:") depends_on("r-rlang", type=("build", "run")) depends_on("r-rlang@1.0.3:", type=("build", "run"), when="@1.3.0:1.3.3") depends_on("r-rlang@1.1.1:", type=("build", "run"), when="@1.3.4:") diff --git a/var/spack/repos/builtin/packages/r-pkgmaker/package.py b/var/spack/repos/builtin/packages/r-pkgmaker/package.py index 47efa743ec4041..af688596a32530 100644 --- a/var/spack/repos/builtin/packages/r-pkgmaker/package.py +++ b/var/spack/repos/builtin/packages/r-pkgmaker/package.py @@ -21,6 +21,7 @@ class RPkgmaker(RPackage): license("GPL-2.0-or-later") + version("0.32.10", sha256="972b0473a64408ccc4841fa3f09a567cc32811e69c3c7e42a2f391a5eb2e2933") version("0.32.8", sha256="0ff3578d2c051b544c3f105cfe4801575aac1564add048f9e952c53a8ccd1745") version("0.32.2", sha256="ce45b22def771a9c90a414093823e6befe7e23489c500eeccee5154b44d3ef91") version("0.27", sha256="17a289d8f596ba5637b07077b3bff22411a2c2263c0b7de59fe848666555ec6a") diff --git a/var/spack/repos/builtin/packages/r-pki/package.py b/var/spack/repos/builtin/packages/r-pki/package.py new file mode 100644 index 00000000000000..612dbecdbce823 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-pki/package.py @@ -0,0 +1,22 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RPki(RPackage): + """Public Key Infrastucture functions such as verifying certificates, + RSA encription and signing which can be used to build PKI infrastructure + and perform cryptographic tasks.""" + + homepage = "http://www.rforge.net/PKI" + cran = "PKI" + + license("GPL-2.0-or-later", checked_by="wdconinc") + + version("0.1-14", sha256="c024e81977b978b705460df96639e3369420bd7e8f4f3242ec796255dc1b7966") + + depends_on("r@2.9.0:", type=("build", "run")) + depends_on("r-base64enc", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-plot3d/package.py b/var/spack/repos/builtin/packages/r-plot3d/package.py index 0ba526522a76cd..31a6ed7e753661 100644 --- a/var/spack/repos/builtin/packages/r-plot3d/package.py +++ b/var/spack/repos/builtin/packages/r-plot3d/package.py @@ -15,6 +15,7 @@ class RPlot3d(RPackage): cran = "plot3D" + version("1.4.1", sha256="db6df74844dda9177f2be024762b2f0e63182916e987a09480514d078d55d1f4") version("1.4", sha256="d04a45197646fb36bc38870c1c2351cb56b912bd772b1ebfa25eaeef35fda9c0") version("1.3", sha256="b9e4ec2789e34ad249318900e186868650e1a33466b385cb492a45466db3dfc9") version("1.1.1", sha256="f6fe4a001387132626fc553ed1d5720d448b8064eb5a6917458a798e1d381632") diff --git a/var/spack/repos/builtin/packages/r-plotly/package.py b/var/spack/repos/builtin/packages/r-plotly/package.py index 9b266588fdf4d4..ba3ba33ad13b84 100644 --- a/var/spack/repos/builtin/packages/r-plotly/package.py +++ b/var/spack/repos/builtin/packages/r-plotly/package.py @@ -17,6 +17,7 @@ class RPlotly(RPackage): license("MIT") + version("4.10.4", sha256="cfa995b7ed55d31a196707a3ae6ea352dd907cef3058a3bf1956fde39366d867") version("4.10.1", sha256="ac0921a1cba24e17a0f3a0a28b7a40ac930e17fe5caa9c3973c9a8d1e20c367a") version("4.10.0", sha256="bd995c654dbc8c09a84adaba8def99766919e3894caf18b551bb26b2f591389a") version("4.9.3", sha256="d44d1a16d96de28bc2d36f1c897384215eeec44d109546c6e9c2707db0880120") diff --git a/var/spack/repos/builtin/packages/r-plotmo/package.py b/var/spack/repos/builtin/packages/r-plotmo/package.py index de5de683ee83b4..2f0cb89e819b98 100644 --- a/var/spack/repos/builtin/packages/r-plotmo/package.py +++ b/var/spack/repos/builtin/packages/r-plotmo/package.py @@ -17,6 +17,7 @@ class RPlotmo(RPackage): license("GPL-3.0-only") + version("3.6.3", sha256="6917cd8185325f1f2998fb14def9e6a8d93f1b708cf70d7c443d3960c9189b7b") version("3.6.2", sha256="cde33a8ec558b12d8e11d7d0531e73f6678a25ee589b79897d2fc425a3fd353c") version("3.6.1", sha256="245a0c87f0cca08746c6fdc60da2e3856cd69b1a2b7b5641293c620d4ae04343") version("3.6.0", sha256="c05afcc442f9542868beea5c3c40fb93b049f9b61c42725b2a1e2bc750c241e3") @@ -25,4 +26,5 @@ class RPlotmo(RPackage): depends_on("r@3.4.0:", type=("build", "run")) depends_on("r-formula@1.2-3:", type=("build", "run")) depends_on("r-plotrix", type=("build", "run")) - depends_on("r-teachingdemos", type=("build", "run")) + + depends_on("r-teachingdemos", type=("build", "run"), when="@:3.6.2") diff --git a/var/spack/repos/builtin/packages/r-plotrix/package.py b/var/spack/repos/builtin/packages/r-plotrix/package.py index 9a74b4ceb74b53..bbeecbe9f3cb26 100644 --- a/var/spack/repos/builtin/packages/r-plotrix/package.py +++ b/var/spack/repos/builtin/packages/r-plotrix/package.py @@ -15,6 +15,7 @@ class RPlotrix(RPackage): license("GPL-2.0-or-later") + version("3.8-4", sha256="e6a22d93ab61c67af21cbbe1fe333c06934cf576a44745bf2beee59bceaae8d6") version("3.8-2", sha256="bb72953102889cea41cd6521874e35d2458ebd10aab97ba6f262e102cac0bc1f") version("3.7-8", sha256="8ccd1f7e656413b9956cea614c986ce9cc61366deba356afb38cee6672a59480") version("3.7-6", sha256="83d5f7574592953288b4fe39c4c0dd7670d097598ad7f6bddbb0687a32954e46") diff --git a/var/spack/repos/builtin/packages/r-pls/package.py b/var/spack/repos/builtin/packages/r-pls/package.py index b5cdc6df154562..5990dc20614e6a 100644 --- a/var/spack/repos/builtin/packages/r-pls/package.py +++ b/var/spack/repos/builtin/packages/r-pls/package.py @@ -17,6 +17,7 @@ class RPls(RPackage): license("GPL-2.0-only") + version("2.8-4", sha256="785b1b63639754811bec124fcd46bd821c76611380f49a7555695a2969b3d562") version("2.8-1", sha256="e22e7febeef1a6800b97ee7f6eb03dc1d6681aba7f9298449c9e6375fa78f28c") version("2.8-0", sha256="eff3a92756ca34cdc1661fa36d2bf7fc8e9f4132d2f1ef9ed0105c83594618bf") version("2.7-3", sha256="8f1d960ab74f05fdd11c4c7a3d30ff9e263fc658f5690b67278ca7c045d0742c") diff --git a/var/spack/repos/builtin/packages/r-plyr/package.py b/var/spack/repos/builtin/packages/r-plyr/package.py index e0cd4ca9f3acf7..34387c943f6ca0 100644 --- a/var/spack/repos/builtin/packages/r-plyr/package.py +++ b/var/spack/repos/builtin/packages/r-plyr/package.py @@ -21,6 +21,7 @@ class RPlyr(RPackage): license("MIT") + version("1.8.9", sha256="15b5e7f711d53bf41b8687923983b8ef424563aa2f74c5195feb5b1df1aee103") version("1.8.8", sha256="a73211b4bbe13e4e5e764966a8dd90172c1cc311938dd464d142e1c7a701070c") version("1.8.7", sha256="7d9fdaf1157035a49c3661da3bbaa7bfcf782aafe1b98f7b5a68b0520046e87f") version("1.8.6", sha256="ea55d26f155443e9774769531daa5d4c20a0697bb53abd832e891b126c935287") diff --git a/var/spack/repos/builtin/packages/r-pmcmrplus/package.py b/var/spack/repos/builtin/packages/r-pmcmrplus/package.py index 047b2bffa94bc5..e5e76090bf7a12 100644 --- a/var/spack/repos/builtin/packages/r-pmcmrplus/package.py +++ b/var/spack/repos/builtin/packages/r-pmcmrplus/package.py @@ -36,6 +36,7 @@ class RPmcmrplus(RPackage): cran = "PMCMRplus" + version("1.9.10", sha256="d883f897fa26a0bca0ba464dac7b360c6adee2c7867097e91fc7588030ed1f70") version("1.9.6", sha256="7f4791566d7dfaed0883187c52fbb845797ff6a1066e77667683ce96391b72d7") version("1.9.4", sha256="1ec36674bb6d2fac3a1b0889c4672e40849c7e3565ffb34bb73b61f973bba19a") version("1.9.3", sha256="76baba60f57343fa5bb6f6d2ea27aab77178e02b0d2f9d5d74abde7d18994f03") diff --git a/var/spack/repos/builtin/packages/r-polspline/package.py b/var/spack/repos/builtin/packages/r-polspline/package.py index ed627a8781b775..f773e956218cbb 100644 --- a/var/spack/repos/builtin/packages/r-polspline/package.py +++ b/var/spack/repos/builtin/packages/r-polspline/package.py @@ -17,6 +17,7 @@ class RPolspline(RPackage): license("GPL-2.0-or-later") + version("1.1.25", sha256="2943fc4cd922300afeaa58e6a0e4c21e5a0f7255e6367c7ea6ad136fce1e9ba3") version("1.1.22", sha256="b2f2198f020d7d492a87bad2b58a6cc9ae91d95b7330dd12b9b1145c72d7457b") version("1.1.20", sha256="6992484e9e41036debef1e705e26959f8f5c7a68d3e1fda58273d2a72297a1b5") version("1.1.19", sha256="953e3c4d007c3ef86ac2af3c71b272a99e8e35b194bdd58575785558c6711f66") diff --git a/var/spack/repos/builtin/packages/r-polyclip/package.py b/var/spack/repos/builtin/packages/r-polyclip/package.py index 55c5ff6f81d59f..93eaf4a57e7400 100644 --- a/var/spack/repos/builtin/packages/r-polyclip/package.py +++ b/var/spack/repos/builtin/packages/r-polyclip/package.py @@ -21,7 +21,9 @@ class RPolyclip(RPackage): license("BSL-1.0") + version("1.10-7", sha256="f58eaac3a5b2f6711c0c5f12fff91cf80a245ae45878f7217880ab062b5550d3") version("1.10-4", sha256="84d2c9778771d3759b49d7d16fb54c8ddc5397da3b1d21074bc4aa42c02e6f56") version("1.10-0", sha256="74dabc0dfe5a527114f0bb8f3d22f5d1ae694e6ea9345912909bae885525d34b") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@1.10-7:") diff --git a/var/spack/repos/builtin/packages/r-pool/package.py b/var/spack/repos/builtin/packages/r-pool/package.py index 56c8ad12266c2f..cb713e912457d3 100644 --- a/var/spack/repos/builtin/packages/r-pool/package.py +++ b/var/spack/repos/builtin/packages/r-pool/package.py @@ -17,12 +17,16 @@ class RPool(RPackage): license("MIT") + version("1.0.3", sha256="c461f96928c3e524a52018160d2406f3a1f5ef5abbae54ae89fe7ecd4c1a1cec") version("1.0.1", sha256="73d5dffd55e80fdadb88401f12570fcf08e932c4c86761931241f9841fddadbf") version("0.1.6", sha256="cdbe5f6c7f757c01893dc9870df0fb8d300829da0e427f6c2559b01caa52d9e1") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@1.0.2:") depends_on("r-dbi", type=("build", "run")) + depends_on("r-dbi@1.2.1:", type=("build", "run"), when="@1.0.3:") depends_on("r-r6", type=("build", "run")) - depends_on("r-withr", type=("build", "run"), when="@1.0.1:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.0.1:") depends_on("r-later@1.0.0:", type=("build", "run")) + + depends_on("r-withr", type=("build", "run"), when="@1.0.1") diff --git a/var/spack/repos/builtin/packages/r-poorman/package.py b/var/spack/repos/builtin/packages/r-poorman/package.py index ea5c5ac0e4a80b..09945188155804 100644 --- a/var/spack/repos/builtin/packages/r-poorman/package.py +++ b/var/spack/repos/builtin/packages/r-poorman/package.py @@ -16,6 +16,7 @@ class RPoorman(RPackage): license("MIT") + version("0.2.7", sha256="089418293cdfde3b46bf53e891a3a8ad924d953a1a7e5ae981de54ebde62b4aa") version("0.2.6", sha256="328e0a3e610f17e845d95cd9c0803e0367d6f5835706e8b0ed921fc500983774") version("0.2.5", sha256="b92b30ce0f4f02c4fa4a4e90673ef2e0ed8de9b9080dd064506581989fcc0716") diff --git a/var/spack/repos/builtin/packages/r-popvar/package.py b/var/spack/repos/builtin/packages/r-popvar/package.py index 90c15fa3cb6895..c7afc8c5c63bd2 100644 --- a/var/spack/repos/builtin/packages/r-popvar/package.py +++ b/var/spack/repos/builtin/packages/r-popvar/package.py @@ -22,6 +22,7 @@ class RPopvar(RPackage): cran = "PopVar" + version("1.3.1", sha256="adb0f6705b7bb984272db31f8ac6612100f7970aa7d0e5cfdef76124dd33ac98") version("1.3.0", sha256="3145c41c9aa1588d47aaf76c082e6b1c2fd95cf5014b98bd2867cbf2cec782f9") version("1.2.1", sha256="5e3df79634ab63708a431e4b8e6794675972ac6c58d2bc615726aa0f142f5f25") diff --git a/var/spack/repos/builtin/packages/r-posterior/package.py b/var/spack/repos/builtin/packages/r-posterior/package.py index 4d1c9fdc2c7f1f..859ad7c7999354 100644 --- a/var/spack/repos/builtin/packages/r-posterior/package.py +++ b/var/spack/repos/builtin/packages/r-posterior/package.py @@ -23,6 +23,7 @@ class RPosterior(RPackage): license("BSD-3-Clause") + version("1.6.0", sha256="34612a39fb15a8e3ba6ef5c32a041a4b5f77554216dd774563f46db1150bf40c") version("1.4.1", sha256="2b8953fa8d6890a105521023c431ddea725465eb95cf9454a88852e43ebb58d3") version("1.3.1", sha256="7000780290a24be86dbc406dd4338aec622d8dee1e471b68b55abb4872934d7a") version("1.2.1", sha256="b757e06885a1f21e7ad8f5a3feaecbe0a71ae8d766e4aec4c3aa2183a810afe1") diff --git a/var/spack/repos/builtin/packages/r-powerlaw/package.py b/var/spack/repos/builtin/packages/r-powerlaw/package.py index 4c664b9d152282..c73409dcbce4c7 100644 --- a/var/spack/repos/builtin/packages/r-powerlaw/package.py +++ b/var/spack/repos/builtin/packages/r-powerlaw/package.py @@ -16,6 +16,7 @@ class RPowerlaw(RPackage): cran = "poweRlaw" + version("0.80.0", sha256="713556af1f47e1de749670d08f963688908cfa80e9dfda590efd1a28441772cb") version("0.70.6", sha256="efc091449c5c6494c1c13c85a8eb95625d1c55ffffebe86c7ea16e4abbafa191") version("0.70.2", sha256="240f1454389b1a00ad483fb63e5b53243cc9367f21a3e7253ab2c293673459ab") version("0.70.1", sha256="15b1b8dadeb550c01b9f1308cfa64720be6fbf56afb80f6a096987d6a0055913") diff --git a/var/spack/repos/builtin/packages/r-prabclus/package.py b/var/spack/repos/builtin/packages/r-prabclus/package.py index 56d94d7ba93d81..df23c06398adac 100644 --- a/var/spack/repos/builtin/packages/r-prabclus/package.py +++ b/var/spack/repos/builtin/packages/r-prabclus/package.py @@ -21,11 +21,13 @@ class RPrabclus(RPackage): license("GPL-2.0-or-later") + version("2.3-3", sha256="005d000a9ac357e670de26e5b8fc4ddb1617351275fa43bf6d2e88b8774358c1") version("2.3-2", sha256="f421bcbcb557281e0de4a06b15f9a496adb5c640e883c0f7bb12051efc69e441") version("2.3-1", sha256="ef3294767d43bc3f72478fdaf0d1f13c8de18881bf9040c9f1add68af808b3c0") version("2.2-7.1", sha256="2c5bf3bbb0d225e04c53bb0e11e9c2a6809f0e46d95b8f6dc14b9dd6a2452975") version("2.2-6", sha256="41792980e40ba18204fab92d85120dcd468860e2204e52fb42636c6f7aee5a62") depends_on("r@2.1.0:", type=("build", "run")) + depends_on("r@2.10:", type=("build", "run"), when="@2.2-2:") depends_on("r-mass", type=("build", "run")) depends_on("r-mclust", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-pracma/package.py b/var/spack/repos/builtin/packages/r-pracma/package.py index 2d4858d429a0b6..59d54e213252c5 100644 --- a/var/spack/repos/builtin/packages/r-pracma/package.py +++ b/var/spack/repos/builtin/packages/r-pracma/package.py @@ -18,6 +18,7 @@ class RPracma(RPackage): license("GPL-3.0-or-later") + version("2.4.4", sha256="1a4ef3af2197f999dbaa614bf5a70f09ec463d8c91feb5aa0d995de24ec6ba7f") version("2.4.2", sha256="1d50337fdfd9a8d704a64f01dae5d52b9a2bd6d872fdaa4a6685b8d3bde89c16") version("2.3.8", sha256="2302d454406e72711714732658d0c59c9d5a1ead698f22ee23f38cba63d42764") version("2.3.6", sha256="17ac83fd48c9155e00dc3f0433f95723505dc73d046860afd9001866d699b8de") diff --git a/var/spack/repos/builtin/packages/r-prettyunits/package.py b/var/spack/repos/builtin/packages/r-prettyunits/package.py index b3b317d3f601c9..8c0503a4eb2d5e 100644 --- a/var/spack/repos/builtin/packages/r-prettyunits/package.py +++ b/var/spack/repos/builtin/packages/r-prettyunits/package.py @@ -17,8 +17,11 @@ class RPrettyunits(RPackage): license("MIT") + version("1.2.0", sha256="f059f27e2a5c82e351fe05b87ad712f7afc273c651450453f59d99af5deeacea") version("1.1.1", sha256="9a199aa80c6d5e50fa977bc724d6e39dae1fc597a96413053609156ee7fb75c5") version("1.0.2", sha256="35a4980586c20650538ae1e4fed4d80fdde3f212b98546fc3c7d9469a1207f5c") + depends_on("r@2.10:", type=("build", "run"), when="@1.2.0:") + depends_on("r-magrittr", type=("build", "run"), when="@:1.0.2") depends_on("r-assertthat", type=("build", "run"), when="@:1.0.2") diff --git a/var/spack/repos/builtin/packages/r-proc/package.py b/var/spack/repos/builtin/packages/r-proc/package.py index eb2a3ee026af54..a89e84c78f561e 100644 --- a/var/spack/repos/builtin/packages/r-proc/package.py +++ b/var/spack/repos/builtin/packages/r-proc/package.py @@ -16,6 +16,7 @@ class RProc(RPackage): cran = "pROC" + version("1.18.5", sha256="5593c841a6df5a2f2d209d0c14401971eb9427092ed9c3ac2059273807b42c89") version("1.18.0", sha256="d5ef54b384176ece6d6448014ba40570a98181b58fee742f315604addb5f7ba9") version("1.17.0.1", sha256="221c726ffb81b04b999905effccfd3a223cd73cae70d7d86688e2dd30e51a6bd") diff --git a/var/spack/repos/builtin/packages/r-processx/package.py b/var/spack/repos/builtin/packages/r-processx/package.py index cf92432de3a65a..9c1e21cdf8c5d0 100644 --- a/var/spack/repos/builtin/packages/r-processx/package.py +++ b/var/spack/repos/builtin/packages/r-processx/package.py @@ -20,6 +20,7 @@ class RProcessx(RPackage): license("MIT") + version("3.8.4", sha256="6627672d7fb109f37dc1d0eaef913f4cfc7ad8ac807abf0397e6d37753b1e70b") version("3.8.1", sha256="e008472b81d4ca1a37a4ba7dd58e5e944f96ab2e44c8ccc8840d43e9fe99e93c") version("3.8.0", sha256="9270d9d26c4314151062801a5c1fc57556b4fcb41dbf3558cb5bd230b18ffb0b") version("3.7.0", sha256="de6a8d4135fc53ec35043fbaf6b000dc9597719345595d8479662a39dad55ed3") diff --git a/var/spack/repos/builtin/packages/r-prodlim/package.py b/var/spack/repos/builtin/packages/r-prodlim/package.py index 617aa47649a6d4..86754a10e86ce5 100644 --- a/var/spack/repos/builtin/packages/r-prodlim/package.py +++ b/var/spack/repos/builtin/packages/r-prodlim/package.py @@ -17,6 +17,9 @@ class RProdlim(RPackage): license("GPL-2.0-or-later") + version( + "2024.06.25", sha256="46961f654171aa7ef0ff94b23508ed59f6a438c3a3ba0d338cc3730224406764" + ) version( "2023.03.31", sha256="5510454f8511ca956666f27dfb77d875c56b9166188c33f22cd22b7615797800" ) diff --git a/var/spack/repos/builtin/packages/r-profvis/package.py b/var/spack/repos/builtin/packages/r-profvis/package.py index 709aca7e825642..787041fb2eb3d1 100644 --- a/var/spack/repos/builtin/packages/r-profvis/package.py +++ b/var/spack/repos/builtin/packages/r-profvis/package.py @@ -13,8 +13,12 @@ class RProfvis(RPackage): license("GPL-3.0-only OR custom") + version("0.3.8", sha256="ec02c75bc9907a73564e691adfa8e06651ca0bd73b7915412960231cd265b4b2") version("0.3.7", sha256="43974863cb793f81dbea4b94096343c321f7739c9038980405c9b16b04a906b9") depends_on("r@3.0:", type=("build", "run")) depends_on("r-htmlwidgets@0.3.2:", type=("build", "run")) + depends_on("r-purrr", type=("build", "run"), when="@0.3.8:") + depends_on("r-rlang@0.4.9:", type=("build", "run"), when="@0.3.8:") depends_on("r-stringr", type=("build", "run")) + depends_on("r-vctrs", type=("build", "run"), when="@0.3.8:") diff --git a/var/spack/repos/builtin/packages/r-progress/package.py b/var/spack/repos/builtin/packages/r-progress/package.py index d3f41e6548513e..dbc314340b09ce 100644 --- a/var/spack/repos/builtin/packages/r-progress/package.py +++ b/var/spack/repos/builtin/packages/r-progress/package.py @@ -18,10 +18,12 @@ class RProgress(RPackage): license("MIT") + version("1.2.3", sha256="ea2b079b894de85c3ab12088c9c52aec06432245047a961d5b4b8aa6889f9276") version("1.2.2", sha256="b4a4d8ed55db99394b036a29a0fb20b5dd2a91c211a1d651c52a1023cc58ff35") version("1.2.1", sha256="7401e86ff76bef4d26508b74ee8bd169a0377b2738d9ec79ebff0b7fd5c55326") version("1.1.2", sha256="a9f4abfd9579b80967cd681041643fe9dfcc4eb3beeba45391bb64e9209baabb") + depends_on("r@3.6:", type=("build", "run"), when="@1.2.3:") depends_on("r-r6", type=("build", "run")) depends_on("r-prettyunits", type=("build", "run")) depends_on("r-hms", type=("build", "run"), when="@1.2.0:") diff --git a/var/spack/repos/builtin/packages/r-progressr/package.py b/var/spack/repos/builtin/packages/r-progressr/package.py index 457a09c4b0304a..d07c5124e952d9 100644 --- a/var/spack/repos/builtin/packages/r-progressr/package.py +++ b/var/spack/repos/builtin/packages/r-progressr/package.py @@ -31,6 +31,7 @@ class RProgressr(RPackage): license("GPL-3.0-or-later") + version("0.14.0", sha256="9a2899f879a5577f043be99c18d52bfe4d655cc52a96cae834e8a301b36258af") version("0.13.0", sha256="0ffb3dcadde0cc191bad0ff9e05d000aa65e2fc339cfc94ebbb263088df5a4e1") version("0.11.0", sha256="d8668c82348a20cca34bb18c0c94e6083dbb6dbea40615e07e4161aff7366cd9") version("0.10.1", sha256="8f83024b2a6f52996750d45bf6698c2b438fb1062985f1df936ba3af313caed1") diff --git a/var/spack/repos/builtin/packages/r-proj/package.py b/var/spack/repos/builtin/packages/r-proj/package.py index 78463c53d97f0b..34d502b5e2ad8a 100644 --- a/var/spack/repos/builtin/packages/r-proj/package.py +++ b/var/spack/repos/builtin/packages/r-proj/package.py @@ -9,13 +9,29 @@ class RProj(RPackage): """Generic Coordinate System Transformations Using 'PROJ'. - Currently non-operational, a harmless wrapper to allow package 'reproj' to - install and function while relying on the 'proj4' package.""" + A wrapper around the generic coordinate transformation software 'PROJ' + that transforms coordinates from one coordinate reference system ('CRS') + to another. This includes cartographic projections as well as geodetic + transformations. The intention is for this package to be used by + user-packages such as 'reproj', and that the older 'PROJ.4' and version 5 + pathways be provided by the 'proj4' package.""" cran = "PROJ" + version("0.5.0", sha256="fa6316693289a65d53a764b422f15072c34f440375264b822f2ddd2c6ec88c9b") version("0.4.0", sha256="dde90cfeca83864e61a7422e1573d2d55bb0377c32b9a8f550f47b8631121ce7") version("0.1.0", sha256="5186f221335e8092bbcd4d82bd323ee7e752c7c9cf83d3f94e4567e0b407aa6f") depends_on("r@2.10:", type=("build", "run")) depends_on("r@3.0.2:", type=("build", "run"), when="@0.4.0:") + + depends_on("r-lifecycle", type=("build", "run"), when="@0.5.0:") + depends_on("r-wk", type=("build", "run"), when="@0.5.0:") + + depends_on("proj@6.3.1:", type=("build", "run"), when="@0.4.5:") + # pkgconfig for proj requires libtiff-4 and libcurl + depends_on("libtiff@4", type=("build", "run")) + depends_on("curl", type=("build", "run")) + + def setup_build_environment(self, env): + env.prepend_path("LD_LIBRARY_PATH", self.spec["proj"].prefix.lib) diff --git a/var/spack/repos/builtin/packages/r-proj4/package.py b/var/spack/repos/builtin/packages/r-proj4/package.py index d0d6d029850a53..db7522b89d4ec2 100644 --- a/var/spack/repos/builtin/packages/r-proj4/package.py +++ b/var/spack/repos/builtin/packages/r-proj4/package.py @@ -17,6 +17,7 @@ class RProj4(RPackage): license("GPL-2.0-only") + version("1.0-14", sha256="d3d571da92136666dd3658b6006a7d4d4254cdeada5cda21b05b0c0e692a00b6") version("1.0-12", sha256="4aeb8a54d5b459674093c76068b92dbd3ce99a4e5db8829fbae868c2e43776f8") version("1.0-11", sha256="c5f186530267005d53cc2e86849613b254ca4515a8b10310146f712d45a1d11d") version("1.0-10.1", sha256="66857cbe5cba4930b18621070f9a7263ea0d8ddc3e5a035a051a1496e4e1da19") diff --git a/var/spack/repos/builtin/packages/r-projpred/package.py b/var/spack/repos/builtin/packages/r-projpred/package.py index 35c3befa538c65..0446671c767202 100644 --- a/var/spack/repos/builtin/packages/r-projpred/package.py +++ b/var/spack/repos/builtin/packages/r-projpred/package.py @@ -21,29 +21,33 @@ class RProjpred(RPackage): license("GPL-3.0-only OR custom") + version("2.8.0", sha256="b383ddc5eca275737b96e4e3e14256b4f4abc4b29d292b5cebf3828d0921a1f6") version("2.5.0", sha256="b6ec123f5bf573d14cbd5431e3fbdee3215d71d3e263fcbec72bee5930044e39") version("2.2.1", sha256="6825ace07d1e580d5916bcd6bfd163460ae9008926f464e00deb7f2395cc72ad") version("2.1.2", sha256="a88a651e533c118aad0e8c2c905cfcf688d9c419ed195896036b8f6667b5cfb0") version("2.0.2", sha256="af0a9fb53f706090fe81b6381b27b0b6bd3f7ae1e1e44b0ada6f40972b09a55b") depends_on("r@3.5.0:", type=("build", "run")) - depends_on("r-loo@2.0.0:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@2.7.0:") + depends_on("r-rcpp", type=("build", "run")) + depends_on("r-gtools", type=("build", "run"), when="@2.7.0:") + depends_on("r-ggplot2", type=("build", "run")) + depends_on("r-scales", type=("build", "run"), when="@2.6.0:") depends_on("r-rstantools@2.0.0:", type=("build", "run")) + depends_on("r-loo@2.0.0:", type=("build", "run")) depends_on("r-lme4", type=("build", "run")) depends_on("r-lme4@1.1-28:", type=("build", "run"), when="@2.5.0:") depends_on("r-mvtnorm", type=("build", "run"), when="@2.1.2:") - depends_on("r-ggplot2", type=("build", "run")) - depends_on("r-rcpp", type=("build", "run")) - depends_on("r-abind", type=("build", "run"), when="@2.5.0:") depends_on("r-mgcv", type=("build", "run")) depends_on("r-gamm4", type=("build", "run")) - depends_on("r-mclogit", type=("build", "run"), when="@2.5.0:") - depends_on("r-nnet", type=("build", "run"), when="@2.5.0:") - depends_on("r-ucminf", type=("build", "run"), when="@2.5.0:") - depends_on("r-ordinal", type=("build", "run"), when="@2.5.0:") + depends_on("r-abind", type=("build", "run"), when="@2.5.0:") depends_on("r-mass", type=("build", "run")) + depends_on("r-ordinal", type=("build", "run"), when="@2.5.0:") + depends_on("r-nnet", type=("build", "run"), when="@2.5.0:") + depends_on("r-mclogit", type=("build", "run"), when="@2.5.0:") depends_on("r-rcpparmadillo", type=("build", "run")) + depends_on("r-ucminf", type=("build", "run"), when="@2.5.0") depends_on("r-optimx", type=("build", "run"), when="@:2.0.2") depends_on("r-rngtools@1.2.4:", type=("build", "run"), when="@:2.0.2") depends_on("r-tidyverse", type=("build", "run"), when="@:2.0.2") diff --git a/var/spack/repos/builtin/packages/r-promises/package.py b/var/spack/repos/builtin/packages/r-promises/package.py index 32016c25724495..91cf59cbee48bd 100644 --- a/var/spack/repos/builtin/packages/r-promises/package.py +++ b/var/spack/repos/builtin/packages/r-promises/package.py @@ -19,12 +19,15 @@ class RPromises(RPackage): license("MIT") + version("1.3.0", sha256="f8209df3bab33340c1bc8c0d26caee2890fafb93129ff1423302abae5931fad3") version("1.2.0.1", sha256="8d3a8217909e91f4c2a2eebba5ac8fc902a9ac1a9e9d8a30815c9dc0f162c4b7") version("1.1.1", sha256="3718c6eb2c3362cbe89389e613118f783f9977dbf24757f85026e661199c5800") version("1.0.1", sha256="c2dbc7734adf009377a41e570dfe0d82afb91335c9d0ca1ef464b9bdcca65558") depends_on("r-r6", type=("build", "run")) - depends_on("r-rcpp", type=("build", "run")) + depends_on("r-fastmap@1.1.0:", type=("build", "run"), when="@1.2.1:") depends_on("r-later", type=("build", "run")) - depends_on("r-rlang", type=("build", "run")) depends_on("r-magrittr", type=("build", "run")) + depends_on("r-magrittr@1.5:", type=("build", "run"), when="@1.2.1:") + depends_on("r-rcpp", type=("build", "run")) + depends_on("r-rlang", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ps/package.py b/var/spack/repos/builtin/packages/r-ps/package.py index 89612d8233e912..c78023b660a9d8 100644 --- a/var/spack/repos/builtin/packages/r-ps/package.py +++ b/var/spack/repos/builtin/packages/r-ps/package.py @@ -16,6 +16,7 @@ class RPs(RPackage): license("MIT") + version("1.7.7", sha256="46fedcb2b8faa94ea1451e48e6f31a1e4ed3b12f529e645f9efcfca1003d22f2") version("1.7.5", sha256="1abc3ae3c55797b994973f7e43bf5c7bbb4da649a0dcfad36675e196dba4cb4e") version("1.7.2", sha256="9225ebdedb5c1b245bb38b01ce88084c0fc7eafcff6c4fda2e299003ace6b21a") version("1.7.1", sha256="9c458a377d47cc972d3cd0b2a17d0b7ad3cf3b62226410803072089a57a55ef1") diff --git a/var/spack/repos/builtin/packages/r-pscbs/package.py b/var/spack/repos/builtin/packages/r-pscbs/package.py index 1ac75ed63a739c..89a7f6e1faf53e 100644 --- a/var/spack/repos/builtin/packages/r-pscbs/package.py +++ b/var/spack/repos/builtin/packages/r-pscbs/package.py @@ -15,23 +15,30 @@ class RPscbs(RPackage): cran = "PSCBS" + version("0.67.0", sha256="2695d18d197a3bd729cca0940248ddc1880e4f54da95b9ecc5eda002a715cdbe") version("0.66.0", sha256="58805636e55e0fd3f57bd4a0e296a8bb3d57a7bdd0fdd5868a73ddc83d173a93") version("0.65.0", sha256="3365065d5375c599eb024bfff12c5f6b10a6b1a4fe4ba6f200f7e83618dd399a") depends_on("r@3.2.0:", type=("build", "run")) depends_on("r-r-methodss3@1.7.1:", type=("build", "run")) depends_on("r-r-methodss3@1.8.1:", type=("build", "run"), when="@0.66.0:") + depends_on("r-r-methodss3@1.8.2:", type=("build", "run"), when="@0.67.0:") depends_on("r-r-oo@1.22.1:", type=("build", "run")) depends_on("r-r-oo@1.24.0:", type=("build", "run"), when="@0.66.0:") + depends_on("r-r-oo@1.25.0:", type=("build", "run"), when="@0.67.0:") depends_on("r-r-utils@2.8.0:", type=("build", "run")) depends_on("r-r-utils@2.11.0:", type=("build", "run"), when="@0.66.0:") + depends_on("r-r-utils@2.12.0:", type=("build", "run"), when="@0.67.0:") depends_on("r-r-cache@0.13.0:", type=("build", "run")) depends_on("r-r-cache@0.15.0:", type=("build", "run"), when="@0.66.0:") + depends_on("r-r-cache@0.16.0:", type=("build", "run"), when="@0.67.0:") depends_on("r-matrixstats@0.54.0:", type=("build", "run")) depends_on("r-matrixstats@0.61.0:", type=("build", "run"), when="@0.66.0:") + depends_on("r-matrixstats@0.62.0:", type=("build", "run"), when="@0.67.0:") depends_on("r-aroma-light@2.4.0:", type=("build", "run")) depends_on("r-dnacopy@1.42.0:", type=("build", "run")) depends_on("r-listenv@0.7.0:", type=("build", "run")) depends_on("r-listenv@0.8.0:", type=("build", "run"), when="@0.66.0:") depends_on("r-future@1.12.0:", type=("build", "run")) depends_on("r-future@1.22.1:", type=("build", "run"), when="@0.66.0:") + depends_on("r-future@1.28.0:", type=("build", "run"), when="@0.67.0:") diff --git a/var/spack/repos/builtin/packages/r-pspline/package.py b/var/spack/repos/builtin/packages/r-pspline/package.py index 03e2140fe43033..c77803682c28be 100644 --- a/var/spack/repos/builtin/packages/r-pspline/package.py +++ b/var/spack/repos/builtin/packages/r-pspline/package.py @@ -15,6 +15,7 @@ class RPspline(RPackage): license("custom") + version("1.0-20", sha256="eaa7cd9b870d5d10cf457c435ebcbe698ba0d463e3a996fbe758a4b57b93eb8a") version("1.0-19", sha256="ba55bf193f1df9785a0e13b7ef727d5fd2415b318cd6a26b48a2db490c4dfe40") version("1.0-18", sha256="f71cf293bd5462e510ac5ad16c4a96eda18891a0bfa6447dd881c65845e19ac7") diff --git a/var/spack/repos/builtin/packages/r-psych/package.py b/var/spack/repos/builtin/packages/r-psych/package.py index c474110e1e4fbe..75f9ce050abf80 100644 --- a/var/spack/repos/builtin/packages/r-psych/package.py +++ b/var/spack/repos/builtin/packages/r-psych/package.py @@ -29,6 +29,7 @@ class RPsych(RPackage): license("GPL-2.0-or-later") + version("2.4.6.26", sha256="2d191a95e0107a7f402a17729916099dff201d20c4435f8bf43e6e8a2fbbd2be") version("2.3.3", sha256="94a9f3c39f8243573752709b89eb8068e11dbe809f86ecf0225fb429556efb6f") version("2.2.9", sha256="4cd518bff387fef95067696b0a0b323310e6f4a063c3d242f2a50bcb17675571") version("2.2.5", sha256="dcc3f9b30ed44dfd1de0366295a308e0b52959eb7ac9cb3bc3f32dc5b15fc321") @@ -38,8 +39,9 @@ class RPsych(RPackage): version("1.8.10", sha256="e8901ddab14729bfccbd82a8824fbb6523c10c2cd8fb7199b1ca56a7ffcb6e58") version("1.7.8", sha256="f328ea602e22b0e7e5f310a8d19f305d8e0a3a86040cdfb64863b68b56d55135") - depends_on("r-mnormt", type=("build", "run")) + depends_on("r-gparotation", type=("build", "run"), when="@2.3.6:") depends_on("r-lattice", type=("build", "run")) + depends_on("r-mnormt", type=("build", "run")) depends_on("r-nlme", type=("build", "run")) depends_on("r-foreign", type=("build", "run"), when="@:1.8.12") diff --git a/var/spack/repos/builtin/packages/r-purrr/package.py b/var/spack/repos/builtin/packages/r-purrr/package.py index b0b1acc7091c01..002bc75ebdd2c1 100644 --- a/var/spack/repos/builtin/packages/r-purrr/package.py +++ b/var/spack/repos/builtin/packages/r-purrr/package.py @@ -15,6 +15,7 @@ class RPurrr(RPackage): license("MIT") + version("1.0.2", sha256="2c1bc6bb88433dff0892b41136f2f5c23573b335ff35a4775c72aa57b48bbb63") version("1.0.1", sha256="0a7911be3539355a4c40d136f2602befcaaad5a3f7222078500bfb969a6f2ba2") version("0.3.5", sha256="a2386cd7e78a043cb9c14703023fff15ab1c879bf648816879d2c0c4a554fcef") version("0.3.4", sha256="23ebc93bc9aed9e7575e8eb9683ff4acc0270ef7d6436cc2ef4236a9734840b2") @@ -25,12 +26,16 @@ class RPurrr(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.2:", type=("build", "run"), when="@0.3.3:") depends_on("r@3.4.0:", type=("build", "run"), when="@1.0.1:") + depends_on("r@3.5.0:", type=("build", "run"), when="@1.0.2:") depends_on("r-vctrs@0.5.0:", type=("build", "run"), when="@1.0.1:") + depends_on("r-vctrs@0.6.3:", type=("build", "run"), when="@1.0.2:") depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@1.0.1:") depends_on("r-cli@3.4.0:", type=("build", "run"), when="@1.0.1:") + depends_on("r-cli@3.6.1:", type=("build", "run"), when="@1.0.2:") depends_on("r-magrittr@1.5:", type=("build", "run")) depends_on("r-magrittr@1.5.0:", type=("build", "run"), when="@1.0.1:") depends_on("r-rlang@0.3.1:", type=("build", "run")) depends_on("r-rlang@0.4.10:", type=("build", "run"), when="@1.0.1:") + depends_on("r-rlang@1.1.1:", type=("build", "run"), when="@1.0.2:") depends_on("r-tibble", type=("build", "run"), when="@:0.2.9") diff --git a/var/spack/repos/builtin/packages/r-qs/package.py b/var/spack/repos/builtin/packages/r-qs/package.py index a4c64566a1692d..fc552f62b09f46 100644 --- a/var/spack/repos/builtin/packages/r-qs/package.py +++ b/var/spack/repos/builtin/packages/r-qs/package.py @@ -18,6 +18,7 @@ class RQs(RPackage): license("GPL-3.0-only") + version("0.26.3", sha256="8801a41f6e5161a55193dc9a75fcee8da1b0e02eebd7653ec05326d594321ee3") version("0.25.5", sha256="3f87388708a0fdfb0e68caade75ed771fd395cb4f649973459bc97f41d42064c") version("0.25.4", sha256="92c49206a9c1c66dbd95f12efc3a57acb728e1f8387b549c437519fb2b98a533") version("0.25.3", sha256="51adf6a112c19f78ceeefa55acf800c7e6bf2664e7d9cea9d932abb24f22be6b") @@ -26,6 +27,7 @@ class RQs(RPackage): depends_on("r@3.5.0:", type=("build", "run")) depends_on("r@3.0.2:", type=("build", "run"), when="@0.25.2:") + depends_on("r-bh", type=("build", "run"), when="@0.26.0:") depends_on("r-rcpp", type=("build", "run")) depends_on("r-rapiserialize", type=("build", "run")) depends_on("r-rapiserialize@0.1.1:", type=("build", "run"), when="@0.25.4:") diff --git a/var/spack/repos/builtin/packages/r-qtl/package.py b/var/spack/repos/builtin/packages/r-qtl/package.py index 9497f5aa513466..ba93459f123151 100644 --- a/var/spack/repos/builtin/packages/r-qtl/package.py +++ b/var/spack/repos/builtin/packages/r-qtl/package.py @@ -17,6 +17,7 @@ class RQtl(RPackage): license("GPL-3.0-only") + version("1.66", sha256="d46a7d49f2d0875c0c1cba77c993f995e7cac4db5796dfb1c62d9fa4eb60d681") version("1.60", sha256="8e9e5dfe2c6a76d4f69fb27add93ed0859ed3eaa23347310c2b9e3f07359d8ad") version("1.58", sha256="6eca5ac177ae62304d63c224f161b0f3ac9327ec1a03da5d7df2d5ddf4b09d97") version("1.52", sha256="320ac6172f2911ee772472becd68ff49a357c99fe7454335e4a19090d5788960") diff --git a/var/spack/repos/builtin/packages/r-quantmod/package.py b/var/spack/repos/builtin/packages/r-quantmod/package.py index 2368def60f5c28..1771e645f4ace3 100644 --- a/var/spack/repos/builtin/packages/r-quantmod/package.py +++ b/var/spack/repos/builtin/packages/r-quantmod/package.py @@ -16,6 +16,7 @@ class RQuantmod(RPackage): license("GPL-3.0-only") + version("0.4.26", sha256="396c5d3241f77911d9f7738a60a9d728ed25b3dbce2fd92f5b11f9fcbcb8bb98") version("0.4.22", sha256="f29496f1ca9a9faf91aba70ac50bfe79303197ca8f1e369c96300005b5e6765e") version("0.4.20", sha256="f757df41595d885f7927e18f4835bc233d78d2d3ae48fd11c8874d4338c48e94") version("0.4.18", sha256="aa40448e93a1facf399213ac691784007731e869ad243fe762381ab099cd6c35") diff --git a/var/spack/repos/builtin/packages/r-quantreg/package.py b/var/spack/repos/builtin/packages/r-quantreg/package.py index 9bff357602bb1e..939fa66209312b 100644 --- a/var/spack/repos/builtin/packages/r-quantreg/package.py +++ b/var/spack/repos/builtin/packages/r-quantreg/package.py @@ -21,6 +21,7 @@ class RQuantreg(RPackage): license("GPL-2.0-or-later") + version("5.98", sha256="a98cb259d8cf563f66a25ae8858794e574dd40de6206816ad61b1ffeb9686a61") version("5.95", sha256="4b05a81eceebbd927372cefdc4912dfa70b6dfcd96528489f78e125eb32a96cc") version("5.94", sha256="52d585ccb972ed7726b7d083f5635d3e42915847398e00fd6e0f69a5fe1b17c1") version("5.93", sha256="d4a94984a500bf4c92dec21013441f001a4aa0541c4c651384e257a4b4e9e539") diff --git a/var/spack/repos/builtin/packages/r-quickjsr/package.py b/var/spack/repos/builtin/packages/r-quickjsr/package.py new file mode 100644 index 00000000000000..10b191fc672024 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-quickjsr/package.py @@ -0,0 +1,19 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RQuickjsr(RPackage): + """An 'R' interface to the 'QuickJS' portable 'JavaScript' engine. + The engine and all 'R' to 'JavaScript' interoperability is bundled + within the package, requiring no dependencies beyond a 'C' compiler.""" + + homepage = "https://bellard.org/quickjs/" + cran = "QuickJSR" + + license("MIT", checked_by="wdconinc") + + version("1.3.1", sha256="10559d6e84a838ec97acdbc6028a59e2121811d4a20e83c95cdb8fb4ce208fd1") diff --git a/var/spack/repos/builtin/packages/r-quickplot/package.py b/var/spack/repos/builtin/packages/r-quickplot/package.py index 7cb0c274698a23..c47c367c2a9f65 100644 --- a/var/spack/repos/builtin/packages/r-quickplot/package.py +++ b/var/spack/repos/builtin/packages/r-quickplot/package.py @@ -18,19 +18,23 @@ class RQuickplot(RPackage): maintainers("dorton21") + version("1.0.2", sha256="78b19e03f9925ea3a5b47c12fef58a154dc0d3598dbdda3fe4e47c6636ab4808") version("0.1.8", sha256="5927186ebbd86d2282c59dd28c4af6977ae5f9bc5766de8fce34b94bbfe33be7") version("0.1.6", sha256="48690a77ae961ed1032130621ef06b2eaf86ee592bf1057471a8c6d6a98ace55") depends_on("r@3.3.0:", type=("build", "run")) depends_on("r@4.0:", type=("build", "run"), when="@0.1.8:") - depends_on("r-backports", type=("build", "run")) + depends_on("r@4.1:", type=("build", "run"), when="@1.0.1:") depends_on("r-data-table@1.10.4:", type=("build", "run")) depends_on("r-fpcompare", type=("build", "run")) - depends_on("r-ggplot2", type=("build", "run")) - depends_on("r-gridbase", type=("build", "run")) - depends_on("r-igraph", type=("build", "run")) - depends_on("r-raster", type=("build", "run")) - depends_on("r-rcolorbrewer", type=("build", "run")) - depends_on("r-rgdal", type=("build", "run")) - depends_on("r-rgeos", type=("build", "run")) - depends_on("r-sp", type=("build", "run")) + depends_on("r-terra", type=("build", "run"), when="@1.0.1:") + + depends_on("r-backports", type=("build", "run"), when="@:1.0.1") + depends_on("r-ggplot2", type=("build", "run"), when="@:1.0.1") + depends_on("r-gridbase", type=("build", "run"), when="@:1.0.1") + depends_on("r-igraph", type=("build", "run"), when="@:1.0.1") + depends_on("r-raster", type=("build", "run"), when="@:1.0.1") + depends_on("r-rcolorbrewer", type=("build", "run"), when="@:1.0.1") + depends_on("r-rgdal", type=("build", "run"), when="@:1.0.1") + depends_on("r-rgeos", type=("build", "run"), when="@:1.0.1") + depends_on("r-sp", type=("build", "run"), when="@:1.0.1") diff --git a/var/spack/repos/builtin/packages/r-r-oo/package.py b/var/spack/repos/builtin/packages/r-r-oo/package.py index f15782b3bc3523..28ffc400bffa67 100644 --- a/var/spack/repos/builtin/packages/r-r-oo/package.py +++ b/var/spack/repos/builtin/packages/r-r-oo/package.py @@ -18,6 +18,7 @@ class RROo(RPackage): cran = "R.oo" + version("1.26.0", sha256="f7602b388c2216fbb4d1a31d4040ed92b40dc83d3e3746db7011637db4d44365") version("1.25.0", sha256="b8b19061774918ee7d9d4330c16c0ea505f7cd02d01343df1e8b2e4fb847beef") version("1.24.0", sha256="37a1dab8dd668ceba69a1ba36c0c60e9809e29b74bd56d1e8ed519e19c8e3bb6") version("1.23.0", sha256="f5124ce3dbb0a62e8ef1bfce2de2d1dc2f776e8c48fd8cac358f7f5feb592ea1") @@ -28,3 +29,4 @@ class RROo(RPackage): depends_on("r-r-methodss3@1.7.1:", type=("build", "run")) depends_on("r-r-methodss3@1.8.0:", type=("build", "run"), when="@1.24.0:") depends_on("r-r-methodss3@1.8.1:", type=("build", "run"), when="@1.25.0:") + depends_on("r-r-methodss3@1.8.2:", type=("build", "run"), when="@1.26.0:") diff --git a/var/spack/repos/builtin/packages/r-r-utils/package.py b/var/spack/repos/builtin/packages/r-r-utils/package.py index e673eb37572acc..91132f04dbae20 100644 --- a/var/spack/repos/builtin/packages/r-r-utils/package.py +++ b/var/spack/repos/builtin/packages/r-r-utils/package.py @@ -13,6 +13,7 @@ class RRUtils(RPackage): cran = "R.utils" + version("2.12.3", sha256="74d6e77a95a23381a490fea54be01b653d4b938a2dc75e749a694ab48302c40c") version("2.12.2", sha256="fe3cf1aa8641540634e96990294d0202d4d94ec79ce73aaf78e4eda30fcb8836") version("2.12.1", sha256="3eb82903bee99f9684cd9dbd4f92d682fdb82feb7ff32a70aa54550e9e09ad62") version("2.12.0", sha256="74de455220ea1e658ac503f5763a6be687d982eb61187779f4019a16db856503") diff --git a/var/spack/repos/builtin/packages/r-ragg/package.py b/var/spack/repos/builtin/packages/r-ragg/package.py index 0d0abcb60c0d6e..3bff5fdae80896 100644 --- a/var/spack/repos/builtin/packages/r-ragg/package.py +++ b/var/spack/repos/builtin/packages/r-ragg/package.py @@ -18,6 +18,7 @@ class RRagg(RPackage): license("MIT") + version("1.3.2", sha256="8037a45209fdd50acf101208af8e832b840a11ad4201cf7fb480de432e6b6931") version("1.2.5", sha256="936f4d75e0e01cdeefb9f57d121cdd7812d0de5a9e1a3a8315f92ce1c84da8f9") version("1.2.4", sha256="c547e5636a2eefaa0021a0d50fad1e813c2ce976ec0c9c3f796d38a110680dcd") version("1.2.3", sha256="976da0007ef0d4dbadda4734727b539671b65c1eff4ff392d734f4e2c846f2b2") @@ -28,3 +29,9 @@ class RRagg(RPackage): depends_on("libpng") depends_on("libtiff") depends_on("jpeg") + + def flag_handler(self, name, flags): + # Freetype 2.13.3 broke the public interface by switching char/unsigned char: + if name == "cxxflags" and self.spec["freetype"].version >= Version("2.13.3"): + flags.append("-fpermissive") + return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/r-rainbow/package.py b/var/spack/repos/builtin/packages/r-rainbow/package.py index c5c88b9ca79239..9cdd8644d2331a 100644 --- a/var/spack/repos/builtin/packages/r-rainbow/package.py +++ b/var/spack/repos/builtin/packages/r-rainbow/package.py @@ -16,6 +16,7 @@ class RRainbow(RPackage): license("GPL-3.0-only") + version("3.8", sha256="eca456288b70fe4b6c74a587d8624d3b36d67f8f9ffc13320eefb17a952d823d") version("3.7", sha256="159dd90555eee237397f042d811f773aaee779f5036c4e0669a52c36e28d8db2") version("3.6", sha256="63d1246f88a498f3db0321b46a552163631b288a25b24400935db41326636e87") diff --git a/var/spack/repos/builtin/packages/r-ranger/package.py b/var/spack/repos/builtin/packages/r-ranger/package.py index a952be3532d2af..8672102bbfb12d 100644 --- a/var/spack/repos/builtin/packages/r-ranger/package.py +++ b/var/spack/repos/builtin/packages/r-ranger/package.py @@ -20,6 +20,7 @@ class RRanger(RPackage): license("GPL-3.0-only") + version("0.16.0", sha256="0395f93afdb807a7882c1fa8f183a26a871c5168ea0903566951298ef1138589") version("0.15.1", sha256="4d65d9ee7c5f2704a0e303a27222c02aa53e49f3c28dc0b4451371e37ada2b2e") version("0.14.1", sha256="5d99401d555da1cfb11c70e59d1bb545ce48720073a06a2a32eb396f622dee1b") version("0.13.1", sha256="60934f0accc21edeefddbb4ddebfdd7cd10a3d3e90b31aa2e6e4b7f50d632d0a") diff --git a/var/spack/repos/builtin/packages/r-rapiserialize/package.py b/var/spack/repos/builtin/packages/r-rapiserialize/package.py index 8b4e48ed9b569c..d25c382dc6fd2a 100644 --- a/var/spack/repos/builtin/packages/r-rapiserialize/package.py +++ b/var/spack/repos/builtin/packages/r-rapiserialize/package.py @@ -22,5 +22,6 @@ class RRapiserialize(RPackage): maintainers("dorton21") + version("0.1.3", sha256="9f413759eabb2acce2b9a363687ca365e1bbedaf9851d23a2ec3683a3d46f42b") version("0.1.2", sha256="9cc0bbb918eeadb394339c64b15324e8123fbb0061692f40102b111417a2600a") version("0.1.0", sha256="324d42c655c27b4647d194bfcd7c675da95c67ea3a74ce99853502022792a23e") diff --git a/var/spack/repos/builtin/packages/r-raster/package.py b/var/spack/repos/builtin/packages/r-raster/package.py index 1059e36a53431b..d57d33f6326b07 100644 --- a/var/spack/repos/builtin/packages/r-raster/package.py +++ b/var/spack/repos/builtin/packages/r-raster/package.py @@ -18,6 +18,7 @@ class RRaster(RPackage): license("GPL-3.0-or-later") + version("3.6-26", sha256="c65777225a46ada699e70098f54c60cf191d15e454fac9440aca439a4dbd5592") version("3.6-20", sha256="7e5be49f4e37a2c14a3b87661b252956643b959146cbdb08e983660c1d59a813") version("3.6-3", sha256="9f06e0f7c36258790a97421b3a26d98c9b6a2cb702f941e58ab0b18f21b0c3c6") version("3.5-15", sha256="29c7d3c5d34284f8b5a2ddc9989fbcf092ce209d5eb5310ebc772b5ebdfdd685") @@ -37,3 +38,4 @@ class RRaster(RPackage): depends_on("r-terra@1.5-12:", type=("build", "run"), when="@3.5-15:") depends_on("r-terra@1.6-16:", type=("build", "run"), when="@3.6-3:") depends_on("r-terra@1.6-41:", type=("build", "run"), when="@3.6-20:") + depends_on("r-terra@1.7-29:", type=("build", "run"), when="@3.6-23:") diff --git a/var/spack/repos/builtin/packages/r-rbibutils/package.py b/var/spack/repos/builtin/packages/r-rbibutils/package.py index f4c84e16ddf475..382b8aced4e27a 100644 --- a/var/spack/repos/builtin/packages/r-rbibutils/package.py +++ b/var/spack/repos/builtin/packages/r-rbibutils/package.py @@ -18,6 +18,7 @@ class RRbibutils(RPackage): license("GPL-2.0-only") + version("2.2.16", sha256="9c7c0fba47f63b1749005311c7174b40e72d95c863a67b736a84b8ff375a2aaf") version("2.2.13", sha256="ac235c60bf191ad1830b93045af1b2fe50a6978f6f63cecc4c514a8ba339efc2") version("2.2.9", sha256="b22c07ff916ec338e5a8c6e7e4302f06c9b88d64ee6a59ee4bf5d83a3d5eff86") version("2.2.8", sha256="f1aecdeeba99042d34de19234238c5bbdc18a26f271f6adf9c9b7e349d50d152") diff --git a/var/spack/repos/builtin/packages/r-rcpp/package.py b/var/spack/repos/builtin/packages/r-rcpp/package.py index f6e52df3a1cf6d..7f455481300ea2 100644 --- a/var/spack/repos/builtin/packages/r-rcpp/package.py +++ b/var/spack/repos/builtin/packages/r-rcpp/package.py @@ -23,6 +23,7 @@ class RRcpp(RPackage): cran = "Rcpp" + version("1.0.13", sha256="21fec650c113e57935fd86c7d1be190811f1ae036c1ee203bfbbf3ad5cdb22ce") version("1.0.12", sha256="0c7359cc43beee02761aa3df2baccede1182d29d28c9cd49964b609305062bd0") version("1.0.11", sha256="df757c3068599c6c05367900bcad93547ba3422d59802dbaca20fd74d4d2fa5f") version("1.0.10", sha256="1e65e24a9981251ab5fc4f9fd65fe4eab4ba0255be3400a8c5abe20b62b5d546") diff --git a/var/spack/repos/builtin/packages/r-rcppannoy/package.py b/var/spack/repos/builtin/packages/r-rcppannoy/package.py index 3277a206c08a3b..efe0cbb9784c29 100644 --- a/var/spack/repos/builtin/packages/r-rcppannoy/package.py +++ b/var/spack/repos/builtin/packages/r-rcppannoy/package.py @@ -20,6 +20,7 @@ class RRcppannoy(RPackage): cran = "RcppAnnoy" + version("0.0.22", sha256="9f2121d787c4d3e7beccdd65f5d1de81f31c99d57d5d61ca3cc5af7169dd8f65") version("0.0.20", sha256="dcc6c7e091154d0a5698472e0fc7ed77976941c7376d21e019c90c3efaeacf85") version("0.0.19", sha256="89b209900516f3096b53c90937081fb8965c605c867aa465f1b3b68092b7688a") version("0.0.18", sha256="e4e7ddf071109b47b4fdf285db6d2155618ed73da829c30d8e64fc778e63c858") diff --git a/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py b/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py index fd7f543b708131..16bd7ee5a93fa0 100644 --- a/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py +++ b/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py @@ -23,6 +23,7 @@ class RRcpparmadillo(RPackage): cran = "RcppArmadillo" + version("14.0.0-1", sha256="80c4d4fadc3ed92712affc50279de4c5f2e1f7ee777ad1f1b3f9f3e94a64ba90") version( "0.12.4.0.0", sha256="f6db54c465abc0a570a0da6f737d9fdf2187287fb235ce487b1903b5177482cb" ) @@ -59,3 +60,4 @@ class RRcpparmadillo(RPackage): depends_on("r@3.3.0:", type=("build", "run"), when="@0.8.500.0:") depends_on("r-rcpp@0.11.0:", type=("build", "run")) + depends_on("r-rcpp@1.0.8:", type=("build", "run"), when="@0.12.8.4.0:") diff --git a/var/spack/repos/builtin/packages/r-rcppblaze/package.py b/var/spack/repos/builtin/packages/r-rcppblaze/package.py index 817b604c3a8b34..274f2fe7dc0004 100644 --- a/var/spack/repos/builtin/packages/r-rcppblaze/package.py +++ b/var/spack/repos/builtin/packages/r-rcppblaze/package.py @@ -37,9 +37,14 @@ class RRcppblaze(RPackage): license("BSD-3-Clause") + version("1.0.1", sha256="2d152294dc231e4ab097a377ddeda6f2bbb608970c82563a893c77de08916227") version("0.2.2", sha256="67550ed8aea12a219047af61b41e5b9f991608a21ce9a8fbf7ac55da0f7c2742") depends_on("r@3.0.2:", type=("build", "run")) + depends_on("r@4.2.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-rcpp@0.11.0:", type=("build", "run")) + depends_on("r-rcpp@1.0.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-matrix@1.1-0:", type=("build", "run")) - depends_on("r-bh@1.54.0-2:", type=("build", "run")) + depends_on("r-matrix@1.5-0:", type=("build", "run"), when="@1.0.0:") + + depends_on("r-bh@1.54.0-2:", type=("build", "run"), when="@:0.2.2") diff --git a/var/spack/repos/builtin/packages/r-rcppcnpy/package.py b/var/spack/repos/builtin/packages/r-rcppcnpy/package.py index 550a3ba3c2134f..475e7862c39520 100644 --- a/var/spack/repos/builtin/packages/r-rcppcnpy/package.py +++ b/var/spack/repos/builtin/packages/r-rcppcnpy/package.py @@ -20,6 +20,7 @@ class RRcppcnpy(RPackage): license("BitTorrent-1.0") + version("0.2.12", sha256="856dbc857b2d425c80d9a1628e45743234fee2e68575aa9e2d29a6efae60c39a") version("0.2.11", sha256="5dbb36f2526c276fd79b8e08a30503dc401cdf54d8c40f61af758c9ee1192f55") version("0.2.10", sha256="77d6fbc86520a08da40d44c0b82767099f8f719ca95870d91efff1a9cab1ab9c") version("0.2.9", sha256="733f004ad1a8b0e5aafbf547c4349d2df3118afd57f1ff99f20e39135c6edb30") diff --git a/var/spack/repos/builtin/packages/r-rcppeigen/package.py b/var/spack/repos/builtin/packages/r-rcppeigen/package.py index 2b0899a537b0d4..c58708e5b4ee93 100644 --- a/var/spack/repos/builtin/packages/r-rcppeigen/package.py +++ b/var/spack/repos/builtin/packages/r-rcppeigen/package.py @@ -27,6 +27,7 @@ class RRcppeigen(RPackage): license("MPL-2.0") + version("0.3.4.0.1", sha256="25ed48f148b50aaadd92752d73e3eefe00ab4ecd4ae5662ae91a9ff3f72a4e26") version("0.3.3.9.3", sha256="5873a47fd6587d916f86119ab140c6736abf80ac45d06ff1c9d198708e7d1c76") version("0.3.3.9.2", sha256="2547e794d5a6fb8d9fbadf19e64afa0bcf413cc69ecf3f428995fa5a0fced493") version("0.3.3.9.1", sha256="8a0486249b778a4275a1168fc89fc7fc49c2bb031cb14b50a50089acae7fe962") @@ -36,6 +37,7 @@ class RRcppeigen(RPackage): version("0.3.2.9.0", sha256="25affba9065e3c12d67b1934d1ce97a928a4011a7738f7b90f0e9830409ec93b") version("0.3.2.8.1", sha256="ceccb8785531c5c23f9232b594e5372c214a114a08ec759115e946badd08d681") - depends_on("r-matrix@1.1-0:", type=("build", "run")) depends_on("r-rcpp@0.11.0:", type=("build", "run")) depends_on("r@3.6.0:", type=("build", "run"), when="@0.3.3.9.3:") + + depends_on("r-matrix@1.1-0:", type=("build", "run"), when="@:0.3.3.9.3") diff --git a/var/spack/repos/builtin/packages/r-rcppensmallen/package.py b/var/spack/repos/builtin/packages/r-rcppensmallen/package.py index a835b67d9a2372..32837f6befa080 100644 --- a/var/spack/repos/builtin/packages/r-rcppensmallen/package.py +++ b/var/spack/repos/builtin/packages/r-rcppensmallen/package.py @@ -11,10 +11,14 @@ class RRcppensmallen(RPackage): cran = "RcppEnsmallen" + version( + "0.2.21.1.1", sha256="87396e259666c8797a00c4255d912da58c7880313a8c4e7d48c6384eb6161956" + ) version( "0.2.19.0.1", sha256="b4a9bde4dde309a52a47b56790389ecab14fe64066098d2a38b1b588ba3d8631" ) depends_on("r@3.3.0:", type=("build", "run")) + depends_on("r@4.0.0:", type=("build", "run"), when="@0.2.20.0.1:") depends_on("r-rcpp", type=("build", "run")) depends_on("r-rcpparmadillo@0.9.800.0.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rcpphnsw/package.py b/var/spack/repos/builtin/packages/r-rcpphnsw/package.py index 0400df4dc15637..15af171e213a0c 100644 --- a/var/spack/repos/builtin/packages/r-rcpphnsw/package.py +++ b/var/spack/repos/builtin/packages/r-rcpphnsw/package.py @@ -17,6 +17,7 @@ class RRcpphnsw(RPackage): cran = "RcppHNSW" + version("0.6.0", sha256="a5a6ed00a84143aa62aa67df66fcccae657d5db0a1f9bb4b955a8e94c2ff580f") version("0.4.1", sha256="4f0082154f77dcb7756d41cdbfe0f58316431b9027081321a27942f319097c74") version("0.3.0", sha256="a0eb4eea65e28ba31e8306a1856f7e617a192bd448b148f88abe99181cbde007") version("0.1.0", sha256="75a54c30953845dec685764c7b3b4cd7315197c91aef4ab3b4eb0a6293010a95") diff --git a/var/spack/repos/builtin/packages/r-rcppparallel/package.py b/var/spack/repos/builtin/packages/r-rcppparallel/package.py index c127625cc326ed..86f026cdaf4642 100644 --- a/var/spack/repos/builtin/packages/r-rcppparallel/package.py +++ b/var/spack/repos/builtin/packages/r-rcppparallel/package.py @@ -16,6 +16,7 @@ class RRcppparallel(RPackage): cran = "RcppParallel" + version("5.1.9", sha256="fd0861f3f0f7be4e0ef29c021e75beb351ae2eb18ce5d79e21f2725da4da114f") version("5.1.7", sha256="f9c30eb9ce1abffc590825d513d6d28dcbe970e36032dd7521febf04e905b29c") version("5.1.5", sha256="6396322b3b6d6f7019aac808ceb74707bc5c4ed01677fab408372c2a5508c2ea") version("5.0.2", sha256="8ca200908c6365aafb2063be1789f0894969adc03c0f523c6cc45434b8236f81") diff --git a/var/spack/repos/builtin/packages/r-rcppprogress/package.py b/var/spack/repos/builtin/packages/r-rcppprogress/package.py index 9693b278bcf7c6..2c177e8a682b9a 100644 --- a/var/spack/repos/builtin/packages/r-rcppprogress/package.py +++ b/var/spack/repos/builtin/packages/r-rcppprogress/package.py @@ -25,4 +25,4 @@ class RRcppprogress(RPackage): depends_on("cxx", type="build") # generated - depends_on("r-rcpp@0.9.4:", type=("build", "run"), when="@:0.4") + depends_on("r-rcpp@0.9.4:", type=("build", "run"), when="@:0.4.0") diff --git a/var/spack/repos/builtin/packages/r-rcpproll/package.py b/var/spack/repos/builtin/packages/r-rcpproll/package.py index a963f612903449..d9fa889e2e03d2 100644 --- a/var/spack/repos/builtin/packages/r-rcpproll/package.py +++ b/var/spack/repos/builtin/packages/r-rcpproll/package.py @@ -16,6 +16,7 @@ class RRcpproll(RPackage): cran = "RcppRoll" + version("0.3.1", sha256="d2f5d978b6feb8510ec1a1a50ba0e8bf9002bb77bfad7d120f5b30b8f56036df") version("0.3.0", sha256="cbff2096443a8a38a6f1dabf8c90b9e14a43d2196b412b5bfe5390393f743f6b") depends_on("r@2.15.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rcppziggurat/package.py b/var/spack/repos/builtin/packages/r-rcppziggurat/package.py index e261a2745cccb3..9b1f89a11d0821 100644 --- a/var/spack/repos/builtin/packages/r-rcppziggurat/package.py +++ b/var/spack/repos/builtin/packages/r-rcppziggurat/package.py @@ -23,6 +23,7 @@ class RRcppziggurat(RPackage): depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated + depends_on("r@3.0.0:", type=("build", "run"), when="@0.1.6:") depends_on("r-rcpp", type=("build", "run")) depends_on("r-rcppgsl", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rcurl/package.py b/var/spack/repos/builtin/packages/r-rcurl/package.py index 187bc3809849a5..c96541652a5fc4 100644 --- a/var/spack/repos/builtin/packages/r-rcurl/package.py +++ b/var/spack/repos/builtin/packages/r-rcurl/package.py @@ -21,6 +21,7 @@ class RRcurl(RPackage): cran = "RCurl" + version("1.98-1.16", sha256="1a8dc40e10593617348071c6265cc7fac22e26271564206b308a3badfc6c0da7") version("1.98-1.12", sha256="1a83fef04e9573b402171a6e4a4b27857a3d045eec8970f8f7233850bba626b2") version("1.98-1.9", sha256="f28d4871675ec3d2b45fb5d36f7647f546f81121510954c3ad24fdec1643cec5") version("1.98-1.6", sha256="6cb56864ac043195b658bbdb345518d561507d84ccd60362866e970c2f71d1a2") diff --git a/var/spack/repos/builtin/packages/r-rdpack/package.py b/var/spack/repos/builtin/packages/r-rdpack/package.py index cb3ecb5a5f273f..18d017edcd68e8 100644 --- a/var/spack/repos/builtin/packages/r-rdpack/package.py +++ b/var/spack/repos/builtin/packages/r-rdpack/package.py @@ -19,6 +19,7 @@ class RRdpack(RPackage): cran = "Rdpack" + version("2.6.1", sha256="39626397c4ab1706bfdc53433dbaa0a6cb691dcba68173945b5a9eb041acf945") version("2.4", sha256="7652add12b30fcba1f3a12493a089a4166079e78c47b95802a98595a3ff53581") version("2.3", sha256="c45e1ab8352b92ce03f26ece1f4db3716959fca2af9e826d5bd3c76b2151f7c5") version("2.1.3", sha256="8381a8866b9acf5acb2c80069684339c3921f1b45fa202719e8f6852fb4d55b8") diff --git a/var/spack/repos/builtin/packages/r-readr/package.py b/var/spack/repos/builtin/packages/r-readr/package.py index 2621ce060f23ff..c85022427a80e2 100644 --- a/var/spack/repos/builtin/packages/r-readr/package.py +++ b/var/spack/repos/builtin/packages/r-readr/package.py @@ -18,6 +18,7 @@ class RReadr(RPackage): license("MIT") + version("2.1.5", sha256="0fa65a5fe0a46cffe221b7696b52adb82dd4d7a692a895484e438e439594e10a") version("2.1.4", sha256="98144fa48c4fa61ef8c73ede8f87a2d2c5c44e9502b7875b266eb79984fbeb0d") version("2.1.3", sha256="d70dd55e80e87cf1387811fcdc3da92987a892ee75dae02f77ff074142618263") version("2.1.2", sha256="94afd03a1fa4abcf2985ec903bbf5995d7c590e1a50512ed80d081ef4fe10c1b") @@ -31,6 +32,7 @@ class RReadr(RPackage): depends_on("r@3.1:", type=("build", "run"), when="@1.3.0:") depends_on("r@3.4:", type=("build", "run"), when="@2.1.3:") depends_on("r@3.5:", type=("build", "run"), when="@2.1.4:") + depends_on("r@3.6:", type=("build", "run"), when="@2.1.5:") depends_on("r-cli", type=("build", "run"), when="@1.4.0:") depends_on("r-cli@3.0.0:", type=("build", "run"), when="@2.1.2:") depends_on("r-cli@3.2.0:", type=("build", "run"), when="@2.1.3:") diff --git a/var/spack/repos/builtin/packages/r-readxl/package.py b/var/spack/repos/builtin/packages/r-readxl/package.py index 8867658ab7031a..5060121560c790 100644 --- a/var/spack/repos/builtin/packages/r-readxl/package.py +++ b/var/spack/repos/builtin/packages/r-readxl/package.py @@ -18,6 +18,7 @@ class RReadxl(RPackage): license("MIT") + version("1.4.3", sha256="7efebbcdefeb8523633db62b3eeb6ea2e4e81e3d010d8b2adb134011c09a5948") version("1.4.2", sha256="387304e2c5be0dca4861ec0232f0d92cc1882b660ca917f8f2a8a4ae858aba11") version("1.4.1", sha256="f6bebb7f940fb21baacd60345b7075c77eb1d026466c55e6a36148de680da1fa") version("1.4.0", sha256="ab9239c249f79b649f7665a612b3dbf4b774ab633115e6dee41091a8cb2491f7") @@ -28,6 +29,7 @@ class RReadxl(RPackage): depends_on("r@3.4:", type=("build", "run"), when="@1.4.0:") depends_on("r@3.5:", type=("build", "run"), when="@1.4.2:") + depends_on("r@3.6:", type=("build", "run"), when="@1.4.3:") depends_on("r-cellranger", type=("build", "run")) depends_on("r-tibble@1.3.1:", type=("build", "run")) depends_on("r-tibble@2.0.1:", type=("build", "run"), when="@1.4.0:") diff --git a/var/spack/repos/builtin/packages/r-recipes/package.py b/var/spack/repos/builtin/packages/r-recipes/package.py index 499c560a274af3..b80809a2f5fde8 100644 --- a/var/spack/repos/builtin/packages/r-recipes/package.py +++ b/var/spack/repos/builtin/packages/r-recipes/package.py @@ -19,6 +19,7 @@ class RRecipes(RPackage): license("MIT") + version("1.1.0", sha256="c5dc8876bc680272812bbb4be39a29464c42a7b773f8cc6d07ac4145f830206d") version("1.0.6", sha256="105e97127cdd6aaeb9fb3348e51a9c46e21fb8bcb734cb3bbd6dbdf2b6b2fc8f") version("1.0.2", sha256="1a7b5a9a2946fa34599935b6d93101ec559d8a901d49cc691972c75df8d5670e") version("1.0.1", sha256="9e3ae212413409bf41ec7d1a311586e12c0ca79943cef436707d041c57125bc9") @@ -29,11 +30,11 @@ class RRecipes(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@1.0.1:") + depends_on("r@3.6:", type=("build", "run"), when="@1.1.0:") depends_on("r-dplyr", type=("build", "run")) depends_on("r-dplyr@1.1.0:", type=("build", "run"), when="@1.0.6:") depends_on("r-cli", type=("build", "run"), when="@1.0.1:") depends_on("r-clock@0.6.1:", type=("build", "run"), when="@1.0.6:") - depends_on("r-ellipsis", type=("build", "run"), when="@0.1.17:") depends_on("r-generics", type=("build", "run")) depends_on("r-generics@0.1.0:", type=("build", "run"), when="@0.1.15:") depends_on("r-generics@0.1.0.9000:", type=("build", "run"), when="@0.2.0:") @@ -43,6 +44,7 @@ class RRecipes(RPackage): depends_on("r-hardhat@0.1.6.9001:", type=("build", "run"), when="@0.2.0:") depends_on("r-hardhat@1.2.0:", type=("build", "run"), when="@1.0.1:") depends_on("r-hardhat@1.3.0:", type=("build", "run"), when="@1.0.6:") + depends_on("r-hardhat@1.4.0:", type=("build", "run"), when="@1.1.0:") depends_on("r-ipred", type=("build", "run")) depends_on("r-ipred@0.9-12:", type=("build", "run"), when="@0.1.17:") depends_on("r-lifecycle", type=("build", "run"), when="@0.1.15:") @@ -55,6 +57,7 @@ class RRecipes(RPackage): depends_on("r-purrr@1.0.0:", type=("build", "run"), when="@1.0.6:") depends_on("r-rlang@0.4.0:", type=("build", "run")) depends_on("r-rlang@1.0.3:", type=("build", "run"), when="@1.0.1:") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.0.9:") depends_on("r-tibble", type=("build", "run")) depends_on("r-tidyr", type=("build", "run")) depends_on("r-tidyr@1.0.0:", type=("build", "run"), when="@0.1.15:") @@ -66,3 +69,5 @@ class RRecipes(RPackage): depends_on("r-vctrs", type=("build", "run"), when="@0.1.17:") depends_on("r-vctrs@0.5.0:", type=("build", "run"), when="@1.0.6:") depends_on("r-withr", type=("build", "run")) + + depends_on("r-ellipsis", type=("build", "run"), when="@0.1.17:1.0.10") diff --git a/var/spack/repos/builtin/packages/r-rematch/package.py b/var/spack/repos/builtin/packages/r-rematch/package.py index 54933633fc3819..1a188bd4264b46 100644 --- a/var/spack/repos/builtin/packages/r-rematch/package.py +++ b/var/spack/repos/builtin/packages/r-rematch/package.py @@ -16,4 +16,5 @@ class RRematch(RPackage): license("MIT") + version("2.0.0", sha256="15daf7bf2907aef8503635bc8631fce9fd75248a1fc2496825588c4bdf785c26") version("1.0.1", sha256="a409dec978cd02914cdddfedc974d9b45bd2975a124d8870d52cfd7d37d47578") diff --git a/var/spack/repos/builtin/packages/r-remotes/package.py b/var/spack/repos/builtin/packages/r-remotes/package.py index 6db1982ab0fded..4b9b40c792cfaf 100644 --- a/var/spack/repos/builtin/packages/r-remotes/package.py +++ b/var/spack/repos/builtin/packages/r-remotes/package.py @@ -18,6 +18,7 @@ class RRemotes(RPackage): license("MIT") + version("2.5.0", sha256="4d663f1426cd88d42f4070f23d969305c575e0499ed1397be6607b0770d2850c") version("2.4.2", sha256="f2ef875f24a485bf4f55a8c830f87cdd5db868f9a8cdb624dc452d0bf66ba516") version("2.2.0", sha256="12f234fd8c46f4ac54e06a3c60e4015ed2193a32762ca4dd6854f120136f33b8") version("2.1.1", sha256="4e590746fce618094089372b185e1ea234b3337b23c44c44118e942d0fb5118b") diff --git a/var/spack/repos/builtin/packages/r-renv/package.py b/var/spack/repos/builtin/packages/r-renv/package.py index 2f60c028645d17..fe9e81566aaa7d 100644 --- a/var/spack/repos/builtin/packages/r-renv/package.py +++ b/var/spack/repos/builtin/packages/r-renv/package.py @@ -19,6 +19,7 @@ class RRenv(RPackage): license("MIT") + version("1.0.7", sha256="7b60b58a23743803ab167f82f78663e86f778947b2bda07afa12689338794507") version("0.17.3", sha256="1c4f28cd233e1f539a2a091f1d118de83eb8aea5d5780dbdfb6bb8dcc6e4f5f0") version("0.16.0", sha256="f3a13e6b71e9be460db73bd9e11a3cb8a1d9bc05c6b77423957cbc2a7f8ba016") version("0.15.5", sha256="b4f1a9a7daa82f0c3123ebd4eeba06e98d5485215518e5292b25bc56741d582e") diff --git a/var/spack/repos/builtin/packages/r-repr/package.py b/var/spack/repos/builtin/packages/r-repr/package.py index 7146c4da14d9e4..a7ad7aaf29b47b 100644 --- a/var/spack/repos/builtin/packages/r-repr/package.py +++ b/var/spack/repos/builtin/packages/r-repr/package.py @@ -17,6 +17,7 @@ class RRepr(RPackage): license("GPL-3.0-or-later") + version("1.1.7", sha256="73bd696b4d4211096e0d1e382d5ce6591527d2ff400cc7ae8230f0235eed021b") version("1.1.6", sha256="3d2e6c9b363c1ec4811688deff7fb22093cadc9e0a333930382093d93c16673f") version("1.1.4", sha256="6f799ca83e0940618dd8c22e62ffdce5ec11ba3366c5306ae58b55b53c097040") version("1.1.0", sha256="743fe018f9e3e54067a970bc38b6b8c0c0498b43f88d179ac4a959c2013a5f96") diff --git a/var/spack/repos/builtin/packages/r-reprex/package.py b/var/spack/repos/builtin/packages/r-reprex/package.py index 3043c5e95aba3f..5b983f8b349cae 100644 --- a/var/spack/repos/builtin/packages/r-reprex/package.py +++ b/var/spack/repos/builtin/packages/r-reprex/package.py @@ -21,6 +21,7 @@ class RReprex(RPackage): license("MIT") + version("2.1.1", sha256="c860368cbc7ef90ea786fb61ab6fa42cd89b5258be48652abc20ad414001879c") version("2.0.2", sha256="a85b16e26112364a65c886efea050df08c17aadf1411fd14ec27d9ef13e87092") version("2.0.1", sha256="0e6d8667cacb63135476a766fba3a4f91e5ad86274ea66d2b1e6d773b5ca6426") version("0.3.0", sha256="203c2ae6343f6ff887e7a5a3f5d20bae465f6e8d9745c982479f5385f4effb6c") @@ -32,6 +33,7 @@ class RReprex(RPackage): depends_on("r@3.1:", type=("build", "run"), when="@0.2.0:") depends_on("r@3.3:", type=("build", "run"), when="@1:") depends_on("r@3.4:", type=("build", "run"), when="@2.0.2:") + depends_on("r@3.6:", type=("build", "run"), when="@2.1.0:") depends_on("r-callr@2.0.0:", type=("build", "run")) depends_on("r-callr@3.3.1:", type=("build", "run"), when="@1:") depends_on("r-callr@3.6.0:", type=("build", "run"), when="@2:") diff --git a/var/spack/repos/builtin/packages/r-reproducible/package.py b/var/spack/repos/builtin/packages/r-reproducible/package.py index 94b3089e4bb62b..42c219d4090eb6 100644 --- a/var/spack/repos/builtin/packages/r-reproducible/package.py +++ b/var/spack/repos/builtin/packages/r-reproducible/package.py @@ -26,6 +26,7 @@ class RReproducible(RPackage): license("GPL-3.0-only") + version("2.1.0", sha256="9bdc44339e5e82a0082492cb63846699c7491c7ade74d9843b6173d4be84b92b") version("1.2.16", sha256="ec504cdc1adf305cd008ce65eff226e3cb60b7a454b2c8b98a871c84458546ae") version("1.2.10", sha256="fcee3aeb9d38c561c95df8663614ff0ed91a871719730766171b4ed19c82f729") version("1.2.8", sha256="6f453016404f6a2a235cb4d951a29aa7394dc3bd0b9cfc338dc85fb3d5045dd5") @@ -34,19 +35,22 @@ class RReproducible(RPackage): depends_on("r@3.5:", type=("build", "run")) depends_on("r@3.6:", type=("build", "run"), when="@1.2.8:") depends_on("r@4.0:", type=("build", "run"), when="@1.2.10:") + depends_on("r@4.1:", type=("build", "run"), when="@2.0.2:") depends_on("r-data-table@1.10.4:", type=("build", "run")) - depends_on("r-dbi", type=("build", "run")) depends_on("r-digest", type=("build", "run")) + depends_on("r-filelock", type=("build", "run"), when="@2.0.2:") depends_on("r-fpcompare", type=("build", "run")) - depends_on("r-glue", type=("build", "run")) + depends_on("r-fs", type=("build", "run"), when="@2.0.9:") depends_on("r-lobstr", type=("build", "run"), when="@1.2.10:") - depends_on("r-magrittr", type=("build", "run")) - depends_on("r-raster", type=("build", "run")) - depends_on("r-raster@3.5-15:", type=("build", "run"), when="@1.2.10:") - depends_on("r-rsqlite", type=("build", "run")) - depends_on("r-rlang", type=("build", "run")) - depends_on("r-sp@1.4-2:", type=("build", "run")) depends_on("unrar", type=("build", "run")) + depends_on("r-dbi", type=("build", "run"), when="@:2.0.1") depends_on("r-gdalutilities", type=("build", "run"), when="@1.2.8") + depends_on("r-glue", type=("build", "run"), when="@:2.0.1") + depends_on("r-lobstr", type=("build", "run"), when="@1.2.10:2.0.1") + depends_on("r-magrittr", type=("build", "run"), when="@:2.0.1") + depends_on("r-raster@3.5-15:", type=("build", "run"), when="@1.2.10:2.0.1") depends_on("r-require", type=("build", "run"), when="@:1.2.10") + depends_on("r-rlang", type=("build", "run"), when="@:2.0.1") + depends_on("r-rsqlite", type=("build", "run"), when="@:2.0.1") + depends_on("r-sp@1.4-2:", type=("build", "run"), when="@:2.0.1") diff --git a/var/spack/repos/builtin/packages/r-require/package.py b/var/spack/repos/builtin/packages/r-require/package.py index 867c8417847479..edd15c5a6f7877 100644 --- a/var/spack/repos/builtin/packages/r-require/package.py +++ b/var/spack/repos/builtin/packages/r-require/package.py @@ -20,6 +20,7 @@ class RRequire(RPackage): maintainers("dorton21") + version("1.0.1", sha256="52256624b86178ec5efb86b992bbe5a24f2fa53687cec532c0a73b1852ce6800") version("0.3.0", sha256="de879999f71bd3009b58676673f26774119fa84d3d7fcc28d0b02f07d5c63968") version("0.1.4", sha256="1657dacff807ec8865892fce4d55cec9e31affafd90cb44ab59b704d29575a8c") version("0.1.2", sha256="c045c1cc69f6d6248306d88f6399699b9f86134a71b631e35b9101901593af1b") @@ -31,3 +32,4 @@ class RRequire(RPackage): depends_on("r@4.0:", type=("build", "run"), when="@0.1.2:") depends_on("r-data-table@1.10.4:", type=("build", "run")) depends_on("r-remotes", type=("build", "run"), when="@:0.0.13") + depends_on("r-sys", type=("build", "run"), when="@0.3.1.9074:") diff --git a/var/spack/repos/builtin/packages/r-reticulate/package.py b/var/spack/repos/builtin/packages/r-reticulate/package.py index 120cce8a6e3de4..9d6f53afffaad9 100644 --- a/var/spack/repos/builtin/packages/r-reticulate/package.py +++ b/var/spack/repos/builtin/packages/r-reticulate/package.py @@ -19,6 +19,7 @@ class RReticulate(RPackage): license("Apache-2.0") + version("1.38.0", sha256="cb2f313e2351a3cde03be55561b592318ec5376fba3b10e371eeff1986deca8d") version("1.28", sha256="58a299ed18faaa3ff14936752fcc2b86e64ae18fc9f36befdfd492ccb251516f") version("1.26", sha256="3fd74823bde1b0e094db7c2bf6b40ee2501f8d724b4c35b53da95c3c588c74c5") version("1.25", sha256="2125af9e75939c3b7c0dc74f28f42606e816d63aa1143baf631c318ff5ff3a2c") @@ -29,9 +30,12 @@ class RReticulate(RPackage): version("1.13", sha256="adbe41d556b667c4419d563680f8608a56b0f792b8bc427b3bf4c584ff819de3") depends_on("r@3.0:", type=("build", "run")) + depends_on("r@3.5:", type=("build", "run"), when="@1.30.0:") depends_on("r-matrix", type=("build", "run")) depends_on("r-rcpp@0.12.7:", type=("build", "run", "link")) + depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@1.29.0:") depends_on("r-rcpptoml", type=("build", "run", "link"), when="@1.23:") + depends_on("r-rlang", type=("build", "run"), when="@1.29.0:") depends_on("r-here", type=("build", "run", "link"), when="@1.23:") depends_on("r-jsonlite", type=("build", "run")) depends_on("r-png", type=("build", "run", "link"), when="@1.23:") diff --git a/var/spack/repos/builtin/packages/r-rfast/package.py b/var/spack/repos/builtin/packages/r-rfast/package.py index d6ddfe5967c5e0..63d534f379d296 100644 --- a/var/spack/repos/builtin/packages/r-rfast/package.py +++ b/var/spack/repos/builtin/packages/r-rfast/package.py @@ -21,11 +21,13 @@ class RRfast(RPackage): cran = "Rfast" + version("2.1.0", sha256="f9e46cac99db756cd49c9cd83be8adc0d381e6c03102389bfdcb8258d02418ff") version("2.0.7", sha256="8f86159a4760a7124e1c91ae0b022c7e496f81590ea4e4af702bea44e8dedf8f") version("2.0.6", sha256="34694b5c67ce8fcbdc90aac2ac80a74d4b66515f383e6301aea7c020009ebe7f") version("2.0.4", sha256="959907e36e24620c07ec282b203b40214f4914f4928c07ee6491043c27af31d9") depends_on("r@3.5.0:", type=("build", "run")) depends_on("r-rcpp@0.12.3:", type=("build", "run")) + depends_on("r-rcppparallel", type=("build", "run"), when="@2.1.0:") depends_on("r-rcppziggurat", type=("build", "run")) depends_on("r-rcpparmadillo", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rgdal/package.py b/var/spack/repos/builtin/packages/r-rgdal/package.py index 4194c69d7f7f07..a472fbd9eaa7ce 100644 --- a/var/spack/repos/builtin/packages/r-rgdal/package.py +++ b/var/spack/repos/builtin/packages/r-rgdal/package.py @@ -23,6 +23,7 @@ class RRgdal(RPackage): cran = "rgdal" + version("1.6-7", sha256="555cedfdadb05db90b061d4b056f96d8b7010c00ea54bc6c1bbcc7684fadae33") version( "1.6-6", sha256="d742d7aadfc004771e61cac28a1faffeb4dbda981dea19115be11c541087399a", diff --git a/var/spack/repos/builtin/packages/r-rgenoud/package.py b/var/spack/repos/builtin/packages/r-rgenoud/package.py index 172196c919519a..dc489925fec2ef 100644 --- a/var/spack/repos/builtin/packages/r-rgenoud/package.py +++ b/var/spack/repos/builtin/packages/r-rgenoud/package.py @@ -15,6 +15,7 @@ class RRgenoud(RPackage): license("GPL-3.0-only") + version("5.9-0.10", sha256="e644ee640a097ed2d32be03db3603259981656fa459922035a8c531d692acde9") version("5.9-0.3", sha256="31560a8dad791f9c47a673e90d397b3fc60da1a58be1ae1486ace90d988eb55f") version("5.8-3.0", sha256="9beb11b5edab3ab3aa6001daa39668b240a8e0328be9d55db4e23ff88ce3235d") version("5.8-2.0", sha256="106c4f6a6df5159578e929a0141b3cfbaa88141a70703ff59a1fc48a27e2d239") diff --git a/var/spack/repos/builtin/packages/r-rgeos/package.py b/var/spack/repos/builtin/packages/r-rgeos/package.py index fae7ad271ea3be..2122332ecd7e26 100644 --- a/var/spack/repos/builtin/packages/r-rgeos/package.py +++ b/var/spack/repos/builtin/packages/r-rgeos/package.py @@ -30,6 +30,7 @@ class RRgeos(RPackage): cran = "rgeos" + version("0.6-4", sha256="9d03c4de96fd3fad55ff8d1ff8113dcaaa00f15d9d0588e54c9f91751bcede11") version( "0.6-2", sha256="2ee2bb8b0c20d7908ac55d4d1cf8292c624ab836e02599ce1871a249a59fe0af", diff --git a/var/spack/repos/builtin/packages/r-rgexf/package.py b/var/spack/repos/builtin/packages/r-rgexf/package.py index e9c146ced9005f..7498cd8798f262 100644 --- a/var/spack/repos/builtin/packages/r-rgexf/package.py +++ b/var/spack/repos/builtin/packages/r-rgexf/package.py @@ -21,6 +21,7 @@ class RRgexf(RPackage): license("MIT") + version("0.16.3", sha256="cddcc58a10092cfea32999d7baaf6eae9b34e649a16627ee0b466a7cf2c339b0") version("0.16.2", sha256="6ee052b0de99d0c7492366b991d345a51b3d0cc890d10a68b8670e1bd4fc8201") version("0.16.0", sha256="2a671df9ac70cfefd4092754317cb28e32a33df345b80e1975bf838e838245ee") version("0.15.3", sha256="2e8a7978d1fb977318e6310ba65b70a9c8890185c819a7951ac23425c6dc8147") diff --git a/var/spack/repos/builtin/packages/r-rgl/package.py b/var/spack/repos/builtin/packages/r-rgl/package.py index 67f0b5e874b109..37a0a0d4b58b9d 100644 --- a/var/spack/repos/builtin/packages/r-rgl/package.py +++ b/var/spack/repos/builtin/packages/r-rgl/package.py @@ -20,6 +20,7 @@ class RRgl(RPackage): license("GPL-2.0-or-later") + version("1.3.1", sha256="9fea7b59dd7fef9bbd783c745d68325ec753ef412699d168bb6c664a56506d49") version("1.1.3", sha256="4fa246c2ab06261ea81e09a7a489f34174b93359fe74a3db291f8d0eccd38aae") version("0.110.2", sha256="da1118c1990ae161a5787960fb22009601d2ee7d39ca9c97c31c70589bce346d") version("0.108.3.2", sha256="033af3aceade6c21d0a602958fff1c25c21febc7d0e867cf88860cfa25fc3c65") @@ -34,6 +35,7 @@ class RRgl(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r@3.2.0:", type=("build", "run")) depends_on("r@3.3.0:", type=("build", "run"), when="@0.108.3:") + depends_on("r@3.6.0:", type=("build", "run"), when="@1.3.1:") depends_on("r-htmlwidgets", type=("build", "run")) depends_on("r-htmlwidgets@1.6.0:", type=("build", "run"), when="@1.1.3:") depends_on("r-htmltools", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rgooglemaps/package.py b/var/spack/repos/builtin/packages/r-rgooglemaps/package.py index f2931bef8119a1..d3e59136454c62 100644 --- a/var/spack/repos/builtin/packages/r-rgooglemaps/package.py +++ b/var/spack/repos/builtin/packages/r-rgooglemaps/package.py @@ -16,6 +16,7 @@ class RRgooglemaps(RPackage): cran = "RgoogleMaps" + version("1.5.1", sha256="14fe6c37d935a1c5a9ac063c9c9c59a1e93c6f86907480792302f9a9452cf8a4") version("1.4.5.3", sha256="d1d5ad8db841754af175d4104a05c5c31e5cc445be314a3ac70483c31798680b") version("1.4.3", sha256="44cb62bcd23e5b4807e91c5825352eb8d38aaaeb3b38a8271ca9f21c1e1d4b19") version("1.4.2", sha256="b479996fcb72f067644a7ea7f00325e44e76efd202e84aaab022753c4a6d5584") @@ -23,6 +24,6 @@ class RRgooglemaps(RPackage): depends_on("r@2.10:", type=("build", "run")) depends_on("r-png", type=("build", "run")) - depends_on("r-sp", type=("build", "run"), when="@1.4.5.3:") + depends_on("r-sp", type=("build", "run"), when="@1.4.5.3:1.4.5.3") depends_on("r-rjsonio", type=("build", "run"), when="@1.2.0.5:1.2.0.7") diff --git a/var/spack/repos/builtin/packages/r-rio/package.py b/var/spack/repos/builtin/packages/r-rio/package.py index f120492fe933df..473ae6b88fff96 100644 --- a/var/spack/repos/builtin/packages/r-rio/package.py +++ b/var/spack/repos/builtin/packages/r-rio/package.py @@ -22,15 +22,22 @@ class RRio(RPackage): license("GPL-2.0-only") + version("1.2.2", sha256="51472a286ad82e1cafd4d87d774662650ccf40d788b59dc70e49fe754e045394") version("0.5.29", sha256="9fa63187e1814053e6ed2a164665b4924e08c3453adccb78f7211d403dcc5412") version("0.5.16", sha256="d3eb8d5a11e0a3d26169bb9d08f834a51a6516a349854250629072d59c29d465") depends_on("r@2.15.0:", type=("build", "run")) + depends_on("r@4.0:", when="@1.2:", type=("build", "run")) depends_on("r-foreign", type=("build", "run")) depends_on("r-haven@1.1.2:", type=("build", "run"), when="@0.5.26:") depends_on("r-haven@1.1.0:", type=("build", "run")) depends_on("r-curl@0.6:", type=("build", "run")) + depends_on("r-data-table@1.11.2:", when="@1:", type=("build", "run")) depends_on("r-data-table@1.9.8:", type=("build", "run")) + depends_on("r-lifecycle", when="@1:", type=("build", "run")) + depends_on("r-r-utils", when="@1:", type=("build", "run")) + depends_on("r-readr", when="@1.2.1:", type=("build", "run")) depends_on("r-readxl@0.1.1:", type=("build", "run")) - depends_on("r-openxlsx", type=("build", "run")) + depends_on("r-openxlsx", type=("build", "run"), when="@:0.5.30") depends_on("r-tibble", type=("build", "run")) + depends_on("r-writexl", when="@1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rjags/package.py b/var/spack/repos/builtin/packages/r-rjags/package.py index 3797aa89837798..4d0883a909269f 100644 --- a/var/spack/repos/builtin/packages/r-rjags/package.py +++ b/var/spack/repos/builtin/packages/r-rjags/package.py @@ -16,6 +16,7 @@ class RRjags(RPackage): license("GPL-2.0-only") + version("4-16", sha256="369d393e519ae26219ff44e6a8f07d9310a9bb06fa0ec9dcce33ce7c4bc7e7e7") version("4-14", sha256="313b5df702598ce3bbc5f8b027b654c8489420ca5a4e0a794954ea9f4837e2cb") version("4-13", sha256="f85cc34c5127b828d8a3fa3613ef29f147c868bdaf55eb0f7406c10abbf92b32") version("4-12", sha256="b91f34c3f9ebf78fa44bd661346fbb6f28a01693a7203ac133c98392dd273e10") diff --git a/var/spack/repos/builtin/packages/r-rjava/package.py b/var/spack/repos/builtin/packages/r-rjava/package.py index 0a135ed48789f1..662ae85fd4d5c8 100644 --- a/var/spack/repos/builtin/packages/r-rjava/package.py +++ b/var/spack/repos/builtin/packages/r-rjava/package.py @@ -14,6 +14,7 @@ class RRjava(RPackage): cran = "rJava" + version("1.0-11", sha256="9ea0ccf5553d86f7de8649a8324766c4f0810f35b7be561640dd87fd37986417") version("1.0-6", sha256="e290d0493317a5d6c452793e92baa914e37ef03faef19b2e436329b4ec8658c6") version("0.9-13", sha256="5b1688f5044476b34f71d868b222ac5fce3a088f0c2b9e4591c1e48f3d8c75f4") version("0.9-11", sha256="c28ae131456a98f4d3498aa8f6eac9d4df48727008dacff1aa561fc883972c69") diff --git a/var/spack/repos/builtin/packages/r-rjson/package.py b/var/spack/repos/builtin/packages/r-rjson/package.py index 55bfe6a4af01a5..c0c3ea6ae52b00 100644 --- a/var/spack/repos/builtin/packages/r-rjson/package.py +++ b/var/spack/repos/builtin/packages/r-rjson/package.py @@ -15,6 +15,7 @@ class RRjson(RPackage): license("GPL-2.0-only") + version("0.2.22", sha256="06cdf67b72b6166a6ad399c8176b34f8a5a75fa5257ddbd46a2b99b2f39e1d27") version("0.2.21", sha256="982b56d35ccc0c7db0b20c1d3eab5f5f47c620309646fdc278ff1cc3433ea2e2") version("0.2.20", sha256="3a287c1e5ee7c333ed8385913c0a307daf99335fbdf803e9dcca6e3d5adb3f6c") version("0.2.19", sha256="5c2672461986f2b715416cab92ed262abe9875f31299bc8a1a072ef7c6dd49bc") @@ -25,3 +26,4 @@ class RRjson(RPackage): depends_on("r@3.1.0:", type=("build", "run")) depends_on("r@4.0.0:", type=("build", "run"), when="@0.2.21:") + depends_on("r@4.4.0:", type=("build", "run"), when="@0.2.22:") diff --git a/var/spack/repos/builtin/packages/r-rjsonio/package.py b/var/spack/repos/builtin/packages/r-rjsonio/package.py index 63495d35d3cda7..86833a53685e66 100644 --- a/var/spack/repos/builtin/packages/r-rjsonio/package.py +++ b/var/spack/repos/builtin/packages/r-rjsonio/package.py @@ -27,6 +27,7 @@ class RRjsonio(RPackage): cran = "RJSONIO" + version("1.3-1.9", sha256="f173034b0c28873f417ee804b9e278aedd92e76eb56c7c6d71b1c02fa1193ece") version("1.3-1.8", sha256="f6f0576d3c7852b16295dfc897feebca064fe5dd29cdce7592f94c56823553f5") version("1.3-1.6", sha256="82d1c9ea7758b2a64ad683f9c46223dcba9aa8146b43c1115bf9aa76a657a09f") version("1.3-1.4", sha256="54142c931e15eca278a02dad5734026bb49d960471eb085008af825352953190") diff --git a/var/spack/repos/builtin/packages/r-rlang/package.py b/var/spack/repos/builtin/packages/r-rlang/package.py index 48a47e14479eee..6f630c0707ae4a 100644 --- a/var/spack/repos/builtin/packages/r-rlang/package.py +++ b/var/spack/repos/builtin/packages/r-rlang/package.py @@ -16,6 +16,7 @@ class RRlang(RPackage): license("MIT") + version("1.1.4", sha256="f2d74527508bf3287102470beb27de0d234c3cbba399c28d3312f2c83c64a6e1") version("1.1.2", sha256="2a0ee1dc6e5c59b283c32db5e74e869922a336197cb406fe92622b6ec66f8092") version("1.1.1", sha256="5e5ec9a7796977216c39d94b1e342e08f0681746657067ba30de11b8fa8ada99") version("1.1.0", sha256="f89859d91c9edc05fd7ccf21163fe53ad58da907ee273a93d5ab004a8649335b") diff --git a/var/spack/repos/builtin/packages/r-rlist/package.py b/var/spack/repos/builtin/packages/r-rlist/package.py new file mode 100644 index 00000000000000..672f6b7586c968 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-rlist/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RRlist(RPackage): + """Provides a set of functions for data manipulation with + list objects, including mapping, filtering, grouping, sorting, + updating, searching, and other useful functions. Most functions + are designed to be pipeline friendly so that data processing with + lists can be chained.""" + + homepage = "https://renkun-ken.github.io/rlist/" + cran = "rlist" + + license("MIT", checked_by="wdconinc") + + version("0.4.6.2", sha256="ebde658d897c8a27a90ebb892b9e2bad15e2ad75557a7352fb08cbb5604e0997") + + depends_on("r@2.15:", type=("build", "run")) + depends_on("r-yaml", type=("build", "run")) + depends_on("r-jsonlite", type=("build", "run")) + depends_on("r-xml", type=("build", "run")) + depends_on("r-data-table", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rmariadb/package.py b/var/spack/repos/builtin/packages/r-rmariadb/package.py index 740d434eaff766..231701e2bb21eb 100644 --- a/var/spack/repos/builtin/packages/r-rmariadb/package.py +++ b/var/spack/repos/builtin/packages/r-rmariadb/package.py @@ -15,6 +15,7 @@ class RRmariadb(RPackage): cran = "RMariaDB" + version("1.3.2", sha256="7c87ef0623218b9e79dd6a9b1a25f495520289603ca48f54ea45309bd8826828") version("1.2.2", sha256="c97c61ace584f9ad9929d3e3f366556e0eecad12bc98ea2979563a01475f468e") version("1.2.1", sha256="c9176a096854ce33a98ce0faef0065c50b5d356174f90cea742c70e130cf5f0c") version("1.1.0", sha256="9ffa63a15052876a51a7996ca4e6a5b7b937f594b5cc7ca5a86f43789e22a956") @@ -27,11 +28,12 @@ class RRmariadb(RPackage): depends_on("r-dbi@1.1.3:", type=("build", "run"), when="@1.2.2:") depends_on("r-hms@0.5.0:", type=("build", "run")) depends_on("r-lubridate", type=("build", "run"), when="@1.1.0:") - depends_on("r-rcpp@0.12.4:", type=("build", "run")) + depends_on("r-cpp11", type=("build", "run"), when="@1.3.0:") depends_on("r-rlang", type=("build", "run"), when="@1.2.1:") depends_on("r-plogr", type=("build", "run")) depends_on("mariadb-client") + depends_on("r-rcpp@0.12.4:", type=("build", "run"), when="@:1.2.2") depends_on("r-bh", type=("build", "run"), when="@:1.1.0") # Set the library explicitly to prevent configure from finding a system diff --git a/var/spack/repos/builtin/packages/r-rmarkdown/package.py b/var/spack/repos/builtin/packages/r-rmarkdown/package.py index 2b4e444e0ef688..767288056bc7b5 100644 --- a/var/spack/repos/builtin/packages/r-rmarkdown/package.py +++ b/var/spack/repos/builtin/packages/r-rmarkdown/package.py @@ -16,6 +16,7 @@ class RRmarkdown(RPackage): license("GPL-3.0-only") + version("2.28", sha256="a102a503a92d4203038c5a0675451daf9460df18efcabd5c23283ecefe75a085") version("2.21", sha256="c25b20a422d11a115c93460f41c488874002154abb349b14e0d6518682fdac28") version("2.17", sha256="aa576c458ec4c2e8468aaa4e3f60202d8d9c7ef54fa01d6b2d243bffee08c4be") version("2.16", sha256="d3d34e0419c419d3ab20eb60952a0f0f4c391d202277af55dcd673d25561fa71") @@ -38,7 +39,7 @@ class RRmarkdown(RPackage): depends_on("r-jquerylib", type=("build", "run"), when="@2.11:") depends_on("r-jsonlite", type=("build", "run")) depends_on("r-knitr@1.22:", type=("build", "run")) - depends_on("r-stringr@1.2.0:", type=("build", "run"), when="@1.6:") + depends_on("r-knitr@1.43:", type=("build", "run"), when="@2.26:") depends_on("r-tinytex@0.11:", type=("build", "run"), when="@1.10:") depends_on("r-tinytex@0.31:", type=("build", "run"), when="@2.8:") depends_on("r-xfun", type=("build", "run"), when="@1.13:") @@ -54,3 +55,4 @@ class RRmarkdown(RPackage): depends_on("r-mime", type=("build", "run"), when="@1.8:1.14") depends_on("r-catools", type=("build", "run"), when="@:1.7") depends_on("r-base64enc", type=("build", "run"), when="@:1.14") + depends_on("r-stringr@1.2.0:", type=("build", "run"), when="@1.6:2.25") diff --git a/var/spack/repos/builtin/packages/r-rmpfr/package.py b/var/spack/repos/builtin/packages/r-rmpfr/package.py index 7388730fc157d1..04b423d5abb74d 100644 --- a/var/spack/repos/builtin/packages/r-rmpfr/package.py +++ b/var/spack/repos/builtin/packages/r-rmpfr/package.py @@ -17,6 +17,7 @@ class RRmpfr(RPackage): cran = "Rmpfr" + version("0.9-5", sha256="bce9a2729efcd329a13910e2ecb4675b4626dd3322cd01b01cb835d516a5f31b") version("0.9-2", sha256="ed63da32f3b970900c87cdb728eb16ed9fb0c79114cdecdc09e573f50ff7175e") version("0.8-9", sha256="cfee5ab47d49c6433c372a267f7d849c8f7c61a84e00d08afb047eaafcdbbc8a") version("0.8-7", sha256="93c2db785ff705dcfc6fa7f0373c2426cdc2ef72ceb5b294edeb2952775f57d2") diff --git a/var/spack/repos/builtin/packages/r-rmpi/package.py b/var/spack/repos/builtin/packages/r-rmpi/package.py index 88b9a301751980..2a706a42e12868 100644 --- a/var/spack/repos/builtin/packages/r-rmpi/package.py +++ b/var/spack/repos/builtin/packages/r-rmpi/package.py @@ -14,6 +14,7 @@ class RRmpi(RPackage): cran = "Rmpi" + version("0.7-2", sha256="8591fa9f50de52535a32b36e7ed142c6ca4e03fdfdbef79a1e27a63ed5322eef") version("0.7-1", sha256="17dae27dea9317aacabc2255dfcf2538fb3195472cedd521256ced9a20dd2dc1") version("0.6-9.2", sha256="358ac1af97402e676f209261a231f36a35e60f0301edf8ca53dac11af3c3bd1a") version("0.6-9", sha256="b2e1eac3e56f6b26c7ce744b29d8994ab6507ac88df64ebbb5af439414651ee6") @@ -24,10 +25,13 @@ class RRmpi(RPackage): depends_on("mpi") # The following MPI types are not supported - conflicts("^intel-mpi") - conflicts("^intel-parallel-studio") - conflicts("^mvapich2") - conflicts("^spectrum-mpi") + conflicts("^[virtuals=mpi] intel-mpi") + conflicts("^[virtuals=mpi] intel-parallel-studio") + conflicts("^[virtuals=mpi] mvapich2") + conflicts("^[virtuals=mpi] spectrum-mpi") + + # Rmpi's Open MPI implementation depends on v4.x ORTE runtime environment + conflicts("^[virtuals=mpi] openmpi@5:") def configure_args(self): spec = self.spec diff --git a/var/spack/repos/builtin/packages/r-rms/package.py b/var/spack/repos/builtin/packages/r-rms/package.py index a14c2404c25241..289f9dd9a993f8 100644 --- a/var/spack/repos/builtin/packages/r-rms/package.py +++ b/var/spack/repos/builtin/packages/r-rms/package.py @@ -27,6 +27,7 @@ class RRms(RPackage): license("GPL-2.0-or-later") + version("6.8-1", sha256="9d38545749430763c242bae1181ce24a7f6f6b244e4c69348ab200b83925596a") version("6.6-0", sha256="f3abadb94339f3aedadd27e1aceade069bcb53c94bf246626b0dc94b16b6625c") version("6.3-0", sha256="6c41eb670daf5e4391cc2f2a19e20a591f90769c124300a7ccf555820140d3f9") version("6.2-0", sha256="10d58cbfe39fb434223834e29e5248c9384cded23e6267cfc99367d0f5ee24b6") @@ -38,9 +39,11 @@ class RRms(RPackage): version("5.1-1", sha256="c489948df5c434b40bcf5288844f5b4e08d157f36939d09230c1600f88d1bfe3") depends_on("r@3.5.0:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@6.8-0:") depends_on("r-hmisc@4.3-0:", type=("build", "run")) depends_on("r-hmisc@4.7-0:", type=("build", "run"), when="@6.3-0:") depends_on("r-hmisc@4.8-0:", type=("build", "run"), when="@6.6-0:") + depends_on("r-hmisc@5.1-0:", type=("build", "run"), when="@6.8-0:") depends_on("r-survival@3.1-6:", type=("build", "run")) depends_on("r-survival@3.1-12:", type=("build", "run"), when="@6.1-0:") depends_on("r-ggplot2@2.2:", type=("build", "run")) @@ -56,6 +59,7 @@ class RRms(RPackage): depends_on("r-cluster", type=("build", "run"), when="@6.1-0:") depends_on("r-digest", type=("build", "run"), when="@6.1-0:") depends_on("r-knitr", type=("build", "run"), when="@6.6-0:") - depends_on("r-kableextra", type=("build", "run"), when="@6.6-0:") depends_on("r-colorspace", type=("build", "run"), when="@6.6-0:") depends_on("r-lattice", type=("build", "run"), when="@:6.3-0") + + depends_on("r-kableextra", type=("build", "run"), when="@6.6-0:6.7-0") diff --git a/var/spack/repos/builtin/packages/r-rmysql/package.py b/var/spack/repos/builtin/packages/r-rmysql/package.py index 2e3639efdd42fc..fba82187857459 100644 --- a/var/spack/repos/builtin/packages/r-rmysql/package.py +++ b/var/spack/repos/builtin/packages/r-rmysql/package.py @@ -15,6 +15,7 @@ class RRmysql(RPackage): cran = "RMySQL" + version("0.10.27", sha256="f1735b689cd9bdb9c776a16138eaa1f6c5cbdbab5c1d292e1240e3bbf105bfab") version("0.10.25", sha256="ed130f9bd80ea9fd5b4fdbb6fa094c35646354507de68eb3d19a3cbc8b5a4794") version("0.10.24", sha256="ca1b9aacab6d76866ba09210ae881c3a7555bd5144ea0a0a446fceff80637241") version("0.10.23", sha256="f4ac7ed4fba83749819c07ce32d53ee024cf1cedebbda3b832644bff9edf4a15") diff --git a/var/spack/repos/builtin/packages/r-rnoaa/package.py b/var/spack/repos/builtin/packages/r-rnoaa/package.py index 5e059a6b534980..b8551eab7c92bb 100644 --- a/var/spack/repos/builtin/packages/r-rnoaa/package.py +++ b/var/spack/repos/builtin/packages/r-rnoaa/package.py @@ -22,6 +22,7 @@ class RRnoaa(RPackage): license("MIT") + version("1.4.0", sha256="a1869303b3fc14d9b3674451c0ce9331ddc26110b7474fe419ac37f7ffb63097") version("1.3.8", sha256="57974b48162637e98888f041d6f0e580d3c60bd5008af2d2bc659491f0deb98a") version("1.3.0", sha256="4c421ad6e4c2b25e4dea5351c338aed70bea6e382562412d1dad825a50b0d161") version("0.8.4", sha256="fb9ae771111dd5f638c1eff3290abad2ff9cc7e68a6678bf2414433ebed2dbbf") diff --git a/var/spack/repos/builtin/packages/r-robust/package.py b/var/spack/repos/builtin/packages/r-robust/package.py index a5bf5c16e107b1..37ad526b3dbe75 100644 --- a/var/spack/repos/builtin/packages/r-robust/package.py +++ b/var/spack/repos/builtin/packages/r-robust/package.py @@ -17,6 +17,7 @@ class RRobust(RPackage): license("GPL-3.0-or-later") + version("0.7-5", sha256="a3c02a9c9101b966907cb52b3193c4ef51864928ad99c3351edf5390532c1acc") version("0.7-1", sha256="efaac70c6399b2787938e23ea89039b4a6043e76601bd794ba0ddda1edee65df") version("0.7-0", sha256="5e1aac30e185e416c22445663704f39433af9fdb48452185f2c9beb3528084b9") version("0.6-1", sha256="496fd225f6bc6f734e338308f18475125aaf691b39e25308bddb284d3106117d") diff --git a/var/spack/repos/builtin/packages/r-robustbase/package.py b/var/spack/repos/builtin/packages/r-robustbase/package.py index a05863c09574b0..37db5ba90f8c63 100644 --- a/var/spack/repos/builtin/packages/r-robustbase/package.py +++ b/var/spack/repos/builtin/packages/r-robustbase/package.py @@ -19,6 +19,7 @@ class RRobustbase(RPackage): license("GPL-2.0-or-later") + version("0.99-4", sha256="a978d04fcd4bee7a4ebfa9f05e9abb4a1ca4d970867229a90698bed2fbf40cbc") version("0.95-1", sha256="862cd26db3ecdf34ab47c52d355fd65ffebbff448aea17999a9b95a1f13ba3ea") version("0.95-0", sha256="5cfaea1c46df6d45086614fea5f152c8da8ebfcadf33bb8df5b82e742eef9724") version("0.93-9", sha256="d75fb5075463fec61d063bced7003936e9198492328b6fae15f67e8415713c45") diff --git a/var/spack/repos/builtin/packages/r-rodbc/package.py b/var/spack/repos/builtin/packages/r-rodbc/package.py index e16a948741e307..d0fdeba36c27d8 100644 --- a/var/spack/repos/builtin/packages/r-rodbc/package.py +++ b/var/spack/repos/builtin/packages/r-rodbc/package.py @@ -15,6 +15,7 @@ class RRodbc(RPackage): license("GPL-2.0-or-later") + version("1.3-23", sha256="15cdd15ac0afb3294420c7593b04a5e4e31df175418b22a8ec075bf5855e0f3b") version("1.3-20", sha256="7f157bd1ca2502bea4247260aac5b0f3aa1026ddffe5c50b026f2d59c210fbd6") version("1.3-19", sha256="3afcbd6877cd8b7c8df4a94bacd041a51e5ac607810acb88efd380b45d2d4efe") version("1.3-17", sha256="469fc835f65c344d5c3eaa097ff278ee8e9f12f845722a9aad340115faa704f7") diff --git a/var/spack/repos/builtin/packages/r-roxygen2/package.py b/var/spack/repos/builtin/packages/r-roxygen2/package.py index 60df397a81d3f0..97e60dac2d2185 100644 --- a/var/spack/repos/builtin/packages/r-roxygen2/package.py +++ b/var/spack/repos/builtin/packages/r-roxygen2/package.py @@ -18,6 +18,7 @@ class RRoxygen2(RPackage): license("MIT") + version("7.3.2", sha256="b788879f9132b7e2e656f442a6c592314676a9bf32d6a0a56e156cfa1ada011c") version("7.2.3", sha256="d844fab977d2575ab942fa1309ac7ff67f35f099a75d8b41c79efe6ea10416da") version("7.2.1", sha256="d2f0342591dc2b561fad8f6cf6fb3001e5e0bdd02be68bb2c6315f6bb82cda21") version("7.2.0", sha256="2ebfcfd567b9db6c606c6d42be1645b4e987f987995a2ad8954fa963a519448b") @@ -31,6 +32,7 @@ class RRoxygen2(RPackage): depends_on("r@3.1:", type=("build", "run"), when="@6.1.0:") depends_on("r@3.2:", type=("build", "run"), when="@7.1.0:") depends_on("r@3.3:", type=("build", "run"), when="@7.1.2:") + depends_on("r@3.6:", type=("build", "run"), when="@7.3.0:") depends_on("r-brew", type=("build", "run")) depends_on("r-cli@3.3.0:", type=("build", "run"), when="@7.2.0:") depends_on("r-commonmark", type=("build", "run")) @@ -39,6 +41,7 @@ class RRoxygen2(RPackage): depends_on("r-pkgload@1.0.2:", type=("build", "run")) depends_on("r-purrr", type=("build", "run")) depends_on("r-purrr@0.3.3:", type=("build", "run"), when="@7.1.0:") + depends_on("r-purrr@1.0.0:", type=("build", "run"), when="@7.3.0:") depends_on("r-r6@2.1.2:", type=("build", "run")) depends_on("r-rlang", type=("build", "run"), when="@7.1.0:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@7.2.0:") diff --git a/var/spack/repos/builtin/packages/r-rpart-plot/package.py b/var/spack/repos/builtin/packages/r-rpart-plot/package.py index 7ed71d89b96617..3a8b649d9b4dc9 100644 --- a/var/spack/repos/builtin/packages/r-rpart-plot/package.py +++ b/var/spack/repos/builtin/packages/r-rpart-plot/package.py @@ -14,6 +14,7 @@ class RRpartPlot(RPackage): cran = "rpart.plot" + version("3.1.2", sha256="3dca2a5d1a8e5eb5129fd6efce9c5f6b2fa241bfb65f2a8823a8db89f4b422b2") version("3.1.1", sha256="30736240058df21a96d10912a091d938f821d521a3bc4efb9aa4ef6fb233024d") version("3.1.0", sha256="2aaba0c0cabbc17aca9085248b0ad74ee7ff2b8f729e020e84b3917de174c15e") version("3.0.9", sha256="1150f5e9899b3b31b17160617cd99c3ad340c8361aeb229264a7a3a3a28015a4") diff --git a/var/spack/repos/builtin/packages/r-rpart/package.py b/var/spack/repos/builtin/packages/r-rpart/package.py index 24fd3ebd141ac9..36bd41d99cfd5b 100644 --- a/var/spack/repos/builtin/packages/r-rpart/package.py +++ b/var/spack/repos/builtin/packages/r-rpart/package.py @@ -17,6 +17,7 @@ class RRpart(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("4.1.23", sha256="f9b89aed6aa6cea656a2dcb271574e969ce2b1c98beb07bd91e17339f6daabaf") version("4.1.19", sha256="fe723ed0b5583fae8b40e6fecc29b357229cb11f2339b02a4e4f812926249565") version("4.1.16", sha256="27ec75258a5a3459ad999f5f36760ead974930744249605bf8465f234f31425c") version("4.1-15", sha256="2b8ebe0e9e11592debff893f93f5a44a6765abd0bd956b0eb1f70e9394cfae5c") diff --git a/var/spack/repos/builtin/packages/r-rpostgres/package.py b/var/spack/repos/builtin/packages/r-rpostgres/package.py index 0e829406e50370..c7adf3b7e10497 100644 --- a/var/spack/repos/builtin/packages/r-rpostgres/package.py +++ b/var/spack/repos/builtin/packages/r-rpostgres/package.py @@ -14,6 +14,7 @@ class RRpostgres(RPackage): cran = "RPostgres" + version("1.4.7", sha256="3dd1f1d83bd8a25a0a86532c6971072fccea7b1769f601ad9daa8c9aa8f66924") version("1.4.5", sha256="70ff848cba51ddad4642a20e01cda1033e6f218b015a13380c30604bbd18c797") version("1.4.4", sha256="c9cc0648c432f837fd0eb4922db4903357244d5a2cedd04ea236f249b08acdfc") version("1.4.3", sha256="a5be494a54b6e989fadafdc6ee2dc5c4c15bb17bacea9ad540b175c693331be2") @@ -22,14 +23,16 @@ class RRpostgres(RPackage): depends_on("r@3.1.0:", type=("build", "run")) depends_on("r-bit64", type=("build", "run")) depends_on("r-blob@1.2.0:", type=("build", "run")) + depends_on("r-cpp11", type=("build", "run"), when="@1.4.6:") depends_on("r-dbi@1.1.0:", type=("build", "run")) + depends_on("r-dbi@1.2.0:", type=("build", "run"), when="@1.4.7:") depends_on("r-hms@0.5.0:", type=("build", "run")) depends_on("r-hms@1.0.0:", type=("build", "run"), when="@1.4.3:") depends_on("r-lubridate", type=("build", "run")) - depends_on("r-rcpp@0.11.4.2:", type=("build", "run")) - depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@1.4.3:") depends_on("r-withr", type=("build", "run")) depends_on("r-plogr@0.2.0:", type=("build", "run")) depends_on("postgresql@9.0:") + depends_on("r-rcpp@0.11.4.2:", type=("build", "run"), when="@:1.4.5") + depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@1.4.3:1.4.5") depends_on("r-bh", type=("build", "run"), when="@:1.3.1") diff --git a/var/spack/repos/builtin/packages/r-rpostgresql/package.py b/var/spack/repos/builtin/packages/r-rpostgresql/package.py index 74715c6c5d8a18..74cd1832a1e2d2 100644 --- a/var/spack/repos/builtin/packages/r-rpostgresql/package.py +++ b/var/spack/repos/builtin/packages/r-rpostgresql/package.py @@ -23,6 +23,7 @@ class RRpostgresql(RPackage): license("PostgreSQL") + version("0.7-6", sha256="385939708b6a3657663409f91e165ded0ff5268d1dc6225e0f9b34764baf2d2c") version("0.7-5", sha256="6b5401ee55bd948ae7bc84520d789ceb422533a7d5e5bd6e10e3b54447f29fa1") version("0.7-4", sha256="b6adf60094f2b03dff1959147cde7f61c2f4c4576d77b2a263c63f8e3cd556c6") version("0.7-3", sha256="bdbca10329aeb357f05364772964716dfb5ce2470f7eb4a33770862b6ded71b9") diff --git a/var/spack/repos/builtin/packages/r-rprojroot/package.py b/var/spack/repos/builtin/packages/r-rprojroot/package.py index 0d6bea6d61b240..3d081b81fcdd29 100644 --- a/var/spack/repos/builtin/packages/r-rprojroot/package.py +++ b/var/spack/repos/builtin/packages/r-rprojroot/package.py @@ -17,6 +17,7 @@ class RRprojroot(RPackage): license("MIT") + version("2.0.4", sha256="b5f463fb25a24dac7a4ca916be57dbe22b5262e1f41e53871ca83e57d4336e99") version("2.0.3", sha256="50604247470e910cecfe9b76df754bf96a0d701f81b732f7aa9c90a20d30f897") version("2.0.2", sha256="5fa161f0d4ac3b7a99dc6aa2d832251001dc92e93c828593a51fe90afd019e1f") version("1.3-2", sha256="df5665834941d8b0e377a8810a04f98552201678300f168de5f58a587b73238b") diff --git a/var/spack/repos/builtin/packages/r-rrblup/package.py b/var/spack/repos/builtin/packages/r-rrblup/package.py index 85db94fb3ef34a..0759a2f0a34314 100644 --- a/var/spack/repos/builtin/packages/r-rrblup/package.py +++ b/var/spack/repos/builtin/packages/r-rrblup/package.py @@ -17,6 +17,7 @@ class RRrblup(RPackage): cran = "rrBLUP" + version("4.6.3", sha256="cd2a257ecb8252f352fd09189b538db62e4de4a51091cf392c18966c3f0c80cd") version("4.6.2", sha256="860f5e3f889593b6737f386743a2679322ec7d3557bea8e25482fd6cb745adff") version("4.6.1", sha256="e9230e74cc430a83ac5567071cb1c7f00b35c368f7d79bcc1cfde7225446c4db") version("4.6", sha256="28b475a1466fcdc1780caace75cf34155338fda496cebd5799315598a4bc84af") diff --git a/var/spack/repos/builtin/packages/r-rrcov/package.py b/var/spack/repos/builtin/packages/r-rrcov/package.py index a0822cb4e6725c..71895d0cf2bf46 100644 --- a/var/spack/repos/builtin/packages/r-rrcov/package.py +++ b/var/spack/repos/builtin/packages/r-rrcov/package.py @@ -23,6 +23,7 @@ class RRrcov(RPackage): license("GPL-3.0-or-later") + version("1.7-6", sha256="b8a2c07c42e4e76e9f90cb016cb72a40f6d2ce1f10d1753c06e3344f38e148de") version("1.7-2", sha256="0f01ed07cbc9e55dfcba27040a3f72237fb2fb86eda899472c2f96500220ecae") version("1.7-1", sha256="e115a09997b46c7eed33017f748632c7d50a95ad621f1f452f22dfc714c9a4e5") version("1.7-0", sha256="cbcca84a82d63fa50556aa8db29312b9bb588a638eb306ce4a81c271529228fd") diff --git a/var/spack/repos/builtin/packages/r-rrpp/package.py b/var/spack/repos/builtin/packages/r-rrpp/package.py index b9de4ebda6b3aa..a0e839f3c535b4 100644 --- a/var/spack/repos/builtin/packages/r-rrpp/package.py +++ b/var/spack/repos/builtin/packages/r-rrpp/package.py @@ -25,6 +25,7 @@ class RRrpp(RPackage): cran = "RRPP" + version("2.0.3", sha256="ff70976d4656c39bb02d842668c4d283bc2a26294d3aa2c6590f86a87fd8a2b5") version("1.3.1", sha256="50c7d4b20fb84088b0440c2f55ed146bcb35b0d9dda8581dca28e30b2fecbcd5") version("1.2.3", sha256="6eee638af94d69d4dd471a5e01243622dedef3c0c95b3363e21e8e11f0ea564c") version("1.1.2", sha256="2b563f3db9e349abe481444f48a1a3e6bc1154de8259b7a7060ab588287e80c0") @@ -34,6 +35,7 @@ class RRrpp(RPackage): version("0.3.0", sha256="34fea6ce7a78e4f38398d3b99585bab11a8171bc8b9a4e461b6d984ed1373739") depends_on("r@3.5.0:", type=("build", "run"), when="@0.6.2:") + depends_on("r@4.4.0:", type=("build", "run"), when="@2.0.3:") depends_on("r-ape", type=("build", "run"), when="@0.6.2:") depends_on("r-ggplot2", type=("build", "run"), when="@1.1.2:") depends_on("r-matrix", type=("build", "run"), when="@1.1.2:") diff --git a/var/spack/repos/builtin/packages/r-rsconnect/package.py b/var/spack/repos/builtin/packages/r-rsconnect/package.py index 2e5b56d586480f..bb7db9df32d842 100644 --- a/var/spack/repos/builtin/packages/r-rsconnect/package.py +++ b/var/spack/repos/builtin/packages/r-rsconnect/package.py @@ -17,6 +17,7 @@ class RRsconnect(RPackage): license("GPL-2.0-only") + version("1.3.1", sha256="47de8a832da493e2a1b3243fb42459a53eb193f75a1143348b7d8c7478cb5557") version("0.8.29", sha256="852899d2aaf90bcedf4d191a9e00c770e8ee4233235169fc97e6aa636de01c43") version("0.8.28", sha256="25b9a947772ada9593da5c48297b7a7dd0e11aa73fbb9a282631c75ec49616e0") version("0.8.27", sha256="0a44d5605fc7cd6855ea0235d662e4a323a24a2c214cc4f1696afbca3a8f169c") @@ -25,13 +26,19 @@ class RRsconnect(RPackage): version("0.8.17", sha256="64767a4d626395b7871375956a9f0455c3d64ff6e779633b0e554921d85da231") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-curl", type=("build", "run")) + depends_on("r-cli", type=("build", "run"), when="@1.0.0:") depends_on("r-digest", type=("build", "run")) depends_on("r-jsonlite", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@1.0.0:") depends_on("r-openssl", type=("build", "run")) depends_on("r-openssl@2.0.0:", type=("build", "run"), when="@0.8.26:") depends_on("r-packrat@0.6:", type=("build", "run"), when="@0.8.18:") depends_on("r-packrat@0.5:", type=("build", "run")) depends_on("r-packrat@0.6:", type=("build", "run"), when="@0.8.26:") + depends_on("r-pki", type=("build", "run"), when="@1.2.2:") + depends_on("r-renv@1.0.0:", type=("build", "run"), when="@1.0.0:") + depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.0.0:") depends_on("r-rstudioapi@0.5:", type=("build", "run")) depends_on("r-yaml@2.1.5:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rsnns/package.py b/var/spack/repos/builtin/packages/r-rsnns/package.py index 75c5dd094b63ff..a0323c1d768351 100644 --- a/var/spack/repos/builtin/packages/r-rsnns/package.py +++ b/var/spack/repos/builtin/packages/r-rsnns/package.py @@ -20,6 +20,7 @@ class RRsnns(RPackage): cran = "RSNNS" + version("0.4-17", sha256="424557d7326889e09e31e04d2a9b7224bed0bb4aa6f9e5433d7ce4fe04a35afc") version("0.4-15", sha256="4a4286444f50b28fb6294b8b49250fa6c43c8fddf2ee0550a3ae59a4212ec1b3") version("0.4-14", sha256="7f6262cb2b49b5d5979ccce9ded9cbb2c0b348fd7c9eabc1ea1d31c51a102c20") version("0.4-12", sha256="b18dfeda71573bc92c6888af72da407651bff7571967965fd3008f0d331743b9") diff --git a/var/spack/repos/builtin/packages/r-rspectra/package.py b/var/spack/repos/builtin/packages/r-rspectra/package.py index 76a264fd1cf995..68b56dff7d8747 100644 --- a/var/spack/repos/builtin/packages/r-rspectra/package.py +++ b/var/spack/repos/builtin/packages/r-rspectra/package.py @@ -22,6 +22,7 @@ class RRspectra(RPackage): cran = "RSpectra" + version("0.16-2", sha256="a2f149d79519fee79dabe1b174dfb847a916045315d5927a93cc6b005522aa7e") version("0.16-1", sha256="cba5d3403d6a7d0e27abf6279fbfea6e0d0fe36b28c688bbadb8eafb3841329a") version("0.16-0", sha256="aaf1cfc9ffe3a4c6684247899924e1c18306971dfef4bae1dc596a2fb42a64a9") version("0.15-0", sha256="1ad5698201007044a0420cb10b7c48e94312a8a1d22b9d946d5de1c6743969a9") diff --git a/var/spack/repos/builtin/packages/r-rsqlite/package.py b/var/spack/repos/builtin/packages/r-rsqlite/package.py index f81bdf06ac0704..2fe5dcc456480e 100644 --- a/var/spack/repos/builtin/packages/r-rsqlite/package.py +++ b/var/spack/repos/builtin/packages/r-rsqlite/package.py @@ -15,6 +15,7 @@ class RRsqlite(RPackage): cran = "RSQLite" + version("2.3.7", sha256="25e0572589e64264fe4e5d0495f5d85d977bacbb93a3fc631ede5b078db294ce") version("2.3.1", sha256="9ed23e160c401c14e41c40e9930f72697172b2c72933c2d2725a05e81e1f34ca") version("2.2.18", sha256="62196adb62ad8ec73ddce573e5391686e9359566e365b123ac4f299809944bea") version("2.2.14", sha256="2ae36a875ebc02497985b2ad9ddc6a5434f576e2ab25769580749d9e4f3b607c") @@ -30,6 +31,8 @@ class RRsqlite(RPackage): depends_on("r-blob@1.2.0:", type=("build", "run")) depends_on("r-dbi@1.0.0:", type=("build", "run")) depends_on("r-dbi@1.1.0:", type=("build", "run"), when="@2.2.10:") + depends_on("r-dbi@1.2.0:", type=("build", "run"), when="@2.3.5:") + depends_on("r-rlang", type=("build", "run"), when="@2.3.4:") depends_on("r-memoise", type=("build", "run")) depends_on("r-pkgconfig", type=("build", "run")) depends_on("r-plogr@0.2.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-rstan/package.py b/var/spack/repos/builtin/packages/r-rstan/package.py index 00da44c08d40ce..713ff0a2252655 100644 --- a/var/spack/repos/builtin/packages/r-rstan/package.py +++ b/var/spack/repos/builtin/packages/r-rstan/package.py @@ -23,6 +23,7 @@ class RRstan(RPackage): license("GPL-3.0-or-later") + version("2.32.6", sha256="3390d00191bbd3b0739dd19fe437b99a041a6b04be208877b48419d1348a1a70") version("2.21.8", sha256="b2d4edc315419037970c9fa2e8740b934966d88d40548152811f3d4a28475075") version("2.21.7", sha256="4495221310d390925b665c32e05ffabd3ae8857225bda65131a7ed2be41d6d45") version("2.21.5", sha256="86e4fe562d8ddcd0b02336f35a420fa8786dd21de7ca2bebb4ed6e9c252bb9ea") @@ -38,18 +39,29 @@ class RRstan(RPackage): depends_on("r@3.4.0:", type=("build", "run"), when="@2.18.1:") depends_on("r-stanheaders@2.18.1:", type=("build", "run")) depends_on("r-stanheaders@2.21.0:", type=("build", "run"), when="@2.21.2:") + depends_on("r-stanheaders@2.32.0:", type=("build", "run"), when="@2.26.23:") depends_on("r-ggplot2@2.0.0:", type=("build", "run")) depends_on("r-ggplot2@3.0.0:", type=("build", "run"), when="@2.21.2:") + depends_on("r-ggplot2@3.3.5:", type=("build", "run"), when="@2.26.23:") depends_on("r-inline", type=("build", "run")) + depends_on("r-inline@0.3.19:", type=("build", "run"), when="@2.26.23:") depends_on("r-gridextra@2.0.0:", type=("build", "run")) + depends_on("r-gridextra@2.3:", type=("build", "run"), when="@2.26.23:") depends_on("r-rcpp@0.12.0:", type=("build", "run")) + depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@2.26.23:") depends_on("r-rcppparallel@5.0.1:", type=("build", "run"), when="@2.21.2:") + depends_on("r-rcppparallel@5.1.4:", type=("build", "run"), when="@2.26.23:") depends_on("r-loo@2.0.0:", type=("build", "run"), when="@2.18:") depends_on("r-loo@2.3.0:", type=("build", "run"), when="@2.21.2:") + depends_on("r-loo@2.4.1:", type=("build", "run"), when="@2.26.23:") depends_on("r-pkgbuild", type=("build", "run"), when="@2.18:") + depends_on("r-pkgbuild@1.2.0:", type=("build", "run"), when="@2.26.23:") + depends_on("r-quickjsr", type=("build", "run"), when="@2.26.23:") depends_on("r-rcppeigen@0.3.3.3.0:", type=("build", "run")) + depends_on("r-rcppeigen@0.3.4.0.0:", type=("build", "run"), when="@2.26.23:") depends_on("r-bh@1.69.0:", type=("build", "run")) depends_on("r-bh@1.72.0-2:", type=("build", "run"), when="@2.21.2:") + depends_on("r-bh@1.75.0-0:", type=("build", "run"), when="@2.26.23:") depends_on("gmake", type="build") depends_on("pandoc", type="build") diff --git a/var/spack/repos/builtin/packages/r-rstantools/package.py b/var/spack/repos/builtin/packages/r-rstantools/package.py index f2acce430cbe20..ab14cf382e075d 100644 --- a/var/spack/repos/builtin/packages/r-rstantools/package.py +++ b/var/spack/repos/builtin/packages/r-rstantools/package.py @@ -19,6 +19,7 @@ class RRstantools(RPackage): license("GPL-3.0-or-later") + version("2.4.0", sha256="bff72ca2f0352c6c5d2868823e286fdb73a6ead74508a4124cbcb222c83b4faa") version("2.3.1", sha256="82d4f2e884ffc894463bd37765606d5a9bef2ee631758840ec58636acdca6975") version("2.2.0", sha256="cb810baeb90c67668361b666c6862df9917aff6aaec63d2c3a485f28407c4eb7") version("2.1.1", sha256="c95b15de8ec577eeb24bb5206e7b685d882f88b5e6902efda924b7217f463d2d") diff --git a/var/spack/repos/builtin/packages/r-rstudioapi/package.py b/var/spack/repos/builtin/packages/r-rstudioapi/package.py index f581b5dd5c3363..3f56a5135e58e1 100644 --- a/var/spack/repos/builtin/packages/r-rstudioapi/package.py +++ b/var/spack/repos/builtin/packages/r-rstudioapi/package.py @@ -16,6 +16,7 @@ class RRstudioapi(RPackage): license("MIT") + version("0.16.0", sha256="74ffa867199e87a54386fbd26919233371f314f73d7338dd4e4695708fed4fe6") version("0.14", sha256="469d0987b1ad728a96c363a422fba712a5cebc8b11a5f7e953b4a671044dafc4") version("0.13", sha256="aac35bbdcb4a8e8caba943bc8a2b98120e8940b80cd1020224bb1a26ff776d8b") version("0.11", sha256="13e07fb7e2eba8cf1d885db2721901d676d219a1042d7ef5d166125e4905306b") diff --git a/var/spack/repos/builtin/packages/r-rtsne/package.py b/var/spack/repos/builtin/packages/r-rtsne/package.py index 3949660dff7d42..48d9e44a322350 100644 --- a/var/spack/repos/builtin/packages/r-rtsne/package.py +++ b/var/spack/repos/builtin/packages/r-rtsne/package.py @@ -15,6 +15,7 @@ class RRtsne(RPackage): cran = "Rtsne" + version("0.17", sha256="3aae6814d6c6d406785145f07374135652f2b26a58690dfd4bfbc8365dc5590b") version("0.16", sha256="52a05adc826c28212e97d11c54eba3fec45d14eb52039c0f47f62a8e338ffbd5") version("0.15", sha256="56376e4f0a382fad3d3d40e2cb0562224be5265b827622bcd235e8fc63df276c") version("0.13", sha256="1c3bffe3bd11733ee4fe01749c293669daafda1af2ec74f9158f6080625b999d") diff --git a/var/spack/repos/builtin/packages/r-runit/package.py b/var/spack/repos/builtin/packages/r-runit/package.py index 9c88a53ce58972..8de30e09b9e7ec 100644 --- a/var/spack/repos/builtin/packages/r-runit/package.py +++ b/var/spack/repos/builtin/packages/r-runit/package.py @@ -16,6 +16,7 @@ class RRunit(RPackage): license("GPL-2.0-only") + version("0.4.33", sha256="b2a4c5afc7ef9534dac5006f6ef1b2af68630bb73eb74ef70ec7ed53dae6cb5f") version("0.4.32", sha256="23a393059989000734898685d0d5509ece219879713eb09083f7707f167f81f1") depends_on("r@2.5.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-runjags/package.py b/var/spack/repos/builtin/packages/r-runjags/package.py index c9343dbf9f0668..0bb9196c2a5f2b 100644 --- a/var/spack/repos/builtin/packages/r-runjags/package.py +++ b/var/spack/repos/builtin/packages/r-runjags/package.py @@ -24,6 +24,7 @@ class RRunjags(RPackage): license("GPL-2.0-only") + version("2.2.2-4", sha256="6f656e4d0620c0806e596ddb4bfec3934534ec17c02da699fcbfd6720a6f424f") version("2.2.1-7", sha256="e81fdb15e59cdceda125d6ae7cf0cde93361ba80b123d51afd1ecdc993f25016") version("2.2.0-3", sha256="1b1fc0b0cfecf9ecdecc3abcba804cdc114b3c5352d5cc801602deeca90db528") version("2.2.0-2", sha256="e5dfeb83d36faf19ebe64429f6db64aedecf3c9a040fd5bf9c0200914bf5039a") diff --git a/var/spack/repos/builtin/packages/r-rvest/package.py b/var/spack/repos/builtin/packages/r-rvest/package.py index 0e3cb2b544c956..a1104d8d0feb26 100644 --- a/var/spack/repos/builtin/packages/r-rvest/package.py +++ b/var/spack/repos/builtin/packages/r-rvest/package.py @@ -16,6 +16,7 @@ class RRvest(RPackage): license("MIT") + version("1.0.4", sha256="7d707c6b2994cf7b6c1d665bec872d2ef5c55f30e7c343c447a8a386a6049ca6") version("1.0.3", sha256="a465ef7391afaa3c26eebe8c61db02314ac04c4d8de5aa53f090716763d21c1e") version("1.0.2", sha256="89bb477e0944c80298a52ccf650db8f6377fd7ed3c1bc7034d000f695fdf05a4") version("0.3.6", sha256="6a2ee3a25d2d738031edbc1b5e2410f2a4538dfbb9705af145f9039504b902fa") @@ -26,15 +27,19 @@ class RRvest(RPackage): depends_on("r@3.0.1:", type=("build", "run")) depends_on("r@3.1:", type=("build", "run"), when="@0.3.3") depends_on("r@3.2:", type=("build", "run"), when="@0.3.4:") + depends_on("r@3.6:", type=("build", "run"), when="@1.0.4:") depends_on("r-cli", type=("build", "run"), when="@1.0.3:") depends_on("r-glue", type=("build", "run"), when="@1.0.3:") depends_on("r-httr@0.5:", type=("build", "run")) depends_on("r-lifecycle@1.0.0:", type=("build", "run"), when="@1:") + depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@1.0.4:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-rlang@0.4.10:", type=("build", "run"), when="@1:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.0.3:") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.0.4:") depends_on("r-selectr", type=("build", "run")) depends_on("r-tibble", type=("build", "run"), when="@1:") depends_on("r-xml2", type=("build", "run")) depends_on("r-xml2@1.3:", type=("build", "run"), when="@1:") - depends_on("r-withr", type=("build", "run"), when="@1.0.3:") + + depends_on("r-withr", type=("build", "run"), when="@1.0.3") diff --git a/var/spack/repos/builtin/packages/r-rzmq/package.py b/var/spack/repos/builtin/packages/r-rzmq/package.py index 4d32899d5de6a2..5fc9d735d7f169 100644 --- a/var/spack/repos/builtin/packages/r-rzmq/package.py +++ b/var/spack/repos/builtin/packages/r-rzmq/package.py @@ -17,6 +17,7 @@ class RRzmq(RPackage): license("GPL-3.0-only") + version("0.9.13", sha256="8d603543b23a0b78352b4995c90c03d00686fef1d7a25004b66690191fb463f1") version("0.9.8", sha256="815a7eb502b1da3a84246b2dfb6594ca3f241a8675783e6bcdbbf9c952ec1c53") version("0.9.7", sha256="5f47b67b75fd4a230780406f7a55a3708ce8c014cff755a809a6bfa1a6925a45") version("0.9.6", sha256="80a3fc6eb6f7851224c4cd5e219ca4db0286551ad429359d4df853ccb9234316") diff --git a/var/spack/repos/builtin/packages/r-s2/package.py b/var/spack/repos/builtin/packages/r-s2/package.py index bf4d851e0854de..5555d6062d6f21 100644 --- a/var/spack/repos/builtin/packages/r-s2/package.py +++ b/var/spack/repos/builtin/packages/r-s2/package.py @@ -20,6 +20,7 @@ class RS2(RPackage): license("Apache-2.0") + version("1.1.7", sha256="30762c7150dd72e2f4a3d50e64b8b73b2d59b73275687ba3eea7a6e07f786878") version("1.1.2", sha256="8fb237531c6f4aa5b78fbe36d4fd15bfe852c1308fed58b04b3dae2bb73c0b57") version("1.1.0", sha256="e3aae968538fe80db5b3325474dd9d8ff7f0452b6c606d049a3cac72732ac416") version("1.0.7", sha256="2010c1c6ae29938ec9cd153a8b2c06a333ea4d647932369b2fc7d0c68d6d9e3f") diff --git a/var/spack/repos/builtin/packages/r-sandwich/package.py b/var/spack/repos/builtin/packages/r-sandwich/package.py index 808fae8fb70309..a4729a707dbb1a 100644 --- a/var/spack/repos/builtin/packages/r-sandwich/package.py +++ b/var/spack/repos/builtin/packages/r-sandwich/package.py @@ -27,6 +27,7 @@ class RSandwich(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("3.1-0", sha256="96b0e105ee50391a1fd286e9556ba6669f08565fa30788b1a21bc861b0a023fa") version("3.0-2", sha256="6e30b6b554eb19430a60c45a8132fb7918ddb0013577bf6a62caeb163bdfe2b4") version("3.0-1", sha256="f6584b7084f3223bbc0c4722f53280496be73849747819b0cb4e8f3910284a89") version("3.0-0", sha256="828fe53b5e09db5015efd529b2db4dcd40251bce110fea7b0b219fa9ac36d529") diff --git a/var/spack/repos/builtin/packages/r-sass/package.py b/var/spack/repos/builtin/packages/r-sass/package.py index 4ac8e74774c482..e6a3fbd54743a2 100644 --- a/var/spack/repos/builtin/packages/r-sass/package.py +++ b/var/spack/repos/builtin/packages/r-sass/package.py @@ -18,12 +18,14 @@ class RSass(RPackage): license("MIT") + version("0.4.9", sha256="e133049aad7964e0f6150257e1470b3748f36029322265ee797b8caf7517d4d2") version("0.4.5", sha256="eba161d982d2db108c8c0b61ec6b41a20d3adec430c7cc39537ab388c1007a90") version("0.4.2", sha256="b409049d0de9fae853f46c19d353226c8e9244ce847bdada033d8669fc2c9646") version("0.4.1", sha256="850fcb6bd49085d5afd25ac18da0744234385baf1f13d8c0a320f4da2de608bb") version("0.4.0", sha256="7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b") depends_on("r-fs", type=("build", "run")) + depends_on("r-fs@1.2.4:", type=("build", "run"), when="@0.4.7:") depends_on("r-rlang@0.4.10:", type=("build", "run")) depends_on("r-htmltools@0.5.1:", type=("build", "run")) depends_on("r-r6", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-satellite/package.py b/var/spack/repos/builtin/packages/r-satellite/package.py index c5bb5a77ba2f5e..e3ece86c2a4498 100644 --- a/var/spack/repos/builtin/packages/r-satellite/package.py +++ b/var/spack/repos/builtin/packages/r-satellite/package.py @@ -25,6 +25,7 @@ class RSatellite(RPackage): license("MIT") + version("1.0.5", sha256="3e4c382f905eb0b2d84f03423af2960854e5cf94905a373c6ba3f41a2b72a1ad") version("1.0.4", sha256="99e79577a70489930c32da46ac26453af53e21c2d3a99f51fbf1f55f2d80dc7c") version("1.0.2", sha256="6447476bd31216e5abe504221e465677954d07419b4174ab4f4e4f7a197969c5") diff --git a/var/spack/repos/builtin/packages/r-scales/package.py b/var/spack/repos/builtin/packages/r-scales/package.py index 38e64733b39619..02ca38d3bb6f2c 100644 --- a/var/spack/repos/builtin/packages/r-scales/package.py +++ b/var/spack/repos/builtin/packages/r-scales/package.py @@ -28,7 +28,10 @@ class RScales(RPackage): depends_on("r@2.13:", type=("build", "run")) depends_on("r@3.1:", type=("build", "run"), when="@1.0.0:") depends_on("r@3.2:", type=("build", "run"), when="@1.1.1:") + depends_on("r@3.6:", type=("build", "run"), when="@1.3.0:") + depends_on("r-cli", type=("build", "run"), when="@1.3.0:") depends_on("r-farver@2.0.3:", type=("build", "run"), when="@1.1.1:") + depends_on("r-glue", type=("build", "run"), when="@1.3.0:") depends_on("r-labeling", type=("build", "run")) depends_on("r-lifecycle", type=("build", "run"), when="@1.1.1:") depends_on("r-munsell@0.5:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-scattermore/package.py b/var/spack/repos/builtin/packages/r-scattermore/package.py index 84f03f3dcf8f43..10c0964bdd2a68 100644 --- a/var/spack/repos/builtin/packages/r-scattermore/package.py +++ b/var/spack/repos/builtin/packages/r-scattermore/package.py @@ -16,6 +16,7 @@ class RScattermore(RPackage): license("GPL-3.0-or-later") + version("1.2", sha256="5534a87b0bdd1375f0fbffc1a5c980ad64e33a108435a67469b8324b580602d1") version("0.8", sha256="dbdd73d8261cb063464bb29d5c17733b7e87bc50a19948bc80439e19f2a9f8e5") version("0.7", sha256="f36280197b8476314d6ce81a51c4ae737180b180204043d2937bc25bf3a5dfa2") diff --git a/var/spack/repos/builtin/packages/r-scatterpie/package.py b/var/spack/repos/builtin/packages/r-scatterpie/package.py index 6fdd0ba32c9a13..106a5a1eced932 100644 --- a/var/spack/repos/builtin/packages/r-scatterpie/package.py +++ b/var/spack/repos/builtin/packages/r-scatterpie/package.py @@ -15,12 +15,14 @@ class RScatterpie(RPackage): license("Artistic-2.0") + version("0.2.3", sha256="704f1072ff934729aefdd659e5c81e62b59f5ae94dc36a1e1f52085dce896447") version("0.1.9", sha256="517fd6cc297aa33f0fbb2643e35ca41dc971166ea2e8ed78460bd4ef7a77a687") version("0.1.8", sha256="a6ccc63a8be63fa113704cf5d4893c1ec1b75d3081ab971bd70e650e708872a0") version("0.1.7", sha256="3f7807519cfe135066ca79c8d8a09b59da9aa6d8aaee5e9aff40cca3d0bebade") version("0.1.5", sha256="e13237b7effc302acafc1c9b520b4904e55875f4a3b804f653eed2940ca08840") depends_on("r@3.4.0:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@0.2.0:") depends_on("r-ggplot2", type=("build", "run")) depends_on("r-ggforce", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-scatterplot3d/package.py b/var/spack/repos/builtin/packages/r-scatterplot3d/package.py index f9f96803ee60b3..a7de5b624cf226 100644 --- a/var/spack/repos/builtin/packages/r-scatterplot3d/package.py +++ b/var/spack/repos/builtin/packages/r-scatterplot3d/package.py @@ -15,6 +15,7 @@ class RScatterplot3d(RPackage): license("GPL-2.0-only") + version("0.3-44", sha256="1c9c08348c3ed925f59df40cb73accc9e1a169ccfb1e8571f105f40fa98e6ec2") version("0.3-43", sha256="90d7bfb535b76008768306ea9209adfb48e0e07f36eabbb59ab6ddb6522f16a5") version("0.3-42", sha256="a9fedde70e1a846c4dcafbff20f115425206d507896d12c2b21ff052556c5216") version("0.3-41", sha256="4c8326b70a3b2d37126ca806771d71e5e9fe1201cfbe5b0d5a0a83c3d2c75d94") diff --git a/var/spack/repos/builtin/packages/r-sctransform/package.py b/var/spack/repos/builtin/packages/r-sctransform/package.py index 345c4d9a2aa82d..5444c52fc84bf4 100644 --- a/var/spack/repos/builtin/packages/r-sctransform/package.py +++ b/var/spack/repos/builtin/packages/r-sctransform/package.py @@ -20,6 +20,7 @@ class RSctransform(RPackage): license("GPL-3.0-only OR custom") + version("0.4.1", sha256="5f6be7f8be543e4c32c8007207b603a750881459370b7bb5afd63e8c8fabf171") version("0.3.5", sha256="c08e56df05d64ed04ee53eb9e1d4d321da8aff945e36d56db1d5ceb1cd7e6e0b") version("0.3.3", sha256="83af125c40f211e1ddae5098f88766aea1453c02ae98486081f3efadb3620b2b") version("0.3.2", sha256="5dbb0a045e514c19f51bbe11c2dba0b72dca1942d6eb044c36b0538b443475dc") @@ -28,6 +29,7 @@ class RSctransform(RPackage): depends_on("r@3.0.2:", type=("build", "run")) depends_on("r@3.1.0:", type=("build", "run"), when="@0.3.2:") depends_on("r@3.5.0:", type=("build", "run"), when="@0.3.3:") + depends_on("r@3.6.0:", type=("build", "run"), when="@0.4.0:") depends_on("r-dplyr", type=("build", "run"), when="@0.3.3:") depends_on("r-magrittr", type=("build", "run"), when="@0.3.3:") depends_on("r-mass", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-segmented/package.py b/var/spack/repos/builtin/packages/r-segmented/package.py index 71a2c7cf9910ad..b546891122c302 100644 --- a/var/spack/repos/builtin/packages/r-segmented/package.py +++ b/var/spack/repos/builtin/packages/r-segmented/package.py @@ -22,6 +22,7 @@ class RSegmented(RPackage): license("GPL-2.0-or-later") + version("2.1-1", sha256="6723b0114b1142a7587f712d7a58ce0bebfb53864b84fa1e5d9d7824b17903dd") version("1.6-4", sha256="472c08ae3eb1c4e784aba45f3e745b0e946bef77c26fbb9f103fd35e1a349191") version("1.6-1", sha256="f609ca311c8ca45a7b0776b47d9df06aa175c4f17f8e7e9b33c64902ee00d56f") version("1.6-0", sha256="6baf7f0a4f5d37b945312d28fcbca47cc3c171d097c43a28cf7ffc998a4ce569") @@ -33,5 +34,6 @@ class RSegmented(RPackage): version("0.5-2.2", sha256="3aa7136370dd77911ba8e061b5215560d120bc71f355eeadc0856389dfecb2f1") version("0.5-1.4", sha256="b1dc5f79ccc076c2943b15fe4f339368afa241797b7e80c91b62132cfa66809c") + depends_on("r@3.5.0:", type=("build", "run"), when="@2.0-3:") depends_on("r-mass", type=("build", "run"), when="@1.4-0:") depends_on("r-nlme", type=("build", "run"), when="@1.6-0:") diff --git a/var/spack/repos/builtin/packages/r-seqinr/package.py b/var/spack/repos/builtin/packages/r-seqinr/package.py index dd12e8fa2aac44..7bf921e774099e 100644 --- a/var/spack/repos/builtin/packages/r-seqinr/package.py +++ b/var/spack/repos/builtin/packages/r-seqinr/package.py @@ -18,6 +18,7 @@ class RSeqinr(RPackage): license("GPL-2.0-or-later") + version("4.2-36", sha256="931a62a091a7aaaa5efadb1fe85f29e861e2506b75710ba3a6be9b58cb14b225") version("4.2-30", sha256="faf8fe533867eeef57fddfa6592e19d5984954d0670c6c7dbeab6411d55fee4b") version("4.2-16", sha256="c4f3253832fc255197bdce7b4dd381db606c6b787d2e888751b4963acf3a4032") version("4.2-8", sha256="584b34e9dec0320cef02096eb356a0f6115bbd24356cf62e67356963e9d5e9f7") diff --git a/var/spack/repos/builtin/packages/r-servr/package.py b/var/spack/repos/builtin/packages/r-servr/package.py index 9766f0b22b2441..cf8467a1a0f6af 100644 --- a/var/spack/repos/builtin/packages/r-servr/package.py +++ b/var/spack/repos/builtin/packages/r-servr/package.py @@ -17,6 +17,7 @@ class RServr(RPackage): license("GPL-2.0-or-later") + version("0.30", sha256="43f920161408871a042462b7c3353149a608941253541a19a9ce3408f9882d40") version("0.26", sha256="7588d7e00d5b2f77b0737f164f3d7b0ba7b1e8b60c0372a1d6452096e2d2031c") version("0.25", sha256="e6ae0d4c09e9037268b1c291c36c93ba0a74c31fe2fcb1f0652b2ae9fca5e73c") version("0.24", sha256="d94e1d31802ce6bbab7a5838ff94cbca8cd998237d834ff25fedf7514f41a087") @@ -26,4 +27,5 @@ class RServr(RPackage): depends_on("r-mime@0.2:", type=("build", "run")) depends_on("r-httpuv@1.5.2:", type=("build", "run")) depends_on("r-xfun", type=("build", "run")) + depends_on("r-xfun@0.42:", type=("build", "run"), when="@0.29:") depends_on("r-jsonlite", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-sets/package.py b/var/spack/repos/builtin/packages/r-sets/package.py index 308610786d0004..77484ffb9274e1 100644 --- a/var/spack/repos/builtin/packages/r-sets/package.py +++ b/var/spack/repos/builtin/packages/r-sets/package.py @@ -19,6 +19,7 @@ class RSets(RPackage): license("GPL-2.0-only") + version("1.0-25", sha256="5ca469218f9679f2372e33e56f781b52947ccbedf730b91a2d3a572993c024f4") version("1.0-24", sha256="e75733f5c9418eb09fb950a4a94ccf84ddd88231c61ee80d02b7f0917debcac9") version("1.0-23", sha256="e5b6bc52060421c572d7f2d99b25909a38eacabd5344a47e1cdb2662c62d690b") version("1.0-22", sha256="6fbf9aa6b0113a58e04f803ab35593feabb0fb55d486d54afb59e027008f9ec6") @@ -53,4 +54,4 @@ class RSets(RPackage): version("0.1", sha256="18dda6c9d526a2f41f2b49a472fb27a7f1bb9ce6ea137b8963e8ad6c378825d0") depends_on("r@2.6:", type=("build", "run"), when="@0.1:") - depends_on("r@2.7:", type=("build", "run"), when="@0.1-2:") + depends_on("r@2.7.0:", type=("build", "run"), when="@0.1-2:") diff --git a/var/spack/repos/builtin/packages/r-seurat/package.py b/var/spack/repos/builtin/packages/r-seurat/package.py index f8483751fccf5c..0af2d89f458776 100644 --- a/var/spack/repos/builtin/packages/r-seurat/package.py +++ b/var/spack/repos/builtin/packages/r-seurat/package.py @@ -19,6 +19,7 @@ class RSeurat(RPackage): cran = "Seurat" + version("5.1.0", sha256="adcfb43d7a8cc55eaa7a0954a082ac95e14059a82901913379bfec115e224d59") version("4.3.0", sha256="7ebacb3b86f74279de60b597f9a6e728f0668719811b0dca3425d21762fff97c") version("4.2.1", sha256="410238b6ca147451b43800a6e49c132fa5f6aacfe6b93b39a1e4d61257a9e35e") version("4.2.0", sha256="22a3d22a9ba255c4db5b37339b183fdfb91e2d37a8b8d58a9ff45b1bc414ebef") @@ -37,9 +38,11 @@ class RSeurat(RPackage): depends_on("r@4.0.0:", type=("build", "run"), when="@4.1.0:") depends_on("r-cluster", type=("build", "run"), when="@2.3.0:") depends_on("r-cowplot", type=("build", "run")) + depends_on("r-fastdummies", type=("build", "run"), when="@5.0.0:") depends_on("r-fitdistrplus", type=("build", "run"), when="@2.3.0:") depends_on("r-future", type=("build", "run"), when="@3.0.0:") depends_on("r-future-apply", type=("build", "run"), when="@3.0.0:") + depends_on("r-generics@0.1.3:", type=("build", "run"), when="@5.0.0:") depends_on("r-ggplot2@3.0.0:", type=("build", "run")) depends_on("r-ggplot2@3.3.0:", type=("build", "run"), when="@3.2.3:") depends_on("r-ggrepel", type=("build", "run"), when="@3.0.0:") @@ -51,6 +54,7 @@ class RSeurat(RPackage): depends_on("r-jsonlite", type=("build", "run"), when="@3.2.3:") depends_on("r-kernsmooth", type=("build", "run"), when="@3.0.0:") depends_on("r-leiden@0.3.1:", type=("build", "run"), when="@3.1.0:") + depends_on("r-lifecycle", type=("build", "run"), when="@5.0.0:") depends_on("r-lmtest", type=("build", "run"), when="@2.3.0:") depends_on("r-mass", type=("build", "run")) depends_on("r-matrix@1.2-14:", type=("build", "run")) @@ -63,27 +67,34 @@ class RSeurat(RPackage): depends_on("r-plotly@4.9.0:", type=("build", "run"), when="@3.2.3:") depends_on("r-png", type=("build", "run"), when="@2.3.0:") depends_on("r-progressr", type=("build", "run"), when="@4.3.0:") + depends_on("r-purrr", type=("build", "run"), when="@4.4.0:") depends_on("r-rann", type=("build", "run"), when="@2.3.0:") depends_on("r-rcolorbrewer", type=("build", "run")) depends_on("r-rcpp@0.11.0:", type=("build", "run")) depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@4.1.0:") depends_on("r-rcppannoy", type=("build", "run"), when="@3.1.0:") depends_on("r-rcppannoy@0.0.18:", type=("build", "run"), when="@4.1.0:") + depends_on("r-rcpphnsw", type=("build", "run"), when="@5.0.0:") depends_on("r-reticulate", type=("build", "run"), when="@2.3.1:") depends_on("r-rlang", type=("build", "run"), when="@3.0.0:") depends_on("r-rocr", type=("build", "run")) + depends_on("r-rspectra", type=("build", "run"), when="@5.0.0:") depends_on("r-rtsne", type=("build", "run")) depends_on("r-scales", type=("build", "run"), when="@3.0.0:") depends_on("r-scattermore@0.7:", type=("build", "run"), when="@3.2.3:") + depends_on("r-scattermore@1.2:", type=("build", "run"), when="@4.4.0:") depends_on("r-sctransform@0.2.0:", type=("build", "run"), when="@3.0.0:") depends_on("r-sctransform@0.3.1:", type=("build", "run"), when="@3.2.3:") depends_on("r-sctransform@0.3.3:", type=("build", "run"), when="@4.1.0:") depends_on("r-sctransform@0.3.4:", type=("build", "run"), when="@4.2.0:") depends_on("r-sctransform@0.3.5:", type=("build", "run"), when="@4.2.1:") + depends_on("r-sctransform@0.4.0:", type=("build", "run"), when="@4.4.0:") + depends_on("r-sctransform@0.4.1:", type=("build", "run"), when="@5.0.0:") depends_on("r-seuratobject@4.0.4:", type=("build", "run"), when="@4.1.0:") depends_on("r-seuratobject@4.1.0:", type=("build", "run"), when="@4.1.1:") depends_on("r-seuratobject@4.1.2:", type=("build", "run"), when="@4.2.0:") depends_on("r-seuratobject@4.1.3:", type=("build", "run"), when="@4.2.1:") + depends_on("r-seuratobject@5.0.2:", type=("build", "run"), when="@5.0.0:") depends_on("r-shiny", type=("build", "run"), when="@3.2.3:") depends_on("r-spatstat-explore", type=("build", "run"), when="@4.2.1:") depends_on("r-spatstat-geom", type=("build", "run"), when="@4.1.0:") diff --git a/var/spack/repos/builtin/packages/r-seuratobject/package.py b/var/spack/repos/builtin/packages/r-seuratobject/package.py index 74d32ae36f8f4c..8240e6ccaaa7c1 100644 --- a/var/spack/repos/builtin/packages/r-seuratobject/package.py +++ b/var/spack/repos/builtin/packages/r-seuratobject/package.py @@ -20,20 +20,26 @@ class RSeuratobject(RPackage): cran = "SeuratObject" + version("5.0.2", sha256="ded30d21f445b7e353fe4a0c4954d45ad19fbe162615d9addf6732f9318ba0cf") version("4.1.3", sha256="585d2754f6165a367f0f458523f0a25d4d4160c929c931b27c5603cc6bd986d3") version("4.1.2", sha256="6a5945f501b573dbe44a15e7d969e63fd5be0c4f8e9d716b71ca29f695236d0d") version("4.1.0", sha256="9ca406cb3bd95c588e1a81c5383e3173a446cc0667142b139ca32685b4b20a05") version("4.0.4", sha256="585261b7d2045193accf817a29e2e3356e731f57c554bed37d232fa49784088c") depends_on("r@4.0.0:", type=("build", "run")) + depends_on("r@4.1.0:", when="@5.0.2:", type=("build", "run")) depends_on("r-future", type=("build", "run"), when="@4.1.0:") depends_on("r-future-apply", type=("build", "run"), when="@4.1.0:") + depends_on("r-generics", when="@5:", type=("build", "run")) + depends_on("r-lifecycle", when="@5:", type=("build", "run")) depends_on("r-matrix@1.3-3:", type=("build", "run")) depends_on("r-matrix@1.5-0:", type=("build", "run"), when="@4.1.2:") + depends_on("r-matrix@1.6-4:", when="@5.0.2:", type=("build", "run")) depends_on("r-progressr", type=("build", "run"), when="@4.1.0:") depends_on("r-rcpp@1.0.5:", type=("build", "run")) depends_on("r-sp", type=("build", "run"), when="@4.1.0:") depends_on("r-sp@1.5-0:", type=("build", "run"), when="@4.1.2:") + depends_on("r-spam", when="@5:", type=("build", "run")) depends_on("r-rlang@0.4.7:", type=("build", "run")) depends_on("r-rcppeigen", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-sf/package.py b/var/spack/repos/builtin/packages/r-sf/package.py index 8a98b2c2d69232..d122e494ef8ea4 100644 --- a/var/spack/repos/builtin/packages/r-sf/package.py +++ b/var/spack/repos/builtin/packages/r-sf/package.py @@ -19,6 +19,7 @@ class RSf(RPackage): license("GPL-2.0-only OR MIT") + version("1.0-16", sha256="e96e191011cdf2a073c773bdfc50ffd4a5d80f1da0ba1aa05db8015da45a9987") version("1.0-12", sha256="3778ebf58d824b1dfa6297ca8363714d5d85eda04c55ab2bf39597cac1d91287") version("1.0-9", sha256="85c0c71a0a64750281e79aa96e36d13e6285927008b2d37d699e52aba7d8013b") version("1.0-8", sha256="3ddc7090e79d6b5e3fad69e01254677ab5ec86a0b25e7e73493c8eac0ea98732") diff --git a/var/spack/repos/builtin/packages/r-sfheaders/package.py b/var/spack/repos/builtin/packages/r-sfheaders/package.py index 46d0172e3fbb24..12300042f5f804 100644 --- a/var/spack/repos/builtin/packages/r-sfheaders/package.py +++ b/var/spack/repos/builtin/packages/r-sfheaders/package.py @@ -17,11 +17,13 @@ class RSfheaders(RPackage): license("MIT") + version("0.4.4", sha256="f65ffe67b1d07beb6904b8960c66be684f5526b4d6450ab46c630c77e9b9bd07") version("0.4.2", sha256="ed9fb934c537fb6f126886f8e5997727de856e32fc3d38911b61a3a83faa7b2c") version("0.4.0", sha256="86bcd61018a0491fc8a1e7fb0422c918296287b82be299a79ccee8fcb515e045") depends_on("r-geometries@0.2.0:", type=("build", "run")) depends_on("r-geometries@0.2.2:", type=("build", "run"), when="@0.4.2:") + depends_on("r-geometries@0.2.4:", type=("build", "run"), when="@0.4.4:") depends_on("r-rcpp", type=("build", "run")) depends_on("r-rcpp@1.0.10:", type=("build", "run"), when="@0.4.2:") depends_on("r@3.0.2:", type=("build", "run"), when="@0.4.2:") diff --git a/var/spack/repos/builtin/packages/r-sfsmisc/package.py b/var/spack/repos/builtin/packages/r-sfsmisc/package.py index e024fa2f8be048..6c128a2ad1a8ec 100644 --- a/var/spack/repos/builtin/packages/r-sfsmisc/package.py +++ b/var/spack/repos/builtin/packages/r-sfsmisc/package.py @@ -23,6 +23,7 @@ class RSfsmisc(RPackage): license("GPL-2.0-or-later") + version("1.1-19", sha256="869931dd35d2e18cf2f960b86da2638b7a03c92288c6d7a736a10fa5585cf23b") version("1.1-15", sha256="4afa42cf83a287f62cac21741fc0559dee9dbd69dee59a740defce9a0e7c81e6") version("1.1-13", sha256="a81710357de2dcdaf00d9fa30a29cde0dd83616edc358452fd6105ea88f34218") version("1.1-12", sha256="9b12184a28fff87cacd0c3602d0cf63acb4d0f3049ad3a6ff16177f6df350782") diff --git a/var/spack/repos/builtin/packages/r-shadowtext/package.py b/var/spack/repos/builtin/packages/r-shadowtext/package.py index f7f9eefa0a5bfc..7d5a0ba9979ff0 100644 --- a/var/spack/repos/builtin/packages/r-shadowtext/package.py +++ b/var/spack/repos/builtin/packages/r-shadowtext/package.py @@ -16,6 +16,7 @@ class RShadowtext(RPackage): license("Artistic-2.0") + version("0.1.4", sha256="87d0bea90e0090dd40f7cd8c380d185a9d4112a32a729d31859eaeca0cd46ee8") version("0.1.2", sha256="253c4e737dbb302aa0729e5074e84cbfde2a73bfd7a0fd2c74b557cb728bae7d") version("0.1.1", sha256="eb06581d7ed06c963eee47548932688fd48eba70b3ebd2a7b41a6501d6e00006") version("0.0.7", sha256="6e32b1dfd3d4816803848b876666185258b888286ec3d3e8500499ec3eba31e8") diff --git a/var/spack/repos/builtin/packages/r-shape/package.py b/var/spack/repos/builtin/packages/r-shape/package.py index 338cebd9601a7f..cb9f17c6b992e7 100644 --- a/var/spack/repos/builtin/packages/r-shape/package.py +++ b/var/spack/repos/builtin/packages/r-shape/package.py @@ -16,10 +16,11 @@ class RShape(RPackage): license("GPL-3.0-or-later") + version("1.4.6.1", sha256="43f9bd0f997fd6cf1838efd8b2509c9a6396513f4e54a20360481634affd22a4") version("1.4.6", sha256="b9103e5ed05c223c8147dbe3b87a0d73184697343634a353a2ae722f7ace0b7b") version("1.4.5", sha256="094a79b8f42226189227fd7af71868e42106caa25a4d7f80a26977e8bc84189f") version("1.4.4", sha256="f4cb1b7d7c84cf08d2fa97f712ea7eb53ed5fa16e5c7293b820bceabea984d41") version("1.4.3", sha256="720f6ca9c70a39a3900af9d074bff864b18ac58013b21d48b779047481b93ded") version("1.4.2", sha256="c6c08ba9cc2e90e5c9d3d5223529b57061a041f637886ad7665b9fa27465637a") - depends_on("r@2.0.1:", type=("build", "run")) + depends_on("r@2.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-shiny/package.py b/var/spack/repos/builtin/packages/r-shiny/package.py index 91acdf5b46587f..1cc0eb3e3dab59 100644 --- a/var/spack/repos/builtin/packages/r-shiny/package.py +++ b/var/spack/repos/builtin/packages/r-shiny/package.py @@ -18,6 +18,7 @@ class RShiny(RPackage): license("GPL-3.0-only OR custom") + version("1.9.1", sha256="854b6a214f127d652de2e0e02d675fd53209b058c11911f56f8d41382ba654e3") version("1.8.1.1", sha256="a38d5fb5d750e2c2091ce9101f138c1f9bc7009bbb195227a3519c5d97e36753") version("1.7.4", sha256="bbfcdd7375013b8f59248b3f3f4e752acd445feb25179f3f7f65cd69614da4b5") version("1.7.3", sha256="b8ca9a39fa69ea9b270a7e9037198d95122c79bd493b865d909d343dd3523ada") @@ -57,7 +58,9 @@ class RShiny(RPackage): depends_on("r-commonmark@1.7:", type=("build", "run"), when="@1.5.0:") depends_on("r-glue@1.3.2:", type=("build", "run"), when="@1.5.0:") depends_on("r-bslib@0.3.0:", type=("build", "run"), when="@1.7.1:") + depends_on("r-bslib@0.6.0:", type=("build", "run"), when="@1.9.0:") depends_on("r-cachem", type=("build", "run"), when="@1.7.1:") + depends_on("r-cachem@1.1.0:", type=("build", "run"), when="@1.9.0:") depends_on("r-lifecycle@0.2.0:", type=("build", "run"), when="@1.7.1:") depends_on("r-digest", type=("build", "run"), when="@:1.5.0") diff --git a/var/spack/repos/builtin/packages/r-signac/package.py b/var/spack/repos/builtin/packages/r-signac/package.py index 0188ca933440a3..26001125b652f9 100644 --- a/var/spack/repos/builtin/packages/r-signac/package.py +++ b/var/spack/repos/builtin/packages/r-signac/package.py @@ -18,11 +18,13 @@ class RSignac(RPackage): cran = "Signac" + version("1.14.0", sha256="e0aad9e2c27c148fdd376081c2de1e3db46b1835eac83ef41fe562e08363c59e") version("1.9.0", sha256="b8ff36427e5919fd420daa1f50cf8c71935293ee7f88560041acb993b5e3afa8") version("1.8.0", sha256="9c4b123f4d077111c7e6dd1659483ada984300c8e923672ca924e46fb6a1dd06") version("1.7.0", sha256="5e4456eeab29fa2df7f6236b050dec8cb9c073d7652a89ee5030a27f94e5e4bf") depends_on("r@4.0.0:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@1.14.0:") depends_on("r-genomeinfodb@1.29.3:", type=("build", "run")) depends_on("r-genomicranges", type=("build", "run")) depends_on("r-iranges", type=("build", "run")) @@ -30,11 +32,13 @@ class RSignac(RPackage): depends_on("r-rsamtools", type=("build", "run")) depends_on("r-s4vectors", type=("build", "run")) depends_on("r-seuratobject@4.0.0:", type=("build", "run")) + depends_on("r-seuratobject@5.0.2:", type=("build", "run"), when="@1.14.0:") depends_on("r-data-table", type=("build", "run")) depends_on("r-dplyr@1.0.0:", type=("build", "run")) depends_on("r-future", type=("build", "run")) depends_on("r-future-apply", type=("build", "run")) depends_on("r-ggplot2", type=("build", "run")) + depends_on("r-rlang", type=("build", "run"), when="@1.10.0:") depends_on("r-irlba", type=("build", "run")) depends_on("r-pbapply", type=("build", "run")) depends_on("r-tidyr", type=("build", "run")) @@ -47,4 +51,5 @@ class RSignac(RPackage): depends_on("r-rcpp", type=("build", "run")) depends_on("r-tidyselect", type=("build", "run")) depends_on("r-vctrs", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@1.12.0:") depends_on("zlib-api") diff --git a/var/spack/repos/builtin/packages/r-sm/package.py b/var/spack/repos/builtin/packages/r-sm/package.py index 60879f612c79d4..c52d11a2db3a33 100644 --- a/var/spack/repos/builtin/packages/r-sm/package.py +++ b/var/spack/repos/builtin/packages/r-sm/package.py @@ -17,6 +17,7 @@ class RSm(RPackage): license("GPL-2.0-or-later") + version("2.2-6.0", sha256="27a6e3291a572c3d30f25982902ccde5299230061e5dc1a38fb52aaac2561d61") version("2.2-5.7.1", sha256="ea0cc32eb14f6c18beba0bede66ed37bc5341bd3f76c1a7ae56d7254693e1457") version("2.2-5.7", sha256="2607a2cafc68d7e99005daf99e36f4a66eaf569ebb6b7500e962642cf58be80f") version("2.2-5.6", sha256="b890cd7ebe8ed711ab4a3792c204c4ecbe9e6ca1fd5bbc3925eba5833a839c30") diff --git a/var/spack/repos/builtin/packages/r-snakecase/package.py b/var/spack/repos/builtin/packages/r-snakecase/package.py index fc895fbf5b0d25..4d06c77185d5c4 100644 --- a/var/spack/repos/builtin/packages/r-snakecase/package.py +++ b/var/spack/repos/builtin/packages/r-snakecase/package.py @@ -16,6 +16,7 @@ class RSnakecase(RPackage): license("GPL-3.0-only") + version("0.11.1", sha256="2a5f9791337ca42e392f23fb873eb44f74810583e9aa7c62fda2f28f9e750821") version("0.11.0", sha256="998420a58391ac85785e60bcdf6fd6927c82758ad2859a9a73a0e57299e8c1cf") depends_on("r@3.2:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-snowfall/package.py b/var/spack/repos/builtin/packages/r-snowfall/package.py index 0f5473d70d8d88..fb3b1b77c63138 100644 --- a/var/spack/repos/builtin/packages/r-snowfall/package.py +++ b/var/spack/repos/builtin/packages/r-snowfall/package.py @@ -19,6 +19,7 @@ class RSnowfall(RPackage): license("GPL-2.0-or-later") + version("1.84-6.3", sha256="2641932b01041e34b7afb1261f649755b4c8d6560080e0e2ee549ffdf3b8b143") version("1.84-6.2", sha256="9b467ab2b992455c6e1aeabe375c5694761fa1cf8aaf4f003ca47102b656353b") version("1.84-6.1", sha256="5c446df3a931e522a8b138cf1fb7ca5815cc82fcf486dbac964dcbc0690e248d") diff --git a/var/spack/repos/builtin/packages/r-sp/package.py b/var/spack/repos/builtin/packages/r-sp/package.py index b0c228fd6dc977..54483d6c2afb67 100644 --- a/var/spack/repos/builtin/packages/r-sp/package.py +++ b/var/spack/repos/builtin/packages/r-sp/package.py @@ -18,6 +18,7 @@ class RSp(RPackage): license("GPL-2.0-or-later") + version("2.1-4", sha256="e185e7fb61d2d7dbc50fd765a93e170fa778083a653588db1f5e99d019479f0a") version("1.6-0", sha256="f5977fbe80e7dee8e95d41fe0ef9d87c2c984422bb529ea5211fd38a13f9fcda") version("1.5-1", sha256="69b9eab481d389bbb736d2adcf50c180aca248c3ffc4ebda8ffe2accc5f229df") version("1.5-0", sha256="939a06adf78ec8de7a663d6ca5bba426780852b357773446b00cc298200ff81c") @@ -29,4 +30,6 @@ class RSp(RPackage): version("1.2-3", sha256="58b3a9e395ca664ee61b20b480be4eb61576daca44c3d3f6f9a943bb0155879a") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.2.0:", type=("build", "run"), when="@2.0-0:") + depends_on("r@3.5.0:", type=("build", "run"), when="@2.1-0:") depends_on("r-lattice", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spacetime/package.py b/var/spack/repos/builtin/packages/r-spacetime/package.py index e3c0310fcbff62..65dc4624032460 100644 --- a/var/spack/repos/builtin/packages/r-spacetime/package.py +++ b/var/spack/repos/builtin/packages/r-spacetime/package.py @@ -20,6 +20,7 @@ class RSpacetime(RPackage): license("GPL-2.0-or-later") + version("1.3-1", sha256="1942a51949e82d19a652fc09e61d738f8eca6ed992783cc1d0164313d71521cf") version("1.3-0", sha256="2e9902a5c6f355f0b8e23237cf3b1553f22d7d79493bdbdb99e49104b9ef541b") version("1.2-8", sha256="4297a027ab4cff32e41cec65aa7d92af66c7a885fd2322b010b0af9a14f24c59") version("1.2-6", sha256="8fd46606ed9589ffce19368d40004890f96e8fe77f13b546e6a2f8b9ced0dd81") diff --git a/var/spack/repos/builtin/packages/r-spades-core/package.py b/var/spack/repos/builtin/packages/r-spades-core/package.py index 4aacc1dd26cb16..d6b2158fa3dcf3 100644 --- a/var/spack/repos/builtin/packages/r-spades-core/package.py +++ b/var/spack/repos/builtin/packages/r-spades-core/package.py @@ -23,6 +23,7 @@ class RSpadesCore(RPackage): maintainers("dorton21") + version("2.1.0", sha256="aee1a3093dfe04210719a7ced12d522299845bbd794f7eb78308f3a5b613762b") version("1.1.0", sha256="67af4f3f153b75a0865fde2457c5d951c2f2184d07c557879b7a8c43a6e7ad66") version("1.0.10", sha256="05e20f7d9aeef9ba68e50e993ef3027b8c85afc5e3f83f5ecaee9d1a7873e379") version("1.0.9", sha256="1176a41a1af334388c1b16ff4ed9a6f30007bb5ed1fa14d798c59461042537dd") @@ -30,17 +31,26 @@ class RSpadesCore(RPackage): depends_on("r@3.6:", type=("build", "run")) depends_on("r@4.0:", type=("build", "run"), when="@1.0.10:") + depends_on("r@4.1:", type=("build", "run"), when="@2.0.2:") + depends_on("r@4.2:", type=("build", "run"), when="@2.0.4:") depends_on("r-quickplot@0.1.4:", type=("build", "run")) depends_on("r-reproducible@1.2.1.9007:", type=("build", "run")) depends_on("r-reproducible@1.2.7:", type=("build", "run"), when="@1.0.9:") depends_on("r-reproducible@1.2.9:", type=("build", "run"), when="@1.1.0:") - depends_on("r-crayon", type=("build", "run")) + depends_on("r-reproducible@2.1.0:", type=("build", "run"), when="@2.1.0:") + depends_on("r-cli", type=("build", "run"), when="@2.1.0:") depends_on("r-data-table@1.10.4:", type=("build", "run")) depends_on("r-data-table@1.11.0:", type=("build", "run"), when="@1.0.9:") - depends_on("r-fastdigest", type=("build", "run")) + depends_on("r-fs", type=("build", "run"), when="@2.0.3:") depends_on("r-igraph@1.0.1:", type=("build", "run")) depends_on("r-lobstr", type=("build", "run"), when="@1.1.0:") + depends_on("r-quickplot@1.0.2:", type=("build", "run"), when="@2.1.0:") depends_on("r-qs@0.21.1:", type=("build", "run")) - depends_on("r-raster@2.5-8:", type=("build", "run")) depends_on("r-require@0.0.7:", type=("build", "run")) + depends_on("r-require@0.3.1:", type=("build", "run"), when="@2.0.2:") + depends_on("r-terra@1.7-46:", type=("build", "run"), when="@2.0.3:") depends_on("r-whisker", type=("build", "run")) + + depends_on("r-crayon", type=("build", "run"), when="@:2.0.5") + depends_on("r-fastdigest", type=("build", "run"), when="@:1.1.0") + depends_on("r-raster@2.5-8:", type=("build", "run"), when="@:1.1.0") diff --git a/var/spack/repos/builtin/packages/r-spades-tools/package.py b/var/spack/repos/builtin/packages/r-spades-tools/package.py index 809ad5f86d3453..a5427ce5a65e52 100644 --- a/var/spack/repos/builtin/packages/r-spades-tools/package.py +++ b/var/spack/repos/builtin/packages/r-spades-tools/package.py @@ -19,6 +19,7 @@ class RSpadesTools(RPackage): maintainers("dorton21") + version("2.0.7", sha256="f1c62cc76ff75119ae54e35be81d5819a282c547f77292e4f392599465e7b2cf") version("1.0.1", sha256="6b0d69c8737ff06e2cf312ff94b298b81f4c50af2efd498a124b99ed66a2be9a") version("1.0.0", sha256="1172b96ada7052fcaa3a113ed31eeb1b67dba70f40fa74cbb378c6e75e9235dc") version("0.3.10", sha256="ba4c075b534caaca413e2e97711b5475c2679d9546c8fee4a07fb2bb94d52c94") @@ -28,19 +29,24 @@ class RSpadesTools(RPackage): depends_on("r@3.5.0:", type=("build", "run")) depends_on("r@3.6:", type=("build", "run"), when="@0.3.9:") depends_on("r@4.0:", type=("build", "run"), when="@0.3.10:") + depends_on("r@4.2:", type=("build", "run"), when="@2.0.6:") depends_on("r-backports", type=("build", "run")) depends_on("r-checkmate@1.8.2:", type=("build", "run")) - depends_on("r-circstats@0.2-4:", type=("build", "run")) depends_on("r-data-table@1.10.4:", type=("build", "run")) - depends_on("r-fastmatch@1.1-0:", type=("build", "run")) depends_on("r-fpcompare@0.2.1:", type=("build", "run")) - depends_on("r-magrittr", type=("build", "run")) - depends_on("r-quickplot", type=("build", "run")) - depends_on("r-raster@2.5-8:", type=("build", "run")) depends_on("r-rcpp@0.12.12:", type=("build", "run")) - depends_on("r-require", type=("build", "run"), when="@0.3.10:") - depends_on("r-rgeos", type=("build", "run")) - depends_on("r-sp@1.2-4:", type=("build", "run")) - + depends_on("r-reproducible@2.0.2:", type=("build", "run"), when="@2.0.0:") + depends_on("r-reproducible@2.0.5:", type=("build", "run"), when="@2.0.1:") + depends_on("r-reproducible@2.0.9:", type=("build", "run"), when="@2.0.5:") + depends_on("r-terra", type=("build", "run"), when="@2.0.0:") + + depends_on("r-circstats@0.2-4:", type=("build", "run"), when="@:1.0.1") + depends_on("r-fastmatch@1.1-0:", type=("build", "run"), when="@:1.0.1") + depends_on("r-magrittr", type=("build", "run"), when="@:1.0.1") + depends_on("r-quickplot", type=("build", "run"), when="@:1.0.1") + depends_on("r-raster@2.5-8:", type=("build", "run"), when="@:1.0.1") depends_on("r-reproducible@0.2.0:", type=("build", "run"), when="@:0.3.6") depends_on("r-reproducible@1.2.7:", type=("build", "run"), when="@0.3.9") + depends_on("r-require", type=("build", "run"), when="@0.3.10:1.0.1") + depends_on("r-rgeos", type=("build", "run"), when="@:1.0.1") + depends_on("r-sp@1.2-4:", type=("build", "run"), when="@:1.0.1") diff --git a/var/spack/repos/builtin/packages/r-spades/package.py b/var/spack/repos/builtin/packages/r-spades/package.py index f7db62f71dfb7c..dd2f112cb063f9 100644 --- a/var/spack/repos/builtin/packages/r-spades/package.py +++ b/var/spack/repos/builtin/packages/r-spades/package.py @@ -26,6 +26,7 @@ class RSpades(RPackage): maintainers("dorton21") + version("2.0.11", sha256="a88e202d1fe6fa700dfc176018a07cc5dd9ac9a8d0695eb6bc507ace52b68a32") version("2.0.9", sha256="f68080318bc922c6d8c495e6d963acdbb24dc90a3e8013e3e2f894b40a584c85") version("2.0.8", sha256="2230704f700d07bda25a23ab5c6630a093c9ed2fe3c47ab6294eebaf1d86f03f") version("2.0.7", sha256="5b62e9d701aa178be57f22369a5d043c9793a1bd3dcd4acac18c5a6b906ed8a0") @@ -33,10 +34,15 @@ class RSpades(RPackage): depends_on("r@3.6:", type=("build", "run")) depends_on("r@4.0:", type=("build", "run"), when="@2.0.8:") + depends_on("r@4.2:", type=("build", "run"), when="@2.0.10:") depends_on("r-quickplot", type=("build", "run")) + depends_on("r-quickplot@1.0.2:", type=("build", "run"), when="@2.0.10:") depends_on("r-reproducible@1.2.1.9007:", type=("build", "run")) depends_on("r-reproducible@1.2.2:", type=("build", "run"), when="@2.0.9:") + depends_on("r-reproducible@2.0.10:", type=("build", "run"), when="@2.0.10:") depends_on("r-spades-core@1.0.4:", type=("build", "run")) + depends_on("r-spades-core@2.0.3:", type=("build", "run"), when="@2.0.10:") depends_on("r-spades-tools", type=("build", "run")) + depends_on("r-spades-tools@2.0.5:", type=("build", "run"), when="@2.0.10:") depends_on("r-spades-addins", type=("build", "run"), when="@:2.0.6") diff --git a/var/spack/repos/builtin/packages/r-spam/package.py b/var/spack/repos/builtin/packages/r-spam/package.py index 845a6147f30f12..6612bb66bb4474 100644 --- a/var/spack/repos/builtin/packages/r-spam/package.py +++ b/var/spack/repos/builtin/packages/r-spam/package.py @@ -21,6 +21,7 @@ class RSpam(RPackage): license("LGPL-2.0-only OR BSD-3-Clause") + version("2.10-0", sha256="719c86a23801ecf051ffd8291912ee3567af4010e74af470fbf09e274728ac79") version("2.9-1", sha256="c32e219279988b1bfc258aaf64f5a46efa558202848a9ae64946ffbe8b497ddb") version("2.8-0", sha256="d98177435b028d1c706d0197ea8132bfaffae6052c3ce6064a7f64178512d6aa") version("2.6-0", sha256="638fdd658e94f7544b46f6b6568b20a9f390bcd703aff572a3a5249fef66be5c") @@ -29,3 +30,4 @@ class RSpam(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.5:", type=("build", "run"), when="@2.9-1:") depends_on("r-dotcall64", type=("build", "run")) + depends_on("r-rcpp@1.0.8.3:", type=("build", "run"), when="@2.10-0:") diff --git a/var/spack/repos/builtin/packages/r-sparsem/package.py b/var/spack/repos/builtin/packages/r-sparsem/package.py index 0c9254fad8a8df..17b270cc03f44e 100644 --- a/var/spack/repos/builtin/packages/r-sparsem/package.py +++ b/var/spack/repos/builtin/packages/r-sparsem/package.py @@ -15,6 +15,7 @@ class RSparsem(RPackage): cran = "SparseM" + version("1.84-2", sha256="2580fdbb8679e76c92b9f0c5bd9bb503c4cb6a750ef6ae96595441690ce98665") version("1.81", sha256="bd838f381ace680fa38508ff70b3d83cb9ffa28ac1ab568509249bca53c34b33") version("1.78", sha256="d6b79ec881a10c91cb03dc23e6e783080ded9db4f2cb723755aa0d7d29a8b432") version("1.77", sha256="a9329fef14ae4fc646df1f4f6e57efb0211811599d015f7bc04c04285495d45c") diff --git a/var/spack/repos/builtin/packages/r-spatial/package.py b/var/spack/repos/builtin/packages/r-spatial/package.py index 401e685f9c5d54..5a2c17f3353288 100644 --- a/var/spack/repos/builtin/packages/r-spatial/package.py +++ b/var/spack/repos/builtin/packages/r-spatial/package.py @@ -15,6 +15,7 @@ class RSpatial(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("7.3-17", sha256="f1003ed8cff2a47169a4787c8be46e8c2c501cc06c8b1e5f97bf62507e5f5dd7") version("7.3-16", sha256="e46565a64c5ec148a77789867e5103746462a41de294539b230bad2a0e16e406") version("7.3-15", sha256="e5613be94d6f5c1f54813dadc96e4a86b3417dea28106cc90cb24dfd6c3c8cef") version("7.3-12", sha256="7639039ee7407bd088e1b253376b2cb4fcdf4cc9124d6b48e4119d5cda872d63") diff --git a/var/spack/repos/builtin/packages/r-spatialeco/package.py b/var/spack/repos/builtin/packages/r-spatialeco/package.py index 40b51335c87910..f71a8a26243ba6 100644 --- a/var/spack/repos/builtin/packages/r-spatialeco/package.py +++ b/var/spack/repos/builtin/packages/r-spatialeco/package.py @@ -19,6 +19,7 @@ class RSpatialeco(RPackage): cran = "spatialEco" + version("2.0-2", sha256="533b8e938df196609a6c85270c0bdc279287c5ee222de9e05ac745713a3ab57c") version("2.0-0", sha256="9a2384e875ec465d1a2ccd392acc90d4469eb62babd32bb90e30b27a921153f6") version("1.3-7", sha256="38688466d9a2a56675e2fe45cf69833a163133ad3afb6f95e9ac2e8eab221b7a") version("1.3-5", sha256="d4fb211124edf828333841c44a5af01165c53d89af460144214d81e3c13983c7") @@ -28,24 +29,25 @@ class RSpatialeco(RPackage): depends_on("r@3.6:", type=("build", "run")) depends_on("r@4.0:", type=("build", "run"), when="@1.3-7:") + depends_on("r@4.2:", type=("build", "run"), when="@2.0-2:") depends_on("r-sf", type=("build", "run")) - depends_on("r-spatstat-explore", type=("build", "run"), when="@2.0-0:") depends_on("r-terra", type=("build", "run"), when="@2.0-0:") - depends_on("r-spatstat-geom", type=("build", "run"), when="@1.3-7:") - depends_on("r-spatstat-geom@3.0-3:", type=("build", "run"), when="@2.0-0:") - depends_on("r-spdep", type=("build", "run")) - depends_on("r-spatialpack@0.3:", type=("build", "run")) - depends_on("r-envstats", type=("build", "run")) - depends_on("r-mgcv", type=("build", "run")) - depends_on("r-yaimpute", type=("build", "run")) - depends_on("r-rms", type=("build", "run")) - depends_on("r-rann", type=("build", "run")) - depends_on("r-rcurl", type=("build", "run")) - depends_on("r-readr", type=("build", "run")) - depends_on("r-cluster", type=("build", "run")) - depends_on("r-ks", type=("build", "run"), when="@2.0-0:") - depends_on("r-mass", type=("build", "run")) + depends_on("r-spatstat-explore", type=("build", "run"), when="@2.0-0") + depends_on("r-spatstat-geom", type=("build", "run"), when="@1.3-7:2.0-0") + depends_on("r-spatstat-geom@3.0-3:", type=("build", "run"), when="@2.0-0") + depends_on("r-spdep", type=("build", "run"), when="@:2.0-0") + depends_on("r-spatialpack@0.3:", type=("build", "run"), when="@:2.0-0") + depends_on("r-envstats", type=("build", "run"), when="@:2.0-0") + depends_on("r-mgcv", type=("build", "run"), when="@:2.0-0") + depends_on("r-yaimpute", type=("build", "run"), when="@:2.0-0") + depends_on("r-rms", type=("build", "run"), when="@:2.0-0") + depends_on("r-rann", type=("build", "run"), when="@:2.0-0") + depends_on("r-rcurl", type=("build", "run"), when="@:2.0-0") + depends_on("r-readr", type=("build", "run"), when="@:2.0-0") + depends_on("r-cluster", type=("build", "run"), when="@:2.0-0") + depends_on("r-ks", type=("build", "run"), when="@2.0-0") + depends_on("r-mass", type=("build", "run"), when="@:2.0-0") depends_on("r-dplyr", type=("build", "run"), when="@:1.3-2") depends_on("r-exactextractr", type=("build", "run"), when="@:1.3-2") depends_on("r-maptools", type=("build", "run"), when="@:1.3-2") diff --git a/var/spack/repos/builtin/packages/r-spatialreg/package.py b/var/spack/repos/builtin/packages/r-spatialreg/package.py index 7f187dbf57c166..89f37bc51c79c2 100644 --- a/var/spack/repos/builtin/packages/r-spatialreg/package.py +++ b/var/spack/repos/builtin/packages/r-spatialreg/package.py @@ -35,6 +35,7 @@ class RSpatialreg(RPackage): license("GPL-2.0-only") + version("1.3-5", sha256="eefeaa2f22d3652a23c30c8ff81364f419634e466cdb0c2d9c7bcef9287b00c4") version("1.2-8", sha256="150cb77ca09800d93af7de37440072d59ac7e41acb45ab42fc1c0e59edd7f9de") version("1.2-6", sha256="9b384117a31ab5fe830325b3eacbec5eb9d40bf0e9ca3c75ea15ca6b78fbd41d") version("1.2-3", sha256="09e0e65f043975d5c1d4be99ef9f29cf0790e962dcde9b7e45a7027d268fce22") @@ -44,12 +45,15 @@ class RSpatialreg(RPackage): depends_on("r@3.3.0:", type=("build", "run")) depends_on("r-spdata", type=("build", "run")) + depends_on("r-spdata@2.3.1:", type=("build", "run"), when="@1.3-4:") depends_on("r-matrix", type=("build", "run")) depends_on("r-sf", type=("build", "run"), when="@1.2-1:") depends_on("r-spdep", type=("build", "run")) - depends_on("r-expm", type=("build", "run")) + depends_on("r-spdep@1.3-1:", type=("build", "run"), when="@1.3-1:") + depends_on("r-expm", type=("build", "run"), when="@:1.2-10") depends_on("r-coda", type=("build", "run")) depends_on("r-mass", type=("build", "run")) + depends_on("r-multcomp", type=("build", "run"), when="@1.2-9:") depends_on("r-boot", type=("build", "run")) depends_on("r-learnbayes", type=("build", "run")) depends_on("r-nlme", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spatstat-data/package.py b/var/spack/repos/builtin/packages/r-spatstat-data/package.py index bcb503e91d9412..f043688b31ac7b 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-data/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-data/package.py @@ -13,6 +13,7 @@ class RSpatstatData(RPackage): cran = "spatstat.data" + version("3.1-2", sha256="9b9b416303b8040f723400f3dc454cda75cff1d958660767e7b824503b490b77") version("3.0-1", sha256="8eeb4b1de356e9cef42f58b5e0fc7ced2a476a1306e09395ba97253b22dd5300") version("3.0-0", sha256="cff9058a88489020a4a05b9576cd452f37fa9b42084873c474d06931f5187057") version("2.2-0", sha256="d3943bb4f6509d60bf68e79ce4533c5ec5261f411da6b0ef5238c124fc37c3e5") @@ -27,4 +28,5 @@ class RSpatstatData(RPackage): depends_on("r-spatstat-utils@2.1-0:", type=("build", "run"), when="@2.1-2:") depends_on("r-spatstat-utils@3.0-0:", type=("build", "run"), when="@3.0-0:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.0-1:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.1-2:") depends_on("r-matrix", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spatstat-explore/package.py b/var/spack/repos/builtin/packages/r-spatstat-explore/package.py index 373c33f4255dfe..292ba6b28eac07 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-explore/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-explore/package.py @@ -25,19 +25,28 @@ class RSpatstatExplore(RPackage): cran = "spatstat.explore" + version("3.3-2", sha256="a24827d24a86f2f20f8dcbbb5f57f5ab43345fa346c572099b84d867e7bf85ed") version("3.1-0", sha256="87ef4882652db3b834214bfc776dd7d23d931a9227de12f19722aeb1029d086e") version("3.0-3", sha256="137444a46d26d88241336feece63ed7b006a9328cfe3861d4b8ab7b4bed963a7") depends_on("r@3.5.0:", type=("build", "run")) depends_on("r-spatstat-data@3.0:", type=("build", "run")) + depends_on("r-spatstat-data@3.0-4:", type=("build", "run"), when="@:") + depends_on("r-spatstat-data@3.1-2:", type=("build", "run"), when="@3.3-2:") depends_on("r-spatstat-geom@3.0:", type=("build", "run")) depends_on("r-spatstat-geom@3.0-5:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-geom@3.2-9:", type=("build", "run"), when="@:") + depends_on("r-spatstat-geom@3.3-2:", type=("build", "run"), when="@3.3-2:") depends_on("r-spatstat-random@3.0:", type=("build", "run")) depends_on("r-spatstat-random@3.1:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-random@3.3-1:", type=("build", "run"), when="@3.3-2:") depends_on("r-nlme", type=("build", "run")) + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-spatstat-utils@3.0:", type=("build", "run")) depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-utils@3.1-0:", type=("build", "run"), when="@3.3-2:") depends_on("r-spatstat-sparse@3.0:", type=("build", "run")) + depends_on("r-spatstat-sparse@3.1-0:", type=("build", "run"), when="@3.3-2:") depends_on("r-goftest@1.2-2:", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) depends_on("r-abind", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spatstat-geom/package.py b/var/spack/repos/builtin/packages/r-spatstat-geom/package.py index 8070c59daf6bad..94f62c92590b6a 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-geom/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-geom/package.py @@ -26,6 +26,7 @@ class RSpatstatGeom(RPackage): cran = "spatstat.geom" + version("3.3-2", sha256="cbc08a6924edbf0f1ea104136d5b2200caeecbd6c2cb4d55d4f56af9beea570f") version("3.1-0", sha256="184a96679babcbff4897c5a471e034eb1bb7127c6cf668e8cc2c2c74bdea47fe") version("3.0-3", sha256="6e5b56c60e774a0cdcaa5a8ffde071225f233832446a341588bd8a7840913c84") version("2.4-0", sha256="32b89a409ce87ffe901e4c8720a26cac9629f9816e163c4ad68b7aa012d69e67") @@ -34,8 +35,11 @@ class RSpatstatGeom(RPackage): depends_on("r@3.5.0:", type=("build", "run")) depends_on("r-spatstat-data@2.0-0:", type=("build", "run")) depends_on("r-spatstat-data@3.0:", type=("build", "run"), when="@3.0-3:") + depends_on("r-spatstat-data@3.1:", type=("build", "run"), when="@3.3-2:") + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.3-2:") depends_on("r-spatstat-utils@2.2-0:", type=("build", "run")) depends_on("r-spatstat-utils@3.0:", type=("build", "run"), when="@3.0-3:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.3-2:") depends_on("r-deldir@1.0-2:", type=("build", "run")) depends_on("r-polyclip@1.10-0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spatstat-linnet/package.py b/var/spack/repos/builtin/packages/r-spatstat-linnet/package.py index cae0f1106f143f..995ad70fd09791 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-linnet/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-linnet/package.py @@ -39,22 +39,31 @@ class RSpatstatLinnet(RPackage): cran = "spatstat.linnet" + version("3.2-1", sha256="1af0d8063c72650f17c6b79afb07e69e0b6a9794583e8f0c38c6624d91dc11bf") version("3.1-0", sha256="b9b0ad66af169ca1ef3da852578d7b65521cf55f4a72c43ae5b1f2d4f47bf00c") version("2.3-2", sha256="9c78a4b680debfff0f3ae934575c30d03ded49bc9a7179475384af0ebaf13778") version("2.3-1", sha256="119ba6e3da651aa9594f70a7a35349209534215aa640c2653aeddc6aa25038c3") depends_on("r@3.5.0:", type=("build", "run")) depends_on("r-spatstat-model@3.2-1:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-model@3.2-11.005:", type=("build", "run"), when="@3.2-1:") depends_on("r-spatstat-explore@3.0-6:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-explore@3.2-7.006:", type=("build", "run"), when="@3.2-1:") depends_on("r-spatstat-data@2.1-0:", type=("build", "run")) depends_on("r-spatstat-data@3.0:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-data@3.0-4:", type=("build", "run"), when="@3.1-5:") depends_on("r-spatstat-geom@2.3-0:", type=("build", "run")) depends_on("r-spatstat-geom@3.0-6:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-geom@3.2-9.028:", type=("build", "run"), when="@3.2-1:") depends_on("r-spatstat-random@2.2-0:", type=("build", "run"), when="@2.3-2:") depends_on("r-spatstat-random@3.1-3:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-random@3.2-3.003:", type=("build", "run"), when="@3.2-1:") + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.2-1:") depends_on("r-spatstat-utils@2.2-0:", type=("build", "run")) depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.2-1:") depends_on("r-matrix", type=("build", "run")) depends_on("r-spatstat-sparse@2.0:", type=("build", "run")) depends_on("r-spatstat-sparse@3.0:", type=("build", "run"), when="@3.1-0:") + depends_on("r-spatstat-sparse@3.1-0:", type=("build", "run"), when="@3.2-1:") depends_on("r-spatstat-core@2.3-2:", type=("build", "run"), when="@2.3-2:2.3-2") diff --git a/var/spack/repos/builtin/packages/r-spatstat-model/package.py b/var/spack/repos/builtin/packages/r-spatstat-model/package.py index 1a84bfd784dc39..a29c32b000c316 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-model/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-model/package.py @@ -32,17 +32,25 @@ class RSpatstatModel(RPackage): cran = "spatstat.model" + version("3.3-1", sha256="5c1c969b5f2bbfdfe91ad31cd912f31b91ec9cc7651ecec86c1d7a562161afa7") version("3.2-3", sha256="8ad7d2644773571a5c579ceebb98b735dccc97e9b4b109ea39b4ce3faedb14ea") depends_on("r@3.5.0:", type=("build", "run")) depends_on("r-spatstat-data@3.0:", type=("build", "run")) + depends_on("r-spatstat-data@3.0-4:", type=("build", "run"), when="@3.2-11:") depends_on("r-spatstat-geom@3.0-5:", type=("build", "run")) + depends_on("r-spatstat-geom@3.3-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-spatstat-random@3.1-4:", type=("build", "run")) + depends_on("r-spatstat-random@3.3-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-spatstat-explore@3.1-0:", type=("build", "run")) + depends_on("r-spatstat-explore@3.3-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-nlme", type=("build", "run")) depends_on("r-rpart", type=("build", "run")) + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run")) + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.3-1:") depends_on("r-spatstat-sparse@3.0:", type=("build", "run")) + depends_on("r-spatstat-sparse@3.1-0:", type=("build", "run"), when="@3.3-1:") depends_on("r-mgcv", type=("build", "run")) depends_on("r-matrix", type=("build", "run")) depends_on("r-abind", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-spatstat-random/package.py b/var/spack/repos/builtin/packages/r-spatstat-random/package.py index 2a8cf215742877..f967f4d0239093 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-random/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-random/package.py @@ -25,6 +25,7 @@ class RSpatstatRandom(RPackage): cran = "spatstat.random" + version("3.3-1", sha256="83026bce8802e14423edfa0a0f9c8279ef74565992bdac1804dfec357988bbd3") version("3.1-4", sha256="a6cd75e187a992fd8dae535f6745e12801635a344ca51bd2fe048debea3df7d3") version("3.0-1", sha256="938c845c063b8781bf894c0a67537e7b2a7c425a4beba4a95ec9d2c37b43e5b6") version("2.2-0", sha256="45f0bbdb9dbd53b6c4151c3cdd098451cf787729717ccbb063cd1f33910e604d") @@ -33,9 +34,13 @@ class RSpatstatRandom(RPackage): depends_on("r-spatstat-data@2.1-0:", type=("build", "run")) depends_on("r-spatstat-data@2.2-0.003:", type=("build", "run"), when="@3.0-1:") depends_on("r-spatstat-data@3.0:", type=("build", "run"), when="@3.1-4:") + depends_on("r-spatstat-data@3.1:", type=("build", "run"), when="@3.3-0:") depends_on("r-spatstat-geom@2.4-0:", type=("build", "run")) depends_on("r-spatstat-geom@2.4-0.023:", type=("build", "run"), when="@3.0-1:") depends_on("r-spatstat-geom@3.0-5:", type=("build", "run"), when="@3.1-4:") + depends_on("r-spatstat-geom@3.3-0:", type=("build", "run"), when="@3.3-0:") + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.3-0:") depends_on("r-spatstat-utils@2.2-0:", type=("build", "run")) depends_on("r-spatstat-utils@2.3-1.003:", type=("build", "run"), when="@3.0-1:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.1-4:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.3-0:") diff --git a/var/spack/repos/builtin/packages/r-spatstat-sparse/package.py b/var/spack/repos/builtin/packages/r-spatstat-sparse/package.py index 932c51884ffa1e..e2080bc2062f43 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-sparse/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-sparse/package.py @@ -15,6 +15,7 @@ class RSpatstatSparse(RPackage): cran = "spatstat.sparse" + version("3.1-0", sha256="63be5dc5818339b878a14a39815dab730b28029d51bac5233e88f5e2464bbbe9") version("3.0-1", sha256="2c1cf0ddad366aa4230bd03241a1ef87ed635f53a6943fc4a6c2d371626d0d1c") version("3.0-0", sha256="99be0a3c7592760fdf1668dc0811f75ed91c400390d1ecc3d5e643255f501ad2") version("2.1-1", sha256="9a35ad69715b767b3ae60b02dce05ccf108fcccdf95bbc8f7d02557bcbde7303") @@ -27,3 +28,4 @@ class RSpatstatSparse(RPackage): depends_on("r-spatstat-utils@2.1-0:", type=("build", "run")) depends_on("r-spatstat-utils@3.0-0:", type=("build", "run"), when="@3.0-0:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.0-1:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.1-0:") diff --git a/var/spack/repos/builtin/packages/r-spatstat-univar/package.py b/var/spack/repos/builtin/packages/r-spatstat-univar/package.py new file mode 100644 index 00000000000000..6cc988eb3022a7 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-spatstat-univar/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RSpatstatUnivar(RPackage): + """Estimation of one-dimensional probability distributions including + kernel density estimation, weighted empirical cumulative distribution + functions, Kaplan-Meier and reduced-sample estimators for right-censored + data, heat kernels, kernel properties, quantiles and integration.""" + + homepage = "http://spatstat.org/" + cran = "spatstat.univar" + + license("GPL-2.0-or-later", checked_by="wdconinc") + + version("3.0-0", sha256="00bc501d9bec32231207f0562433193bd680606ce465131caa5e2704b4ff4771") + + depends_on("r@3.5.0:", type=("build", "run"), when="@3.0-0:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@2.0-3.011:") diff --git a/var/spack/repos/builtin/packages/r-spatstat-utils/package.py b/var/spack/repos/builtin/packages/r-spatstat-utils/package.py index 2a5490c177afb9..ab4ddd6c1a397b 100644 --- a/var/spack/repos/builtin/packages/r-spatstat-utils/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat-utils/package.py @@ -14,6 +14,7 @@ class RSpatstatUtils(RPackage): cran = "spatstat.utils" + version("3.1-0", sha256="c30c3154700005f4bae9b428924248046128f7150b873e36e3897a622f962d3d") version("3.0-2", sha256="be60cd2cf21a6b3f71ba60553c045fd87884a4e57744f60e6eb0a2d096314615") version("3.0-1", sha256="cba1c7806564fd9145ca15edf77233d6ba5609f0989f7812221f5fc1ece0b91a") version("2.3-1", sha256="5b914308df0585993084b5e95967864eea0314c98ed6af58267b64b2235dfe22") @@ -23,3 +24,4 @@ class RSpatstatUtils(RPackage): version("1.15-0", sha256="90e07d730b6939f47f93c939afae10874b2c82bd402960ede4133de67dca2a0c") depends_on("r@3.3.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@3.1-0:") diff --git a/var/spack/repos/builtin/packages/r-spatstat/package.py b/var/spack/repos/builtin/packages/r-spatstat/package.py index 766b10079e68ea..c38424cf60641f 100644 --- a/var/spack/repos/builtin/packages/r-spatstat/package.py +++ b/var/spack/repos/builtin/packages/r-spatstat/package.py @@ -50,6 +50,7 @@ class RSpatstat(RPackage): license("GPL-2.0-or-later") + version("3.1-1", sha256="5649309818c6e76c8b8ee7b66a25dcbd2b358d90da56f67dd961b5cf9ff55512") version("3.0-5", sha256="b926ed55dfeb95b09fb441f44d85204277eee00e42ac258c0a08baa1ce263bb1") version("2.3-4", sha256="4ea0f8d70b926b92bf4a06521f985a0bb6d573619f5d526957c87860ccb999da") version("2.3-0", sha256="da02443722f2c7ef9d59a2799b7b8002c94cecf73f2b0d2b29280d39f49c4c06") @@ -59,23 +60,31 @@ class RSpatstat(RPackage): depends_on("r@3.3:", type=("build", "run")) depends_on("r@3.5.0:", type=("build", "run"), when="@2.3-0:") depends_on("r-spatstat-model@3.2-3:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-model@3.3-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-explore@3.1-0:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-explore@3.3-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-data@1.4-2:", type=("build", "run")) depends_on("r-spatstat-data@2.1-0:", type=("build", "run"), when="@2.3-0:") depends_on("r-spatstat-data@2.1-2:", type=("build", "run"), when="@2.3-4:") depends_on("r-spatstat-data@3.0-1:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-data@3.1-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-geom@2.3-0:", type=("build", "run"), when="@2.3-0:") depends_on("r-spatstat-geom@2.4-0:", type=("build", "run"), when="@2.3-4:") depends_on("r-spatstat-geom@3.1-0:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-geom@3.3-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-random@2.2-0:", type=("build", "run"), when="@2.3-4:") depends_on("r-spatstat-random@3.1-4:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-random@3.3-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-linnet@2.3-0:", type=("build", "run"), when="@2.3-0:") depends_on("r-spatstat-linnet@2.3-2:", type=("build", "run"), when="@2.3-4:") depends_on("r-spatstat-linnet@3.1-0:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-linnet@3.2-0:", type=("build", "run"), when="@3.1-1:") + depends_on("r-spatstat-univar@3.0-0:", type=("build", "run"), when="@3.1-1:") depends_on("r-spatstat-utils@1.17:", type=("build", "run")) depends_on("r-spatstat-utils@2.2-0:", type=("build", "run"), when="@2.3-0:") depends_on("r-spatstat-utils@2.3-0:", type=("build", "run"), when="@2.3-4:") depends_on("r-spatstat-utils@3.0-2:", type=("build", "run"), when="@3.0-5:") + depends_on("r-spatstat-utils@3.0-5:", type=("build", "run"), when="@3.1-1:") depends_on("r-rpart", type=("build", "run"), when="@:1.64-1") depends_on("r-nlme", type=("build", "run"), when="@:1.64-1") diff --git a/var/spack/repos/builtin/packages/r-spdata/package.py b/var/spack/repos/builtin/packages/r-spdata/package.py index 7a4a7e225ebbe7..028bda6521e16e 100644 --- a/var/spack/repos/builtin/packages/r-spdata/package.py +++ b/var/spack/repos/builtin/packages/r-spdata/package.py @@ -20,6 +20,7 @@ class RSpdata(RPackage): cran = "spData" + version("2.3.1", sha256="8c377f2123b7b274c5ca0de656ccd30aaba1b5b245be58a842395311ecc70075") version("2.2.2", sha256="878a58e98b6cf259432149ecb4e5d66ada59466e1b5b0dafa60ec839e90104ed") version("2.2.0", sha256="6e9c0a72f29021a84e9049b147c9e0186f14876a4a1663ad98bbb33440ee901f") version("2.0.1", sha256="c635a3e2e5123b4cdb2e6877b9b09e3d50169e1512a53b2ba2db7fbe63b990fc") diff --git a/var/spack/repos/builtin/packages/r-spdep/package.py b/var/spack/repos/builtin/packages/r-spdep/package.py index 63f980382cd8bf..2383c056e1e893 100644 --- a/var/spack/repos/builtin/packages/r-spdep/package.py +++ b/var/spack/repos/builtin/packages/r-spdep/package.py @@ -23,6 +23,7 @@ class RSpdep(RPackage): license("GPL-2.0-or-later") + version("1.3-5", sha256="ba8efa06ddbc12408f4f6d4c85606d84922131d9c05953e0b23b81f03e56e626") version("1.2-8", sha256="8d9fb4cb10d1035526ad6d9f7a11972efb0e3137dcff176d73df6ebfe96c9190") version("1.2-7", sha256="9dac594825bf2d0aa31e845bfec05d8ce206327840fe455391741dbbdf9c9eea") version("1.2-4", sha256="a9f4d5af56efb1a2bcd3e85fe4d0e8a42896a2c30a790b2487e1ebadf398a677") @@ -37,6 +38,7 @@ class RSpdep(RPackage): depends_on("r@3.3.0:", type=("build", "run"), when="@0.7-8:") depends_on("r-sp@1.0:", type=("build", "run")) depends_on("r-spdata@0.2.6.0:", type=("build", "run"), when="@1.0-2:") + depends_on("r-spdata@2.3.1:", type=("build", "run"), when="@1.3-5:") depends_on("r-sf", type=("build", "run"), when="@1.0-2:") depends_on("r-deldir", type=("build", "run")) depends_on("r-boot@1.3-1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-speedglm/package.py b/var/spack/repos/builtin/packages/r-speedglm/package.py index 9ec7b5a82472ae..e967e7ffc97748 100644 --- a/var/spack/repos/builtin/packages/r-speedglm/package.py +++ b/var/spack/repos/builtin/packages/r-speedglm/package.py @@ -16,9 +16,11 @@ class RSpeedglm(RPackage): license("GPL-2.0-or-later") + version("0.3-5", sha256="f8663677c10ff324c5639402060ddd2b1a1e917445cb0f8f84e146b85e82bb4b") version("0.3-4", sha256="1a12db7dbceaaf5cf4f9a0c03e2a2b9f32e91b697daf2ccfe81bbae9ac3046ce") version("0.3-3", sha256="d065d0ee42fb772760fca8d97ad2aa56cd76b1d9ecb4e97478ec362429e16738") version("0.3-2", sha256="5fcaf18324dc754152f528a44894944063303f780d33e58569ea7c306bfc45ac") + depends_on("r-biglm", type=("build", "run"), when="@0.3-5:") depends_on("r-matrix", type=("build", "run")) depends_on("r-mass", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-splancs/package.py b/var/spack/repos/builtin/packages/r-splancs/package.py index 2dbe2fb03352e7..a964aa09cabe45 100644 --- a/var/spack/repos/builtin/packages/r-splancs/package.py +++ b/var/spack/repos/builtin/packages/r-splancs/package.py @@ -17,9 +17,10 @@ class RSplancs(RPackage): license("GPL-2.0-or-later") + version("2.01-45", sha256="8bccf1d61d7feaab52da07a9c95aa66bcd3986a6b214f13b232c1e2bea4b76d3") version("2.01-43", sha256="b351565e1f69f6c86a29d921d3a18d5896c4586e2ab8c73bb3df8e75630fc448") version("2.01-42", sha256="8c0af4764521e20b629dba6afd5c284e7be48786f378c37668eacfa26d2ef0aa") version("2.01-40", sha256="79744381ebc4a361740a36dca3c9fca9ae015cfe0bd585b7856a664a3da74363") - depends_on("r@2.10:", type=("build", "run")) + depends_on("r@2.10.0:", type=("build", "run")) depends_on("r-sp@0.9:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-splines2/package.py b/var/spack/repos/builtin/packages/r-splines2/package.py new file mode 100644 index 00000000000000..bf1ae174c52cc3 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-splines2/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RSplines2(RPackage): + """Constructs basis functions of B-splines, M-splines, I-splines, convex + splines (C-splines), periodic splines, natural cubic splines, generalized + Bernstein polynomials, their derivatives, and integrals (except C-splines) + by closed-form recursive formulas. It also contains a C++ head-only library + integrated with Rcpp. See Wang and Yan (2021) + for details.""" + + homepage = "https://wwenjie.org/splines2" + cran = "splines2" + + license("GPL-3.0-or-later", checked_by="wdconinc") + + version("0.5.3", sha256="c27e7bd12d615095f765f4c1ed3cb9e39b922653aabbe88c4ca3ac31e6a01ddc") + + depends_on("r@3.2.3:", type=("build", "run")) + + depends_on("r-rcpp", type=("build", "run")) + depends_on("r-rcpparmadillo", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-stabledist/package.py b/var/spack/repos/builtin/packages/r-stabledist/package.py index 747a119144c5e5..1a8e0c40df11c3 100644 --- a/var/spack/repos/builtin/packages/r-stabledist/package.py +++ b/var/spack/repos/builtin/packages/r-stabledist/package.py @@ -16,6 +16,7 @@ class RStabledist(RPackage): license("GPL-2.0-or-later") + version("0.7-2", sha256="26671710c0d8e3c815b56e6e4f6bc9ea0509db47c0ef5b8acfbfa16095a16fd5") version("0.7-1", sha256="06c5704d3a3c179fa389675c537c39a006867bc6e4f23dd7e406476ed2c88a69") depends_on("r@3.1.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-stanheaders/package.py b/var/spack/repos/builtin/packages/r-stanheaders/package.py index 4ce431492efe98..f6f63c610a3290 100644 --- a/var/spack/repos/builtin/packages/r-stanheaders/package.py +++ b/var/spack/repos/builtin/packages/r-stanheaders/package.py @@ -27,6 +27,7 @@ class RStanheaders(RPackage): cran = "StanHeaders" + version("2.32.10", sha256="c3125b8d7dc4c6b7082258b2fa6c9530c2e4714c89ffd08b8e72f4c9f4108582") version("2.21.0-7", sha256="27546e064f0e907e031d9185ad55245d118d82fbe3074ecb1d76fae8b9f2336b") version("2.21.0-6", sha256="a0282a054d0e6ab310ec7edcffa953b77c7e4a858d9ac7028aab1b4fb4ce8cf3") version("2.18.1-10", sha256="8a9f7e22105428e97d14f44f75395c37cf8c809de148d279c620024452b3565a") @@ -37,5 +38,7 @@ class RStanheaders(RPackage): depends_on("r+X", type=("build", "run")) depends_on("r@3.4.0:", type=("build", "run"), when="@2.18.0:") depends_on("r-rcppparallel@5.0.1:", type=("build", "run"), when="@2.21.0:") + depends_on("r-rcppparallel@5.1.4:", type=("build", "run"), when="@2.26.25:") depends_on("r-rcppeigen", type=("build", "run"), when="@2.21.0:") + depends_on("r-rcppeigen@0.3.4.0.0:", type=("build", "run"), when="@2.32.8:") depends_on("pandoc", type="build") diff --git a/var/spack/repos/builtin/packages/r-stars/package.py b/var/spack/repos/builtin/packages/r-stars/package.py index 20f393bbe3ffde..94552ddf7d0648 100644 --- a/var/spack/repos/builtin/packages/r-stars/package.py +++ b/var/spack/repos/builtin/packages/r-stars/package.py @@ -15,6 +15,7 @@ class RStars(RPackage): cran = "stars" + version("0.6-6", sha256="70ca3509adfb4227ca8910d47c87f587ec06d8ef4577af63fe772757844ec7ac") version("0.6-1", sha256="1f78db3adab9ebbfc9d98c6cc592708d893b5d7fd7fd876af454042ef42204a7") version("0.5-6", sha256="e0413c95423635f7f7b2520813382e911257da8ace9b743da9fe3eab568a9461") @@ -22,7 +23,9 @@ class RStars(RPackage): depends_on("r-abind", type=("build", "run")) depends_on("r-sf@1.0-8:", type=("build", "run")) depends_on("r-sf@1.0-10:", type=("build", "run"), when="@0.6-1:") + depends_on("r-sf@1.0-15:", type=("build", "run"), when="@0.6-5:") depends_on("r-classint@0.4-1:", type=("build", "run")) - depends_on("r-lwgeom", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) depends_on("r-units", type=("build", "run")) + + depends_on("r-lwgeom", type=("build", "run"), when="@:0.6-3") diff --git a/var/spack/repos/builtin/packages/r-statnet-common/package.py b/var/spack/repos/builtin/packages/r-statnet-common/package.py index f02f6d0cb4cebb..e71cf28c478bc2 100644 --- a/var/spack/repos/builtin/packages/r-statnet-common/package.py +++ b/var/spack/repos/builtin/packages/r-statnet-common/package.py @@ -14,6 +14,7 @@ class RStatnetCommon(RPackage): cran = "statnet.common" + version("4.9.0", sha256="a485dc6e363a993d87336fbd1027adb1cd7b9103447fd63904cae4dc3bfc2dd7") version("4.8.0", sha256="def999130673fbcb315fecf3620a2559864f51961a828625aa5cd5fded7946f0") version("4.7.0", sha256="b69731a606b56b729b1917375efafb572b960ce5000a0fc2ec5222fd7d80a1b3") version("4.6.0", sha256="ddad51128b50d465e1d1aca3a53b452810b9ba578e96b08b8f50f5850d7bb21d") diff --git a/var/spack/repos/builtin/packages/r-stringfish/package.py b/var/spack/repos/builtin/packages/r-stringfish/package.py index 14c846404ed634..729c0b09f97f3b 100644 --- a/var/spack/repos/builtin/packages/r-stringfish/package.py +++ b/var/spack/repos/builtin/packages/r-stringfish/package.py @@ -18,6 +18,7 @@ class RStringfish(RPackage): license("GPL-3.0-only") + version("0.16.0", sha256="3608bc83900246297b38df46954bd9aa3b6f463a56eefbe80cfc713eab797993") version("0.15.7", sha256="34b1703a8876a40860d35f88a94e069832a7d2bc86189ff07af84ff04fd4b735") version("0.15.5", sha256="9df21146a7710e5a9ab4bb53ebc231a580c798b7e541b8d78df53207283f8129") version("0.14.2", sha256="9373cfc715cda1527fd20179435977b8e59e19d8c5ef82a31e519f93fb624ced") diff --git a/var/spack/repos/builtin/packages/r-stringi/package.py b/var/spack/repos/builtin/packages/r-stringi/package.py index abc075ec2a75f1..805cf78970eb75 100644 --- a/var/spack/repos/builtin/packages/r-stringi/package.py +++ b/var/spack/repos/builtin/packages/r-stringi/package.py @@ -22,6 +22,7 @@ class RStringi(RPackage): license("custom") + version("1.8.4", sha256="c219f8f64d1a2bfd4ca9528452d44d30db1899af14f4b9ef248412443bc669f3") version("1.7.12", sha256="efe8ac2900001f986a75db5641fbb24587a6d23de274a6a85c39dfa58921e009") version("1.7.8", sha256="538918b1cd6ed1d8a2dd5ab146ba800a088e99f93c52dcd82615b6e127478b1c") version("1.7.6", sha256="0ea3d5afec5701977ff53de9afbaceb53b00aa34f5fb641cadc1eeb7759119ec") @@ -36,6 +37,7 @@ class RStringi(RPackage): depends_on("r@2.14:", type=("build", "run")) depends_on("r@3.1:", type=("build", "run"), when="@1.6.1:") + depends_on("r@3.4:", type=("build", "run"), when="@1.8.1:") depends_on("icu4c@52:") depends_on("icu4c@55:", when="@1.5.3:") # since version 1.6.1 there is also a SystemRequirement on C++11 diff --git a/var/spack/repos/builtin/packages/r-stringr/package.py b/var/spack/repos/builtin/packages/r-stringr/package.py index 90fcda65fb417d..97ca2ce28a6811 100644 --- a/var/spack/repos/builtin/packages/r-stringr/package.py +++ b/var/spack/repos/builtin/packages/r-stringr/package.py @@ -19,6 +19,7 @@ class RStringr(RPackage): license("MIT") + version("1.5.1", sha256="a4adec51bb3f04214b1d8ef40d3a58949f21b1497cbeaf2ba552e0891eef45de") version("1.5.0", sha256="52b159d7700a139111b4caf939e7c9c6ab3e01185181400d70a74c552826633a") version("1.4.1", sha256="ec0d8e90caa3e107f18c188ed313dea8bfd12a738011b0be09ef5362360ddcb1") version("1.4.0", sha256="87604d2d3a9ad8fd68444ce0865b59e2ffbdb548a38d6634796bbd83eeb931dd") @@ -29,12 +30,14 @@ class RStringr(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.3:", type=("build", "run"), when="@1.5.0:") + depends_on("r@3.6:", type=("build", "run"), when="@1.5.1:") depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@1.5.0:") depends_on("r-cli", type=("build", "run"), when="@1.5.0:") depends_on("r-stringi@1.1.7:", type=("build", "run")) depends_on("r-stringi@1.5.3:", type=("build", "run"), when="@1.5.0:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-vctrs", type=("build", "run"), when="@1.5.0:") + depends_on("r-vctrs@0.4.0:", type=("build", "run"), when="@1.5.1:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.5.0:") depends_on("r-glue@1.2.0:", type=("build", "run"), when="@1.3.0:") depends_on("r-glue@1.6.1:", type=("build", "run"), when="@1.5.0:") diff --git a/var/spack/repos/builtin/packages/r-styler/package.py b/var/spack/repos/builtin/packages/r-styler/package.py index a64f522bccc1a9..4fc81952dacdee 100644 --- a/var/spack/repos/builtin/packages/r-styler/package.py +++ b/var/spack/repos/builtin/packages/r-styler/package.py @@ -15,6 +15,7 @@ class RStyler(RPackage): license("MIT") + version("1.10.3", sha256="adb9c22111a8669bdce6d4a5c09e0ad353e07c3488373484a258028203bfda41") version("1.9.1", sha256="c80fa3c062f007645ec820b5b087d4d5784e7797cc88d030ab59fb5823ded0bb") version("1.8.1", sha256="15505fa85f0aa2902bc8af3f00b2aeb205d41a92b77bffbd176d657753ee81e9") version("1.8.0", sha256="4f8b74c1ac158b0a4433b6008da6bb708f3c9ed1c7fb9bb5d79748858cb484c7") @@ -24,6 +25,7 @@ class RStyler(RPackage): depends_on("r@3.4.0:", type=("build", "run"), when="@1.7.0:") depends_on("r@3.5.0:", type=("build", "run"), when="@1.8.0:") + depends_on("r@3.6.0:", type=("build", "run"), when="@1.10.0:") depends_on("r-cli@1.1.0:", type=("build", "run")) depends_on("r-cli@3.1.1:", type=("build", "run"), when="@1.7.0:") depends_on("r-magrittr@1.0.1:", type=("build", "run")) @@ -32,6 +34,7 @@ class RStyler(RPackage): depends_on("r-r-cache@0.14.0:", type=("build", "run")) depends_on("r-r-cache@0.15.0:", type=("build", "run"), when="@1.6.2:") depends_on("r-rlang@0.1.1:", type=("build", "run")) + depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@1.10.0:") depends_on("r-rprojroot@1.1:", type=("build", "run")) depends_on("r-vctrs@0.4.1:", type=("build", "run"), when="@1.8.0:") depends_on("r-withr@1.0.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-subplex/package.py b/var/spack/repos/builtin/packages/r-subplex/package.py index 9199d1e852debe..25f6eda8ca7282 100644 --- a/var/spack/repos/builtin/packages/r-subplex/package.py +++ b/var/spack/repos/builtin/packages/r-subplex/package.py @@ -16,6 +16,7 @@ class RSubplex(RPackage): license("GPL-3.0-only") + version("1.9", sha256="07a9ea8cba46a6eec037f8c6e87279c122479ccc560a96bd3086d653f95d69b7") version("1.8", sha256="3bc31d8990380c9f790c9c7d84cb2e39f4945eff934eddfa1196d597465be5a5") version("1.7", sha256="d5ecf4a484936d71cb294f08c3968ef5a8dcbdc861bfc0e97e3b1ab99afff887") version("1.6", sha256="0d05da1622fffcd20a01cc929fc6c2b7df40a8246e7018f7f1f3c175b774cbf9") @@ -24,3 +25,4 @@ class RSubplex(RPackage): version("1.4-1", sha256="94b7b961aaa229a6f025151191ed50272af1394be69f1c41146b9e8c786caec6") depends_on("r@2.5.1:", type=("build", "run")) + depends_on("r@4.1.0:", type=("build", "run"), when="@1.9:") diff --git a/var/spack/repos/builtin/packages/r-survey/package.py b/var/spack/repos/builtin/packages/r-survey/package.py index 9cc9e7b6c65a54..c9c51f056cd941 100644 --- a/var/spack/repos/builtin/packages/r-survey/package.py +++ b/var/spack/repos/builtin/packages/r-survey/package.py @@ -21,6 +21,7 @@ class RSurvey(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("4.4-2", sha256="8a4a0f3122f0971f7c8756805add781192c655f507b235801dd78457a8d2f1bd") version("4.1-1", sha256="05e89a1678a39e32bfb41af8a31d643b04fc4d2660a96e701825e6bffcd75a52") version("4.0", sha256="b053f40f4cfa90507ca524f72d3b3a4b4869def52f11f907a14f1c6d90063de1") version("3.36", sha256="90f32e9d2b52eacf881e6717a4b5edfc5a3beb5da516f8372293549589d79475") @@ -31,9 +32,12 @@ class RSurvey(RPackage): depends_on("r@2.16.0:", type=("build", "run"), when="@3.32:") depends_on("r@3.1.0:", type=("build", "run"), when="@3.35:") depends_on("r@3.5.0:", type=("build", "run"), when="@4.1-1:") + depends_on("r@4.1.0:", type=("build", "run"), when="@4.4-2:") depends_on("r-matrix", type=("build", "run"), when="@3.31:") depends_on("r-survival", type=("build", "run"), when="@3.31:") depends_on("r-lattice", type=("build", "run"), when="@3.31:") depends_on("r-minqa", type=("build", "run"), when="@3.34:") depends_on("r-numderiv", type=("build", "run"), when="@3.34:") depends_on("r-mitools@2.4:", type=("build", "run"), when="@3.36:") + depends_on("r-rcpp@0.12.8:", type=("build", "run"), when="@4.4:") + depends_on("r-rcpparmadillo", type=("build", "run"), when="@4.4:") diff --git a/var/spack/repos/builtin/packages/r-survival/package.py b/var/spack/repos/builtin/packages/r-survival/package.py index 79b6b0e0293b55..052c27d368fe42 100644 --- a/var/spack/repos/builtin/packages/r-survival/package.py +++ b/var/spack/repos/builtin/packages/r-survival/package.py @@ -17,6 +17,7 @@ class RSurvival(RPackage): license("LGPL-2.0-or-later") + version("3.7-0", sha256="cd96b08ec928b0028f69c942cc788e190b4543c8518d71deb6d8a712de44feef") version("3.5-5", sha256="1375a509554b0258e04e27baca2e073e179406e2a9a71e6d3e0c777072568476") version("3.4-0", sha256="a48e23d47265fe4d90fb5f0f9fc388906014f8063211980856985db9e89cf812") version("3.3-1", sha256="14878705cd0c7edcfead79011444aa84f680759293bde8634721c49f37cb4dc7") diff --git a/var/spack/repos/builtin/packages/r-svglite/package.py b/var/spack/repos/builtin/packages/r-svglite/package.py index 2003f6a798c21f..babdf515f2b58c 100644 --- a/var/spack/repos/builtin/packages/r-svglite/package.py +++ b/var/spack/repos/builtin/packages/r-svglite/package.py @@ -16,12 +16,14 @@ class RSvglite(RPackage): license("GPL-2.0-or-later") + version("2.1.3", sha256="f0a8564e6f9127f4d1e05cf5a5f36b4e244aee0008e27473e504c63873ef0a54") version("2.1.1", sha256="48700169eec1b05dbee9e2bae000aa84c544617b018cb3ac431a128cfd8dac56") version("2.1.0", sha256="ad40f590c7e80ae83001a3826b6e8394ba733446ed51fd55faeda974ab839c9b") version("2.0.0", sha256="76e625fe172a5b7ce99a67b6d631b037b3f7f0021cfe15f2e15e8851b89defa5") depends_on("r+X", type=("build", "run")) depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@2.1.2:") depends_on("r-systemfonts@1.0.0:", type=("build", "run")) depends_on("r-cpp11", type=("build", "run")) depends_on("libpng") diff --git a/var/spack/repos/builtin/packages/r-sys/package.py b/var/spack/repos/builtin/packages/r-sys/package.py index 117130dc41fcf5..bee43018e268b9 100644 --- a/var/spack/repos/builtin/packages/r-sys/package.py +++ b/var/spack/repos/builtin/packages/r-sys/package.py @@ -19,6 +19,7 @@ class RSys(RPackage): license("MIT") + version("3.4.2", sha256="b7bdce66f0fb681830ea6fb77b5a2c6babb43920abb1eddc733f95c0a63ce5b3") version("3.4.1", sha256="324e6d8fde58264e62bc04867b719c5fd16296de1542689801b8cb13621ecf52") version("3.4", sha256="17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487") version("3.2", sha256="2819498461fe2ce83d319d1a47844e86bcea6d01d10861818dba289e7099bbcc") diff --git a/var/spack/repos/builtin/packages/r-systemfonts/package.py b/var/spack/repos/builtin/packages/r-systemfonts/package.py index fffb2dcdc7a805..4d4f38f6390590 100644 --- a/var/spack/repos/builtin/packages/r-systemfonts/package.py +++ b/var/spack/repos/builtin/packages/r-systemfonts/package.py @@ -21,11 +21,13 @@ class RSystemfonts(RPackage): license("MIT") + version("1.1.0", sha256="1941069bd20320284ec026a38c53cb736be60bda431303ceaf8fd27ae13fb644") version("1.0.4", sha256="ef766c75b942f147d382664a00d6a4930f1bfe0cce9d88943f571682a85a84c0") version("1.0.3", sha256="647c99d5ea6f90a49768ea7b10b39816af6be85168475273369fd973a20dbbba") version("1.0.1", sha256="401db4d9e78e3a5e00b7a0b4fbad7fbb1c584734469b65fe5b7ebe1851c7a797") depends_on("r@3.2.0:", type=("build", "run")) depends_on("r-cpp11@0.2.1:", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@1.1.0:") depends_on("fontconfig") depends_on("freetype") diff --git a/var/spack/repos/builtin/packages/r-tclust/package.py b/var/spack/repos/builtin/packages/r-tclust/package.py index 964e8746050f48..28e5169388cdd5 100644 --- a/var/spack/repos/builtin/packages/r-tclust/package.py +++ b/var/spack/repos/builtin/packages/r-tclust/package.py @@ -18,6 +18,7 @@ class RTclust(RPackage): license("GPL-3.0-only") + version("2.0-4", sha256="a6667167778b974afc968340161171a7911415bcc1220dc7f0f350552f560578") version("1.5-4", sha256="2b55da5e351c5054c9627f57a43084518a138a1d8097e35a364db0eff63471a8") version("1.5-2", sha256="492674b30a465e5f4a22ba0ce5556ed4d8e57b29090f9b5b94ad655d064e6f8b") version("1.5-1", sha256="73328b30774bb0767d613d7f2b60b75706b19fab864c712645ea18181f1af327") @@ -30,3 +31,10 @@ class RTclust(RPackage): version("1.1-02", sha256="f73c0d7a495552f901b710cf34e114c0ba401d5a17c48156313245904bcccad4") depends_on("r@2.12.0:", type=("build", "run")) + depends_on("r@3.6.2:", type=("build", "run"), when="@1.5-6:") + + depends_on("r-doparallel", type=("build", "run"), when="@2.0:") + depends_on("r-foreach", type=("build", "run"), when="@2.0:") + depends_on("r-mass", type=("build", "run"), when="@2.0:") + depends_on("r-rcpp@1.0.7:", type=("build", "run"), when="@2.0:") + depends_on("r-rcpparmadillo", type=("build", "run"), when="@2.0:") diff --git a/var/spack/repos/builtin/packages/r-teachingdemos/package.py b/var/spack/repos/builtin/packages/r-teachingdemos/package.py index 72d8ccbcc41aed..45c58294c5047d 100644 --- a/var/spack/repos/builtin/packages/r-teachingdemos/package.py +++ b/var/spack/repos/builtin/packages/r-teachingdemos/package.py @@ -15,6 +15,7 @@ class RTeachingdemos(RPackage): cran = "TeachingDemos" + version("2.13", sha256="f80eb952b7d1a0cde3bed8152f9c4e9eceaa3f635209b2af9a11e785e8c0fbcc") version("2.12", sha256="3e75405ce1affa406d6df85e06f96381412bc7a2810b25d8c81bfe64c4698644") version("2.10", sha256="2ef4c2e36ba13e32f66000e84281a3616584c86b255bca8643ff3fe4f78ed704") diff --git a/var/spack/repos/builtin/packages/r-tensora/package.py b/var/spack/repos/builtin/packages/r-tensora/package.py index 1e962ddcdbfa52..0c1c67061f70ec 100644 --- a/var/spack/repos/builtin/packages/r-tensora/package.py +++ b/var/spack/repos/builtin/packages/r-tensora/package.py @@ -18,6 +18,7 @@ class RTensora(RPackage): license("GPL-2.0-or-later") + version("0.36.2.1", sha256="06588261fe7dff6a8edafe2b9d436b39a3b46c754f2ed327ae6322561a617db7") version("0.36.2", sha256="8e8947566bd3b65a54de4269df1abaa3d49cf5bfd2a963c3274a524c8a819ca7") version("0.36.1", sha256="c7ffe12b99867675b5e9c9f31798f9521f14305c9d9f9485b171bcbd8697d09c") version("0.36", sha256="97b3e72f26ca3a756d045008764d787a32c68f0a276fb7a29b6e1b4592fdecf6") diff --git a/var/spack/repos/builtin/packages/r-terra/package.py b/var/spack/repos/builtin/packages/r-terra/package.py index d71f827e72ae34..7f4abc51edbd3e 100644 --- a/var/spack/repos/builtin/packages/r-terra/package.py +++ b/var/spack/repos/builtin/packages/r-terra/package.py @@ -23,6 +23,7 @@ class RTerra(RPackage): license("GPL-3.0-or-later") + version("1.7-78", sha256="658956b79d8a1371aefdf7300316f1756b58d436ba549ade012307684b2d4b7e") version("1.7-29", sha256="3f39b052a34c9f1166a342be4c25bbdc1e2c81402edb734901d63fc6fa547ca5") version("1.6-17", sha256="db888f4220ca511332f4d011345b2b207fcc1de26d2eae473e0eeb5dfd8bbc02") version("1.5-21", sha256="091ee928ccaa6561aa9f8ee6c1c99f139dc89f1653c2a76a035cca14d404f43f") diff --git a/var/spack/repos/builtin/packages/r-tester/package.py b/var/spack/repos/builtin/packages/r-tester/package.py index 3d25497a42a403..ee8387ad3125e1 100644 --- a/var/spack/repos/builtin/packages/r-tester/package.py +++ b/var/spack/repos/builtin/packages/r-tester/package.py @@ -15,6 +15,7 @@ class RTester(RPackage): license("GPL-3.0-only") + version("0.2.0", sha256="bec8141b8572ca8d19a270a2eaec23aa4c01a167f32f2e05a4bf353418a0020b") version("0.1.7", sha256="b9c645119c21c69450f3d366c911ed92ac7c14ef61652fd676a38fb9d420b5f4") depends_on("r@3.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-testthat/package.py b/var/spack/repos/builtin/packages/r-testthat/package.py index 756b98bad21d8d..dcf74f0b19e7a5 100644 --- a/var/spack/repos/builtin/packages/r-testthat/package.py +++ b/var/spack/repos/builtin/packages/r-testthat/package.py @@ -17,6 +17,7 @@ class RTestthat(RPackage): license("MIT") + version("3.2.1.1", sha256="d785ce3975939e28b61048b0e28d881c80904534ff21e5b1a79a0a934124e9f7") version("3.1.7", sha256="1ad86b1739481c6c46359a6634ecc706bf513f34b26d7a62cbc719bbd4658eab") version("3.1.5", sha256="a8f56b9426206ddfc30b550c82ff2f042ebe1c2f5bfd4184aec8facac8f5b7fc") version("3.1.4", sha256="a47eec031b4e186a8bd331031371b2347063a283050eca2adbfaa37d7a6c9c09") @@ -29,34 +30,52 @@ class RTestthat(RPackage): version("1.0.2", sha256="0ef7df0ace1fddf821d329f9d9a5d42296085350ae0d94af62c45bd203c8415e") depends_on("r@3.1:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@3.2.0:") depends_on("r-brio", type=("build", "run"), when="@3.0.1:") + depends_on("r-brio@1.1.3:", type=("build", "run"), when="@3.2.0:") depends_on("r-callr@3.5.1:", type=("build", "run"), when="@3.0.1:") + depends_on("r-callr@3.7.3:", type=("build", "run"), when="@3.2.0:") depends_on("r-cli", type=("build", "run"), when="@2.0.0:") depends_on("r-cli@2.2.0:", type=("build", "run"), when="@3.0.1:") depends_on("r-cli@3.3.0:", type=("build", "run"), when="@3.1.4:") depends_on("r-cli@3.4.0:", type=("build", "run"), when="@3.1.5:") + depends_on("r-cli@3.6.1:", type=("build", "run"), when="@3.2.0:") depends_on("r-desc", type=("build", "run"), when="@3.0.1:") + depends_on("r-desc@1.4.2:", type=("build", "run"), when="@3.2.0:") depends_on("r-digest", type=("build", "run")) - depends_on("r-ellipsis", type=("build", "run"), when="@2.3.2:") - depends_on("r-ellipsis@0.2.0:", type=("build", "run"), when="@3.0.1:") + depends_on("r-digest@0.6.33:", type=("build", "run"), when="@3.2.0:") depends_on("r-evaluate", type=("build", "run"), when="@2.2.0:") + depends_on("r-evaluate@0.21:", type=("build", "run"), when="@3.2.0:") depends_on("r-jsonlite", type=("build", "run"), when="@3.0.1:") + depends_on("r-jsonlite@1.8.7:", type=("build", "run"), when="@3.2.0:") depends_on("r-lifecycle", type=("build", "run"), when="@3.0.1:") + depends_on("r-lifecycle@1.0.3:", type=("build", "run"), when="@3.2.0:") depends_on("r-magrittr", type=("build", "run")) + depends_on("r-magrittr@2.0.3:", type=("build", "run"), when="@3.2.0:") depends_on("r-pkgload", type=("build", "run"), when="@2.3.2:") + depends_on("r-pkgload@1.3.2.1:", type=("build", "run"), when="@3.2.0:") depends_on("r-praise", type=("build", "run")) + depends_on("r-praise@1.0.0:", type=("build", "run"), when="@3.2.0:") depends_on("r-processx", type=("build", "run"), when="@3.0.1:") + depends_on("r-processx@3.8.2:", type=("build", "run"), when="@3.2.0:") depends_on("r-ps@1.3.4:", type=("build", "run"), when="@3.0.1:") + depends_on("r-ps@1.7.5:", type=("build", "run"), when="@3.2.0:") depends_on("r-r6@2.2.0:", type=("build", "run")) + depends_on("r-r6@2.5.1:", type=("build", "run"), when="@3.2.0:") depends_on("r-rlang@0.3.0:", type=("build", "run"), when="@2.0.0:") depends_on("r-rlang@0.4.1:", type=("build", "run"), when="@2.3.2:") depends_on("r-rlang@0.4.9:", type=("build", "run"), when="@3.0.1:") depends_on("r-rlang@1.0.1:", type=("build", "run"), when="@3.1.4:") + depends_on("r-rlang@1.1.1:", type=("build", "run"), when="@3.2.0:") depends_on("r-waldo@0.2.1:", type=("build", "run"), when="@3.0.1:") depends_on("r-waldo@0.2.4:", type=("build", "run"), when="@3.1.1:") depends_on("r-waldo@0.4.0:", type=("build", "run"), when="@3.1.4:") + depends_on("r-waldo@0.5.1:", type=("build", "run"), when="@3.2.0:") depends_on("r-withr@2.0.0:", type=("build", "run"), when="@2.0.0:") depends_on("r-withr@2.3.0:", type=("build", "run"), when="@3.0.1:") depends_on("r-withr@2.4.3:", type=("build", "run"), when="@3.1.2:") + depends_on("r-withr@2.5.0:", type=("build", "run"), when="@3.2.0:") depends_on("r-crayon@1.3.4:", type=("build", "run"), when="@:3.1.4") + depends_on("r-ellipsis", type=("build", "run"), when="@2.3.2:3.2.0") + depends_on("r-ellipsis@0.2.0:", type=("build", "run"), when="@3.0.1:3.2.0") diff --git a/var/spack/repos/builtin/packages/r-textshaping/package.py b/var/spack/repos/builtin/packages/r-textshaping/package.py index 877fe54114bf6a..1c75b421d14a4e 100644 --- a/var/spack/repos/builtin/packages/r-textshaping/package.py +++ b/var/spack/repos/builtin/packages/r-textshaping/package.py @@ -18,11 +18,15 @@ class RTextshaping(RPackage): license("MIT") + version("0.4.0", sha256="35e940786bb278560de61bb55d4f46f8c86c878d0461613ceb8c98ba9b239d7a") version("0.3.6", sha256="80e2c087962f55ce2811fbc798b09f5638c06c6b28c10cd3cb3827005b902ada") depends_on("r@3.2.0:", type=("build", "run")) - depends_on("r-systemfonts@1.0.0:", type=("build", "run")) depends_on("r-cpp11@0.2.1:", type=("build", "run")) + depends_on("r-lifecycle", type=("build", "run"), when="@0.4.0:") + depends_on("r-systemfonts@1.0.0:", type=("build", "run")) + depends_on("r-systemfonts@1.1.0:", type=("build", "run"), when="@0.4.0:") + depends_on("pkgconfig", type="build") depends_on("freetype") depends_on("harfbuzz") depends_on("fribidi") diff --git a/var/spack/repos/builtin/packages/r-tictoc/package.py b/var/spack/repos/builtin/packages/r-tictoc/package.py index 726315142308af..ad06c0a532a4c9 100644 --- a/var/spack/repos/builtin/packages/r-tictoc/package.py +++ b/var/spack/repos/builtin/packages/r-tictoc/package.py @@ -22,6 +22,7 @@ class RTictoc(RPackage): license("Apache-2.0 OR custom") + version("1.2.1", sha256="8fcdb7c9a1e4b4817bcab654effd64dea6ec749a7901d4060d5b5c625fc88833") version("1.2", sha256="f05ea4b4142a90b0dc5d10356be3748625ef86bbd0e4399c56455654165ff20c") version("1.1", sha256="120f868ba276bda70c8edef5d6c092586cf73db0fa02eb5459d8f55350fb474d") version("1.0.1", sha256="a09a1535c417ddf6637bbbda5fca6edab6c7f7b252a64e57e99d4d0748712705") diff --git a/var/spack/repos/builtin/packages/r-tidycensus/package.py b/var/spack/repos/builtin/packages/r-tidycensus/package.py index 19b3865c0dd573..855763530f7882 100644 --- a/var/spack/repos/builtin/packages/r-tidycensus/package.py +++ b/var/spack/repos/builtin/packages/r-tidycensus/package.py @@ -20,6 +20,7 @@ class RTidycensus(RPackage): license("MIT") + version("1.6.5", sha256="b846406eeff21cf8035f6cfe0479eadb5fec67e02ef7106294f9d2ddff45f122") version("1.3.2", sha256="ca47323f19c94a3c767bef59986f4a6cb4e455b3eb21ea64f1b3d6339443c515") version("1.2.3", sha256="23bc58bb6e20e1056e40dca55a49576b5e186fdb324f00fa9d5c07fb675f32ff") version("1.2.2", sha256="5cdbb92314061c9d8d3d62f623699fa115d7faae1f4a961d55ab905538f8e7cc") diff --git a/var/spack/repos/builtin/packages/r-tidygraph/package.py b/var/spack/repos/builtin/packages/r-tidygraph/package.py index 0b4496c6edda6c..4331c3fa9056c9 100644 --- a/var/spack/repos/builtin/packages/r-tidygraph/package.py +++ b/var/spack/repos/builtin/packages/r-tidygraph/package.py @@ -19,6 +19,7 @@ class RTidygraph(RPackage): license("MIT") + version("1.3.1", sha256="aac1d4bb9396081bbeecbde11a3cd1a26a56bd6b1f608a628b359cb37c18ac1a") version("1.2.3", sha256="b09c06b12583ae57edd1ec01e61a0e1b7a4b82358361fb28a6046dbece475687") version("1.2.2", sha256="d555cad6b5b56bd2edaa29950a0fd15942e972db21561bfd5cd64fd9a8936470") version("1.2.1", sha256="2fbdc2db18c5ad48c72f14d2d04111f4b0d4c434ad87c280eda3bcb98673ad36") @@ -30,6 +31,8 @@ class RTidygraph(RPackage): depends_on("r-dplyr@0.8.5:", type=("build", "run"), when="@1.2.0:") depends_on("r-igraph", type=("build", "run")) depends_on("r-igraph@1.3.0:", type=("build", "run"), when="@1.2.3:") + depends_on("r-igraph@2.0.0:", type=("build", "run"), when="@1.3.1:") + depends_on("r-lifecycle", type=("build", "run"), when="@1.3.0:") depends_on("r-magrittr", type=("build", "run")) depends_on("r-rlang", type=("build", "run")) depends_on("r-r6", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-tidyr/package.py b/var/spack/repos/builtin/packages/r-tidyr/package.py index 1a690a07a22aa3..3e9d7eb748e170 100644 --- a/var/spack/repos/builtin/packages/r-tidyr/package.py +++ b/var/spack/repos/builtin/packages/r-tidyr/package.py @@ -21,6 +21,7 @@ class RTidyr(RPackage): license("MIT") + version("1.3.1", sha256="e820c261cb5543f572f49276a7bdc7302aa4215da4bf850b1b939a315353835d") version("1.3.0", sha256="8d532b9366fdd3ec9827b51830e559a49d073425007c766025f0e603964e0a9d") version("1.2.1", sha256="6971766d3663dc75c2328ab257816f4e42d9fdc05c2d87d171b8b9b5ecce61af") version("1.2.0", sha256="8cd01da9e97827521d01ea50b9225f2705c46b7538bbf74bec6249a04c1213a8") @@ -33,6 +34,7 @@ class RTidyr(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4.0:", type=("build", "run"), when="@1.3.0:") + depends_on("r@3.6:", type=("build", "run"), when="@1.3.1:") depends_on("r-dplyr@0.7.0:", type=("build", "run")) depends_on("r-dplyr@0.8.2:", type=("build", "run"), when="@1.1.2:") depends_on("r-dplyr@1.0.0:", type=("build", "run"), when="@1.2.0:") @@ -46,6 +48,7 @@ class RTidyr(RPackage): depends_on("r-purrr@1.0.1:", type=("build", "run"), when="@1.3.0:") depends_on("r-rlang", type=("build", "run")) depends_on("r-rlang@1.0.4:", type=("build", "run"), when="@1.3.0:") + depends_on("r-rlang@1.1.1:", type=("build", "run"), when="@1.3.1:") depends_on("r-tibble", type=("build", "run")) depends_on("r-tibble@2.1.1:", type=("build", "run"), when="@1.1.2:") depends_on("r-tidyselect@0.2.5:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-tidyselect/package.py b/var/spack/repos/builtin/packages/r-tidyselect/package.py index 91c1235e7bc1b8..e7fcba5f2c31f1 100644 --- a/var/spack/repos/builtin/packages/r-tidyselect/package.py +++ b/var/spack/repos/builtin/packages/r-tidyselect/package.py @@ -17,6 +17,7 @@ class RTidyselect(RPackage): license("MIT") + version("1.2.1", sha256="169e97ba0bbfbcdf4a80534322751f87a04370310c40e27f04aac6525d45903c") version("1.2.0", sha256="538d26b727e37d618e2efd3b00836048f103112a03e6994bf07a02392e269e3b") version("1.1.2", sha256="0389a3b15417954a30d6d692f6ebdd3d0f318cb94a5c9b05365df2f4ea1d8270") version("1.1.1", sha256="18eb6a6746196a81ce19ee6cbf1db0c33f494177b97e2419312ef25a00ae486b") @@ -38,10 +39,11 @@ class RTidyselect(RPackage): depends_on("r-vctrs@0.2.2:", type=("build", "run"), when="@1.1.0:") depends_on("r-vctrs@0.3.0:", type=("build", "run"), when="@1.1.1:") depends_on("r-vctrs@0.4.1:", type=("build", "run"), when="@1.2.0:") + depends_on("r-vctrs@0.5.2:", type=("build", "run"), when="@1.2.1:") depends_on("r-rcpp@0.12.0:", type=("build", "run"), when="@:0.2.5") depends_on("r-cli@3.3.0:", type=("build", "run"), when="@1.2.0:") depends_on("r-ellipsis", type=("build", "run"), when="@1.1.0:1.1.2") - depends_on("r-purrr", type=("build", "run")) + depends_on("r-purrr", type=("build", "run"), when="@:1.1.2") depends_on("r-purrr@0.3.2:", type=("build", "run"), when="@1.1.0:1.1.2") diff --git a/var/spack/repos/builtin/packages/r-tidytree/package.py b/var/spack/repos/builtin/packages/r-tidytree/package.py index 53ec7b519e7722..9636cedcd1b67c 100644 --- a/var/spack/repos/builtin/packages/r-tidytree/package.py +++ b/var/spack/repos/builtin/packages/r-tidytree/package.py @@ -18,6 +18,7 @@ class RTidytree(RPackage): license("Artistic-2.0") + version("0.4.6", sha256="dba909ba767283fa76795a67e048ff1c8cd339c7e44f64c9698c70ecb3d92292") version("0.4.2", sha256="cb831a66d8afa5e21f5072e4fbebcbd2228881090d0040f87605f5aeefda155e") version("0.4.1", sha256="fbc4364d17e1b1c26ed06af0cdf36c88a5bc562fdbd4731ab179e30bba4009eb") version("0.3.9", sha256="12435d4f4c4d734b2a758cb13eb3b44bdfa8fdfa79a6e81fb99f7ce3a5d82edf") diff --git a/var/spack/repos/builtin/packages/r-tiff/package.py b/var/spack/repos/builtin/packages/r-tiff/package.py index b99b115da6047f..d133e132af148f 100644 --- a/var/spack/repos/builtin/packages/r-tiff/package.py +++ b/var/spack/repos/builtin/packages/r-tiff/package.py @@ -17,6 +17,7 @@ class RTiff(RPackage): license("GPL-2.0-only OR GPL-3.0-only") + version("0.1-12", sha256="df10ce719f92597572763182f7cb03686b8d7fb9123d036a4daf5b10738e815c") version("0.1-11", sha256="b8c3ea15114d972f8140541c7b01f5ce2e5322af1f63c1a083aaf766fd3eec75") version("0.1-10", sha256="535154e89e85e14fe697469d2c59826a44c7937e7eca2eaca1aee6b0fe320afe") version("0.1-6", sha256="623bd9c16a426df7e6056738c5d91da86ea9b49df375eea6b5127e4e458dc4fb") diff --git a/var/spack/repos/builtin/packages/r-tigris/package.py b/var/spack/repos/builtin/packages/r-tigris/package.py index cb556f39c81f92..909fe240eaf374 100644 --- a/var/spack/repos/builtin/packages/r-tigris/package.py +++ b/var/spack/repos/builtin/packages/r-tigris/package.py @@ -16,6 +16,7 @@ class RTigris(RPackage): license("MIT") + version("2.1", sha256="796bed6ce003323815d606886472bf21c101656fca8a593daa3b69cb3bd6fd97") version("2.0.1", sha256="d87c6b0c11ffb967699d345c6bfcfa82581a0753e1130bf0c927b2960b074d8c") version("1.6.1", sha256="927e8da3f7120bcc10f0b4ded95687512693e069f082eea7aea6302a2f1b2db2") version("1.6", sha256="fa14fbbaf44f5ade1cc92e6e4e4ed2e775bc7c106310711d16b0135a948a1661") diff --git a/var/spack/repos/builtin/packages/r-timechange/package.py b/var/spack/repos/builtin/packages/r-timechange/package.py index 27425f56bdb623..97ffb606e87390 100644 --- a/var/spack/repos/builtin/packages/r-timechange/package.py +++ b/var/spack/repos/builtin/packages/r-timechange/package.py @@ -21,6 +21,7 @@ class RTimechange(RPackage): license("GPL-3.0-only") + version("0.3.0", sha256="d85c0b5514ab9578d16032e703c33f197feaed1a424c834ebfcbf0ad46ae46b4") version("0.2.0", sha256="3d602008052123daef94a5c3f5154c5461b4ec0432ab70c37273d7ddd252f7f1") version("0.1.1", sha256="8503919d233d7d7b81fe47692f0f2d6742ff4cae7320a5522bf98f077f5d7f70") diff --git a/var/spack/repos/builtin/packages/r-timedate/package.py b/var/spack/repos/builtin/packages/r-timedate/package.py index 60d51b27944ea9..c299e1ba86bff2 100644 --- a/var/spack/repos/builtin/packages/r-timedate/package.py +++ b/var/spack/repos/builtin/packages/r-timedate/package.py @@ -21,6 +21,7 @@ class RTimedate(RPackage): cran = "timeDate" + version("4032.109", sha256="402841bda47e8c31f49773de2ff5447e9780bc7c8af5fb18be9287b546fcb958") version("4022.108", sha256="a5949b4fe2f6bdff751fc0793df8e3150cc25c078d48a28c066c10a6c4bfceef") version("4021.106", sha256="14adf1ec6cbd80f11a243fa66ea943725a7a4c75923ae2d8e424235d500b10e2") version("3043.102", sha256="377cba03cddab8c6992e31d0683c1db3a73afa9834eee3e95b3b0723f02d7473") diff --git a/var/spack/repos/builtin/packages/r-tinytex/package.py b/var/spack/repos/builtin/packages/r-tinytex/package.py index 754386ac724945..71efa6f83af93e 100644 --- a/var/spack/repos/builtin/packages/r-tinytex/package.py +++ b/var/spack/repos/builtin/packages/r-tinytex/package.py @@ -20,6 +20,7 @@ class RTinytex(RPackage): license("MIT") + version("0.52", sha256="932a713b9fdd52fe8869e8c38d03f15602f2c02ec543d4dabffde2a3981f513a") version("0.45", sha256="0c2fbbd09e80af80ca6b685bf0653f070da97b85413d39af966aba28f376e92c") version("0.42", sha256="205f7a1978118aa38b6d9f7d3e1667c635da262b43967d1a879520284c2e22b1") version("0.39", sha256="f22e9b77c200fe44cc073b759c2b2bc3310a2382d897282548aa02dcbabc25ed") diff --git a/var/spack/repos/builtin/packages/r-tinytiger/package.py b/var/spack/repos/builtin/packages/r-tinytiger/package.py index 930f366c341531..832df344c2f882 100644 --- a/var/spack/repos/builtin/packages/r-tinytiger/package.py +++ b/var/spack/repos/builtin/packages/r-tinytiger/package.py @@ -23,13 +23,15 @@ class RTinytiger(RPackage): license("MIT") + version("0.0.9", sha256="fe9b1098a2d1d4722f8a7657a9244afcd3d6b7f4f112fc6a92c2fb75da07de59") version("0.0.4", sha256="818328b5095d9e8b302f1a04d004cd3ec6e62d945dbd757fe15e9ab768a7459e") version("0.0.3", sha256="841d92dd4185b9bff5eef0d3635805c5a3efb1bc4ff0a1101ef264417e37921c") depends_on("r@2.0.0:", type=("build", "run")) depends_on("r@2.10:", type=("build", "run"), when="@0.0.4:") - depends_on("r-rlang") depends_on("r-cli") depends_on("r-glue") depends_on("r-curl") depends_on("r-sf") + + depends_on("r-rlang", type=("build", "run"), when="@:0.0.8") diff --git a/var/spack/repos/builtin/packages/r-tseries/package.py b/var/spack/repos/builtin/packages/r-tseries/package.py index 55c8888de3986d..bf8fa57c602a31 100644 --- a/var/spack/repos/builtin/packages/r-tseries/package.py +++ b/var/spack/repos/builtin/packages/r-tseries/package.py @@ -13,6 +13,7 @@ class RTseries(RPackage): license("GPL-2.0-only") + version("0.10-57", sha256="18754bb7642728916e30e67cb75462a296699b9b1f2ef1fb9803199f00f89bee") version("0.10-53", sha256="ec388ee6d022752bbebbecbf22d793d31f3734982e3f2e3ffd8dde14bffcca56") version("0.10-52", sha256="9399c8dbedb3b44b8b3b854f6e8867e0a14f3727a7aa66ec9c6eff069ead8f45") version("0.10-51", sha256="a55f20704883710ab58ea479e20cf0f263c50d54282f693793cda4af664c207f") @@ -23,6 +24,8 @@ class RTseries(RPackage): version("0.10-42", sha256="827f79858715c700e8cabd2c27853ba88ad0e05eb043bc94e126b155a75546c4") depends_on("r@2.10.0:", type=("build", "run")) + depends_on("r@3.4.0:", type=("build", "run"), when="@0.10-57:") + depends_on("r-jsonlite", type=("build", "run"), when="@0.10-54:") depends_on("r-quadprog", type=("build", "run")) depends_on("r-zoo", type=("build", "run")) depends_on("r-quantmod@0.4-9:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-ttr/package.py b/var/spack/repos/builtin/packages/r-ttr/package.py index 74b7203b52c63d..9517b98fcd209e 100644 --- a/var/spack/repos/builtin/packages/r-ttr/package.py +++ b/var/spack/repos/builtin/packages/r-ttr/package.py @@ -15,6 +15,7 @@ class RTtr(RPackage): cran = "TTR" + version("0.24.4", sha256="89732b9c359bae2f41cd23db649f0897c10fab0702d780c4c25a997322710284") version("0.24.3", sha256="4d9aef32647664be5cf965b05f21ed62cde9425fa87c21530852e05ef7aaba87") version("0.24.2", sha256="2587b988d9199474a19470b9b999b99133d0d8aa45410813e05c5f0ed763711b") version("0.23-4", sha256="eb17604da986213b3b924f0af65c3d089502a658a253ee34f6b8f6caccf6bfa2") diff --git a/var/spack/repos/builtin/packages/r-tweenr/package.py b/var/spack/repos/builtin/packages/r-tweenr/package.py index 254f43f96f19b3..ec6b9f42303346 100644 --- a/var/spack/repos/builtin/packages/r-tweenr/package.py +++ b/var/spack/repos/builtin/packages/r-tweenr/package.py @@ -19,6 +19,7 @@ class RTweenr(RPackage): license("MIT") + version("2.0.3", sha256="efabe512a45d653787ba40f87f3e23add4037f88573a102fa9ac7a5ff43c8cbe") version("2.0.2", sha256="64bbfded418d4880e3636f434571c20303d2f66be6950d64583a864fbb661ff3") version("1.0.2", sha256="1805f575da6705ca4e5ec1c4605222fc826ba806d9ff9af41770294fe08ff69f") version("1.0.1", sha256="efd68162cd6d5a4f6d833dbf785a2bbce1cb7b9f90ba3fb060931a4bd705096b") diff --git a/var/spack/repos/builtin/packages/r-tzdb/package.py b/var/spack/repos/builtin/packages/r-tzdb/package.py index 8f606a1a1e9e43..596b3a4acd95d6 100644 --- a/var/spack/repos/builtin/packages/r-tzdb/package.py +++ b/var/spack/repos/builtin/packages/r-tzdb/package.py @@ -23,10 +23,12 @@ class RTzdb(RPackage): license("MIT") + version("0.4.0", sha256="4253c66041bdddfd463c98183bf0052fbcacdb7c5cff9eadbb858b3dcf9d3a23") version("0.3.0", sha256="6099f0ec1fba692b51b4360aa776902a39f10dae815933c31994b8e4d4277038") version("0.2.0", sha256="c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9") depends_on("r@3.3:", type=("build", "run")) depends_on("r@3.4.0:", type=("build", "run"), when="@0.3.0:") + depends_on("r@3.5.0:", type=("build", "run"), when="@0.4.0:") depends_on("r-cpp11@0.4.0:", type=("build", "run")) depends_on("r-cpp11@0.4.2:", type=("build", "run"), when="@0.3.0:") diff --git a/var/spack/repos/builtin/packages/r-ucminf/package.py b/var/spack/repos/builtin/packages/r-ucminf/package.py index ba6dc6e92af8bc..76ec1fef1b1727 100644 --- a/var/spack/repos/builtin/packages/r-ucminf/package.py +++ b/var/spack/repos/builtin/packages/r-ucminf/package.py @@ -19,5 +19,8 @@ class RUcminf(RPackage): license("GPL-2.0-or-later") + version("1.2.2", sha256="4bdb6ae769fa49a167cfdc92dc544ba3b6f34df6c08810cfb0c55613aff5bd29") version("1.1-4.1", sha256="01a5b6f373ad267d22e2c29b8f7b6e31a1a148e48f4413e6a38e51aa049976b2") version("1.1-4", sha256="a2eb382f9b24e949d982e311578518710f8242070b3aa3314a331c1e1e7f6f07") + + depends_on("r@3.5.0:", when="@1.2.0:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-units/package.py b/var/spack/repos/builtin/packages/r-units/package.py index 01ebe5a976f5de..83719b38cac0ea 100644 --- a/var/spack/repos/builtin/packages/r-units/package.py +++ b/var/spack/repos/builtin/packages/r-units/package.py @@ -22,6 +22,7 @@ class RUnits(RPackage): license("GPL-2.0-only") + version("0.8-5", sha256="d95e80af760b053e10a1e33ce1f0c1280a84e84bd4b1d9c34d1fe9fc153603b1") version("0.8-1", sha256="d3e1ba246b4c97205bc3da3cf45d6b5bd5c196b8d421b84b4e94b2090985cd9a") version("0.8-0", sha256="9c46fe138e8c1c3d3a51268776412f02d09673656516148cccb71b1071beb21a") version("0.7-2", sha256="b90be023431100632b3081747af9e743e615452b4ad38810991f7b024b7040eb") diff --git a/var/spack/repos/builtin/packages/r-urca/package.py b/var/spack/repos/builtin/packages/r-urca/package.py index 2dcbdb474b29a5..178ceca85b7ac8 100644 --- a/var/spack/repos/builtin/packages/r-urca/package.py +++ b/var/spack/repos/builtin/packages/r-urca/package.py @@ -16,6 +16,7 @@ class RUrca(RPackage): license("GPL-2.0-or-later") + version("1.3-4", sha256="fe3d6ce5041f1e7caaf3137dfb6187640bcd2d208e19c59ee1202355ac0acb16") version("1.3-3", sha256="43baa8b6735f8325a69e6a43686f4fecd77a0eb7f60da25b4fc5c51b9271e9f1") version("1.3-0", sha256="621cc82398e25b58b4a16edf000ed0a1484d9a0bc458f734e97b6f371cc76aaa") diff --git a/var/spack/repos/builtin/packages/r-usethis/package.py b/var/spack/repos/builtin/packages/r-usethis/package.py index 497cfe55a70646..70eafc1274bc59 100644 --- a/var/spack/repos/builtin/packages/r-usethis/package.py +++ b/var/spack/repos/builtin/packages/r-usethis/package.py @@ -18,6 +18,7 @@ class RUsethis(RPackage): license("MIT") + version("3.0.0", sha256="98f850f9ceaae37eb16ccd1232275b4e8f818c115c67151fa99096c477f7ccb5") version("2.1.6", sha256="31dc6707577065ac1d4acb7d4cbf135942727c5cc2699092198c544be86f6818") version("2.1.5", sha256="7d539e16ecdc1cd45ba1a215d42d8b9c16bc38280ddd27048003dbb37b16f052") version("2.0.0", sha256="22aa2b59f36a8701a4648554c7b0e010253bf917a0f431f06efac7d8a6b59854") @@ -26,6 +27,7 @@ class RUsethis(RPackage): depends_on("r@3.2:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@2.1.5:") + depends_on("r@3.6:", type=("build", "run"), when="@2.2.0:") depends_on("r-cli", type=("build", "run"), when="@1.6.1:") depends_on("r-cli@3.0.1:", type=("build", "run"), when="@2.1.5:") depends_on("r-clipr@0.3.0:", type=("build", "run")) @@ -33,6 +35,7 @@ class RUsethis(RPackage): depends_on("r-curl@2.7:", type=("build", "run")) depends_on("r-desc", type=("build", "run")) depends_on("r-desc@1.4.0:", type=("build", "run"), when="@2.1.5:") + depends_on("r-desc@1.4.2:", type=("build", "run"), when="@2.2.0:") depends_on("r-fs@1.3.0:", type=("build", "run")) depends_on("r-gert@1.0.2:", type=("build", "run"), when="@2.0.0:") depends_on("r-gert@1.4.1:", type=("build", "run"), when="@2.1.5:") @@ -50,6 +53,7 @@ class RUsethis(RPackage): depends_on("r-rlang@0.4.3:", type=("build", "run"), when="@1.6.1:") depends_on("r-rlang@0.4.10:", type=("build", "run"), when="@2.1.5:") depends_on("r-rlang@1.0.0:", type=("build", "run"), when="@2.1.6:") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@2.2.0:") depends_on("r-rprojroot@1.2:", type=("build", "run")) depends_on("r-rstudioapi", type=("build", "run")) depends_on("r-whisker", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-utf8/package.py b/var/spack/repos/builtin/packages/r-utf8/package.py index ac87cb8e0464e9..09a2d22c500403 100644 --- a/var/spack/repos/builtin/packages/r-utf8/package.py +++ b/var/spack/repos/builtin/packages/r-utf8/package.py @@ -16,6 +16,7 @@ class RUtf8(RPackage): license("Apache-2.0 OR custom") + version("1.2.4", sha256="418f824bbd9cd868d2d8a0d4345545c62151d321224cdffca8b1ffd98a167b7d") version("1.2.3", sha256="c0a88686591f4ad43b52917d0964e9df4c62d8858fe25135a1bf357dfcbd6347") version("1.2.2", sha256="a71aee87d43a9bcf29249c7a5a2e9ca1d2a836e8d5ee3a264d3062f25378d8f4") version("1.1.4", sha256="f6da9cadfc683057d45f54b43312a359cf96ec2731c0dda18a8eae31d1e31e54") diff --git a/var/spack/repos/builtin/packages/r-uuid/package.py b/var/spack/repos/builtin/packages/r-uuid/package.py index a8b3bcc731ec23..deecee84276ca7 100644 --- a/var/spack/repos/builtin/packages/r-uuid/package.py +++ b/var/spack/repos/builtin/packages/r-uuid/package.py @@ -17,6 +17,7 @@ class RUuid(RPackage): license("MIT") + version("1.2-1", sha256="f90e49733d7d6ea7cf91abdc07b7d0e9a34a4b993e6914d754f0621281fc4b96") version("1.1-0", sha256="e75b50ee7dc8c4c8e7083023e954ffd1c6a004431bf5e9094463e46aa760f42f") version("1.0-3", sha256="456e4633659f20242fd7cd585ad005a3e07265f1d1db383fca6794c8ac2c8346") version("0.1-4", sha256="98e0249dda17434bfa209c2058e9911e576963d4599be9f7ea946e664f8ca93e") diff --git a/var/spack/repos/builtin/packages/r-uwot/package.py b/var/spack/repos/builtin/packages/r-uwot/package.py index c5e5d78dbdb689..c18015609e45cc 100644 --- a/var/spack/repos/builtin/packages/r-uwot/package.py +++ b/var/spack/repos/builtin/packages/r-uwot/package.py @@ -24,6 +24,7 @@ class RUwot(RPackage): license("GPL-3.0-or-later") + version("0.2.2", sha256="d9938c43d29530d4b36d1b2649cc679b09945a740db2cd3a266242b1aa9a6cd1") version("0.1.14", sha256="8016e8192b7e72604ca71840cbe43fa1d2caed8a8ad7cbf20e85cd3b384a9fe0") version("0.1.11", sha256="4fcf90f1369a2a1f01db9e05a2365b155b2ada8e51e1f7f3ba5122d86affd41b") version("0.1.10", sha256="6ee1b6027bce679cd5a35f647f516a5b327632234bcf323c7f3d5b5e10807d23") @@ -36,6 +37,7 @@ class RUwot(RPackage): depends_on("r-rcppannoy@0.0.17:", type=("build", "run"), when="@0.1.10:") depends_on("r-irlba", type=("build", "run")) depends_on("r-rcppprogress", type=("build", "run")) + depends_on("r-rspectra", type=("build", "run"), when="@0.2.2:") depends_on("r-dqrng", type=("build", "run")) depends_on("r-rcppparallel", type=("build", "run"), when="@:0.1.3") diff --git a/var/spack/repos/builtin/packages/r-v8/package.py b/var/spack/repos/builtin/packages/r-v8/package.py index 423c952e82b8e6..0d4dbf747dfa27 100644 --- a/var/spack/repos/builtin/packages/r-v8/package.py +++ b/var/spack/repos/builtin/packages/r-v8/package.py @@ -15,6 +15,7 @@ class RV8(RPackage): cran = "V8" + version("5.0.0", sha256="668fb759f973016e1e6aae21d711e83226d6895b43b2476c77feadf47896b21a") version("4.3.0", sha256="7e395c4faed0d2a9d647820269d2d374953fc67c6108d57d63e93ec570dbe0d0") version("4.2.2", sha256="50653527198637a37c010052f394839f50a3c643975aac1d04e42d36f8e5313b") version("4.2.1", sha256="99881af4798d11da0adccd8e4e1aa5dc4adccf5e3572724c14f6f90c2b8c3ff0") diff --git a/var/spack/repos/builtin/packages/r-vcd/package.py b/var/spack/repos/builtin/packages/r-vcd/package.py index 14933c740c03c0..47bb1bb196f176 100644 --- a/var/spack/repos/builtin/packages/r-vcd/package.py +++ b/var/spack/repos/builtin/packages/r-vcd/package.py @@ -20,6 +20,7 @@ class RVcd(RPackage): license("GPL-2.0-only") + version("1.4-12", sha256="c931ef115529931cddb1d5caec4d4d3569ebf12aadde719b2f5019812c9ded88") version("1.4-11", sha256="7a54e855689e1429d46e0d4d7a956f96b0ad2fd0c7084fa023902c55849e0932") version("1.4-10", sha256="7188192afa289350cc1b89790f4f8f5a5114c1c88bee7715a0c8f5347aa0b35b") version("1.4-9", sha256="a5b420ad5ff1a27fa92f98099a8b43f2dded7e5f60297b3e4d947ad6f039568f") diff --git a/var/spack/repos/builtin/packages/r-vcfr/package.py b/var/spack/repos/builtin/packages/r-vcfr/package.py index f8320ac87e6a56..a818ee8b6b5117 100644 --- a/var/spack/repos/builtin/packages/r-vcfr/package.py +++ b/var/spack/repos/builtin/packages/r-vcfr/package.py @@ -22,6 +22,7 @@ class RVcfr(RPackage): maintainers("dorton21") + version("1.15.0", sha256="df17e48b961d96f2a78a1a15037df674f57d0445f2669e401543d8082f0b49fa") version("1.14.0", sha256="8576dbd2e5a707dabc20acbbea3fe18b6a783910e622423ac203609a386204cb") version("1.13.0", sha256="743ce845732ada638f0f8a2cd789cd06aa25d818fec87c8bdb998f7c77089ebc") version("1.12.0", sha256="dd87ff010365de363864a44ca49887c0fdad0dd18d0d9c66e44e39c2d4581d52") diff --git a/var/spack/repos/builtin/packages/r-vegan/package.py b/var/spack/repos/builtin/packages/r-vegan/package.py index 5821e4b266fc5b..9fa33c733c0f49 100644 --- a/var/spack/repos/builtin/packages/r-vegan/package.py +++ b/var/spack/repos/builtin/packages/r-vegan/package.py @@ -16,6 +16,7 @@ class RVegan(RPackage): license("GPL-2.0-only") + version("2.6-6.1", sha256="7d2a5e700a6639bef203d6e35dfe6e8cc1dd7440957334317b61a9dafbb90b60") version("2.6-4", sha256="5d8ad4bebe79ae2bbd840a34100cf54c62f089c66ea484a542a201afcba21d06") version("2.6-2", sha256="ab77d110c959d19b0c6268ae0c8f78c897e2419eff3f1f7b19c1bb2f8db7c059") version("2.5-7", sha256="e63b586951ea7d8b0118811f329c700212892ec1db3b93951603ce1d68aa462a") @@ -27,6 +28,7 @@ class RVegan(RPackage): depends_on("r@3.1.0:", type=("build", "run"), when="@2.5-1") depends_on("r@3.2.0:", type=("build", "run"), when="@2.5-2:") depends_on("r@3.4.0:", type=("build", "run"), when="@2.5-5:") + depends_on("r@4.1.0:", type=("build", "run"), when="@2.6-6:") depends_on("r-permute@0.9-0:", type=("build", "run")) depends_on("r-lattice", type=("build", "run")) depends_on("r-mass", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-vgam/package.py b/var/spack/repos/builtin/packages/r-vgam/package.py index 1a51917d721f39..74191bc257e5d9 100644 --- a/var/spack/repos/builtin/packages/r-vgam/package.py +++ b/var/spack/repos/builtin/packages/r-vgam/package.py @@ -28,6 +28,7 @@ class RVgam(RPackage): cran = "VGAM" + version("1.1-11", sha256="de9d909bd2bcfccf55d24f96999e0780ca45ec29030e227a722eb24e378b33a5") version("1.1-8", sha256="d4c0f1d4e356d88ab6f39c05076ff97ebef6d20b7fbf1b0fa31d40c73d0ad1cc") version("1.1-7", sha256="a4c52d392332477eac557c84b732f3c03dd48f75db3884e23c71cf99d991757e") version("1.1-6", sha256="446a61bac5dd4794e05d20c2f3901eec54afac52c6e23ce2787c5575170dd417") diff --git a/var/spack/repos/builtin/packages/r-vioplot/package.py b/var/spack/repos/builtin/packages/r-vioplot/package.py index 8cf9bf66acbe59..59eab53e5da084 100644 --- a/var/spack/repos/builtin/packages/r-vioplot/package.py +++ b/var/spack/repos/builtin/packages/r-vioplot/package.py @@ -16,6 +16,7 @@ class RVioplot(RPackage): license("BSD-3-Clause") + version("0.5.0", sha256="b04e91ccb810573d13a2ac1136bc6e4747c4c663fa53ff1ce7327c1a13530965") version("0.4.0", sha256="5729b483e3a4f7c81d2cc22c8bc5211b64e289734e9da5b5696c4974067867b5") version("0.3.7", sha256="06475d9a47644245ec91598e9aaef7db1c393802d9fc314420ac5139ae56adb6") version("0.3.5", sha256="1b64833c1bd6851036cf1c400c7d0036a047e71def94a399c897263b4b303e2a") diff --git a/var/spack/repos/builtin/packages/r-vipor/package.py b/var/spack/repos/builtin/packages/r-vipor/package.py index aa0b4a3273a223..3151ccbb1ec14a 100644 --- a/var/spack/repos/builtin/packages/r-vipor/package.py +++ b/var/spack/repos/builtin/packages/r-vipor/package.py @@ -17,7 +17,9 @@ class RVipor(RPackage): license("GPL-2.0-or-later") + version("0.4.7", sha256="baad41e9ddaa13b5a1db1abab34253b27d5b99e5a6a649b2036aaf1483370b9e") version("0.4.5", sha256="7d19251ac37639d6a0fed2d30f1af4e578785677df5e53dcdb2a22771a604f84") version("0.4.4", sha256="5abfd7869dae42ae2e4f52206c23433a43b485b1220685e445877ee5864a3f5c") depends_on("r@3.0.0:", type=("build", "run")) + depends_on("r@3.5.0:", type=("build", "run"), when="@0.4.7:") diff --git a/var/spack/repos/builtin/packages/r-viridis/package.py b/var/spack/repos/builtin/packages/r-viridis/package.py index 8807a1a30115ca..4de67f1f7c012c 100644 --- a/var/spack/repos/builtin/packages/r-viridis/package.py +++ b/var/spack/repos/builtin/packages/r-viridis/package.py @@ -21,6 +21,7 @@ class RViridis(RPackage): license("MIT") + version("0.6.5", sha256="862b5cb6be115deea0207cdd3c8bb33de28552cfdc29900777512fd488d0005c") version("0.6.2", sha256="69b58cd1d992710a08b0b227fd0a9590430eea3ed4858099412f910617e41311") version("0.5.1", sha256="ddf267515838c6eb092938133035cee62ab6a78760413bfc28b8256165701918") version("0.5.0", sha256="fea477172c1e11be40554545260b36d6ddff3fe6bc3bbed87813ffb77c5546cd") diff --git a/var/spack/repos/builtin/packages/r-viridislite/package.py b/var/spack/repos/builtin/packages/r-viridislite/package.py index 4b6a08da391eb3..d9b31c46c7cf82 100644 --- a/var/spack/repos/builtin/packages/r-viridislite/package.py +++ b/var/spack/repos/builtin/packages/r-viridislite/package.py @@ -19,6 +19,7 @@ class RViridislite(RPackage): cran = "viridisLite" + version("0.4.2", sha256="893f111d31deccd2cc959bc9db7ba2ce9020a2dd1b9c1c009587e449c4cce1a1") version("0.4.1", sha256="a896db1ccae5fc1a8b3764d02f24cef74ef7a8341cf9f3401c4efe799870ea97") version("0.4.0", sha256="849955dc8ad9bc52bdc50ed4867fd92a510696fc8294e6971efa018437c83c6a") version("0.3.0", sha256="780ea12e7c4024d5ba9029f3a107321c74b8d6d9165262f6e64b79e00aa0c2af") diff --git a/var/spack/repos/builtin/packages/r-vroom/package.py b/var/spack/repos/builtin/packages/r-vroom/package.py index 9843483ddf7515..99af883c81db73 100644 --- a/var/spack/repos/builtin/packages/r-vroom/package.py +++ b/var/spack/repos/builtin/packages/r-vroom/package.py @@ -19,6 +19,7 @@ class RVroom(RPackage): license("MIT") + version("1.6.5", sha256="7bdca21e58c9c5049d7445d182f59fd399193cb2f4318d083de0a559ec9b5761") version("1.6.1", sha256="eb0e33d53212f9c7e8b38d632c98bd5015365cc13f55dadb15ff0d404b31807c") version("1.6.0", sha256="a718ccdf916442693af5392944774d8aec5ce48f417871f9de84dd1089d26ca6") version("1.5.7", sha256="d087cb148f71c222fc89199d03df2502689149873414a6d89c2f006d3a109fde") @@ -26,6 +27,7 @@ class RVroom(RPackage): depends_on("r@3.1:", type=("build", "run")) depends_on("r@3.4:", type=("build", "run"), when="@1.6.0:") + depends_on("r@3.6:", type=("build", "run"), when="@1.6.4:") depends_on("r-bit64", type=("build", "run")) depends_on("r-crayon", type=("build", "run")) depends_on("r-cli", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-waldo/package.py b/var/spack/repos/builtin/packages/r-waldo/package.py index 69b70bcd053bea..77ba7a5e26d182 100644 --- a/var/spack/repos/builtin/packages/r-waldo/package.py +++ b/var/spack/repos/builtin/packages/r-waldo/package.py @@ -17,10 +17,12 @@ class RWaldo(RPackage): license("MIT") + version("0.5.2", sha256="82cdae1ab2c5e7e5dbf5c6bdf832020b46e152732053fb45de7c9a81afdf2e05") version("0.4.0", sha256="57ee89eec9bcbba58cf8fa29c8e097f038768c30833eaf812682826333127eaa") version("0.3.1", sha256="ec2c8c1afbc413f8db8b6b0c6970194a875f616ad18e1e72a004bc4497ec019b") version("0.2.3", sha256="1fbab22fe9be6ca8caa3df7306c763d7025d81ab6f17b85daaf8bdc8c9455c53") + depends_on("r@3.6:", type=("build", "run"), when="@0.5.2:") depends_on("r-cli", type=("build", "run")) depends_on("r-diffobj", type=("build", "run")) depends_on("r-diffobj@0.3.4:", type=("build", "run"), when="@0.3.1:") diff --git a/var/spack/repos/builtin/packages/r-webshot/package.py b/var/spack/repos/builtin/packages/r-webshot/package.py index 044732bf6b8417..9f63294f240824 100644 --- a/var/spack/repos/builtin/packages/r-webshot/package.py +++ b/var/spack/repos/builtin/packages/r-webshot/package.py @@ -16,6 +16,7 @@ class RWebshot(RPackage): license("GPL-2.0-only") + version("0.5.5", sha256="d675913ccac80e0af8ee396f95a24124eae6c42d80aed9f47f7a88218ecbb913") version("0.5.4", sha256="3dc2b9baef7855e1deea060276b9ccc6375eee36b7100987cbb1f8e5cd7a8f24") version("0.5.3", sha256="b7c4f2be61c8c4730202a9c3604072478e30cb85b423b7497cd703cc3f49dbc0") version("0.5.2", sha256="f183dc970157075b51ac543550a7a48fa3428b9c6838abb72fe987c21982043f") diff --git a/var/spack/repos/builtin/packages/r-wgcna/package.py b/var/spack/repos/builtin/packages/r-wgcna/package.py index b11908f1052e60..55ffd8739e1aa8 100644 --- a/var/spack/repos/builtin/packages/r-wgcna/package.py +++ b/var/spack/repos/builtin/packages/r-wgcna/package.py @@ -20,6 +20,7 @@ class RWgcna(RPackage): cran = "WGCNA" + version("1.72-5", sha256="03439143ff235c17f0dbca7dd6362afa8ddb5a72594f5c2df1c6df1caca2e79d") version("1.72-1", sha256="1dbf82761ef3e76464b18fc9f698ad0f971aafecabf66ca937b950930bd57fdc") version("1.71", sha256="21f5349e888ea76241912600ee5c35a0d2fd50180568b9b08b2b597f099bf708") version("1.70-3", sha256="b9843b839728183af6b746f239e9519d438b294613362b556002acdb8522cbd4") diff --git a/var/spack/repos/builtin/packages/r-withr/package.py b/var/spack/repos/builtin/packages/r-withr/package.py index b678ee0b112e91..b0ec21dda4a1ec 100644 --- a/var/spack/repos/builtin/packages/r-withr/package.py +++ b/var/spack/repos/builtin/packages/r-withr/package.py @@ -18,6 +18,7 @@ class RWithr(RPackage): license("MIT") + version("3.0.1", sha256="d573f1ac2f733c7dd89669feb495d68f1f15d7a9774473c2e46a9848945a3841") version("2.5.0", sha256="37317b3ed790a08407072993a05ab255f6305f95a12a16e0e28aa6aa80fc8bc0") version("2.4.3", sha256="9bdac7459ccc6c2d599ecfd132a7f0aa68d958942d9fe7dbb0442c9eda129d4c") version("2.4.2", sha256="48f96a4cb780cf6fd5fbbea1f1eb04ea3102d7a4a644cae1ed1e91139dcbbac8") @@ -29,3 +30,4 @@ class RWithr(RPackage): depends_on("r@3.0.2:", type=("build", "run")) depends_on("r@3.2.0:", type=("build", "run"), when="@2.2:") + depends_on("r@3.6.0:", type=("build", "run"), when="@3.0.1:") diff --git a/var/spack/repos/builtin/packages/r-wk/package.py b/var/spack/repos/builtin/packages/r-wk/package.py index 4b3497b89d7649..d445018ee36207 100644 --- a/var/spack/repos/builtin/packages/r-wk/package.py +++ b/var/spack/repos/builtin/packages/r-wk/package.py @@ -20,6 +20,7 @@ class RWk(RPackage): license("MIT") + version("0.9.2", sha256="33675edd9baedb09bf69a3a55fec3190e2bf57a5f4f63f94bc06861b5e83e5f8") version("0.7.2", sha256="6f8b72f54e2efea62fda8bc897124b43a39b81cffa9569103d06d95f946eab2f") version("0.7.0", sha256="e24327d38f2ff2d502c67c60eba3b4e44079a64ed8b805df64f231dc4712a2de") version("0.6.0", sha256="af2c2837056a6dcc9f64d5ace29601d6d668c95769f855ca0329648d7326eaf5") diff --git a/var/spack/repos/builtin/packages/r-writexl/package.py b/var/spack/repos/builtin/packages/r-writexl/package.py new file mode 100644 index 00000000000000..84f8d76b47700a --- /dev/null +++ b/var/spack/repos/builtin/packages/r-writexl/package.py @@ -0,0 +1,20 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class RWritexl(RPackage): + """Zero-dependency data frame to xlsx exporter based on 'libxlsxwriter'. + Fast and no Java or Excel required.""" + + homepage = "https://docs.ropensci.org/writexl/" + cran = "writexl" + + license("BSD-2-Clause", checked_by="wdconinc") + + version("1.5.0", sha256="e253dc58f00abf51e9b727ae132e8b301e359fb23df0afc40c3ebec3fb096dce") + + depends_on("zlib-api", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-wru/package.py b/var/spack/repos/builtin/packages/r-wru/package.py index ef07ef21b40d83..a945fa30b920e1 100644 --- a/var/spack/repos/builtin/packages/r-wru/package.py +++ b/var/spack/repos/builtin/packages/r-wru/package.py @@ -25,6 +25,7 @@ class RWru(RPackage): license("GPL-3.0-or-later") + version("3.0.3", sha256="8430fc83609cda110eb340d104d408d362110d15d23208e7f5213cfeeb4a13b5") version("1.0.1", sha256="80b3f54cb2de77ea005755a2de3acfb923a1d380c0dbd52bc4d3e3fcb1d6f1fc") version("1.0.0", sha256="4eae65644981d0b99d3610adf40340b3606f40e6cd578e76a745524ba927e417") version("0.1-12", sha256="896ef4718109ab9fee686f050a3269cbab1589ef2aff7a45fc11a67f7bb35a29") @@ -45,6 +46,7 @@ class RWru(RPackage): depends_on("r@3.2.0:", type=("build", "run"), when="@0.0-1:") depends_on("r@3.5.0:", type=("build", "run"), when="@0.0-10:") depends_on("r@4.1.0:", type=("build", "run"), when="@1.0.0:") + depends_on("r-cli", type=("build", "run"), when="@3.0.0:") depends_on("r-devtools", type=("build", "run"), when="@0.0-2:0.1-12") depends_on("r-devtools@1.10.0:", type=("build", "run"), when="@0.1-1:0.1-12") depends_on("r-dplyr", type=("build", "run"), when="@1.0.0:") @@ -53,6 +55,8 @@ class RWru(RPackage): depends_on("r-purrr", type=("build", "run"), when="@1.0.0:") depends_on("r-rcpp", type=("build", "run"), when="@1.0.0:") depends_on("r-rcpparmadillo", type=("build", "run"), when="@1.0.0:") + depends_on("r-rlang", type=("build", "run"), when="@3.0.0:") depends_on("r-piggyback", type=("build", "run"), when="@1.0.0:") depends_on("r-piggyback@0.1.4:", type=("build", "run"), when="@1.0.0:") depends_on("r-pl94171", type=("build", "run"), when="@1.0.0:") + depends_on("r-tidyr", type=("build", "run"), when="@3.0.0:") diff --git a/var/spack/repos/builtin/packages/r-xfun/package.py b/var/spack/repos/builtin/packages/r-xfun/package.py index 57f44f4912a49b..84cc89d0684349 100644 --- a/var/spack/repos/builtin/packages/r-xfun/package.py +++ b/var/spack/repos/builtin/packages/r-xfun/package.py @@ -16,6 +16,7 @@ class RXfun(RPackage): license("MIT") + version("0.47", sha256="999874fdbf4df2e686a3cb134bfef782c0d3eb0141006191ca1eda94ce232c4b") version("0.39", sha256="d0ecaabb243dd3496da6029932fcdd4772914843de7ffd0b78a172efde1356c9") version("0.34", sha256="50e76c1febb988c044e44fb78e1abc1ba681173c9ff3c336f4c0ad71e6a2853d") version("0.33", sha256="45fbc2d252867b69bbde64d4a4e3d2e049ad1d3a84984e9cfb242d8d1f41ee6c") @@ -24,3 +25,5 @@ class RXfun(RPackage): version("0.24", sha256="e3e39a95202f6db4f6de3a8b9a344074a4944a3a8a522d44971390c905e2b583") version("0.20", sha256="284239d12a3d5ea7d1ef8b1382fb0a7a4661af54c85510501279681871da7c10") version("0.8", sha256="c2f8ecf8b57ddec02f9be7f417d9e22fc1ae2c7db8d70aa703fc62bf4a5c5416") + + depends_on("r@3.2.0:", when="@0.47:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-xgboost/package.py b/var/spack/repos/builtin/packages/r-xgboost/package.py index 9abb3f87a86dd4..317c910a4d8461 100644 --- a/var/spack/repos/builtin/packages/r-xgboost/package.py +++ b/var/spack/repos/builtin/packages/r-xgboost/package.py @@ -23,6 +23,7 @@ class RXgboost(RPackage): license("Apache-2.0 OR custom") + version("1.7.8.1", sha256="394d6fd00b2fe97549c7a7e6598df86448cdfbd7c0af45b0c17f7b9e81bc1be9") version("1.7.5.1", sha256="4ec0833f206f84e5983e9f373ea64903bec488f751fba6f75a6f4702b1c965bc") version("1.6.0.1", sha256="9ae99a20997e1b02ffd21cabada2a55e53f5754746238ee900de5eb6cd964ebd") version("1.5.0.2", sha256="4750b9a289d8cb685291939eed7c493bb42c5cc154ef98e13100abb1727eab13") @@ -40,9 +41,6 @@ class RXgboost(RPackage): depends_on("r-jsonlite@1.0:", type=("build", "run"), when="@1.5.0.2:") depends_on("gmake", type="build") - # This is not listed as required, but installation fails without it - # ERROR: dependency 'stringr' is not available for package 'xgboost' - depends_on("r-stringr", type=("build", "run")) - + depends_on("r-stringr", type=("build", "run"), when="@:0.7") depends_on("r-stringi@0.5.2:", type=("build", "run"), when="@:0.90.0.2") depends_on("r-magrittr@1.5:", type=("build", "run"), when="@:1.3.2.1") diff --git a/var/spack/repos/builtin/packages/r-xlconnect/package.py b/var/spack/repos/builtin/packages/r-xlconnect/package.py index a91a83c1bd823e..841cea86d5ac3f 100644 --- a/var/spack/repos/builtin/packages/r-xlconnect/package.py +++ b/var/spack/repos/builtin/packages/r-xlconnect/package.py @@ -14,6 +14,7 @@ class RXlconnect(RPackage): cran = "XLConnect" + version("1.0.10", sha256="e3c267cb1e6a6fb3a9fb132e60649182ee7a28e4e9188c72786fb843aad6e2b4") version("1.0.7", sha256="821dba231c3c3147455e7525119b51e5dc001984c638b7ce519d0974b32de677") version("1.0.6", sha256="b233b9f74d1464b78d5dd28bd8a1fa46ca6254518da2d3bda3c978a3f4aaa4f9") version("1.0.5", sha256="975c2ef57f28ccfac79ae5d285b7e82e60791fb121052616c10bc52e2bca16ad") diff --git a/var/spack/repos/builtin/packages/r-xml/package.py b/var/spack/repos/builtin/packages/r-xml/package.py index 7c69fe12e6ec30..a66775fda7d58a 100644 --- a/var/spack/repos/builtin/packages/r-xml/package.py +++ b/var/spack/repos/builtin/packages/r-xml/package.py @@ -15,6 +15,7 @@ class RXml(RPackage): cran = "XML" + version("3.99-0.17", sha256="6e233265ff69ff2f59f56fe4abc5af70e2cfa6d99aec6ad2afd2bf2c0d98a2d8") version("3.99-0.14", sha256="2cb6a61a4d8d89e311994f47df09913d4ce5281317d42c78af4aafd75a31f1f9") version("3.99-0.12", sha256="cb209425c886bf405dc03fda8854e819bd9b2d4e4b031c71c5120b7302a36d14") version("3.99-0.11", sha256="c523bd8e6419d44a477038396e9c3b3ec70a67ed85a0c9bfa8b9445f91647fc8") diff --git a/var/spack/repos/builtin/packages/r-xml2/package.py b/var/spack/repos/builtin/packages/r-xml2/package.py index 33165efa43f8e6..306c5aa0c3643c 100644 --- a/var/spack/repos/builtin/packages/r-xml2/package.py +++ b/var/spack/repos/builtin/packages/r-xml2/package.py @@ -16,6 +16,7 @@ class RXml2(RPackage): license("MIT") + version("1.3.6", sha256="e81991ff99bff3616dde8683c1327194e3ea64fa3b8062f52d8ce32673dd308f") version("1.3.3", sha256="cb4e9c0d31618ed67d2bfa4c7b5e52680e11612ed356a8164b541d44163c1c8d") version("1.3.2", sha256="df22f9e7e3189d8c9b8804eaf0105324fdac983cffe743552f6d76613600a4cf") version("1.2.2", sha256="3050f147c4335be2925a576557bbda36bd52a5bba3110d47b740a2dd811a78f4") @@ -23,7 +24,10 @@ class RXml2(RPackage): version("1.1.1", sha256="00f3e3b66b76760c19da5f6dddc98e6f30de36a96b211e59e1a3f4ff58763116") depends_on("r@3.1.0:", type=("build", "run")) + depends_on("r@3.6.0:", type=("build", "run"), when="@1.3.6:") depends_on("libxml2") - depends_on("r-rcpp@0.12.12:", type=("build", "run"), when="@:1.2") depends_on("r-bh", type=("build", "run"), when="@:1.1.1") + depends_on("r-cli", type=("build", "run"), when="@1.3.6:") + depends_on("r-rcpp@0.12.12:", type=("build", "run"), when="@:1.2") + depends_on("r-rlang@1.1.0:", type=("build", "run"), when="@1.3.6:") diff --git a/var/spack/repos/builtin/packages/r-xopen/package.py b/var/spack/repos/builtin/packages/r-xopen/package.py index e2086426414906..577246068b259c 100644 --- a/var/spack/repos/builtin/packages/r-xopen/package.py +++ b/var/spack/repos/builtin/packages/r-xopen/package.py @@ -16,6 +16,7 @@ class RXopen(RPackage): license("MIT") + version("1.0.1", sha256="e3b278b8c324a1aa2650141dd89d01253eea5c2555007422c797915689b29aec") version("1.0.0", sha256="e207603844d69c226142be95281ba2f4a056b9d8cbfae7791ba60535637b3bef") depends_on("r@3.1:", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-xts/package.py b/var/spack/repos/builtin/packages/r-xts/package.py index af45b05ae06b5d..468a19f8f9fa72 100644 --- a/var/spack/repos/builtin/packages/r-xts/package.py +++ b/var/spack/repos/builtin/packages/r-xts/package.py @@ -18,6 +18,7 @@ class RXts(RPackage): license("GPL-2.0-or-later") + version("0.14.0", sha256="d28b16eefa9876a815bad3fc204779c197e3a0d7796b8dae8856fe153f5fcfd9") version("0.13.1", sha256="2c3907c6d0162e48d1898647105bbb32cfe0cb005788481a64ee675a941d825d") version("0.13.0", sha256="188e4d1d8c3ec56a544dfb9da002e8aac80b9303d0a5a1f62ff0e960aeef9674") version("0.12.2", sha256="9c287ceaeb758ff4c9596be6a688db5683d50b45e7610e6d068891ca10dca743") diff --git a/var/spack/repos/builtin/packages/r-yaimpute/package.py b/var/spack/repos/builtin/packages/r-yaimpute/package.py index bee3635d39d8d5..6fda7d1e8c3886 100644 --- a/var/spack/repos/builtin/packages/r-yaimpute/package.py +++ b/var/spack/repos/builtin/packages/r-yaimpute/package.py @@ -22,6 +22,7 @@ class RYaimpute(RPackage): cran = "yaImpute" + version("1.0-34", sha256="b4c898c95fca784480bbbc239c78c85dc9f45a96c34c563ea7e81248ef8a8a73") version("1.0-33", sha256="58595262eb1bc9ffeeadca78664c418ea24b4e894744890c00252c5ebd02512c") version("1.0-32", sha256="08eee5d851b80aad9c7c80f9531aadd50d60e4b16b3a80657a50212269cd73ff") diff --git a/var/spack/repos/builtin/packages/r-yaml/package.py b/var/spack/repos/builtin/packages/r-yaml/package.py index f8cb214c859267..d9ada94424604a 100644 --- a/var/spack/repos/builtin/packages/r-yaml/package.py +++ b/var/spack/repos/builtin/packages/r-yaml/package.py @@ -16,6 +16,7 @@ class RYaml(RPackage): license("BSD-3-Clause") + version("2.3.10", sha256="e236d42d366e361d4855aa4f520260debd53a31e4786442b94770b045da02a6d") version("2.3.7", sha256="d20cb219e0f9c48aba02f132f81cfa9ecda5e22c925e36726840218ed56680ab") version("2.3.6", sha256="5dd19d8d6654ef2e4ccd6216ce8e96ca5185ae6143f95194955f6908a6e1ba26") version("2.3.5", sha256="3edf6c0554a0e184a25e8bec5721a2e66b4ab0dceb3737428e22705e52eb5140") diff --git a/var/spack/repos/builtin/packages/r-yulab-utils/package.py b/var/spack/repos/builtin/packages/r-yulab-utils/package.py index 30137e8782079b..a5de07b5736869 100644 --- a/var/spack/repos/builtin/packages/r-yulab-utils/package.py +++ b/var/spack/repos/builtin/packages/r-yulab-utils/package.py @@ -13,6 +13,15 @@ class RYulabUtils(RPackage): cran = "yulab.utils" + version("0.1.6", sha256="589be7ad1425f7d84dc3748f352fc432e494edb725209c05e28ca2a44f34beec") version("0.0.6", sha256="973a51b8d1284060aec34e94849eea6783439dbcbf85083dd4f1a5df4f927b25") version("0.0.5", sha256="6ecd4dc5dae40e86b7a462fdac3ab8c0b276dcae5a284eb43390a05b01e3056b") version("0.0.4", sha256="38850663de53a9166b8e85deb85be1ccf1a5b310bbe4355f3b8bc823ed1b49ae") + + depends_on("r-cli", when="@0.1.0:", type=("build", "run")) + depends_on("r-digest", when="@0.1.0:", type=("build", "run")) + depends_on("r-fs", when="@0.1.0:", type=("build", "run")) + depends_on("r-httr2", when="@0.1.6:", type=("build", "run")) + depends_on("r-rlang", when="@0.0.7:", type=("build", "run")) + + depends_on("r-memoise", when="@0.0.7:0.1.5", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/r-zcompositions/package.py b/var/spack/repos/builtin/packages/r-zcompositions/package.py index 110f4a120ed891..67ce6f10be70f0 100644 --- a/var/spack/repos/builtin/packages/r-zcompositions/package.py +++ b/var/spack/repos/builtin/packages/r-zcompositions/package.py @@ -16,6 +16,7 @@ class RZcompositions(RPackage): cran = "zCompositions" + version("1.5.0-4", sha256="73188e1e065a042723ed7a48df04e22317b204222d40744b83e8c392aae16aaf") version("1.4.0-1", sha256="33ee11f635cb87cc9c0617e1cfc91f1ac41c6cfe2b70fc441e226015939230e7") version("1.4.0", sha256="a00d7d0ba861988b1836e947fd521d58137a4def04a5d7aa73a099314b7e530c") version("1.3.4", sha256="ae22c86fe92368a26265933f42eecc518b9b69e7d9b698bc31bfaabfc3c48e95") diff --git a/var/spack/repos/builtin/packages/r-zip/package.py b/var/spack/repos/builtin/packages/r-zip/package.py index 8f17fba4579a3d..4d0dfe08deafaa 100644 --- a/var/spack/repos/builtin/packages/r-zip/package.py +++ b/var/spack/repos/builtin/packages/r-zip/package.py @@ -17,6 +17,7 @@ class RZip(RPackage): license("MIT") + version("2.3.1", sha256="83754408781c525917f36535865d28214893de0778b5f337e050cb543cacc28f") version("2.3.0", sha256="33eba844922af9981732ee6ec1582d46cf04c562344f09a0f0f14a22c6f74543") version("2.2.2", sha256="e16cde23bb283efbe9b6bce19575c716c371d09033b42514471ccb444c0a8ea4") version("2.2.1", sha256="14873d0874813139411c120d8b209af71e4e087871eeb963f235411eb1061422") diff --git a/var/spack/repos/builtin/packages/r/package.py b/var/spack/repos/builtin/packages/r/package.py index 478d4c5d8bdd8b..768952a3630294 100644 --- a/var/spack/repos/builtin/packages/r/package.py +++ b/var/spack/repos/builtin/packages/r/package.py @@ -69,8 +69,9 @@ class R(AutotoolsPackage): version("3.1.3", sha256="07e98323935baa38079204bfb9414a029704bb9c0ca5ab317020ae521a377312") version("3.1.2", sha256="bcd150afcae0e02f6efb5f35a6ab72432be82e849ec52ce0bb89d8c342a8fa7a") - depends_on("c", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") variant("X", default=False, description="Enable X11 support (TCLTK, PNG, JPEG, TIFF, CAIRO)") variant("memory_profiling", default=False, description="Enable memory profiling") diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py index 39f1d108629b0e..1894598f769141 100644 --- a/var/spack/repos/builtin/packages/raja/package.py +++ b/var/spack/repos/builtin/packages/raja/package.py @@ -448,7 +448,7 @@ def cmake_args(self): @property def build_relpath(self): """Relative path to the cmake build subdirectory.""" - return join_path("..", self.builder.build_dirname) + return join_path("..", self.build_dirname) @run_after("install") def setup_build_tests(self): diff --git a/var/spack/repos/builtin/packages/rankstr/package.py b/var/spack/repos/builtin/packages/rankstr/package.py index f9df699bcf1700..32e3cb13025e8b 100644 --- a/var/spack/repos/builtin/packages/rankstr/package.py +++ b/var/spack/repos/builtin/packages/rankstr/package.py @@ -19,13 +19,15 @@ class Rankstr(CMakePackage): license("MIT") version("main", branch="main") + version("0.4.0", sha256="f33c920aa67b867d0fa2001d98f6762e90f59a41b2f66c27a63cff6bd6afeb1b") version("0.3.0", sha256="5e6378a8fe155b4c6c5cf45db8aaf0562d88e93471d0e12c1e922252ffcce5e6") version("0.2.0", sha256="a3f7fd8015156c1b600946af759a03e099e05c83e7b2da6bac394fe7c0d4efae") version("0.1.0", sha256="b68239d67b2359ecc067cc354f86ccfbc8f02071e60d28ae0a2449f2e7f88001") version("0.0.3", sha256="d32052fbecd44299e13e69bf2dd7e5737c346404ccd784b8c2100ceed99d8cd3") version("0.0.2", sha256="b88357bf88cdda9565472543225d6b0fa50f0726f6e2d464c92d31a98b493abb") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("mpi") diff --git a/var/spack/repos/builtin/packages/raxml/package.py b/var/spack/repos/builtin/packages/raxml/package.py index 4691a5c496acb3..4d09f191e31a89 100644 --- a/var/spack/repos/builtin/packages/raxml/package.py +++ b/var/spack/repos/builtin/packages/raxml/package.py @@ -35,7 +35,6 @@ class Raxml(Package): conflicts("%apple-clang") conflicts("%clang") conflicts("%nag") - conflicts("%pgi") conflicts("%xl") conflicts("%xl_r") diff --git a/var/spack/repos/builtin/packages/redset/package.py b/var/spack/repos/builtin/packages/redset/package.py index 6ef28e138e6f17..b38e4b2f14fbfd 100644 --- a/var/spack/repos/builtin/packages/redset/package.py +++ b/var/spack/repos/builtin/packages/redset/package.py @@ -6,7 +6,7 @@ from spack.package import * -class Redset(CMakePackage): +class Redset(CMakePackage, CudaPackage): """Create MPI communicators for disparate redundancy sets""" homepage = "https://github.com/ecp-veloc/redset" @@ -19,6 +19,7 @@ class Redset(CMakePackage): license("MIT") version("main", branch="main") + version("0.4.0", sha256="d278a5d3c1323915c379e2077dbfab1248044c86a04fc56faee6681c66380451") version("0.3.0", sha256="007ca5e7e5f4400e22ad7bca82e366cd51c73f28067c955cc16d7d0ff0c06a1b") version("0.2.0", sha256="0438b0ba56dafcd5694a8fceeb5a932901307353e056ab29817d30b8387f787f") version("0.1.0", sha256="baa75de0d0d6de64ade50cff3d38ee89fd136ce69869182bdaefccf5be5d286d") @@ -38,7 +39,11 @@ class Redset(CMakePackage): depends_on("rankstr@:0.2.0", when="@:0.2.0") depends_on("rankstr@0.3.0:", when="@0.3.0:") - variant("shared", default=True, description="Build with shared libraries") + variant("cuda", default=False, description="Enable CUDA support", when="@0.4:") + variant("openmp", default=False, description="Enable OpenMP support", when="@0.4:") + variant("pthreads", default=False, description="Enable Pthread support", when="@0.4:") + + variant("shared", default=True, description="Build with shared libraries", when="@0.1:") depends_on("kvtree+shared", when="@0.1: +shared") depends_on("kvtree~shared", when="@0.1: ~shared") depends_on("rankstr+shared", when="@0.1: +shared") @@ -51,7 +56,9 @@ def cmake_args(self): args.append(self.define("WITH_KVTREE_PREFIX", spec["kvtree"].prefix)) args.append(self.define("WITH_RANKSTR_PREFIX", spec["rankstr"].prefix)) - if spec.satisfies("@0.1.0:"): - args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) + args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) + args.append(self.define_from_variant("ENABLE_CUDA", "cuda")) + args.append(self.define_from_variant("ENABLE_OPENMP", "openmp")) + args.append(self.define_from_variant("ENABLE_PTHREADS", "pthreads")) return args diff --git a/var/spack/repos/builtin/packages/restic/package.py b/var/spack/repos/builtin/packages/restic/package.py index e6144806699c50..2c3489e98e3049 100644 --- a/var/spack/repos/builtin/packages/restic/package.py +++ b/var/spack/repos/builtin/packages/restic/package.py @@ -16,6 +16,7 @@ class Restic(GoPackage): license("BSD-2-Clause") + version("0.17.3", sha256="bf0dd73edfae531c24070e2e7833938613f7b179ed165e6b681098edfdf286c8") version("0.17.1", sha256="cba3a5759690d11dae4b5620c44f56be17a5688e32c9856776db8a9a93d6d59a") version("0.16.4", sha256="d736a57972bb7ee3398cf6b45f30e5455d51266f5305987534b45a4ef505f965") version("0.16.3", sha256="a94d6c1feb0034fcff3e8b4f2d65c0678f906fc21a1cf2d435341f69e7e7af52") diff --git a/var/spack/repos/builtin/packages/rivet/package.py b/var/spack/repos/builtin/packages/rivet/package.py index 00ae0783dca58e..573888d0c47c22 100644 --- a/var/spack/repos/builtin/packages/rivet/package.py +++ b/var/spack/repos/builtin/packages/rivet/package.py @@ -19,6 +19,11 @@ class Rivet(AutotoolsPackage): license("GPL-3.0-or-later") + version("4.0.2", sha256="65a3b36f42bff782ed2767930e669e09b140899605d7972fc8f77785b4a882c0") + version("4.0.1", sha256="4e8692d6e8a53961c77983eb6ba4893c3765cf23f705789e4d865be4892eff79") + version("4.0.0", sha256="d3c42d9b83ede3e7f4b534535345c2e06e6dafb851454c2b0a5d2331ab0f04d0") + version("3.1.10", sha256="458b8e0df1de738e9972d24b260eaa087df12c99d4fe9dee5377d47ea6a49919") + version("3.1.9", sha256="f6532045da61eeb2adc20a9abc4166b4b2d41ab2c1ca5b500cd616bb1b92e7b1") version("3.1.8", sha256="75b3f3d419ca6388d1fd2ec0eda7e1f90f324b996ccf0591f48a5d2e28dccc13") version("3.1.7", sha256="27c7dbbcb5fd7ee81caf136daf4e960bca0ec255d9fa1abe602f4d430861b27a") version("3.1.6", sha256="1cf6ebb6a79d181c441d1d0c7c6d623c423817c61093f36f21adaae23e679090") @@ -34,7 +39,12 @@ class Rivet(AutotoolsPackage): depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated - variant("hepmc", default="2", values=("2", "3"), description="HepMC version to link against") + variant( + "hepmc", + default="2", + values=(conditional("2", when="@:3"), "3"), + description="HepMC version to link against", + ) # According to A. Buckley (main Rivet developer): # "typically a given Rivet version will work with @@ -48,8 +58,13 @@ class Rivet(AutotoolsPackage): depends_on("yoda@1.8.2", when="@3.1.1") depends_on("yoda@1.8.3", when="@3.1.2") depends_on("yoda@1.8.5:", when="@3.1.3:") - depends_on("yoda@1.9.5:", when="@3.1.6:") + depends_on("yoda@1.9.6:", when="@3.1.6:") depends_on("yoda@1.9.7:", when="@3.1.7:") + depends_on("yoda@1.9.8:", when="@3.1.8:") + depends_on("yoda@1.9.9:", when="@3.1.9:") + depends_on("yoda@1.9.10:", when="@3.1.10:") + depends_on("yoda@:1", when="@:3") + depends_on("yoda@2.0.1:", when="@4.0.0:") # The following versions were not a part of LCG stack # and thus the exact version of YODA is unknown @@ -57,9 +72,13 @@ class Rivet(AutotoolsPackage): depends_on("hepmc", when="hepmc=2") depends_on("hepmc3", when="hepmc=3") + conflicts( + "hepmc@3.3.0", when="@:4.0.0 hepmc=3", msg="patch-level zero requires at least 4.0.1" + ) depends_on("fastjet plugins=cxx") depends_on("fastjet@3.4.0:", when="@3.1.7:") depends_on("fjcontrib") + depends_on("highfive", when="@4:") depends_on("python", type=("build", "run")) depends_on("py-cython@0.24.0:", type="build") depends_on("swig", type="build") @@ -104,12 +123,16 @@ def configure_args(self): args += ["--with-hepmc=" + self.spec["hepmc"].prefix] else: args += ["--with-hepmc3=" + self.spec["hepmc3"].prefix] + args += ["--with-hepmc3-libpath=" + self.spec["hepmc3"].libs.directories[0]] args += ["--with-fastjet=" + self.spec["fastjet"].prefix] args += ["--with-yoda=" + self.spec["yoda"].prefix] args += ["--with-fjcontrib=" + self.spec["fjcontrib"].prefix] + if self.spec.satisfies("^highfive"): + args += ["--with-highfive=" + self.spec["highfive"].prefix] + args += ["--disable-pdfmanual"] return args diff --git a/var/spack/repos/builtin/packages/rmgdft/package.py b/var/spack/repos/builtin/packages/rmgdft/package.py index 8165f07d548f3b..233725205272f5 100644 --- a/var/spack/repos/builtin/packages/rmgdft/package.py +++ b/var/spack/repos/builtin/packages/rmgdft/package.py @@ -55,7 +55,6 @@ class Rmgdft(CMakePackage, CudaPackage): compiler_warning14 = "RMGDFT 4.0.0 or later requires a compiler with support for C++14" conflicts("%gcc@:4", when="@3.6.0:", msg=compiler_warning14) conflicts("%intel@:17", when="@3.6.0:", msg=compiler_warning14) - conflicts("%pgi@:17", when="@3.6.0:", msg=compiler_warning14) conflicts("%llvm@:3.4", when="@3.6.0:", msg=compiler_warning14) # RMGDFT 5.0.0 requires C++17 and increase the minimum gcc to 8 diff --git a/var/spack/repos/builtin/packages/rmlab/package.py b/var/spack/repos/builtin/packages/rmlab/package.py index 836f52039b2cf4..63f361d0a8d939 100644 --- a/var/spack/repos/builtin/packages/rmlab/package.py +++ b/var/spack/repos/builtin/packages/rmlab/package.py @@ -27,7 +27,6 @@ class Rmlab(CMakePackage): # C++11 conflicts("%gcc@:4.7") conflicts("%intel@:15") - conflicts("%pgi@:14") depends_on("pngwriter@0.6.0:", when="+png") diff --git a/var/spack/repos/builtin/packages/rocal/package.py b/var/spack/repos/builtin/packages/rocal/package.py index 84e45834935154..30902117ed0747 100644 --- a/var/spack/repos/builtin/packages/rocal/package.py +++ b/var/spack/repos/builtin/packages/rocal/package.py @@ -20,7 +20,8 @@ class Rocal(CMakePackage): version("6.2.1", sha256="77d3e63e02afaee6f1ee1d877d88b48c6ea66a0afca96a1313d0f1c4f8e86b2a") version("6.2.0", sha256="c7c265375a40d4478a628258378726c252caac424f974456d488fce43890e157") - depends_on("libjpeg-turbo@2.0.6+partial_decoder") + depends_on("libjpeg-turbo@2.0.6+partial_decoder", when="@6.2.0") + depends_on("libjpeg-turbo@3.0.2:", when="@6.2.1:") depends_on("rapidjson") depends_on("ffmpeg@4.4:") @@ -36,6 +37,56 @@ def patch(self): "rocAL/rocAL_hip/CMakeLists.txt", string=True, ) + filter_file( + r"${ROCM_PATH}/include/rocal", + "{0}/include/rocal".format(self.spec.prefix), + "tests/cpp_api/CMakeLists.txt", + string=True, + ) + filter_file( + r"${ROCM_PATH}/${CMAKE_INSTALL_INCLUDEDIR}/rocal", + "{0}/include/rocal".format(self.spec.prefix), + "tests/cpp_api/audio_tests/CMakeLists.txt", + "tests/cpp_api/image_augmentation/CMakeLists.txt", + "tests/cpp_api/basic_test/CMakeLists.txt", + "tests/cpp_api/performance_tests/CMakeLists.txt", + "tests/cpp_api/dataloader/CMakeLists.txt", + "tests/cpp_api/performance_tests_with_depth/CMakeLists.txt", + "tests/cpp_api/dataloader_multithread/CMakeLists.txt", + "tests/cpp_api/unit_tests/CMakeLists.txt", + "tests/cpp_api/dataloader_tf/CMakeLists.txt", + "tests/cpp_api/video_tests/CMakeLists.txt", + "tests/cpp_api/external_source/CMakeLists.txt", + string=True, + ) + filter_file( + r"${ROCM_PATH}/lib", + "{0}/lib".format(self.spec.prefix), + "tests/cpp_api/audio_tests/CMakeLists.txt", + "tests/cpp_api/image_augmentation/CMakeLists.txt", + "tests/cpp_api/basic_test/CMakeLists.txt", + "tests/cpp_api/performance_tests/CMakeLists.txt", + "tests/cpp_api/dataloader/CMakeLists.txt", + "tests/cpp_api/performance_tests_with_depth/CMakeLists.txt", + "tests/cpp_api/dataloader_multithread/CMakeLists.txt", + "tests/cpp_api/unit_tests/CMakeLists.txt", + "tests/cpp_api/dataloader_tf/CMakeLists.txt", + "tests/cpp_api/video_tests/CMakeLists.txt", + "tests/cpp_api/external_source/CMakeLists.txt", + string=True, + ) + filter_file( + r"${ROCM_PATH}/lib", + "{0}/lib".format(self.spec.prefix), + "tests/cpp_api/CMakeLists.txt", + string=True, + ) + filter_file( + r"${ROCM_PATH}/share/rocal", + "{0}/share/rocal".format(self.spec.prefix), + "tests/cpp_api/CMakeLists.txt", + string=True, + ) def cmake_args(self): args = [ @@ -45,3 +96,12 @@ def cmake_args(self): self.define("CMAKE_INSTALL_PREFIX_PYTHON", self.spec.prefix), ] return args + + def check(self): + print("test will run after install") + + @run_after("install") + @on_package_attributes(run_tests=True) + def check_install(self): + with working_dir(self.build_directory, create=True): + make("test") diff --git a/var/spack/repos/builtin/packages/rocdecode/package.py b/var/spack/repos/builtin/packages/rocdecode/package.py index 1f284de531949f..bac7679a15b5b4 100644 --- a/var/spack/repos/builtin/packages/rocdecode/package.py +++ b/var/spack/repos/builtin/packages/rocdecode/package.py @@ -33,6 +33,8 @@ class Rocdecode(CMakePackage): sticky=True, ) + depends_on("libva", type="build", when="@6.2:") + for ver in ["6.1.0", "6.1.1", "6.1.2", "6.2.0", "6.2.1"]: depends_on(f"hip@{ver}", when=f"@{ver}") diff --git a/var/spack/repos/builtin/packages/rocketmq/package.py b/var/spack/repos/builtin/packages/rocketmq/package.py index 33d73d444cbdc4..95925f2465d791 100644 --- a/var/spack/repos/builtin/packages/rocketmq/package.py +++ b/var/spack/repos/builtin/packages/rocketmq/package.py @@ -16,16 +16,23 @@ class Rocketmq(Package): homepage = "https://rocketmq.apache.org/" url = "https://archive.apache.org/dist/rocketmq/4.5.2/rocketmq-all-4.5.2-bin-release.zip" - license("Apache-2.0") - - version("4.6.0", sha256="584910d50639297808dd0b86fcdfaf431efd9607009a44c6258d9a0e227748fe") - version("4.5.2", sha256="f7711ef9c203d7133e70e0e1e887025d7dd80d29f6d5283ca6022b12576b8aba") - version("4.5.1", sha256="0c46e4b652b007d07e9c456eb2e275126b9210c27cd56bee518809f33c8ed437") - version("4.5.0", sha256="d75dc26291b47413f7c565bc65499501e3499f01beb713246586f72844e31042") - version("4.4.0", sha256="8a948e240e8d2ebbf4c40c180105d088a937f82a594cd1f2ae527b20349f1d34") - version("4.3.2", sha256="e31210a86266ee218eb6ff4f8ca6e211439895459c3bdad162067b573d9e3415") + license("Apache-2.0", checked_by="wdconinc") + + version("5.3.1", sha256="251d7261fa26d35eaffef6a2fce30880054af7a5883d578dd31574bf908a8b97") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-37582 + version("4.6.0", sha256="584910d50639297808dd0b86fcdfaf431efd9607009a44c6258d9a0e227748fe") + version("4.5.2", sha256="f7711ef9c203d7133e70e0e1e887025d7dd80d29f6d5283ca6022b12576b8aba") + version("4.5.1", sha256="0c46e4b652b007d07e9c456eb2e275126b9210c27cd56bee518809f33c8ed437") + version("4.5.0", sha256="d75dc26291b47413f7c565bc65499501e3499f01beb713246586f72844e31042") + version("4.4.0", sha256="8a948e240e8d2ebbf4c40c180105d088a937f82a594cd1f2ae527b20349f1d34") + version("4.3.2", sha256="e31210a86266ee218eb6ff4f8ca6e211439895459c3bdad162067b573d9e3415") depends_on("java@8:", type="run") + # UseBiasedLocking deprecated in java@15:, removed in java@21: + # https://openjdk.org/jeps/374, https://github.com/apache/rocketmq/pull/8809 + depends_on("java@:20", type="run") + def install(self, spec, prefix): install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/rocm-dbgapi/package.py b/var/spack/repos/builtin/packages/rocm-dbgapi/package.py index a1b1dfa21bc21d..2887b61fc751a2 100644 --- a/var/spack/repos/builtin/packages/rocm-dbgapi/package.py +++ b/var/spack/repos/builtin/packages/rocm-dbgapi/package.py @@ -19,7 +19,7 @@ class RocmDbgapi(CMakePackage): url = "https://github.com/ROCm/ROCdbgapi/archive/rocm-6.1.2.tar.gz" tags = ["rocm"] - maintainers("srekolam", "renjithravindrankannath") + maintainers("srekolam", "renjithravindrankannath", "afzpatel") libraries = ["librocm-dbgapi"] license("MIT") @@ -53,6 +53,7 @@ class RocmDbgapi(CMakePackage): depends_on("cxx", type="build") # generated depends_on("cmake@3:", type="build") depends_on("hwdata", when="@5.5.0:") + depends_on("pciutils", when="@5.5.0:") for ver in [ "5.3.0", @@ -123,4 +124,6 @@ def cmake_args(self): args = [] if self.spec.satisfies("@5.3.0:"): args.append(self.define("CMAKE_INSTALL_LIBDIR", "lib")) + if self.spec.satisfies("@5.5.0:"): + args.append(self.define("PCI_IDS_PATH", self.spec["pciutils"].prefix.share)) return args diff --git a/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py b/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py index 3586bef851b6e8..471b662d4b207e 100644 --- a/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py +++ b/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py @@ -155,7 +155,7 @@ class RocmOpenmpExtras(Package): license("Apache-2.0") - maintainers("srekolam", "renjithravindrankannath", "estewart08") + maintainers("srekolam", "renjithravindrankannath", "estewart08", "afzpatel") version("6.2.1", sha256=versions_dict["6.2.1"]["aomp"]) version("6.2.0", sha256=versions_dict["6.2.0"]["aomp"]) version("6.1.2", sha256=versions_dict["6.1.2"]["aomp"]) @@ -189,6 +189,7 @@ class RocmOpenmpExtras(Package): depends_on("libffi", type=("build", "link")) depends_on("libdrm", when="@5.7:6.0") depends_on("numactl", when="@5.7:6.0") + depends_on("zlib", when="@6.2:") for ver in [ "5.5.0", @@ -489,6 +490,7 @@ def install(self, spec, prefix): ffi_inc = spec["libffi"].prefix.include if self.spec.satisfies("@6.2:"): ncurses_lib_dir = self.spec["ncurses"].prefix.lib + zlib_lib_dir = self.spec["zlib"].prefix.lib # flang1 and flang2 symlink needed for build of flang-runtime # libdevice symlink to rocm-openmp-extras for runtime @@ -638,11 +640,12 @@ def install(self, spec, prefix): flang_legacy_flags.append("-D_GLIBCXX_USE_CXX11_ABI=0") if self.spec.satisfies("@6.2:"): flang_legacy_flags.append("-L{0}".format(ncurses_lib_dir)) + flang_legacy_flags.append("-L{0}".format(zlib_lib_dir)) components["flang-legacy-llvm"] += [ - "-DCMAKE_CXX_FLAGS={0}".format(",".join(flang_legacy_flags)) + "-DCMAKE_CXX_FLAGS={0}".format(" ".join(flang_legacy_flags)) ] components["flang-legacy"] += [ - "-DCMAKE_CXX_FLAGS={0}".format(",".join(flang_legacy_flags)) + "-DCMAKE_CXX_FLAGS={0}".format(" ".join(flang_legacy_flags)) ] components["flang"] = [ diff --git a/var/spack/repos/builtin/packages/rocm-tensile/package.py b/var/spack/repos/builtin/packages/rocm-tensile/package.py index de9da28b89764f..8cd72abd51532e 100644 --- a/var/spack/repos/builtin/packages/rocm-tensile/package.py +++ b/var/spack/repos/builtin/packages/rocm-tensile/package.py @@ -19,6 +19,7 @@ class RocmTensile(CMakePackage): license("MIT") maintainers("srekolam", "renjithravindrankannath", "haampie") + version("6.2.1", sha256="29802dc65a7cea29f0e2608782c75db87e9c71eea8aeb485e856cf2861d83098") version("6.2.0", sha256="6f7d679bfffd1f723f2788b00fdcb1b4673b597f9f85c2cdaab3c2aa17afb33d") version("6.1.2", sha256="6a08190f6d9c8cc76764a68e2dd3e7af4759d4146ddc1c4b3370c7762a6f6d83") version("6.1.1", sha256="04fd76e6a0e9b7528e61df0721b03c0e977c145a2a1ea331d515c9167d7ac35f") @@ -80,6 +81,7 @@ class RocmTensile(CMakePackage): "6.1.1", "6.1.2", "6.2.0", + "6.2.1", ]: depends_on(f"rocm-cmake@{ver}", type="build", when=f"@{ver}") depends_on(f"hip@{ver}", when=f"@{ver}") diff --git a/var/spack/repos/builtin/packages/rocm-validation-suite/009-replacing-rocm-path-with-package-path-6.2.1.patch b/var/spack/repos/builtin/packages/rocm-validation-suite/009-replacing-rocm-path-with-package-path-6.2.1.patch new file mode 100644 index 00000000000000..5283f5a25627fc --- /dev/null +++ b/var/spack/repos/builtin/packages/rocm-validation-suite/009-replacing-rocm-path-with-package-path-6.2.1.patch @@ -0,0 +1,686 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 7867e3a..7268387 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -74,14 +74,18 @@ endif(rocblas_FOUND) + # Making ROCM_PATH, CMAKE_INSTALL_PREFIX, CPACK_PACKAGING_INSTALL_PREFIX as CACHE + # variables since we will pass them as cmake params appropriately, and + # all find_packages relevant to this build will be in ROCM path hence appending it to CMAKE_PREFIX_PATH +-set(ROCM_PATH "/opt/rocm" CACHE PATH "ROCM install path") +-set(CMAKE_INSTALL_PREFIX "/opt/rocm" CACHE PATH "CMAKE installation directory") +-set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/rocm" CACHE PATH "Prefix used in built packages") ++set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") ++set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) ++set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + list(APPEND CMAKE_PREFIX_PATH "${ROCM_PATH}") +-set(ROCR_INC_DIR "${ROCM_PATH}/include" CACHE PATH "Contains header files exported by ROC Runtime" FORCE) +-set(ROCR_LIB_DIR "${ROCM_PATH}/lib" CACHE PATH "Contains library files exported by ROC Runtime" FORCE) +-set(HIP_INC_DIR "${ROCM_PATH}" CACHE PATH "Contains header files exported by ROC Runtime") +-set(ROCT_INC_DIR "${ROCM_PATH}/include" CACHE PATH "Contains header files exported by ROC Trunk" FORCE) ++set(ROCR_INC_DIR "${HSA_PATH}/include" CACHE PATH "Contains header files exported by ROC Runtime") ++set(ROCR_LIB_DIR "${HSA_PATH}/lib" CACHE PATH "Contains library files exported by ROC Runtime") ++set(HIP_INC_DIR "${HIP_PATH}" CACHE PATH "Contains header files exported by ROC Runtime") ++set(ROCT_INC_DIR "${ROCM_PATH}/include" CACHE PATH "Contains header files exported by ROC Trunk") ++set(HIPRAND_INC_DIR "${HIPRAND_DIR}/include" CACHE PATH "Contains header files exported by ROC Trunk") ++set(HIPRAND_LIB_DIR "${HIPRAND_DIR}/lib" CACHE PATH "Contains header files exported by ROC Trunk") ++set(ROCRAND_INC_DIR "${ROCRAND_DIR}/include" CACHE PATH "Contains header files exported by ROC Trunk") ++set(ROCRAND_LIB_DIR "${ROCRAND_DIR}/lib" CACHE PATH "Contains header files exported by ROC Trunk") + + add_definitions(-DROCM_PATH="${ROCM_PATH}") + if(FETCH_ROCMPATH_FROM_ROCMCORE) +@@ -443,15 +447,18 @@ add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/rvs_smi-build/librocm_smi64.so + + endif() # if (RVS_ROCMSMI EQUAL 1) + +-set(HIPRAND_INC_DIR "${ROCM_PATH}/include") +-set(HIPRAND_LIB_DIR "${ROCM_PATH}/lib") ++set(HIPRAND_INC_DIR "${HIPRAND_DIR}/include") ++set(HIPRAND_LIB_DIR "${HIPRAND_DIR}/lib") ++ ++set(ROCRAND_INC_DIR "${ROCRAND_DIR}/include") ++set(ROCRAND_LIB_DIR "${ROCRAND_DIR}/lib") + + if (RVS_ROCBLAS EQUAL 1) + set(ROCBLAS_INC_DIR "${CMAKE_BINARY_DIR}/rvs_rblas-src/build/release/rocblas-install") + set(ROCBLAS_LIB_DIR "${CMAKE_BINARY_DIR}/rvs_rblas-src/build/release/rocblas-install/lib/") + else() +- set(ROCBLAS_INC_DIR "${ROCM_PATH}/include") +- set(ROCBLAS_LIB_DIR "${ROCM_PATH}/lib") ++ set(ROCBLAS_INC_DIR "${ROCBLAS_DIR}/include") ++ set(ROCBLAS_LIB_DIR "${ROCBLAS_DIR}/lib") + endif() + + if (RVS_ROCMSMI EQUAL 1) +@@ -466,8 +473,8 @@ else() + set(ROCM_SMI_LIB_DIR "${ROCM_PATH}/rocm_smi/lib") + else() + message( STATUS "ROCBLAS REORG Enabled Version: ${RVS_ROCBLAS_VERSION_FLAT}" ) +- set(ROCM_SMI_INC_DIR "${ROCM_PATH}/include") +- set(ROCM_SMI_LIB_DIR "${ROCM_PATH}/lib") ++ set(ROCM_SMI_INC_DIR "${ROCM_SMI_DIR}/include") ++ set(ROCM_SMI_LIB_DIR "${ROCM_SMI_DIR}/lib") + endif() + endif() + set(ROCM_SMI_LIB "rocm_smi64" CACHE STRING "rocm_smi library name") +diff --git a/babel.so/CMakeLists.txt b/babel.so/CMakeLists.txt +index 54a0e3a..c9ddeaa 100644 +--- a/babel.so/CMakeLists.txt ++++ b/babel.so/CMakeLists.txt +@@ -109,13 +109,13 @@ set(HIP_HCC_LIB "amdhip64") + add_compile_options(-DRVS_ROCBLAS_VERSION_FLAT=${RVS_ROCBLAS_VERSION_FLAT}) + + # Determine Roc Runtime header files are accessible +-if(NOT EXISTS ${HIP_INC_DIR}/include/hip/hip_runtime.h) +- message("ERROR: ROC Runtime headers can't be found under specified path. Please set HIP_INC_DIR path. Current value is : " ${HIP_INC_DIR}) ++if(NOT EXISTS ${HIP_PATH}/include/hip/hip_runtime.h) ++ message("ERROR: ROC Runtime headers can't be found under specified path. Please set HIP_PATH path. Current value is : " ${HIP_PATH}) + RETURN() + endif() + +-if(NOT EXISTS ${HIP_INC_DIR}/include/hip/hip_runtime_api.h) +- message("ERROR: ROC Runtime headers can't be found under specified path. Please set HIP_INC_DIR path. Current value is : " ${HIP_INC_DIR}) ++if(NOT EXISTS ${HIP_PATH}/include/hip/hip_runtime_api.h) ++ message("ERROR: ROC Runtime headers can't be found under specified path. Please set HIP_PATH path. Current value is : " ${HIP_PATH}) + RETURN() + endif() + +@@ -135,16 +135,16 @@ if(DEFINED RVS_ROCMSMI) + endif() + + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") +- message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) ++if(NOT EXISTS "${HIP_PATH}/lib/lib${HIP_HCC_LIB}.so") ++ message("ERROR: ROC Runtime libraries can't be found under specified path. Please set HIP_PATH path. Current value is : " ${HIP_PATH}) + RETURN() + endif() + + ## define include directories +-include_directories(./ ../ ${ROCR_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${HIP_PATH}) + + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${HIP_PATH}/lib/ ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries + set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) + +@@ -156,7 +156,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB}) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB} ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +diff --git a/cmake_modules/tests_unit.cmake b/cmake_modules/tests_unit.cmake +index 9760b72..d585f8b 100644 +--- a/cmake_modules/tests_unit.cmake ++++ b/cmake_modules/tests_unit.cmake +@@ -27,7 +27,7 @@ + ## define additional unit testing include directories + include_directories(${UT_INC}) + ## define additional unit testing lib directories +-link_directories(${UT_LIB} ${RVS_LIB_DIR}) ++link_directories(${UT_LIB} ${RVS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + + file(GLOB TESTSOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} test/test*.cpp ) + #message ( "TESTSOURCES: ${TESTSOURCES}" ) +@@ -46,6 +46,7 @@ FOREACH(SINGLE_TEST ${TESTSOURCES}) + add_dependencies(${TEST_NAME} rvs_gtest_target) + target_link_libraries(${TEST_NAME} + ${UT_LINK_LIBS} rvslibut rvslib gtest_main gtest pthread pci ++ ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so + ) + target_compile_definitions(${TEST_NAME} PUBLIC RVS_UNIT_TEST) + if(DEFINED tcd.${TEST_NAME}) +diff --git a/edp.so/CMakeLists.txt b/edp.so/CMakeLists.txt +index 7dd34ea..41c8493 100644 +--- a/edp.so/CMakeLists.txt ++++ b/edp.so/CMakeLists.txt +@@ -128,17 +128,17 @@ if(DEFINED RVS_ROCMSMI) + endif() + + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() + + ## define include directories +-include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR} ${YAML_CPP_INCLUDE_DIRS} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpciaccess.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpciaccess.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set (SOURCES src/rvs_module.cpp src/action.cpp src/edp_worker.cpp ) +@@ -148,7 +148,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB}) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB} ${HIPRAND_LIB} ${ROCRAND_LIB}) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +diff --git a/gm.so/CMakeLists.txt b/gm.so/CMakeLists.txt +index d3caa84..94a06be 100644 +--- a/gm.so/CMakeLists.txt ++++ b/gm.so/CMakeLists.txt +@@ -118,11 +118,11 @@ if(DEFINED RVS_ROCMSMI) + endif() + + ## define include directories +-include_directories(./ ../ ${ROCM_SMI_INC_DIR}) ++include_directories(./ ../ ${ROCM_SMI_INC_DIR} ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so librocm_smi64.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/worker.cpp) +@@ -133,7 +133,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${ROCM_SMI_LIB}) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS}) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +@@ -149,7 +149,7 @@ install(FILES "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib${RVS}.so" + + # TEST SECTION + if (RVS_BUILD_TESTS) +- add_custom_command(TARGET ${RVS_TARGET} POST_BUILD ++ B_add_custom_command(TARGET ${RVS_TARGET} POST_BUILD + COMMAND ln -fs ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib${RVS}.so.${VERSION_MAJOR} ${RVS_BINTEST_FOLDER}/lib${RVS}.so WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ) + include(${CMAKE_CURRENT_SOURCE_DIR}/tests.cmake) +diff --git a/gm.so/tests.cmake b/gm.so/tests.cmake +index b360065..172e97c 100644 +--- a/gm.so/tests.cmake ++++ b/gm.so/tests.cmake +@@ -30,11 +30,11 @@ set(CORE_RUNTIME_NAME "hsa-runtime") + set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") + + set(UT_LINK_LIBS libpthread.so libpci.so libm.so libdl.so "lib${ROCM_SMI_LIB}.so" +- ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} ${HIPRAND_LIB} ++ ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} "lib${HIPRAND_LIB}.so" "lib${ROCRAND_LIB}.so" + ) + + # Add directories to look for library files to link +-link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR}) ++link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + + set (UT_SOURCES src/action.cpp src/worker.cpp + ) +diff --git a/gpup.so/CMakeLists.txt b/gpup.so/CMakeLists.txt +index 43d337a..c92d8ba 100644 +--- a/gpup.so/CMakeLists.txt ++++ b/gpup.so/CMakeLists.txt +@@ -109,11 +109,11 @@ else() + endif() + + ## define include directories +-include_directories(./ ../ include ../include) ++include_directories(./ ../ include ../include ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp) +diff --git a/gpup.so/tests.cmake b/gpup.so/tests.cmake +index 9a1f7ed..3649ae4 100644 +--- a/gpup.so/tests.cmake ++++ b/gpup.so/tests.cmake +@@ -25,12 +25,13 @@ + + set(ROCBLAS_LIB "rocblas") + set(HIPRAND_LIB "hiprand") ++set(ROCRAND_LIB "rocrand") + set(ROC_THUNK_NAME "hsakmt") + set(CORE_RUNTIME_NAME "hsa-runtime") + set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") + + set(UT_LINK_LIBS libpthread.so libm.so libdl.so ${ROCM_SMI_LIB} +- ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} ${HIPRAND_LIB}) ++ ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} ${HIPRAND_LIB} ${ROCRAND_LIB}) + + # Add directories to look for library files to link + link_directories(${RVS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR}) +diff --git a/gst.so/CMakeLists.txt b/gst.so/CMakeLists.txt +index fd346ce..7e17a68 100644 +--- a/gst.so/CMakeLists.txt ++++ b/gst.so/CMakeLists.txt +@@ -137,17 +137,17 @@ if(DEFINED RVS_ROCMSMI) + endif() + + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() + + ## define include directories +-include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR} ${YAML_CPP_INCLUDE_DIRS} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${HIP_INC_DIR}/lib/ ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_DIR} ${ROCRAND_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/gst_worker.cpp) +diff --git a/iet.so/CMakeLists.txt b/iet.so/CMakeLists.txt +index 002c03c..604b86b 100644 +--- a/iet.so/CMakeLists.txt ++++ b/iet.so/CMakeLists.txt +@@ -145,7 +145,7 @@ if(DEFINED RVS_ROCMSMI) + endif() + endif() + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() +@@ -160,11 +160,11 @@ if(DEFINED RVS_ROCMSMI) + endif() + + ## define include directories +-include_directories(./ ../ ${ROCM_SMI_INC_DIR} ${ROCBLAS_INC_DIR} ${ROCR_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCM_SMI_INC_DIR} ${ROCBLAS_INC_DIR} ${ROCR_INC_DIR} ${HIP_INC_DIR} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so librocm_smi64.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so ) + + set(SOURCES src/rvs_module.cpp src/action.cpp src/iet_worker.cpp ) + +@@ -173,7 +173,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB} ${ROCM_SMI_LIB}) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_INC_DIR}/lib/ ${HIP_HCC_LIB} ${ROCBLAS_LIB}) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +diff --git a/mem.so/CMakeLists.txt b/mem.so/CMakeLists.txt +index 5133337..3ba941f 100644 +--- a/mem.so/CMakeLists.txt ++++ b/mem.so/CMakeLists.txt +@@ -134,18 +134,18 @@ if(DEFINED RVS_ROCMSMI) + endif() + + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() + + ## define include directories +-include_directories(./ ../ ${ROCR_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCR_INC_DIR} ${HIP_INC_DIR} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${HIP_INC_DIR}/lib ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/rvs_memtest.cpp src/rvs_memworker.cpp) +diff --git a/pbqt.so/CMakeLists.txt b/pbqt.so/CMakeLists.txt +index 5ae675a..873a1e8 100644 +--- a/pbqt.so/CMakeLists.txt ++++ b/pbqt.so/CMakeLists.txt +@@ -136,11 +136,11 @@ if(NOT EXISTS ${ROCR_LIB_DIR}/${CORE_RUNTIME_LIBRARY}.so) + endif() + + ## define include directories +-include_directories(./ ../ pci ${ROCR_INC_DIR}) ++include_directories(./ ../ pci ${ROCR_INC_DIR} ${YAML_CPP_INCLUDE_DIRS} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCT_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${HSAKMT_LIB_DIR} ${ROCT_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/action_run.cpp +diff --git a/pebb.so/CMakeLists.txt b/pebb.so/CMakeLists.txt +index c4e2964..41a45f5 100644 +--- a/pebb.so/CMakeLists.txt ++++ b/pebb.so/CMakeLists.txt +@@ -137,11 +137,11 @@ if(NOT EXISTS ${ROCR_LIB_DIR}/${CORE_RUNTIME_LIBRARY}.so) + endif() + + ## define include directories +-include_directories(./ ../ pci ${ROCR_INC_DIR}) ++include_directories(./ ../ pci ${ROCR_INC_DIR} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCT_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${HSAKMT_LIB_DIR} ${ROCT_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR}/.. ${ROCRAND_LIB_DIR}/..) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/action_run.cpp +diff --git a/peqt.so/CMakeLists.txt b/peqt.so/CMakeLists.txt +index ead507d..d83c9e5 100644 +--- a/peqt.so/CMakeLists.txt ++++ b/peqt.so/CMakeLists.txt +@@ -107,11 +107,11 @@ else() + endif() + + ## define include directories +-include_directories(./ ../) ++include_directories(./ ../ ${HSA_PATH}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${HSA_PATH}/lib/ ${HSAKMT_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpci.so libm.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp) +@@ -121,7 +121,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +diff --git a/perf.so/CMakeLists.txt b/perf.so/CMakeLists.txt +index 518dac9..dfe05f5 100644 +--- a/perf.so/CMakeLists.txt ++++ b/perf.so/CMakeLists.txt +@@ -137,17 +137,17 @@ if(DEFINED RVS_ROCMSMI) + endif() + + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() + + ## define include directories +-include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${HIP_INC_DIR}/lib ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/perf_worker.cpp) +@@ -157,7 +157,7 @@ add_library( ${RVS_TARGET} SHARED ${SOURCES}) + set_target_properties(${RVS_TARGET} PROPERTIES + SUFFIX .so.${LIB_VERSION_STRING} + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) +-target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS} ${HIP_HCC_LIB} ${ROCBLAS_LIB}) ++target_link_libraries(${RVS_TARGET} ${PROJECT_LINK_LIBS}) + add_dependencies(${RVS_TARGET} rvslib) + + add_custom_command(TARGET ${RVS_TARGET} POST_BUILD +diff --git a/pesm.so/CMakeLists.txt b/pesm.so/CMakeLists.txt +index 1f27f34..502c1c8 100644 +--- a/pesm.so/CMakeLists.txt ++++ b/pesm.so/CMakeLists.txt +@@ -107,11 +107,11 @@ else() + endif() + + ## define include directories +-include_directories(./ ../ pci) ++include_directories(./ ../ pci ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR} ${HIPRAND_DIR} ${ROCRAND_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS libpthread.so libpci.so libm.so ${PROJECT_LINK_LIBS} ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp src/worker.cpp) +diff --git a/pesm.so/tests.cmake b/pesm.so/tests.cmake +index 2c72658..c6acbf4 100644 +--- a/pesm.so/tests.cmake ++++ b/pesm.so/tests.cmake +@@ -30,11 +30,11 @@ set(CORE_RUNTIME_NAME "hsa-runtime") + set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") + + set(UT_LINK_LIBS libpthread.so libpci.so libm.so libdl.so "lib${ROCM_SMI_LIB}.so" +- ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} ${HIPRAND_LIB} ++ ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} "lib${HIPRAND_LIB}.so" "lib${ROCRAND_LIB}.so" + ) + + # Add directories to look for library files to link +-link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${HIPRAND_LIB_DIR}) ++link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + + set (UT_SOURCES test/unitactionbase.cpp + ) +diff --git a/rcqt.so/CMakeLists.txt b/rcqt.so/CMakeLists.txt +index c0099ab..fcc82f3 100644 +--- a/rcqt.so/CMakeLists.txt ++++ b/rcqt.so/CMakeLists.txt +@@ -108,11 +108,11 @@ else() + endif() + + ## define include directories +-include_directories(./ ../) ++include_directories(./ ../ ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH} ${ASAN_LIB_PATH} ${HSAKMT_LIB_DIR} ${ROCM_SMI_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib) ++set (PROJECT_LINK_LIBS rvslib ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES +diff --git a/rvs/CMakeLists.txt b/rvs/CMakeLists.txt +index fc0118e..04c9abf 100644 +--- a/rvs/CMakeLists.txt ++++ b/rvs/CMakeLists.txt +@@ -34,6 +34,7 @@ set ( RVS "rvs" ) + set ( RVS_PACKAGE "rvs-roct" ) + set ( RVS_COMPONENT "lib${RVS}" ) + set ( RVS_TARGET "${RVS}" ) ++set ( YAML_CPP_LIBRARIES "${YAML_CPP_LIB_PATH}") + + project ( ${RVS_TARGET} ) + +@@ -115,20 +116,22 @@ endif() + ## define include directories + include_directories(./ ../ ${YAML_CPP_INCLUDE_DIRS}) + ## define lib directories +-link_directories(${CMAKE_CURRENT_BINARY_DIR} ${RVS_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH} ${HIPRAND_LIB_PATH}) ++link_directories(${CMAKE_CURRENT_BINARY_DIR} ${RVS_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR} ${RVS_LIB_DIR}/.. ${YAML_CPP_LIBRARIES}) + + ## additional libraries +-set(ROCBLAS_LIB "rocblas") +-set(ROC_THUNK_NAME "hsakmt") +-set(CORE_RUNTIME_NAME "hsa-runtime") +-set(HIPRAND_LIB "hiprand") +-set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") +-set(PROJECT_LINK_LIBS libdl.so libpthread.so libpci.so ${YAML_CPP_LIBRARIES}) ++set(ROCBLAS_LIB "${ROCBLAS_LIB_DIR}/librocblas.so") ++set(ROC_THUNK_NAME "${HSAKMT_LIB_DIR}/libhsakmt.a") ++set(CORE_RUNTIME_NAME "${HSA_PATH}/lib/libhsa-runtime64.so") ++set(YAML_CPP_LIB "${YAML_CPP_LIBRARIES}/libyaml-cpp.a") ++set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}") ++set(PROJECT_LINK_LIBS libdl.so libpthread.so libpci.so) ++set(HIPRAND_LIB "${HIPRAND_LIB_DIR}/libhiprand.so") ++set(ROCRAND_LIB "${ROCRAND_LIB_DIR}/librocrand.so") + + ## define target + add_executable(${RVS_TARGET} src/rvs.cpp) + target_link_libraries(${RVS_TARGET} rvslib +- ${ROCBLAS_LIB} ${ROCM_SMI_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${PROJECT_LINK_LIBS} ${HIPRAND_LIB}) ++ ${ROCBLAS_LIB} ${ROCM_SMI_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${PROJECT_LINK_LIBS} ${HIPRAND_LIB} ${YAML_CPP_LIB} ${ROCRAND_LIB}) + add_dependencies(${RVS_TARGET} rvslib) + + install(TARGETS ${RVS_TARGET} +diff --git a/rvs/tests.cmake b/rvs/tests.cmake +index c519482..64a4ad0 100644 +--- a/rvs/tests.cmake ++++ b/rvs/tests.cmake +@@ -32,17 +32,18 @@ + + set(ROCBLAS_LIB "rocblas") + set(HIPRAND_LIB "hiprand") ++set(ROCRAND_LIB "rocrand") + set(ROC_THUNK_NAME "hsakmt") + set(CORE_RUNTIME_NAME "hsa-runtime") + set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") + + ## define lib directories +-link_directories(${RVS_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${HIPRAND_LIB_DIR}) ++link_directories(${RVS_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + + ## define target for "test-to-fail" + add_executable(${RVS_TARGET}fail src/rvs.cpp) + target_link_libraries(${RVS_TARGET}fail rvslib rvslibut ${PROJECT_LINK_LIBS} +- ${ROCM_SMI_LIB} ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${ROCM_CORE} ${CORE_RUNTIME_TARGET} ${HIPRAND_LIB}) ++ ${ROCM_SMI_LIB} ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${ROCM_CORE} ${CORE_RUNTIME_TARGET} ${HIPRAND_LIB} ${ROCRAND_LIB}) + + target_compile_definitions(${RVS_TARGET}fail PRIVATE RVS_INVERT_RETURN_STATUS) + set_target_properties(${RVS_TARGET}fail PROPERTIES +@@ -211,7 +212,7 @@ FOREACH(SINGLE_TEST ${TESTSOURCES}) + ${PROJECT_LINK_LIBS} + ${PROJECT_TEST_LINK_LIBS} + rvslib rvslibut gtest_main gtest pthread +- ${ROCM_SMI_LIB} ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${HIPRAND_LIB} ++ ${ROCM_SMI_LIB} ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${HIPRAND_LIB} ${ROCRAND_LIB} + ) + add_dependencies(${TEST_NAME} rvs_gtest_target) + +diff --git a/rvslib/CMakeLists.txt b/rvslib/CMakeLists.txt +index 8d29590..18eb9f4 100644 +--- a/rvslib/CMakeLists.txt ++++ b/rvslib/CMakeLists.txt +@@ -116,7 +116,7 @@ endif() + + ## define include directories + include_directories(./ ../ ../rvs +- ${ROCM_SMI_INC_DIR} ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_INC_DIR}) ++ ${ROCM_SMI_INC_DIR} ${ROCR_INC_DIR} ${ROCBLAS_INC_DIR} ${HIP_PATH} ${YAML_CPP_INCLUDE_DIRS} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + + link_directories(${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR}) + +diff --git a/smqt.so/CMakeLists.txt b/smqt.so/CMakeLists.txt +index 042586f..285cb17 100644 +--- a/smqt.so/CMakeLists.txt ++++ b/smqt.so/CMakeLists.txt +@@ -106,11 +106,11 @@ else() + endif() + + ## define include directories +-include_directories(./ ../ pci) ++include_directories(./ ../ pci ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + ## define source files + set(SOURCES src/rvs_module.cpp src/action.cpp) +diff --git a/smqt.so/tests.cmake b/smqt.so/tests.cmake +index 76766de..804441a 100644 +--- a/smqt.so/tests.cmake ++++ b/smqt.so/tests.cmake +@@ -30,11 +30,11 @@ set(CORE_RUNTIME_NAME "hsa-runtime") + set(CORE_RUNTIME_TARGET "${CORE_RUNTIME_NAME}64") + + set(UT_LINK_LIBS libpthread.so libpci.so libm.so libdl.so "lib${ROCM_SMI_LIB}.so" +- ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} ${HIPRAND_LIB} ++ ${ROCBLAS_LIB} ${ROC_THUNK_NAME} ${CORE_RUNTIME_TARGET} ${ROCM_CORE} ${YAML_CPP_LIBRARIES} "lib${HIPRAND_LIB}.so" "lib${HIPRAND_LIB}.so" + ) + + # Add directories to look for library files to link +-link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${HIPRAND_LIB_DIR}) ++link_directories(${ROCM_SMI_LIB_DIR} ${ROCT_LIB_DIR} ${ROCBLAS_LIB_DIR} ${HIPRAND_LIB_DIR} ${ROCRAND_LIB_DIR}) + + set (UT_SOURCES src/action.cpp test/unitsmqt.cpp + ) +diff --git a/testif.so/CMakeLists.txt b/testif.so/CMakeLists.txt +index 4cba0f9..691534a 100644 +--- a/testif.so/CMakeLists.txt ++++ b/testif.so/CMakeLists.txt +@@ -108,11 +108,11 @@ endif() + + + ## define include directories +-include_directories(./ ../ pci) ++include_directories(./ ../ pci ${YAML_CPP_INCLUDE_DIRS}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ASAN_LIB_PATH} ${ROCM_SMI_LIB_DIR}) + ## additional libraries +-set (PROJECT_LINK_LIBS libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS libpthread.so libpci.so libm.so ${ROCBLAS_LIB_DIR}/librocblas.so ${HSAKMT_LIB_DIR}/libhsakmt.a ${HSA_PATH}/lib/libhsa-runtime64.so) + + ## define source files + ## set(SOURCES src/rvs_module.cpp src/action.cpp src/worker.cpp) +diff --git a/tst.so/CMakeLists.txt b/tst.so/CMakeLists.txt +index 1a1a8b0..c6e46da 100644 +--- a/tst.so/CMakeLists.txt ++++ b/tst.so/CMakeLists.txt +@@ -140,7 +140,7 @@ if(DEFINED RVS_ROCMSMI) + endif() + endif() + +-if(NOT EXISTS "${ROCR_LIB_DIR}/lib${HIP_HCC_LIB}.so") ++if(NOT EXISTS "${HIP_INC_DIR}/lib/lib${HIP_HCC_LIB}.so") + message("ERROR: ROC Runtime libraries can't be found under specified path. Please set ROCR_LIB_DIR path. Current value is : " ${ROCR_LIB_DIR}) + RETURN() + endif() +@@ -155,11 +155,11 @@ if(DEFINED RVS_ROCMSMI) + endif() + + ## define include directories +-include_directories(./ ../ ${ROCM_SMI_INC_DIR} ${ROCBLAS_INC_DIR} ${ROCR_INC_DIR} ${HIP_INC_DIR}) ++include_directories(./ ../ ${ROCM_SMI_INC_DIR} ${ROCBLAS_INC_DIR} ${ROCR_INC_DIR} ${HIP_INC_DIR} ${HIPRAND_INC_DIR} ${ROCRAND_INC_DIR}) + # Add directories to look for library files to link +-link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH}) ++link_directories(${RVS_LIB_DIR} ${ROCR_LIB_DIR} ${ROCBLAS_LIB_DIR} ${ROCM_SMI_LIB_DIR} ${ASAN_LIB_PATH} ${HIPRAND_LIB_DIR}/.. ${ROCRAND_LIB_DIR}/..) + ## additional libraries +-set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so) ++set (PROJECT_LINK_LIBS rvslib libpthread.so libpci.so libm.so ${HIPRAND_LIB_DIR}/libhiprand.so ${ROCRAND_LIB_DIR}/librocrand.so) + + set(SOURCES src/rvs_module.cpp src/action.cpp src/tst_worker.cpp ) + diff --git a/var/spack/repos/builtin/packages/rocm-validation-suite/package.py b/var/spack/repos/builtin/packages/rocm-validation-suite/package.py index f3b06fefcd19b8..7cdce00f34af96 100644 --- a/var/spack/repos/builtin/packages/rocm-validation-suite/package.py +++ b/var/spack/repos/builtin/packages/rocm-validation-suite/package.py @@ -58,7 +58,8 @@ class RocmValidationSuite(CMakePackage): # It expects rocm components headers and libraries in /opt/rocm # It doesn't find package to include the library and include path without this patch. patch("009-replacing-rocm-path-with-package-path.patch", when="@6.0") - patch("009-replacing-rocm-path-with-package-path-6.1.patch", when="@6.1") + patch("009-replacing-rocm-path-with-package-path-6.1.patch", when="@6.1:6.2.0") + patch("009-replacing-rocm-path-with-package-path-6.2.1.patch", when="@6.2.1") depends_on("cmake@3.5:", type="build") depends_on("zlib-api", type="link") depends_on("yaml-cpp~shared") @@ -94,6 +95,9 @@ def setup_build_environment(self, build_env): depends_on(f"rocm-smi-lib@{ver}", when=f"@{ver}") depends_on(f"hsa-rocr-dev@{ver}", when=f"@{ver}") depends_on(f"hsakmt-roct@{ver}", when=f"@{ver}") + for ver in ["6.2.1"]: + depends_on(f"hiprand@{ver}", when=f"@{ver}") + depends_on(f"rocrand@{ver}", when=f"@{ver}") def patch(self): if self.spec.satisfies("@5.2:5.4"): @@ -104,7 +108,7 @@ def patch(self): filter_file( r"@ROCM_PATH@/rvs", self.spec.prefix.rvs, "rvs/conf/deviceid.sh.in", string=True ) - elif self.spec.satisfies("@6.0:"): + elif self.spec.satisfies("@6.0:6.1"): filter_file( "@ROCM_PATH@/rvs", self.spec.prefix.bin, "rvs/conf/deviceid.sh.in", string=True ) @@ -119,6 +123,9 @@ def cmake_args(self): self.define("YAML_CPP_INCLUDE_DIRS", self.spec["yaml-cpp"].prefix.include), self.define("UT_INC", self.spec["googletest"].prefix.include), ] + if self.spec.satisfies("@6.2.1:"): + args.append(self.define("HIPRAND_DIR", self.spec["hiprand"].prefix)), + args.append(self.define("ROCRAND_DIR", self.spec["rocrand"].prefix)), libloc = self.spec["googletest"].prefix.lib64 if not os.path.isdir(libloc): libloc = self.spec["googletest"].prefix.lib @@ -131,20 +138,5 @@ def cmake_args(self): if not os.path.isdir(libloc): libloc = self.spec["yaml-cpp"].prefix.lib args.append(self.define("YAML_CPP_LIB_PATH", libloc)) - if self.spec.satisfies("@6.2:"): - args.append( - self.define( - "CMAKE_CXX_FLAGS", - f"-I{self.spec['rocm-smi-lib'].prefix.include} " - f"-I{self.spec['rocblas'].prefix.include} " - f"-I{self.spec['yaml-cpp'].prefix.include} " - f"-L{self.spec['hip'].prefix.lib} " - f"-L{self.spec['hsa-rocr-dev'].prefix.lib} " - f"-L{self.spec['hsakmt-roct'].prefix.lib} " - f"-L{self.spec['rocm-smi-lib'].prefix.lib} " - f"-L{self.spec['rocblas'].prefix.lib} " - f"{libloc}/libyaml-cpp.a ", - ) - ) - args.append(self.define("CPACK_PACKAGING_INSTALL_PREFIX", self.spec.prefix)) + return args diff --git a/var/spack/repos/builtin/packages/rocminfo/package.py b/var/spack/repos/builtin/packages/rocminfo/package.py index e8d09f88121d1c..96c9e6c603a998 100644 --- a/var/spack/repos/builtin/packages/rocminfo/package.py +++ b/var/spack/repos/builtin/packages/rocminfo/package.py @@ -37,7 +37,8 @@ class Rocminfo(CMakePackage): version("5.3.3", sha256="77e6adc81da6c1d153517e1d28db774205531a2ec188e6518f998328ef7897c6") version("5.3.0", sha256="c279da1d946771d120611b64974fde751534e787a394ceb6b8e0b743c143d782") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("cmake@3:", type="build") diff --git a/var/spack/repos/builtin/packages/rocprofiler-register/package.py b/var/spack/repos/builtin/packages/rocprofiler-register/package.py index 38471a1605f515..2dab5a0d0a4f63 100644 --- a/var/spack/repos/builtin/packages/rocprofiler-register/package.py +++ b/var/spack/repos/builtin/packages/rocprofiler-register/package.py @@ -26,6 +26,7 @@ class RocprofilerRegister(CMakePackage): version("6.1.1", sha256="38242443d9147a04d61374de4cecee686578a3140fed17e88480f564a1f67cc7") version("6.1.0", sha256="c6e60447ea2ccca8d6acd8758ac00037347892b16b450e1f99ddd04cc4b6cac1") + depends_on("c", type="build") depends_on("cxx", type="build") depends_on("fmt") depends_on("glog") diff --git a/var/spack/repos/builtin/packages/rocthrust/package.py b/var/spack/repos/builtin/packages/rocthrust/package.py index 93b017243fcd17..29029e992a9bbb 100644 --- a/var/spack/repos/builtin/packages/rocthrust/package.py +++ b/var/spack/repos/builtin/packages/rocthrust/package.py @@ -77,7 +77,7 @@ class Rocthrust(CMakePackage): depends_on(f"rocm-cmake@{ver}:", type="build", when=f"@{ver}") def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") def setup_build_environment(self, env): diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py index 8ad46328de1adb..c8d9921982960c 100644 --- a/var/spack/repos/builtin/packages/root/package.py +++ b/var/spack/repos/builtin/packages/root/package.py @@ -7,10 +7,13 @@ import os import sys +import spack.util.environment from spack.operating_systems.mac_os import macos_version from spack.package import * from spack.util.environment import is_system_path +_is_macos = sys.platform == "darwin" + class Root(CMakePackage): """ROOT is a data analysis framework.""" @@ -42,6 +45,7 @@ class Root(CMakePackage): ) # Production version + version("6.32.08", sha256="29ad4945a72dff1a009c326a65b6fa5ee2478498823251d3cef86a2cbeb77b27") version("6.32.06", sha256="3fc032d93fe848dea5adb1b47d8f0a86279523293fee0aa2b3cd52a1ffab7247") version("6.32.04", sha256="132f126aae7d30efbccd7dcd991b7ada1890ae57980ef300c16421f9d4d07ea8") version("6.32.02", sha256="3d0f76bf05857e1807ccfb2c9e014f525bcb625f94a2370b455f4b164961602d") @@ -162,7 +166,7 @@ class Root(CMakePackage): when="@6.32.0:6.32.02", ) - if sys.platform == "darwin": + if _is_macos: # Resolve non-standard use of uint, _cf_ # https://sft.its.cern.ch/jira/browse/ROOT-7886. patch("math_uint.patch", when="@6.06.02") @@ -192,7 +196,7 @@ class Root(CMakePackage): # See README.md for specific notes about what ROOT configuration # options are or are not supported, and why. - variant("aqua", default=False, description="Enable Aqua interface") + variant("aqua", default=_is_macos, description="Enable native macOS (Cocoa) interface") variant("arrow", default=False, description="Enable Arrow interface") variant("cuda", when="@6.08.00:", default=False, description="Enable CUDA support") variant("cudnn", when="@6.20.02:", default=False, description="Enable cuDNN support") @@ -294,7 +298,7 @@ class Root(CMakePackage): variant( "webgui", default=True, description="Enable web-based UI components of ROOT", when="+root7" ) - variant("x", default=True, description="Enable set of graphical options") + variant("x", default=(not _is_macos), description="Enable set of graphical options") variant("xml", default=True, description="Enable XML parser interface") variant("xrootd", default=False, description="Build xrootd file server and its client") @@ -435,8 +439,10 @@ class Root(CMakePackage): conflicts("target=ppc64le:", when="@:6.24") # Incompatible variants - if sys.platform == "darwin": + if _is_macos: conflicts("+opengl", when="~x ~aqua", msg="root+opengl requires X or Aqua") + # https://github.com/root-project/root/issues/7160 + conflicts("+aqua", when="~opengl", msg="+aqua requires OpenGL to be enabled") else: conflicts("+opengl", when="~x", msg="root+opengl requires X") conflicts("+math", when="~gsl", msg="root+math requires GSL") @@ -459,15 +465,15 @@ class Root(CMakePackage): conflicts("%clang@16:", when="@:6.26.07", msg="clang 16+ support was added in root 6.26.08") # See https://github.com/spack/spack/pull/44826 - if sys.platform == "darwin" and macos_version() == Version("12"): + if _is_macos and macos_version() == Version("12"): conflicts("@:6.27", when="+python", msg="macOS 12 python support for 6.28: only") # See https://github.com/root-project/root/issues/11714 - if sys.platform == "darwin" and macos_version() >= Version("13"): + if _is_macos and macos_version() >= Version("13"): conflicts("@:6.26.09", msg="macOS 13 support was added in root 6.26.10") # See https://github.com/root-project/root/issues/16219 - if sys.platform == "darwin" and macos_version() >= Version("15"): + if _is_macos and macos_version() >= Version("15"): conflicts("@:6.32.05", msg="macOS 15 support was added in root 6.32.06") # ROOT <6.14 is incompatible with Python >=3.7, which is the minimum supported by spack @@ -546,21 +552,26 @@ def _add_variant(variants, features, featurename, variantname): _add_variant(v, f, "gviz", "+graphviz") _add_variant(v, f, "http", "+http") _add_variant(v, f, ("imt", "tbb"), "+tbb") - _add_variant(v, f, "jemalloc", "+jemalloc") - _add_variant(v, f, "memstat", "+memstat") + if Version(version_str) <= Version("6.28"): + _add_variant(v, f, "jemalloc", "+jemalloc") + if Version(version_str) <= Version("6.17"): + _add_variant(v, f, "memstat", "+memstat") _add_variant(v, f, ("minuit", "minuit2"), "+minuit") _add_variant(v, f, "mlp", "+mlp") _add_variant(v, f, "mysql", "+mysql") - _add_variant(v, f, "oracle", "+oracle") + if Version(version_str) <= Version("6.30"): + _add_variant(v, f, "oracle", "+oracle") _add_variant(v, f, "pgsql", "+postgres") - _add_variant(v, f, "pythia6", "+pythia6") + if Version(version_str) <= Version("6.30"): + _add_variant(v, f, "pythia6", "+pythia6") _add_variant(v, f, "pythia8", "+pythia8") _add_variant(v, f, "pyroot", "+python") - _add_variant(v, f, ("qt", "qtgsi"), "+qt4") + if Version(version_str) <= Version("6.17"): + _add_variant(v, f, ("qt", "qtgsi"), "+qt4") _add_variant(v, f, "r", "+r") _add_variant(v, f, "roofit", "+roofit") # webui feature renamed to webgui in 6.18 - if Version(version_str).satisfies("@6.18:"): + if Version(version_str) >= Version("6.18"): _add_variant(v, f, ("root7", "webgui"), "+webgui") else: _add_variant(v, f, ("root7", "webui"), "+webgui") @@ -569,7 +580,8 @@ def _add_variant(variants, features, featurename, variantname): _add_variant(v, f, "spectrum", "+spectrum") _add_variant(v, f, "sqlite", "+sqlite") _add_variant(v, f, "ssl", "+ssl") - _add_variant(v, f, "table", "+table") + if Version(version_str) <= Version("6.17"): + _add_variant(v, f, "table", "+table") _add_variant(v, f, "thread", "+threads") _add_variant(v, f, "tmva", "+tmva") _add_variant(v, f, "tmva-cpu", "+tmva-cpu") @@ -580,7 +592,8 @@ def _add_variant(variants, features, featurename, variantname): _add_variant(v, f, "vc", "+vc") _add_variant(v, f, "vdt", "+vdt") _add_variant(v, f, "veccore", "+veccore") - _add_variant(v, f, "vmc", "+vmc") + if Version(version_str) <= Version("6.25"): + _add_variant(v, f, "vmc", "+vmc") _add_variant(v, f, ("x11", "xft"), "+x") _add_variant(v, f, "xml", "+xml") _add_variant(v, f, "xrootd", "+xrootd") @@ -624,8 +637,6 @@ def cmake_args(self): # Options related to ROOT's ability to download and build its own # dependencies. Per Spack convention, this should generally be avoided. - afterimage_enabled = ("+x" in self.spec) if "platform=darwin" not in self.spec else True - options += [ define("builtin_cfitsio", False), define("builtin_davix", False), @@ -633,7 +644,7 @@ def cmake_args(self): define("builtin_freetype", False), define("builtin_ftgl", False), define("builtin_gl2ps", False), - define("builtin_glew", self.spec.satisfies("platform=darwin")), + define("builtin_glew", False), define("builtin_gsl", False), define("builtin_llvm", True), define("builtin_lz4", self.spec.satisfies("@6.12.02:6.12")), @@ -652,7 +663,12 @@ def cmake_args(self): ] if self.spec.satisfies("@:6.32"): - options.append(define("builtin_afterimage", afterimage_enabled)) + options.append( + define( + "builtin_afterimage", + ("+x" in self.spec) if "platform=darwin" not in self.spec else True, + ) + ) # Features options += [ @@ -761,7 +777,7 @@ def cmake_args(self): # #################### Compiler options #################### - if sys.platform == "darwin" and self.compiler.cc == "gcc": + if _is_macos and self.compiler.cc == "gcc": cflags = "-D__builtin_unreachable=__builtin_trap" options.extend([define("CMAKE_C_FLAGS", cflags), define("CMAKE_CXX_FLAGS", cflags)]) diff --git a/var/spack/repos/builtin/packages/rpcsvc-proto/package.py b/var/spack/repos/builtin/packages/rpcsvc-proto/package.py index cd18cc8dd52675..2aa4338cf1a763 100644 --- a/var/spack/repos/builtin/packages/rpcsvc-proto/package.py +++ b/var/spack/repos/builtin/packages/rpcsvc-proto/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.paths from spack.package import * diff --git a/var/spack/repos/builtin/packages/rpm/package.py b/var/spack/repos/builtin/packages/rpm/package.py index 18d373f299e9ec..39d2d44af4d848 100644 --- a/var/spack/repos/builtin/packages/rpm/package.py +++ b/var/spack/repos/builtin/packages/rpm/package.py @@ -60,8 +60,8 @@ class Rpm(AutotoolsPackage): # Always required depends_on("popt") - # Without this file patch, we don't detect lua - depends_on("lua+pcfile@5.3.5:", when="+lua") + # support for embedded Lua interpreter + depends_on("lua@5.3.5:", when="+lua") # Enable POSIX.1e draft 15 file capabilities support depends_on("libcap", when="+posix") diff --git a/var/spack/repos/builtin/packages/rsbench/package.py b/var/spack/repos/builtin/packages/rsbench/package.py index 7c2cd25bbd75f5..6b4f041d8007b7 100644 --- a/var/spack/repos/builtin/packages/rsbench/package.py +++ b/var/spack/repos/builtin/packages/rsbench/package.py @@ -45,7 +45,7 @@ def build_targets(self): cflags += " -ffast-math " elif spec.satisfies("%intel"): cflags += " -xhost -ansi-alias -no-prec-div " - elif spec.satisfies("%pgi") or spec.satisfies("%nvhpc"): + elif spec.satisfies("%nvhpc"): cflags += " -fastsse " elif spec.satisfies("%arm"): cflags += " -ffast-math " diff --git a/var/spack/repos/builtin/packages/rstudio/package.py b/var/spack/repos/builtin/packages/rstudio/package.py index 569e9909e2b6e3..09fa89332c7404 100644 --- a/var/spack/repos/builtin/packages/rstudio/package.py +++ b/var/spack/repos/builtin/packages/rstudio/package.py @@ -11,7 +11,7 @@ class Rstudio(CMakePackage): """RStudio is an integrated development environment (IDE) for R.""" - homepage = "www.rstudio.com/products/rstudio/" + homepage = "https://www.rstudio.com/products/rstudio/" url = "https://github.com/rstudio/rstudio/archive/refs/tags/v1.4.1717.tar.gz" version("1.4.1717", sha256="3af234180fd7cef451aef40faac2c7b52860f14a322244c1c7aede029814d261") diff --git a/var/spack/repos/builtin/packages/rsyslog/package.py b/var/spack/repos/builtin/packages/rsyslog/package.py index 6de8baf1116cd6..eafa2d9c1bab16 100644 --- a/var/spack/repos/builtin/packages/rsyslog/package.py +++ b/var/spack/repos/builtin/packages/rsyslog/package.py @@ -10,13 +10,22 @@ class Rsyslog(AutotoolsPackage): """The rocket-fast Syslog Server.""" homepage = "https://www.rsyslog.com/" - url = "https://github.com/rsyslog/rsyslog/archive/v8.2006.0.tar.gz" + url = "https://github.com/rsyslog/rsyslog/archive/refs/tags/v8.2006.0.tar.gz" license("Apache-2.0 AND GPL-3.0-or-later AND LGPL-3.0-or-later", checked_by="tgamblin") - version("8.2006.0", sha256="dc30a2ec02d5fac91d3a4f15a00641e0987941313483ced46592ab0b0d68f324") - version("8.2004.0", sha256="b56b985fec076a22160471d389b7ff271909dfd86513dad31e401a775a6dfdc2") - version("8.2002.0", sha256="b31d56311532335212ef2ea7be4501508224cb21f1bef9d262c6d78e21959ea1") + version("8.2410.0", sha256="0e4e6fcb1d72a1cb65438d85dd2bbf37a8f82115d7e271788535d1e7fbcf6838") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-24903 + version( + "8.2006.0", sha256="dc30a2ec02d5fac91d3a4f15a00641e0987941313483ced46592ab0b0d68f324" + ) + version( + "8.2004.0", sha256="b56b985fec076a22160471d389b7ff271909dfd86513dad31e401a775a6dfdc2" + ) + version( + "8.2002.0", sha256="b31d56311532335212ef2ea7be4501508224cb21f1bef9d262c6d78e21959ea1" + ) depends_on("c", type="build") # generated @@ -24,6 +33,7 @@ class Rsyslog(AutotoolsPackage): depends_on("automake", type="build") depends_on("libtool", type="build") depends_on("m4", type="build") + depends_on("pkgconfig", type="build") depends_on("libestr") depends_on("libfastjson") depends_on("zlib-api") @@ -36,6 +46,9 @@ class Rsyslog(AutotoolsPackage): def setup_run_environment(self, env): env.prepend_path("PATH", self.prefix.sbin) + def autoreconf(self, spec, prefix): + Executable("./autogen.sh")() + def configure_args(self): args = ["--with-systemdsystemunitdir=" + self.spec["rsyslog"].prefix.lib.systemd.system] return args diff --git a/var/spack/repos/builtin/packages/salome-configuration/package.py b/var/spack/repos/builtin/packages/salome-configuration/package.py index 13f15926ac27dc..9abb0fe942b3ff 100644 --- a/var/spack/repos/builtin/packages/salome-configuration/package.py +++ b/var/spack/repos/builtin/packages/salome-configuration/package.py @@ -18,6 +18,12 @@ class SalomeConfiguration(Package): homepage = "https://www.salome-platform.org" git = "https://git.salome-platform.org/gitpub/tools/configuration.git" + version("9.13.0", tag="V9_13_0", commit="1c9b00436fc0e8264742460ebc102ae7d1970e97") + version("9.12.0", tag="V9_12_0", commit="61ed79521f31363ba4aeedcd59812a4838c076aa") + version("9.11.0", tag="V9_11_0", commit="33fc859a523e9f84cabaae2c55fdc64d1be11ec0") + version("9.10.0", tag="V9_10_0", commit="25f724f7a6c0000330a40c3851dcd8bc2493e1fa") + version("9.9.0", tag="V9_9_0", commit="5e61c7330cb2e0ff39e0bf4ba7b65d1d26c824ac") + version("9.8.0", tag="V9_8_0", commit="f1b2929d32953ac4d2056d564dab62e2e8d7c2a5") version("9.7.0", tag="V9_7_0", commit="b1430e72bc252867289b45de9a94041841fade06") version("9.6.0", tag="V9_6_0", commit="02e621fc9e24b4eab20f82ef921859013bf024b4") version("9.5.0", tag="V9_5_0", commit="96ecd4927604943dc80ead4aaf732a9d0215b70c") @@ -25,7 +31,7 @@ class SalomeConfiguration(Package): version("9.3.0", tag="V9_3_0", commit="de7bac0ee58007a9501fffa7c1488de029b19cdc") patch("SalomeMacros.patch", working_dir="./cmake") - patch("FindSalomeHDF5.patch", working_dir="./cmake") + patch("FindSalomeHDF5.patch", working_dir="./cmake", when="@:9.7.0") def setup_dependent_build_environment(self, env, dependent_spec): env.set("CONFIGURATION_ROOT_DIR", self.prefix) diff --git a/var/spack/repos/builtin/packages/salome-med/package.py b/var/spack/repos/builtin/packages/salome-med/package.py index 08a7762cadbbb8..a96950b500bd47 100644 --- a/var/spack/repos/builtin/packages/salome-med/package.py +++ b/var/spack/repos/builtin/packages/salome-med/package.py @@ -20,6 +20,12 @@ class SalomeMed(CMakePackage): license("LGPL-3.0-only") + version( + "5.0.0", + sha256="267e76d0c67ec51c10e3199484ec1508baa8d5ed845c628adf660529dce7a3d4", + url="ftp://ftp.cea.fr/pub/salome/prerequisites/med-5.0.0.tar.bz2", + ) + version("4.1.1", sha256="a082b705d1aafe95d3a231d12c57f0b71df554c253e190acca8d26fc775fb1e6") version("4.1.0", sha256="847db5d6fbc9ce6924cb4aea86362812c9a5ef6b9684377e4dd6879627651fce") version("4.0.0", sha256="a474e90b5882ce69c5e9f66f6359c53b8b73eb448c5f631fa96e8cd2c14df004") version("3.3.1", sha256="856e9c4bb75eb0cceac3d5a5c65b1ce52fb3c46b9182920e1c9f34ae69bd2d5f") @@ -32,20 +38,14 @@ class SalomeMed(CMakePackage): variant("mpi", default=False, description="Enable MPI") variant("static", default=False, description="Enable static library build") variant("fortran", default=False, description="Enable Fortran") + variant("int64", default=False, description="Use 64-bit integers as indices.") depends_on("mpi", when="+mpi") - depends_on("hdf5@1.10.3+mpi", when="@4.1.0+mpi") - depends_on("hdf5@1.10.3~mpi", when="@4.1.0~mpi") - - depends_on("hdf5@1.10.3+mpi", when="@4.0.0+mpi") - depends_on("hdf5@1.10.3~mpi", when="@4.0.0~mpi") - - depends_on("hdf5@1.8.14+mpi", when="@3.3.1+mpi") - depends_on("hdf5@1.8.14~mpi", when="@3.3.1~mpi") - - depends_on("hdf5@1.8.14+mpi", when="@3.2.0+mpi") - depends_on("hdf5@1.8.14~mpi", when="@3.2.0~mpi") + for _mpi_variant in ("~mpi", "+mpi"): + depends_on(f"hdf5@1.12{_mpi_variant}", when=f"@5:{_mpi_variant}") + depends_on(f"hdf5@1.10{_mpi_variant}", when=f"@4{_mpi_variant}") + depends_on(f"hdf5@1.8{_mpi_variant}", when=f"@3{_mpi_variant}") patch("MAJ_400_410_champs.patch", when="@4.1.0+static", working_dir="./tools/medimport/4.0.0") @@ -85,6 +85,11 @@ def cmake_args(self): else: options.extend(["-DCMAKE_Fortran_COMPILER="]) + if "+int64" in spec: + options.append("-DMED_MEDINT_TYPE=long") + else: + options.append("-DMED_MEDINT_TYPE=int") + options.extend( [ "-DMEDFILE_BUILD_PYTHON=OFF", diff --git a/var/spack/repos/builtin/packages/salome-medcoupling/package.py b/var/spack/repos/builtin/packages/salome-medcoupling/package.py index 89f681b200a5c9..2c24579706a2e2 100644 --- a/var/spack/repos/builtin/packages/salome-medcoupling/package.py +++ b/var/spack/repos/builtin/packages/salome-medcoupling/package.py @@ -20,6 +20,12 @@ class SalomeMedcoupling(CMakePackage): license("LGPL-2.1-or-later") + version("9.13.0", tag="V9_13_0", commit="8bea530c92cd907ae859ef11fd95b2db54b2894a") + version("9.12.0", tag="V9_12_0", commit="28e485bde1c26dc835ec7acf449b1d519997ddce") + version("9.11.0", tag="V9_11_0", commit="1b5fb5650409b0ad3a61da3215496f2adf2dae02") + version("9.10.0", tag="V9_10_0", commit="fe2e38d301902c626f644907e00e499552bb2fa5") + version("9.9.0", tag="V9_9_0", commit="5b2a9cc1cc18fffd5674a589aacf368008983b45") + version("9.8.0", tag="V9_8_0", commit="8a82259c9a9228c54efeddd52d4afe6c0e397c30") version("9.7.0", tag="V9_7_0", commit="773434a7f2a5cbacc2f50e93ea6d6a48a157acd9") version("9.6.0", tag="V9_6_0", commit="2c14a65b40252770b3503945405f5bdb2f29f8e2") version("9.5.0", tag="V9_5_0", commit="dd75474d950baf8ff862b03cb1685f2a2d562846") @@ -31,7 +37,7 @@ class SalomeMedcoupling(CMakePackage): variant("static", default=False, description="Enable static library build") variant("mpi", default=False, description="Enable MPI") - variant("in64", default=False, description="Enable 64 bits indexes") + variant("int64", default=False, description="Use 64 bits indices") variant("partitioner", default=False, description="Enable partitioner") variant("metis", default=False, description="Enable Metis") variant("scotch", default=False, description="Enable Scotch") @@ -49,35 +55,25 @@ class SalomeMedcoupling(CMakePackage): depends_on("scotch@6.0.4:", when="+scotch") depends_on("mpi", when="+mpi") - depends_on("salome-configuration@9.7.0", when="@9.7.0") - depends_on("salome-med@4.1.0+mpi+static", when="@9.7.0+mpi+static") - depends_on("salome-med@4.1.0+mpi", when="@9.7.0+mpi") - depends_on("salome-med@4.1.0+static", when="@9.7.0~mpi+static") - depends_on("salome-med@4.1.0", when="@9.7.0~mpi") - - depends_on("salome-configuration@9.6.0", when="@9.6.0") - depends_on("salome-med@4.1.0+mpi+static", when="@9.6.0+mpi+static") - depends_on("salome-med@4.1.0+mpi", when="@9.6.0+mpi") - depends_on("salome-med@4.1.0+static", when="@9.6.0~mpi+static") - depends_on("salome-med@4.1.0", when="@9.6.0~mpi") - - depends_on("salome-configuration@9.5.0", when="@9.5.0") - depends_on("salome-med@4.1.0+mpi+static", when="@9.5.0+mpi+static") - depends_on("salome-med@4.1.0+mpi", when="@9.5.0+mpi") - depends_on("salome-med@4.1.0+static", when="@9.5.0~mpi+static") - depends_on("salome-med@4.1.0", when="@9.5.0~mpi") - - depends_on("salome-configuration@9.4.0", when="@9.4.0") - depends_on("salome-med@4.0.0+mpi+static", when="@9.4.0+mpi+static") - depends_on("salome-med@4.0.0+mpi", when="@9.4.0+mpi") - depends_on("salome-med@4.0.0+static", when="@9.4.0~mpi+static") - depends_on("salome-med@4.0.0", when="@9.4.0~mpi") - - depends_on("salome-configuration@9.3.0", when="@9.3.0") - depends_on("salome-med@4.0.0+mpi+static", when="@9.3.0+mpi+static") - depends_on("salome-med@4.0.0+mpi", when="@9.3.0+mpi") - depends_on("salome-med@4.0.0+static", when="@9.3.0~mpi+static") - depends_on("salome-med@4.0.0", when="@9.3.0~mpi") + for _min_ver in range(3, 14): + _ver = f"9.{_min_ver}.0" + depends_on(f"salome-configuration@{_ver}", when=f"@{_ver}") + + for _mpi_variant in ("~mpi", "+mpi"): + for _static_variant in ("~static", "+static"): + for _int64_variant in ("~int64", "+int64"): + depends_on( + f"salome-med@4.1.1{_mpi_variant}{_static_variant}{_int64_variant}", + when=f"@9.11.0:{_mpi_variant}{_static_variant}{_int64_variant}", + ) + depends_on( + f"salome-med@4.1.0{_mpi_variant}{_static_variant}{_int64_variant}", + when=f"@9.5.0:9.10.0{_mpi_variant}{_static_variant}{_int64_variant}", + ) + depends_on( + f"salome-med@4.0.0{_mpi_variant}{_static_variant}{_int64_variant}", + when=f"@9.3.0:9.4.0{_mpi_variant}{_static_variant}{_int64_variant}", + ) def check(self): pass @@ -90,13 +86,9 @@ def setup_build_environment(self, env): env.set("SCOTCH_ROOT_DIR", self.spec["scotch"].prefix) def setup_run_environment(self, env): + python_ver = self.spec["python"].version.up_to(2) env.prepend_path( - "PYTHONPATH", - join_path( - self.prefix.lib, - "python{0}".format(self.spec["python"].version.up_to(2)), - "site-packages", - ), + "PYTHONPATH", join_path(self.prefix.lib, f"python{python_ver}", "site-packages") ) def cmake_args(self): @@ -113,7 +105,7 @@ def cmake_args(self): else: options.extend(["-DMEDCOUPLING_USE_MPI=OFF", "-DSALOME_USE_MPI=OFF"]) - if "+in64" in spec: + if "+int64" in spec: options.extend(["-DMEDCOUPLING_USE_64BIT_IDS=ON"]) else: options.extend(["-DMEDCOUPLING_USE_64BIT_IDS=OFF"]) diff --git a/var/spack/repos/builtin/packages/samrai/package.py b/var/spack/repos/builtin/packages/samrai/package.py index 2495476b13308b..99239717b9e328 100644 --- a/var/spack/repos/builtin/packages/samrai/package.py +++ b/var/spack/repos/builtin/packages/samrai/package.py @@ -71,6 +71,10 @@ class Samrai(AutotoolsPackage): depends_on(Boost.with_default_variants, when="@3.0.0:3.11.99", type="build") depends_on("silo+mpi", when="+silo") + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") + # don't build SAMRAI 3+ with tools with gcc patch("no-tool-build.patch", when="@3.0.0:%gcc") diff --git a/var/spack/repos/builtin/packages/scale/package.py b/var/spack/repos/builtin/packages/scale/package.py index 8d9171756f6384..3d45b572c42d9b 100644 --- a/var/spack/repos/builtin/packages/scale/package.py +++ b/var/spack/repos/builtin/packages/scale/package.py @@ -51,8 +51,6 @@ def build(self, spec, prefix): scale_sys_str = "Linux64-gnu-ompi" elif self.spec.satisfies("platform=linux %intel"): scale_sys_str = "Linux64-intel-impi" - elif self.spec.satisfies("platform=linux %pgi"): - scale_sys_str = "Linux64-pgi-ompi" elif self.spec.satisfies("platform=linux target=arm %gcc"): scale_sys_str = "LinuxARM-gnu-ompi" elif self.spec.satisfies("platform=linux target=a64fx %fj"): diff --git a/var/spack/repos/builtin/packages/sccache/package.py b/var/spack/repos/builtin/packages/sccache/package.py new file mode 100644 index 00000000000000..2f526242baaf07 --- /dev/null +++ b/var/spack/repos/builtin/packages/sccache/package.py @@ -0,0 +1,66 @@ +# Copyright 2013-2024 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) + +import os +import re + +import spack.build_systems +import spack.build_systems.cargo +from spack.package import * + + +class Sccache(CargoPackage): + """Sccache is a ccache-like tool. It is used as a compiler wrapper and avoids + compilation when possible. Sccache has the capability to utilize caching in + remote storage environments, including various cloud storage options, or + alternatively, in local storage.""" + + homepage = "https://github.com/mozilla/sccache" + url = "https://github.com/mozilla/sccache/archive/refs/tags/v0.8.2.tar.gz" + + tags = ["build-tools"] + + executables = [r"^sccache$", r"^sscache-dist$"] + + license("Apache-2.0", checked_by="pranav-sivaraman") + + version("0.8.2", sha256="2b3e0ef8902fe7bcdcfccf393e29f4ccaafc0194cbb93681eaac238cdc9b94f8") + + depends_on("rust@1.75:", when="@0.8.2:") + depends_on("rust@1.70:", when="@0.7.7:") + depends_on("rust@1.67.1:") # for 0.6/0.7.1 and newer, but may work for even older versions. + depends_on("pkgconfig", type="build", when="platform=linux") + + depends_on("openssl", when="platform=linux") + + variant( + "dist-server", + default=False, + description="Enables the sccache-dist binary", + when="platform=linux", + ) + + @classmethod + def determine_version(cls, exe): + output = Executable(exe)("--version", output=str, error=str) + match = re.match(r"sccache (\S+)", output) + return match.group(1) if match else None + + @classmethod + def determine_variants(cls, exes, version_str): + if any(os.path.basename(path) == "sccache-dist" for path in exes): + return "+dist-server" + else: + return "~dist-server" + + +class CargoBuilder(spack.build_systems.cargo.CargoBuilder): + + @property + def build_args(self): + if self.spec.satisfies("+dist-server"): + return ["--features=dist-server"] + + return [] diff --git a/var/spack/repos/builtin/packages/scitokens-cpp/package.py b/var/spack/repos/builtin/packages/scitokens-cpp/package.py index 1426828700f0eb..6c193e4bd274db 100644 --- a/var/spack/repos/builtin/packages/scitokens-cpp/package.py +++ b/var/spack/repos/builtin/packages/scitokens-cpp/package.py @@ -17,6 +17,7 @@ class ScitokensCpp(CMakePackage): license("Apache-2.0") + version("1.1.2", sha256="07d33cb51a3ccd8460f2acebb15b35393aeccfc70e3554a73c9e5cffed6edb39") version("1.1.1", sha256="a9091b888fc778282caf2a6808c86f685d2411557673152d58fe53932a6c7212") version("1.1.0", sha256="9c4afd6638e94855ede52ecfc3d4f05082f2bdf151a9ab8dafcc2bb7cd4d9039") version("1.0.2", sha256="cdc1e80e0cba9ca0e16de2efa10ec5e38765792bf5107024bfb66ddad5a16a85") diff --git a/var/spack/repos/builtin/packages/scotch/package.py b/var/spack/repos/builtin/packages/scotch/package.py index e470491d84759c..ad603de5c7bbea 100644 --- a/var/spack/repos/builtin/packages/scotch/package.py +++ b/var/spack/repos/builtin/packages/scotch/package.py @@ -37,8 +37,9 @@ class Scotch(CMakePackage, MakefilePackage): version("6.0.0", sha256="8206127d038bda868dda5c5a7f60ef8224f2e368298fbb01bf13fa250e378dd4") version("5.1.10b", sha256="54c9e7fafefd49d8b2017d179d4f11a655abe10365961583baaddc4eeb6a9add") - depends_on("c", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") build_system(conditional("cmake", when="@7:"), "makefile", default="cmake") variant("threads", default=True, description="use POSIX Pthreads within Scotch and PT-Scotch") diff --git a/var/spack/repos/builtin/packages/scr/package.py b/var/spack/repos/builtin/packages/scr/package.py index 9737365255d905..7ec48f4ac77223 100644 --- a/var/spack/repos/builtin/packages/scr/package.py +++ b/var/spack/repos/builtin/packages/scr/package.py @@ -12,6 +12,8 @@ def detect_scheduler(): if which("aprun"): return "APRUN" + if which("flux"): + return "FLUX" if which("jsrun"): return "LSF" return "SLURM" @@ -33,21 +35,12 @@ class Scr(CMakePackage): version("legacy", branch="legacy") version( - "3.0.1", - sha256="ba8f9e676aec8176ecc46c31a4f470ac95047101654de8cc88e01a1f9d95665a", + "3.1.0", + sha256="ca1f37c84e0ff7a307e68f213c8cc868974d7fb30f16826853a711c7c3a55ffa", preferred=True, ) - version("3.0", sha256="e204d3e99a49efac50b4bedc7ac05f55a05f1a65429500d919900c82490532cc") - version( - "3.0rc2", - sha256="4b2a718af56b3683e428d25a2269c038e9452db734221d370e3023a491477fad", - deprecated=True, - ) - version( - "3.0rc1", - sha256="bd31548a986f050024429d8ee3644eb135f047f98a3d503a40c5bd4a85291308", - deprecated=True, - ) + version("3.0.1", sha256="ba8f9e676aec8176ecc46c31a4f470ac95047101654de8cc88e01a1f9d95665a") + version("3.0.0", sha256="e204d3e99a49efac50b4bedc7ac05f55a05f1a65429500d919900c82490532cc") version("2.0.0", sha256="471978ae0afb56a20847d3989b994fbd680d1dea21e77a5a46a964b6e3deed6b") version( "1.2.2", @@ -79,39 +72,31 @@ class Scr(CMakePackage): # SCR legacy is anything 2.x.x or earlier # SCR components is anything 3.x.x or later - depends_on("axl@0.7.1", when="@3.0.1") - depends_on("er@0.2.0", when="@3.0.1") - depends_on("kvtree@1.3.0", when="@3.0.1") - depends_on("rankstr@0.1.0", when="@3.0.1") - depends_on("redset@0.2.0", when="@3.0.1") - depends_on("shuffile@0.2.0", when="@3.0.1") - depends_on("spath@0.2.0 +mpi", when="@3.0.1") - depends_on("dtcmp@1.1.4", when="@3.0.1") - - depends_on("axl@0.6.0", when="@3.0.0") - depends_on("er@0.2.0", when="@3.0.0") - depends_on("kvtree@1.3.0", when="@3.0.0") - depends_on("rankstr@0.1.0", when="@3.0.0") - depends_on("redset@0.2.0", when="@3.0.0") - depends_on("shuffile@0.2.0", when="@3.0.0") - depends_on("spath@0.2.0", when="@3.0.0") - depends_on("dtcmp@1.1.4", when="@3.0.0") - - depends_on("axl@0.5.0:", when="@3.0rc2") - depends_on("er@0.1.0:", when="@3.0rc2") - depends_on("kvtree@1.2.0:", when="@3.0rc2") - depends_on("rankstr@0.1.0:", when="@3.0rc2") - depends_on("redset@0.1.0:", when="@3.0rc2") - depends_on("shuffile@0.1.0:", when="@3.0rc2") - depends_on("spath@0.1.0:", when="@3.0rc2") - - depends_on("axl@0.4.0", when="@3.0rc1") - depends_on("er@0.0.4", when="@3.0rc1") - depends_on("kvtree@1.1.1", when="@3.0rc1") - depends_on("rankstr@0.0.3", when="@3.0rc1") - depends_on("redset@0.0.5", when="@3.0rc1") - depends_on("shuffile@0.0.4", when="@3.0rc1") - depends_on("spath@0.0.2", when="@3.0rc1") + with when("@3.1.0"): + depends_on("axl@0.8.0: +mpi") + depends_on("er@0.5.0") + depends_on("kvtree@1.4.0:") + depends_on("rankstr@0.3.0:") + depends_on("redset@0.4.0") + depends_on("shuffile@0.3.0:") + depends_on("spath@0.3.0: +mpi") + depends_on("dtcmp@1.1.5") + + with when("@3.0.1"): + depends_on("axl@0.7.1 +mpi") + depends_on("er@0.3.0") + + with when("@3.0.0"): + depends_on("axl@0.6.0") + depends_on("er@0.2.0") + + with when("@3.0.0:3.0.1"): + depends_on("kvtree@1.3.0") + depends_on("rankstr@0.2.0") + depends_on("redset@0.2.0") + depends_on("shuffile@0.2.0") + depends_on("spath@0.2.0 +mpi") + depends_on("dtcmp@1.1.4:") # DTCMP is an optional dependency up until 3.x, required thereafter variant( @@ -127,14 +112,15 @@ class Scr(CMakePackage): "libyogrt", default=True, description="Build SCR with libyogrt for get_time_remaining." ) depends_on("libyogrt scheduler=slurm", when="+libyogrt resource_manager=SLURM") + depends_on("libyogrt scheduler=flux", when="+libyogrt resource_manager=FLUX") depends_on("libyogrt scheduler=lsf", when="+libyogrt resource_manager=LSF") depends_on("libyogrt", when="+libyogrt") # PDSH required up to 3.0rc1, optional thereafter # TODO spack currently assumes 3.0.0 = 3.0 = 3 < 3.0rc1 < 3.0rc2 - variant("pdsh", default=True, when="@3.0.0,3.0rc2:", description="Enable use of PDSH") + variant("pdsh", default=True, when="@3:", description="Enable use of PDSH") depends_on("pdsh+static_modules", type=("build", "run"), when="+pdsh") - depends_on("pdsh+static_modules", type=("build", "run"), when="@:2,3.0rc1") + depends_on("pdsh+static_modules", type=("build", "run"), when="@:2") variant( "scr_config", @@ -154,7 +140,7 @@ class Scr(CMakePackage): variant( "resource_manager", default=detect_scheduler(), - values=("SLURM", "APRUN", "LSF", "NONE"), + values=("SLURM", "APRUN", "FLUX", "LSF", "NONE"), multi=False, description="Resource manager for which to configure SCR.", ) @@ -169,32 +155,27 @@ class Scr(CMakePackage): description="Asynchronous data transfer API to use with SCR.", ) - variant("bbapi", default=True, when="@3.0rc2:", description="Enable IBM BBAPI support") + variant("pthreads", default=True, when="@3:", description="Enable Pthread support") + depends_on("axl+pthreads", when="+pthreads") + + variant("bbapi", default=False, when="@3:", description="Enable IBM BBAPI support") depends_on("axl+bbapi", when="+bbapi") depends_on("axl~bbapi", when="~bbapi") variant( "bbapi_fallback", default=False, - when="@3:", + when="@3: +bbapi", description="Using BBAPI, if source or destination don't support \ file extents then fallback to pthreads", ) - depends_on("axl+bbapi_fallback", when="+bbapi_fallback") - variant( - "bbapi_fallback", - default=False, - when="@3.0rc2: +bbapi", - description="Using BBAPI, if source or destination don't support \ - file extents then fallback to pthreads", - ) - depends_on("axl+bbapi+bbapi_fallback", when="@3.0rc2: +bbapi_fallback") + depends_on("axl+bbapi+bbapi_fallback", when="@3: +bbapi_fallback") - variant("dw", default=False, when="@3.0rc2:", description="Enable Cray DataWarp support") + variant("dw", default=False, when="@3:", description="Enable Cray DataWarp support") depends_on("axl+dw", when="+dw") depends_on("axl~dw", when="~dw") - variant("examples", default=True, when="@3.0rc2:", description="Build SCR example programs") + variant("examples", default=True, when="@3:", description="Build SCR example programs") variant( "file_lock", @@ -213,7 +194,7 @@ class Scr(CMakePackage): # capturing SCR and syslog messages in a database') # depends_on('mysql', when='+mysql') - variant("shared", default=True, when="@3.0rc2:", description="Build with shared libraries") + variant("shared", default=True, when="@3:", description="Build with shared libraries") depends_on("libyogrt+static", when="~shared") for comp in cmpnts: depends_on(comp + "+shared", when="+shared") @@ -223,7 +204,7 @@ class Scr(CMakePackage): # TODO: Expose `tests` and `resource_manager` variants in components and # then propogate their setting through components. - variant("tests", default=True, when="@3.0rc2:", description="Build with CTest included") + variant("tests", default=True, when="@3:", description="Build with CTest included") # The default cache and control directories should be placed in tmpfs if available. # On Linux, /dev/shm is a common tmpfs location. Other platforms, like macOS, @@ -259,7 +240,17 @@ def cmake_args(self): spec = self.spec args = [] + args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) args.append(self.define_from_variant("ENABLE_FORTRAN", "fortran")) + args.append(self.define_from_variant("ENABLE_IBM_BBAPI", "bbapi")) + args.append(self.define_from_variant("ENABLE_CRAY_DW", "dw")) + args.append(self.define_from_variant("ENABLE_EXAMPLES", "examples")) + args.append(self.define_from_variant("ENABLE_YOGRT", "libyogrt")) + # args.append(self.define_from_variant('ENABLE_MYSQL', 'mysql')) + args.append(self.define_from_variant("ENABLE_PDSH", "pdsh")) + args.append(self.define_from_variant("ENABLE_PTHREADS", "pthreads")) + args.append(self.define_from_variant("ENABLE_TESTS", "tests")) + args.append(self.define_from_variant("SCR_ASYNC_API", "async_api")) args.append(self.define_from_variant("SCR_FILE_LOCK", "file_lock")) args.append(self.define_from_variant("SCR_CACHE_BASE", "cache_base")) args.append(self.define_from_variant("SCR_CNTL_BASE", "cntl_base")) @@ -281,28 +272,15 @@ def cmake_args(self): cmpnts = ["axl", "dtcmp", "er", "kvtree", "rankstr", "redset", "shuffile", "spath"] for comp in cmpnts: args.append(self.define("WITH_" + comp.upper() + "_PREFIX", spec[comp].prefix)) - else: - # dtcmp optional before this point - if "+dtcmp" in spec: - args.append(self.define("WITH_DTCMP_PREFIX", spec["dtcmp"].prefix)) - - # Only used prior to version 3 - args.append(self.define_from_variant("SCR_ASYNC_API", "async_api")) - - if spec.satisfies("@3.0rc2:"): - args.append(self.define_from_variant("ENABLE_IBM_BBAPI", "bbapi")) - args.append(self.define_from_variant("ENABLE_CRAY_DW", "dw")) - args.append(self.define_from_variant("ENABLE_EXAMPLES", "examples")) - args.append(self.define_from_variant("ENABLE_YOGRT", "libyogrt")) - # args.append(self.define_from_variant('ENABLE_MYSQL', 'mysql')) - args.append(self.define_from_variant("ENABLE_PDSH", "pdsh")) - args.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared")) - args.append(self.define_from_variant("ENABLE_TESTS", "tests")) # PDSH optional from this point on if "+pdsh" in spec: args.append(self.define("WITH_PDSH_PREFIX", spec["pdsh"].prefix)) else: + # dtcmp optional before this point + if "+dtcmp" in spec: + args.append(self.define("WITH_DTCMP_PREFIX", spec["dtcmp"].prefix)) + # PDSH required before this point args.append(self.define("WITH_PDSH_PREFIX", spec["pdsh"].prefix)) diff --git a/var/spack/repos/builtin/packages/seissol/package.py b/var/spack/repos/builtin/packages/seissol/package.py new file mode 100644 index 00000000000000..50944306f25a14 --- /dev/null +++ b/var/spack/repos/builtin/packages/seissol/package.py @@ -0,0 +1,364 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class Seissol(CMakePackage, CudaPackage, ROCmPackage): + """Seissol - A scientific software for the numerical simulation + of seismic wave phenomena and earthquake dynamics. + """ + + homepage = "http://www.seissol.org" + git = "https://github.com/SeisSol/SeisSol.git" + version("master", branch="master", submodules=True) + # we cannot use the tar.gz file because it does not contains submodules + version( + "1.3.0", tag="v1.3.0", commit="91377508af4412914d707b04481f8b678b1c4044", submodules=True + ) + version( + "1.2.0", tag="v1.2.0", commit="2057e6e81965e0789128c6d177592800bcf956e1", submodules=True + ) + version( + "1.1.4", tag="v1.1.4", commit="6d301757378ad8446173e0a12c095a695a708aaf", submodules=True + ) + version( + "1.1.3", tag="v1.1.3", commit="01ae1b127fcc6f766b819d2e797df6a3547d730a", submodules=True + ) + version( + "1.1.2", tag="v1.1.2", commit="71002c1c1498ebd6f50a954731da68fa4f9d436b", submodules=True + ) + + version( + "1.0.1", tag="v1.0.1", commit="9b1b0ec970af4ad79a155c63035234b660838476", submodules=True + ) + + maintainers("Thomas-Ulrich", "davschneller", "vikaskurapati") + + variant("asagi", default=True, description="Use ASAGI for material input") + variant( + "convergence_order", + default="4", + description="polynomial degree plus one", + values=(str(v) for v in range(2, 9)), + multi=False, + ) + variant( + "precision", + default="double", + description="float numerical precision", + values=("single", "double"), + multi=False, + ) + variant( + "dr_quad_rule", + default="stroud", + description="dynamic rupture quadrature rule", + values=("stroud", "dunavant"), + multi=False, + ) + variant( + "plasticity_method", + default="nb", + description="Plasticity method", + values=("nb", "ib"), + multi=False, + ) + variant( + "equations", + default="elastic", + description="equation set used", + values=("elastic", "anisotropic", "viscoelastic2", "poroelastic"), + multi=False, + ) + variant( + "number_of_mechanisms", default="3", description="number of mechanisms for viscoelasticity" + ) + variant("netcdf", default=True, description="Enable Netcdf") + variant( + "graph_partitioning_libs", + default="parmetis", + description="graph partitioning library for mesh partitioning", + values=("none", "parmetis", "ptscotch", "parhip"), + multi=True, + ) + + # GPU options + variant("intel_gpu", default=False, description="Compile for Intel GPUs") + variant( + "intel_gpu_arch", + default="none", + values=("none", "bdw", "skl", "pvc"), + description="The Intel GPU to compile for", + when="+intel_gpu", + ) + + forwarded_variants = ["cuda", "intel_gpu", "rocm"] + for v in forwarded_variants: + variant( + "sycl_backend", + default="acpp", + description="SYCL backend to use for DR and point sources", + values=("acpp", "oneapi"), + when=f"+{v}", + ) + variant( + "sycl_gemm", + default=False, + description="Use SYCL also for the wave propagation part (default for Intel GPUs)", + when=f"+{v}", + ) + + requires( + "-cuda -rocm -intel_gpu", + "+cuda", + "+rocm", + "+intel_gpu", + policy="one_of", + msg="You may either compile for one GPU backend, or for CPU.", + ) + + requires("%oneapi", when="sycl_backend=oneapi") + + depends_on("hipsycl@0.9.3: +cuda", when="+cuda sycl_backend=acpp") + + # TODO: this one needs to be +rocm as well--but that's not implemented yet + depends_on("hipsycl@develop", when="+rocm sycl_backend=acpp") + + # TODO: extend as soon as level zero is available + depends_on("hipsycl@develop", when="+intel_gpu sycl_backend=acpp") + + # TODO: once adaptivecpp supports NVHPC, forward that (SYCL_USE_NVHPC) + + # GPU architecture requirements + conflicts( + "cuda_arch=none", + when="+cuda", + msg="A value for cuda_arch must be specified. Add cuda_arch=XX", + ) + + conflicts( + "amdgpu_target=none", + when="+rocm", + msg="A value for amdgpu_arch must be specified. Add amdgpu_arch=XX", + ) + + conflicts( + "intel_gpu_arch=none", + when="+intel_gpu", + msg="A value for intel_gpu_arch must be specified. Add intel_gpu_arch=XX", + ) + + conflicts( + "%intel", + when="@1.3:", + msg="The Intel compiler is unsupported from v1.3 onward. Please use e.g.gcc or oneapi", + ) + + variant( + "gemm_tools_list", + default="LIBXSMM,PSpaMM", + description="gemm toolkit(s) for the (CPU) code generator", + values=("LIBXSMM", "MKL", "OpenBLAS", "BLIS", "PSpaMM", "Eigen", "LIBXSMM_JIT"), + multi=True, + ) + + variant("memkind", default=True, description="Use memkind library for hbw memory support") + + depends_on("mpi") + + with when("+cuda"): + for var in ["openmpi", "mpich", "mvapich", "mvapich2", "mvapich2-gdr"]: + depends_on(f"{var} +cuda", when=f"^[virtuals=mpi] {var}") + + with when("+rocm"): + for var in ["mpich", "mvapich2-gdr"]: + depends_on(f"{var} +rocm", when=f"^[virtuals=mpi] {var}") + + # with cuda 12 and llvm 14:15, we have the issue: "error: no template named 'texture" + # https://github.com/llvm/llvm-project/issues/61340 + conflicts("cuda@12", when="+cuda ^llvm@14:15") + depends_on("cuda@11:", when="+cuda") + depends_on("hip", when="+rocm") + + # graph partitioning + with when("graph_partitioning_libs=parmetis"): + depends_on("parmetis +int64 +shared") + depends_on("metis +int64 +shared") + + depends_on( + "scotch +mpi +mpi_thread +shared +threads +int64", when="graph_partitioning_libs=ptscotch" + ) + depends_on("kahip", when="graph_partitioning_libs=parhip") + + depends_on("hdf5 +shared +threadsafe +hl +mpi") + + depends_on("netcdf-c@4.6: +shared +mpi", when="+netcdf") + + depends_on("asagi +mpi +mpi3", when="+asagi") + + depends_on("easi ~asagi jit=impalajit,lua", when="~asagi") + depends_on("easi +asagi jit=impalajit,lua", when="+asagi") + + depends_on("intel-mkl threads=none", when="gemm_tools_list=MKL") + depends_on("blis threads=none", when="gemm_tools_list=BLIS") + depends_on("openblas threads=none", when="gemm_tools_list=OpenBLAS") + depends_on("libxsmm@main", when="gemm_tools_list=LIBXSMM_JIT") + + conflicts("gemm_tools_list=LIBXSMM", when="gemm_tools_list=LIBXSMM_JIT") + + depends_on("memkind", when="+memkind target=x86_64:") + + depends_on("yaml-cpp@0.6.2") + depends_on("eigen@3.4.0") + + # build dependencies (code generation) + with default_args(type="build"): + # https://seissol.readthedocs.io/en/latest/installing-dependencies.html + depends_on("cmake@3.20:") + depends_on("python@3.9:") + depends_on("py-setuptools") + depends_on("py-numpy@1.12:") + depends_on("py-scipy") + depends_on("py-matplotlib") + depends_on("py-pspamm", when="gemm_tools_list=PSpaMM") + + forwarded_variants = ["cuda", "intel_gpu", "rocm"] + for v in forwarded_variants: + depends_on("py-gemmforge", when=f"+{v}") + depends_on("py-chainforgecodegen", when=f"+{v}") + + depends_on("libxsmm@=1.17 +generator", when="gemm_tools_list=LIBXSMM target=x86_64:") + + def cmake_args(self): + args = [ + "-DMPI=ON", + self.define_from_variant("ASAGI", "asagi"), + self.define_from_variant("PRECISION", "precision"), + self.define_from_variant("PLASTICITY_METHOD", "plasticity_method"), + self.define_from_variant("DR_QUAD_RULE", "dr_quad_rule"), + self.define_from_variant("ORDER", "convergence_order"), + self.define_from_variant("EQUATIONS", "equations"), + self.define_from_variant("NETCDF", "netcdf"), + ] + + gemm_tools_list = ",".join(self.spec.variants["gemm_tools_list"].value) + args.append(f"-DGEMM_TOOLS_LIST={gemm_tools_list}") + + graph_partitioning_libs = ",".join(self.spec.variants["graph_partitioning_libs"].value) + args.append(f"-DGRAPH_PARTITIONING_LIBS={graph_partitioning_libs}") + + if self.spec.variants["equations"].value != "viscoelastic2": + args.append("-DNUMBER_OF_MECHANISMS=0") + else: + args.append(self.define_from_variant("NUMBER_OF_MECHANISMS", "number_of_mechanisms")) + + with_gpu = ( + self.spec.satisfies("+cuda") + or self.spec.satisfies("+rocm") + or self.spec.satisfies("+intel_gpu") + ) + + if with_gpu: + # Nvidia GPUs + if self.spec.satisfies("+cuda"): + cuda_arch = self.spec.variants["cuda_arch"].value[0] + args.append(f"-DDEVICE_ARCH=sm_{cuda_arch}") + args.append("-DUSE_GRAPH_CAPTURING=ON -DENABLE_PROFILING_MARKERS=ON") + if self.spec.satisfies("~sycl_gemm"): + args.append("-DDEVICE_BACKEND=cuda") + + # ROCm/AMD GPUs + if self.spec.satisfies("+rocm"): + amdgpu_target = self.spec.variants["amdgpu_target"].value[0] + args.append(f"-DDEVICE_ARCH={amdgpu_target}") + args.append("-DENABLE_PROFILING_MARKERS=ON") + + if self.spec.satisfies("+rocm@:5.6"): + args.append("-DUSE_GRAPH_CAPTURING=OFF") + else: + args.append("-DUSE_GRAPH_CAPTURING=ON") + + if self.spec.satisfies("~sycl_gemm"): + args.append("-DDEVICE_BACKEND=hip") + + # Intel GPUs + if self.spec.satisfies("+intel_gpu"): + assert self.spec.variants["intel_gpu_arch"].value != "none" + intel_gpu_arch = self.spec.variants["intel_gpu_arch"].value + if self.spec.satisfies("@:1.1.3"): + args.append("-DUSE_GRAPH_CAPTURING=OFF") + else: + args.append("-DUSE_GRAPH_CAPTURING=ON") + args.append(f"-DDEVICE_ARCH={intel_gpu_arch}") + + # SYCL + sycl_backends = {"acpp": "hipsycl", "oneapi": "oneapi"} + syclcc_backends = {"acpp": "hipsycl", "oneapi": "dpcpp"} + + sycl_backend = self.spec.variants["sycl_backend"].value + args.append(f"-DSYCLCC={syclcc_backends[sycl_backend]}") + if self.spec.satisfies("+sycl_gemm"): + args.append(f"-DDEVICE_BACKEND={sycl_backends[sycl_backend]}") + + # CPU arch + + # cf. https://spack.readthedocs.io/en/latest/basic_usage.html#support-for-specific-microarchitectures + + # basic family matching + hostarch = "noarch" + if str(self.spec.target) == "aarch64": + hostarch = "neon" + if str(self.spec.target) == "x86_64": + # pure x86_64v1 doesn't support anything above SSE3 + hostarch = "noarch" + if str(self.spec.target) == "x86_64_v2": + # AVX is only required for x86_64v3 and upwards + hostarch = "wsm" + if str(self.spec.target) == "x86_64_v3": + hostarch = "hsw" + if str(self.spec.target) == "x86_64_v4": + hostarch = "skx" + + # specific architecture matching + if self.spec.target >= "westmere": + hostarch = "wsm" + if self.spec.target >= "sandybridge": + hostarch = "snb" + if self.spec.target >= "haswell": + hostarch = "hsw" + if self.spec.target >= "mic_knl": + hostarch = "knl" + if self.spec.target >= "skylake_avx512": + hostarch = "skx" + if self.spec.target >= "zen": + hostarch = "naples" + if self.spec.target >= "zen2": + hostarch = "rome" + if self.spec.target >= "zen3": + hostarch = "milan" + if self.spec.target >= "zen4": + hostarch = "bergamo" + if self.spec.target >= "thunderx2": + hostarch = "thunderx2t99" + if self.spec.target >= "power9": + hostarch = "power9" + if self.spec.target >= "m1": + hostarch = "apple-m1" + if self.spec.target >= "m2": + hostarch = "apple-m2" + if self.spec.target >= "a64fx": + hostarch = "a64fx" + + args.append(f"-DHOST_ARCH={hostarch}") + + args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path)) + + return args + + def setup_run_environment(self, env): + # for seissol-launch + env.prepend_path("PATH", self.prefix.share) diff --git a/var/spack/repos/builtin/packages/sensei/package.py b/var/spack/repos/builtin/packages/sensei/package.py index a00e944ea8fc38..ab59e1983ad339 100644 --- a/var/spack/repos/builtin/packages/sensei/package.py +++ b/var/spack/repos/builtin/packages/sensei/package.py @@ -88,11 +88,13 @@ class Sensei(CMakePackage): # HDF5 depends_on("hdf5", when="+hdf5") - depends_on("python@3:", when="+python", type=("build", "run")) - extends("python", when="+python") - depends_on("py-numpy", when="+python", type=("build", "run")) - depends_on("py-mpi4py@:3", when="+python", type=("build", "run")) - depends_on("swig", when="+python", type="build") + with when("+python"): + extends("python") + depends_on("python@3:", type=("build", "link", "run")) + depends_on("py-numpy", type=("build", "run")) + depends_on("py-mpi4py@:3", type=("build", "run")) + depends_on("swig", type="build") + depends_on("cmake@3.6:", when="@3:", type="build") depends_on("pugixml") depends_on("mpi") @@ -161,4 +163,13 @@ def cmake_args(self): args.append(self.define("SENSEI_PYTHON_VERSION", 3)) args.append(self.define_from_variant(f"{prefix}ENABLE_CATALYST_PYTHON", "catalyst")) + # lib/libsensei.so links to lib/pythonX.Y/site-packages/sensei/_PythonAnalysis.so, so + # register the install rpath. + install_rpaths = [ + self.spec.prefix.lib, + self.spec.prefix.lib64, + join_path(python_platlib, "sensei"), + ] + args.append(self.define("CMAKE_INSTALL_RPATH", install_rpaths)) + return args diff --git a/var/spack/repos/builtin/packages/seqfu/package.py b/var/spack/repos/builtin/packages/seqfu/package.py index 53de9fd0a2528f..895d5386c2155c 100644 --- a/var/spack/repos/builtin/packages/seqfu/package.py +++ b/var/spack/repos/builtin/packages/seqfu/package.py @@ -13,7 +13,9 @@ class Seqfu(Package): url = "https://github.com/telatin/seqfu2/archive/refs/tags/v1.20.3.tar.gz" license("GPL-3.0", checked_by="dialvarezs") + maintainers("dialvarezs") + version("1.22.3", sha256="65c1090cafe0e760e68d15d450bccfd57c0a03d553fdabca26e2191f566fef62") version("1.20.3", sha256="1b287b99f3f1ac7045f4d551e781d6780ce168ba8e0a7bfaa0f5490f32e15938") depends_on("c", type="build") # generated @@ -22,7 +24,7 @@ class Seqfu(Package): depends_on("nim@2", type="build") depends_on("zlib", type="build") - patch("wno_incompatible_pointer_types.patch", when="%gcc@14:") + patch("wno_incompatible_pointer_types.patch", when="@:1.21%gcc@14:") def setup_build_environment(self, env): env.set("NIMBLE_DIR", ".nimble") diff --git a/var/spack/repos/builtin/packages/seqkit/package.py b/var/spack/repos/builtin/packages/seqkit/package.py index 639f7cbbaf2841..da1e1dbae8334d 100644 --- a/var/spack/repos/builtin/packages/seqkit/package.py +++ b/var/spack/repos/builtin/packages/seqkit/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.go from spack.package import * diff --git a/var/spack/repos/builtin/packages/serialbox/package.py b/var/spack/repos/builtin/packages/serialbox/package.py index 0618fe9db2bffb..ed455611cff3a6 100644 --- a/var/spack/repos/builtin/packages/serialbox/package.py +++ b/var/spack/repos/builtin/packages/serialbox/package.py @@ -45,9 +45,6 @@ class Serialbox(CMakePackage): ) depends_on("cmake@3.12:", type="build") - # We might be provided with an external vanilla cmake, and we need one with - # with https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5025 - depends_on("cmake@3.19:", when="%pgi", type="build") depends_on("boost@1.54:", type="build") depends_on("boost+filesystem+system", when="~std-filesystem", type=("build", "link")) @@ -134,7 +131,7 @@ def libs(self): return libs msg = "Unable to recursively locate {0} libraries in {1}" - raise spack.error.NoLibrariesError(msg.format(self.spec.name, self.spec.prefix)) + raise NoLibrariesError(msg.format(self.spec.name, self.spec.prefix)) def flag_handler(self, name, flags): cmake_flags = [] @@ -147,10 +144,7 @@ def flag_handler(self, name, flags): # undefined reference to # `std::experimental::filesystem::v1::__cxx11::path:: # _M_find_extension[abi:cxx11]() const' - if any( - self.spec.satisfies("{0}+std-filesystem".format(x)) - for x in ["%intel@:19.0.1", "%pgi@:19.9"] - ): + if self.spec.satisfies("%intel@:19.0.1+std-filesystem"): cmake_flags.append("-D_GLIBCXX_USE_CXX11_ABI=0") return flags, None, (cmake_flags or None) diff --git a/var/spack/repos/builtin/packages/sfcio/package.py b/var/spack/repos/builtin/packages/sfcio/package.py index afe4ed84c7f0e9..5ee64f70928c3f 100644 --- a/var/spack/repos/builtin/packages/sfcio/package.py +++ b/var/spack/repos/builtin/packages/sfcio/package.py @@ -46,5 +46,5 @@ def flag_handler(self, name, flags): return (None, None, flags) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/sgpp/package.py b/var/spack/repos/builtin/packages/sgpp/package.py index caae561d41b8a9..367547e8b932b4 100644 --- a/var/spack/repos/builtin/packages/sgpp/package.py +++ b/var/spack/repos/builtin/packages/sgpp/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * from spack.pkg.builtin.boost import Boost @@ -190,5 +191,4 @@ def install_args(self, spec, prefix): @run_after("install") def python_install(self): if "+python" in self.spec: - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/shengbte/package.py b/var/spack/repos/builtin/packages/shengbte/package.py index c56dac10cd14ea..2e67bfca1be3bd 100644 --- a/var/spack/repos/builtin/packages/shengbte/package.py +++ b/var/spack/repos/builtin/packages/shengbte/package.py @@ -9,8 +9,8 @@ class Shengbte(MakefilePackage): """ShengBTE is a software package for solving the Boltzmann Transport Equation for phonons.""" - homepage = "www.shengbte.org" - url = "www.shengbte.org/downloads/ShengBTE-v1.1.1-8a63749.tar.bz2" + homepage = "https://www.shengbte.org" + url = "https://www.shengbte.org/downloads/ShengBTE-v1.1.1-8a63749.tar.bz2" license("GPL-3.0-only") diff --git a/var/spack/repos/builtin/packages/sherpa/package.py b/var/spack/repos/builtin/packages/sherpa/package.py index f8d0ffa7933196..20133e54be6104 100644 --- a/var/spack/repos/builtin/packages/sherpa/package.py +++ b/var/spack/repos/builtin/packages/sherpa/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * @@ -22,6 +24,7 @@ class Sherpa(CMakePackage, AutotoolsPackage): license("GPL-3.0-only") + version("3.0.1", sha256="ff5f43e79a9a10919391242307a771eca0c57b0462c11bfb99ee4a0fe8c48c58") version("3.0.0", sha256="e460d8798b323c4ef663293a2c918b1463e9641b35703a54d70d25c852c67d36") version("2.2.15", sha256="0300fd719bf6a089b7dc5441f720e669ac1cb030045d87034a4733bee98e7bbc") version("2.2.14", sha256="f17d88d7f3bc4234a9db3872e8a3c1f3ef99e1e2dc881ada5ddf848715dc82da") diff --git a/var/spack/repos/builtin/packages/shuffile/package.py b/var/spack/repos/builtin/packages/shuffile/package.py index 116254b1faaab1..201d1f3b1acc7d 100644 --- a/var/spack/repos/builtin/packages/shuffile/package.py +++ b/var/spack/repos/builtin/packages/shuffile/package.py @@ -19,13 +19,15 @@ class Shuffile(CMakePackage): license("MIT") version("main", branch="main") + version("0.4.0", sha256="fc7116d8eaa1ab79480e6e3f04064750e517d2a8aeccbff90c73a2590f726378") version("0.3.0", sha256="3463ad4a23fd31aa9a3426346ada04399fb9369dd1f40d22df9f19f9c0c1f8ae") version("0.2.0", sha256="467ffef72214c109b69f09d03e42be5e9254f13751b09c71168c14fa99117521") version("0.1.0", sha256="9e730cc8b7937517a9cffb08c031d9f5772306341c49d17b87b7f349d55a6d5e") version("0.0.4", sha256="f0249ab31fc6123103ad67b1eaf799277c72adcf0dfcddf8c3a18bad2d45031d") version("0.0.3", sha256="a3f685526a1146a5ad8dbacdc5f9c2e1152d9761a1a179c1db34f55afc8372f6") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("mpi") depends_on("kvtree+mpi") diff --git a/var/spack/repos/builtin/packages/sigio/package.py b/var/spack/repos/builtin/packages/sigio/package.py index 305f0e9958bc2d..b6d3020211bb3d 100644 --- a/var/spack/repos/builtin/packages/sigio/package.py +++ b/var/spack/repos/builtin/packages/sigio/package.py @@ -44,5 +44,5 @@ def flag_handler(self, name, flags): return (None, None, flags) def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/silo/H5EPR_SEMI_COLON.patch b/var/spack/repos/builtin/packages/silo/H5EPR_SEMI_COLON.patch index ae741450810e25..023f0bbe662a3e 100644 --- a/var/spack/repos/builtin/packages/silo/H5EPR_SEMI_COLON.patch +++ b/var/spack/repos/builtin/packages/silo/H5EPR_SEMI_COLON.patch @@ -1,50 +1,38 @@ diff --git a/src/hdf5_drv/H5FDsilo.c b/src/hdf5_drv/H5FDsilo.c +index 840dfd0..0153e18 100644 --- a/src/hdf5_drv/H5FDsilo.c +++ b/src/hdf5_drv/H5FDsilo.c -@@ -243,6 +243,12 @@ - return tmp; - } - -+#if HDF5_VERSION_GE(1,10,8) -+#define H5EPR_SEMI_COLON ; -+#else -+#define H5EPR_SEMI_COLON -+#endif -+ - - #ifdef H5_HAVE_SNPRINTF - #define H5E_PUSH_HELPER(Func,Cls,Maj,Min,Msg,Ret,Errno) \ -@@ -252,13 +258,13 @@ +@@ -255,13 +255,13 @@ static const char *flavors(H5F_mem_t m) snprintf(msg, sizeof(msg), Msg "(errno=%d, \"%s\")", \ Errno, strerror(Errno)); \ ret_value = Ret; \ - H5Epush_ret(Func, Cls, Maj, Min, msg, Ret) \ -+ H5Epush_ret(Func, Cls, Maj, Min, msg, Ret) H5EPR_SEMI_COLON \ ++ H5Epush_ret(Func, Cls, Maj, Min, msg, Ret) ; \ } #else #define H5E_PUSH_HELPER(Func,Cls,Maj,Min,Msg,Ret,Errno) \ { \ ret_value = Ret; \ - H5Epush_ret(Func, Cls, Maj, Min, Msg, Ret) \ -+ H5Epush_ret(Func, Cls, Maj, Min, Msg, Ret) H5EPR_SEMI_COLON \ ++ H5Epush_ret(Func, Cls, Maj, Min, Msg, Ret) ; \ } #endif -@@ -1355,7 +1368,7 @@ +@@ -1308,7 +1308,7 @@ H5FD_silo_sb_encode(H5FD_t *_file, char *name/*out*/, assert(sizeof(hsize_t)<=8); memcpy(p, &file->block_size, sizeof(hsize_t)); if (H5Tconvert(H5T_NATIVE_HSIZE, H5T_STD_U64LE, 1, buf+8, NULL, H5P_DEFAULT)<0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) H5EPR_SEMI_COLON ++ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) ; return 0; } -@@ -1383,14 +1396,14 @@ +@@ -1336,14 +1336,14 @@ H5FD_silo_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf) /* Make sure the name/version number is correct */ if (strcmp(name, "LLNLsilo")) - H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid silo superblock", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid silo superblock", -1) H5EPR_SEMI_COLON ++ H5Epush_ret(func, H5E_ERR_CLS, H5E_FILE, H5E_BADVALUE, "invalid silo superblock", -1) ; buf += 8; /* Decode block size */ @@ -52,7 +40,7 @@ diff --git a/src/hdf5_drv/H5FDsilo.c b/src/hdf5_drv/H5FDsilo.c memcpy(x, buf, 8); if (H5Tconvert(H5T_STD_U64LE, H5T_NATIVE_HSIZE, 1, x, NULL, H5P_DEFAULT)<0) - H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) -+ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) H5EPR_SEMI_COLON ++ H5Epush_ret(func, H5E_ERR_CLS, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1) ; ap = (hsize_t*)x; /*file->block_size = *ap; ignore stored value for now */ diff --git a/var/spack/repos/builtin/packages/silo/package.py b/var/spack/repos/builtin/packages/silo/package.py index 993c0c7ff8370c..3416a5c6108a23 100644 --- a/var/spack/repos/builtin/packages/silo/package.py +++ b/var/spack/repos/builtin/packages/silo/package.py @@ -142,12 +142,18 @@ def flag_handler(self, name, flags): # presented with an HDF5 API consistent with the HDF5 version. # Use the latest even-numbered API version, i.e. v1.13.1 uses # API v1.12 - maj_ver = int(spec["hdf5"].version[0]) - min_ver = int(spec["hdf5"].version[1]) + + # hdf5 support branches have a `develop` prefix + if "develop" in str(spec["hdf5"].version): + maj_ver = int(spec["hdf5"].version[1]) + min_ver = int(spec["hdf5"].version[2]) + else: + maj_ver = int(spec["hdf5"].version[0]) + min_ver = int(spec["hdf5"].version[1]) min_apiver = int(min_ver / 2) * 2 flags.append("-DH5_USE_{0}{1}_API".format(maj_ver, min_apiver)) - if spec.compiler.name in ["clang", "apple-clang"]: + if spec.satisfies("%clang") or spec.satisfies("%apple-clang"): flags.append("-Wno-implicit-function-declaration") return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/singularity-eos/package.py b/var/spack/repos/builtin/packages/singularity-eos/package.py index ef5c5711184929..46a768ce47b18a 100644 --- a/var/spack/repos/builtin/packages/singularity-eos/package.py +++ b/var/spack/repos/builtin/packages/singularity-eos/package.py @@ -5,6 +5,7 @@ import os +import spack.version from spack.package import * diff --git a/var/spack/repos/builtin/packages/singularityce/package.py b/var/spack/repos/builtin/packages/singularityce/package.py index 08630bf7512a83..6a14fe471f2e23 100644 --- a/var/spack/repos/builtin/packages/singularityce/package.py +++ b/var/spack/repos/builtin/packages/singularityce/package.py @@ -8,6 +8,7 @@ import llnl.util.tty as tty +import spack.tengine from spack.package import * diff --git a/var/spack/repos/builtin/packages/slate/package.py b/var/spack/repos/builtin/packages/slate/package.py index 9a89c50bcc0ecc..879c773603fe07 100644 --- a/var/spack/repos/builtin/packages/slate/package.py +++ b/var/spack/repos/builtin/packages/slate/package.py @@ -26,6 +26,9 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause") version("master", branch="master") + version( + "2024.10.29", sha256="e729fad51f44b1340c0f64ac0f862026121183a3c8d731874f0a11a3b5053223" + ) version( "2024.05.31", sha256="9c5d4d6779d8935b6fe41031b46e11ab92102f13c5f684022287c8616661b775" ) @@ -89,6 +92,7 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): for val in ROCmPackage.amdgpu_targets: depends_on("blaspp +rocm amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) depends_on("lapackpp +rocm amdgpu_target=%s" % val, when="amdgpu_target=%s" % val) + depends_on("lapackpp@2024.10.26:", when="@2024.10.29:") depends_on("lapackpp@2024.05.31:", when="@2024.05.31:") depends_on("lapackpp@2023.11.05:", when="@2023.11.05:") depends_on("lapackpp@2023.08.25:", when="@2023.08.25:") @@ -123,6 +127,12 @@ class Slate(CMakePackage, CudaPackage, ROCmPackage): conflicts("+sycl", when="@:2022.07.00", msg="SYCL support requires SLATE version 2023.08.25") conflicts("^hip@5.6.0:", when="@:2023.08.25", msg="Incompatible version of HIP/ROCm") + def flag_handler(self, name, flags): + if name == "cxxflags": + if self.spec.satisfies("%oneapi@2025:"): + flags.append("-Wno-error=missing-template-arg-list-after-template-kw") + return (flags, None, None) + def cmake_args(self): spec = self.spec backend_config = "-Duse_cuda=%s" % ("+cuda" in spec) diff --git a/var/spack/repos/builtin/packages/slepc/package.py b/var/spack/repos/builtin/packages/slepc/package.py index 92f7c93da8b2a9..019f676696b96a 100644 --- a/var/spack/repos/builtin/packages/slepc/package.py +++ b/var/spack/repos/builtin/packages/slepc/package.py @@ -22,6 +22,7 @@ class Slepc(Package, CudaPackage, ROCmPackage): test_requires_compiler = True version("main", branch="main") + version("3.22.1", sha256="badb5cb038d09dbf1cc8f34d194673ab011c69cc46888101955c786d21c8d8c9") version("3.22.0", sha256="45eb4d085875b50108c91fd9168ed17bc9158cc3b1e530ac843b26d9981c3db0") version("3.21.2", sha256="306fa649750509b3957b9f9311bff5dc1d20be5c5d494dd6472584c439b931f6") version("3.21.1", sha256="beb33f0a15c3ce81744b15ad09ddf84dae70dbf3475c5ef032b8549ab87d6d8a") diff --git a/var/spack/repos/builtin/packages/solr/package.py b/var/spack/repos/builtin/packages/solr/package.py index 0a14f666a3dc28..532b5dfc65ae66 100644 --- a/var/spack/repos/builtin/packages/solr/package.py +++ b/var/spack/repos/builtin/packages/solr/package.py @@ -12,23 +12,37 @@ class Solr(Package): recovery,centralized configuration and more. Solr powers the search and navigation features of many of the world's largest internet sites.""" - homepage = "https://lucene.apache.org/" - url = "https://archive.apache.org/dist/lucene/solr/7.7.3/solr-7.7.3.tgz" - list_url = "https://archive.apache.org/dist/lucene/solr" + homepage = "https://solr.apache.org/" + url = "https://archive.apache.org/dist/solr/solr/7.7.3/solr-7.7.3.tgz" + list_url = "https://archive.apache.org/dist/solr/solr" list_depth = 1 - depends_on("java", type="run") + license("Apache-2.0", checked_by="wdconinc") + + version("9.7.0", sha256="38548b86fa4e3c87883875952da124bf7d742cb8f7b25d37a1176833588e8552") + version("8.11.4", sha256="163fbdf246bbd78910bc36c3257ad50cdf31ccc3329a5ef885c23c9ef69e0ebe") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2024-45216 + version( + "8.11.3", sha256="178300ae095094c2060a1060cf475aa935f1202addfb5bacb38e8712ccb56455" + ) + version( + "8.11.2", sha256="54d6ebd392942f0798a60d50a910e26794b2c344ee97c2d9b50e678a7066d3a6" + ) + version("8.6.0", sha256="4519ccdb531619df770f1065db6adcedc052c7aa94b42806d541966550956aa5") + version("8.5.2", sha256="c457d6c7243241cad141e1df34c6f669d58a6c60e537f4217d032616dd066dcf") + version("8.5.1", sha256="47b68073b37bbcc0517a355ef722f20827c3f1416537ebbccf5239dda8064a0b") + version("8.5.0", sha256="9e54711ad0aa60e9723d2cdeb20cf0d21ee2ab9fa0048ec59dcb5f9d94dc61dd") + version("8.4.1", sha256="ec39e1e024b2e37405149de41e39e875a39bf11a53f506d07d96b47b8d2a4301") + version("7.7.3", sha256="3ec67fa430afa5b5eb43bb1cd4a659e56ee9f8541e0116d6080c0d783870baee") - license("CC-BY-2.5") + depends_on("java", type="run") - version("8.11.3", sha256="178300ae095094c2060a1060cf475aa935f1202addfb5bacb38e8712ccb56455") - version("8.11.2", sha256="54d6ebd392942f0798a60d50a910e26794b2c344ee97c2d9b50e678a7066d3a6") - version("8.6.0", sha256="4519ccdb531619df770f1065db6adcedc052c7aa94b42806d541966550956aa5") - version("8.5.2", sha256="c457d6c7243241cad141e1df34c6f669d58a6c60e537f4217d032616dd066dcf") - version("8.5.1", sha256="47b68073b37bbcc0517a355ef722f20827c3f1416537ebbccf5239dda8064a0b") - version("8.5.0", sha256="9e54711ad0aa60e9723d2cdeb20cf0d21ee2ab9fa0048ec59dcb5f9d94dc61dd") - version("8.4.1", sha256="ec39e1e024b2e37405149de41e39e875a39bf11a53f506d07d96b47b8d2a4301") - version("7.7.3", sha256="3ec67fa430afa5b5eb43bb1cd4a659e56ee9f8541e0116d6080c0d783870baee") + def url_for_version(self, version): + if self.spec.satisfies("@9:"): + return f"https://archive.apache.org/dist/solr/solr/{version}/solr-{version}.tgz" + else: + return f"https://archive.apache.org/dist/lucene/solr/{version}/solr-{version}.tgz" def install(self, spec, prefix): install_tree(".", prefix) diff --git a/var/spack/repos/builtin/packages/soqt/package.py b/var/spack/repos/builtin/packages/soqt/package.py new file mode 100644 index 00000000000000..bceeb5bc46dd9d --- /dev/null +++ b/var/spack/repos/builtin/packages/soqt/package.py @@ -0,0 +1,56 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Soqt(CMakePackage): + """Old Coin GUI binding for Qt, replaced by Quarter""" + + homepage = "https://github.com/coin3d/soqt/" + url = "https://github.com/coin3d/soqt/releases/download/v1.6.3/soqt-1.6.3-src.tar.gz" + git = "https://github.com/coin3d/soqt/" + + depends_on("cxx", type="build") + depends_on("cmake@3:", type="build") + + license("BSD-3-Clause", checked_by="paulgessinger") + + version("1.6.3", sha256="79342e89290783457c075fb6a60088aad4a48ea072ede06fdf01985075ef46bd") + version("1.6.2", sha256="fb483b20015ab827ba46eb090bd7be5bc2f3d0349c2f947c3089af2b7003869c") + version("1.6.1", sha256="80289d9bd49ffe709ab85778c952573f43f1c725ea958c6d5969b2e9c77bb3ba") + + depends_on("coin3d") + depends_on("opengl") + + variant( + "static_defaults", + default=True, + description="Enable statically linked in default materials", + ) + variant("spacenav", default=True, description="Enable Space Navigator support") + variant("tests", default=False, description="Build small test programs.") + variant("iv", default=True, description="Enable extra Open Inventor extensions") + + depends_on("qmake") + with when("^[virtuals=qmake] qt"): + depends_on("qt@5 +gui +opengl") + with when("^[virtuals=qmake] qt-base"): + depends_on("qt-base@6 +gui +opengl +widgets") + + def cmake_args(self): + args = [ + self.define_from_variant("COIN_IV_EXTENSIONS", "iv"), + self.define_from_variant("WITH_STATIC_DEFAULTS", "static_defaults"), + self.define_from_variant("HAVE_SPACENAV_SUPPORT", "spacenav"), + self.define_from_variant("SOQT_BUILD_TESTS", "tests"), + ] + if self.spec.satisfies("^[virtuals=qmake] qt"): + args.append(self.define("SOQT_USE_QT5", True)) + args.append(self.define("SOQT_USE_QT6", False)) + if self.spec.satisfies("^[virtuals=qmake] qt-base"): + args.append(self.define("SOQT_USE_QT5", False)) + args.append(self.define("SOQT_USE_QT6", True)) + return args diff --git a/var/spack/repos/builtin/packages/sourmash/package.py b/var/spack/repos/builtin/packages/sourmash/package.py index 102fc499ee5aaa..abcf9f60c37eaf 100644 --- a/var/spack/repos/builtin/packages/sourmash/package.py +++ b/var/spack/repos/builtin/packages/sourmash/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -35,8 +36,7 @@ def install(self, spec, prefix): cargo = Executable("cargo") cargo("build", "--release") # install python package - args = std_pip_args + ["--prefix=" + prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={prefix}", ".") # move sourmash.so into expected place site_packages = join_path(python_platlib, "sourmash") lib_ext = "dylib" if spec.platform == "Darwin" else "so" diff --git a/var/spack/repos/builtin/packages/sox/package.py b/var/spack/repos/builtin/packages/sox/package.py index d830fb27d6c71c..f21c34222cc03d 100644 --- a/var/spack/repos/builtin/packages/sox/package.py +++ b/var/spack/repos/builtin/packages/sox/package.py @@ -14,7 +14,7 @@ class Sox(AutotoolsPackage): version("14.4.2", sha256="81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c") - depends_on("c", type="build") # generated + depends_on("c", type="build") variant("mp3", default=False, description="Build with mp3 support") @@ -24,3 +24,10 @@ class Sox(AutotoolsPackage): depends_on("opus") depends_on("lame", when="+mp3") depends_on("libmad", when="+mp3") + + def flag_handler(self, name, flags): + # https://github.com/Homebrew/homebrew-core/blob/master/Formula/s/sox.rb + if name == "cflags": + if self.spec.satisfies("%apple-clang@15:"): + flags.append("-Wno-incompatible-function-pointer-types") + return (flags, None, None) diff --git a/var/spack/repos/builtin/packages/sp/package.py b/var/spack/repos/builtin/packages/sp/package.py index 5b3b7b4840719b..7b22e688b8deda 100644 --- a/var/spack/repos/builtin/packages/sp/package.py +++ b/var/spack/repos/builtin/packages/sp/package.py @@ -66,5 +66,5 @@ def cmake_args(self): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/spath/package.py b/var/spack/repos/builtin/packages/spath/package.py index 037dfff2bc6f1c..025699736247e5 100644 --- a/var/spack/repos/builtin/packages/spath/package.py +++ b/var/spack/repos/builtin/packages/spath/package.py @@ -19,13 +19,15 @@ class Spath(CMakePackage): license("MIT") version("main", branch="main") + version("0.4.0", sha256="469c9d36f9244826c6ec264a779eed870a772f467d6964030d336e509d3c9374") version("0.3.0", sha256="cb155a31cebde8b7bf397123de3be290fd99d3863509b4ba9b0252caba660082") version("0.2.0", sha256="2de8a25547b53ef064664d79b543141bc3020219f40ff0e1076f676e13a9e77a") version("0.1.0", sha256="2cfc635b2384d3f92973c7aea173dabe47da112d308f5098e6636e4b2f4a704c") version("0.0.2", sha256="7a65be59c3d27e92ed4718fba1a97a4a1c68e0a552b54de13d58afe3d8199cf7") version("0.0.1", sha256="f41c0ac74e6fb8acfd0c072d756db0fc9c00441f22be492cc4ad25f7fb596a24") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("zlib-api", type="link", when="@:0.0.2") diff --git a/var/spack/repos/builtin/packages/spectre/package.py b/var/spack/repos/builtin/packages/spectre/package.py index 40282f7d5a4308..3d56114c420044 100644 --- a/var/spack/repos/builtin/packages/spectre/package.py +++ b/var/spack/repos/builtin/packages/spectre/package.py @@ -31,6 +31,9 @@ class Spectre(CMakePackage): license("MIT") version("develop", branch="develop") + version( + "2024.03.19", sha256="42a25c8827b56268d9826239cde521491be19318d83785b35cd0265a9f6a1f7c" + ) version( "2024.09.29", sha256="b5e84b4564ad7cd2e069a24c6c472aab342753fe8393242eceba378b52226acb" ) diff --git a/var/spack/repos/builtin/packages/spectrum-mpi/package.py b/var/spack/repos/builtin/packages/spectrum-mpi/package.py index 9c06900e6a7983..e36be9826c76b7 100644 --- a/var/spack/repos/builtin/packages/spectrum-mpi/package.py +++ b/var/spack/repos/builtin/packages/spectrum-mpi/package.py @@ -5,6 +5,7 @@ import os import re +import spack.compilers from spack.package import * @@ -37,7 +38,6 @@ def determine_version(cls, exe): def determine_variants(cls, exes, version): compiler_suites = { "xl": {"cc": "mpixlc", "cxx": "mpixlC", "f77": "mpixlf", "fc": "mpixlf"}, - "pgi": {"cc": "mpipgicc", "cxx": "mpipgic++", "f77": "mpipgifort", "fc": "mpipgifort"}, "default": {"cc": "mpicc", "cxx": "mpicxx", "f77": "mpif77", "fc": "mpif90"}, } @@ -110,11 +110,6 @@ def setup_dependent_package(self, module, dependent_spec): self.spec.mpicxx = os.path.join(self.prefix.bin, "mpixlC") self.spec.mpif77 = os.path.join(self.prefix.bin, "mpixlf") self.spec.mpifc = os.path.join(self.prefix.bin, "mpixlf") - elif "%pgi" in dependent_spec: - self.spec.mpicc = os.path.join(self.prefix.bin, "mpipgicc") - self.spec.mpicxx = os.path.join(self.prefix.bin, "mpipgic++") - self.spec.mpif77 = os.path.join(self.prefix.bin, "mpipgifort") - self.spec.mpifc = os.path.join(self.prefix.bin, "mpipgifort") else: self.spec.mpicc = os.path.join(self.prefix.bin, "mpicc") self.spec.mpicxx = os.path.join(self.prefix.bin, "mpicxx") @@ -127,11 +122,6 @@ def setup_dependent_build_environment(self, env, dependent_spec): env.set("MPICXX", os.path.join(self.prefix.bin, "mpixlC")) env.set("MPIF77", os.path.join(self.prefix.bin, "mpixlf")) env.set("MPIF90", os.path.join(self.prefix.bin, "mpixlf")) - elif "%pgi" in dependent_spec: - env.set("MPICC", os.path.join(self.prefix.bin, "mpipgicc")) - env.set("MPICXX", os.path.join(self.prefix.bin, "mpipgic++")) - env.set("MPIF77", os.path.join(self.prefix.bin, "mpipgifort")) - env.set("MPIF90", os.path.join(self.prefix.bin, "mpipgifort")) else: env.set("MPICC", os.path.join(self.prefix.bin, "mpicc")) env.set("MPICXX", os.path.join(self.prefix.bin, "mpic++")) @@ -153,11 +143,6 @@ def setup_run_environment(self, env): env.set("MPICXX", os.path.join(self.prefix.bin, "mpixlC")) env.set("MPIF77", os.path.join(self.prefix.bin, "mpixlf")) env.set("MPIF90", os.path.join(self.prefix.bin, "mpixlf")) - elif "%pgi" in self.spec: - env.set("MPICC", os.path.join(self.prefix.bin, "mpipgicc")) - env.set("MPICXX", os.path.join(self.prefix.bin, "mpipgic++")) - env.set("MPIF77", os.path.join(self.prefix.bin, "mpipgifort")) - env.set("MPIF90", os.path.join(self.prefix.bin, "mpipgifort")) else: env.set("MPICC", os.path.join(self.prefix.bin, "mpicc")) env.set("MPICXX", os.path.join(self.prefix.bin, "mpic++")) diff --git a/var/spack/repos/builtin/packages/spglib/package.py b/var/spack/repos/builtin/packages/spglib/package.py index 7420d3ad75855e..b918fab2d0c073 100644 --- a/var/spack/repos/builtin/packages/spglib/package.py +++ b/var/spack/repos/builtin/packages/spglib/package.py @@ -20,6 +20,7 @@ class Spglib(CMakePackage): license("BSD-3-Clause") + version("2.5.0", sha256="b6026f5e85106c0c9ee57e54b9399890d0f29982e20e96ede0428b3efbe6b914") version("2.4.0", sha256="e33694b189c6864f719a59c31e2af55301a524fb68ba9fb65f08e95af471847d") version("2.3.1", sha256="c295dbea7d2fc9e50639aa14331fef277878c35f00ef0766e688bfbb7b17d44c") version("2.3.0", sha256="c05eb869018efe2efe5dcb2654cda19c5dd4c07434874205fa542f7766f7548e") diff --git a/var/spack/repos/builtin/packages/spiral-software/package.py b/var/spack/repos/builtin/packages/spiral-software/package.py index 9d7892fd22a0d2..169c0ded1e5dc7 100644 --- a/var/spack/repos/builtin/packages/spiral-software/package.py +++ b/var/spack/repos/builtin/packages/spiral-software/package.py @@ -26,7 +26,8 @@ class SpiralSoftware(CMakePackage): version("8.4.0", sha256="d0c58de65c678130eeee6b8b8b48061bbe463468990f66d9b452225ce46dee19") version("8.3.0", sha256="41cf0e7f14f9497e98353baa1ef4ca6204ce5ca525db8093f5bb44e89992abdf") - depends_on("c", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") extendable = True @@ -73,6 +74,11 @@ def spiral_package_install(self, spec, prefix, pkg): src = join_path(pkg_prefix, "namespaces", "packages", pkg) install_tree(src, dest) + def flag_handler(self, name, flags): + if name == "cflags" and self.spec.satisfies("%oneapi"): + flags.append("-Wno-error=implicit-function-declaration") + return (flags, None, None) + def install(self, spec, prefix): with working_dir(self.stage.source_path): files = ("LICENSE", "README.md", "ReleaseNotes.md", "Contributing.md") diff --git a/var/spack/repos/builtin/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py index 57f1272801ca1f..ef8840ea7ad9bd 100644 --- a/var/spack/repos/builtin/packages/sqlite/package.py +++ b/var/spack/repos/builtin/packages/sqlite/package.py @@ -7,6 +7,8 @@ import sys from tempfile import NamedTemporaryFile +import spack.build_systems.autotools +import spack.build_systems.nmake import spack.platforms from spack.package import * diff --git a/var/spack/repos/builtin/packages/sst-core/package.py b/var/spack/repos/builtin/packages/sst-core/package.py index 7d0176c4524728..a9fa676e16b9ce 100644 --- a/var/spack/repos/builtin/packages/sst-core/package.py +++ b/var/spack/repos/builtin/packages/sst-core/package.py @@ -14,12 +14,14 @@ class SstCore(AutotoolsPackage): homepage = "https://github.com/sstsimulator" git = "https://github.com/sstsimulator/sst-core.git" - url = "https://github.com/sstsimulator/sst-core/releases/download/v13.1.0_Final/sstcore-13.1.0.tar.gz" + url = "https://github.com/sstsimulator/sst-core/releases/download/v14.1.0_Final/sstcore-14.1.0.tar.gz" maintainers("berquist", "naromero77") license("BSD-3-Clause") + version("14.1.0", sha256="9d17c37d1ebdff8d8eb10ab0084eb901c78a7c5a76db15189e3d7fc318fd6f9d") + version("14.0.0", sha256="fadc7ee99472ff3ac5d4b3f3e507123e32bd9fb89c4c6b48fbd2dca8aeb8b8d6") version("13.1.0", sha256="0a44c62ee0b18a20a3cb089f4e0d43e293dc5adc6c3fa7639d40986cf5b9854c") version("13.0.0", sha256="c9d868dcdd75d59bef7c73146709a3b2a52a78f0df5ec2c3dc9f21434c51d935") version("12.1.0", sha256="f7530226643439678e2f4183ec4dbadf7750411bdaa44d9443887f81feb97574") diff --git a/var/spack/repos/builtin/packages/sst-dumpi/package.py b/var/spack/repos/builtin/packages/sst-dumpi/package.py index fd4cee80038bfc..f796e33e3e6fd5 100644 --- a/var/spack/repos/builtin/packages/sst-dumpi/package.py +++ b/var/spack/repos/builtin/packages/sst-dumpi/package.py @@ -14,7 +14,7 @@ class SstDumpi(AutotoolsPackage): information, and PAPI counters. """ - homepage = "http://sst.sandia.gov/about_dumpi.html" + homepage = "https://github.com/sstsimulator/sst-dumpi" url = "https://github.com/sstsimulator/sst-dumpi/archive/refs/tags/v13.0.0_Final.tar.gz" git = "https://github.com/sstsimulator/sst-dumpi.git" diff --git a/var/spack/repos/builtin/packages/sst-elements/package.py b/var/spack/repos/builtin/packages/sst-elements/package.py index 1cbeca76aaf812..35eaa739f172d5 100644 --- a/var/spack/repos/builtin/packages/sst-elements/package.py +++ b/var/spack/repos/builtin/packages/sst-elements/package.py @@ -14,12 +14,14 @@ class SstElements(AutotoolsPackage): homepage = "https://github.com/sstsimulator" git = "https://github.com/sstsimulator/sst-elements.git" - url = "https://github.com/sstsimulator/sst-elements/releases/download/v13.1.0_Final/sstelements-13.1.0.tar.gz" + url = "https://github.com/sstsimulator/sst-elements/releases/download/v14.1.0_Final/sstelements-14.1.0.tar.gz" maintainers("berquist", "naromero77") license("BSD-3-Clause") + version("14.1.0", sha256="433994065810d3afee4e355173e781cd76171043cce8835bbc40887672a33350") + version("14.0.0", sha256="68eab77febdd0138a497249d854e1cb0c3a67b1c56c4d51f1fe35df12dcd1b9c") version("13.1.0", sha256="ebda6ee5af858192dff8a7faf3125010001d5c439beec22afe5b9828a74adf1a") version("13.0.0", sha256="1f6f6b403a8c1b22a27cdf2943c9e505825ee14866891e7bc944d4471b7b0321") version("12.1.0", sha256="77948cf8e1f8bf8d238d475cea111c9a72b307cbf403cb429ef0426d0cf708a4") diff --git a/var/spack/repos/builtin/packages/sst-macro/package.py b/var/spack/repos/builtin/packages/sst-macro/package.py index 1319fc4eafb84f..f5e57db7c00814 100644 --- a/var/spack/repos/builtin/packages/sst-macro/package.py +++ b/var/spack/repos/builtin/packages/sst-macro/package.py @@ -17,10 +17,12 @@ class SstMacro(AutotoolsPackage): homepage = "https://github.com/sstsimulator" git = "https://github.com/sstsimulator/sst-macro.git" - url = "https://github.com/sstsimulator/sst-macro/releases/download/v13.1.0_Final/sstmacro-13.1.0.tar.gz" + url = "https://github.com/sstsimulator/sst-macro/releases/download/v14.1.0_Final/sstmacro-14.1.0.tar.gz" maintainers("berquist") + version("14.1.0", sha256="241f42f5c460b0e7462592a7f412bda9c9de19ad7a4b62c22f35be4093b57014") + version("14.0.0", sha256="3962942268dd9fe6ebd4462e2d6d305ab757f3f510487e84687146a8d461be13") version("13.1.0", sha256="022e39daae1067b56c0011dbe87e3234fee4587049fd53671e1ed6b23233f70e") version("13.0.0", sha256="410dad4ac0c7a4c0e16c54da308b6c6b631112af18ae2c37585c8a14472987d4") version("12.1.0", sha256="ee57e08acfd4b6429a0500d981d468ee6ded2638ec5abec7b47f172388b267f1") diff --git a/var/spack/repos/builtin/packages/stripack/package.py b/var/spack/repos/builtin/packages/stripack/package.py index 289101da5efe8f..75a1c636871fb9 100644 --- a/var/spack/repos/builtin/packages/stripack/package.py +++ b/var/spack/repos/builtin/packages/stripack/package.py @@ -69,7 +69,7 @@ def build(self, spec, prefix): fflags += ["-qrealsize=8"] elif satisfies("%fj"): fflags += ["-CcdRR8"] - elif satisfies("%pgi") or satisfies("%nvhpc"): + elif satisfies("%nvhpc"): fflags += ["-r8"] fflags += [self.compiler.fc_pic_flag] make("all", "FFLAGS={0}".format(" ".join(fflags))) diff --git a/var/spack/repos/builtin/packages/strumpack/package.py b/var/spack/repos/builtin/packages/strumpack/package.py index cb1428dcff8a0b..d1cb572f29b07a 100644 --- a/var/spack/repos/builtin/packages/strumpack/package.py +++ b/var/spack/repos/builtin/packages/strumpack/package.py @@ -9,7 +9,6 @@ from spack.package import * from spack.util.environment import set_env -from spack.util.executable import ProcessError class Strumpack(CMakePackage, CudaPackage, ROCmPackage): @@ -36,6 +35,7 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage): license("BSD-3-Clause-LBNL") version("master", branch="master") + version("8.0.0", sha256="11cc8645d622a16510b39a20efc64f34862b41976152d17f9fbf3e91f899766c") version("7.2.0", sha256="6988c00c3213f13e53d75fb474102358f4fecf07a4b4304b7123d86fdc784639") version("7.1.3", sha256="c951f38ee7af20da3ff46429e38fcebd57fb6f12619b2c56040d6da5096abcb0") version("7.1.2", sha256="262a0193fa1682d0eaa90363f739e0be7a778d5deeb80e4d4ae12446082a39cc") @@ -86,9 +86,11 @@ class Strumpack(CMakePackage, CudaPackage, ROCmPackage): depends_on("parmetis", when="+parmetis") depends_on("scotch~metis", when="+scotch") depends_on("scotch~metis+mpi", when="+scotch+mpi") + depends_on("scotch@7.0.4:", when="@8.0.0: +scotch") depends_on("butterflypack@1.1.0", when="@3.3.0:3.9 +butterflypack+mpi") depends_on("butterflypack@1.2.0:", when="@4.0.0: +butterflypack+mpi") depends_on("butterflypack@2.1.0:", when="@6.3.0: +butterflypack+mpi") + depends_on("butterflypack@3.2.0:", when="@8.0.0: +butterflypack+mpi") depends_on("cuda", when="@4.0.0: +cuda") depends_on("zfp@0.5.5", when="@:7.0.1 +zfp") depends_on("zfp", when="@7.0.2: +zfp") @@ -223,7 +225,7 @@ def _test_example(self, test_prog, test_cmd, pre_args=[]): ) with working_dir(test_dir): - opts = self.builder.std_cmake_args + self.cmake_args() + ["."] + opts = self.std_cmake_args + self.cmake_args() + ["."] cmake = self.spec["cmake"].command cmake(*opts) diff --git a/var/spack/repos/builtin/packages/suite-sparse/package.py b/var/spack/repos/builtin/packages/suite-sparse/package.py index 8b72df6f2dbeb3..3069a521272bc5 100644 --- a/var/spack/repos/builtin/packages/suite-sparse/package.py +++ b/var/spack/repos/builtin/packages/suite-sparse/package.py @@ -90,8 +90,7 @@ class SuiteSparse(Package): msg="suite-sparse needs task_scheduler_init.h dropped in recent tbb libs", ) - # This patch removes unsupported flags for pgi compiler - patch("pgi.patch", when="%pgi") + # This patch removes unsupported flags for nvhpc compiler patch("pgi.patch", when="%nvhpc") # This patch adds '-lm' when linking libgraphblas and when using clang. @@ -234,8 +233,6 @@ def install(self, spec, prefix): # optimizations if any([x in spec for x in ("%apple-clang", "%clang", "%gcc", "%intel", "%fj")]): make_args += ["CFLAGS+=-fno-common -fexceptions"] - elif "%pgi" in spec: - make_args += ["CFLAGS+=--exceptions"] if spack_f77.endswith("xlf") or spack_f77.endswith("xlf_r"): make_args += ["CFLAGS+=-DBLAS_NO_UNDERSCORE"] @@ -249,6 +246,7 @@ def install(self, spec, prefix): # Mongoose directory finds libsuitesparseconfig.so in system # directories like /usr/lib. cmake_args = [ + "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON", f"-DCMAKE_INSTALL_PREFIX={prefix}", f"-DCMAKE_LIBRARY_PATH={prefix.lib}", f"-DBLAS_ROOT={spec['blas'].prefix}", diff --git a/var/spack/repos/builtin/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py index 5be35b6bb04bb6..8f025724306a76 100644 --- a/var/spack/repos/builtin/packages/sundials/package.py +++ b/var/spack/repos/builtin/packages/sundials/package.py @@ -398,6 +398,7 @@ def cmake_args(self): if "+cuda" in spec: args.append(define("CMAKE_CUDA_ARCHITECTURES", spec.variants["cuda_arch"].value)) + args.append(define("CUDAToolkit_ROOT", self.spec["cuda"].prefix)) if "+rocm" in spec: args.extend( @@ -733,6 +734,8 @@ def libs(self): # Q: should the result be ordered by dependency? else: sun_libs = ["libsundials_" + p for p in query_parameters] + if self.spec.satisfies("@7:"): + sun_libs += ["libsundials_core"] is_shared = "+shared" in self.spec libs = find_libraries(sun_libs, root=self.prefix, shared=is_shared, recursive=True) @@ -743,7 +746,7 @@ def libs(self): @on_package_attributes(run_tests=True) def check_test_install(self): """Perform test_install on the build.""" - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test_install") @property diff --git a/var/spack/repos/builtin/packages/superlu-dist/package.py b/var/spack/repos/builtin/packages/superlu-dist/package.py index 1440da388a4b66..0e3844bcc3a9f5 100644 --- a/var/spack/repos/builtin/packages/superlu-dist/package.py +++ b/var/spack/repos/builtin/packages/superlu-dist/package.py @@ -16,10 +16,12 @@ class SuperluDist(CMakePackage, CudaPackage, ROCmPackage): tags = ["e4s"] - maintainers("xiaoye", "gchavez2", "balay", "pghysels", "liuyangzhuan") + maintainers("xiaoyeli", "gchavez2", "balay", "pghysels", "liuyangzhuan") version("develop", branch="master") version("amd", branch="amd") + version("9.1.0", sha256="1cb2c6dc7e8231b2ec30c1266e55e440ffca9f55527771d8df28f900dd179f9d") + version("9.0.0", sha256="aa43d33d4b1b0f5f7b5ad7685e9a6bc25088832c6c74d2ab8f75a2c9f4e9e955") version("8.2.1", sha256="b77d065cafa6bc1a1dcc15bf23fd854f54b05762b165badcffc195835ad2bddf") version("8.2.0", sha256="d53573e5a399b2b4ab1fcc36e8421c1b6fab36345c0af14f8fa20326e3365f1f") version("8.1.2", sha256="7b16c442bb01ea8b298c0aab9a2584aa4615d09786aac968cb2f3118c058206b") diff --git a/var/spack/repos/builtin/packages/superlu/package.py b/var/spack/repos/builtin/packages/superlu/package.py index 6a62ae9e1744c4..92f7481befc575 100644 --- a/var/spack/repos/builtin/packages/superlu/package.py +++ b/var/spack/repos/builtin/packages/superlu/package.py @@ -84,7 +84,7 @@ def test_example(self): superlu() -class BaseBuilder(metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): @run_after("install") def setup_standalone_tests(self): """Set up and copy example source files after the package is installed @@ -138,7 +138,7 @@ def _make_hdr_for_test(self, lib): ] -class CMakeBuilder(BaseBuilder, spack.build_systems.cmake.CMakeBuilder): +class CMakeBuilder(AnyBuilder, spack.build_systems.cmake.CMakeBuilder): def cmake_args(self): if self.pkg.version > Version("5.2.1"): _blaslib_key = "enable_internal_blaslib" @@ -153,7 +153,7 @@ def cmake_args(self): return args -class GenericBuilder(BaseBuilder, spack.build_systems.generic.GenericBuilder): +class GenericBuilder(AnyBuilder, spack.build_systems.generic.GenericBuilder): def install(self, pkg, spec, prefix): """Use autotools before version 5""" # Define make.inc file diff --git a/var/spack/repos/builtin/packages/supermagic/package.py b/var/spack/repos/builtin/packages/supermagic/package.py new file mode 100644 index 00000000000000..23baff3c02b579 --- /dev/null +++ b/var/spack/repos/builtin/packages/supermagic/package.py @@ -0,0 +1,34 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Supermagic(AutotoolsPackage): + """Supermagic is a very simple MPI sanity code. Nothing more, nothing less.""" + + homepage = "https://hpc.github.io/supermagic" + url = "https://hpc.github.io/supermagic/dists/supermagic-1.2.tar.gz" + git = "https://github.com/hpc/supermagic.git" + + maintainers("marcodelapierre") + + version("master", branch="master") + version("1.2", sha256="f8f6e0f74a58400d8d3c6b95c4b943aa8608e15a318fcfe12fc9abb008aed734") + + depends_on("mpi") + + depends_on("autoconf", when="@master", type="build") + depends_on("automake", when="@master", type="build") + depends_on("libtool", when="@master", type="build") + + @when("@master") + def autoreconf(self, spec, prefix): + bash = which("bash") + bash("./autogen") + + def configure_args(self): + config_args = ["CC={0}".format(self.spec["mpi"].mpicc)] + return config_args diff --git a/var/spack/repos/builtin/packages/sw4/package.py b/var/spack/repos/builtin/packages/sw4/package.py index a4e250f9af61f2..32515f119966be 100644 --- a/var/spack/repos/builtin/packages/sw4/package.py +++ b/var/spack/repos/builtin/packages/sw4/package.py @@ -63,7 +63,7 @@ def edit(self, spec, prefix): os.environ["EXTRA_LINK_FLAGS"] += spec["llvm-openmp"].libs.ld_flags + " " # From spack/trilinos - if spec.compiler.name in ["clang", "apple-clang", "gcc"]: + if spec.satisfies("%gcc") or spec.satisfies("%clang") or spec.satisfies("%apple-clang"): fc = Executable(self.compiler.fc) libgfortran = fc("--print-file-name", "libgfortran." + dso_suffix, output=str).strip() if libgfortran == "libgfortran." + dso_suffix: diff --git a/var/spack/repos/builtin/packages/systemd/package.py b/var/spack/repos/builtin/packages/systemd/package.py index 16f07dca8314c6..cbd6596c1cbd88 100644 --- a/var/spack/repos/builtin/packages/systemd/package.py +++ b/var/spack/repos/builtin/packages/systemd/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import glob import os from spack.package import * @@ -142,3 +143,13 @@ def install(self, spec, prefix): os.environ["DESTDIR"] = prefix with working_dir(self.build_directory): ninja("install") + + @run_after("install") + def symlink_internal_libs(self): + with working_dir(self.prefix): + # Create symlinks lib/lib*.so* -> lib/systemd/lib*.so* so that executables and + # libraries from systemd can find its own libraries in rpaths. + for lib_path in glob.glob("lib*/systemd/lib*.so*"): + lib_name = os.path.basename(lib_path) + lib_dir = os.path.dirname(os.path.dirname(lib_path)) + os.symlink(os.path.relpath(lib_path, lib_dir), os.path.join(lib_dir, lib_name)) diff --git a/var/spack/repos/builtin/packages/sz/package.py b/var/spack/repos/builtin/packages/sz/package.py index b73cad5aa2397c..72fab24143d59d 100644 --- a/var/spack/repos/builtin/packages/sz/package.py +++ b/var/spack/repos/builtin/packages/sz/package.py @@ -48,6 +48,7 @@ class Sz(CMakePackage, AutotoolsPackage): depends_on("c", type="build") depends_on("cxx", type="build") + depends_on("fortran", type="build", when="+fortran") build_system( conditional("autotools", when="@:2.1.8.0"), @@ -87,6 +88,9 @@ class Sz(CMakePackage, AutotoolsPackage): patch("ctags-only-if-requested.patch", when="@2.1.8.1:2.1.8.3") + # Windows requires numerous commits that only exist on master at the moment + conflicts("platform=windows", when="@:2.1.12.5") + def flag_handler(self, name, flags): if name == "cflags": if self.spec.satisfies("%oneapi"): diff --git a/var/spack/repos/builtin/packages/szx/package.py b/var/spack/repos/builtin/packages/szx/package.py index 9d05663fceb0ed..df430e05289e1d 100644 --- a/var/spack/repos/builtin/packages/szx/package.py +++ b/var/spack/repos/builtin/packages/szx/package.py @@ -2,6 +2,8 @@ # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.autotools +import spack.build_systems.cmake from spack.package import * diff --git a/var/spack/repos/builtin/packages/tamaas/package.py b/var/spack/repos/builtin/packages/tamaas/package.py index 57ce90a4717181..8e742a2a99171a 100644 --- a/var/spack/repos/builtin/packages/tamaas/package.py +++ b/var/spack/repos/builtin/packages/tamaas/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -101,5 +102,4 @@ def install(self, spec, prefix): scons("install-lib", *args) if spec.satisfies("+python"): - args = ["-m", "pip"] + std_pip_args + ["--prefix=" + prefix, "build-release/python"] - python(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={prefix}", "build-release/python") diff --git a/var/spack/repos/builtin/packages/taskflow/package.py b/var/spack/repos/builtin/packages/taskflow/package.py index 8be3f42b56f16d..510509e5b5eca6 100644 --- a/var/spack/repos/builtin/packages/taskflow/package.py +++ b/var/spack/repos/builtin/packages/taskflow/package.py @@ -31,7 +31,6 @@ class Taskflow(CMakePackage): conflicts("%clang@:3.5") conflicts("%apple-clang@:8.0.0") # untested: conflicts('%intel@:15') - # untested: conflicts('%pgi@:14') def cmake_args(self): try: diff --git a/var/spack/repos/builtin/packages/tasmanian/package.py b/var/spack/repos/builtin/packages/tasmanian/package.py index c858c6713e436e..2d3ebc5fbc972d 100644 --- a/var/spack/repos/builtin/packages/tasmanian/package.py +++ b/var/spack/repos/builtin/packages/tasmanian/package.py @@ -12,7 +12,7 @@ class Tasmanian(CMakePackage, CudaPackage, ROCmPackage): interpolation as well as parameter calibration.""" homepage = "https://ornl.github.io/TASMANIAN/stable/" - url = "https://github.com/ORNL/TASMANIAN/archive/v8.0.tar.gz" + url = "https://github.com/ORNL/TASMANIAN/archive/v8.1.tar.gz" git = "https://github.com/ORNL/TASMANIAN.git" tags = ["e4s"] @@ -22,15 +22,15 @@ class Tasmanian(CMakePackage, CudaPackage, ROCmPackage): version("develop", branch="master") + version("8.1", sha256="e870d26ebe9e5038a8bb75710e47a66f3040c5ad34d03c2fc993b984240d247b") version("8.0", sha256="248c941346150bf6cfb386ba86b69bd4697f4fc93bff0e8d5f57e555614fd534") version("7.9", sha256="decba62e6bbccf1bc26c6e773a8d4fd51d7f3e3e534ddd386ec41300694ce5cc") version("7.7", sha256="85fb3a7b302ea21a3b700712767a59a623d9ab93da03308fa47d4413654c3878") - version("7.5", sha256="d621bd36dced4db86ef638693ba89b336762e7a3d7fedb3b5bcefb03390712b3") - # Tasmanian is backwards compatible, no need to use 7.3 from back in 2020 + # when adding a new version, deprecate an old one, this gives us 3 - 4 years of support version( - "7.3", - sha256="5bd1dd89cc5c84506f6900b6569b17e50becd73eb31ec85cfa11d6f1f912c4fa", + "7.5", + sha256="d621bd36dced4db86ef638693ba89b336762e7a3d7fedb3b5bcefb03390712b3", deprecated=True, ) diff --git a/var/spack/repos/builtin/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py index 94d939c03fd6f5..9081b5965ad6fd 100644 --- a/var/spack/repos/builtin/packages/tau/package.py +++ b/var/spack/repos/builtin/packages/tau/package.py @@ -28,6 +28,7 @@ class Tau(Package): license("MIT") version("master", branch="master") + version("2.34", sha256="229ab425e0532e635a0be76d60b8aa613adf7596d15a9ced0b87e7f243bb2132") version("2.33.2", sha256="8ee81fe75507612379f70033183bed2a90e1245554b2a78196b6c5145da44f27") version("2.33.1", sha256="13cc5138e110932f34f02ddf548db91d8219ccb7ff9a84187f0790e40a502403") version("2.33", sha256="04d9d67adb495bc1ea56561f33c5ce5ba44f51cc7f64996f65bd446fac5483d9") @@ -427,8 +428,14 @@ def install(self, spec, prefix): # Link arch-specific directories into prefix since there is # only one arch per prefix the way spack installs. self.link_tau_arch_dirs() - # TAU may capture Spack's internal compiler wrapper. Replace - # it with the correct compiler. + # TAU may capture Spack's internal compiler wrapper. Fixed + # by filter_compiler_wrappers. Switch back the environment + # variables the filter uses. + if "+mpi" in spec: + env["CC"] = spack_cc + env["CXX"] = spack_cxx + env["FC"] = spack_fc + env["F77"] = spack_f77 def link_tau_arch_dirs(self): for subdir in os.listdir(self.prefix): diff --git a/var/spack/repos/builtin/packages/tb-lmto/package.py b/var/spack/repos/builtin/packages/tb-lmto/package.py new file mode 100644 index 00000000000000..57612427e942d3 --- /dev/null +++ b/var/spack/repos/builtin/packages/tb-lmto/package.py @@ -0,0 +1,66 @@ +# Copyright 2013-2024 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) + +import os + +from spack.package import * + + +class TbLmto(MakefilePackage): + """ + The STUTTGART TB-LMTO program. The linear muffin-tin orbital (LMTO) method has been described in numerous publications. + Use of this software is subject to the license at + https://www2.fkf.mpg.de/andersen/LMTODOC/node180.html#SECTION000130000000000000000 + """ + + homepage = "https://www2.fkf.mpg.de/andersen/LMTODOC/LMTODOC.html" + manual_download = True + + maintainers("snehring") + + version( + "20240601-47.1d", sha256="5b24f2917cef85fe49d3a4ff6403294a44a9cf7c003234a0fd96d626c316bda0" + ) + version( + "20240601-47c2.1d", + sha256="c80ef9b4aa725ad75ae07b0215671b3674a8f5dced9e87202dd0d486ffe1cb10", + ) + version( + "20240601-47u.1d", + sha256="bbcc1c57005f33749f8ee6d33be3490071704bce11214544cc4f9c13c28a126e", + ) + + depends_on("c", type="build") + depends_on("fortran", type="build") + depends_on("gnuplot", type="run") + + parallel = False + + @property + def build_targets(self): + # something about the spack wrapper breaks this, it's extremely weird + return [ + f"CC={self.compiler.cc}", + f"FC={self.compiler.fc} -finit-local-zero -fallow-argument-mismatch", + "all", + ] + + def url_for_version(self, version): + return f"file://{os.getcwd()}/lmto{version.string.split('-')[1]}.tar.gz" + + def edit(self, spec, prefix): + makefile = FileFilter("makefile") + makefile.filter("LMPATH = .*", "LMPATH = ./") + makefile.filter("^FFLAGS =.*", "") + makefile.filter("^CCFLAGS =.*", "") + makefile.filter("CC=.*", "") + makefile.filter("FC=.*", "") + + def install(self, spec, prefix): + mkdirp(prefix) + install_tree(".", prefix) + + def setup_run_environment(self, env): + env.prepend_path("PATH", self.prefix) diff --git a/var/spack/repos/builtin/packages/tcl/package.py b/var/spack/repos/builtin/packages/tcl/package.py index d95d80331e5c1c..b8e9be6e89d5e2 100644 --- a/var/spack/repos/builtin/packages/tcl/package.py +++ b/var/spack/repos/builtin/packages/tcl/package.py @@ -8,28 +8,28 @@ from llnl.util.filesystem import find_first +import spack.build_systems.autotools +import spack.build_systems.nmake from spack.package import * from spack.util.environment import is_system_path is_windows = sys.platform == "win32" -class TclHelper: - @staticmethod - def find_script_dir(spec): - # Put more-specific prefixes first - check_prefixes = [ - join_path(spec.prefix, "share", "tcl{0}".format(spec.package.version.up_to(2))), - spec.prefix, - ] - for prefix in check_prefixes: - result = find_first(prefix, "init.tcl") - if result: - return os.path.dirname(result) - raise RuntimeError("Cannot locate init.tcl") +def find_script_dir(spec: Spec) -> str: + # Put more-specific prefixes first + check_prefixes = [ + join_path(spec.prefix, "share", "tcl{0}".format(spec.package.version.up_to(2))), + spec.prefix, + ] + for prefix in check_prefixes: + result = find_first(prefix, "init.tcl") + if result: + return os.path.dirname(result) + raise RuntimeError("Cannot locate init.tcl") -class Tcl(AutotoolsPackage, NMakePackage, SourceforgePackage, TclHelper): +class Tcl(AutotoolsPackage, NMakePackage, SourceforgePackage): """Tcl (Tool Command Language) is a very powerful but easy to learn dynamic programming language, suitable for a very wide range of uses, including web and desktop applications, networking, administration, testing and many more. Open source @@ -105,7 +105,7 @@ def setup_run_environment(self, env): """ # When using tkinter from within spack provided python+tkinter, # python will not be able to find Tcl unless TCL_LIBRARY is set. - env.set("TCL_LIBRARY", TclHelper.find_script_dir(self.spec)) + env.set("TCL_LIBRARY", find_script_dir(self.spec)) def setup_dependent_run_environment(self, env, dependent_spec): """Set TCLLIBPATH to include the tcl-shipped directory for @@ -123,7 +123,7 @@ def setup_dependent_run_environment(self, env, dependent_spec): env.prepend_path("TCLLIBPATH", tcllibpath, separator=" ") -class BaseBuilder(TclHelper, metaclass=spack.builder.PhaseCallbacksMeta): +class AnyBuilder(BaseBuilder): @run_after("install") def symlink_tclsh(self): # There's some logic regarding this suffix in the build system @@ -151,7 +151,7 @@ def setup_dependent_build_environment(self, env, dependent_spec): * https://wiki.tcl-lang.org/page/TCL_LIBRARY * https://wiki.tcl-lang.org/page/TCLLIBPATH """ - env.set("TCL_LIBRARY", TclHelper.find_script_dir(self.spec)) + env.set("TCL_LIBRARY", find_script_dir(self.spec)) # If we set TCLLIBPATH, we must also ensure that the corresponding # tcl is found in the build environment. This to prevent cases @@ -182,7 +182,7 @@ def setup_dependent_build_environment(self, env, dependent_spec): env.prepend_path("TCLLIBPATH", tcllibpath, separator=" ") -class AutotoolsBuilder(BaseBuilder, spack.build_systems.autotools.AutotoolsBuilder): +class AutotoolsBuilder(AnyBuilder, spack.build_systems.autotools.AutotoolsBuilder): configure_directory = "unix" def install(self, pkg, spec, prefix): @@ -215,7 +215,7 @@ def install(self, pkg, spec, prefix): make("clean") -class NMakeBuilder(BaseBuilder, spack.build_systems.nmake.NMakeBuilder): +class NMakeBuilder(AnyBuilder, spack.build_systems.nmake.NMakeBuilder): build_targets = ["all"] install_targets = ["install"] diff --git a/var/spack/repos/builtin/packages/tcsh/package.py b/var/spack/repos/builtin/packages/tcsh/package.py index 2b8a1d9a6c8de4..24215b5d9ff204 100644 --- a/var/spack/repos/builtin/packages/tcsh/package.py +++ b/var/spack/repos/builtin/packages/tcsh/package.py @@ -108,6 +108,7 @@ class Tcsh(AutotoolsPackage): ) depends_on("ncurses+termlib") + depends_on("libxcrypt", when="platform=linux") @run_after("install") def link_csh(self): diff --git a/var/spack/repos/builtin/packages/tealeaf/package.py b/var/spack/repos/builtin/packages/tealeaf/package.py index 443c8997334983..ba894d03805d86 100644 --- a/var/spack/repos/builtin/packages/tealeaf/package.py +++ b/var/spack/repos/builtin/packages/tealeaf/package.py @@ -47,8 +47,6 @@ def build_targets(self): targets.append("COMPILER=CRAY") elif "%intel" in self.spec: targets.append("COMPILER=INTEL") - elif "%pgi" in self.spec: - targets.append("COMPILER=PGI") elif "%xl" in self.spec: targets.append("COMPILER=XL") diff --git a/var/spack/repos/builtin/packages/thrift/package.py b/var/spack/repos/builtin/packages/thrift/package.py index 14631e80bfa387..764b57b370dd77 100644 --- a/var/spack/repos/builtin/packages/thrift/package.py +++ b/var/spack/repos/builtin/packages/thrift/package.py @@ -65,6 +65,7 @@ class Thrift(Package): depends_on("ant", when="+java") extends("python", when="+python") + depends_on("python@:3.11.9", when="+python") depends_on("py-setuptools", type=("build", "run"), when="+python") depends_on("py-six@1.7.2:", type=("build", "run"), when="@0.10.0:+python") depends_on("py-tornado", type=("build", "run"), when="+python") diff --git a/var/spack/repos/builtin/packages/thrust/package.py b/var/spack/repos/builtin/packages/thrust/package.py index 5d70406dc68275..bbd1708b8cf448 100644 --- a/var/spack/repos/builtin/packages/thrust/package.py +++ b/var/spack/repos/builtin/packages/thrust/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.cmake +import spack.build_systems.generic from spack.package import * diff --git a/var/spack/repos/builtin/packages/tinycbor/package.py b/var/spack/repos/builtin/packages/tinycbor/package.py new file mode 100644 index 00000000000000..cd2c5a43bc95ef --- /dev/null +++ b/var/spack/repos/builtin/packages/tinycbor/package.py @@ -0,0 +1,27 @@ +# Copyright 2013-2024 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) + + +from spack.package import * + + +class Tinycbor(MakefilePackage): + """Concise Binary Object Representation (CBOR) Library""" + + homepage = "https://github.com/intel/tinycbor" + url = "https://github.com/intel/tinycbor/archive/refs/tags/v0.6.0.tar.gz" + + license("MIT", checked_by="pranav-sivaraman") + + version("0.6.0", sha256="512e2c9fce74f60ef9ed3af59161e905f9e19f30a52e433fc55f39f4c70d27e4") + + depends_on("c", type="build") + depends_on("cxx", type="build") + + build_targets = ["CC=cc", "CXX=cxx"] + + @property + def install_targets(self): + return ["install", f"prefix={self.prefix}"] diff --git a/var/spack/repos/builtin/packages/tioga/package.py b/var/spack/repos/builtin/packages/tioga/package.py index 79684d2cbcb66a..62e3234ab11d9f 100644 --- a/var/spack/repos/builtin/packages/tioga/package.py +++ b/var/spack/repos/builtin/packages/tioga/package.py @@ -17,15 +17,15 @@ class Tioga(CMakePackage): license("LGPL-3.0-only") - # The original TIOGA repo has possibly been abandoned, + # The original TIOGA repo has been abandoned, # so work on TIOGA has continued in the Exawind project version("develop", git="https://github.com/Exawind/tioga.git", branch="exawind") + version("1.2.0", git="https://github.com/Exawind/tioga.git", tag="v1.2.0") version("1.1.0", git="https://github.com/Exawind/tioga.git", tag="v1.1.0") version("1.0.0", git="https://github.com/Exawind/tioga.git", tag="v1.0.0") version("master", branch="master") - depends_on("cxx", type="build") # generated - depends_on("fortran", type="build") # generated + depends_on("cxx", type="build") variant("shared", default=sys.platform != "darwin", description="Build shared libraries") variant("pic", default=True, description="Position independent code") diff --git a/var/spack/repos/builtin/packages/tomlplusplus/package.py b/var/spack/repos/builtin/packages/tomlplusplus/package.py new file mode 100644 index 00000000000000..d165127d3ee126 --- /dev/null +++ b/var/spack/repos/builtin/packages/tomlplusplus/package.py @@ -0,0 +1,20 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Tomlplusplus(CMakePackage): + """Header-only TOML config file parser and serializer for C++17""" + + homepage = "https://marzer.github.io/tomlplusplus/" + url = "https://github.com/marzer/tomlplusplus/archive/refs/tags/v3.4.0.tar.gz" + + license("MIT", checked_by="pranav-sivaraman") + + version("3.4.0", sha256="8517f65938a4faae9ccf8ebb36631a38c1cadfb5efa85d9a72e15b9e97d25155") + + depends_on("cxx", type="build") + depends_on("cmake@3.14:", type="build") diff --git a/var/spack/repos/builtin/packages/totalview/package.py b/var/spack/repos/builtin/packages/totalview/package.py index fa209ce916be34..6f44e97085da26 100644 --- a/var/spack/repos/builtin/packages/totalview/package.py +++ b/var/spack/repos/builtin/packages/totalview/package.py @@ -23,6 +23,24 @@ class Totalview(Package): # will be the documentation. The architecture-specific tarballs are added # as resources dependent on the specific architecture used. + version( + "2024.3-x86-64", + sha256="fb47c5a5abc6ad0e3e7cff1a346037387fa471c3a5cb46b6cdbe7f8a10aff2a7", + url="https://dslwuu69twiif.cloudfront.net/totalview/2024.3/totalview_2024.3.10_linux_x86-64.tar", + ) + + version( + "2024.3-powerle", + sha256="a064d3c9b12108ec228e2ff203549442172e282682786ff20d02ea9bf40109b2", + url="https://dslwuu69twiif.cloudfront.net/totalview/2024.3/totalview_2024.3.10_linux_powerle.tar", + ) + + version( + "2024.3-linux-arm64", + sha256="91701e3460cad8bba8810c5ece4720f0156ccba7526d407801a7d0b0e09fb054", + url="https://dslwuu69twiif.cloudfront.net/totalview/2024.3/totalview_2024.3.10_linux_arm64.tar", + ) + version( "2024.2-x86-64", sha256="b6d9cfd804ff1f6641fbd92f9730b34f62062ead9b1324eaf44f34ea78c69ef1", diff --git a/var/spack/repos/builtin/packages/treelite/package.py b/var/spack/repos/builtin/packages/treelite/package.py index a7bf2c853fb799..d1ca6ccec376ef 100644 --- a/var/spack/repos/builtin/packages/treelite/package.py +++ b/var/spack/repos/builtin/packages/treelite/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +from spack.build_systems.python import PythonPipBuilder from spack.package import * @@ -50,5 +51,4 @@ def cmake_args(self): def python_install(self): if "+python" in self.spec: with working_dir("python"): - args = std_pip_args + ["--prefix=" + self.prefix, "."] - pip(*args) + pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".") diff --git a/var/spack/repos/builtin/packages/treesub/package.py b/var/spack/repos/builtin/packages/treesub/package.py index ac5e699057bf0b..c82ffcc120a376 100644 --- a/var/spack/repos/builtin/packages/treesub/package.py +++ b/var/spack/repos/builtin/packages/treesub/package.py @@ -15,7 +15,7 @@ class Treesub(Package): occurred on a given branch. Originally written for colleagues at the MRC NIMR.""" - homepage = "https:/github.com/tamuri/treesub" + homepage = "https://github.com/tamuri/treesub" url = "https://github.com/tamuri/treesub/archive/v0.2.tar.gz" version("0.2", sha256="58b0d2638cf9ae1ad8705df26a57c32b52a69f50e7954debbd678c82772fdc56") diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py index b186834b8af17d..7966cb3e6790c2 100644 --- a/var/spack/repos/builtin/packages/trilinos/package.py +++ b/var/spack/repos/builtin/packages/trilinos/package.py @@ -9,7 +9,6 @@ import sys from spack.build_environment import dso_suffix -from spack.error import NoHeadersError from spack.operating_systems.mac_os import macos_version from spack.package import * from spack.pkg.builtin.kokkos import Kokkos @@ -408,23 +407,25 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage): # ###################### Dependencies ########################## # External Kokkos - depends_on("kokkos@4.4.01", when="@master: +kokkos") - depends_on("kokkos@4.3.01", when="@16.0.0 +kokkos") - depends_on("kokkos@4.2.01", when="@15.1.0:15.1.1 +kokkos") - depends_on("kokkos@4.1.00", when="@14.4.0:15.0.0 +kokkos") - - depends_on("kokkos +wrapper", when="trilinos@14.4.0: +kokkos +wrapper") - depends_on("kokkos ~wrapper", when="trilinos@14.4.0: +kokkos ~wrapper") - - for a in CudaPackage.cuda_arch_values: - arch_str = "+cuda cuda_arch={0}".format(a) - kokkos_spec = "kokkos {0}".format(arch_str) - depends_on(kokkos_spec, when="@14.4.0: +kokkos {0}".format(arch_str)) - - for a in ROCmPackage.amdgpu_targets: - arch_str = "+rocm amdgpu_target={0}".format(a) - kokkos_spec = "kokkos {0}".format(arch_str) - depends_on(kokkos_spec, when="@14.4.0: +kokkos {0}".format(arch_str)) + with when("@14.4: +kokkos"): + depends_on("kokkos+wrapper", when="+wrapper") + depends_on("kokkos~wrapper", when="~wrapper") + depends_on("kokkos~complex_align") + depends_on("kokkos@4.4.01", when="@master:") + depends_on("kokkos@4.3.01", when="@16") + depends_on("kokkos@4.2.01", when="@15.1:15") + depends_on("kokkos@4.1.00", when="@14.4:15.0") + depends_on("kokkos-kernels@4.4.01", when="@master:") + depends_on("kokkos-kernels@4.3.01", when="@16") + depends_on("kokkos-kernels@4.2.01", when="@15.1:15") + depends_on("kokkos-kernels@4.1.00", when="@14.4:15.0") + + for a in CudaPackage.cuda_arch_values: + arch_str = f"+cuda cuda_arch={a}" + depends_on(f"kokkos{arch_str}", when=arch_str) + for a in ROCmPackage.amdgpu_targets: + arch_str = f"+rocm amdgpu_target={a}" + depends_on(f"kokkos{arch_str}", when=arch_str) depends_on("adios2", when="+adios2") depends_on("binder@1.3:", when="@15: +python", type="build") @@ -553,7 +554,11 @@ def flag_handler(self, name, flags): flags.append("-Wl,-undefined,dynamic_lookup") # Fortran lib (assumes clang is built with gfortran!) - if "+fortran" in spec and spec.compiler.name in ["gcc", "clang", "apple-clang"]: + if spec.satisfies("+fortran") and ( + spec.satisfies("%gcc") + or spec.satisfies("%clang") + or spec.satisfies("%apple-clang") + ): fc = Executable(self.compiler.fc) libgfortran = fc( "--print-file-name", "libgfortran." + dso_suffix, output=str @@ -896,8 +901,9 @@ def define_tpl(trilinos_name, spack_name, have_dep): define_tpl(tpl_name, dep_name, dep_name in spec) # External Kokkos - if spec.satisfies("@14.4.0 +kokkos"): + if spec.satisfies("@14.4.0: +kokkos"): options.append(define_tpl_enable("Kokkos")) + options.append(define_tpl_enable("KokkosKernels", True)) # MPI settings options.append(define_tpl_enable("MPI")) diff --git a/var/spack/repos/builtin/packages/typst/package.py b/var/spack/repos/builtin/packages/typst/package.py new file mode 100644 index 00000000000000..b495b89482c258 --- /dev/null +++ b/var/spack/repos/builtin/packages/typst/package.py @@ -0,0 +1,37 @@ +# Copyright 2013-2024 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) + +import re + +from spack.package import * + + +class Typst(CargoPackage): + """Typst is a new markup-based typesetting system for the sciences.""" + + homepage = "https://typst.app" + git = "https://github.com/typst/typst" + executables = ["^typst$"] + + maintainers("upsj") + + license("Apache-2.0", checked_by="upsj") + + version("0.12.0", commit="737895d769188f6fc154523e67a9102bc24c872e", tag="v0.12.0") + + depends_on("rust@1.81.0:") + depends_on("openssl") + depends_on("pkgconf", type="build") + + @classmethod + def determine_version(cls, exe): + output = Executable(exe)("--version", output=str, error=str) + match = re.search(r"typst ([0-9.]+)", output) + return match.group(1) if match else None + + def build(self, spec, prefix): + # The cargopackage installer doesn't allow for an option to install from a subdir + # see: https://github.com/rust-lang/cargo/issues/7599 + cargo("install", "--root", "out", "--path", "crates/typst-cli") diff --git a/var/spack/repos/builtin/packages/unblur/package.py b/var/spack/repos/builtin/packages/unblur/package.py index 0965489df8fcb3..c0e6bc1a79032d 100644 --- a/var/spack/repos/builtin/packages/unblur/package.py +++ b/var/spack/repos/builtin/packages/unblur/package.py @@ -26,7 +26,6 @@ class Unblur(AutotoolsPackage): depends_on("fftw@3:") # Requires Intel Fortran compiler conflicts("%gcc") - conflicts("%pgi") conflicts("%apple-clang") conflicts("%clang") conflicts("%cce") diff --git a/var/spack/repos/builtin/packages/unrar/package.py b/var/spack/repos/builtin/packages/unrar/package.py index 22c77232adac88..1c73ebd572c588 100644 --- a/var/spack/repos/builtin/packages/unrar/package.py +++ b/var/spack/repos/builtin/packages/unrar/package.py @@ -13,9 +13,12 @@ class Unrar(MakefilePackage): homepage = "https://www.rarlab.com" url = "https://www.rarlab.com/rar/unrarsrc-5.9.4.tar.gz" - version("5.9.4", sha256="3d010d14223e0c7a385ed740e8f046edcbe885e5c22c5ad5733d009596865300") - version("5.8.2", sha256="33386623fd3fb153b56292df4a6a69b457e69e1803b6d07b614e5fd22fb33dda") - version("5.8.1", sha256="035f1f436f0dc2aea09aec146b9cc3e47ca2442f2c62b4ad9374c7c9cc20e632") + version("7.0.9", sha256="505c13f9e4c54c01546f2e29b2fcc2d7fabc856a060b81e5cdfe6012a9198326") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-48579 + version("5.9.4", sha256="3d010d14223e0c7a385ed740e8f046edcbe885e5c22c5ad5733d009596865300") + version("5.8.2", sha256="33386623fd3fb153b56292df4a6a69b457e69e1803b6d07b614e5fd22fb33dda") + version("5.8.1", sha256="035f1f436f0dc2aea09aec146b9cc3e47ca2442f2c62b4ad9374c7c9cc20e632") depends_on("cxx", type="build") # generated diff --git a/var/spack/repos/builtin/packages/unzip/package.py b/var/spack/repos/builtin/packages/unzip/package.py index 8616b3630d0ced..f04dee4f8cdc48 100644 --- a/var/spack/repos/builtin/packages/unzip/package.py +++ b/var/spack/repos/builtin/packages/unzip/package.py @@ -28,8 +28,9 @@ def get_make_args(self): make_args = ["-f", join_path("unix", "Makefile")] cflags = [] - cflags.append("-Wno-error=implicit-function-declaration") - cflags.append("-Wno-error=implicit-int") + if not self.spec.satisfies("%nvhpc"): + cflags.append("-Wno-error=implicit-function-declaration") + cflags.append("-Wno-error=implicit-int") cflags.append("-DLARGE_FILE_SUPPORT") make_args.append(f"LOC={' '.join(cflags)}") diff --git a/var/spack/repos/builtin/packages/upcxx/package.py b/var/spack/repos/builtin/packages/upcxx/package.py index 91971025683297..6fdcaf6a46e87a 100644 --- a/var/spack/repos/builtin/packages/upcxx/package.py +++ b/var/spack/repos/builtin/packages/upcxx/package.py @@ -6,6 +6,9 @@ import os import re +import llnl.util.lang + +import spack.platforms from spack.package import * diff --git a/var/spack/repos/builtin/packages/ut/package.py b/var/spack/repos/builtin/packages/ut/package.py index fc4add539ccfc8..2cdd96dc99eca6 100644 --- a/var/spack/repos/builtin/packages/ut/package.py +++ b/var/spack/repos/builtin/packages/ut/package.py @@ -18,6 +18,8 @@ class Ut(CMakePackage): license("BSL-1.0") version("master", branch="master") + version("2.1.1", sha256="016ac5ece1808cd1100be72f90da4fa59ea41de487587a3283c6c981381cc216") + version("2.1.0", sha256="1c9c35c039ad3a9795a278447db6da0a4ec1a1d223bf7d64687ad28f673b7ae8") version("2.0.1", sha256="1e43be17045a881c95cedc843d72fe9c1e53239b02ed179c1e39e041ebcd7dad") version("2.0.0", sha256="8b5b11197d1308dfc1fe20efd6a656e0c833dbec2807e2292967f6e2f7c0420f") version("1.1.9", sha256="1a666513157905aa0e53a13fac602b5673dcafb04a869100a85cd3f000c2ed0d") diff --git a/var/spack/repos/builtin/packages/util-macros/package.py b/var/spack/repos/builtin/packages/util-macros/package.py index 1f6411e2bd9c26..e0bf69fb56320d 100644 --- a/var/spack/repos/builtin/packages/util-macros/package.py +++ b/var/spack/repos/builtin/packages/util-macros/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * diff --git a/var/spack/repos/builtin/packages/varnish-cache/package.py b/var/spack/repos/builtin/packages/varnish-cache/package.py index 2950922511ee9c..b6ffd4e571142e 100644 --- a/var/spack/repos/builtin/packages/varnish-cache/package.py +++ b/var/spack/repos/builtin/packages/varnish-cache/package.py @@ -10,15 +10,18 @@ class VarnishCache(AutotoolsPackage): """This is Varnish Cache, the high-performance HTTP accelerator.""" homepage = "https://www.varnish-cache.org/" - url = "https://github.com/varnishcache/varnish-cache/archive/varnish-6.4.0.tar.gz" + url = "https://github.com/varnishcache/varnish-cache/archive/refs/tags/varnish-6.4.0.tar.gz" license("BSD-2-Clause") - version("6.4.0", sha256="d9702c2c689c5d4ecd911886f769ddf22f46ac0722e275bee4033928cab09243") - version("6.3.2", sha256="e50f3dd4e26d5669c5b73657cdb0d5ddac7dcc3cfa1761a983afa24b659f3785") - version("6.3.1", sha256="8cc57360c1db36e8c77fc51304a935803a06247f6d6120fa47e8345efadf17a9") - version("6.3.0", sha256="c7170d4bc57f1d2454da046fc5e43e2d19a804448d2dd839fa5c33f76bd677bb") - version("6.2.3", sha256="64cd273aa155c78c21e74def53622be5920c8a7d952fee74f0663e57a01c9a9d") + version("7.6.1", sha256="6cfa30d761fa5edf33322048564cda3ee99de93ee57732c10f720d98d12f1899") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2022-23959 + version("6.4.0", sha256="d9702c2c689c5d4ecd911886f769ddf22f46ac0722e275bee4033928cab09243") + version("6.3.2", sha256="e50f3dd4e26d5669c5b73657cdb0d5ddac7dcc3cfa1761a983afa24b659f3785") + version("6.3.1", sha256="8cc57360c1db36e8c77fc51304a935803a06247f6d6120fa47e8345efadf17a9") + version("6.3.0", sha256="c7170d4bc57f1d2454da046fc5e43e2d19a804448d2dd839fa5c33f76bd677bb") + version("6.2.3", sha256="64cd273aa155c78c21e74def53622be5920c8a7d952fee74f0663e57a01c9a9d") depends_on("c", type="build") # generated @@ -26,7 +29,9 @@ class VarnishCache(AutotoolsPackage): depends_on("automake", type="build") depends_on("libtool", type="build") depends_on("m4", type="build") - depends_on("pcre") + depends_on("pkgconfig", type="build") + depends_on("pcre2", when="@7:") + depends_on("pcre", when="@:6") depends_on("readline") depends_on("python", type=("build", "run")) depends_on("py-sphinx", type=("build", "run")) diff --git a/var/spack/repos/builtin/packages/vbfnlo/package.py b/var/spack/repos/builtin/packages/vbfnlo/package.py index 77648aef6148a0..42abc3245cfcd4 100644 --- a/var/spack/repos/builtin/packages/vbfnlo/package.py +++ b/var/spack/repos/builtin/packages/vbfnlo/package.py @@ -20,6 +20,7 @@ class Vbfnlo(AutotoolsPackage): license("GPL-2.0-only") # The commented out versions exist, but are not tested + version("3.0", sha256="b9df02603e4f801f866360c720191a29afdb958d0bd4369ea7d810e761503e51") version( "3.0.0beta5", sha256="777a3dedb365ea9abc38848a60f30d325da3799cbad69fa308664b94a8c31a90" ) @@ -41,7 +42,6 @@ class Vbfnlo(AutotoolsPackage): depends_on("cxx", type="build") # generated depends_on("fortran", type="build") # generated - # version('2.7.0', sha256='0e96c0912599e3000fffec5305700b947b604a7b06c7975851503f445311e4ef') # Documentation is broken on some systems: # See https://github.com/vbfnlo/vbfnlo/issues/2 @@ -55,6 +55,8 @@ class Vbfnlo(AutotoolsPackage): depends_on("autoconf", type="build") depends_on("m4", type="build") depends_on("libtool", type="build") + # needed as tcsh is hardcoded in m4/vbfnlo.m4, could be patched out in the future + depends_on("tcsh", type="build") @when("@2.7.1") def setup_build_environment(self, env): diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py index 34695cf6b431f1..3483d11576554e 100644 --- a/var/spack/repos/builtin/packages/vecgeom/package.py +++ b/var/spack/repos/builtin/packages/vecgeom/package.py @@ -5,7 +5,7 @@ from spack.package import * -from spack.variant import _ConditionalVariantValues +from spack.variant import ConditionalVariantValues class Vecgeom(CMakePackage, CudaPackage): @@ -21,131 +21,52 @@ class Vecgeom(CMakePackage, CudaPackage): maintainers("drbenmorgan", "sethrj") version("master", branch="master") + version( + "1.2.10", + url="https://gitlab.cern.ch/-/project/981/uploads/8e0a94013efdd1b2d4f44c3fbb10bcdf/VecGeom-v1.2.10.tar.gz", + sha256="3e0934842694452e4cb4a265428cb99af1ecc45f0e2d28a32dfeaa0634c21e2a", + ) + version( + "1.2.9", + url="https://gitlab.cern.ch/-/project/981/uploads/55a89cafbf48a418bec68be42867d4bf/VecGeom-v1.2.9.tar.gz", + sha256="93ee9ce6f7b2d704e9b9db22fad68f81b8eaf17453452969fc47e93dba4bfaf4", + deprecated=True, + ) version( "1.2.8", url="https://gitlab.cern.ch/VecGeom/VecGeom/uploads/db11697eb81d6f369e9ded1078de946b/VecGeom-v1.2.8.tar.gz", sha256="769f59e8377f8268e253a9b2a3eee86868a9ebc1fa66c968b96e19c31440c12b", + deprecated=True, ) version( "1.2.7", url="https://gitlab.cern.ch/VecGeom/VecGeom/uploads/e4172cca4f6f731ef15e2780ecbb1645/VecGeom-v1.2.7.tar.gz", sha256="d264c69b78bf431b9542be1f1af087517eac629da03cf2da62eb1e433fe06021", + deprecated=True, ) version( "1.2.6", url="https://gitlab.cern.ch/VecGeom/VecGeom/uploads/0b16aed9907cea62aa5f5914bec99a90/VecGeom-v1.2.6.tar.gz", sha256="337f8846491930f3d8bfa4b45a1589d46e5d1d87f2d38c8f7006645c3aa90df8", + deprecated=True, ) version( "1.2.5", url="https://gitlab.cern.ch/VecGeom/VecGeom/uploads/33b93e656c5bc49d81cfcba291f5be51/VecGeom-v1.2.5.tar.gz", sha256="d79ea05125e4d03c5605e5ea232994c500841d207b4543ac3d84758adddc15a9", - ) - version( - "1.2.4", - sha256="4f5d43a9cd34a5e0200c41547a438cbb1ed4439f5bb757857c5a225d708590ce", - deprecated=True, - ) - version( - "1.2.3", - sha256="703e52d78b5b78e9f595bc76771659ab0cb09898ea32c50cfbde07d6d09ef1e1", - deprecated=True, - ) - version( - "1.2.2", - sha256="887134d40fc9731138189299f0bd5e73485fbb95a96eb4124ce0854e4672291f", - deprecated=True, - ) - version( - "1.2.1", - sha256="2b47f0d23f6d25ca4fc0601b93a98167bbfb4b8aa6a1bba16d0391569e99e6f0", - deprecated=True, - ) - version( - "1.2.0", - sha256="3448606fceb98ceb72d687d2d3b7ad44c67793d799def4ece9601b8e39c2868a", - deprecated=True, - ) - version( - "1.1.20", - sha256="e1c75e480fc72bca8f8072ea00320878a9ae375eed7401628b15cddd097ed7fd", - deprecated=True, - ) - version( - "1.1.19", - sha256="4c586b57fd4e30be044366c9be983249c7fa8bec629624523f5f69fd9caaa05b", - deprecated=True, - ) - version( - "1.1.18", - sha256="2780640233a36e0d3c767140417015be1893c1ad695ccc0bd3ee0767bc9fbed8", - deprecated=True, - ) - version( - "1.1.17", - sha256="2e95429b795311a6986320d785bedcd9dace9f8e7b7f6bd778d23a4ff23e0424", - deprecated=True, - ) - version( - "1.1.16", - sha256="2fa636993156d9d06750586e8a1ac1701ae2be62dea07964e2369698ae521d02", - deprecated=True, - ) - version( - "1.1.15", - sha256="0ee9897eb12d8d560dc0c9e56e8fdb78d0111f651a984df24e983da035bd1c70", - deprecated=True, - ) - version( - "1.1.13", - sha256="6bb364cc74bdab2e64e2fe132debd7f1e192da0a103f5149df7ab25b7c19a205", - deprecated=True, - ) - version( - "1.1.12", - sha256="fec4495aac4a9d583f076551da61a68b956bba1dd1ebe1cd48c00ef95c962049", - deprecated=True, - ) - version( - "1.1.9", - sha256="a90e11bf83724300d1d7206e5fe89a7915c4ec6aae881587f18e282ac0f6ee8e", - deprecated=True, - ) - version( - "1.1.8", - sha256="9c42206d788ec4b791571882f5ea8d2c591c938abe61c21cc5ec37bfea6bf768", - deprecated=True, - ) - version( - "1.1.7", - sha256="cc79a0baa783b21ecc399c4e7cca925ca340e6aeb96e3b2cad45c141557519bf", - deprecated=True, - ) - version( - "1.1.6", - sha256="c4806a6b67d01b40074b8cc6865d78574a6a1c573be51696f2ecdf98b9cb954a", deprecated=True, ) + version("1.1.20", sha256="e1c75e480fc72bca8f8072ea00320878a9ae375eed7401628b15cddd097ed7fd") version( "1.1.5", sha256="da674f3bbc75c30f56c1a2d251fa8930c899f27fa64b03a36569924030d87b95", deprecated=True, ) - version( - "1.1.3", - sha256="ada09e8b6b2fa6c058290302b2cb5a6c2e644192aab1623c31d18c6a2f4c01c8", - deprecated=True, - ) version( "1.1.0", sha256="e9d1ef83ff591fe4f9ef744a4d3155a3dc7e90ddb6735b24f3afe4c2dc3f7064", deprecated=True, ) - version( - "1.0.1", - sha256="1eae7ac9014c608e8d8db5568058b8c0fea1a1dc7a8f54157a3a1c997b6fd9eb", - deprecated=True, - ) version( "0.5.2", tag="v00.05.02", @@ -191,7 +112,7 @@ class Vecgeom(CMakePackage, CudaPackage): def std_when(values): for v in values: - if isinstance(v, _ConditionalVariantValues): + if isinstance(v, ConditionalVariantValues): for c in v: yield (c.value, c.when) else: diff --git a/var/spack/repos/builtin/packages/vecmem/package.py b/var/spack/repos/builtin/packages/vecmem/package.py index 3372b8e2692410..c647e396759059 100644 --- a/var/spack/repos/builtin/packages/vecmem/package.py +++ b/var/spack/repos/builtin/packages/vecmem/package.py @@ -17,6 +17,7 @@ class Vecmem(CMakePackage, CudaPackage): license("MPL-2.0-no-copyleft-exception") + version("1.11.0", sha256="8f4ef9b50da45ea245291e2a4fef86025245150df4a4654ecb708a20adec5c42") version("1.10.0", sha256="1fbdc599a65ad7b2cd1176844c7578da38911bc747fbe51a71e00d20e6105330") version("1.9.0", sha256="c1ddc43ff0d742306cbee71afd80efd348b6b0b1ba9e4210ca7f8b607f03bd70") version("1.8.0", sha256="d04f1bfcd08837f85c794a69da9f248e163985214a302c22381037feb5b3a7a9") diff --git a/var/spack/repos/builtin/packages/vep-cache/package.py b/var/spack/repos/builtin/packages/vep-cache/package.py new file mode 100644 index 00000000000000..6e84426a52a12e --- /dev/null +++ b/var/spack/repos/builtin/packages/vep-cache/package.py @@ -0,0 +1,151 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class VepCache(Package): + """Separate installation and management for the Ensembl Variant Effect Predictor (vep)""" + + homepage = "https://useast.ensembl.org/info/docs/tools/vep/index.html" + maintainers("teaguesterling") + # This is a dummy value to get spack to resolve resources, which are not downloaded + # when has_code = False + has_code = False + + license("Apache-2.0", checked_by="teaguesterling") + + vep_versions = ["112", "111", "110"] + depends_on("vep", type="build") + for major in vep_versions: + version(major) + depends_on(f"vep@{major}", type="build", when=f"@{major}+match_vep_version") + + vep_assembly_sources = ["ensembl", "refseq", "merged"] + + # This is an incomplete list + vep_species = { + "bos_taurus": ["UMD3.1"], + "danio_rerio": ["GRCz11"], + "homo_sapiens": ["GRCh38", "GRCh37"], + "mus_musculus": ["GRCm38"], + "rattus_norvegicus": ["Rnor_6.0"], + } + + variant("match_vep_version", default=True, description="Match cache and software version") + variant("env", default=True, description="Setup VEP environment variables for this cache") + + # Cache configuration options + variant("fasta", default=True, description="Add FASTA files to the cache") + variant("indexed", default=True, description="Use indexed cache") + + variant( + "assembly_source", + values=vep_assembly_sources, + default="ensembl", + description="What reference genome source", + ) + variant( + "species", + values=vep_species.keys(), + default="homo_sapiens", + description="Which species to download the cache for (only one at a time)", + ) + variant( + "assembly", + values=["latest"] + + [ + conditional(*assemblies, when=f"species={species}") + for species, assemblies in vep_species.items() + ], + default="latest", + multi=False, + description="Which assembly of genome to use (only needed for homo sapiens)", + ) + + def cache_from_spec(self, spec): + variants = spec.variants + indexed = spec.satisfies("+indexed") + cache_type = variants["assembly_source"].value + species = variants["species"].value + assembly = variants["assembly"].value + assembly = self.vep_species[species][0] if assembly == "latest" else assembly + return indexed, cache_type, species, assembly + + def vep_cache_config(self, base): + spec = self.spec + cache_version = spec.version.up_to(1) + indexed, cache_type, species, assembly = self.cache_from_spec(spec) + user_root = join_path(base, "share", "vep") + root = user_root # Should this be VEP install dir? + + suffix = "" if cache_type == "ensembl" else f"_{cache_type}" + species_cache = f"{species}{suffix}" + + if species == "homo_sapiens": + cache_dir = join_path(species, f"{cache_version}_{assembly}") + else: + cache_dir = join_path(species, f"{cache_version}") + + return { + "root": root, + "user_root": user_root, + "version": f"{cache_version}", + "type": f"{cache_type}", + "species": species, + "cache_species": species_cache, + "assembly": f"{assembly}", + "indexed": indexed, + "dir": cache_dir, + "full_path": join_path(root, cache_dir), + } + + def setup_run_environment(self, env): + if self.spec.satisfies("+env"): + cache = self.vep_cache_config(self.home) + env.set("VEP_OFFLINE", "1") + env.set("VEP_CACHE", "1") + env.set("VEP_DIR", cache["user_root"]) + env.set("VEP_SPECIES", cache["species"]) + env.set("VEP_CACHE_VERSION", cache["version"]) + if cache["assembly"] is not None: + env.set("VEP_ASSEMBLY", cache["assembly"]) + if cache["type"] == "refseq": + env.set("VEP_REFSEQ", "1") + if cache["type"] == "merged": + env.set("VEP_MERGED", "1") + if self.spec.satisfies("+fasta"): + pass + + def cache_installer_args(self): + cache = self.vep_cache_config(self.prefix) + args = [ + "--CACHEDIR", + cache["full_path"], + "--CACHE_VERSION", + cache["version"], + "--SPECIES", + cache["cache_species"], + ] + if cache["species"] == "homo_sapiens": + args += ["--ASSEMBLY", cache["assembly"]] + + return args + + def installer_args(self): + auto = "cf" if self.spec.satisfies("+fasta") else "c" + args = ["--AUTO", auto, "--NO_UPDATE", "--NO_TEST"] + args += self.cache_installer_args() + return args + + def install_with_installer(self): + vep = self.spec["vep"].package + installer = which(vep.vep_installer_path) + installer(*self.installer_args()) + + def install(self, spec, prefix): + cache = self.vep_cache_config(self.prefix) + mkdirp(cache["full_path"]) + self.install_with_installer() diff --git a/var/spack/repos/builtin/packages/verdict/package.py b/var/spack/repos/builtin/packages/verdict/package.py new file mode 100644 index 00000000000000..0834497886c148 --- /dev/null +++ b/var/spack/repos/builtin/packages/verdict/package.py @@ -0,0 +1,41 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Verdict(CMakePackage): + """Verdict mesh quality library for evaluating the geometric qualities of regions of space.""" + + homepage = "https://github.com/sandialabs/verdict" + url = "https://github.com/sandialabs/verdict/archive/refs/tags/1.4.2.tar.gz" + git = "https://github.com/sandialabs/verdict.git" + + maintainers("rblake-llnl") + + license("BSD-3-Clause", checked_by="rblake-llnl") + + version("1.4.2", sha256="225c8c5318f4b02e7215cefa61b5dc3f99e05147ad3fefe6ee5a3ee5b828964b") + version("1.4.1", sha256="26fa583265cb2ced2e9b30ed26260f6c9f89c3296221d96ccd5e7bfeec219de7") + + variant("doc", default=False, description="install documentation with library") + variant( + "mangle", + default=False, + description="Mangle verdict names for inclusion in a larger library", + ) + variant("test", default=False, description="enable testing from cmake") + + depends_on("cxx", type="build") + + depends_on("googletest", type="test", when="+test") + + def cmake_args(self): + args = [ + self.define_from_variant("VERDICT_BUILD_DOCS", "doc"), + self.define_from_variant("VERDICT_MANGLE", "mangle"), + self.define_from_variant("VERDICT_ENABLE_TESTING", "test"), + ] + return args diff --git a/var/spack/repos/builtin/packages/verible/package.py b/var/spack/repos/builtin/packages/verible/package.py index fbcc5b5503f1d4..e16c84f56afd90 100644 --- a/var/spack/repos/builtin/packages/verible/package.py +++ b/var/spack/repos/builtin/packages/verible/package.py @@ -34,6 +34,16 @@ class Verible(Package): version("master", branch="master") + version( + "0.0.3841", + sha256="fbc9cb32aa8a64ba60f24dc89e8573c8ea62c45d76113a0f2ab5b73babed5990", + url="https://github.com/chipsalliance/verible/archive/refs/tags/v0.0-3841-g5eb8aa34.tar.gz", + ) + version( + "0.0.3836", + sha256="946625a1527d0a97772ea031ab7358af29e61258c189a2ab0d9533b43e71f35b", + url="https://github.com/chipsalliance/verible/archive/refs/tags/v0.0-3836-g86ee9bab.tar.gz", + ) version( "0.0.3671", sha256="9f492cdc64b047f4e91aece8aa01fd2b846d9695510360dde34980daf5dbe0dd", diff --git a/var/spack/repos/builtin/packages/verilator/fix_compile_gch.patch b/var/spack/repos/builtin/packages/verilator/fix_compile_gch.patch new file mode 100644 index 00000000000000..761eeb9fa7b059 --- /dev/null +++ b/var/spack/repos/builtin/packages/verilator/fix_compile_gch.patch @@ -0,0 +1,13 @@ +diff --git a/src/Makefile_obj.in b/src/Makefile_obj.in +index 18947923a..d29baa840 100644 +--- a/src/Makefile_obj.in ++++ b/src/Makefile_obj.in +@@ -363,7 +363,7 @@ $(TGT): $(PREDEP_H) $(OBJS) + .SECONDARY: + + %.gch: % +- $(OBJCACHE) ${CXX} ${CXXFLAGS} ${CPPFLAGSWALL} ${CFG_CXXFLAGS_PCH} $< -o $@ ++ $(OBJCACHE) ${CXX} ${CXXFLAGS} ${CPPFLAGSWALL} ${CFG_CXXFLAGS_PCH} -c $< -o $@ + %.o: %.cpp + $(OBJCACHE) ${CXX} ${CXXFLAGS} ${CPPFLAGSWALL} -c $< -o $@ + %.o: %.c diff --git a/var/spack/repos/builtin/packages/verilator/package.py b/var/spack/repos/builtin/packages/verilator/package.py index 7500e252d93163..1422c28f1701f1 100644 --- a/var/spack/repos/builtin/packages/verilator/package.py +++ b/var/spack/repos/builtin/packages/verilator/package.py @@ -42,6 +42,8 @@ class Verilator(AutotoolsPackage): version("master", branch="master") + version("5.030", sha256="b9e7e97257ca3825fcc75acbed792b03c3ec411d6808ad209d20917705407eac") + version("5.028", sha256="02d4b6f34754b46a97cfd70f5fcbc9b730bd1f0a24c3fc37223397778fcb142c") version("5.026", sha256="87fdecf3967007d9ee8c30191ff2476f2a33635d0e0c6e3dbf345cc2f0c50b78") version("5.024", sha256="88b04c953e7165c670d6a700f202cef99c746a0867b4e2efe1d7ea789dee35f3") version("5.022", sha256="3c2f5338f4b6ce7e2f47a142401acdd18cbf4c5da06092618d6d036c0afef12d") @@ -86,6 +88,8 @@ class Verilator(AutotoolsPackage): conflicts("%gcc@:6", msg="C++14 support required") + patch("fix_compile_gch.patch", level=1, when="@5.018:5.028") + # we need to fix the CXX and LINK paths, as they point to the spack # wrapper scripts which aren't usable without spack filter_compiler_wrappers("verilated.mk", relative_root="include") diff --git a/var/spack/repos/builtin/packages/visit/19958-enable-python-and-check-pip.patch b/var/spack/repos/builtin/packages/visit/19958-enable-python-and-check-pip.patch new file mode 100644 index 00000000000000..a4f0f2dd471750 --- /dev/null +++ b/var/spack/repos/builtin/packages/visit/19958-enable-python-and-check-pip.patch @@ -0,0 +1,60 @@ +diff --git a/src/CMake/FindVisItPython.cmake b/src/CMake/FindVisItPython.cmake +index f8fca9f730..76ab1f54ca 100644 +--- a/src/CMake/FindVisItPython.cmake ++++ b/src/CMake/FindVisItPython.cmake +@@ -280,6 +280,13 @@ if(PYTHONINTERP_FOUND) + endif() + endif() + ++ # Ensure pip module is avaiable ++ execute_process(COMMAND "${PYTHON_EXECUTABLE}" "-c" "import sys; import pip; sys.stdout.write(pip.__version__)" ++ OUTPUT_VARIABLE PYTHON_PIP_VERSION ++ ERROR_VARIABLE ERROR_FINDING_PYTHON_PIP_MODULE ++ COMMAND_ERROR_IS_FATAL ANY) ++ message(STATUS "PYTHON_PIP_VERSION: ${PYTHON_PIP_VERSION}") ++ + if(NOT EXISTS ${PYTHON_LIBRARY}) + message(FATAL_ERROR "Failed to find main library using PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}") + endif() +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 422bef895f..dacbaf0552 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -1226,15 +1226,17 @@ if(NOT VISIT_DBIO_ONLY) + endif() + endif() + ++# Configure python CLI extensions ++if(VISIT_PYTHON_SCRIPTING AND PYTHONLIBS_FOUND) ++ if(NOT VISIT_STATIC) ++ add_subdirectory(visitpy) ++ endif() ++endif() ++ + if(NOT VISIT_SERVER_COMPONENTS_ONLY AND NOT VISIT_ENGINE_ONLY AND NOT VISIT_DBIO_ONLY) + add_subdirectory(vtkqt) + add_subdirectory(winutil) + add_subdirectory(gui) +- if(VISIT_PYTHON_SCRIPTING AND PYTHONLIBS_FOUND) +- if(NOT VISIT_STATIC) +- add_subdirectory(visitpy) +- endif() +- endif() + # always add java subdir, so code gen targets can be active even + # if java is not enabled + add_subdirectory(java) +diff --git a/src/viewer/CMakeLists.txt b/src/viewer/CMakeLists.txt +index e47b0f271a..be9b2486ca 100644 +--- a/src/viewer/CMakeLists.txt ++++ b/src/viewer/CMakeLists.txt +@@ -11,9 +11,9 @@ + + ADD_SUBDIRECTORY(rpc) + ADD_SUBDIRECTORY(core) ++ADD_SUBDIRECTORY(proxy) + + IF(NOT VISIT_SERVER_COMPONENTS_ONLY AND NOT VISIT_ENGINE_ONLY AND NOT VISIT_DBIO_ONLY) +- ADD_SUBDIRECTORY(proxy) + ADD_SUBDIRECTORY(subjectproxy) + IF(NOT VISIT_STATIC) + # "main" is handled from the top level in the static case so it can be diff --git a/var/spack/repos/builtin/packages/visit/package.py b/var/spack/repos/builtin/packages/visit/package.py index ab24314e357bf1..a95b9943b47879 100644 --- a/var/spack/repos/builtin/packages/visit/package.py +++ b/var/spack/repos/builtin/packages/visit/package.py @@ -58,6 +58,12 @@ class Visit(CMakePackage): executables = ["^visit$"] version("develop", branch="develop") + version("3.4.1", sha256="942108cb294f4c9584a1628225b0be39c114c7e9e01805fb335d9c0b507689f5") + version( + "3.4.0", + sha256="6cfb8b190045439e39fa6014dfa797de189bd40bbb9aa6facf711ebd908229e3", + deprecated=True, + ) version("3.3.3", sha256="cc67abb7585e23b51ad576e797df4108641ae6c8c5e80e5359a279c729769187") version("3.3.2", sha256="0ae7c38287598e8d7d238cf284ea8be1096dcf13f58a7e9e444a28a32c085b56") version("3.3.1", sha256="2e969d3146b559fb833e4cdfaefa72f303d8ad368ef325f68506003f7bc317b9") @@ -76,7 +82,9 @@ class Visit(CMakePackage): depends_on("fortran", type="build") # generated root_cmakelists_dir = "src" - generator("ninja") + generator("ninja", "make") + # Temporary fix for now due to issue installing with ninja generator + conflicts("generator=ninja", when="+python") variant("gui", default=True, description="Enable VisIt's GUI") variant("adios2", default=True, description="Enable ADIOS2 file format") @@ -94,7 +102,7 @@ class Visit(CMakePackage): patch("spack-changes-3.0.1.patch", when="@3.0.1") patch("nonframework-qwt.patch", when="^qt~framework platform=darwin") patch("parallel-hdf5.patch", when="@3.0.1:3.2.2+hdf5+mpi") - patch("parallel-hdf5-3.3.patch", when="@3.3.0:+hdf5+mpi") + patch("parallel-hdf5-3.3.patch", when="@3.3.0:3.3+hdf5+mpi") patch("cmake-findvtkh-3.3.patch", when="@3.3.0:3.3.2+vtkm") patch("cmake-findjpeg.patch", when="@3.1.0:3.2.2") patch("cmake-findjpeg-3.3.patch", when="@3.3.0") @@ -108,15 +116,22 @@ class Visit(CMakePackage): # Fix const-correctness in VTK interface patch("vtk-8.2-constcorrect.patch", when="@3.3.3 ^vtk@8.2.1a") + # Add dectection for py-pip and enable python extensions with building with GUI + patch("19958-enable-python-and-check-pip.patch", when="@3.4:3.4.1 +python") + conflicts( "+gui", when="^[virtuals=gl] osmesa", msg="GUI cannot be activated with OSMesa front-end" ) depends_on("cmake@3.14.7:", type="build") + depends_on("cmake@3.24:", type="build", when="@3.4:") depends_on("mpi", when="+mpi") + conflicts("mpi", when="~mpi") # VTK flavors - depends_on("vtk@8.1:8 +opengl2") + depends_on("vtk +opengl2") + depends_on("vtk@8.1:8", when="@:3.3") + depends_on("vtk@9.2.6", when="@3.4:") depends_on("vtk +qt", when="+gui") depends_on("vtk +python", when="+python") depends_on("vtk +mpi", when="+mpi") @@ -135,12 +150,14 @@ class Visit(CMakePackage): depends_on("gl") # VisIt doesn't work with later versions of qt. - depends_on("qt+gui+opengl@5:5.14", when="+gui") + depends_on("qt+gui+opengl", when="+gui") + depends_on("qt@5:5.14", when="+gui") depends_on("qwt+opengl", when="+gui") - # python@3.8 doesn't work with VisIt. + # python@3.8 doesn't work with older VisIt. depends_on("python@3.2:3.7,3.9:", when="@:3.2 +python") depends_on("python@3.2:", when="@3.3: +python") + depends_on("py-pip", when="+python") extends("python", when="+python") # VisIt uses the hdf5 1.8 api @@ -177,13 +194,13 @@ class Visit(CMakePackage): with when("+adios2"): depends_on("adios2") # adios 2.8 removed adios2_taustubs (https://github.com/visit-dav/visit/issues/19209) - depends_on("adios2@:2.7.1") + # Fixed in 3.4.1 + depends_on("adios2@:2.7.1", when="@:3.4.0") depends_on("adios2+hdf5", when="+hdf5") depends_on("adios2~hdf5", when="~hdf5") depends_on("adios2+mpi", when="+mpi") depends_on("adios2~mpi", when="~mpi") depends_on("adios2+python", when="+python") - depends_on("adios2~python", when="~python") # For version 3.3.0 through 3.3.2, we used vtk-h to utilize vtk-m. # For version starting with 3.3.3 we use vtk-m directly. @@ -243,6 +260,12 @@ def cmake_args(self): self.define("VISIT_CONFIG_SITE", "NONE"), ] + # TODO: Remove this hack when VTK 8.2.1a is removed + if spec["vtk"].satisfies("@8.2.1a"): + args.append(self.define("VISIT_VTK_VERSION", "8.2.1")) + else: + args.append(self.define("VISIT_VTK_VERSION", str(spec["vtk"].version))) + # Provide the plugin compilation environment so as to extend VisIt args.append(self.define_from_variant("VISIT_INSTALL_THIRD_PARTY", "plugins")) diff --git a/var/spack/repos/builtin/packages/voropp/package.py b/var/spack/repos/builtin/packages/voropp/package.py index 683cf8acaeb392..e9c358b5138f8e 100644 --- a/var/spack/repos/builtin/packages/voropp/package.py +++ b/var/spack/repos/builtin/packages/voropp/package.py @@ -6,28 +6,28 @@ from spack.package import * -class Voropp(MakefilePackage): +class Voropp(CMakePackage): """Voro++ is a open source software library for the computation of the Voronoi diagram, a widely-used tessellation that has applications in many scientific fields.""" homepage = "https://math.lbl.gov/voro++/about.html" url = "https://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz" + git = "https://github.com/chr1shr/voro" - variant("pic", default=True, description="Position independent code") + variant("shared", default=True, description="Build shared libraries") license("BSD-3-Clause-LBNL") + version("master", branch="master") version("0.4.6", sha256="ef7970071ee2ce3800daa8723649ca069dc4c71cc25f0f7d22552387f3ea437e") - depends_on("cxx", type="build") # generated - - def edit(self, spec, prefix): - filter_file(r"CC=g\+\+", "CC={0}".format(self.compiler.cxx), "config.mk") - filter_file(r"PREFIX=/usr/local", "PREFIX={0}".format(self.prefix), "config.mk") - # We can safely replace the default CFLAGS which are: - # CFLAGS=-Wall -ansi -pedantic -O3 - cflags = "" - if "+pic" in spec: - cflags += self.compiler.cc_pic_flag - filter_file(r"CFLAGS=.*", "CFLAGS={0}".format(cflags), "config.mk") + depends_on("c", type="build") + depends_on("cxx", type="build") + + patch("voro++-0.4.6-cmake.patch", when="@0.4.6") + + def cmake_args(self): + args = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")] + + return args diff --git a/var/spack/repos/builtin/packages/voropp/voro++-0.4.6-cmake.patch b/var/spack/repos/builtin/packages/voropp/voro++-0.4.6-cmake.patch new file mode 100644 index 00000000000000..48f2ab9a6938be --- /dev/null +++ b/var/spack/repos/builtin/packages/voropp/voro++-0.4.6-cmake.patch @@ -0,0 +1,33 @@ +diff -Naur voro++-0.4.6.orig/CMakeLists.txt voro++-0.4.6/CMakeLists.txt +--- voro++-0.4.6.orig/CMakeLists.txt 1969-12-31 17:00:00.000000000 -0700 ++++ voro++-0.4.6/CMakeLists.txt 2024-10-16 21:14:06.755336366 -0600 +@@ -0,0 +1,3 @@ ++# Set the minimum required version of cmake for a project. ++cmake_minimum_required(VERSION 2.6) ++add_subdirectory(src) +diff -Naur voro++-0.4.6.orig/src/CMakeLists.txt voro++-0.4.6/src/CMakeLists.txt +--- voro++-0.4.6.orig/src/CMakeLists.txt 1969-12-31 17:00:00.000000000 -0700 ++++ voro++-0.4.6/src/CMakeLists.txt 2024-10-16 21:14:07.639351723 -0600 +@@ -0,0 +1,22 @@ ++add_library(voro++ SHARED ++ cell.cc ++ common.cc ++ container.cc ++ unitcell.cc ++ v_compute.cc ++ c_loops.cc ++ v_base.cc wall.cc ++ pre_container.cc ++ container_prd.cc ++) ++set_target_properties(voro++ PROPERTIES VERSION 0.0.0 SOVERSION 0) ++ ++add_executable(voro++-bin cmd_line.cc) ++set_target_properties(voro++-bin PROPERTIES OUTPUT_NAME voro++) ++target_link_libraries(voro++-bin voro++) ++ ++file(GLOB_RECURSE HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.hh) ++ ++install(TARGETS voro++ LIBRARY DESTINATION lib${LIB_SUFFIX}) ++install(FILES ${HDR} DESTINATION include) ++install(TARGETS voro++-bin DESTINATION bin) diff --git a/var/spack/repos/builtin/packages/vtk-m/mr3271-contourtree-print-error.patch b/var/spack/repos/builtin/packages/vtk-m/mr3271-contourtree-print-error.patch new file mode 100644 index 00000000000000..c8943aea9f7e1d --- /dev/null +++ b/var/spack/repos/builtin/packages/vtk-m/mr3271-contourtree-print-error.patch @@ -0,0 +1,38 @@ +From 48e385af319543800398656645327243a29babfb Mon Sep 17 00:00:00 2001 +From: Kenneth Moreland +Date: Tue, 15 Oct 2024 12:01:34 -0400 +Subject: [PATCH] Fix compile error for contour tree print + +A print for one of the contour tree objects was referencing members of +itself that don't seem to exist. This causes the Intel compiler to fail +to compile it. I'm at a loss about how any other compiler does not error +out, but at any rate this should be correct. +--- + .../worklet/contourtree_distributed/HierarchicalContourTree.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/vtkm/filter/scalar_topology/worklet/contourtree_distributed/HierarchicalContourTree.h b/vtkm/filter/scalar_topology/worklet/contourtree_distributed/HierarchicalContourTree.h +index a996d4292..e40d5f4f1 100644 +--- a/vtkm/filter/scalar_topology/worklet/contourtree_distributed/HierarchicalContourTree.h ++++ b/vtkm/filter/scalar_topology/worklet/contourtree_distributed/HierarchicalContourTree.h +@@ -663,7 +663,7 @@ std::string HierarchicalContourTree::PrintDotSuperStructure(const cha + auto hyperarcsPortal = this->Hyperarcs.ReadPortal(); + auto regularNodeGlobalIdsPortal = this->RegularNodeGlobalIds.ReadPortal(); + auto whichIterationPortal = this->WhichIteration.ReadPortal(); +- auto whichRoundPortal = this->whichRound.ReadPortal(); ++ auto whichRoundPortal = this->WhichRound.ReadPortal(); + auto superarcsPortal = this->Superarcs.ReadPortal(); + auto superparentsPortal = this->Superparents.ReadPortal(); + for (vtkm::Id supernode = 0; supernode < this->Supernodes.GetNumberOfValues(); supernode++) +@@ -708,7 +708,7 @@ std::string HierarchicalContourTree::PrintDotSuperStructure(const cha + if (contourtree_augmented::NoSuchElement(superarcTo)) + { // no superarc + // if it occurred on the final round, it's the global root and is shown as the NULL node +- if (whichRoundPortal.Get(superarcFrom) == this->NRounds) ++ if (whichRoundPortal.Get(superarcFrom) == this->NumRounds) + { // root node + outstream << "\tSN" << std::setw(1) << superarcFrom << " -> SA" << std::setw(1) << superarc + << " [label=\"S" << std::setw(1) << superarc << "\",style=dotted]\n"; +-- +2.46.2 + diff --git a/var/spack/repos/builtin/packages/vtk-m/mr3272-bad-mir-table-method.patch b/var/spack/repos/builtin/packages/vtk-m/mr3272-bad-mir-table-method.patch new file mode 100644 index 00000000000000..cf3987079b88b8 --- /dev/null +++ b/var/spack/repos/builtin/packages/vtk-m/mr3272-bad-mir-table-method.patch @@ -0,0 +1,35 @@ +From c805a6039ea500cb96158cfc11271987c9f67aa4 Mon Sep 17 00:00:00 2001 +From: Kenneth Moreland +Date: Tue, 15 Oct 2024 13:06:36 -0400 +Subject: [PATCH] Remove unused method from MIR tables + +The implementation of this method was incorrect as it referenced a class +member that does not exist. Many compilers allowed it in a templated +class when the method was never used, but other compilers attempt to +compile the inlined method regardless. + +Since the method clearly is not needed, the easy solution is to remove +it. +--- + vtkm/filter/contour/worklet/mir/MIRTables.h | 5 ----- + 1 file changed, 5 deletions(-) + +diff --git a/vtkm/filter/contour/worklet/mir/MIRTables.h b/vtkm/filter/contour/worklet/mir/MIRTables.h +index 3dff3329e..a6f4d4f1f 100644 +--- a/vtkm/filter/contour/worklet/mir/MIRTables.h ++++ b/vtkm/filter/contour/worklet/mir/MIRTables.h +@@ -11400,11 +11400,6 @@ public: + return FacesLookup[shape]; + } + +- VTKM_EXEC vtkm::UInt8 GetPoint(vtkm::Id pointIndex) const +- { +- return this->CellFacePortal.Get(pointIndex); +- } +- + private: + typename vtkm::cont::ArrayHandle::ReadPortalType MIRTablesDataPortal; + typename vtkm::cont::ArrayHandle::ReadPortalType MIRTablesIndicesPortal; +-- +2.46.2 + diff --git a/var/spack/repos/builtin/packages/vtk-m/package.py b/var/spack/repos/builtin/packages/vtk-m/package.py index 737ee3a3a7002a..09525457c2c6b7 100644 --- a/var/spack/repos/builtin/packages/vtk-m/package.py +++ b/var/spack/repos/builtin/packages/vtk-m/package.py @@ -7,6 +7,7 @@ import os import sys +from spack.build_systems.cmake import CMakeBuilder from spack.package import * @@ -52,7 +53,8 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage): version("1.2.0", sha256="44596e88b844e7626248fb8e96a38be25a0e585a22256b1c859208b23ef45171") version("1.1.0", sha256="55f42c417d3a41893230b2fd3b5c192daeee689a2193de10bf22a1ef5c24c7ad") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=False, description="build shared libs") @@ -85,6 +87,7 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage): description="build openmp support", ) variant("tbb", default=(sys.platform == "darwin"), description="build TBB support") + variant("sycl", default=False, description="Build with SYCL backend") depends_on("cmake@3.12:", type="build") # CMake >= 3.12 depends_on("cmake@3.18:", when="+rocm", type="build") # CMake >= 3.18 @@ -132,6 +135,13 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage): conflicts("+rocm", when="~kokkos", msg="VTK-m does not support HIP without Kokkos") conflicts("+rocm", when="+virtuals", msg="VTK-m does not support virtual functions with ROCm") + # VTK-m uses the Kokkos SYCL backend. + # If Kokkos provides multiple backends, the SYCL backend may or + # may not be used for VTK-m depending on the default selected by Kokkos + depends_on("kokkos +sycl", when="+kokkos +sycl") + + conflicts("+sycl", when="~kokkos", msg="VTK-m does not support SYCL without Kokkos") + # Can build +shared+cuda after @1.7: conflicts("+shared", when="@:1.6 +cuda_native") conflicts("+cuda~cuda_native~kokkos", msg="Cannot have +cuda without a cuda device") @@ -162,6 +172,14 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage): # https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/3259 patch("mr3259-thrust-is_arithmetic-fix.patch", when="@2.0.0:2.2.0 +cuda ^cuda@12.6:") + # VTK-m PR#3271 + # https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/3271 + patch("mr3271-contourtree-print-error.patch", when="@2.0:2.2") + + # VTK-m PR#3272 + # https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/3272 + patch("mr3272-bad-mir-table-method.patch", when="@2.0:2.2") + # Disable Thrust patch that is no longer needed in modern Thrust patch( "https://github.com/Kitware/VTK-m/commit/4a4466e7c8cd44d2be2bd3fe6f359faa8e9547aa.patch?full_index=1", @@ -169,6 +187,12 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage): when="@1.6.0:2.1 +cuda ^cuda@12.5:", ) + def flag_handler(self, name, flags): + if name == "cxxflags": + if self.spec.satisfies("@:2.2.0 %oneapi@2025:"): + flags.append("-Wno-error=missing-template-arg-list-after-template-kw") + return (flags, None, None) + def cmake_args(self): spec = self.spec options = [] @@ -227,7 +251,7 @@ def cmake_args(self): options.append("-DCMAKE_CUDA_HOST_COMPILER={0}".format(env["SPACK_CXX"])) if spec.satisfies("@1.9.0:") and spec.satisfies("^cmake@3.18:"): - options.append(self.builder.define_cuda_architectures(self)) + options.append(CMakeBuilder.define_cuda_architectures(self)) else: # VTKm_CUDA_Architecture only accepts a single CUDA arch @@ -247,7 +271,7 @@ def cmake_args(self): # hip support if "+rocm" in spec: - options.append(self.builder.define_hip_architectures(self)) + options.append(CMakeBuilder.define_hip_architectures(self)) return options diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py index d2da1fe43e3bea..10e941e8dc07cb 100644 --- a/var/spack/repos/builtin/packages/vtk/package.py +++ b/var/spack/repos/builtin/packages/vtk/package.py @@ -54,8 +54,9 @@ class Vtk(CMakePackage): version("6.3.0", sha256="92a493354c5fa66bea73b5fc014154af5d9f3f6cee8d20a826f4cd5d4b0e8a5e") version("6.1.0", sha256="bd7df10a479606d529a8b71f466c44a2bdd11fd534c62ce0aa44fad91883fa34") - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("pkgconfig", type="build", when="platform=linux") # VTK7 defaults to OpenGL2 rendering backend variant("opengl2", default=True, description="Enable OpenGL2 backend") diff --git a/var/spack/repos/builtin/packages/w3emc/package.py b/var/spack/repos/builtin/packages/w3emc/package.py index 82dbf7bf8c6b92..7e0967bcde075b 100644 --- a/var/spack/repos/builtin/packages/w3emc/package.py +++ b/var/spack/repos/builtin/packages/w3emc/package.py @@ -95,5 +95,5 @@ def cmake_args(self): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): make("test") diff --git a/var/spack/repos/builtin/packages/w3m/package.py b/var/spack/repos/builtin/packages/w3m/package.py index 5478c2348159e9..d4d693afbc46e3 100644 --- a/var/spack/repos/builtin/packages/w3m/package.py +++ b/var/spack/repos/builtin/packages/w3m/package.py @@ -68,7 +68,7 @@ class W3m(AutotoolsPackage): values=("gdk-pixbuf", "imlib2"), multi=False, ) - depends_on("gdk-pixbuf@2:+x11", when="imagelib=gdk-pixbuf +image") + depends_on("gdk-pixbuf@2:", when="imagelib=gdk-pixbuf +image") depends_on("imlib2@1.0.5:", when="imagelib=imlib2 +image") # fix for modern libraries diff --git a/var/spack/repos/builtin/packages/warpx/package.py b/var/spack/repos/builtin/packages/warpx/package.py index 82a8610c4f420d..906c495d3aac9e 100644 --- a/var/spack/repos/builtin/packages/warpx/package.py +++ b/var/spack/repos/builtin/packages/warpx/package.py @@ -243,6 +243,7 @@ class Warpx(CMakePackage, PythonExtension): variant("shared", default=True, description="Build a shared version of the library") variant("tprof", default=True, description="Enable tiny profiling features") + depends_on("c", type="build") depends_on("cxx", type="build") for v in ["24.10", "24.08", "develop"]: diff --git a/var/spack/repos/builtin/packages/wayland-protocols/package.py b/var/spack/repos/builtin/packages/wayland-protocols/package.py index 20b113de243152..dc5054a356ca92 100644 --- a/var/spack/repos/builtin/packages/wayland-protocols/package.py +++ b/var/spack/repos/builtin/packages/wayland-protocols/package.py @@ -3,6 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.build_systems.meson from spack.package import * diff --git a/var/spack/repos/builtin/packages/wgrib2/package.py b/var/spack/repos/builtin/packages/wgrib2/package.py index 1cc9c824d92b5e..ba1b1bcd610d99 100644 --- a/var/spack/repos/builtin/packages/wgrib2/package.py +++ b/var/spack/repos/builtin/packages/wgrib2/package.py @@ -116,13 +116,14 @@ class Wgrib2(MakefilePackage): # Use Spack compiler wrapper flags def inject_flags(self, name, flags): + spec = self.spec if name == "cflags": - if self.spec.compiler.name == "apple-clang": + if spec.satisfies("%apple-clang"): flags.append("-Wno-error=implicit-function-declaration") # When mixing Clang/gfortran need to link to -lgfortran # Find this by searching for gfortran/../lib - if self.spec.compiler.name in ["apple-clang", "clang"]: + if spec.satisfies("%apple-clang") or spec.satisfies("%clang"): if "gfortran" in self.compiler.fc: output = Executable(self.compiler.fc)("-###", output=str, error=str) libdir = re.search("--libdir=(.+?) ", output).group(1) @@ -153,9 +154,10 @@ def edit(self, spec, prefix): makefile.filter(r"^%s=.*" % makefile_option, "{}={}".format(makefile_option, value)) def setup_build_environment(self, env): - if self.spec.compiler.name in ["oneapi", "intel"]: + spec = self.spec + if spec.satisfies("%oneapi") or spec.satisfies("%intel"): comp_sys = "intel_linux" - elif self.spec.compiler.name in ["gcc", "clang", "apple-clang"]: + elif spec.satisfies("%gcc") or spec.satisfies("%clang") or spec.satisfies("%apple-clang"): comp_sys = "gnu_linux" env.set("COMP_SYS", comp_sys) diff --git a/var/spack/repos/builtin/packages/whizard/package.py b/var/spack/repos/builtin/packages/whizard/package.py index 03f8da53068950..c6481fa5713b5a 100644 --- a/var/spack/repos/builtin/packages/whizard/package.py +++ b/var/spack/repos/builtin/packages/whizard/package.py @@ -13,7 +13,7 @@ class Whizard(AutotoolsPackage): of multi-particle scattering cross sections and simulated event samples.""" - homepage = "whizard.hepforge.org" + homepage = "https://whizard.hepforge.org" urls = [ "https://launchpad.net/whizard/3.1.x/3.1.2/+download/whizard-3.1.2.tar.gz", "https://whizard.hepforge.org/downloads/?f=whizard-2.8.3.tar.gz", diff --git a/var/spack/repos/builtin/packages/wi4mpi/package.py b/var/spack/repos/builtin/packages/wi4mpi/package.py index 4e800940076ea3..19b5ba033a1632 100644 --- a/var/spack/repos/builtin/packages/wi4mpi/package.py +++ b/var/spack/repos/builtin/packages/wi4mpi/package.py @@ -47,8 +47,6 @@ def cmake_args(self): compiler = "INTEL" elif "%clang" in self.spec: compiler = "LLVM" - elif "%pgi" in self.spec: - compiler = "PGI" else: tty.error("Could not determine compiler used") wi4mpi_build_type = "RELEASE" diff --git a/var/spack/repos/builtin/packages/wps/package.py b/var/spack/repos/builtin/packages/wps/package.py index 89633e7c8dd088..7aef1c38cf9c4d 100644 --- a/var/spack/repos/builtin/packages/wps/package.py +++ b/var/spack/repos/builtin/packages/wps/package.py @@ -95,7 +95,6 @@ def configure(self, spec, prefix): "dmpar": "19", "dmpar_NO_GRIB2": "20", }, - "pgi": {"serial": "5", "serial_NO_GRIB2": "6", "dmpar": "7", "dmpar_NO_GRIB2": "8"}, } try: diff --git a/var/spack/repos/builtin/packages/wrf/package.py b/var/spack/repos/builtin/packages/wrf/package.py index bbc5aabd0b6e30..e7187645c77b85 100644 --- a/var/spack/repos/builtin/packages/wrf/package.py +++ b/var/spack/repos/builtin/packages/wrf/package.py @@ -70,6 +70,16 @@ class Wrf(Package): maintainers("MichaelLaufer", "ptooley") tags = ["windows"] + version( + "4.6.1", + sha256="b8ec11b240a3cf1274b2bd609700191c6ec84628e4c991d3ab562ce9dc50b5f2", + url="https://github.com/wrf-model/WRF/releases/download/v4.6.1/v4.6.1.tar.gz", + ) + version( + "4.6.0", + sha256="1bb010f9e20b40d33d9df55a602ea9eb54c5444a7316c00a95e1cc44b209021e", + url="https://github.com/wrf-model/WRF/releases/download/v4.6.0/v4.6.0.tar.gz", + ) version( "4.5.2", sha256="408ba6aa60d9cd51d6bad2fa075a3d37000eb581b5d124162885b049c892bbdc", @@ -260,6 +270,16 @@ class Wrf(Package): depends_on("libtool", type="build") depends_on("adios2", when="@4.5: +adios2") + requires( + "%gcc", + "%intel", + "%arm", + "%aocc", + "%fj", + "%oneapi", + policy="one_of", + msg="WRF supports only the GCC, Intel, AMD of Fujitsu compilers", + ) conflicts( "%oneapi", when="@:4.3", msg="Intel oneapi compiler patch only added for version 4.4" ) @@ -418,11 +438,6 @@ def configure(self, spec, prefix): # Remove broken default options... self.do_configure_fixup() - if self.spec.compiler.name not in ["intel", "gcc", "arm", "aocc", "fj", "oneapi"]: - raise InstallError( - "Compiler %s not currently supported for WRF build." % self.spec.compiler.name - ) - p = Popen("./configure", stdin=PIPE, stdout=PIPE, stderr=PIPE) if sys.platform != "win32": setNonBlocking(p.stdout) diff --git a/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch b/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch index 06ab5cff2b701d..3acd8be485e248 100644 --- a/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch +++ b/var/spack/repos/builtin/packages/wrf/patches/4.4/ifx.patch @@ -26,7 +26,7 @@ index 6aa210d7..a3224d34 100644 +PROMOTION = -real-size `expr 8 \* $(RWORDSIZE)` -i4 +ARCH_LOCAL = -DNONSTANDARD_SYSTEM_FUNC -DRPC_TYPES=2 -DXEON_SIMD +CFLAGS_LOCAL = -w -flto -O3 -Wno-implicit-function-declaration -Wno-implicit-int -+LDFLAGS_LOCAL = -flto -fuse-ld=lld ++LDFLAGS_LOCAL = -flto -fuse-ld=lld -i_use-path +CPLUSPLUSLIB = +ESMF_LDFLAG = $(CPLUSPLUSLIB) +FCOPTIM = -O3 @@ -38,7 +38,7 @@ index 6aa210d7..a3224d34 100644 +FCSUFFIX = +BYTESWAPIO = -convert big_endian +RECORDLENGTH = -assume byterecl -+FCBASEOPTS_NO_G = -O3 -flto -w -ftz -align array64byte -fno-alias $(FORMAT_FREE) $(BYTESWAPIO) -fp-model fast=2 -fimf-use-svml=true -vec-threshold0 -xCORE-AVX512 ++FCBASEOPTS_NO_G = -O3 -flto -w -ftz -align array64byte -fno-alias $(FORMAT_FREE) $(BYTESWAPIO) -fp-model fast=2 -fimf-use-svml=true -vec-threshold0 +FCBASEOPTS = $(FCBASEOPTS_NO_G) $(FCDEBUG) +MODULE_SRCH_FLAG = +TRADFLAG = -traditional-cpp diff --git a/var/spack/repos/builtin/packages/wxwidgets/package.py b/var/spack/repos/builtin/packages/wxwidgets/package.py index 6b896039b133bb..232aec767b4ab9 100644 --- a/var/spack/repos/builtin/packages/wxwidgets/package.py +++ b/var/spack/repos/builtin/packages/wxwidgets/package.py @@ -35,11 +35,12 @@ class Wxwidgets(AutotoolsPackage): depends_on("cxx", type="build") # generated variant("opengl", default=False, description="Enable OpenGL support") + variant("gui", default=True, description="Enable GUI support.") patch("math_include.patch", when="@3.0.1:3.0.2") depends_on("pkgconfig", type="build") - depends_on("gtkplus") + depends_on("gtkplus", when="+gui") depends_on("mesa-glu", when="+opengl") @when("@:3.0.2") @@ -52,6 +53,8 @@ def configure_args(self): if self.spec.satisfies("+opengl"): options.append("--with-opengl") + if not self.spec.satisfies("+gui"): + options.append("--disable-gui") # see https://trac.wxwidgets.org/ticket/17639 if spec.satisfies("@:3.1.0") and sys.platform == "darwin": diff --git a/var/spack/repos/builtin/packages/xerces-c/package.py b/var/spack/repos/builtin/packages/xerces-c/package.py index a62f25746e37fc..ac10c1e068d079 100644 --- a/var/spack/repos/builtin/packages/xerces-c/package.py +++ b/var/spack/repos/builtin/packages/xerces-c/package.py @@ -20,13 +20,16 @@ class XercesC(AutotoolsPackage): license("Apache-2.0") + version("3.3.0", sha256="ef752578587e26013a933f16d76305c9b43ca32f869e3d3426986e03efb01d64") version("3.2.5", sha256="1db4028c9b7f1f778efbf4a9462d65e13f9938f2c22f9e9994e12c49ba97e252") - version("3.2.4", sha256="74aa626fc71e729ee227602870dd29a5a01cd8c9c1c7330837a51da2eb5722cc") - version("3.2.3", sha256="45c2329e684405f2b8854ecbddfb8d5b055cdf0fe4d35736cc352c504989bbb6") - version("3.2.2", sha256="1f2a4d1dbd0086ce0f52b718ac0fa4af3dc1ce7a7ff73a581a05fbe78a82bce0") - version("3.2.1", sha256="a36b6e162913ec218cfb84772d2535d43c3365355a601d45d4b8ce11f0ece0da") - version("3.1.4", sha256="9408f12c1628ecf80730bedbe8b2caad810edd01bb4c66f77b60c873e8cc6891") - version("3.1.3", sha256="fc5e5e0247b108b8d64d75aeb124cabdee9b7fcd725a89fe2242b4637b25c1fa") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2018-1311 + version("3.2.4", sha256="74aa626fc71e729ee227602870dd29a5a01cd8c9c1c7330837a51da2eb5722cc") + version("3.2.3", sha256="45c2329e684405f2b8854ecbddfb8d5b055cdf0fe4d35736cc352c504989bbb6") + version("3.2.2", sha256="1f2a4d1dbd0086ce0f52b718ac0fa4af3dc1ce7a7ff73a581a05fbe78a82bce0") + version("3.2.1", sha256="a36b6e162913ec218cfb84772d2535d43c3365355a601d45d4b8ce11f0ece0da") + version("3.1.4", sha256="9408f12c1628ecf80730bedbe8b2caad810edd01bb4c66f77b60c873e8cc6891") + version("3.1.3", sha256="fc5e5e0247b108b8d64d75aeb124cabdee9b7fcd725a89fe2242b4637b25c1fa") depends_on("c", type="build") # generated depends_on("cxx", type="build") # generated diff --git a/var/spack/repos/builtin/packages/xfsprogs/package.py b/var/spack/repos/builtin/packages/xfsprogs/package.py index 2cc15a88613b0f..b5478dcc828c7e 100644 --- a/var/spack/repos/builtin/packages/xfsprogs/package.py +++ b/var/spack/repos/builtin/packages/xfsprogs/package.py @@ -14,6 +14,20 @@ class Xfsprogs(AutotoolsPackage): license("LGPL-2.1-or-later") + version("6.11.0", sha256="dae3bb432196f7b183b2e6bd5dc44bf33edbd7d0e85bd37d25c235df81b8100a") + version("6.10.1", sha256="6cb839be1a9535f8352441b3f6eea521ead5c5c7c913e8106cdfac96aa117041") + version("6.10.0", sha256="a16e7caa5d8fea1c9652f1a45c8e5f2acc13fc632cf2066fe364ab13bd9df82d") + version("6.9.0", sha256="975284783fb3fbc4e1ae640bd804d788e4237a86b07582acee86b6e48f6521b7") + version("6.8.0", sha256="78b6ab776eebe5ab52e0884a70fa1b3633e64a282b1ecfae91f5dd1d9ec5f07d") + version("6.7.0", sha256="e75d1e012853e11597411cfcb80e26c811881cf0ca03715e852b42946cc61e1f") + version("6.6.0", sha256="50ca2f4676df8fab4cb4c3ef3dd512d5551e6844d40a65a31d5b8e03593d22df") + version("6.5.0", sha256="8db81712b32756b97d89dd9a681ac5e325bbb75e585382cd4863fab7f9d021c6") + version("6.4.0", sha256="c31868418bfbf49a3a9c47fc70cdffde9d96f4ff0051bd04a0881e6654648104") + version("6.3.0", sha256="ec987c9f0bcb2db2991bffb80d353150b389c3a2b79b6830411f7042adf6990c") + version("6.2.0", sha256="d67dcba5a28e0904b60886b6e5f752bc7c9c3a5c7096153855b5adca9db86c51") + version("6.1.1", sha256="05e8a137870db1d6182df72dda98ab7a7100deb376947e854b9d59c914c2c7bb") + version("6.1.0", sha256="eceb9015c4ebefa56fa85faff756ccb51ed2cf9c39ba239767f8e78705e85251") + version("6.0.0", sha256="b77cec2364aab0b8ae8d8c67daac7fdb3801e0979f1d8328d9c3469e57ca9ca0") version("5.11.0", sha256="0e9c390fcdbb8a79e1b8f5e6e25fd529fc9f9c2ef8f2d5e647b3556b82d1b353") version("5.8.0", sha256="8ef46ed9e6bb927f407f541dc4324857c908ddf1374265edc910d23724048c6b") version("5.7.0", sha256="8f2348a68a686a3f4491dda5d62dd32d885fbc52d32875edd41e2c296e7b4f35") @@ -25,14 +39,16 @@ class Xfsprogs(AutotoolsPackage): depends_on("libinih") depends_on("gettext") + depends_on("gettext@:0.21.1", when="@:6.3") depends_on("uuid") depends_on("util-linux") + depends_on("liburcu", when="@6:") def flag_handler(self, name, flags): if name == "cflags": if self.spec.satisfies("@:5.4.0 %gcc@10:"): flags.append("-fcommon") - elif name == "ldlibs": + elif name == "ldlibs" or name == "ldflags": if "intl" in self.spec["gettext"].libs.names: flags.append("-lintl") return build_system_flags(name, flags) @@ -41,7 +57,10 @@ def setup_build_environment(self, env): env.append_path("C_INCLUDE_PATH", self.spec["util-linux"].prefix.include.blkid) def configure_args(self): - return ["--with-systemd-unit-dir=" + self.spec["xfsprogs"].prefix.lib.systemd.system] + args = ["--with-systemd-unit-dir=" + self.spec["xfsprogs"].prefix.lib.systemd.system] + if self.spec.satisfies("@6.5.0:"): + args.append("--with-udev-rule-dir=" + self.spec["xfsprogs"].prefix) + return args def install(self, spec, prefix): make("install") diff --git a/var/spack/repos/builtin/packages/xsdk-examples/package.py b/var/spack/repos/builtin/packages/xsdk-examples/package.py index 66f1ee05a7f0be..4cdb496b9720af 100644 --- a/var/spack/repos/builtin/packages/xsdk-examples/package.py +++ b/var/spack/repos/builtin/packages/xsdk-examples/package.py @@ -101,5 +101,5 @@ def enabled(pkg): return args def check(self): - with working_dir(self.builder.build_directory): + with working_dir(self.build_directory): ctest("--output-on-failure") diff --git a/var/spack/repos/builtin/packages/xsdk/package.py b/var/spack/repos/builtin/packages/xsdk/package.py index 85bf27ae2b092b..832d9537c62e30 100644 --- a/var/spack/repos/builtin/packages/xsdk/package.py +++ b/var/spack/repos/builtin/packages/xsdk/package.py @@ -84,6 +84,7 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): homepage = "https://xsdk.info" maintainers("balay", "luszczek", "balos1", "shuds13", "v-dobrev") + version("1.1.0") version("1.0.0") version("0.8.0", deprecated=True) @@ -94,7 +95,7 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): variant("omega-h", default=True, description="Enable omega-h package build") variant("strumpack", default=True, description="Enable strumpack package build") variant("dealii", default=True, description="Enable dealii package build") - variant("alquimia", default=True, description="Enable alquimia package build") + variant("alquimia", default=True, when="@:1.0.0", description="Enable alquimia package build") variant("phist", default=True, description="Enable phist package build") variant("ginkgo", default=True, description="Enable ginkgo package build") variant("libensemble", default=True, description="Enable py-libensemble package build") @@ -105,16 +106,25 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): variant("heffte", default=True, description="Enable heffte package build") variant("slate", default=(sys.platform != "darwin"), description="Enable slate package build") variant("arborx", default=True, description="Enable ArborX build") - variant("exago", default=True, description="Enable exago build") + variant("exago", default=True, when="@:1.0.0", description="Enable exago build") variant("hiop", default=True, description="Enable hiop build") variant("raja", default=(sys.platform != "darwin"), description="Enable raja for hiop, exago") - variant("pflotran", default=True, description="Enable pflotran package build") + variant("pflotran", default=True, when="@:1.0.0", description="Enable pflotran package build") + xsdk_depends_on( + "hypre@2.32.0+superlu-dist+shared", when="@1.1.0", cuda_var="cuda", rocm_var="rocm" + ) xsdk_depends_on( "hypre@2.30.0+superlu-dist+shared", when="@1.0.0", cuda_var="cuda", rocm_var="rocm" ) xsdk_depends_on("hypre@2.26.0+superlu-dist+shared", when="@0.8.0", cuda_var="cuda") + xsdk_depends_on( + "mfem@4.7.0+shared+mpi+superlu-dist+petsc+sundials+examples+miniapps", + when="@1.1.0", + cuda_var="cuda", + rocm_var="rocm", + ) xsdk_depends_on( "mfem@4.6.0+shared+mpi+superlu-dist+petsc+sundials+examples+miniapps", when="@1.0.0", @@ -128,10 +138,18 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): rocm_var="rocm", ) + xsdk_depends_on("superlu-dist@9.1.0", when="@1.1.0", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("superlu-dist@8.2.1", when="@1.0.0", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("superlu-dist@8.1.2", when="@0.8.0") xsdk_depends_on("trilinos +superlu-dist", when="@1.0.0: +trilinos ~cuda ~rocm") + xsdk_depends_on( + "trilinos@16.0.0+hypre+hdf5~mumps+boost" + + "~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2" + + "~exodus~dtk+intrepid2+shards+stratimikos gotype=int" + + " cxxstd=17", + when="@1.1.0 +trilinos", + ) xsdk_depends_on( "trilinos@14.4.0+hypre+hdf5~mumps+boost" + "~suite-sparse+tpetra+nox+ifpack2+zoltan+zoltan2+amesos2" @@ -147,12 +165,19 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): when="@0.8.0 +trilinos", ) + xsdk_depends_on("datatransferkit@3.1.1", when="@1.1.0 +trilinos +datatransferkit") xsdk_depends_on("datatransferkit@3.1.1", when="@1.0.0 +trilinos +datatransferkit") dtk7ver = "3.1-rc2" if sys.platform == "darwin" else "3.1-rc3" xsdk_depends_on("datatransferkit@" + dtk7ver, when="@0.8.0 +trilinos +datatransferkit") xsdk_depends_on("petsc +batch", when="^cray-mpich") xsdk_depends_on("petsc +sycl +kokkos", when="@1.0.0: +sycl") + xsdk_depends_on( + "petsc@3.22.1+mpi+hypre+superlu-dist+metis+hdf5~mumps+double~int64", + when="@1.1.0", + cuda_var="cuda", + rocm_var="rocm", + ) xsdk_depends_on( "petsc@3.20.1+mpi+hypre+superlu-dist+metis+hdf5~mumps+double~int64", when="@1.0.0", @@ -168,14 +193,22 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): xsdk_depends_on("dealii +trilinos~adol-c", when="+trilinos +dealii") xsdk_depends_on("dealii ~trilinos", when="~trilinos +dealii") + xsdk_depends_on( + "dealii@9.6.0~assimp~python~doc~gmsh+petsc+slepc+mpi~int64" + + "~netcdf+metis~sundials~ginkgo~symengine~simplex~arborx~cgal~oce" + + "~opencascade~vtk~taskflow", + when="@1.1.0 +dealii", + ) xsdk_depends_on( "dealii@9.5.1~assimp~python~doc~gmsh+petsc+slepc+mpi~int64" - + "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce", + + "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce" + + "~opencascade", when="@1.0.0 +dealii", ) xsdk_depends_on( "dealii@9.4.0~assimp~python~doc~gmsh+petsc+slepc+mpi~int64" - + "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal", + + "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce" + + "~opencascade", when="@0.8.0 +dealii", ) @@ -188,6 +221,12 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): xsdk_depends_on("sundials +trilinos", when="+trilinos") xsdk_depends_on("sundials +ginkgo", when="+ginkgo @0.8.0:") xsdk_depends_on("sundials +sycl cxxstd=17", when="@1.0.0: +sycl") + xsdk_depends_on( + "sundials@7.1.1~int64+hypre+petsc+superlu-dist", + when="@1.1.0", + cuda_var=["cuda", "?magma"], + rocm_var=["rocm", "?magma"], + ) xsdk_depends_on( "sundials@6.6.2~int64+hypre+petsc+superlu-dist", when="@1.0.0", @@ -201,33 +240,43 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): rocm_var=["rocm", "?magma"], ) + xsdk_depends_on("plasma@24.8.7", when="@1.1.0 %gcc@6.0:") xsdk_depends_on("plasma@23.8.2:", when="@1.0.0 %gcc@6.0:") xsdk_depends_on("plasma@22.9.29:", when="@0.8.0 %gcc@6.0:") + xsdk_depends_on("magma@2.8.0", when="@1.1.0", cuda_var="?cuda", rocm_var="?rocm") xsdk_depends_on("magma@2.7.1", when="@1.0.0", cuda_var="?cuda", rocm_var="?rocm") xsdk_depends_on("magma@2.7.0", when="@0.8.0", cuda_var="?cuda", rocm_var="?rocm") xsdk_depends_on("amrex +sycl", when="@1.0.0: +sycl") + xsdk_depends_on("amrex@24.10+sundials", when="@1.1.0 +amrex", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("amrex@23.08+sundials", when="@1.0.0 +amrex", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("amrex@22.09+sundials", when="@0.8.0 +amrex", cuda_var="cuda", rocm_var="rocm") + xsdk_depends_on("slepc@3.22.1", when="@1.1.0", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("slepc@3.20.0", when="@1.0.0", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("slepc@3.18.1", when="@0.8.0", cuda_var="cuda", rocm_var="rocm") xsdk_depends_on("omega-h +trilinos", when="+trilinos +omega-h") xsdk_depends_on("omega-h ~trilinos", when="~trilinos +omega-h") - xsdk_depends_on("omega-h@scorec.10.6.0", when="@1.0.0 +omega-h") + xsdk_depends_on("omega-h@10.8.6", when="@1.1.0 +omega-h") + xsdk_depends_on("omega-h@10.6.0", when="@1.0.0 +omega-h") xsdk_depends_on("omega-h@9.34.13", when="@0.8.0 +omega-h") xsdk_depends_on("strumpack ~cuda", when="~cuda +strumpack") xsdk_depends_on("strumpack ~slate~openmp", when="~slate @0.8.0: +strumpack") + xsdk_depends_on("strumpack@8.0.0", when="@1.1.0 +strumpack", cuda_var=["cuda"]) xsdk_depends_on("strumpack@7.2.0", when="@1.0.0 +strumpack", cuda_var=["cuda"]) xsdk_depends_on("strumpack@7.0.1", when="@0.8.0 +strumpack", cuda_var=["cuda"]) + xsdk_depends_on("pumi@2.2.9+shared", when="@1.1.0") xsdk_depends_on("pumi@2.2.8+shared", when="@1.0.0") xsdk_depends_on("pumi@2.2.7+shared", when="@0.8.0") tasmanian_openmp = "~openmp" if sys.platform == "darwin" else "+openmp" + xsdk_depends_on( + "tasmanian@8.1+mpi+blas" + tasmanian_openmp, when="@1.1.0", cuda_var=["cuda", "?magma"] + ) xsdk_depends_on( "tasmanian@8.0+mpi+blas" + tasmanian_openmp, when="@1.0.0", cuda_var=["cuda", "?magma"] ) @@ -238,6 +287,7 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): ) xsdk_depends_on("arborx+sycl", when="@1.0.0: +arborx +sycl") + xsdk_depends_on("arborx@1.7", when="@1.1.0 +arborx") xsdk_depends_on("arborx@1.4.1", when="@1.0.0 +arborx") xsdk_depends_on("arborx@1.2", when="@0.8.0 +arborx") @@ -249,10 +299,14 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): xsdk_depends_on("phist kernel_lib=tpetra", when="+trilinos +phist") xsdk_depends_on("phist kernel_lib=petsc", when="~trilinos +phist") + xsdk_depends_on("phist@1.12.1 ~fortran ~scamac ~openmp ~host ~int64", when="@1.1.0 +phist") xsdk_depends_on("phist@1.12.0 ~fortran ~scamac ~openmp ~host ~int64", when="@1.0.0 +phist") xsdk_depends_on("phist@1.11.2 ~fortran ~scamac ~openmp ~host ~int64", when="@0.8.0 +phist") xsdk_depends_on("ginkgo+sycl", when="@1.0.0: +ginkgo +sycl") + xsdk_depends_on( + "ginkgo@1.8.0 +mpi ~openmp", when="@1.1.0 +ginkgo", cuda_var="cuda", rocm_var="rocm" + ) xsdk_depends_on( "ginkgo@1.7.0 +mpi ~openmp", when="@1.0.0 +ginkgo", cuda_var="cuda", rocm_var="rocm" ) @@ -260,32 +314,44 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): "ginkgo@1.5.0 +mpi ~openmp", when="@0.8.0 +ginkgo", cuda_var="cuda", rocm_var="rocm" ) + xsdk_depends_on("py-libensemble@1.4.2+petsc4py", when="@1.1.0 +libensemble") + xsdk_depends_on("py-petsc4py@3.22.1", when="@1.1.0 +libensemble") xsdk_depends_on("py-libensemble@1.0.0+petsc4py", when="@1.0.0 +libensemble") xsdk_depends_on("py-petsc4py@3.20.1", when="@1.0.0 +libensemble") xsdk_depends_on("py-libensemble@0.9.3+petsc4py", when="@0.8.0 +libensemble") xsdk_depends_on("py-petsc4py@3.18.1", when="@0.8.0 +libensemble") xsdk_depends_on("precice ~petsc", when="+precice ^cray-mpich") + xsdk_depends_on("precice@3.1.2", when="@1.1.0 +precice") xsdk_depends_on("precice@2.5.0", when="@1.0.0 +precice") xsdk_depends_on("precice@2.5.0", when="@0.8.0 +precice") bfpk_openmp = "~openmp" if sys.platform == "darwin" else "+openmp" + xsdk_depends_on("butterflypack@3.2.0" + bfpk_openmp, when="@1.1.0 +butterflypack") xsdk_depends_on("butterflypack@2.4.0" + bfpk_openmp, when="@1.0.0 +butterflypack") xsdk_depends_on("butterflypack@2.2.2" + bfpk_openmp, when="@0.8.0 +butterflypack") + xsdk_depends_on("heffte+fftw", when="+heffte ~rocm") + xsdk_depends_on( + "heffte@2.4.1", + when="@1.1.0 +heffte", + cuda_var=["cuda", "?magma"], + rocm_var=["rocm", "?magma"], + ) xsdk_depends_on( - "heffte@2.4.0+fftw", + "heffte@2.4.0", when="@1.0.0 +heffte", cuda_var=["cuda", "?magma"], rocm_var=["rocm", "?magma"], ) xsdk_depends_on( - "heffte@2.3.0+fftw", + "heffte@2.3.0", when="@0.8.0 +heffte", cuda_var=["cuda", "?magma"], rocm_var=["rocm", "?magma"], ) + xsdk_depends_on("slate@2024.10.29", when="@1.1.0 +slate", cuda_var="cuda") xsdk_depends_on("slate@2023.08.25", when="@1.0.0 +slate", cuda_var="cuda") xsdk_depends_on("slate@2022.07.00", when="@0.8.0 +slate", cuda_var="cuda") @@ -294,6 +360,8 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage): xsdk_depends_on("exago@1.5.0~ipopt~hiop~python", when="@0.8.0 +exago ~raja") xsdk_depends_on("exago@1.5.0~ipopt+hiop+raja", when="@0.8.0 +exago +raja", cuda_var="cuda") + xsdk_depends_on("hiop@1.1.0", when="@1.1.0 +hiop ~raja") + xsdk_depends_on("hiop@1.1.0+raja", when="@1.1.0 +hiop +raja", cuda_var="cuda") xsdk_depends_on("hiop@1.0.0", when="@1.0.0 +hiop ~raja") xsdk_depends_on("hiop@1.0.0+raja", when="@1.0.0 +hiop +raja", cuda_var="cuda") xsdk_depends_on("hiop@0.7.1", when="@0.8.0 +hiop ~raja") diff --git a/var/spack/repos/builtin/packages/xsimd/package.py b/var/spack/repos/builtin/packages/xsimd/package.py index e869da903cedd6..0086812647de98 100644 --- a/var/spack/repos/builtin/packages/xsimd/package.py +++ b/var/spack/repos/builtin/packages/xsimd/package.py @@ -41,7 +41,6 @@ class Xsimd(CMakePackage): conflicts("%gcc@:4.8") conflicts("%clang@:3.6") # untested: conflicts('%intel@:15') - # untested: conflicts('%pgi@:14') def cmake_args(self): args = [self.define("BUILD_TESTS", self.run_tests)] diff --git a/var/spack/repos/builtin/packages/xtensor/package.py b/var/spack/repos/builtin/packages/xtensor/package.py index 58c20ab95e585d..3e964afbf0c17f 100644 --- a/var/spack/repos/builtin/packages/xtensor/package.py +++ b/var/spack/repos/builtin/packages/xtensor/package.py @@ -52,7 +52,6 @@ class Xtensor(CMakePackage): conflicts("%gcc@:4.8") conflicts("%clang@:3.5") # untested: conflicts('%intel@:15') - # untested: conflicts('%pgi@:14') def cmake_args(self): args = [ diff --git a/var/spack/repos/builtin/packages/xtl/package.py b/var/spack/repos/builtin/packages/xtl/package.py index f3dcf90fa0bf76..007c4d1ea6e190 100644 --- a/var/spack/repos/builtin/packages/xtl/package.py +++ b/var/spack/repos/builtin/packages/xtl/package.py @@ -31,4 +31,3 @@ class Xtl(CMakePackage): conflicts("%gcc@:4.8") conflicts("%clang@:3.6") # untested: conflicts('%intel@:15') - # untested: conflicts('%pgi@:14') diff --git a/var/spack/repos/builtin/packages/xtrans/package.py b/var/spack/repos/builtin/packages/xtrans/package.py index 92a5c73d87dea3..aeadc39d7f547f 100644 --- a/var/spack/repos/builtin/packages/xtrans/package.py +++ b/var/spack/repos/builtin/packages/xtrans/package.py @@ -19,6 +19,7 @@ class Xtrans(AutotoolsPackage, XorgPackage): maintainers("wdconinc") + version("1.5.2", sha256="23031301f10fef5eaa55b438610fbd29294a70d2fa189355343bf0186bff8374") version("1.5.0", sha256="a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86") version("1.4.0", sha256="48ed850ce772fef1b44ca23639b0a57e38884045ed2cbb18ab137ef33ec713f9") version("1.3.5", sha256="b7a577c1b6c75030145e53b4793db9c88f9359ac49e7d771d4385d21b3e5945d") diff --git a/var/spack/repos/builtin/packages/xyce/package.py b/var/spack/repos/builtin/packages/xyce/package.py index 7d1631975c8683..de0a94f836cfee 100644 --- a/var/spack/repos/builtin/packages/xyce/package.py +++ b/var/spack/repos/builtin/packages/xyce/package.py @@ -60,8 +60,9 @@ class Xyce(CMakePackage): deprecated=True, ) - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") + depends_on("fortran", type="build") depends_on("cmake@3.22:", type="build") depends_on("flex") @@ -227,7 +228,11 @@ def flag_handler(self, name, flags): flags.append("-DXyce_INTRUSIVE_PCE -Wreorder") elif name == "ldflags": # Fortran lib (assumes clang is built with gfortran!) - if spec.compiler.name in ["gcc", "clang", "apple-clang"]: + if ( + spec.satisfies("%gcc") + or spec.satisfies("%clang") + or spec.satisfies("%apple-clang") + ): fc = Executable(self.compiler.fc) libgfortran = fc( "--print-file-name", "libgfortran." + dso_suffix, output=str diff --git a/var/spack/repos/builtin/packages/yafyaml/package.py b/var/spack/repos/builtin/packages/yafyaml/package.py index 996b57fa1e62e2..379fff05abed89 100644 --- a/var/spack/repos/builtin/packages/yafyaml/package.py +++ b/var/spack/repos/builtin/packages/yafyaml/package.py @@ -6,6 +6,7 @@ import os import re +import spack.compiler from spack.package import * diff --git a/var/spack/repos/builtin/packages/yambo/package.py b/var/spack/repos/builtin/packages/yambo/package.py index f8a24d2d125f22..8ff7e500a57ca8 100644 --- a/var/spack/repos/builtin/packages/yambo/package.py +++ b/var/spack/repos/builtin/packages/yambo/package.py @@ -3,6 +3,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import shutil + from spack.package import * @@ -20,8 +22,12 @@ class Yambo(AutotoolsPackage): homepage = "https://www.yambo-code.org/index.php" url = "https://github.com/yambo-code/yambo/archive/4.2.2.tar.gz" + maintainers("LydDeb") + license("GPL-2.0-or-later") + version("5.2.4", sha256="7c3f2602389fc29a0d8570c2fe85fe3768d390cfcbb2d371e83e75c6c951d5fc") + version("5.2.3", sha256="a6168d1fa820af857ac51217bd6ad26dda4cc89c07e035bd7dc230038ae1ab9c") version("5.2.1", sha256="0ac362854313927d75bbf87be98ff58447f3805f79724c38dc79df07f03a7046") version("5.1.1", sha256="c85036ca60507e627c47b6c6aee8241830349e88110e1ce9132ef03ab2c4e9f6") version("4.2.2", sha256="86b4ebe679387233266aba49948246c85a32b1e6840d024f162962bd0112448c") @@ -37,13 +43,13 @@ class Yambo(AutotoolsPackage): values=any_combination_of("time", "memory"), description="Activate profiling of specific sections", ) - variant( "io", - values=any_combination_of("iotk", "etsf-io"), + default="iotk", + values=("iotk", "etsf-io"), + multi=True, description="Activate support for different io formats (requires network access)", ) - # MPI + OpenMP parallelism variant("mpi", default=True, description="Enable MPI support") variant("openmp", default=False, description="Enable OpenMP support") @@ -71,18 +77,57 @@ class Yambo(AutotoolsPackage): depends_on("netcdf-fortran") depends_on("libxc@2.0.3:") + depends_on("etsf-io", when="io=etsf-io") + build_targets = ["all"] parallel = False - # The configure in the package has the string 'cat config/report' - # hard-coded, which causes a failure at configure time due to the - # current working directory in Spack. Fix this by using the absolute - # path to the file. - @run_before("configure") - def filter_configure(self): - report_abspath = join_path(self.build_directory, "config", "report") - filter_file("config/report", report_abspath, "configure") + sanity_check_is_file = ["bin/yambo"] + + resource( + when="@5.2.4", + name="ydriver", + url="https://github.com/yambo-code/Ydriver/archive/refs/tags/1.4.2.tar.gz", + sha256="c242f0700a224325ff59326767614a561b02ce16ddb2ce6c13ddd2d5901cc3e4", + destination="ydriver_archive", + placement="archive", + expand=False, + ) + resource( + when="@5.2.1:5.2.3", + name="ydriver", + url="https://github.com/yambo-code/Ydriver/archive/refs/tags/1.2.0.tar.gz", + sha256="0f29a44e9c4b49d3f6be3f159a7ef415932b2ae2f2fdba163af60a0673befe6e", + destination="ydriver_archive", + placement="archive", + expand=False, + ) + # iotk archive is contained inside this git repository + resource( + when="@5.2", + name="iotk", + git="https://github.com/yambo-code/yambo-libraries.git", + destination="yambo_libraries", + expand=False, + ) + + # ydriver-1.1.0 is required by yambo 5.1.1 but the oldest release in + # https://github.com/yambo-code/Ydriver is 1.2.0 + # So, the air-gapped installation is only available since yambo@5.2.1 + @when("@5.2") + @run_before("autoreconf") + def setup_archives(self): + if self.spec.satisfies("@5.2.4"): + shutil.move("ydriver_archive/archive/1.4.2.tar.gz", "lib/archive/Ydriver-1.4.2.tar.gz") + if self.spec.satisfies("@5.2.1:5.2.3"): + shutil.move("ydriver_archive/archive/1.2.0.tar.gz", "lib/archive/Ydriver-1.2.0.tar.gz") + shutil.move( + "yambo_libraries/yambo-libraries/external/iotk-y1.2.2.tar.gz", + "lib/archive/iotk-y1.2.2.tar.gz", + ) + shutil.rmtree("ydriver_archive") + shutil.rmtree("yambo_libraries") def enable_or_disable_time(self, activated): return "--enable-time-profile" if activated else "--disable-time-profile" @@ -93,6 +138,52 @@ def enable_or_disable_memory(self, activated): def enable_or_disable_openmp(self, activated): return "--enable-open-mp" if activated else "--disable-open-mp" + @when("@5") + def configure_args(self): + spec = self.spec + args = [ + f"--with-hdf5-path={spec['hdf5'].prefix}", + f"--prefix={self.stage.source_path}", + f"--exec-prefix={self.stage.source_path}", + ] + # Double precision + args.extend(self.enable_or_disable("dp")) + + # Application profiling + args.extend(self.enable_or_disable("profile")) + + # MPI + threading + args.extend(self.enable_or_disable("mpi")) + args.extend(self.enable_or_disable("openmp")) + + if spec.satisfies("+mpi"): + args.append(f"--with-scalapack-libs={spec['scalapack'].libs}") + + args.append(f"--with-blas-libs={spec['blas'].libs}") + args.append(f"--with-lapack-libs={spec['lapack'].libs}") + args.append(f"--with-netcdf-path={spec['netcdf-c'].prefix}") + args.append(f"--with-netcdff-path={spec['netcdf-fortran'].prefix}") + args.append(f"--with-fft-path={spec['fftw'].prefix}") + args.append(f"--with-libxc-path={spec['libxc'].prefix}") + args.append("--enable-hdf5-p2y-support") + # IO + if spec.satisfies("io=etsf-io"): + args.append(f"--with-etsf-io-path={spec['etsf-io'].prefix}") + args.extend(self.enable_or_disable("io")) + + return args + + # The configure in the package has the string 'cat config/report' + # hard-coded, which causes a failure at configure time due to the + # current working directory in Spack. Fix this by using the absolute + # path to the file. + @when("@4.2.1") + @run_before("configure") + def filter_configure(self): + report_abspath = join_path(self.build_directory, "config", "report") + filter_file("config/report", report_abspath, "configure") + + @when("@4.2.1") def configure_args(self): args = [ # As of version 4.2.1 there are hard-coded paths that make diff --git a/var/spack/repos/builtin/packages/yaml-cpp/package.py b/var/spack/repos/builtin/packages/yaml-cpp/package.py index f44cce75d8b07b..1a3b8afa72673e 100644 --- a/var/spack/repos/builtin/packages/yaml-cpp/package.py +++ b/var/spack/repos/builtin/packages/yaml-cpp/package.py @@ -28,7 +28,8 @@ class YamlCpp(CMakePackage): version("0.5.3", sha256="decc5beabb86e8ed9ebeb04358d5363a5c4f72d458b2c788cb2f3ac9c19467b2") version("0.3.0", sha256="ab8d0e07aa14f10224ed6682065569761f363ec44bc36fcdb2946f6d38fe5a89") - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") variant("shared", default=True, description="Build shared instead of static libraries") variant("pic", default=True, description="Build with position independent code") diff --git a/var/spack/repos/builtin/packages/yoda/package.py b/var/spack/repos/builtin/packages/yoda/package.py index a545be413a6d75..34bcda42d3c7fd 100644 --- a/var/spack/repos/builtin/packages/yoda/package.py +++ b/var/spack/repos/builtin/packages/yoda/package.py @@ -17,12 +17,10 @@ class Yoda(AutotoolsPackage): license("GPL-3.0-or-later") + version("2.0.2", sha256="31a41413641189814ff3c6bbb96ac5d17d2b68734fe327d06794cdbd3a540399") + version("2.0.1", sha256="ae5a78eaae5574a5159d4058839d0983c9923558bfc88fbce21d251fd925d260") version("2.0.0", sha256="680f43dabebb3167ce1c5dee72d1c2c285c3190751245aa51e3260a005a99575") - version( - "1.9.10", - sha256="0a708ee9d704945d3387cc437b15ffddf382c70fe5bab39ed2bdbf83c2c28c6f", - preferred=True, - ) + version("1.9.10", sha256="0a708ee9d704945d3387cc437b15ffddf382c70fe5bab39ed2bdbf83c2c28c6f") version("1.9.9", sha256="ebcad55369a1cedcee3a2de059407c851652ba44495113f5c09d8c2e57f516aa") version("1.9.8", sha256="7bc3062468abba50aff3ecb8b22ce677196036009890688ef4533aaa7f92e6e4") version("1.9.7", sha256="8d07bb04dcb79364858718a18203452d8d9fa00029fa94239eafa8529032b8ff") diff --git a/var/spack/repos/builtin/packages/yosys/package.py b/var/spack/repos/builtin/packages/yosys/package.py index 9678f16528d8e3..2da4aa007a11d4 100644 --- a/var/spack/repos/builtin/packages/yosys/package.py +++ b/var/spack/repos/builtin/packages/yosys/package.py @@ -20,7 +20,7 @@ class Yosys(MakefilePackage): """ homepage = "https://yosyshq.net/yosys" - url = "https://github.com/YosysHQ/yosys/archive/refs/tags/yosys-0.42.tar.gz" + url = "https://github.com/YosysHQ/yosys/archive/refs/tags/yosys-0.46.tar.gz" git = "https://github.com/YosysHQ/yosys.git" maintainers("davekeeshan") @@ -29,6 +29,11 @@ class Yosys(MakefilePackage): version("master", branch="master") + version("0.47", commit="647d61dd9212365a3cd44db219660b8f90b95cbd", submodules=True) + version("0.46", commit="e97731b9dda91fa5fa53ed87df7c34163ba59a41", submodules=True) + version("0.45", commit="9ed031ddd588442f22be13ce608547a5809b62f0", submodules=True) + version("0.44", commit="80ba43d26264738c93900129dc0aab7fab36c53f", submodules=True) + version("0.43", commit="ead4718e567aed2e552dcfe46294b132aa04c158", submodules=True) version("0.42", commit="9b6afcf3f83fea413b57c3790c25ba43b9914ce2", submodules=True) version("0.41", sha256="b0037d0a5864550a07a72ba81346e52a7d5f76b3027ef1d7c71b975d2c8bd2b2") version("0.40", sha256="c1d42ad90d587b587210b40cf3c5584e41e20f656e8630c33b6583322e8b764e") diff --git a/var/spack/repos/builtin/packages/yyjson/package.py b/var/spack/repos/builtin/packages/yyjson/package.py new file mode 100644 index 00000000000000..d15bd851171412 --- /dev/null +++ b/var/spack/repos/builtin/packages/yyjson/package.py @@ -0,0 +1,23 @@ +# Copyright 2013-2024 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) + +from spack.package import * + + +class Yyjson(CMakePackage): + """The fastest JSON library in C""" + + homepage = "https://ibireme.github.io/yyjson/doc/doxygen/html/" + url = "https://github.com/ibireme/yyjson/archive/refs/tags/0.10.0.tar.gz" + + license("MIT", checked_by="pranav-sivaraman") + + version("0.10.0", sha256="0d901cb2c45c5586e3f3a4245e58c2252d6b24bf4b402723f6179523d389b165") + + depends_on("c", type="build") + depends_on("cxx", type="build") # TODO: test only dependency, but does not work + + def cmake_args(self): + return [self.define("YYJSON_BUILD_TESTS", self.run_tests)] diff --git a/var/spack/repos/builtin/packages/zabbix/package.py b/var/spack/repos/builtin/packages/zabbix/package.py index aeb8bfd1d11037..a84097c1c7ee46 100644 --- a/var/spack/repos/builtin/packages/zabbix/package.py +++ b/var/spack/repos/builtin/packages/zabbix/package.py @@ -11,35 +11,59 @@ class Zabbix(AutotoolsPackage): such as networks, servers, VMs, applications and the cloud.""" homepage = "https://www.zabbix.com" - url = "https://github.com/zabbix/zabbix/archive/5.0.3.tar.gz" + url = "https://github.com/zabbix/zabbix/archive/refs/tags/5.0.3.tar.gz" - license("GPL-2.0-or-later") + license("AGPL-3.0-only", when="@7:", checked_by="wdconinc") + license("GPL-2.0-or-later", when="@:6", checked_by="wdconinc") - version("5.0.3", sha256="d579c5fa4e9065e8041396ace24d7132521ef5054ce30dfd9d151cbb7f0694ec") - version("4.0.24", sha256="c7e4962d745277d67797d90e124555ce27d198822a7e65c55d86aee45d3e93fc") - version("4.0.23", sha256="652143614f52411cad47db64e93bf3ba1cd547d6ca9591296223b5f0528b3b61") + version("7.0.4", sha256="73aa6b47bd4078587589b30f09671fb30c7743f5b57e81ea8e9bd5a7c5f221c7") + version("6.0.34", sha256="e60558911230d27ffad98850e414b46e318c9d41591a6ff65a255c0810cfcb8b") + version("5.0.44", sha256="f8ee86fd21f0f57e7fad68387271b995c1e5cc402d517cd7df5d5221fd6129fd") + with default_args(deprecated=True): + # https://nvd.nist.gov/vuln/detail/CVE-2023-32724 + version("5.0.3", sha256="d579c5fa4e9065e8041396ace24d7132521ef5054ce30dfd9d151cbb7f0694ec") + # https://nvd.nist.gov/vuln/detail/CVE-2019-17382 + version( + "4.0.24", sha256="c7e4962d745277d67797d90e124555ce27d198822a7e65c55d86aee45d3e93fc" + ) + version( + "4.0.23", sha256="652143614f52411cad47db64e93bf3ba1cd547d6ca9591296223b5f0528b3b61" + ) - depends_on("c", type="build") # generated - depends_on("cxx", type="build") # generated + depends_on("c", type="build") + depends_on("cxx", type="build") depends_on("autoconf", type="build") + depends_on("autoconf-archive", type="build") depends_on("automake", type="build") depends_on("libtool", type="build") depends_on("m4", type="build") - depends_on("mysql") + depends_on("pkgconfig", type="build") + depends_on("mysql-client") + # Older versions of mysql use openssl-1.x, causing build issues: + depends_on("mysql@8.0.35:", when="^[virtuals=mysql-client] mysql") depends_on("libevent") depends_on("pcre") depends_on("go") + def autoreconf(self, spec, prefix): + Executable("./bootstrap.sh")() + def configure_args(self): + mysql_prefix = self.spec["mysql-client"].prefix + if self.spec.satisfies("^[virtuals=mysql-client] mysql"): + mysql_config = mysql_prefix.bin.mysql_config + else: + mysql_config = mysql_prefix.bin.mariadb_config + args = [ "--enable-server", "--enable-proxy", "--enable-agent", "--enable-agent2", - "--with-mysql", - "--with-libevent=%s" % self.spec["libevent"].prefix, - "--with-libpcre=%s" % self.spec["pcre"].prefix, + f"--with-mysql={mysql_config}", + f"--with-libevent={self.spec['libevent'].prefix}", + f"--with-libpcre={self.spec['pcre'].prefix}", ] return args diff --git a/var/spack/repos/builtin/packages/zlib-ng/package.py b/var/spack/repos/builtin/packages/zlib-ng/package.py index 2daba38d7a9bf9..40de58f4e0be81 100644 --- a/var/spack/repos/builtin/packages/zlib-ng/package.py +++ b/var/spack/repos/builtin/packages/zlib-ng/package.py @@ -79,7 +79,7 @@ class AutotoolsBuilder(autotools.AutotoolsBuilder): def pretend_gcc(self): # All nice things (PIC flags, symbol versioning) that happen to the compilers that are # recognized as gcc (%gcc, %clang, %intel, %oneapi) we want for some other compilers too: - if self.spec.compiler.name in ["nvhpc"]: + if self.spec.satisfies("%nvhpc"): filter_file(r"^gcc=0$", "gcc=1", join_path(self.configure_directory, "configure")) def configure_args(self): diff --git a/var/spack/repos/builtin/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py index 32a40fb31dfd68..c579a8381300ac 100644 --- a/var/spack/repos/builtin/packages/zlib/package.py +++ b/var/spack/repos/builtin/packages/zlib/package.py @@ -115,7 +115,7 @@ def edit(self, pkg, spec, prefix): # script but patch the makefile for all the aforementioned compilers, given the # importance of the package, we try to be conservative for now and do the patching only # for compilers that will not produce a correct shared library otherwise. - if self.spec.compiler.name in ["nvhpc"]: + if self.spec.satisfies("%nvhpc"): if "~pic" in self.spec: # In this case, we should build the static library without PIC, therefore we # don't append the respective compiler flag to CFLAGS in the build environment. diff --git a/var/spack/repos/builtin/packages/zoltan/package.py b/var/spack/repos/builtin/packages/zoltan/package.py index 86121f412e65e6..f6e3b6d74644ef 100644 --- a/var/spack/repos/builtin/packages/zoltan/package.py +++ b/var/spack/repos/builtin/packages/zoltan/package.py @@ -102,8 +102,6 @@ def configure_args(self): config_incdirs = [] # PGI runtime libraries - if "%pgi" in spec: - config_ldflags.append("-pgf90libs") # NVHPC runtime libraries if "%nvhpc" in spec: config_ldflags.append("-fortranlibs") diff --git a/var/spack/repos/builtin/packages/zziplib/package.py b/var/spack/repos/builtin/packages/zziplib/package.py index d91c0cf2ce07b2..2a3b10a14d092b 100644 --- a/var/spack/repos/builtin/packages/zziplib/package.py +++ b/var/spack/repos/builtin/packages/zziplib/package.py @@ -4,7 +4,6 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import spack.build_systems.autotools -import spack.build_systems.cmake from spack.package import *