diff --git a/.gitattributes b/.gitattributes
index 6dee4b041c5..de5b2ca45dd 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,4 +1,3 @@
*.py diff=python
-*.lp linguist-language=Prolog
lib/spack/external/* linguist-vendored
-*.bat text eol=crlf
\ No newline at end of file
+*.bat text eol=crlf
diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml
index dae7034193b..7a2759033f3 100644
--- a/.github/workflows/bootstrap.yml
+++ b/.github/workflows/bootstrap.yml
@@ -26,7 +26,7 @@ jobs:
dnf install -y \
bzip2 curl file gcc-c++ gcc gcc-gfortran git gzip \
make patch unzip which xz python3 python3-devel tree \
- cmake bison bison-devel libstdc++-static
+ cmake bison bison-devel libstdc++-static gawk
- name: Setup OpenSUSE
if: ${{ matrix.image == 'opensuse/leap:latest' }}
run: |
diff --git a/.github/workflows/prechecks.yml b/.github/workflows/prechecks.yml
index 7da6a97fd3d..958f66e2fea 100644
--- a/.github/workflows/prechecks.yml
+++ b/.github/workflows/prechecks.yml
@@ -25,14 +25,16 @@ jobs:
with:
python-version: '3.13'
cache: 'pip'
+ cache-dependency-path: '.github/workflows/requirements/style/requirements.txt'
- name: Install Python Packages
run: |
- pip install --upgrade pip setuptools
pip install -r .github/workflows/requirements/style/requirements.txt
- name: vermin (Spack's Core)
- run: vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
+ run: |
+ vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
- name: vermin (Repositories)
- run: vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv var/spack/repos
+ run: |
+ vermin --backport importlib --backport argparse --violations --backport typing -t=3.6- -vvv var/spack/repos
# Run style checks on the files that have been changed
style:
@@ -40,23 +42,20 @@ jobs:
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
- fetch-depth: 0
+ fetch-depth: 2
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
with:
python-version: '3.13'
cache: 'pip'
+ cache-dependency-path: '.github/workflows/requirements/style/requirements.txt'
- name: Install Python packages
run: |
- pip install --upgrade pip setuptools
pip install -r .github/workflows/requirements/style/requirements.txt
- - name: Setup git configuration
- run: |
- # Need this for the git tests to succeed.
- git --version
- . .github/workflows/bin/setup_git.sh
- name: Run style tests
run: |
- share/spack/qa/run-style-tests
+ bin/spack style --base HEAD^1
+ bin/spack license verify
+ pylint -j $(nproc) --disable=all --enable=unspecified-encoding --ignore-paths=lib/spack/external lib
audit:
uses: ./.github/workflows/audit.yaml
@@ -103,21 +102,3 @@ jobs:
spack -d bootstrap now --dev
spack -d style -t black
spack unit-test -V
-
- # Further style checks from pylint
- pylint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
- with:
- fetch-depth: 0
- - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b
- with:
- python-version: '3.13'
- cache: 'pip'
- - name: Install Python packages
- run: |
- pip install --upgrade pip setuptools pylint
- - name: Pylint (Spack Core)
- run: |
- pylint -j 4 --disable=all --enable=unspecified-encoding --ignore-paths=lib/spack/external lib
diff --git a/.github/workflows/requirements/style/requirements.txt b/.github/workflows/requirements/style/requirements.txt
index 0b85db9a4b9..aae430c83eb 100644
--- a/.github/workflows/requirements/style/requirements.txt
+++ b/.github/workflows/requirements/style/requirements.txt
@@ -1,7 +1,8 @@
black==25.1.0
-clingo==5.7.1
+clingo==5.8.0
flake8==7.2.0
isort==6.0.1
mypy==1.15.0
-types-six==1.17.0.20250304
+types-six==1.17.0.20250403
vermin==1.6.0
+pylint==3.3.6
diff --git a/README.md b/README.md
index feff4b31053..c701cb12b72 100644
--- a/README.md
+++ b/README.md
@@ -46,18 +46,42 @@ See the
[Feature Overview](https://spack.readthedocs.io/en/latest/features.html)
for examples and highlights.
-To install spack and your first package, make sure you have Python & Git.
+Installation
+----------------
+
+To install spack, first make sure you have Python & Git.
Then:
- $ git clone -c feature.manyFiles=true --depth=2 https://github.com/spack/spack.git
- $ cd spack/bin
- $ ./spack install zlib
+```bash
+git clone -c feature.manyFiles=true --depth=2 https://github.com/spack/spack.git
+```
+
+
+What are manyFiles=true
and --depth=2
?
+
-> [!TIP]
> `-c feature.manyFiles=true` improves git's performance on repositories with 1,000+ files.
>
> `--depth=2` prunes the git history to reduce the size of the Spack installation.
+
+
+```bash
+# For bash/zsh/sh
+. spack/share/spack/setup-env.sh
+
+# For tcsh/csh
+source spack/share/spack/setup-env.csh
+
+# For fish
+. spack/share/spack/setup-env.fish
+```
+
+```bash
+# Now you're ready to install a package!
+spack install zlib-ng
+```
+
Documentation
----------------
diff --git a/etc/spack/defaults/config.yaml b/etc/spack/defaults/config.yaml
index 9cca52fd353..7d6f444b7e3 100644
--- a/etc/spack/defaults/config.yaml
+++ b/etc/spack/defaults/config.yaml
@@ -90,10 +90,9 @@ config:
misc_cache: $user_cache_path/cache
- # Timeout in seconds used for downloading sources etc. This only applies
- # to the connection phase and can be increased for slow connections or
- # servers. 0 means no timeout.
- connect_timeout: 10
+ # Abort downloads after this many seconds if not data is received.
+ # Setting this to 0 will disable the timeout.
+ connect_timeout: 30
# If this is false, tools like curl that use SSL will not verify
diff --git a/etc/spack/defaults/darwin/packages.yaml b/etc/spack/defaults/darwin/packages.yaml
index 4b0607bb3b3..32a3b940409 100644
--- a/etc/spack/defaults/darwin/packages.yaml
+++ b/etc/spack/defaults/darwin/packages.yaml
@@ -25,6 +25,8 @@ packages:
glu: [apple-glu]
unwind: [apple-libunwind]
uuid: [apple-libuuid]
+ apple-clang:
+ buildable: false
apple-gl:
buildable: false
externals:
diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml
index f23d55ffb9f..6cc366511b5 100644
--- a/etc/spack/defaults/packages.yaml
+++ b/etc/spack/defaults/packages.yaml
@@ -72,6 +72,8 @@ packages:
permissions:
read: world
write: user
+ cce:
+ buildable: false
cray-fftw:
buildable: false
cray-libsci:
@@ -86,13 +88,23 @@ packages:
buildable: false
essl:
buildable: false
+ fj:
+ buildable: false
fujitsu-mpi:
buildable: false
fujitsu-ssl2:
buildable: false
+ glibc:
+ buildable: false
hpcx-mpi:
buildable: false
+ iconv:
+ prefer: [libiconv]
mpt:
buildable: false
+ musl:
+ buildable: false
spectrum-mpi:
buildable: false
+ xl:
+ buildable: false
diff --git a/etc/spack/defaults/windows/packages.yaml b/etc/spack/defaults/windows/packages.yaml
index 7d478f767dc..f18ea28023f 100644
--- a/etc/spack/defaults/windows/packages.yaml
+++ b/etc/spack/defaults/windows/packages.yaml
@@ -23,3 +23,5 @@ packages:
mpi:
require:
- one_of: [msmpi]
+ msvc:
+ buildable: false
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst
index bf038478964..defafad5d82 100644
--- a/lib/spack/docs/basic_usage.rst
+++ b/lib/spack/docs/basic_usage.rst
@@ -1291,55 +1291,61 @@ based on site policies.
Variants
^^^^^^^^
-Variants are named options associated with a particular package. They are
-optional, as each package must provide default values for each variant it
-makes available. Variants can be specified using
-a flexible parameter syntax ``name=``. For example,
-``spack install mercury debug=True`` will install mercury built with debug
-flags. The names of particular variants available for a package depend on
+Variants are named options associated with a particular package and are
+typically used to enable or disable certain features at build time. They
+are optional, as each package must provide default values for each variant
+it makes available.
+
+The names of variants available for a particular package depend on
what was provided by the package author. ``spack info `` will
provide information on what build variants are available.
-For compatibility with earlier versions, variants which happen to be
-boolean in nature can be specified by a syntax that represents turning
-options on and off. For example, in the previous spec we could have
-supplied ``mercury +debug`` with the same effect of enabling the debug
-compile time option for the libelf package.
+There are different types of variants:
-Depending on the package a variant may have any default value. For
-``mercury`` here, ``debug`` is ``False`` by default, and we turned it on
-with ``debug=True`` or ``+debug``. If a variant is ``True`` by default
-you can turn it off by either adding ``-name`` or ``~name`` to the spec.
+1. Boolean variants. Typically used to enable or disable a feature at
+ compile time. For example, a package might have a ``debug`` variant that
+ can be explicitly enabled with ``+debug`` and disabled with ``~debug``.
+2. Single-valued variants. Often used to set defaults. For example, a package
+ might have a ``compression`` variant that determines the default
+ compression algorithm, which users could set to ``compression=gzip`` or
+ ``compression=zstd``.
+3. Multi-valued variants. A package might have a ``fabrics`` variant that
+ determines which network fabrics to support. Users could set this to
+ ``fabrics=verbs,ofi`` to enable both InfiniBand verbs and OpenFabrics
+ interfaces. The values are separated by commas.
-There are two syntaxes here because, depending on context, ``~`` and
-``-`` may mean different things. In most shells, the following will
-result in the shell performing home directory substitution:
+ The meaning of ``fabrics=verbs,ofi`` is to enable *at least* the specified
+ fabrics, but other fabrics may be enabled as well. If the intent is to
+ enable *only* the specified fabrics, then the ``fabrics:=verbs,ofi``
+ syntax should be used with the ``:=`` operator.
-.. code-block:: sh
+.. note::
- mpileaks ~debug # shell may try to substitute this!
- mpileaks~debug # use this instead
+ In certain shells, the the ``~`` character is expanded to the home
+ directory. To avoid these issues, avoid whitespace between the package
+ name and the variant:
-If there is a user called ``debug``, the ``~`` will be incorrectly
-expanded. In this situation, you would want to write ``libelf
--debug``. However, ``-`` can be ambiguous when included after a
-package name without spaces:
+ .. code-block:: sh
-.. code-block:: sh
+ mpileaks ~debug # shell may try to substitute this!
+ mpileaks~debug # use this instead
- mpileaks-debug # wrong!
- mpileaks -debug # right
+ Alternatively, you can use the ``-`` character to disable a variant,
+ but be aware that this requires a space between the package name and
+ the variant:
-Spack allows the ``-`` character to be part of package names, so the
-above will be interpreted as a request for the ``mpileaks-debug``
-package, not a request for ``mpileaks`` built without ``debug``
-options. In this scenario, you should write ``mpileaks~debug`` to
-avoid ambiguity.
+ .. code-block:: sh
-When spack normalizes specs, it prints them out with no spaces boolean
-variants using the backwards compatibility syntax and uses only ``~``
-for disabled boolean variants. The ``-`` and spaces on the command
-line are provided for convenience and legibility.
+ mpileaks-debug # wrong: refers to a package named "mpileaks-debug"
+ mpileaks -debug # right: refers to a package named mpileaks with debug disabled
+
+ As a last resort, ``debug=False`` can also be used to disable a boolean variant.
+
+
+
+"""""""""""""""""""""""""""""""""""
+Variant propagation to dependencies
+"""""""""""""""""""""""""""""""""""
Spack allows variants to propagate their value to the package's
dependency by using ``++``, ``--``, and ``~~`` for boolean variants.
diff --git a/lib/spack/docs/build_systems/makefilepackage.rst b/lib/spack/docs/build_systems/makefilepackage.rst
index b73112abcc3..d0363336583 100644
--- a/lib/spack/docs/build_systems/makefilepackage.rst
+++ b/lib/spack/docs/build_systems/makefilepackage.rst
@@ -91,7 +91,7 @@ there are any other variables you need to set, you can do this in the
.. code-block:: python
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", prefix)
env.set("BLASLIB", spec["blas"].libs.ld_flags)
diff --git a/lib/spack/docs/conf.py b/lib/spack/docs/conf.py
index e3f0df9a4ba..277ece75f5b 100644
--- a/lib/spack/docs/conf.py
+++ b/lib/spack/docs/conf.py
@@ -225,8 +225,10 @@ def setup(sphinx):
("py:class", "llnl.util.lang.T"),
("py:class", "llnl.util.lang.KT"),
("py:class", "llnl.util.lang.VT"),
+ ("py:class", "llnl.util.lang.ClassPropertyType"),
("py:obj", "llnl.util.lang.KT"),
("py:obj", "llnl.util.lang.VT"),
+ ("py:obj", "llnl.util.lang.ClassPropertyType"),
]
# The reST default role (used for this markup: `text`) to use for all documents.
diff --git a/lib/spack/docs/configuration.rst b/lib/spack/docs/configuration.rst
index 3f092291a92..d972f7284bf 100644
--- a/lib/spack/docs/configuration.rst
+++ b/lib/spack/docs/configuration.rst
@@ -46,6 +46,12 @@ Each Spack configuration file is nested under a top-level section
corresponding to its name. So, ``config.yaml`` starts with ``config:``,
``mirrors.yaml`` starts with ``mirrors:``, etc.
+.. tip::
+
+ Validation and autocompletion of Spack config files can be enabled in
+ your editor with the YAML language server. See `spack/schemas
+ `_ for more information.
+
.. _configuration-scopes:
--------------------
diff --git a/lib/spack/docs/env_vars_yaml.rst b/lib/spack/docs/env_vars_yaml.rst
new file mode 100644
index 00000000000..3fd2a881538
--- /dev/null
+++ b/lib/spack/docs/env_vars_yaml.rst
@@ -0,0 +1,34 @@
+.. Copyright Spack Project Developers. See COPYRIGHT file for details.
+
+ SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+.. _env-vars-yaml:
+
+=============================================
+Environment Variable Settings (env_vars.yaml)
+=============================================
+
+Spack allows you to include shell environment variable modifications
+for a spack environment by including an ``env_vars.yaml``. Environment
+varaibles can be modified by setting, unsetting, appending, and prepending
+variables in the shell environment.
+The changes to the shell environment will take effect when the spack
+environment is activated.
+
+for example,
+
+.. code-block:: yaml
+
+ env_vars:
+ set:
+ ENVAR_TO_SET_IN_ENV_LOAD: "FOO"
+ unset:
+ ENVAR_TO_UNSET_IN_ENV_LOAD:
+ prepend_path:
+ PATH_LIST: "path/to/prepend"
+ append_path:
+ PATH_LIST: "path/to/append"
+ remove_path:
+ PATH_LIST: "path/to/remove"
+
+
diff --git a/lib/spack/docs/environments.rst b/lib/spack/docs/environments.rst
index 4ef3b67b63f..27f9a772e23 100644
--- a/lib/spack/docs/environments.rst
+++ b/lib/spack/docs/environments.rst
@@ -1000,6 +1000,28 @@ For example, the following environment has three root packages:
This allows for a much-needed reduction in redundancy between packages
and constraints.
+-------------------------------
+Modifying Environment Variables
+-------------------------------
+
+Spack Environments can modify the active shell's environment variables when activated. The environment can be
+configured to set, unset, prepend, or append using ``env_vars`` configuration in the ``spack.yaml`` or through config scopes
+file:
+
+.. code-block:: yaml
+
+ spack:
+ env_vars:
+ set:
+ ENVAR_TO_SET_IN_ENV_LOAD: "FOO"
+ unset:
+ ENVAR_TO_UNSET_IN_ENV_LOAD:
+ prepend_path:
+ PATH_LIST: "path/to/prepend"
+ append_path:
+ PATH_LIST: "path/to/append"
+ remove_path:
+ PATH_LIST: "path/to/remove"
-----------------
Environment Views
diff --git a/lib/spack/docs/index.rst b/lib/spack/docs/index.rst
index 077b1e11cbd..07209b35861 100644
--- a/lib/spack/docs/index.rst
+++ b/lib/spack/docs/index.rst
@@ -75,6 +75,7 @@ or refer to the full manual below.
packages_yaml
build_settings
environments
+ env_vars_yaml
containers
mirrors
module_file_support
diff --git a/lib/spack/docs/module_file_support.rst b/lib/spack/docs/module_file_support.rst
index 7ed4cc5c3a5..cfc32802938 100644
--- a/lib/spack/docs/module_file_support.rst
+++ b/lib/spack/docs/module_file_support.rst
@@ -128,7 +128,7 @@ depend on the spec:
.. code-block:: python
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+foo"):
env.set("FOO", "bar")
@@ -142,7 +142,7 @@ For example, a simplified version of the ``python`` package could look like this
.. code-block:: python
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(self, env: EnvironmentModifications, dependent_spec: Spec) -> None:
if dependent_spec.package.extends(self.spec):
env.prepend_path("PYTHONPATH", dependent_spec.prefix.lib.python)
diff --git a/lib/spack/docs/requirements.txt b/lib/spack/docs/requirements.txt
index 7149d30efe6..dbeaffe3dcc 100644
--- a/lib/spack/docs/requirements.txt
+++ b/lib/spack/docs/requirements.txt
@@ -5,9 +5,9 @@ sphinx-rtd-theme==3.0.2
python-levenshtein==0.27.1
docutils==0.21.2
pygments==2.19.1
-urllib3==2.3.0
+urllib3==2.4.0
pytest==8.3.5
isort==6.0.1
black==25.1.0
-flake8==7.1.2
+flake8==7.2.0
mypy==1.11.1
diff --git a/lib/spack/external/__init__.py b/lib/spack/external/__init__.py
index 9a4b7b7f051..cd6d1842216 100644
--- a/lib/spack/external/__init__.py
+++ b/lib/spack/external/__init__.py
@@ -11,6 +11,7 @@
* Homepage: https://altgraph.readthedocs.io/en/latest/index.html
* Usage: dependency of macholib
* Version: 0.17.3
+* License: MIT
archspec
--------
@@ -18,6 +19,7 @@
* Homepage: https://pypi.python.org/pypi/archspec
* Usage: Labeling, comparison and detection of microarchitectures
* Version: 0.2.5 (commit 38ce485258ffc4fc6dd6688f8dc90cb269478c47)
+* License: Apache-2.0 or MIT
astunparse
----------------
@@ -25,6 +27,7 @@
* Homepage: https://github.com/simonpercivall/astunparse
* Usage: Unparsing Python ASTs for package hashes in Spack
* Version: 1.6.3 (plus modifications)
+* License: PSF-2.0
* Note: This is in ``spack.util.unparse`` because it's very heavily
modified, and we want to track coverage for it.
Specifically, we have modified this library to generate consistent unparsed ASTs
@@ -41,6 +44,7 @@
* Homepage: https://github.com/python-attrs/attrs
* Usage: Needed by jsonschema.
* Version: 22.1.0
+* License: MIT
ctest_log_parser
----------------
@@ -48,6 +52,7 @@
* Homepage: https://github.com/Kitware/CMake/blob/master/Source/CTest/cmCTestBuildHandler.cxx
* Usage: Functions to parse build logs and extract error messages.
* Version: Unversioned
+* License: BSD-3-Clause
* Note: This is a homemade port of Kitware's CTest build handler.
distro
@@ -56,6 +61,7 @@
* Homepage: https://pypi.python.org/pypi/distro
* Usage: Provides a more stable linux distribution detection.
* Version: 1.8.0
+* License: Apache-2.0
jinja2
------
@@ -63,6 +69,7 @@
* Homepage: https://pypi.python.org/pypi/Jinja2
* Usage: A modern and designer-friendly templating language for Python.
* Version: 3.0.3 (last version supporting Python 3.6)
+* License: BSD-3-Clause
jsonschema
----------
@@ -70,6 +77,7 @@
* Homepage: https://pypi.python.org/pypi/jsonschema
* Usage: An implementation of JSON Schema for Python.
* Version: 3.2.0 (last version before 2.7 and 3.6 support was dropped)
+* License: MIT
* Note: We don't include tests or benchmarks; just what Spack needs.
macholib
@@ -78,6 +86,7 @@
* Homepage: https://macholib.readthedocs.io/en/latest/index.html#
* Usage: Manipulation of Mach-o binaries for relocating macOS buildcaches on Linux
* Version: 1.16.2
+* License: MIT
markupsafe
----------
@@ -85,6 +94,7 @@
* Homepage: https://pypi.python.org/pypi/MarkupSafe
* Usage: Implements a XML/HTML/XHTML Markup safe string for Python.
* Version: 2.0.1 (last version supporting Python 3.6)
+* License: BSD-3-Clause
pyrsistent
----------
@@ -92,6 +102,7 @@
* Homepage: http://github.com/tobgu/pyrsistent/
* Usage: Needed by `jsonschema`
* Version: 0.18.0
+* License: MIT
ruamel.yaml
------
@@ -101,6 +112,7 @@
actively maintained and has more features, including round-tripping
comments read from config files.
* Version: 0.17.21
+* License: MIT
six
---
@@ -108,5 +120,6 @@
* Homepage: https://pypi.python.org/pypi/six
* Usage: Python 2 and 3 compatibility utilities.
* Version: 1.16.0
+* License: MIT
"""
diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py
index 4fa86914094..a70babff496 100644
--- a/lib/spack/llnl/util/filesystem.py
+++ b/lib/spack/llnl/util/filesystem.py
@@ -764,7 +764,7 @@ def copy_tree(
files = glob.glob(src)
if not files:
- raise OSError("No such file or directory: '{0}'".format(src))
+ raise OSError("No such file or directory: '{0}'".format(src), errno.ENOENT)
# For Windows hard-links and junctions, the source path must exist to make a symlink. Add
# all symlinks to this list while traversing the tree, then when finished, make all
diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py
index 05100e087be..ac44fe74937 100644
--- a/lib/spack/llnl/util/lang.py
+++ b/lib/spack/llnl/util/lang.py
@@ -15,7 +15,19 @@
import typing
import warnings
from datetime import datetime, timedelta
-from typing import Callable, Dict, Iterable, List, Mapping, Optional, Tuple, TypeVar
+from typing import (
+ Any,
+ Callable,
+ Dict,
+ Generic,
+ Iterable,
+ List,
+ Mapping,
+ Optional,
+ Tuple,
+ TypeVar,
+ Union,
+)
# Ignore emacs backups when listing modules
ignore_modules = r"^\.#|~$"
@@ -1047,19 +1059,28 @@ def __exit__(self, exc_type, exc_value, tb):
return True
-class classproperty:
+ClassPropertyType = TypeVar("ClassPropertyType")
+
+
+class classproperty(Generic[ClassPropertyType]):
"""Non-data descriptor to evaluate a class-level property. The function that performs
- the evaluation is injected at creation time and take an instance (could be None) and
- an owner (i.e. the class that originated the instance)
+ the evaluation is injected at creation time and takes an owner (i.e., the class that
+ originated the instance).
"""
- def __init__(self, callback):
+ def __init__(self, callback: Callable[[Any], ClassPropertyType]) -> None:
self.callback = callback
- def __get__(self, instance, owner):
+ def __get__(self, instance, owner) -> ClassPropertyType:
return self.callback(owner)
+#: A type alias that represents either a classproperty descriptor or a constant value of the same
+#: type. This allows derived classes to override a computed class-level property with a constant
+#: value while retaining type compatibility.
+ClassProperty = Union[ClassPropertyType, classproperty[ClassPropertyType]]
+
+
class DeprecatedProperty:
"""Data descriptor to error or warn when a deprecated property is accessed.
diff --git a/lib/spack/spack/aliases.py b/lib/spack/spack/aliases.py
index c1bb644b303..ad6f6f579ff 100644
--- a/lib/spack/spack/aliases.py
+++ b/lib/spack/spack/aliases.py
@@ -7,7 +7,7 @@
"llvm": "clang",
"intel-oneapi-compilers": "oneapi",
"llvm-amdgpu": "rocmcc",
- "intel-oneapi-compiler-classic": "intel",
+ "intel-oneapi-compilers-classic": "intel",
"acfl": "arm",
}
@@ -15,6 +15,6 @@
"clang": "llvm",
"oneapi": "intel-oneapi-compilers",
"rocmcc": "llvm-amdgpu",
- "intel": "intel-oneapi-compiler-classic",
+ "intel": "intel-oneapi-compilers-classic",
"arm": "acfl",
}
diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index fe142a213dc..36f74349c96 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -36,9 +36,11 @@
import multiprocessing
import os
import re
+import signal
import sys
import traceback
import types
+import warnings
from collections import defaultdict
from enum import Flag, auto
from itertools import chain
@@ -572,12 +574,10 @@ def set_package_py_globals(pkg, context: Context = Context.BUILD):
module.make = DeprecatedExecutable(pkg.name, "make", "gmake")
module.gmake = DeprecatedExecutable(pkg.name, "gmake", "gmake")
module.ninja = DeprecatedExecutable(pkg.name, "ninja", "ninja")
- # TODO: johnwparent: add package or builder support to define these build tools
- # for now there is no entrypoint for builders to define these on their
- # own
+
if sys.platform == "win32":
- module.nmake = Executable("nmake")
- module.msbuild = Executable("msbuild")
+ module.nmake = DeprecatedExecutable(pkg.name, "nmake", "msvc")
+ module.msbuild = DeprecatedExecutable(pkg.name, "msbuild", "msvc")
# analog to configure for win32
module.cscript = Executable("cscript")
@@ -1189,11 +1189,9 @@ def _setup_pkg_and_run(
if isinstance(e, (spack.multimethod.NoSuchMethodError, AttributeError)):
process = "test the installation" if context == "test" else "build from sources"
error_msg = (
- "The '{}' package cannot find an attribute while trying to {}. "
- "This might be due to a change in Spack's package format "
- "to support multiple build-systems for a single package. You can fix this "
- "by updating the {} recipe, and you can also report the issue as a bug. "
- "More information at https://spack.readthedocs.io/en/latest/packaging_guide.html#installation-procedure"
+ "The '{}' package cannot find an attribute while trying to {}. You can fix this "
+ "by updating the {} recipe, and you can also report the issue as a build-error or "
+ "a bug at https://github.com/spack/spack/issues"
).format(pkg.name, process, context)
error_msg = colorize("@*R{{{}}}".format(error_msg))
error_msg = "{}\n\n{}".format(str(e), error_msg)
@@ -1218,15 +1216,45 @@ def _setup_pkg_and_run(
input_pipe.close()
-def start_build_process(pkg, function, kwargs):
+class BuildProcess:
+ def __init__(self, *, target, args) -> None:
+ self.p = multiprocessing.Process(target=target, args=args)
+
+ def start(self) -> None:
+ self.p.start()
+
+ def is_alive(self) -> bool:
+ return self.p.is_alive()
+
+ def join(self, *, timeout: Optional[int] = None):
+ self.p.join(timeout=timeout)
+
+ def terminate(self):
+ # Opportunity for graceful termination
+ self.p.terminate()
+ self.p.join(timeout=1)
+
+ # If the process didn't gracefully terminate, forcefully kill
+ if self.p.is_alive():
+ # TODO (python 3.6 removal): use self.p.kill() instead, consider removing this class
+ assert isinstance(self.p.pid, int), f"unexpected value for PID: {self.p.pid}"
+ os.kill(self.p.pid, signal.SIGKILL)
+ self.p.join()
+
+ @property
+ def exitcode(self):
+ return self.p.exitcode
+
+
+def start_build_process(pkg, function, kwargs, *, timeout: Optional[int] = None):
"""Create a child process to do part of a spack build.
Args:
pkg (spack.package_base.PackageBase): package whose environment we should set up the
child process for.
- function (typing.Callable): argless function to run in the child
- process.
+ function (typing.Callable): argless function to run in the child process.
+ timeout: maximum time allowed to finish the execution of function
Usage::
@@ -1254,14 +1282,14 @@ def child_fun():
# Forward sys.stdin when appropriate, to allow toggling verbosity
if sys.platform != "win32" and sys.stdin.isatty() and hasattr(sys.stdin, "fileno"):
input_fd = Connection(os.dup(sys.stdin.fileno()))
- mflags = os.environ.get("MAKEFLAGS", False)
- if mflags:
+ mflags = os.environ.get("MAKEFLAGS")
+ if mflags is not None:
m = re.search(r"--jobserver-[^=]*=(\d),(\d)", mflags)
if m:
jobserver_fd1 = Connection(int(m.group(1)))
jobserver_fd2 = Connection(int(m.group(2)))
- p = multiprocessing.Process(
+ p = BuildProcess(
target=_setup_pkg_and_run,
args=(
serialized_pkg,
@@ -1295,14 +1323,17 @@ def exitcode_msg(p):
typ = "exit" if p.exitcode >= 0 else "signal"
return f"{typ} {abs(p.exitcode)}"
+ p.join(timeout=timeout)
+ if p.is_alive():
+ warnings.warn(f"Terminating process, since the timeout of {timeout}s was exceeded")
+ p.terminate()
+ p.join()
+
try:
child_result = read_pipe.recv()
except EOFError:
- p.join()
raise InstallError(f"The process has stopped unexpectedly ({exitcode_msg(p)})")
- p.join()
-
# If returns a StopPhase, raise it
if isinstance(child_result, spack.error.StopPhase):
# do not print
diff --git a/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py
index ebac028d93d..b98f889c9d4 100644
--- a/lib/spack/spack/build_systems/autotools.py
+++ b/lib/spack/spack/build_systems/autotools.py
@@ -16,6 +16,7 @@
import spack.package_base
import spack.phase_callbacks
import spack.spec
+import spack.util.environment
import spack.util.prefix
from spack.directives import build_system, conflicts, depends_on
from spack.multimethod import when
@@ -846,7 +847,9 @@ def _remove_libtool_archives(self) -> None:
with open(self._removed_la_files_log, mode="w", encoding="utf-8") as f:
f.write("\n".join(libtool_files))
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
if self.spec.platform == "darwin" and macos_version() >= Version("11"):
# Many configure files rely on matching '10.*' for macOS version
# detection and fail to add flags if it shows as version 11.
diff --git a/lib/spack/spack/build_systems/cargo.py b/lib/spack/spack/build_systems/cargo.py
index b94d1e87b25..5cfed66063b 100644
--- a/lib/spack/spack/build_systems/cargo.py
+++ b/lib/spack/spack/build_systems/cargo.py
@@ -8,6 +8,7 @@
import spack.package_base
import spack.phase_callbacks
import spack.spec
+import spack.util.environment
import spack.util.prefix
from spack.directives import build_system, depends_on
from spack.multimethod import when
@@ -86,7 +87,9 @@ def check_args(self):
"""Argument for ``cargo test`` during check phase"""
return []
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
env.set("CARGO_HOME", self.stage.path)
def build(
diff --git a/lib/spack/spack/build_systems/compiler.py b/lib/spack/spack/build_systems/compiler.py
index 783027c8f2f..8a3bc033bc1 100644
--- a/lib/spack/spack/build_systems/compiler.py
+++ b/lib/spack/spack/build_systems/compiler.py
@@ -47,6 +47,11 @@ class CompilerPackage(spack.package_base.PackageBase):
#: Relative path to compiler wrappers
compiler_wrapper_link_paths: Dict[str, str] = {}
+ #: Optimization flags
+ opt_flags: Sequence[str] = []
+ #: Flags for generating debug information
+ debug_flags: Sequence[str] = []
+
def __init__(self, spec: "spack.spec.Spec"):
super().__init__(spec)
msg = f"Supported languages for {spec} are not a subset of possible supported languages"
diff --git a/lib/spack/spack/build_systems/go.py b/lib/spack/spack/build_systems/go.py
index 981b548d4f8..1c510679199 100644
--- a/lib/spack/spack/build_systems/go.py
+++ b/lib/spack/spack/build_systems/go.py
@@ -8,6 +8,7 @@
import spack.package_base
import spack.phase_callbacks
import spack.spec
+import spack.util.environment
import spack.util.prefix
from spack.directives import build_system, depends_on
from spack.multimethod import when
@@ -68,7 +69,9 @@ class GoBuilder(BuilderWithDefaults):
#: Callback names for install-time test
install_time_test_callbacks = ["check"]
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
env.set("GO111MODULE", "on")
env.set("GOTOOLCHAIN", "local")
env.set("GOPATH", fs.join_path(self.pkg.stage.path, "go"))
diff --git a/lib/spack/spack/build_systems/intel.py b/lib/spack/spack/build_systems/intel.py
index 2d012d983e6..9d097b82193 100644
--- a/lib/spack/spack/build_systems/intel.py
+++ b/lib/spack/spack/build_systems/intel.py
@@ -23,6 +23,7 @@
import spack.error
import spack.phase_callbacks
+import spack.spec
from spack.build_environment import dso_suffix
from spack.error import InstallError
from spack.util.environment import EnvironmentModifications
@@ -1016,7 +1017,7 @@ def libs(self):
debug_print(result)
return result
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Adds environment variables to the generated module file.
These environment variables come from running:
@@ -1049,7 +1050,9 @@ def setup_run_environment(self, env):
env.set("F77", self.prefix.bin.ifort)
env.set("F90", self.prefix.bin.ifort)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: spack.spec.Spec
+ ) -> None:
# NB: This function is overwritten by 'mpi' provider packages:
#
# var/spack/repos/builtin/packages/intel-mpi/package.py
@@ -1061,7 +1064,12 @@ def setup_dependent_build_environment(self, env, dependent_spec):
# Handle everything in a callback version.
self._setup_dependent_env_callback(env, dependent_spec)
- def _setup_dependent_env_callback(self, env, dependent_spec, compilers_of_client={}):
+ def _setup_dependent_env_callback(
+ self,
+ env: EnvironmentModifications,
+ dependent_spec: spack.spec.Spec,
+ compilers_of_client={},
+ ) -> None:
# Expected to be called from a client's
# setup_dependent_build_environment(),
# with args extended to convey the client's compilers as needed.
diff --git a/lib/spack/spack/build_systems/lua.py b/lib/spack/spack/build_systems/lua.py
index e8b1698f297..e9d05b2c75c 100644
--- a/lib/spack/spack/build_systems/lua.py
+++ b/lib/spack/spack/build_systems/lua.py
@@ -8,6 +8,7 @@
import spack.builder
import spack.package_base
import spack.spec
+import spack.util.environment
import spack.util.executable
import spack.util.prefix
from spack.directives import build_system, depends_on, extends
@@ -114,5 +115,7 @@ def install(
def _luarocks_config_path(self):
return os.path.join(self.pkg.stage.source_path, "spack_luarocks.lua")
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
env.set("LUAROCKS_CONFIG", self._luarocks_config_path())
diff --git a/lib/spack/spack/build_systems/octave.py b/lib/spack/spack/build_systems/octave.py
index 9e5eabe5dec..79e9bfd5708 100644
--- a/lib/spack/spack/build_systems/octave.py
+++ b/lib/spack/spack/build_systems/octave.py
@@ -4,6 +4,7 @@
import spack.builder
import spack.package_base
import spack.spec
+import spack.util.environment
import spack.util.prefix
from spack.directives import build_system, extends
from spack.multimethod import when
@@ -57,7 +58,9 @@ def install(
"pkg prefix %s; pkg install %s" % (prefix, self.pkg.stage.archive_file),
)
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
# octave does not like those environment variables to be set:
env.unset("CC")
env.unset("CXX")
diff --git a/lib/spack/spack/build_systems/oneapi.py b/lib/spack/spack/build_systems/oneapi.py
index d107a395e27..77e0a6e5730 100644
--- a/lib/spack/spack/build_systems/oneapi.py
+++ b/lib/spack/spack/build_systems/oneapi.py
@@ -106,8 +106,8 @@ def install_component(self, installer_path):
bash = Executable("bash")
- # Installer writes files in ~/intel set HOME so it goes to prefix
- bash.add_default_env("HOME", self.prefix)
+ # Installer writes files in ~/intel set HOME so it goes to staging directory
+ bash.add_default_env("HOME", join_path(self.stage.path, "home"))
# Installer checks $XDG_RUNTIME_DIR/.bootstrapper_lock_file as well
bash.add_default_env("XDG_RUNTIME_DIR", join_path(self.stage.path, "runtime"))
@@ -132,7 +132,7 @@ def install_component(self, installer_path):
if not isdir(install_dir):
raise RuntimeError("install failed to directory: {0}".format(install_dir))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Adds environment variables to the generated module file.
These environment variables come from running:
diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py
index eff00b6e8a6..a88927a8a72 100644
--- a/lib/spack/spack/build_systems/python.py
+++ b/lib/spack/spack/build_systems/python.py
@@ -13,9 +13,9 @@
import archspec
import llnl.util.filesystem as fs
-import llnl.util.lang as lang
import llnl.util.tty as tty
from llnl.util.filesystem import HeaderList, LibraryList, join_path
+from llnl.util.lang import ClassProperty, classproperty, match_predicate
import spack.builder
import spack.config
@@ -139,7 +139,7 @@ def view_file_conflicts(self, view, merge_map):
ext_map = view.extensions_layout.extension_map(self.extendee_spec)
namespaces = set(x.package.py_namespace for x in ext_map.values())
namespace_re = r"site-packages/{0}/__init__.py".format(self.py_namespace)
- find_namespace = lang.match_predicate(namespace_re)
+ find_namespace = match_predicate(namespace_re)
if self.py_namespace in namespaces:
conflicts = list(x for x in conflicts if not find_namespace(x))
@@ -206,7 +206,7 @@ def remove_files_from_view(self, view, merge_map):
spec.package.py_namespace for name, spec in ext_map.items() if name != self.name
)
if self.py_namespace in remaining_namespaces:
- namespace_init = lang.match_predicate(
+ namespace_init = match_predicate(
r"site-packages/{0}/__init__.py".format(self.py_namespace)
)
ignore_namespace = True
@@ -324,6 +324,27 @@ def get_external_python_for_prefix(self):
raise StopIteration("No external python could be detected for %s to depend on" % self.spec)
+def _homepage(cls: "PythonPackage") -> Optional[str]:
+ """Get the homepage from PyPI if available."""
+ if cls.pypi:
+ name = cls.pypi.split("/")[0]
+ return f"https://pypi.org/project/{name}/"
+ return None
+
+
+def _url(cls: "PythonPackage") -> Optional[str]:
+ if cls.pypi:
+ return f"https://files.pythonhosted.org/packages/source/{cls.pypi[0]}/{cls.pypi}"
+ return None
+
+
+def _list_url(cls: "PythonPackage") -> Optional[str]:
+ if cls.pypi:
+ name = cls.pypi.split("/")[0]
+ return f"https://pypi.org/simple/{name}/"
+ return None
+
+
class PythonPackage(PythonExtension):
"""Specialized class for packages that are built using pip."""
@@ -351,25 +372,9 @@ class PythonPackage(PythonExtension):
py_namespace: Optional[str] = None
- @lang.classproperty
- def homepage(cls) -> Optional[str]: # type: ignore[override]
- if cls.pypi:
- name = cls.pypi.split("/")[0]
- return f"https://pypi.org/project/{name}/"
- return None
-
- @lang.classproperty
- def url(cls) -> Optional[str]:
- if cls.pypi:
- return f"https://files.pythonhosted.org/packages/source/{cls.pypi[0]}/{cls.pypi}"
- return None
-
- @lang.classproperty
- def list_url(cls) -> Optional[str]: # type: ignore[override]
- if cls.pypi:
- name = cls.pypi.split("/")[0]
- return f"https://pypi.org/simple/{name}/"
- return None
+ homepage: ClassProperty[Optional[str]] = classproperty(_homepage)
+ url: ClassProperty[Optional[str]] = classproperty(_url)
+ list_url: ClassProperty[Optional[str]] = classproperty(_list_url)
@property
def python_spec(self) -> Spec:
diff --git a/lib/spack/spack/build_systems/r.py b/lib/spack/spack/build_systems/r.py
index 1779acc1e05..87b1e104aeb 100644
--- a/lib/spack/spack/build_systems/r.py
+++ b/lib/spack/spack/build_systems/r.py
@@ -3,8 +3,8 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from typing import Optional, Tuple
-import llnl.util.lang as lang
from llnl.util.filesystem import mkdirp
+from llnl.util.lang import ClassProperty, classproperty
from spack.directives import extends
@@ -54,6 +54,32 @@ def install(self, pkg, spec, prefix):
pkg.module.R(*args)
+def _homepage(cls: "RPackage") -> Optional[str]:
+ if cls.cran:
+ return f"https://cloud.r-project.org/package={cls.cran}"
+ elif cls.bioc:
+ return f"https://bioconductor.org/packages/{cls.bioc}"
+ return None
+
+
+def _url(cls: "RPackage") -> Optional[str]:
+ if cls.cran:
+ return f"https://cloud.r-project.org/src/contrib/{cls.cran}_{str(list(cls.versions)[0])}.tar.gz"
+ return None
+
+
+def _list_url(cls: "RPackage") -> Optional[str]:
+ if cls.cran:
+ return f"https://cloud.r-project.org/src/contrib/Archive/{cls.cran}/"
+ return None
+
+
+def _git(cls: "RPackage") -> Optional[str]:
+ if cls.bioc:
+ return f"https://git.bioconductor.org/packages/{cls.bioc}"
+ return None
+
+
class RPackage(Package):
"""Specialized class for packages that are built using R.
@@ -77,24 +103,7 @@ class RPackage(Package):
extends("r")
- @lang.classproperty
- def homepage(cls):
- if cls.cran:
- return f"https://cloud.r-project.org/package={cls.cran}"
- elif cls.bioc:
- return f"https://bioconductor.org/packages/{cls.bioc}"
-
- @lang.classproperty
- def url(cls):
- if cls.cran:
- return f"https://cloud.r-project.org/src/contrib/{cls.cran}_{str(list(cls.versions)[0])}.tar.gz"
-
- @lang.classproperty
- def list_url(cls):
- if cls.cran:
- return f"https://cloud.r-project.org/src/contrib/Archive/{cls.cran}/"
-
- @lang.classproperty
- def git(cls):
- if cls.bioc:
- return f"https://git.bioconductor.org/packages/{cls.bioc}"
+ homepage: ClassProperty[Optional[str]] = classproperty(_homepage)
+ url: ClassProperty[Optional[str]] = classproperty(_url)
+ list_url: ClassProperty[Optional[str]] = classproperty(_list_url)
+ git: ClassProperty[Optional[str]] = classproperty(_git)
diff --git a/lib/spack/spack/build_systems/racket.py b/lib/spack/spack/build_systems/racket.py
index bd3988073e2..5ea5c9444d3 100644
--- a/lib/spack/spack/build_systems/racket.py
+++ b/lib/spack/spack/build_systems/racket.py
@@ -5,8 +5,8 @@
from typing import Optional, Tuple
import llnl.util.filesystem as fs
-import llnl.util.lang as lang
import llnl.util.tty as tty
+from llnl.util.lang import ClassProperty, classproperty
import spack.builder
import spack.spec
@@ -19,6 +19,12 @@
from spack.util.executable import Executable, ProcessError
+def _homepage(cls: "RacketPackage") -> Optional[str]:
+ if cls.racket_name:
+ return f"https://pkgs.racket-lang.org/package/{cls.racket_name}"
+ return None
+
+
class RacketPackage(PackageBase):
"""Specialized class for packages that are built using Racket's
`raco pkg install` and `raco setup` commands.
@@ -37,13 +43,7 @@ class RacketPackage(PackageBase):
extends("racket", when="build_system=racket")
racket_name: Optional[str] = None
- parallel = True
-
- @lang.classproperty
- def homepage(cls):
- if cls.racket_name:
- return "https://pkgs.racket-lang.org/package/{0}".format(cls.racket_name)
- return None
+ homepage: ClassProperty[Optional[str]] = classproperty(_homepage)
@spack.builder.builder("racket")
diff --git a/lib/spack/spack/builder.py b/lib/spack/spack/builder.py
index 43f9423038b..1ff2f777c0a 100644
--- a/lib/spack/spack/builder.py
+++ b/lib/spack/spack/builder.py
@@ -185,10 +185,16 @@ def __init__(self, pkg):
# These two methods don't follow the (self, spec, prefix) signature of phases nor
# the (self) signature of methods, so they are added explicitly to avoid using a
# catch-all (*args, **kwargs)
- def setup_build_environment(self, env):
+ def setup_build_environment(
+ self, env: spack.util.environment.EnvironmentModifications
+ ) -> None:
return self.pkg_with_dispatcher.setup_build_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self,
+ env: spack.util.environment.EnvironmentModifications,
+ dependent_spec: spack.spec.Spec,
+ ) -> None:
return self.pkg_with_dispatcher.setup_dependent_build_environment(env, dependent_spec)
return Adapter(pkg)
@@ -402,7 +408,7 @@ def fixup_install(self):
# do something after the package is installed
pass
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MY_ENV_VAR", "my_value")
class CMakeBuilder(cmake.CMakeBuilder, AnyBuilder):
diff --git a/lib/spack/spack/ci/__init__.py b/lib/spack/spack/ci/__init__.py
index 244b3a527f5..14be3bf4ada 100644
--- a/lib/spack/spack/ci/__init__.py
+++ b/lib/spack/spack/ci/__init__.py
@@ -14,7 +14,7 @@
import tempfile
import zipfile
from collections import namedtuple
-from typing import Callable, Dict, List, Set, Union
+from typing import Callable, Dict, List, Optional, Set, Union
from urllib.request import Request
import llnl.path
@@ -24,6 +24,7 @@
import spack
import spack.binary_distribution as bindist
+import spack.builder
import spack.config as cfg
import spack.environment as ev
import spack.error
@@ -613,32 +614,40 @@ def copy_stage_logs_to_artifacts(job_spec: spack.spec.Spec, job_log_dir: str) ->
job_spec, and attempts to copy the files into the directory given
by job_log_dir.
- Args:
+ Parameters:
job_spec: spec associated with spack install log
job_log_dir: path into which build log should be copied
"""
tty.debug(f"job spec: {job_spec}")
-
- try:
- package_metadata_root = pathlib.Path(spack.store.STORE.layout.metadata_path(job_spec))
- except spack.error.SpackError as e:
- tty.error(f"Cannot copy logs: {str(e)}")
+ if not job_spec.concrete:
+ tty.warn("Cannot copy artifacts for non-concrete specs")
return
- # Get the package's archived files
- archive_files = []
- archive_root = package_metadata_root / "archived-files"
- if archive_root.is_dir():
- archive_files = [f for f in archive_root.rglob("*") if f.is_file()]
- else:
- msg = "Cannot copy package archived files: archived-files must be a directory"
- tty.warn(msg)
+ package_metadata_root = pathlib.Path(spack.store.STORE.layout.metadata_path(job_spec))
+ if not os.path.isdir(package_metadata_root):
+ # Fallback to using the stage directory
+ job_pkg = job_spec.package
+ package_metadata_root = pathlib.Path(job_pkg.stage.path)
+ archive_files = spack.builder.create(job_pkg).archive_files
+ tty.warn("Package not installed, falling back to use stage dir")
+ tty.debug(f"stage dir: {package_metadata_root}")
+ else:
+ # Get the package's archived files
+ archive_files = []
+ archive_root = package_metadata_root / "archived-files"
+ if os.path.isdir(archive_root):
+ archive_files = [str(f) for f in archive_root.rglob("*") if os.path.isfile(f)]
+ else:
+ tty.debug(f"No archived files detected at {archive_root}")
+
+ # Try zipped and unzipped versions of the build log
build_log_zipped = package_metadata_root / "spack-build-out.txt.gz"
+ build_log = package_metadata_root / "spack-build-out.txt"
build_env_mods = package_metadata_root / "spack-build-env.txt"
- for f in [build_log_zipped, build_env_mods, *archive_files]:
- copy_files_to_artifacts(str(f), job_log_dir)
+ for f in [build_log_zipped, build_log, build_env_mods, *archive_files]:
+ copy_files_to_artifacts(str(f), job_log_dir, compress_artifacts=True)
def copy_test_logs_to_artifacts(test_stage, job_test_dir):
@@ -651,11 +660,12 @@ def copy_test_logs_to_artifacts(test_stage, job_test_dir):
"""
tty.debug(f"test stage: {test_stage}")
if not os.path.exists(test_stage):
- msg = f"Cannot copy test logs: job test stage ({test_stage}) does not exist"
- tty.error(msg)
+ tty.error(f"Cannot copy test logs: job test stage ({test_stage}) does not exist")
return
- copy_files_to_artifacts(os.path.join(test_stage, "*", "*.txt"), job_test_dir)
+ copy_files_to_artifacts(
+ os.path.join(test_stage, "*", "*.txt"), job_test_dir, compress_artifacts=True
+ )
def download_and_extract_artifacts(url, work_dir) -> str:
@@ -1294,35 +1304,34 @@ def display_broken_spec_messages(base_url, hashes):
tty.msg(msg)
-def run_standalone_tests(**kwargs):
+def run_standalone_tests(
+ *,
+ cdash: Optional[CDashHandler] = None,
+ fail_fast: bool = False,
+ log_file: Optional[str] = None,
+ job_spec: Optional[spack.spec.Spec] = None,
+ repro_dir: Optional[str] = None,
+ timeout: Optional[int] = None,
+):
"""Run stand-alone tests on the current spec.
- Arguments:
- kwargs (dict): dictionary of arguments used to run the tests
-
- List of recognized keys:
-
- * "cdash" (CDashHandler): (optional) cdash handler instance
- * "fail_fast" (bool): (optional) terminate tests after the first failure
- * "log_file" (str): (optional) test log file name if NOT CDash reporting
- * "job_spec" (Spec): spec that was built
- * "repro_dir" (str): reproduction directory
+ Args:
+ cdash: cdash handler instance
+ fail_fast: terminate tests after the first failure
+ log_file: test log file name if NOT CDash reporting
+ job_spec: spec that was built
+ repro_dir: reproduction directory
+ timeout: maximum time (in seconds) that tests are allowed to run
"""
- cdash = kwargs.get("cdash")
- fail_fast = kwargs.get("fail_fast")
- log_file = kwargs.get("log_file")
-
if cdash and log_file:
tty.msg(f"The test log file {log_file} option is ignored with CDash reporting")
log_file = None
# Error out but do NOT terminate if there are missing required arguments.
- job_spec = kwargs.get("job_spec")
if not job_spec:
tty.error("Job spec is required to run stand-alone tests")
return
- repro_dir = kwargs.get("repro_dir")
if not repro_dir:
tty.error("Reproduction directory is required for stand-alone tests")
return
@@ -1331,6 +1340,9 @@ def run_standalone_tests(**kwargs):
if fail_fast:
test_args.append("--fail-fast")
+ if timeout is not None:
+ test_args.extend(["--timeout", str(timeout)])
+
if cdash:
test_args.extend(cdash.args())
else:
diff --git a/lib/spack/spack/ci/common.py b/lib/spack/spack/ci/common.py
index 68e0d91c17e..78caafcb2ab 100644
--- a/lib/spack/spack/ci/common.py
+++ b/lib/spack/spack/ci/common.py
@@ -2,9 +2,13 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import copy
+import errno
+import glob
+import gzip
import json
import os
import re
+import shutil
import sys
import time
from collections import deque
@@ -25,6 +29,7 @@
import spack.mirrors.mirror
import spack.schema
import spack.spec
+import spack.util.compression as compression
import spack.util.spack_yaml as syaml
import spack.util.url as url_util
import spack.util.web as web_util
@@ -40,22 +45,67 @@
_urlopen = web_util.urlopen
-def copy_files_to_artifacts(src, artifacts_dir):
+def copy_gzipped(glob_or_path: str, dest: str) -> None:
+ """Copy all of the files in the source glob/path to the destination.
+
+ Args:
+ glob_or_path: path to file to test
+ dest: destination path to copy to
+ """
+
+ files = glob.glob(glob_or_path)
+ if not files:
+ raise OSError("No such file or directory: '{0}'".format(glob_or_path), errno.ENOENT)
+ if len(files) > 1 and not os.path.isdir(dest):
+ raise ValueError(
+ "'{0}' matches multiple files but '{1}' is not a directory".format(glob_or_path, dest)
+ )
+
+ def is_gzipped(path):
+ with open(path, "rb") as fd:
+ return compression.GZipFileType().matches_magic(fd)
+
+ for src in files:
+ if is_gzipped(src):
+ fs.copy(src, dest)
+ else:
+ # Compress and copy in one step
+ src_name = os.path.basename(src)
+ if os.path.isdir(dest):
+ zipped = os.path.join(dest, f"{src_name}.gz")
+ elif not dest.endswith(".gz"):
+ zipped = f"{dest}.gz"
+ else:
+ zipped = dest
+
+ with open(src, "rb") as fin, gzip.open(zipped, "wb") as fout:
+ shutil.copyfileobj(fin, fout)
+
+
+def copy_files_to_artifacts(
+ src: str, artifacts_dir: str, *, compress_artifacts: bool = False
+) -> None:
"""
Copy file(s) to the given artifacts directory
- Parameters:
+ Args:
src (str): the glob-friendly path expression for the file(s) to copy
artifacts_dir (str): the destination directory
+ compress_artifacts (bool): option to compress copied artifacts using Gzip
"""
try:
- fs.copy(src, artifacts_dir)
+
+ if compress_artifacts:
+ copy_gzipped(src, artifacts_dir)
+ else:
+ fs.copy(src, artifacts_dir)
except Exception as err:
- msg = (
- f"Unable to copy files ({src}) to artifacts {artifacts_dir} due to "
- f"exception: {str(err)}"
+ tty.warn(
+ (
+ f"Unable to copy files ({src}) to artifacts {artifacts_dir} due to "
+ f"exception: {str(err)}"
+ )
)
- tty.warn(msg)
def win_quote(quote_str: str) -> str:
diff --git a/lib/spack/spack/cmd/__init__.py b/lib/spack/spack/cmd/__init__.py
index 0ceee94ea46..030a95c2388 100644
--- a/lib/spack/spack/cmd/__init__.py
+++ b/lib/spack/spack/cmd/__init__.py
@@ -436,7 +436,7 @@ def display_specs(specs, args=None, **kwargs):
all_headers (bool): show headers even when arch/compiler aren't defined
status_fn (typing.Callable): if provided, prepend install-status info
output (typing.IO): A file object to write to. Default is ``sys.stdout``
-
+ specfile_format (bool): specfile format of the current spec
"""
def get_arg(name, default=None):
@@ -458,6 +458,7 @@ def get_arg(name, default=None):
all_headers = get_arg("all_headers", False)
output = get_arg("output", sys.stdout)
status_fn = get_arg("status_fn", None)
+ specfile_format = get_arg("specfile_format", False)
decorator = get_arg("decorator", None)
if decorator is None:
@@ -479,6 +480,9 @@ def get_arg(name, default=None):
vfmt = "{variants}" if variants else ""
format_string = nfmt + "{@version}" + vfmt + ffmt
+ if specfile_format:
+ format_string = "[{specfile_version}] " + format_string
+
def fmt(s, depth=0):
"""Formatter function for all output specs"""
string = ""
diff --git a/lib/spack/spack/cmd/buildcache.py b/lib/spack/spack/cmd/buildcache.py
index a76cfa767f6..80a579a3b71 100644
--- a/lib/spack/spack/cmd/buildcache.py
+++ b/lib/spack/spack/cmd/buildcache.py
@@ -76,9 +76,6 @@ def setup_parser(subparser: argparse.ArgumentParser):
default=False,
help="regenerate buildcache index after building package(s)",
)
- push.add_argument(
- "--spec-file", default=None, help="create buildcache entry for spec from json or yaml file"
- )
push.add_argument(
"--only",
default="package,dependencies",
@@ -192,28 +189,14 @@ def setup_parser(subparser: argparse.ArgumentParser):
default=lambda: spack.config.default_modify_scope(),
help="configuration scope containing mirrors to check",
)
- # Unfortunately there are 3 ways to do the same thing here:
- check_specs = check.add_mutually_exclusive_group()
- check_specs.add_argument(
- "-s", "--spec", help="check single spec instead of release specs file"
- )
- check_specs.add_argument(
- "--spec-file",
- help="check single spec from json or yaml file instead of release specs file",
- )
+
arguments.add_common_arguments(check, ["specs"])
check.set_defaults(func=check_fn)
# Download tarball and specfile
download = subparsers.add_parser("download", help=download_fn.__doc__)
- download_spec_or_specfile = download.add_mutually_exclusive_group(required=True)
- download_spec_or_specfile.add_argument(
- "-s", "--spec", help="download built tarball for spec from mirror"
- )
- download_spec_or_specfile.add_argument(
- "--spec-file", help="download built tarball for spec (from json or yaml file) from mirror"
- )
+ download.add_argument("-s", "--spec", help="download built tarball for spec from mirror")
download.add_argument(
"-p",
"--path",
@@ -223,28 +206,10 @@ def setup_parser(subparser: argparse.ArgumentParser):
)
download.set_defaults(func=download_fn)
- # Get buildcache name
- getbuildcachename = subparsers.add_parser(
- "get-buildcache-name", help=get_buildcache_name_fn.__doc__
- )
- getbuildcachename_spec_or_specfile = getbuildcachename.add_mutually_exclusive_group(
- required=True
- )
- getbuildcachename_spec_or_specfile.add_argument(
- "-s", "--spec", help="spec string for which buildcache name is desired"
- )
- getbuildcachename_spec_or_specfile.add_argument(
- "--spec-file", help="path to spec json or yaml file for which buildcache name is desired"
- )
- getbuildcachename.set_defaults(func=get_buildcache_name_fn)
-
# Given the root spec, save the yaml of the dependent spec to a file
savespecfile = subparsers.add_parser("save-specfile", help=save_specfile_fn.__doc__)
savespecfile_spec_or_specfile = savespecfile.add_mutually_exclusive_group(required=True)
savespecfile_spec_or_specfile.add_argument("--root-spec", help="root spec of dependent spec")
- savespecfile_spec_or_specfile.add_argument(
- "--root-specfile", help="path to json or yaml file containing root spec of dependent spec"
- )
savespecfile.add_argument(
"-s",
"--specs",
@@ -380,14 +345,8 @@ def _specs_to_be_packaged(
def push_fn(args):
"""create a binary package and push it to a mirror"""
- if args.spec_file:
- tty.warn(
- "The flag `--spec-file` is deprecated and will be removed in Spack 0.22. "
- "Use positional arguments instead."
- )
-
- if args.specs or args.spec_file:
- roots = _matching_specs(spack.cmd.parse_specs(args.specs or args.spec_file))
+ if args.specs:
+ roots = _matching_specs(spack.cmd.parse_specs(args.specs))
else:
roots = spack.cmd.require_active_env(cmd_name="buildcache push").concrete_roots()
@@ -529,22 +488,7 @@ def check_fn(args: argparse.Namespace):
this command uses the process exit code to indicate its result, specifically, if the
exit code is non-zero, then at least one of the indicated specs needs to be rebuilt
"""
- if args.spec_file:
- specs_arg = (
- args.spec_file if os.path.sep in args.spec_file else os.path.join(".", args.spec_file)
- )
- tty.warn(
- "The flag `--spec-file` is deprecated and will be removed in Spack 0.22. "
- f"Use `spack buildcache check {specs_arg}` instead."
- )
- elif args.spec:
- specs_arg = args.spec
- tty.warn(
- "The flag `--spec` is deprecated and will be removed in Spack 0.23. "
- f"Use `spack buildcache check {specs_arg}` instead."
- )
- else:
- specs_arg = args.specs
+ specs_arg = args.specs
if specs_arg:
specs = _matching_specs(spack.cmd.parse_specs(specs_arg))
@@ -578,13 +522,7 @@ def download_fn(args):
code indicates that the command failed to download at least one of the required buildcache
components
"""
- if args.spec_file:
- tty.warn(
- "The flag `--spec-file` is deprecated and will be removed in Spack 0.22. "
- "Use --spec instead."
- )
-
- specs = _matching_specs(spack.cmd.parse_specs(args.spec or args.spec_file))
+ specs = _matching_specs(spack.cmd.parse_specs(args.spec))
if len(specs) != 1:
tty.die("a single spec argument is required to download from a buildcache")
@@ -593,15 +531,6 @@ def download_fn(args):
sys.exit(1)
-def get_buildcache_name_fn(args):
- """get name (prefix) of buildcache entries for this spec"""
- tty.warn("This command is deprecated and will be removed in Spack 0.22.")
- specs = _matching_specs(spack.cmd.parse_specs(args.spec or args.spec_file))
- if len(specs) != 1:
- tty.die("a single spec argument is required to get buildcache name")
- print(bindist.tarball_name(specs[0], ""))
-
-
def save_specfile_fn(args):
"""get full spec for dependencies and write them to files in the specified output directory
@@ -609,13 +538,7 @@ def save_specfile_fn(args):
successful. if any errors or exceptions are encountered, or if expected command-line arguments
are not provided, then the exit code will be non-zero
"""
- if args.root_specfile:
- tty.warn(
- "The flag `--root-specfile` is deprecated and will be removed in Spack 0.22. "
- "Use --root-spec instead."
- )
-
- specs = spack.cmd.parse_specs(args.root_spec or args.root_specfile)
+ specs = spack.cmd.parse_specs(args.root_spec)
if len(specs) != 1:
tty.die("a single spec argument is required to save specfile")
diff --git a/lib/spack/spack/cmd/ci.py b/lib/spack/spack/cmd/ci.py
index 99b4c742026..156cb9410ad 100644
--- a/lib/spack/spack/cmd/ci.py
+++ b/lib/spack/spack/cmd/ci.py
@@ -160,6 +160,12 @@ def setup_parser(subparser):
default=False,
help="stop stand-alone tests after the first failure",
)
+ rebuild.add_argument(
+ "--timeout",
+ type=int,
+ default=None,
+ help="maximum time (in seconds) that tests are allowed to run",
+ )
rebuild.set_defaults(func=ci_rebuild)
spack.cmd.common.arguments.add_common_arguments(rebuild, ["jobs"])
@@ -447,7 +453,7 @@ def ci_rebuild(args):
# Arguments when installing the root from sources
deps_install_args = install_args + ["--only=dependencies"]
- root_install_args = install_args + ["--only=package"]
+ root_install_args = install_args + ["--keep-stage", "--only=package"]
if cdash_handler:
# Add additional arguments to `spack install` for CDash reporting.
@@ -487,6 +493,9 @@ def ci_rebuild(args):
# Copy logs and archived files from the install metadata (.spack) directory to artifacts now
spack_ci.copy_stage_logs_to_artifacts(job_spec, job_log_dir)
+ # Clear the stage directory
+ spack.stage.purge()
+
# If the installation succeeded and we're running stand-alone tests for
# the package, run them and copy the output. Failures of any kind should
# *not* terminate the build process or preclude creating the build cache.
@@ -521,6 +530,7 @@ def ci_rebuild(args):
fail_fast=args.fail_fast,
log_file=log_file,
repro_dir=repro_dir,
+ timeout=args.timeout,
)
except Exception as err:
diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py
index b6e3096db81..5982ce9cdc1 100644
--- a/lib/spack/spack/cmd/compiler.py
+++ b/lib/spack/spack/cmd/compiler.py
@@ -63,7 +63,7 @@ def setup_parser(subparser):
)
# List
- list_parser = sp.add_parser("list", help="list available compilers")
+ list_parser = sp.add_parser("list", aliases=["ls"], help="list available compilers")
list_parser.add_argument(
"--scope", action=arguments.ConfigScope, help="configuration scope to read from"
)
@@ -216,5 +216,6 @@ def compiler(parser, args):
"rm": compiler_remove,
"info": compiler_info,
"list": compiler_list,
+ "ls": compiler_list,
}
action[args.compiler_command](args)
diff --git a/lib/spack/spack/cmd/develop.py b/lib/spack/spack/cmd/develop.py
index e46fde7a4ad..b3aee538c59 100644
--- a/lib/spack/spack/cmd/develop.py
+++ b/lib/spack/spack/cmd/develop.py
@@ -102,7 +102,7 @@ def assure_concrete_spec(env: spack.environment.Environment, spec: spack.spec.Sp
)
else:
# look up the maximum version so infintiy versions are preferred for develop
- version = max(spec.package_class.versions.keys())
+ version = max(spack.repo.PATH.get_pkg_class(spec.fullname).versions.keys())
tty.msg(f"Defaulting to highest version: {spec.name}@{version}")
spec.versions = spack.version.VersionList([version])
diff --git a/lib/spack/spack/cmd/external.py b/lib/spack/spack/cmd/external.py
index a877e71f981..7650306bd19 100644
--- a/lib/spack/spack/cmd/external.py
+++ b/lib/spack/spack/cmd/external.py
@@ -62,7 +62,7 @@ def setup_parser(subparser):
"package Spack knows how to find."
)
- sp.add_parser("list", help="list detectable packages, by repository and name")
+ sp.add_parser("list", aliases=["ls"], help="list detectable packages, by repository and name")
read_cray_manifest = sp.add_parser(
"read-cray-manifest",
@@ -259,6 +259,7 @@ def external(parser, args):
action = {
"find": external_find,
"list": external_list,
+ "ls": external_list,
"read-cray-manifest": external_read_cray_manifest,
}
action[args.external_command](args)
diff --git a/lib/spack/spack/cmd/find.py b/lib/spack/spack/cmd/find.py
index e17b6c5fe60..8a1100303a8 100644
--- a/lib/spack/spack/cmd/find.py
+++ b/lib/spack/spack/cmd/find.py
@@ -51,6 +51,12 @@ def setup_parser(subparser):
"-I", "--install-status", action="store_true", help="show install status of packages"
)
+ subparser.add_argument(
+ "--specfile-format",
+ action="store_true",
+ help="show the specfile format for installed deps ",
+ )
+
subparser.add_argument(
"-d", "--deps", action="store_true", help="output dependencies along with found specs"
)
@@ -280,6 +286,7 @@ def root_decorator(spec, string):
show_flags=True,
decorator=root_decorator,
variants=True,
+ specfile_format=args.specfile_format,
)
print()
@@ -301,6 +308,7 @@ def root_decorator(spec, string):
namespace=True,
show_flags=True,
variants=True,
+ specfile_format=args.specfile_format,
)
print()
@@ -390,7 +398,12 @@ def find(parser, args):
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
+ display_results,
+ args,
+ decorator=decorator,
+ all_headers=True,
+ status_fn=status_fn,
+ specfile_format=args.specfile_format,
)
# print number of installed packages last (as the list may be long)
diff --git a/lib/spack/spack/cmd/solve.py b/lib/spack/spack/cmd/solve.py
index cd210348ab5..e7698119a97 100644
--- a/lib/spack/spack/cmd/solve.py
+++ b/lib/spack/spack/cmd/solve.py
@@ -136,20 +136,7 @@ def solve(parser, args):
setup_only = set(show) == {"asp"}
unify = spack.config.get("concretizer:unify")
allow_deprecated = spack.config.get("config:deprecated", False)
- if unify != "when_possible":
- # set up solver parameters
- # Note: reuse and other concretizer prefs are passed as configuration
- result = solver.solve(
- specs,
- out=output,
- timers=args.timers,
- stats=args.stats,
- setup_only=setup_only,
- allow_deprecated=allow_deprecated,
- )
- if not setup_only:
- _process_result(result, show, required_format, kwargs)
- else:
+ if unify == "when_possible":
for idx, result in enumerate(
solver.solve_in_rounds(
specs,
@@ -166,3 +153,29 @@ def solve(parser, args):
print("% END ROUND {0}\n".format(idx))
if not setup_only:
_process_result(result, show, required_format, kwargs)
+ elif unify:
+ # set up solver parameters
+ # Note: reuse and other concretizer prefs are passed as configuration
+ result = solver.solve(
+ specs,
+ out=output,
+ timers=args.timers,
+ stats=args.stats,
+ setup_only=setup_only,
+ allow_deprecated=allow_deprecated,
+ )
+ if not setup_only:
+ _process_result(result, show, required_format, kwargs)
+ else:
+ for spec in specs:
+ tty.msg("SOLVING SPEC:", spec)
+ result = solver.solve(
+ [spec],
+ out=output,
+ timers=args.timers,
+ stats=args.stats,
+ setup_only=setup_only,
+ allow_deprecated=allow_deprecated,
+ )
+ if not setup_only:
+ _process_result(result, show, required_format, kwargs)
diff --git a/lib/spack/spack/cmd/test.py b/lib/spack/spack/cmd/test.py
index a1425bb92cb..feb3aa313ac 100644
--- a/lib/spack/spack/cmd/test.py
+++ b/lib/spack/spack/cmd/test.py
@@ -65,6 +65,12 @@ def setup_parser(subparser):
run_parser.add_argument(
"--help-cdash", action="store_true", help="show usage instructions for CDash reporting"
)
+ run_parser.add_argument(
+ "--timeout",
+ type=int,
+ default=None,
+ help="maximum time (in seconds) that tests are allowed to run",
+ )
cd_group = run_parser.add_mutually_exclusive_group()
arguments.add_common_arguments(cd_group, ["clean", "dirty"])
@@ -176,7 +182,7 @@ def test_run(args):
for spec in specs:
matching = spack.store.STORE.db.query_local(spec, hashes=hashes, explicit=explicit)
if spec and not matching:
- tty.warn("No {0}installed packages match spec {1}".format(explicit_str, spec))
+ tty.warn(f"No {explicit_str}installed packages match spec {spec}")
# TODO: Need to write out a log message and/or CDASH Testing
# output that package not installed IF continue to process
@@ -192,7 +198,7 @@ def test_run(args):
# test_stage_dir
test_suite = spack.install_test.TestSuite(specs_to_test, args.alias)
test_suite.ensure_stage()
- tty.msg("Spack test %s" % test_suite.name)
+ tty.msg(f"Spack test {test_suite.name}")
# Set up reporter
setattr(args, "package", [s.format() for s in test_suite.specs])
@@ -204,6 +210,7 @@ def test_run(args):
dirty=args.dirty,
fail_first=args.fail_first,
externals=args.externals,
+ timeout=args.timeout,
)
diff --git a/lib/spack/spack/compilers/adaptor.py b/lib/spack/spack/compilers/adaptor.py
index ad9a929d342..76314087c53 100644
--- a/lib/spack/spack/compilers/adaptor.py
+++ b/lib/spack/spack/compilers/adaptor.py
@@ -18,6 +18,10 @@ class Languages(enum.Enum):
class CompilerAdaptor:
+ """Provides access to compiler attributes via `Package.compiler`. Useful for
+ packages which do not yet access compiler properties via `self.spec[language]`.
+ """
+
def __init__(
self, compiled_spec: spack.spec.Spec, compilers: Dict[Languages, spack.spec.Spec]
) -> None:
@@ -79,6 +83,14 @@ def implicit_rpaths(self) -> List[str]:
result.extend(CompilerPropertyDetector(compiler).implicit_rpaths())
return result
+ @property
+ def opt_flags(self) -> List[str]:
+ return next(iter(self.compilers.values())).package.opt_flags
+
+ @property
+ def debug_flags(self) -> List[str]:
+ return next(iter(self.compilers.values())).package.debug_flags
+
@property
def openmp_flag(self) -> str:
return next(iter(self.compilers.values())).package.openmp_flag
@@ -140,7 +152,7 @@ def c17_flag(self) -> str:
@property
def c23_flag(self) -> str:
return self.compilers[Languages.C].package.standard_flag(
- language=Languages.C.value, standard="17"
+ language=Languages.C.value, standard="23"
)
@property
@@ -190,6 +202,10 @@ def f77(self):
self._lang_exists_or_raise("f77", lang=Languages.FORTRAN)
return self.compilers[Languages.FORTRAN].package.fortran
+ @property
+ def stdcxx_libs(self):
+ return self._maybe_return_attribute("stdcxx_libs", lang=Languages.CXX)
+
class DeprecatedCompiler(lang.DeprecatedProperty):
def __init__(self) -> None:
diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py
index 60b7068e37c..bedf46b9e65 100644
--- a/lib/spack/spack/database.py
+++ b/lib/spack/spack/database.py
@@ -149,12 +149,12 @@ def _getfqdn():
return socket.getfqdn()
-def reader(version: vn.ConcreteVersion) -> Type["spack.spec.SpecfileReaderBase"]:
+def reader(version: vn.StandardVersion) -> Type["spack.spec.SpecfileReaderBase"]:
reader_cls = {
- vn.Version("5"): spack.spec.SpecfileV1,
- vn.Version("6"): spack.spec.SpecfileV3,
- vn.Version("7"): spack.spec.SpecfileV4,
- vn.Version("8"): spack.spec.SpecfileV5,
+ vn.StandardVersion.from_string("5"): spack.spec.SpecfileV1,
+ vn.StandardVersion.from_string("6"): spack.spec.SpecfileV3,
+ vn.StandardVersion.from_string("7"): spack.spec.SpecfileV4,
+ vn.StandardVersion.from_string("8"): spack.spec.SpecfileV5,
}
return reader_cls[version]
@@ -824,7 +824,7 @@ def check(cond, msg):
db = fdata["database"]
check("version" in db, "no 'version' in JSON DB.")
- self.db_version = vn.Version(db["version"])
+ self.db_version = vn.StandardVersion.from_string(db["version"])
if self.db_version > _DB_VERSION:
raise InvalidDatabaseVersionError(self, _DB_VERSION, self.db_version)
elif self.db_version < _DB_VERSION:
diff --git a/lib/spack/spack/detection/common.py b/lib/spack/spack/detection/common.py
index b908dd24f57..2e0cf645925 100644
--- a/lib/spack/spack/detection/common.py
+++ b/lib/spack/spack/detection/common.py
@@ -20,7 +20,7 @@
import sys
from typing import Dict, List, Optional, Set, Tuple, Union
-import llnl.util.tty
+from llnl.util import tty
import spack.config
import spack.error
@@ -93,14 +93,13 @@ def _spec_is_valid(spec: spack.spec.Spec) -> bool:
except spack.error.SpackError:
# It is assumed here that we can at least extract the package name from the spec so we
# can look up the implementation of determine_spec_details
- msg = f"Constructed spec for {spec.name} does not have a string representation"
- llnl.util.tty.warn(msg)
+ tty.warn(f"Constructed spec for {spec.name} does not have a string representation")
return False
try:
spack.spec.Spec(str(spec))
except spack.error.SpackError:
- llnl.util.tty.warn(
+ tty.warn(
"Constructed spec has a string representation but the string"
" representation does not evaluate to a valid spec: {0}".format(str(spec))
)
@@ -109,20 +108,24 @@ def _spec_is_valid(spec: spack.spec.Spec) -> bool:
return True
-def path_to_dict(search_paths: List[str]):
+def path_to_dict(search_paths: List[str]) -> Dict[str, str]:
"""Return dictionary[fullpath]: basename from list of paths"""
- path_to_lib = {}
+ path_to_lib: Dict[str, str] = {}
# Reverse order of search directories so that a lib in the first
# entry overrides later entries
for search_path in reversed(search_paths):
try:
- with os.scandir(search_path) as entries:
- path_to_lib.update(
- {entry.path: entry.name for entry in entries if entry.is_file()}
- )
+ dir_iter = os.scandir(search_path)
except OSError as e:
- msg = f"cannot scan '{search_path}' for external software: {str(e)}"
- llnl.util.tty.debug(msg)
+ tty.debug(f"cannot scan '{search_path}' for external software: {e}")
+ continue
+ with dir_iter as entries:
+ for entry in entries:
+ try:
+ if entry.is_file():
+ path_to_lib[entry.path] = entry.name
+ except OSError as e:
+ tty.debug(f"cannot scan '{search_path}' for external software: {e}")
return path_to_lib
diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py
index 2cff2678a04..3036d433d9e 100644
--- a/lib/spack/spack/directives.py
+++ b/lib/spack/spack/directives.py
@@ -610,7 +610,7 @@ def _execute_patch(
return _execute_patch
-def conditional(*values: List[Any], when: Optional[WhenType] = None):
+def conditional(*values: Union[str, bool], 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)
diff --git a/lib/spack/spack/directives_meta.py b/lib/spack/spack/directives_meta.py
index caa69bb6bf3..a02d11d6d40 100644
--- a/lib/spack/spack/directives_meta.py
+++ b/lib/spack/spack/directives_meta.py
@@ -144,7 +144,6 @@ class Foo(Package):
Package class, and it's how Spack gets information from the
packages to the core.
"""
- global directive_names
if isinstance(dicts, str):
dicts = (dicts,)
diff --git a/lib/spack/spack/environment/environment.py b/lib/spack/spack/environment/environment.py
index ca8e996bd6b..96d023026f9 100644
--- a/lib/spack/spack/environment/environment.py
+++ b/lib/spack/spack/environment/environment.py
@@ -31,7 +31,6 @@
import spack.repo
import spack.schema.env
import spack.spec
-import spack.spec_list
import spack.store
import spack.user_environment as uenv
import spack.util.environment
@@ -44,10 +43,10 @@
from spack.installer import PackageInstaller
from spack.schema.env import TOP_LEVEL_KEY
from spack.spec import Spec
-from spack.spec_list import SpecList
from spack.util.path import substitute_path_variables
from ..enums import ConfigScopePriority
+from .list import SpecList, SpecListError, SpecListParser
SpecPair = spack.concretize.SpecPair
@@ -932,8 +931,10 @@ def __init__(self, manifest_dir: Union[str, pathlib.Path]) -> None:
self.new_specs: List[Spec] = []
self.views: Dict[str, ViewDescriptor] = {}
+ #: Parser for spec lists
+ self._spec_lists_parser = SpecListParser()
#: Specs from "spack.yaml"
- self.spec_lists: Dict[str, SpecList] = {user_speclist_name: SpecList()}
+ self.spec_lists: Dict[str, SpecList] = {}
#: User specs from the last concretization
self.concretized_user_specs: List[Spec] = []
#: Roots associated with the last concretization, in order
@@ -1001,26 +1002,6 @@ def write_transaction(self):
"""Get a write lock context manager for use in a `with` block."""
return lk.WriteTransaction(self.txlock, acquire=self._re_read)
- def _process_definition(self, entry):
- """Process a single spec definition item."""
- when_string = entry.get("when")
- if when_string is not None:
- when = spack.spec.eval_conditional(when_string)
- assert len([x for x in entry if x != "when"]) == 1
- else:
- when = True
- assert len(entry) == 1
-
- if when:
- for name, spec_list in entry.items():
- if name == "when":
- continue
- user_specs = SpecList(name, spec_list, self.spec_lists.copy())
- if name in self.spec_lists:
- self.spec_lists[name].extend(user_specs)
- else:
- self.spec_lists[name] = user_specs
-
def _process_view(self, env_view: Optional[Union[bool, str, Dict]]):
"""Process view option(s), which can be boolean, string, or None.
@@ -1082,21 +1063,24 @@ def _process_concrete_includes(self):
def _construct_state_from_manifest(self):
"""Set up user specs and views from the manifest file."""
- self.spec_lists = collections.OrderedDict()
self.views = {}
+ self._sync_speclists()
+ self._process_view(spack.config.get("view", True))
+ self._process_concrete_includes()
- for item in spack.config.get("definitions", []):
- self._process_definition(item)
+ def _sync_speclists(self):
+ self.spec_lists = {}
+ self.spec_lists.update(
+ self._spec_lists_parser.parse_definitions(
+ data=spack.config.CONFIG.get("definitions", [])
+ )
+ )
env_configuration = self.manifest[TOP_LEVEL_KEY]
spec_list = env_configuration.get(user_speclist_name, [])
- user_specs = SpecList(
- user_speclist_name, [s for s in spec_list if s], self.spec_lists.copy()
+ self.spec_lists[user_speclist_name] = self._spec_lists_parser.parse_user_specs(
+ name=user_speclist_name, yaml_list=spec_list
)
- self.spec_lists[user_speclist_name] = user_specs
-
- self._process_view(spack.config.get("view", True))
- self._process_concrete_includes()
def all_concretized_user_specs(self) -> List[Spec]:
"""Returns all of the concretized user specs of the environment and
@@ -1167,9 +1151,7 @@ def clear(self, re_read=False):
re_read: If ``True``, do not clear ``new_specs``. This value cannot be read from yaml,
and needs to be maintained when re-reading an existing environment.
"""
- self.spec_lists = collections.OrderedDict()
- self.spec_lists[user_speclist_name] = SpecList()
-
+ self.spec_lists = {}
self._dev_specs = {}
self.concretized_order = [] # roots of last concretize, in order
self.concretized_user_specs = [] # user specs from last concretize
@@ -1276,22 +1258,6 @@ def destroy(self):
"""Remove this environment from Spack entirely."""
shutil.rmtree(self.path)
- def update_stale_references(self, from_list=None):
- """Iterate over spec lists updating references."""
- if not from_list:
- from_list = next(iter(self.spec_lists.keys()))
- index = list(self.spec_lists.keys()).index(from_list)
-
- # spec_lists is an OrderedDict to ensure lists read from the manifest
- # are maintainted in order, hence, all list entries after the modified
- # list may refer to the modified list requiring stale references to be
- # updated.
- for i, (name, speclist) in enumerate(
- list(self.spec_lists.items())[index + 1 :], index + 1
- ):
- new_reference = dict((n, self.spec_lists[n]) for n in list(self.spec_lists.keys())[:i])
- speclist.update_reference(new_reference)
-
def add(self, user_spec, list_name=user_speclist_name):
"""Add a single user_spec (non-concretized) to the Environment
@@ -1311,18 +1277,17 @@ def add(self, user_spec, list_name=user_speclist_name):
elif not spack.repo.PATH.exists(spec.name) and not spec.abstract_hash:
virtuals = spack.repo.PATH.provider_index.providers.keys()
if spec.name not in virtuals:
- msg = "no such package: %s" % spec.name
- raise SpackEnvironmentError(msg)
+ raise SpackEnvironmentError(f"no such package: {spec.name}")
list_to_change = self.spec_lists[list_name]
existing = str(spec) in list_to_change.yaml_list
if not existing:
list_to_change.add(str(spec))
- self.update_stale_references(list_name)
if list_name == user_speclist_name:
self.manifest.add_user_spec(str(user_spec))
else:
self.manifest.add_definition(str(user_spec), list_name=list_name)
+ self._sync_speclists()
return bool(not existing)
@@ -1366,18 +1331,17 @@ def change_existing_spec(
"There are no specs named {0} in {1}".format(match_spec.name, list_name)
)
elif len(matches) > 1 and not allow_changing_multiple_specs:
- raise ValueError("{0} matches multiple specs".format(str(match_spec)))
+ raise ValueError(f"{str(match_spec)} matches multiple specs")
for idx, spec in matches:
override_spec = Spec.override(spec, change_spec)
- self.spec_lists[list_name].replace(idx, str(override_spec))
if list_name == user_speclist_name:
self.manifest.override_user_spec(str(override_spec), idx=idx)
else:
self.manifest.override_definition(
str(spec), override=str(override_spec), list_name=list_name
)
- self.update_stale_references(from_list=list_name)
+ self._sync_speclists()
def remove(self, query_spec, list_name=user_speclist_name, force=False):
"""Remove specs from an environment that match a query_spec"""
@@ -1405,22 +1369,17 @@ def remove(self, query_spec, list_name=user_speclist_name, force=False):
raise SpackEnvironmentError(f"{err_msg_header}, no spec matches")
old_specs = set(self.user_specs)
- new_specs = set()
+
+ # Remove specs from the appropriate spec list
for spec in matches:
if spec not in list_to_change:
continue
try:
list_to_change.remove(spec)
- self.update_stale_references(list_name)
- new_specs = set(self.user_specs)
- except spack.spec_list.SpecListError as e:
- # define new specs list
- new_specs = set(self.user_specs)
+ except SpecListError as e:
msg = str(e)
if force:
msg += " It will be removed from the concrete specs."
- # Mock new specs, so we can remove this spec from concrete spec lists
- new_specs.remove(spec)
tty.warn(msg)
else:
if list_name == user_speclist_name:
@@ -1428,7 +1387,11 @@ def remove(self, query_spec, list_name=user_speclist_name, force=False):
else:
self.manifest.remove_definition(str(spec), list_name=list_name)
- # If force, update stale concretized specs
+ # Recompute "definitions" and user specs
+ self._sync_speclists()
+ new_specs = set(self.user_specs)
+
+ # If 'force', update stale concretized specs
for spec in old_specs - new_specs:
if force and spec in self.concretized_user_specs:
i = self.concretized_user_specs.index(spec)
@@ -1642,23 +1605,6 @@ def _concretize_separately(self, tests=False):
# Unify the specs objects, so we get correct references to all parents
self._read_lockfile_dict(self._to_lockfile_dict())
-
- # Re-attach information on test dependencies
- if tests:
- # This is slow, but the information on test dependency is lost
- # after unification or when reading from a lockfile.
- for h in self.specs_by_hash:
- current_spec, computed_spec = self.specs_by_hash[h], by_hash[h]
- for node in computed_spec.traverse():
- test_edges = node.edges_to_dependencies(depflag=dt.TEST)
- for current_edge in test_edges:
- test_dependency = current_edge.spec
- if test_dependency in current_spec[node.name]:
- continue
- current_spec[node.name].add_dependency_edge(
- test_dependency.copy(), depflag=dt.TEST, virtuals=current_edge.virtuals
- )
-
return concretized_specs
@property
@@ -2827,6 +2773,8 @@ def add_definition(self, user_spec: str, list_name: str) -> None:
item[list_name].append(user_spec)
break
+ # "definitions" can be remote, so we need to update the global config too
+ spack.config.CONFIG.set("definitions", defs, scope=self.scope_name)
self.changed = True
def remove_definition(self, user_spec: str, list_name: str) -> None:
@@ -2853,6 +2801,8 @@ def remove_definition(self, user_spec: str, list_name: str) -> None:
except ValueError:
pass
+ # "definitions" can be remote, so we need to update the global config too
+ spack.config.CONFIG.set("definitions", defs, scope=self.scope_name)
self.changed = True
def override_definition(self, user_spec: str, *, override: str, list_name: str) -> None:
@@ -2878,6 +2828,8 @@ def override_definition(self, user_spec: str, *, override: str, list_name: str)
except ValueError:
pass
+ # "definitions" can be remote, so we need to update the global config too
+ spack.config.CONFIG.set("definitions", defs, scope=self.scope_name)
self.changed = True
def _iterate_on_definitions(self, definitions, *, list_name, err_msg):
diff --git a/lib/spack/spack/spec_list.py b/lib/spack/spack/environment/list.py
similarity index 50%
rename from lib/spack/spack/spec_list.py
rename to lib/spack/spack/environment/list.py
index eadc28fa8f8..9bb258fa777 100644
--- a/lib/spack/spack/spec_list.py
+++ b/lib/spack/spack/environment/list.py
@@ -2,36 +2,24 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import itertools
-from typing import List
+from typing import Any, Dict, List, NamedTuple, Optional, Union
import spack.spec
+import spack.util.spack_yaml
import spack.variant
from spack.error import SpackError
from spack.spec import Spec
class SpecList:
- def __init__(self, name="specs", yaml_list=None, reference=None):
- # Normalize input arguments
- yaml_list = yaml_list or []
- reference = reference or {}
-
+ def __init__(self, *, name: str = "specs", yaml_list=None, expanded_list=None):
self.name = name
- self._reference = reference # TODO: Do we need defensive copy here?
-
- # Validate yaml_list before assigning
- if not all(isinstance(s, str) or isinstance(s, (list, dict)) for s in yaml_list):
- raise ValueError(
- "yaml_list can contain only valid YAML types! Found:\n %s"
- % [type(s) for s in yaml_list]
- )
- self.yaml_list = yaml_list[:]
-
+ self.yaml_list = yaml_list[:] if yaml_list is not None else []
# Expansions can be expensive to compute and difficult to keep updated
# We cache results and invalidate when self.yaml_list changes
- self._expanded_list = None
+ self.specs_as_yaml_list = expanded_list or []
self._constraints = None
- self._specs = None
+ self._specs: Optional[List[Spec]] = None
@property
def is_matrix(self):
@@ -40,12 +28,6 @@ def is_matrix(self):
return True
return False
- @property
- def specs_as_yaml_list(self):
- if self._expanded_list is None:
- self._expanded_list = self._expand_references(self.yaml_list)
- return self._expanded_list
-
@property
def specs_as_constraints(self):
if self._constraints is None:
@@ -62,7 +44,7 @@ def specs_as_constraints(self):
@property
def specs(self) -> List[Spec]:
if self._specs is None:
- specs = []
+ specs: List[Spec] = []
# This could be slightly faster done directly from yaml_list,
# but this way is easier to maintain.
for constraint_list in self.specs_as_constraints:
@@ -74,12 +56,13 @@ def specs(self) -> List[Spec]:
return self._specs
- def add(self, spec):
- self.yaml_list.append(str(spec))
+ def add(self, spec: Spec):
+ spec_str = str(spec)
+ self.yaml_list.append(spec_str)
# expanded list can be updated without invalidation
- if self._expanded_list is not None:
- self._expanded_list.append(str(spec))
+ if self.specs_as_yaml_list is not None:
+ self.specs_as_yaml_list.append(spec_str)
# Invalidate cache variables when we change the list
self._constraints = None
@@ -101,83 +84,18 @@ def remove(self, spec):
# Remove may contain more than one string representation of the same spec
for item in remove:
self.yaml_list.remove(item)
+ self.specs_as_yaml_list.remove(item)
# invalidate cache variables when we change the list
- self._expanded_list = None
self._constraints = None
self._specs = None
- def replace(self, idx: int, spec: str):
- """Replace the existing spec at the index with the new one.
-
- Args:
- idx: index of the spec to replace in the speclist
- spec: new spec
- """
- self.yaml_list[idx] = spec
-
- # invalidate cache variables when we change the list
- self._expanded_list = None
- self._constraints = None
- self._specs = None
-
- def extend(self, other, copy_reference=True):
+ def extend(self, other: "SpecList", copy_reference=True) -> None:
self.yaml_list.extend(other.yaml_list)
- self._expanded_list = None
+ self.specs_as_yaml_list.extend(other.specs_as_yaml_list)
self._constraints = None
self._specs = None
- if copy_reference:
- self._reference = other._reference
-
- def update_reference(self, reference):
- self._reference = reference
- self._expanded_list = None
- self._constraints = None
- self._specs = None
-
- def _parse_reference(self, name):
- sigil = ""
- name = name[1:]
-
- # Parse specs as constraints
- if name.startswith("^") or name.startswith("%"):
- sigil = name[0]
- name = name[1:]
-
- # Make sure the reference is valid
- if name not in self._reference:
- msg = f"SpecList '{self.name}' refers to named list '{name}'"
- msg += " which does not appear in its reference dict."
- raise UndefinedReferenceError(msg)
-
- return (name, sigil)
-
- def _expand_references(self, yaml):
- if isinstance(yaml, list):
- ret = []
-
- for item in yaml:
- # if it's a reference, expand it
- if isinstance(item, str) and item.startswith("$"):
- # replace the reference and apply the sigil if needed
- name, sigil = self._parse_reference(item)
-
- referent = [
- _sigilify(item, sigil) for item in self._reference[name].specs_as_yaml_list
- ]
- ret.extend(referent)
- else:
- # else just recurse
- ret.append(self._expand_references(item))
- return ret
- elif isinstance(yaml, dict):
- # There can't be expansions in dicts
- return dict((name, self._expand_references(val)) for (name, val) in yaml.items())
- else:
- # Strings are just returned
- return yaml
-
def __len__(self):
return len(self.specs)
@@ -251,6 +169,111 @@ def _sigilify(item, sigil):
return sigil + item
+class Definition(NamedTuple):
+ name: str
+ yaml_list: List[Union[str, Dict]]
+ when: Optional[str]
+
+
+class SpecListParser:
+ """Parse definitions and user specs from data in environments"""
+
+ def __init__(self):
+ self.definitions: Dict[str, SpecList] = {}
+
+ def parse_definitions(self, *, data: List[Dict[str, Any]]) -> Dict[str, SpecList]:
+ definitions_from_yaml: Dict[str, List[Definition]] = {}
+ for item in data:
+ value = self._parse_yaml_definition(item)
+ definitions_from_yaml.setdefault(value.name, []).append(value)
+
+ self.definitions = {}
+ self._build_definitions(definitions_from_yaml)
+ return self.definitions
+
+ def parse_user_specs(self, *, name, yaml_list) -> SpecList:
+ definition = Definition(name=name, yaml_list=yaml_list, when=None)
+ return self._speclist_from_definitions(name, [definition])
+
+ def _parse_yaml_definition(self, yaml_entry) -> Definition:
+ when_string = yaml_entry.get("when")
+
+ if (when_string and len(yaml_entry) > 2) or (not when_string and len(yaml_entry) > 1):
+ mark = spack.util.spack_yaml.get_mark_from_yaml_data(yaml_entry)
+ attributes = ", ".join(x for x in yaml_entry if x != "when")
+ error_msg = f"definition must have a single attribute, got many: {attributes}"
+ raise SpecListError(f"{mark.name}:{mark.line + 1}: {error_msg}")
+
+ for name, yaml_list in yaml_entry.items():
+ if name == "when":
+ continue
+ return Definition(name=name, yaml_list=yaml_list, when=when_string)
+
+ # If we are here, it means only "when" is in the entry
+ mark = spack.util.spack_yaml.get_mark_from_yaml_data(yaml_entry)
+ error_msg = "definition must have a single attribute, got none"
+ raise SpecListError(f"{mark.name}:{mark.line + 1}: {error_msg}")
+
+ def _build_definitions(self, definitions_from_yaml: Dict[str, List[Definition]]):
+ for name, definitions in definitions_from_yaml.items():
+ self.definitions[name] = self._speclist_from_definitions(name, definitions)
+
+ def _speclist_from_definitions(self, name, definitions) -> SpecList:
+ combined_yaml_list = []
+ for def_part in definitions:
+ if def_part.when is not None and not spack.spec.eval_conditional(def_part.when):
+ continue
+ combined_yaml_list.extend(def_part.yaml_list)
+ expanded_list = self._expand_yaml_list(combined_yaml_list)
+ return SpecList(name=name, yaml_list=combined_yaml_list, expanded_list=expanded_list)
+
+ def _expand_yaml_list(self, raw_yaml_list):
+ result = []
+ for item in raw_yaml_list:
+ if isinstance(item, str) and item.startswith("$"):
+ result.extend(self._expand_reference(item))
+ continue
+
+ value = item
+ if isinstance(item, dict):
+ value = self._expand_yaml_matrix(item)
+ result.append(value)
+ return result
+
+ def _expand_reference(self, item: str):
+ sigil, name = "", item[1:]
+ if name.startswith("^") or name.startswith("%"):
+ sigil, name = name[0], name[1:]
+
+ if name not in self.definitions:
+ mark = spack.util.spack_yaml.get_mark_from_yaml_data(item)
+ error_msg = f"trying to expand the name '{name}', which is not defined yet"
+ raise UndefinedReferenceError(f"{mark.name}:{mark.line + 1}: {error_msg}")
+
+ value = self.definitions[name].specs_as_yaml_list
+ if not sigil:
+ return value
+ return [_sigilify(x, sigil) for x in value]
+
+ def _expand_yaml_matrix(self, matrix_yaml):
+ extra_attributes = set(matrix_yaml) - {"matrix", "exclude"}
+ if extra_attributes:
+ mark = spack.util.spack_yaml.get_mark_from_yaml_data(matrix_yaml)
+ error_msg = f"extra attributes in spec matrix: {','.join(sorted(extra_attributes))}"
+ raise SpecListError(f"{mark.name}:{mark.line + 1}: {error_msg}")
+
+ if "matrix" not in matrix_yaml:
+ mark = spack.util.spack_yaml.get_mark_from_yaml_data(matrix_yaml)
+ error_msg = "matrix is missing the 'matrix' attribute"
+ raise SpecListError(f"{mark.name}:{mark.line + 1}: {error_msg}")
+
+ # Assume data has been validated against the YAML schema
+ result = {"matrix": [self._expand_yaml_list(row) for row in matrix_yaml["matrix"]]}
+ if "exclude" in matrix_yaml:
+ result["exclude"] = matrix_yaml["exclude"]
+ return result
+
+
class SpecListError(SpackError):
"""Error class for all errors related to SpecList objects."""
diff --git a/lib/spack/spack/environment/shell.py b/lib/spack/spack/environment/shell.py
index 814c84b4051..2c6a79f4db9 100644
--- a/lib/spack/spack/environment/shell.py
+++ b/lib/spack/spack/environment/shell.py
@@ -49,10 +49,23 @@ 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
+ if prompt:
+ old_prompt = os.environ.get("SPACK_OLD_PROMPT")
+ if not old_prompt:
+ old_prompt = os.environ.get("PROMPT")
+ cmds += f'set "SPACK_OLD_PROMPT={old_prompt}"\n'
+ cmds += f'set "PROMPT={prompt} $P$G"\n'
elif shell == "pwsh":
cmds += "$Env:SPACK_ENV='%s'\n" % env.path
if view:
cmds += "$Env:SPACK_ENV_VIEW='%s'\n" % view
+ if prompt:
+ cmds += (
+ "function global:prompt { $pth = $(Convert-Path $(Get-Location))"
+ ' | Split-Path -leaf; if(!"$Env:SPACK_OLD_PROMPT") '
+ '{$Env:SPACK_OLD_PROMPT="[spack] PS $pth>"}; '
+ '"%s PS $pth>"}\n' % prompt
+ )
else:
bash_color_prompt = colorize(f"@G{{{prompt}}}", color=True, enclose=True)
zsh_color_prompt = colorize(f"@G{{{prompt}}}", color=True, enclose=False, zsh=True)
@@ -107,10 +120,19 @@ def deactivate_header(shell):
cmds += 'set "SPACK_ENV="\n'
cmds += 'set "SPACK_ENV_VIEW="\n'
# TODO: despacktivate
- # TODO: prompt
+ old_prompt = os.environ.get("SPACK_OLD_PROMPT")
+ if old_prompt:
+ cmds += f'set "PROMPT={old_prompt}"\n'
+ cmds += 'set "SPACK_OLD_PROMPT="\n'
elif shell == "pwsh":
cmds += "Set-Item -Path Env:SPACK_ENV\n"
cmds += "Set-Item -Path Env:SPACK_ENV_VIEW\n"
+ cmds += (
+ "function global:prompt { $pth = $(Convert-Path $(Get-Location))"
+ ' | Split-Path -leaf; $spack_prompt = "[spack] $pth >"; '
+ 'if("$Env:SPACK_OLD_PROMPT") {$spack_prompt=$Env:SPACK_OLD_PROMPT};'
+ " $spack_prompt}\n"
+ )
else:
cmds += "if [ ! -z ${SPACK_ENV+x} ]; then\n"
cmds += "unset SPACK_ENV; export SPACK_ENV;\n"
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index dd09a6d3dd1..d98b3971221 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -27,11 +27,14 @@
import os
import re
import shutil
+import sys
+import time
import urllib.error
import urllib.parse
import urllib.request
+import urllib.response
from pathlib import PurePath
-from typing import List, Optional
+from typing import Callable, List, Mapping, Optional
import llnl.url
import llnl.util
@@ -219,6 +222,114 @@ def mirror_id(self):
"""BundlePackages don't have a mirror id."""
+def _format_speed(total_bytes: int, elapsed: float) -> str:
+ """Return a human-readable average download speed string."""
+ elapsed = 1 if elapsed <= 0 else elapsed # avoid divide by zero
+ speed = total_bytes / elapsed
+ if speed >= 1e9:
+ return f"{speed / 1e9:6.1f} GB/s"
+ elif speed >= 1e6:
+ return f"{speed / 1e6:6.1f} MB/s"
+ elif speed >= 1e3:
+ return f"{speed / 1e3:6.1f} KB/s"
+ return f"{speed:6.1f} B/s"
+
+
+def _format_bytes(total_bytes: int) -> str:
+ """Return a human-readable total bytes string."""
+ if total_bytes >= 1e9:
+ return f"{total_bytes / 1e9:7.2f} GB"
+ elif total_bytes >= 1e6:
+ return f"{total_bytes / 1e6:7.2f} MB"
+ elif total_bytes >= 1e3:
+ return f"{total_bytes / 1e3:7.2f} KB"
+ return f"{total_bytes:7.2f} B"
+
+
+class FetchProgress:
+ #: Characters to rotate in the spinner.
+ spinner = ["|", "/", "-", "\\"]
+
+ def __init__(
+ self,
+ total_bytes: Optional[int] = None,
+ enabled: bool = True,
+ get_time: Callable[[], float] = time.time,
+ ) -> None:
+ """Initialize a FetchProgress instance.
+ Args:
+ total_bytes: Total number of bytes to download, if known.
+ enabled: Whether to print progress information.
+ get_time: Function to get the current time."""
+ #: Number of bytes downloaded so far.
+ self.current_bytes = 0
+ #: Delta time between progress prints
+ self.delta = 0.1
+ #: Whether to print progress information.
+ self.enabled = enabled
+ #: Function to get the current time.
+ self.get_time = get_time
+ #: Time of last progress print to limit output
+ self.last_printed = 0.0
+ #: Time of start of download
+ self.start_time = get_time() if enabled else 0.0
+ #: Total number of bytes to download, if known.
+ self.total_bytes = total_bytes if total_bytes and total_bytes > 0 else 0
+ #: Index of spinner character to print (used if total bytes is unknown)
+ self.index = 0
+
+ @classmethod
+ def from_headers(
+ cls,
+ headers: Mapping[str, str],
+ enabled: bool = True,
+ get_time: Callable[[], float] = time.time,
+ ) -> "FetchProgress":
+ """Create a FetchProgress instance from HTTP headers."""
+ # headers.get is case-insensitive if it's from a HTTPResponse object.
+ content_length = headers.get("Content-Length")
+ try:
+ total_bytes = int(content_length) if content_length else None
+ except ValueError:
+ total_bytes = None
+ return cls(total_bytes=total_bytes, enabled=enabled, get_time=get_time)
+
+ def advance(self, num_bytes: int, out=sys.stdout) -> None:
+ if not self.enabled:
+ return
+ self.current_bytes += num_bytes
+ self.print(out=out)
+
+ def print(self, final: bool = False, out=sys.stdout) -> None:
+ if not self.enabled:
+ return
+ current_time = self.get_time()
+ if self.last_printed + self.delta < current_time or final:
+ self.last_printed = current_time
+ # print a newline if this is the final update
+ maybe_newline = "\n" if final else ""
+ # if we know the total bytes, show a percentage, otherwise a spinner
+ if self.total_bytes > 0:
+ percentage = min(100 * self.current_bytes / self.total_bytes, 100.0)
+ percent_or_spinner = f"[{percentage:3.0f}%] "
+ else:
+ # only show the spinner if we are not at 100%
+ if final:
+ percent_or_spinner = "[100%] "
+ else:
+ percent_or_spinner = f"[ {self.spinner[self.index]} ] "
+ self.index = (self.index + 1) % len(self.spinner)
+
+ print(
+ f"\r {percent_or_spinner}{_format_bytes(self.current_bytes)} "
+ f"@ {_format_speed(self.current_bytes, current_time - self.start_time)}"
+ f"{maybe_newline}",
+ end="",
+ flush=True,
+ file=out,
+ )
+
+
@fetcher
class URLFetchStrategy(FetchStrategy):
"""URLFetchStrategy pulls source code from a URL for an archive, check the
@@ -316,7 +427,7 @@ def _check_headers(self, headers):
tty.warn(msg)
@_needs_stage
- def _fetch_urllib(self, url):
+ def _fetch_urllib(self, url, chunk_size=65536):
save_file = self.stage.save_filename
request = urllib.request.Request(url, headers={"User-Agent": web_util.SPACK_USER_AGENT})
@@ -327,8 +438,15 @@ def _fetch_urllib(self, url):
try:
response = web_util.urlopen(request)
tty.msg(f"Fetching {url}")
+ progress = FetchProgress.from_headers(response.headers, enabled=sys.stdout.isatty())
with open(save_file, "wb") as f:
- shutil.copyfileobj(response, f)
+ while True:
+ chunk = response.read(chunk_size)
+ if not chunk:
+ break
+ f.write(chunk)
+ progress.advance(len(chunk))
+ progress.print(final=True)
except OSError as e:
# clean up archive on failure.
if self.archive_file:
diff --git a/lib/spack/spack/install_test.py b/lib/spack/spack/install_test.py
index de69f75e929..d0b3b5c4b11 100644
--- a/lib/spack/spack/install_test.py
+++ b/lib/spack/spack/install_test.py
@@ -12,7 +12,7 @@
import shutil
import sys
from collections import Counter, OrderedDict
-from typing import Callable, List, Optional, Tuple, Type, TypeVar, Union
+from typing import Callable, Iterable, List, Optional, Tuple, Type, TypeVar, Union
import llnl.util.filesystem as fs
import llnl.util.tty as tty
@@ -391,7 +391,7 @@ def phase_tests(self, builder, phase_name: str, method_names: List[str]):
if self.test_failures:
raise TestFailure(self.test_failures)
- def stand_alone_tests(self, kwargs):
+ def stand_alone_tests(self, kwargs, timeout: Optional[int] = None) -> None:
"""Run the package's stand-alone tests.
Args:
@@ -399,7 +399,9 @@ def stand_alone_tests(self, kwargs):
"""
import spack.build_environment # avoid circular dependency
- spack.build_environment.start_build_process(self.pkg, test_process, kwargs)
+ spack.build_environment.start_build_process(
+ self.pkg, test_process, kwargs, timeout=timeout
+ )
def parts(self) -> int:
"""The total number of (checked) test parts."""
@@ -847,7 +849,7 @@ def write_test_summary(counts: "Counter"):
class TestSuite:
"""The class that manages specs for ``spack test run`` execution."""
- def __init__(self, specs, alias=None):
+ def __init__(self, specs: Iterable[Spec], alias: Optional[str] = None) -> None:
# copy so that different test suites have different package objects
# even if they contain the same spec
self.specs = [spec.copy() for spec in specs]
@@ -855,42 +857,43 @@ def __init__(self, specs, alias=None):
self.current_base_spec = None # spec currently running do_test
self.alias = alias
- self._hash = None
- self._stage = None
+ self._hash: Optional[str] = None
+ self._stage: Optional[Prefix] = None
self.counts: "Counter" = Counter()
@property
- def name(self):
+ def name(self) -> str:
"""The name (alias or, if none, hash) of the test suite."""
return self.alias if self.alias else self.content_hash
@property
- def content_hash(self):
+ def content_hash(self) -> str:
"""The hash used to uniquely identify the test suite."""
if not self._hash:
json_text = sjson.dump(self.to_dict())
+ assert json_text is not None, f"{__name__} unexpected value for 'json_text'"
sha = hashlib.sha1(json_text.encode("utf-8"))
b32_hash = base64.b32encode(sha.digest()).lower()
b32_hash = b32_hash.decode("utf-8")
self._hash = b32_hash
return self._hash
- def __call__(self, *args, **kwargs):
+ def __call__(
+ self,
+ *,
+ remove_directory: bool = True,
+ dirty: bool = False,
+ fail_first: bool = False,
+ externals: bool = False,
+ timeout: Optional[int] = None,
+ ):
self.write_reproducibility_data()
-
- remove_directory = kwargs.get("remove_directory", True)
- dirty = kwargs.get("dirty", False)
- fail_first = kwargs.get("fail_first", False)
- externals = kwargs.get("externals", False)
-
for spec in self.specs:
try:
if spec.package.test_suite:
raise TestSuiteSpecError(
- "Package {} cannot be run in two test suites at once".format(
- spec.package.name
- )
+ f"Package {spec.package.name} cannot be run in two test suites at once"
)
# Set up the test suite to know which test is running
@@ -905,7 +908,7 @@ def __call__(self, *args, **kwargs):
fs.mkdirp(test_dir)
# run the package tests
- spec.package.do_test(dirty=dirty, externals=externals)
+ spec.package.do_test(dirty=dirty, externals=externals, timeout=timeout)
# Clean up on success
if remove_directory:
@@ -956,15 +959,12 @@ def __call__(self, *args, **kwargs):
if failures:
raise TestSuiteFailure(failures)
- def test_status(self, spec: spack.spec.Spec, externals: bool) -> Optional[TestStatus]:
- """Determine the overall test results status for the spec.
+ def test_status(self, spec: spack.spec.Spec, externals: bool) -> TestStatus:
+ """Returns the overall test results status for the spec.
Args:
spec: instance of the spec under test
externals: ``True`` if externals are to be tested, else ``False``
-
- Returns:
- the spec's test status if available or ``None``
"""
tests_status_file = self.tested_file_for_spec(spec)
if not os.path.exists(tests_status_file):
@@ -981,109 +981,84 @@ def test_status(self, spec: spack.spec.Spec, externals: bool) -> Optional[TestSt
value = (f.read()).strip("\n")
return TestStatus(int(value)) if value else TestStatus.NO_TESTS
- def ensure_stage(self):
+ def ensure_stage(self) -> None:
"""Ensure the test suite stage directory exists."""
if not os.path.exists(self.stage):
fs.mkdirp(self.stage)
@property
- def stage(self):
- """The root test suite stage directory.
-
- Returns:
- str: the spec's test stage directory path
- """
+ def stage(self) -> Prefix:
+ """The root test suite stage directory"""
if not self._stage:
self._stage = Prefix(fs.join_path(get_test_stage_dir(), self.content_hash))
return self._stage
@stage.setter
- def stage(self, value):
+ def stage(self, value: Union[Prefix, str]) -> None:
"""Set the value of a non-default stage directory."""
self._stage = value if isinstance(value, Prefix) else Prefix(value)
@property
- def results_file(self):
+ def results_file(self) -> Prefix:
"""The path to the results summary file."""
return self.stage.join(results_filename)
@classmethod
- def test_pkg_id(cls, spec):
+ def test_pkg_id(cls, spec: Spec) -> str:
"""The standard install test package identifier.
Args:
spec: instance of the spec under test
-
- Returns:
- str: the install test package identifier
"""
return spec.format_path("{name}-{version}-{hash:7}")
@classmethod
- def test_log_name(cls, spec):
+ def test_log_name(cls, spec: Spec) -> str:
"""The standard log filename for a spec.
Args:
- spec (spack.spec.Spec): instance of the spec under test
-
- Returns:
- str: the spec's log filename
+ spec: instance of the spec under test
"""
- return "%s-test-out.txt" % cls.test_pkg_id(spec)
+ return f"{cls.test_pkg_id(spec)}-test-out.txt"
- def log_file_for_spec(self, spec):
+ def log_file_for_spec(self, spec: Spec) -> Prefix:
"""The test log file path for the provided spec.
Args:
- spec (spack.spec.Spec): instance of the spec under test
-
- Returns:
- str: the path to the spec's log file
+ spec: instance of the spec under test
"""
return self.stage.join(self.test_log_name(spec))
- def test_dir_for_spec(self, spec):
+ def test_dir_for_spec(self, spec: Spec) -> Prefix:
"""The path to the test stage directory for the provided spec.
Args:
- spec (spack.spec.Spec): instance of the spec under test
-
- Returns:
- str: the spec's test stage directory path
+ spec: instance of the spec under test
"""
return Prefix(self.stage.join(self.test_pkg_id(spec)))
@classmethod
- def tested_file_name(cls, spec):
+ def tested_file_name(cls, spec: Spec) -> str:
"""The standard test status filename for the spec.
Args:
- spec (spack.spec.Spec): instance of the spec under test
-
- Returns:
- str: the spec's test status filename
+ spec: instance of the spec under test
"""
return "%s-tested.txt" % cls.test_pkg_id(spec)
- def tested_file_for_spec(self, spec):
+ def tested_file_for_spec(self, spec: Spec) -> str:
"""The test status file path for the spec.
Args:
- spec (spack.spec.Spec): instance of the spec under test
-
- Returns:
- str: the spec's test status file path
+ spec: instance of the spec under test
"""
return fs.join_path(self.stage, self.tested_file_name(spec))
@property
- def current_test_cache_dir(self):
+ def current_test_cache_dir(self) -> str:
"""Path to the test stage directory where the current spec's cached
build-time files were automatically copied.
- Returns:
- str: path to the current spec's staged, cached build-time files.
-
Raises:
TestSuiteSpecError: If there is no spec being tested
"""
@@ -1095,13 +1070,10 @@ def current_test_cache_dir(self):
return self.test_dir_for_spec(base_spec).cache.join(test_spec.name)
@property
- def current_test_data_dir(self):
+ def current_test_data_dir(self) -> str:
"""Path to the test stage directory where the current spec's custom
package (data) files were automatically copied.
- Returns:
- str: path to the current spec's staged, custom package (data) files
-
Raises:
TestSuiteSpecError: If there is no spec being tested
"""
@@ -1112,17 +1084,17 @@ def current_test_data_dir(self):
base_spec = self.current_base_spec
return self.test_dir_for_spec(base_spec).data.join(test_spec.name)
- def write_test_result(self, spec, result):
+ def write_test_result(self, spec: Spec, result: TestStatus) -> None:
"""Write the spec's test result to the test suite results file.
Args:
- spec (spack.spec.Spec): instance of the spec under test
- result (str): result from the spec's test execution (e.g, PASSED)
+ spec: instance of the spec under test
+ result: result from the spec's test execution (e.g, PASSED)
"""
msg = f"{self.test_pkg_id(spec)} {result}"
_add_msg_to_file(self.results_file, msg)
- def write_reproducibility_data(self):
+ def write_reproducibility_data(self) -> None:
for spec in self.specs:
repo_cache_path = self.stage.repo.join(spec.name)
spack.repo.PATH.dump_provenance(spec, repo_cache_path)
@@ -1167,12 +1139,12 @@ def from_dict(d):
return TestSuite(specs, alias)
@staticmethod
- def from_file(filename):
+ def from_file(filename: str) -> "TestSuite":
"""Instantiate a TestSuite using the specs and optional alias
provided in the given file.
Args:
- filename (str): The path to the JSON file containing the test
+ filename: The path to the JSON file containing the test
suite specs and optional alias.
Raises:
diff --git a/lib/spack/spack/main.py b/lib/spack/spack/main.py
index ec98b86e246..458ef7d2671 100644
--- a/lib/spack/spack/main.py
+++ b/lib/spack/spack/main.py
@@ -20,6 +20,7 @@
import signal
import subprocess as sp
import sys
+import tempfile
import traceback
import warnings
from typing import List, Tuple
@@ -41,6 +42,7 @@
import spack.paths
import spack.platforms
import spack.repo
+import spack.solver.asp
import spack.spec
import spack.store
import spack.util.debug
@@ -1046,6 +1048,10 @@ def main(argv=None):
try:
return _main(argv)
+ except spack.solver.asp.OutputDoesNotSatisfyInputError as e:
+ _handle_solver_bug(e)
+ return 1
+
except spack.error.SpackError as e:
tty.debug(e)
e.die() # gracefully die on any SpackErrors
@@ -1069,5 +1075,45 @@ def main(argv=None):
return 3
+def _handle_solver_bug(
+ e: spack.solver.asp.OutputDoesNotSatisfyInputError, out=sys.stderr, root=None
+) -> None:
+ # when the solver outputs specs that do not satisfy the input and spack is used as a command
+ # line tool, we dump the incorrect output specs to json so users can upload them in bug reports
+ wrong_output = [(input, output) for input, output in e.input_to_output if output is not None]
+ no_output = [input for input, output in e.input_to_output if output is None]
+ if no_output:
+ tty.error(
+ "internal solver error: the following specs were not solved:\n - "
+ + "\n - ".join(str(s) for s in no_output),
+ stream=out,
+ )
+ if wrong_output:
+ msg = (
+ "internal solver error: the following specs were concretized, but do not satisfy the "
+ "input:\n - "
+ + "\n - ".join(str(s) for s, _ in wrong_output)
+ + "\n Please report a bug at https://github.com/spack/spack/issues"
+ )
+ # try to write the input/output specs to a temporary directory for bug reports
+ try:
+ tmpdir = tempfile.mkdtemp(prefix="spack-asp-", dir=root)
+ files = []
+ for i, (input, output) in enumerate(wrong_output, start=1):
+ in_file = os.path.join(tmpdir, f"input-{i}.json")
+ out_file = os.path.join(tmpdir, f"output-{i}.json")
+ files.append(in_file)
+ files.append(out_file)
+ with open(in_file, "w", encoding="utf-8") as f:
+ input.to_json(f)
+ with open(out_file, "w", encoding="utf-8") as f:
+ output.to_json(f)
+
+ msg += " and attach the following files:\n - " + "\n - ".join(files)
+ except Exception:
+ msg += "."
+ tty.error(msg, stream=out)
+
+
class SpackCommandError(Exception):
"""Raised when SpackCommand execution fails."""
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index bf2056d826d..c3846e5349d 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -162,6 +162,7 @@ class tty:
configure: Executable
make_jobs: int
make: MakeExecutable
+nmake: Executable
ninja: MakeExecutable
python_include: str
python_platlib: str
diff --git a/lib/spack/spack/package_base.py b/lib/spack/spack/package_base.py
index 4fa398e582b..7fa444d2e86 100644
--- a/lib/spack/spack/package_base.py
+++ b/lib/spack/spack/package_base.py
@@ -14,7 +14,6 @@
import functools
import glob
import hashlib
-import importlib
import io
import os
import re
@@ -28,7 +27,7 @@
import llnl.util.filesystem as fsys
import llnl.util.tty as tty
-from llnl.util.lang import classproperty, memoized
+from llnl.util.lang import ClassProperty, classproperty, memoized
import spack.config
import spack.dependency
@@ -701,10 +700,10 @@ class PackageBase(WindowsRPath, PackageViewMixin, metaclass=PackageMeta):
_verbose = None
#: Package homepage where users can find more information about the package
- homepage: Optional[str] = None
+ homepage: ClassProperty[Optional[str]] = None
#: Default list URL (place to find available versions)
- list_url: Optional[str] = None
+ list_url: ClassProperty[Optional[str]] = None
#: Link depth to which list_url should be searched for new versions
list_depth = 0
@@ -818,12 +817,12 @@ def package_dir(cls):
@classproperty
def module(cls):
- """Module object (not just the name) that this package is defined in.
+ """Module instance that this package class is defined in.
We use this to add variables to package modules. This makes
install() methods easier to write (e.g., can call configure())
"""
- return importlib.import_module(cls.__module__)
+ return sys.modules[cls.__module__]
@classproperty
def namespace(cls):
@@ -1821,7 +1820,7 @@ def _resource_stage(self, resource):
resource_stage_folder = "-".join(pieces)
return resource_stage_folder
- def do_test(self, dirty=False, externals=False):
+ def do_test(self, *, dirty=False, externals=False, timeout: Optional[int] = None):
if self.test_requires_compiler and not any(
lang in self.spec for lang in ("c", "cxx", "fortran")
):
@@ -1839,7 +1838,7 @@ def do_test(self, dirty=False, externals=False):
"verbose": tty.is_verbose(),
}
- self.tester.stand_alone_tests(kwargs)
+ self.tester.stand_alone_tests(kwargs, timeout=timeout)
def unit_test_check(self):
"""Hook for unit tests to assert things about package internals.
diff --git a/lib/spack/spack/solver/asp.py b/lib/spack/spack/solver/asp.py
index ec45dc47e2c..d3db57f3ea4 100644
--- a/lib/spack/spack/solver/asp.py
+++ b/lib/spack/spack/solver/asp.py
@@ -287,9 +287,33 @@ def specify(spec):
return spack.spec.Spec(spec)
-def remove_node(spec: spack.spec.Spec, facts: List[AspFunction]) -> List[AspFunction]:
- """Transformation that removes all "node" and "virtual_node" from the input list of facts."""
- return list(filter(lambda x: x.args[0] not in ("node", "virtual_node"), facts))
+def remove_facts(
+ *to_be_removed: str,
+) -> Callable[[spack.spec.Spec, List[AspFunction]], List[AspFunction]]:
+ """Returns a transformation function that removes facts from the input list of facts."""
+
+ def _remove(spec: spack.spec.Spec, facts: List[AspFunction]) -> List[AspFunction]:
+ return list(filter(lambda x: x.args[0] not in to_be_removed, facts))
+
+ return _remove
+
+
+def remove_build_deps(spec: spack.spec.Spec, facts: List[AspFunction]) -> List[AspFunction]:
+ build_deps = {x.args[2]: x.args[1] for x in facts if x.args[0] == "depends_on"}
+ result = []
+ for x in facts:
+ current_name = x.args[1]
+ if current_name in build_deps:
+ x.name = "build_requirement"
+ result.append(fn.attr("build_requirement", build_deps[current_name], x))
+ continue
+
+ if x.args[0] == "depends_on":
+ continue
+
+ result.append(x)
+
+ return result
def all_libcs() -> Set[spack.spec.Spec]:
@@ -1287,12 +1311,8 @@ def on_model(model):
result.raise_if_unsat()
if result.satisfiable and result.unsolved_specs and setup.concretize_everything:
- unsolved_str = Result.format_unsolved(result.unsolved_specs)
- raise InternalConcretizerError(
- "Internal Spack error: the solver completed but produced specs"
- " that do not satisfy the request. Please report a bug at "
- f"https://github.com/spack/spack/issues\n\t{unsolved_str}"
- )
+ raise OutputDoesNotSatisfyInputError(result.unsolved_specs)
+
if conc_cache_enabled:
CONC_CACHE.store(problem_repr, result, self.control.statistics, test=setup.tests)
concretization_stats = self.control.statistics
@@ -1735,15 +1755,17 @@ def define_variant(
pkg_fact(fn.variant_condition(name, vid, cond_id))
# record type so we can construct the variant when we read it back in
- self.gen.fact(fn.variant_type(vid, variant_def.variant_type.value))
+ self.gen.fact(fn.variant_type(vid, variant_def.variant_type.string))
if variant_def.sticky:
pkg_fact(fn.variant_sticky(vid))
# define defaults for this variant definition
- defaults = variant_def.make_default().value if variant_def.multi else [variant_def.default]
- for val in sorted(defaults):
- pkg_fact(fn.variant_default_value_from_package_py(vid, val))
+ if variant_def.multi:
+ for val in sorted(variant_def.make_default().values):
+ pkg_fact(fn.variant_default_value_from_package_py(vid, val))
+ else:
+ pkg_fact(fn.variant_default_value_from_package_py(vid, variant_def.default))
# define possible values for this variant definition
values = variant_def.values
@@ -1771,7 +1793,9 @@ def define_variant(
# 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)
+ variant_has_value.variants[name] = vt.VariantValue(
+ vt.VariantType.MULTI, name, (value.value,)
+ )
if value.when:
# the conditional value is always "possible", but it imposes its when condition as
@@ -1884,7 +1908,7 @@ def condition(
if not context:
context = ConditionContext()
- context.transform_imposed = remove_node
+ context.transform_imposed = remove_facts("node", "virtual_node")
if imposed_spec:
imposed_name = imposed_spec.name or imposed_name
@@ -1984,7 +2008,7 @@ def track_dependencies(input_spec, requirements):
return requirements + [fn.attr("track_dependencies", input_spec.name)]
def dependency_holds(input_spec, requirements):
- result = remove_node(input_spec, requirements) + [
+ result = remove_facts("node", "virtual_node")(input_spec, requirements) + [
fn.attr(
"dependency_holds", pkg.name, input_spec.name, dt.flag_to_string(t)
)
@@ -2174,7 +2198,10 @@ def emit_facts_from_requirement_rules(self, rules: List[RequirementRule]):
pkg_name, ConstraintOrigin.REQUIRE
)
if not virtual:
- context.transform_imposed = remove_node
+ context.transform_required = remove_build_deps
+ context.transform_imposed = remove_facts(
+ "node", "virtual_node", "depends_on"
+ )
# else: for virtuals we want to emit "node" and
# "virtual_node" in imposed specs
@@ -2236,16 +2263,18 @@ def external_packages(self):
if pkg_name not in self.pkgs:
continue
- self.gen.h2(f"External package: {pkg_name}")
# Check if the external package is buildable. If it is
# not then "external()" is a fact, unless we can
# reuse an already installed spec.
external_buildable = data.get("buildable", True)
+ externals = data.get("externals", [])
+ if not external_buildable or externals:
+ self.gen.h2(f"External package: {pkg_name}")
+
if not external_buildable:
self.gen.fact(fn.buildable_false(pkg_name))
# Read a list of all the specs for this package
- externals = data.get("externals", [])
candidate_specs = [
spack.spec.parse_with_version_concrete(x["spec"]) for x in externals
]
@@ -2334,6 +2363,8 @@ def preferred_variants(self, pkg_name):
if not preferred_variants:
return
+ self.gen.h2(f"Package preferences: {pkg_name}")
+
for variant_name in sorted(preferred_variants):
variant = preferred_variants[variant_name]
@@ -2346,7 +2377,7 @@ def preferred_variants(self, pkg_name):
)
continue
- for value in variant.value_as_tuple:
+ for value in variant.values:
for variant_def in variant_defs:
self.variant_values_from_specs.add((pkg_name, id(variant_def), value))
self.gen.fact(
@@ -2464,7 +2495,7 @@ def _spec_clauses(
if variant.value == ("*",):
continue
- for value in variant.value_as_tuple:
+ for value in variant.values:
# ensure that the value *can* be valid for the spec
if spec.name and not spec.concrete and not spack.repo.PATH.is_virtual(spec.name):
variant_defs = vt.prevalidate_variant_value(
@@ -2574,6 +2605,16 @@ def _spec_clauses(
# already-installed concrete specs.
if concrete_build_deps or dspec.depflag != dt.BUILD:
clauses.append(fn.attr("hash", dep.name, dep.dag_hash()))
+ elif not concrete_build_deps and dspec.depflag:
+ clauses.append(
+ fn.attr(
+ "concrete_build_dependency", spec.name, dep.name, dep.dag_hash()
+ )
+ )
+ for virtual_name in dspec.virtuals:
+ clauses.append(
+ fn.attr("virtual_on_build_edge", spec.name, dep.name, virtual_name)
+ )
# if the spec is abstract, descend into dependencies.
# if it's concrete, then the hashes above take care of dependency
@@ -3128,7 +3169,6 @@ def setup(
for pkg in sorted(self.pkgs):
self.gen.h2("Package rules: %s" % pkg)
self.pkg_rules(pkg, tests=self.tests)
- self.gen.h2("Package preferences: %s" % pkg)
self.preferred_variants(pkg)
self.gen.h1("Special variants")
@@ -3200,12 +3240,13 @@ def define_runtime_constraints(self) -> List[spack.spec.Spec]:
# FIXME (compiler as nodes): think of using isinstance(compiler_cls, WrappedCompiler)
# Add a dependency on the compiler wrapper
- recorder("*").depends_on(
- "compiler-wrapper",
- when=f"%{compiler.name}@{compiler.versions}",
- type="build",
- description=f"Add the compiler wrapper when using {compiler}",
- )
+ for language in ("c", "cxx", "fortran"):
+ recorder("*").depends_on(
+ "compiler-wrapper",
+ when=f"%[virtuals={language}] {compiler.name}@{compiler.versions}",
+ type="build",
+ description=f"Add the compiler wrapper when using {compiler} for {language}",
+ )
if not using_libc_compatibility():
continue
@@ -3267,15 +3308,13 @@ def literal_specs(self, specs):
# These facts are needed to compute the "condition_set" of the root
pkg_name = clause.args[1]
self.gen.fact(fn.mentioned_in_literal(trigger_id, root_name, pkg_name))
- elif clause_name == "depends_on":
- pkg_name = clause.args[2]
- self.gen.fact(fn.mentioned_in_literal(trigger_id, root_name, pkg_name))
requirements.append(
fn.attr(
"virtual_root" if spack.repo.PATH.is_virtual(spec.name) else "root", spec.name
)
)
+ requirements = [x for x in requirements if x.args[0] != "depends_on"]
cache[imposed_spec_key] = (effect_id, requirements)
self.gen.fact(fn.pkg_fact(spec.name, fn.condition_effect(condition_id, effect_id)))
@@ -3600,11 +3639,9 @@ def rule_body_from(self, when_spec: "spack.spec.Spec") -> Tuple[str, str]:
# (avoid adding virtuals everywhere, if a single edge needs it)
_, provider, virtual = clause.args
clause.args = "virtual_on_edge", node_placeholder, provider, virtual
- body_str = (
- f" {f',{os.linesep} '.join(str(x) for x in body_clauses)},\n"
- f" not external({node_variable}),\n"
- f" not runtime(Package)"
- ).replace(f'"{node_placeholder}"', f"{node_variable}")
+ body_str = ",\n".join(f" {x}" for x in body_clauses)
+ body_str += f",\n not external({node_variable})"
+ body_str = body_str.replace(f'"{node_placeholder}"', f"{node_variable}")
for old, replacement in when_substitutions.items():
body_str = body_str.replace(old, replacement)
return body_str, node_variable
@@ -3795,13 +3832,13 @@ def node_os(self, node, os):
def node_target(self, node, target):
self._arch(node).target = target
- def variant_selected(self, node, name, value, variant_type, variant_id):
+ def variant_selected(self, node, name: str, value: str, variant_type: str, variant_id):
spec = self._specs[node]
variant = spec.variants.get(name)
if not variant:
- spec.variants[name] = vt.VariantType(variant_type).variant_class(name, value)
+ spec.variants[name] = vt.VariantValue.from_concretizer(name, value, variant_type)
else:
- assert variant_type == vt.VariantType.MULTI.value, (
+ assert variant_type == "multi", (
f"Can't have multiple values for single-valued variant: "
f"{node}, {name}, {value}, {variant_type}, {variant_id}"
)
@@ -3825,6 +3862,17 @@ def external_spec_selected(self, node, idx):
)
self._specs[node].extra_attributes = spec_info.get("extra_attributes", {})
+ # Annotate compiler specs from externals
+ external_spec = spack.spec.Spec(spec_info["spec"])
+ external_spec_deps = external_spec.dependencies()
+ if len(external_spec_deps) > 1:
+ raise InvalidExternalError(
+ f"external spec {spec_info['spec']} cannot have more than one dependency"
+ )
+ elif len(external_spec_deps) == 1:
+ compiler_str = external_spec_deps[0]
+ self._specs[node].annotations.with_compiler(spack.spec.Spec(compiler_str))
+
# If this is an extension, update the dependencies to include the extendee
package = spack.repo.PATH.get_pkg_class(self._specs[node].fullname)(self._specs[node])
extendee_spec = package.extendee_spec
@@ -4180,10 +4228,10 @@ def _inject_patches_variant(root: spack.spec.Spec) -> None:
continue
patches = list(spec_to_patches[id(spec)])
- variant: vt.MultiValuedVariant = spec.variants.setdefault(
+ variant: vt.VariantValue = spec.variants.setdefault(
"patches", vt.MultiValuedVariant("patches", ())
)
- variant.value = tuple(p.sha256 for p in patches)
+ variant.set(*(p.sha256 for p in patches))
# FIXME: Monkey patches variant to store patches order
ordered_hashes = [(*p.ordering_key, p.sha256) for p in patches if p.ordering_key]
ordered_hashes.sort()
@@ -4651,13 +4699,9 @@ def solve_in_rounds(
break
if not result.specs:
- # This is also a problem: no specs were solved for, which
- # means we would be in a loop if we tried again
- unsolved_str = Result.format_unsolved(result.unsolved_specs)
- raise InternalConcretizerError(
- "Internal Spack error: a subset of input specs could not"
- f" be solved for.\n\t{unsolved_str}"
- )
+ # This is also a problem: no specs were solved for, which means we would be in a
+ # loop if we tried again
+ raise OutputDoesNotSatisfyInputError(result.unsolved_specs)
input_specs = list(x for (x, y) in result.unsolved_specs)
for spec in result.specs:
@@ -4687,6 +4731,19 @@ def __init__(self, msg):
self.constraint_type = None
+class OutputDoesNotSatisfyInputError(InternalConcretizerError):
+
+ def __init__(
+ self, input_to_output: List[Tuple[spack.spec.Spec, Optional[spack.spec.Spec]]]
+ ) -> None:
+ self.input_to_output = input_to_output
+ super().__init__(
+ "internal solver error: the solver completed but produced specs"
+ " that do not satisfy the request. Please report a bug at "
+ f"https://github.com/spack/spack/issues\n\t{Result.format_unsolved(input_to_output)}"
+ )
+
+
class SolverError(InternalConcretizerError):
"""For cases where the solver is unable to produce a solution.
@@ -4719,3 +4776,7 @@ class InvalidSpliceError(spack.error.SpackError):
class NoCompilerFoundError(spack.error.SpackError):
"""Raised when there is no possible compiler"""
+
+
+class InvalidExternalError(spack.error.SpackError):
+ """Raised when there is no possible compiler"""
diff --git a/lib/spack/spack/solver/concretize.lp b/lib/spack/spack/solver/concretize.lp
index de25bbf5dac..697a6d4d08d 100644
--- a/lib/spack/spack/solver/concretize.lp
+++ b/lib/spack/spack/solver/concretize.lp
@@ -175,12 +175,24 @@ trigger_node(TriggerID, Node, Node) :-
% Since we trigger the existence of literal nodes from a condition, we need to construct the condition_set/2
mentioned_in_literal(Root, Mentioned) :- mentioned_in_literal(TriggerID, Root, Mentioned), solve_literal(TriggerID).
-condition_set(node(min_dupe_id, Root), node(min_dupe_id, Root)) :- mentioned_in_literal(Root, Root).
+literal_node(Root, node(min_dupe_id, Root)) :- mentioned_in_literal(Root, Root).
-1 { condition_set(node(min_dupe_id, Root), node(0..Y-1, Mentioned)) : max_dupes(Mentioned, Y) } 1 :-
+1 { literal_node(Root, node(0..Y-1, Mentioned)) : max_dupes(Mentioned, Y) } 1 :-
mentioned_in_literal(Root, Mentioned), Mentioned != Root,
internal_error("must have exactly one condition_set for literals").
+1 { build_dependency_of_literal_node(LiteralNode, node(0..Y-1, BuildDependency)) : max_dupes(BuildDependency, Y) } 1 :-
+ literal_node(Root, LiteralNode),
+ build(LiteralNode),
+ not external(LiteralNode),
+ attr("build_requirement", LiteralNode, build_requirement("node", BuildDependency)).
+
+condition_set(node(min_dupe_id, Root), LiteralNode) :- literal_node(Root, LiteralNode).
+condition_set(LiteralNode, BuildNode) :- build_dependency_of_literal_node(LiteralNode, BuildNode).
+
+:- build_dependency_of_literal_node(LiteralNode, BuildNode),
+ not attr("depends_on", LiteralNode, BuildNode, "build").
+
% Discriminate between "roots" that have been explicitly requested, and roots that are deduced from "virtual roots"
explicitly_requested_root(node(min_dupe_id, Package)) :-
solve_literal(TriggerID),
@@ -472,10 +484,53 @@ provider(ProviderNode, VirtualNode) :- attr("provider_set", ProviderNode, Virtua
imposed_constraint(ID, "depends_on", A1, A2, A3),
internal_error("Build deps must land in exactly one duplicate").
-1 { build_requirement(node(X, Parent), node(0..Y-1, BuildDependency)) : max_dupes(BuildDependency, Y) } 1
+% If the parent is built, then we have a build_requirement on another node. For concrete nodes,
+% or external nodes, we don't since we are trimming their build dependencies.
+1 { attr("depends_on", node(X, Parent), node(0..Y-1, BuildDependency), "build") : max_dupes(BuildDependency, Y) } 1
:- attr("build_requirement", node(X, Parent), build_requirement("node", BuildDependency)),
- impose(ID, node(X, Parent)),
- imposed_constraint(ID,"build_requirement",Parent,_).
+ build(node(X, Parent)),
+ not external(node(X, Parent)).
+
+% Concrete nodes
+:- attr("build_requirement", ParentNode, build_requirement("node", BuildDependency)),
+ concrete(ParentNode),
+ not attr("concrete_build_dependency", ParentNode, BuildDependency, _).
+
+:- attr("build_requirement", ParentNode, build_requirement("node_version_satisfies", BuildDependency, Constraint)),
+ attr("concrete_build_dependency", ParentNode, BuildDependency, BuildDependencyHash),
+ not 1 { pkg_fact(BuildDependency, version_satisfies(Constraint, Version)) : hash_attr(BuildDependencyHash, "version", BuildDependency, Version) } 1.
+
+:- attr("build_requirement", ParentNode, build_requirement("provider_set", BuildDependency, Virtual)),
+ attr("concrete_build_dependency", ParentNode, BuildDependency, BuildDependencyHash),
+ attr("virtual_on_build_edge", ParentNode, BuildDependency, Virtual),
+ not 1 { pkg_fact(BuildDependency, version_satisfies(Constraint, Version)) : hash_attr(BuildDependencyHash, "version", BuildDependency, Version) } 1.
+
+% External nodes
+:- attr("build_requirement", ParentNode, build_requirement("node", BuildDependency)),
+ external(ParentNode),
+ not attr("external_build_requirement", ParentNode, build_requirement("node", BuildDependency)).
+
+candidate_external_version(Constraint, BuildDependency, Version)
+ :- attr("build_requirement", ParentNode, build_requirement("node_version_satisfies", BuildDependency, Constraint)),
+ external(ParentNode),
+ pkg_fact(BuildDependency, version_satisfies(Constraint, Version)).
+
+error(100, "External {0} cannot satisfy both {1} and {2}", BuildDependency, LiteralConstraint, ExternalConstraint)
+ :- attr("build_requirement", ParentNode, build_requirement("node_version_satisfies", BuildDependency, LiteralConstraint)),
+ external(ParentNode),
+ attr("external_build_requirement", ParentNode, build_requirement("node_version_satisfies", BuildDependency, ExternalConstraint)),
+ not 1 { pkg_fact(BuildDependency, version_satisfies(ExternalConstraint, Version)) : candidate_external_version(LiteralConstraint, BuildDependency, Version) }.
+
+
+% Asking for gcc@10 %gcc@9 shouldn't give us back an external gcc@10, just because of the hack
+% we have on externals
+:- attr("build_requirement", node(X, Parent), build_requirement("node", BuildDependency)),
+ Parent == BuildDependency,
+ external(node(X, Parent)).
+
+build_requirement(node(X, Parent), node(Y, BuildDependency)) :-
+ attr("depends_on", node(X, Parent), node(Y, BuildDependency), "build"),
+ attr("build_requirement", node(X, Parent), build_requirement("node", BuildDependency)).
1 { virtual_build_requirement(ParentNode, node(0..Y-1, Virtual)) : max_dupes(Virtual, Y) } 1
:- attr("dependency_holds", ParentNode, Virtual, "build"),
@@ -496,7 +551,6 @@ attr("node_version_satisfies", node(X, BuildDependency), Constraint) :-
attr("build_requirement", ParentNode, build_requirement("node_version_satisfies", BuildDependency, Constraint)),
build_requirement(ParentNode, node(X, BuildDependency)).
-attr("depends_on", node(X, Parent), node(Y, BuildDependency), "build") :- build_requirement(node(X, Parent), node(Y, BuildDependency)).
1 { attr("provider_set", node(X, BuildDependency), node(0..Y-1, Virtual)) : max_dupes(Virtual, Y) } 1 :-
attr("build_requirement", ParentNode, build_requirement("provider_set", BuildDependency, Virtual)),
@@ -882,6 +936,12 @@ requirement_weight(node(ID, Package), Group, W) :-
requirement_policy(Package, Group, "one_of"),
requirement_group_satisfied(node(ID, Package), Group).
+ { attr("build_requirement", node(ID, Package), BuildRequirement) : condition_requirement(TriggerID, "build_requirement", Package, BuildRequirement) } :-
+ pkg_fact(Package, condition_trigger(ConditionID, TriggerID)),
+ requirement_group_member(ConditionID, Package, Group),
+ activate_requirement(node(ID, Package), Group),
+ requirement_group(Package, Group).
+
requirement_group_satisfied(node(ID, Package), X) :-
1 { condition_holds(Y, node(ID, Package)) : requirement_group_member(Y, Package, X) } ,
requirement_policy(Package, X, "any_of"),
diff --git a/lib/spack/spack/solver/input_analysis.py b/lib/spack/spack/solver/input_analysis.py
index 1cc3258fc7a..4c340ce39ad 100644
--- a/lib/spack/spack/solver/input_analysis.py
+++ b/lib/spack/spack/solver/input_analysis.py
@@ -85,8 +85,10 @@ def is_virtual(self, name: str) -> bool:
def is_allowed_on_this_platform(self, *, pkg_name: str) -> bool:
"""Returns true if a package is allowed on the current host"""
pkg_cls = self.repo.get_pkg_class(pkg_name)
+ no_condition = spack.spec.Spec()
for when_spec, conditions in pkg_cls.requirements.items():
- if not when_spec.intersects(self._platform_condition):
+ # Restrict analysis to unconditional requirements
+ if when_spec != no_condition:
continue
for requirements, _, _ in conditions:
if not any(x.intersects(self._platform_condition) for x in requirements):
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index 17fa574e07e..b31f1f1cb51 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -111,22 +111,14 @@
__all__ = [
"CompilerSpec",
"Spec",
- "SpecParseError",
"UnsupportedPropagationError",
"DuplicateDependencyError",
- "DuplicateCompilerSpecError",
"UnsupportedCompilerError",
"DuplicateArchitectureError",
- "InconsistentSpecError",
"InvalidDependencyError",
- "NoProviderError",
- "MultipleProviderError",
"UnsatisfiableSpecNameError",
"UnsatisfiableVersionSpecError",
- "UnsatisfiableCompilerSpecError",
- "UnsatisfiableCompilerFlagSpecError",
"UnsatisfiableArchitectureSpecError",
- "UnsatisfiableProviderSpecError",
"UnsatisfiableDependencySpecError",
"AmbiguousHashError",
"InvalidHashError",
@@ -1437,7 +1429,7 @@ def with_compiler(self, compiler: "Spec") -> "SpecAnnotations":
def __repr__(self) -> str:
result = f"SpecAnnotations().with_spec_format({self.original_spec_format})"
if self.compiler_node_attribute:
- result += f"with_compiler({str(self.compiler_node_attribute)})"
+ result += f".with_compiler({str(self.compiler_node_attribute)})"
return result
@@ -1706,10 +1698,10 @@ def _dependencies_dict(self, depflag: dt.DepFlag = dt.ALL):
result[key] = list(group)
return result
- def _add_flag(self, name, value, propagate):
- """Called by the parser to add a known flag.
- Known flags currently include "arch"
- """
+ def _add_flag(
+ self, name: str, value: Union[str, bool], propagate: bool, concrete: bool
+ ) -> None:
+ """Called by the parser to add a known flag"""
if propagate and name in vt.RESERVED_NAMES:
raise UnsupportedPropagationError(
@@ -1718,6 +1710,7 @@ def _add_flag(self, name, value, propagate):
valid_flags = FlagMap.valid_compiler_flags()
if name == "arch" or name == "architecture":
+ assert type(value) is str, "architecture have a string value"
parts = tuple(value.split("-"))
plat, os, tgt = parts if len(parts) == 3 else (None, None, value)
self._set_architecture(platform=plat, os=os, target=tgt)
@@ -1731,19 +1724,15 @@ def _add_flag(self, name, value, propagate):
self.namespace = value
elif name in valid_flags:
assert self.compiler_flags is not None
+ assert type(value) is str, f"{name} must have a string value"
flags_and_propagation = spack.compilers.flags.tokenize_flags(value, propagate)
flag_group = " ".join(x for (x, y) in flags_and_propagation)
for flag, propagation in flags_and_propagation:
self.compiler_flags.add_flag(name, flag, propagation, flag_group)
else:
- # FIXME:
- # All other flags represent variants. 'foo=true' and 'foo=false'
- # map to '+foo' and '~foo' respectively. As such they need a
- # BoolValuedVariant instance.
- if str(value).upper() == "TRUE" or str(value).upper() == "FALSE":
- self.variants[name] = vt.BoolValuedVariant(name, value, propagate)
- else:
- self.variants[name] = vt.AbstractVariant(name, value, propagate)
+ self.variants[name] = vt.VariantValue.from_string_or_bool(
+ name, value, propagate=propagate, concrete=concrete
+ )
def _set_architecture(self, **kwargs):
"""Called by the parser to set the architecture."""
@@ -2351,6 +2340,7 @@ def to_node_dict(self, hash=ht.dag_hash):
[v.name for v in self.variants.values() if v.propagate], flag_names
)
)
+ d["abstract"] = sorted(v.name for v in self.variants.values() if not v.concrete)
if self.external:
d["external"] = {
@@ -3077,7 +3067,7 @@ def constrain(self, other, deps=True):
raise UnsatisfiableVersionSpecError(self.versions, other.versions)
for v in [x for x in other.variants if x in self.variants]:
- if not self.variants[v].compatible(other.variants[v]):
+ if not self.variants[v].intersects(other.variants[v]):
raise vt.UnsatisfiableVariantSpecError(self.variants[v], other.variants[v])
sarch, oarch = self.architecture, other.architecture
@@ -3404,7 +3394,7 @@ def satisfies(self, other: Union[str, "Spec"], deps: bool = True) -> bool:
return True
# If we have no dependencies, we can't satisfy any constraints.
- if not self._dependencies:
+ if not self._dependencies and self.original_spec_format() >= 5 and not self.external:
return False
# If we arrived here, the lhs root node satisfies the rhs root node. Now we need to check
@@ -3415,6 +3405,7 @@ def satisfies(self, other: Union[str, "Spec"], deps: bool = True) -> bool:
# verify the edge properties, cause everything is encoded in the hash of the nodes that
# will be verified later.
lhs_edges: Dict[str, Set[DependencySpec]] = collections.defaultdict(set)
+ mock_nodes_from_old_specfiles = set()
for rhs_edge in other.traverse_edges(root=False, cover="edges"):
# If we are checking for ^mpi we need to verify if there is any edge
if spack.repo.PATH.is_virtual(rhs_edge.spec.name):
@@ -3436,13 +3427,27 @@ def satisfies(self, other: Union[str, "Spec"], deps: bool = True) -> bool:
except KeyError:
return False
- candidates = current_node.dependencies(
- name=rhs_edge.spec.name,
- deptype=rhs_edge.depflag,
- virtuals=rhs_edge.virtuals or None,
- )
- if not candidates or not any(x.satisfies(rhs_edge.spec) for x in candidates):
- return False
+ if current_node.original_spec_format() < 5 or (
+ current_node.original_spec_format() >= 5 and current_node.external
+ ):
+ compiler_spec = current_node.annotations.compiler_node_attribute
+ if compiler_spec is None:
+ return False
+
+ mock_nodes_from_old_specfiles.add(compiler_spec)
+ # This checks that the single node compiler spec satisfies the request
+ # of a direct dependency. The check is not perfect, but based on heuristic.
+ if not compiler_spec.satisfies(rhs_edge.spec):
+ return False
+
+ else:
+ candidates = current_node.dependencies(
+ name=rhs_edge.spec.name,
+ deptype=rhs_edge.depflag,
+ virtuals=rhs_edge.virtuals or None,
+ )
+ if not candidates or not any(x.satisfies(rhs_edge.spec) for x in candidates):
+ return False
continue
@@ -3482,8 +3487,9 @@ def satisfies(self, other: Union[str, "Spec"], deps: bool = True) -> bool:
return False
# Edges have been checked above already, hence deps=False
+ lhs_nodes = [x for x in self.traverse(root=False)] + sorted(mock_nodes_from_old_specfiles)
return all(
- any(lhs.satisfies(rhs, deps=False) for lhs in self.traverse(root=False))
+ any(lhs.satisfies(rhs, deps=False) for lhs in lhs_nodes)
for rhs in other.traverse(root=False)
)
@@ -3957,6 +3963,8 @@ def format_attribute(match_object: Match) -> str:
except AttributeError:
if part == "compiler":
return "none"
+ elif part == "specfile_version":
+ return f"v{current.original_spec_format()}"
raise SpecFormatStringError(
f"Attempted to format attribute {attribute}. "
@@ -4492,7 +4500,7 @@ def __init__(self, spec: Spec):
def __setitem__(self, name, vspec):
# Raise a TypeError if vspec is not of the right type
- if not isinstance(vspec, vt.AbstractVariant):
+ if not isinstance(vspec, vt.VariantValue):
raise TypeError(
"VariantMap accepts only values of variant types "
f"[got {type(vspec).__name__} instead]"
@@ -4602,8 +4610,7 @@ def constrain(self, other: "VariantMap") -> bool:
changed = False
for k in other:
if k in self:
- # If they are not compatible raise an error
- if not self[k].compatible(other[k]):
+ if not self[k].intersects(other[k]):
raise vt.UnsatisfiableVariantSpecError(self[k], other[k])
# If they are compatible merge them
changed |= self[k].constrain(other[k])
@@ -4633,7 +4640,7 @@ def __str__(self):
bool_keys = []
kv_keys = []
for key in sorted_keys:
- if isinstance(self[key].value, bool):
+ if self[key].type == vt.VariantType.BOOL:
bool_keys.append(key)
else:
kv_keys.append(key)
@@ -4666,7 +4673,8 @@ def substitute_abstract_variants(spec: Spec):
unknown = []
for name, v in spec.variants.items():
if name == "dev_path":
- spec.variants.substitute(vt.SingleValuedVariant(name, v._original_value))
+ v.type = vt.VariantType.SINGLE
+ v.concrete = True
continue
elif name in vt.RESERVED_NAMES:
continue
@@ -4689,7 +4697,7 @@ def substitute_abstract_variants(spec: Spec):
if rest:
continue
- new_variant = pkg_variant.make_variant(v._original_value)
+ new_variant = pkg_variant.make_variant(*v.values)
pkg_variant.validate_or_raise(new_variant, spec.name)
spec.variants.substitute(new_variant)
@@ -4807,6 +4815,7 @@ def from_node_dict(cls, node):
spec.architecture = ArchSpec.from_dict(node)
propagated_names = node.get("propagate", [])
+ abstract_variants = set(node.get("abstract", ()))
for name, values in node.get("parameters", {}).items():
propagate = name in propagated_names
if name in _valid_compiler_flags:
@@ -4814,8 +4823,8 @@ def from_node_dict(cls, node):
for val in values:
spec.compiler_flags.add_flag(name, val, propagate)
else:
- spec.variants[name] = vt.MultiValuedVariant.from_node_dict(
- name, values, propagate=propagate
+ spec.variants[name] = vt.VariantValue.from_node_dict(
+ name, values, propagate=propagate, abstract=name in abstract_variants
)
spec.external_path = None
@@ -4840,7 +4849,7 @@ def from_node_dict(cls, node):
patches = node["patches"]
if len(patches) > 0:
mvar = spec.variants.setdefault("patches", vt.MultiValuedVariant("patches", ()))
- mvar.value = patches
+ mvar.set(*patches)
# FIXME: Monkey patches mvar to store patches order
mvar._patches_in_order_of_appearance = patches
@@ -5165,25 +5174,6 @@ def eval_conditional(string):
return eval(string, valid_variables)
-class SpecParseError(spack.error.SpecError):
- """Wrapper for ParseError for when we're parsing specs."""
-
- def __init__(self, parse_error):
- super().__init__(parse_error.message)
- self.string = parse_error.string
- self.pos = parse_error.pos
-
- @property
- def long_message(self):
- return "\n".join(
- [
- " Encountered when parsing spec:",
- " %s" % self.string,
- " %s^" % (" " * self.pos),
- ]
- )
-
-
class InvalidVariantForSpecError(spack.error.SpecError):
"""Raised when an invalid conditional variant is specified."""
@@ -5201,14 +5191,6 @@ class DuplicateDependencyError(spack.error.SpecError):
"""Raised when the same dependency occurs in a spec twice."""
-class MultipleVersionError(spack.error.SpecError):
- """Raised when version constraints occur in a spec twice."""
-
-
-class DuplicateCompilerSpecError(spack.error.SpecError):
- """Raised when the same compiler occurs in a spec twice."""
-
-
class UnsupportedCompilerError(spack.error.SpecError):
"""Raised when the user asks for a compiler spack doesn't know about."""
@@ -5217,11 +5199,6 @@ class DuplicateArchitectureError(spack.error.SpecError):
"""Raised when the same architecture occurs in a spec twice."""
-class InconsistentSpecError(spack.error.SpecError):
- """Raised when two nodes in the same spec DAG have inconsistent
- constraints."""
-
-
class InvalidDependencyError(spack.error.SpecError):
"""Raised when a dependency in a spec is not actually a dependency
of the package."""
@@ -5233,30 +5210,6 @@ def __init__(self, pkg, deps):
)
-class NoProviderError(spack.error.SpecError):
- """Raised when there is no package that provides a particular
- virtual dependency.
- """
-
- def __init__(self, vpkg):
- super().__init__("No providers found for virtual package: '%s'" % vpkg)
- self.vpkg = vpkg
-
-
-class MultipleProviderError(spack.error.SpecError):
- """Raised when there is no package that provides a particular
- virtual dependency.
- """
-
- def __init__(self, vpkg, providers):
- """Takes the name of the vpkg"""
- super().__init__(
- "Multiple providers found for '%s': %s" % (vpkg, [str(s) for s in providers])
- )
- self.vpkg = vpkg
- self.providers = providers
-
-
class UnsatisfiableSpecNameError(spack.error.UnsatisfiableSpecError):
"""Raised when two specs aren't even for the same package."""
@@ -5271,20 +5224,6 @@ def __init__(self, provided, required):
super().__init__(provided, required, "version")
-class UnsatisfiableCompilerSpecError(spack.error.UnsatisfiableSpecError):
- """Raised when a spec compiler conflicts with package constraints."""
-
- def __init__(self, provided, required):
- super().__init__(provided, required, "compiler")
-
-
-class UnsatisfiableCompilerFlagSpecError(spack.error.UnsatisfiableSpecError):
- """Raised when a spec variant conflicts with package constraints."""
-
- def __init__(self, provided, required):
- super().__init__(provided, required, "compiler_flags")
-
-
class UnsatisfiableArchitectureSpecError(spack.error.UnsatisfiableSpecError):
"""Raised when a spec architecture conflicts with package constraints."""
@@ -5292,14 +5231,6 @@ def __init__(self, provided, required):
super().__init__(provided, required, "architecture")
-class UnsatisfiableProviderSpecError(spack.error.UnsatisfiableSpecError):
- """Raised when a provider is supplied but constraints don't match
- a vpkg requirement"""
-
- def __init__(self, provided, required):
- super().__init__(provided, required, "provider")
-
-
# TODO: get rid of this and be more specific about particular incompatible
# dep constraints
class UnsatisfiableDependencySpecError(spack.error.UnsatisfiableSpecError):
diff --git a/lib/spack/spack/spec_parser.py b/lib/spack/spack/spec_parser.py
index 6739dc9aef1..f6392c33808 100644
--- a/lib/spack/spack/spec_parser.py
+++ b/lib/spack/spack/spec_parser.py
@@ -62,7 +62,7 @@
import sys
import traceback
import warnings
-from typing import Iterator, List, Optional, Tuple
+from typing import Iterator, List, Optional, Tuple, Union
from llnl.util.tty import color
@@ -99,8 +99,7 @@
VERSION_RANGE = rf"(?:(?:{VERSION})?:(?:{VERSION}(?!\s*=))?)"
VERSION_LIST = rf"(?:{VERSION_RANGE}|{VERSION})(?:\s*,\s*(?:{VERSION_RANGE}|{VERSION}))*"
-#: Regex with groups to use for splitting (optionally propagated) key-value pairs
-SPLIT_KVP = re.compile(rf"^({NAME})(==?)(.*)$")
+SPLIT_KVP = re.compile(rf"^({NAME})(:?==?)(.*)$")
#: Regex with groups to use for splitting %[virtuals=...] tokens
SPLIT_COMPILER_TOKEN = re.compile(rf"^%\[virtuals=({VALUE}|{QUOTED_VALUE})]\s*(.*)$")
@@ -135,8 +134,8 @@ class SpecTokens(TokenBase):
# Variants
PROPAGATED_BOOL_VARIANT = rf"(?:(?:\+\+|~~|--)\s*{NAME})"
BOOL_VARIANT = rf"(?:[~+-]\s*{NAME})"
- PROPAGATED_KEY_VALUE_PAIR = rf"(?:{NAME}==(?:{VALUE}|{QUOTED_VALUE}))"
- KEY_VALUE_PAIR = rf"(?:{NAME}=(?:{VALUE}|{QUOTED_VALUE}))"
+ PROPAGATED_KEY_VALUE_PAIR = rf"(?:{NAME}:?==(?:{VALUE}|{QUOTED_VALUE}))"
+ KEY_VALUE_PAIR = rf"(?:{NAME}:?=(?:{VALUE}|{QUOTED_VALUE}))"
# Compilers
COMPILER_AND_VERSION = rf"(?:%\s*(?:{NAME})(?:[\s]*)@\s*(?:{VERSION_LIST}))"
COMPILER = rf"(?:%\s*(?:{NAME}))"
@@ -370,10 +369,10 @@ def raise_parsing_error(string: str, cause: Optional[Exception] = None):
"""Raise a spec parsing error with token context."""
raise SpecParsingError(string, self.ctx.current_token, self.literal_str) from cause
- def add_flag(name: str, value: str, propagate: bool):
+ def add_flag(name: str, value: Union[str, bool], propagate: bool, concrete: bool):
"""Wrapper around ``Spec._add_flag()`` that adds parser context to errors raised."""
try:
- initial_spec._add_flag(name, value, propagate)
+ initial_spec._add_flag(name, value, propagate, concrete)
except Exception as e:
raise_parsing_error(str(e), e)
@@ -428,29 +427,34 @@ def warn_if_after_compiler(token: str):
warn_if_after_compiler(self.ctx.current_token.value)
elif self.ctx.accept(SpecTokens.BOOL_VARIANT):
+ name = self.ctx.current_token.value[1:].strip()
variant_value = self.ctx.current_token.value[0] == "+"
- add_flag(self.ctx.current_token.value[1:].strip(), variant_value, propagate=False)
+ add_flag(name, variant_value, propagate=False, concrete=True)
warn_if_after_compiler(self.ctx.current_token.value)
elif self.ctx.accept(SpecTokens.PROPAGATED_BOOL_VARIANT):
+ name = self.ctx.current_token.value[2:].strip()
variant_value = self.ctx.current_token.value[0:2] == "++"
- add_flag(self.ctx.current_token.value[2:].strip(), variant_value, propagate=True)
+ add_flag(name, variant_value, propagate=True, concrete=True)
warn_if_after_compiler(self.ctx.current_token.value)
elif self.ctx.accept(SpecTokens.KEY_VALUE_PAIR):
- match = SPLIT_KVP.match(self.ctx.current_token.value)
- assert match, "SPLIT_KVP and KEY_VALUE_PAIR do not agree."
+ name, value = self.ctx.current_token.value.split("=", maxsplit=1)
+ concrete = name.endswith(":")
+ if concrete:
+ name = name[:-1]
- name, _, value = match.groups()
- add_flag(name, strip_quotes_and_unescape(value), propagate=False)
+ add_flag(
+ name, strip_quotes_and_unescape(value), propagate=False, concrete=concrete
+ )
warn_if_after_compiler(self.ctx.current_token.value)
elif self.ctx.accept(SpecTokens.PROPAGATED_KEY_VALUE_PAIR):
- match = SPLIT_KVP.match(self.ctx.current_token.value)
- assert match, "SPLIT_KVP and PROPAGATED_KEY_VALUE_PAIR do not agree."
-
- name, _, value = match.groups()
- add_flag(name, strip_quotes_and_unescape(value), propagate=True)
+ name, value = self.ctx.current_token.value.split("==", maxsplit=1)
+ concrete = name.endswith(":")
+ if concrete:
+ name = name[:-1]
+ add_flag(name, strip_quotes_and_unescape(value), propagate=True, concrete=concrete)
warn_if_after_compiler(self.ctx.current_token.value)
elif self.ctx.expect(SpecTokens.DAG_HASH):
@@ -509,7 +513,8 @@ def parse(self):
while True:
if self.ctx.accept(SpecTokens.KEY_VALUE_PAIR):
name, value = self.ctx.current_token.value.split("=", maxsplit=1)
- name = name.strip("'\" ")
+ if name.endswith(":"):
+ name = name[:-1]
value = value.strip("'\" ").split(",")
attributes[name] = value
if name not in ("deptypes", "virtuals"):
diff --git a/lib/spack/spack/test/build_environment.py b/lib/spack/spack/test/build_environment.py
index db76cd0cabd..9da886cb0bb 100644
--- a/lib/spack/spack/test/build_environment.py
+++ b/lib/spack/spack/test/build_environment.py
@@ -1,9 +1,12 @@
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import collections
+import multiprocessing
import os
import posixpath
import sys
+from typing import Dict, Optional, Tuple
import pytest
@@ -828,3 +831,88 @@ def test_extra_rpaths_is_set(
assert os.environ["SPACK_COMPILER_EXTRA_RPATHS"] == expected_rpaths
else:
assert "SPACK_COMPILER_EXTRA_RPATHS" not in os.environ
+
+
+class _TestProcess:
+ calls: Dict[str, int] = collections.defaultdict(int)
+ terminated = False
+ runtime = 0
+
+ def __init__(self, *, target, args):
+ self.alive = None
+ self.exitcode = 0
+ self._reset()
+
+ def start(self):
+ self.calls["start"] += 1
+ self.alive = True
+
+ def is_alive(self):
+ self.calls["is_alive"] += 1
+ return self.alive
+
+ def join(self, timeout: Optional[int] = None):
+ self.calls["join"] += 1
+ if timeout is not None and timeout > self.runtime:
+ self.alive = False
+
+ def terminate(self):
+ self.calls["terminate"] += 1
+ self._set_terminated()
+ self.alive = False
+
+ @classmethod
+ def _set_terminated(cls):
+ cls.terminated = True
+
+ @classmethod
+ def _reset(cls):
+ cls.calls.clear()
+ cls.terminated = False
+
+
+class _TestPipe:
+ def close(self):
+ pass
+
+ def recv(self):
+ if _TestProcess.terminated is True:
+ return 1
+ return 0
+
+
+def _pipe_fn(*, duplex: bool = False) -> Tuple[_TestPipe, _TestPipe]:
+ return _TestPipe(), _TestPipe()
+
+
+@pytest.fixture()
+def mock_build_process(monkeypatch):
+ monkeypatch.setattr(spack.build_environment, "BuildProcess", _TestProcess)
+ monkeypatch.setattr(multiprocessing, "Pipe", _pipe_fn)
+
+ def _factory(*, runtime: int):
+ _TestProcess.runtime = runtime
+
+ return _factory
+
+
+@pytest.mark.parametrize(
+ "runtime,timeout,expected_result,expected_calls",
+ [
+ # execution time < timeout
+ (2, 5, 0, {"start": 1, "join": 1, "is_alive": 1}),
+ # execution time > timeout
+ (5, 2, 1, {"start": 1, "join": 2, "is_alive": 1, "terminate": 1}),
+ ],
+)
+def test_build_process_timeout(
+ mock_build_process, runtime, timeout, expected_result, expected_calls
+):
+ """Tests that we make the correct function calls in different timeout scenarios."""
+ mock_build_process(runtime=runtime)
+ result = spack.build_environment.start_build_process(
+ pkg=None, function=None, kwargs={}, timeout=timeout
+ )
+
+ assert result == expected_result
+ assert _TestProcess.calls == expected_calls
diff --git a/lib/spack/spack/test/cmd/ci.py b/lib/spack/spack/test/cmd/ci.py
index b1201efbe74..da1ce50c77e 100644
--- a/lib/spack/spack/test/cmd/ci.py
+++ b/lib/spack/spack/test/cmd/ci.py
@@ -873,10 +873,6 @@ def test_push_to_build_cache(
ci.copy_stage_logs_to_artifacts(concrete_spec, str(logs_dir))
assert "spack-build-out.txt.gz" in os.listdir(logs_dir)
- dl_dir = scratch / "download_dir"
- buildcache_cmd("download", "--spec-file", json_path, "--path", str(dl_dir))
- assert len(os.listdir(dl_dir)) == 2
-
def test_push_to_build_cache_exceptions(monkeypatch, tmp_path, capsys):
def push_or_raise(*args, **kwargs):
diff --git a/lib/spack/spack/test/concretization/core.py b/lib/spack/spack/test/concretization/core.py
index 0e6458725db..6d3b2f57a50 100644
--- a/lib/spack/spack/test/concretization/core.py
+++ b/lib/spack/spack/test/concretization/core.py
@@ -1831,10 +1831,7 @@ def test_solve_in_rounds_all_unsolved(self, monkeypatch, mock_packages):
monkeypatch.setattr(spack.solver.asp.Result, "unsolved_specs", simulate_unsolved_property)
monkeypatch.setattr(spack.solver.asp.Result, "specs", list())
- with pytest.raises(
- spack.solver.asp.InternalConcretizerError,
- match="a subset of input specs could not be solved for",
- ):
+ with pytest.raises(spack.solver.asp.OutputDoesNotSatisfyInputError):
list(solver.solve_in_rounds(specs))
def test_coconcretize_reuse_and_virtuals(self):
@@ -3336,3 +3333,110 @@ def test_specifying_compilers_with_virtuals_syntax(default_mock_concretization):
assert mpich["fortran"].satisfies("gcc")
assert mpich["c"].satisfies("llvm")
assert mpich["cxx"].satisfies("llvm")
+
+
+@pytest.mark.regression("49847")
+@pytest.mark.xfail(sys.platform == "win32", reason="issues with install mockery")
+def test_reuse_when_input_specifies_build_dep(install_mockery, do_not_check_runtimes_on_reuse):
+ """Test that we can reuse a spec when specifying build dependencies in the input"""
+ pkgb_old = spack.concretize.concretize_one(spack.spec.Spec("pkg-b@0.9 %gcc@9"))
+ PackageInstaller([pkgb_old.package], fake=True, explicit=True).install()
+
+ with spack.config.override("concretizer:reuse", True):
+ result = spack.concretize.concretize_one("pkg-b %gcc")
+ assert pkgb_old.dag_hash() == result.dag_hash()
+
+ result = spack.concretize.concretize_one("pkg-a ^pkg-b %gcc@9")
+ assert pkgb_old.dag_hash() == result["pkg-b"].dag_hash()
+ assert result.satisfies("%gcc@9")
+
+ result = spack.concretize.concretize_one("pkg-a %gcc@10 ^pkg-b %gcc@9")
+ assert pkgb_old.dag_hash() == result["pkg-b"].dag_hash()
+
+
+@pytest.mark.regression("49847")
+def test_reuse_when_requiring_build_dep(
+ install_mockery, do_not_check_runtimes_on_reuse, mutable_config
+):
+ """Test that we can reuse a spec when specifying build dependencies in requirements"""
+ mutable_config.set("packages:all:require", "%gcc")
+ pkgb_old = spack.concretize.concretize_one(spack.spec.Spec("pkg-b@0.9"))
+ PackageInstaller([pkgb_old.package], fake=True, explicit=True).install()
+
+ with spack.config.override("concretizer:reuse", True):
+ result = spack.concretize.concretize_one("pkg-b")
+ assert pkgb_old.dag_hash() == result.dag_hash(), result.tree()
+
+
+@pytest.mark.regression("50167")
+def test_input_analysis_and_conditional_requirements(default_mock_concretization):
+ """Tests that input analysis doesn't account for conditional requirement
+ to discard possible dependencies.
+
+ If the requirement is conditional, and impossible to achieve on the current
+ platform, the valid search space is still the complement of the condition that
+ activates the requirement.
+ """
+ libceed = default_mock_concretization("libceed")
+ assert libceed["libxsmm"].satisfies("@main")
+ assert libceed["libxsmm"].satisfies("platform=test")
+
+
+@pytest.mark.parametrize(
+ "compiler_str,expected,not_expected",
+ [
+ # Compiler queries are as specific as the constraint on the external
+ ("gcc@10", ["%gcc", "%gcc@10"], ["%clang", "%gcc@9"]),
+ ("gcc", ["%gcc"], ["%clang", "%gcc@9", "%gcc@10"]),
+ ],
+)
+@pytest.mark.regression("49841")
+def test_installing_external_with_compilers_directly(
+ compiler_str, expected, not_expected, mutable_config, mock_packages, tmp_path
+):
+ """Tests that version constraints are taken into account for compiler annotations
+ on externals
+ """
+ spec_str = f"libelf@0.8.12 %{compiler_str}"
+ packages_yaml = syaml.load_config(
+ f"""
+packages:
+ libelf:
+ buildable: false
+ externals:
+ - spec: {spec_str}
+ prefix: {tmp_path / 'libelf'}
+"""
+ )
+ mutable_config.set("packages", packages_yaml["packages"])
+ s = spack.concretize.concretize_one(spec_str)
+
+ assert s.external
+ assert all(s.satisfies(c) for c in expected)
+ assert all(not s.satisfies(c) for c in not_expected)
+
+
+@pytest.mark.regression("49841")
+def test_using_externals_with_compilers(mutable_config, mock_packages, tmp_path):
+ """Tests that version constraints are taken into account for compiler annotations
+ on externals, even imposed as transitive deps.
+ """
+ packages_yaml = syaml.load_config(
+ f"""
+packages:
+ libelf:
+ buildable: false
+ externals:
+ - spec: libelf@0.8.12 %gcc@10
+ prefix: {tmp_path / 'libelf'}
+"""
+ )
+ mutable_config.set("packages", packages_yaml["packages"])
+
+ with pytest.raises(spack.error.SpackError):
+ spack.concretize.concretize_one("dyninst%gcc@10.2.1 ^libelf@0.8.12 %gcc@:9")
+
+ s = spack.concretize.concretize_one("dyninst%gcc@10.2.1 ^libelf@0.8.12 %gcc@10:")
+
+ libelf = s["libelf"]
+ assert libelf.external and libelf.satisfies("%gcc")
diff --git a/lib/spack/spack/test/concretization/errors.py b/lib/spack/spack/test/concretization/errors.py
index 6060d588cb5..779a84419ff 100644
--- a/lib/spack/spack/test/concretization/errors.py
+++ b/lib/spack/spack/test/concretization/errors.py
@@ -2,11 +2,15 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from io import StringIO
+
import pytest
import spack.concretize
import spack.config
+import spack.main
import spack.solver.asp
+import spack.spec
version_error_messages = [
"Cannot satisfy",
@@ -60,3 +64,31 @@ def test_error_messages(error_messages, config_set, spec, mock_packages, mutable
for em in error_messages:
assert em in str(e.value)
+
+
+def test_internal_error_handling_formatting(tmp_path):
+ log = StringIO()
+ input_to_output = [
+ (spack.spec.Spec("foo+x"), spack.spec.Spec("foo@=1.0~x")),
+ (spack.spec.Spec("bar+y"), spack.spec.Spec("x@=1.0~y")),
+ (spack.spec.Spec("baz+z"), None),
+ ]
+ spack.main._handle_solver_bug(
+ spack.solver.asp.OutputDoesNotSatisfyInputError(input_to_output), root=tmp_path, out=log
+ )
+
+ output = log.getvalue()
+ assert "the following specs were not solved:\n - baz+z\n" in output
+ assert (
+ "the following specs were concretized, but do not satisfy the input:\n"
+ " - foo+x\n"
+ " - bar+y\n"
+ ) in output
+
+ files = {f.name: str(f) for f in tmp_path.glob("spack-asp-*/*.json")}
+ assert {"input-1.json", "input-2.json", "output-1.json", "output-2.json"} == set(files.keys())
+
+ assert spack.spec.Spec.from_specfile(files["input-1.json"]) == spack.spec.Spec("foo+x")
+ assert spack.spec.Spec.from_specfile(files["input-2.json"]) == spack.spec.Spec("bar+y")
+ assert spack.spec.Spec.from_specfile(files["output-1.json"]) == spack.spec.Spec("foo@=1.0~x")
+ assert spack.spec.Spec.from_specfile(files["output-2.json"]) == spack.spec.Spec("x@=1.0~y")
diff --git a/lib/spack/spack/test/concretization/requirements.py b/lib/spack/spack/test/concretization/requirements.py
index fe768611de7..c381a2d6d7d 100644
--- a/lib/spack/spack/test/concretization/requirements.py
+++ b/lib/spack/spack/test/concretization/requirements.py
@@ -1239,3 +1239,68 @@ def test_virtual_requirement_respects_any_of(concretize_scope, mock_packages):
with pytest.raises(spack.error.SpackError):
spack.concretize.concretize_one("mpileaks ^[virtuals=mpi] zmpi")
+
+
+@pytest.mark.parametrize(
+ "packages_yaml,expected_reuse,expected_contraints",
+ [
+ (
+ """
+packages:
+ all:
+ require:
+ - "%gcc"
+ """,
+ True,
+ # To minimize installed specs we reuse pkg-b compiler, since the requirement allows it
+ ["%gcc@9"],
+ ),
+ (
+ """
+packages:
+ all:
+ require:
+ - "%gcc@10"
+ """,
+ False,
+ ["%gcc@10"],
+ ),
+ (
+ """
+packages:
+ all:
+ require:
+ - "%gcc"
+ pkg-a:
+ require:
+ - "%gcc@10"
+ """,
+ True,
+ ["%gcc@10"],
+ ),
+ ],
+)
+@pytest.mark.regression("49847")
+def test_requirements_on_compilers_and_reuse(
+ concretize_scope, mock_packages, packages_yaml, expected_reuse, expected_contraints
+):
+ """Tests that we can require compilers with `%` in configuration files, and still get reuse
+ of specs (even though reused specs have no build dependency in the ASP encoding).
+ """
+ input_spec = "pkg-a"
+
+ reused_spec = spack.concretize.concretize_one("pkg-b@0.9 %gcc@9")
+ reused_nodes = list(reused_spec.traverse())
+ update_packages_config(packages_yaml)
+ root_specs = [Spec(input_spec)]
+
+ with spack.config.override("concretizer:reuse", True):
+ solver = spack.solver.asp.Solver()
+ setup = spack.solver.asp.SpackSolverSetup()
+ result, _, _ = solver.driver.solve(setup, root_specs, reuse=reused_nodes)
+ pkga = result.specs[0]
+ is_pkgb_reused = pkga["pkg-b"].dag_hash() == reused_spec.dag_hash()
+
+ assert is_pkgb_reused == expected_reuse
+ for c in expected_contraints:
+ assert pkga.satisfies(c), print(pkga.tree())
diff --git a/lib/spack/spack/test/abi_splicing.py b/lib/spack/spack/test/concretization/splicing.py
similarity index 100%
rename from lib/spack/spack/test/abi_splicing.py
rename to lib/spack/spack/test/concretization/splicing.py
diff --git a/lib/spack/spack/test/data/database/index.json.v7_v8.json.gz b/lib/spack/spack/test/data/database/index.json.v7_v8.json.gz
new file mode 100644
index 00000000000..d4e4ecb5642
Binary files /dev/null and b/lib/spack/spack/test/data/database/index.json.v7_v8.json.gz differ
diff --git a/lib/spack/spack/test/data/unparse/grads.txt b/lib/spack/spack/test/data/unparse/grads.txt
index 5075803828d..7a122a4f175 100644
--- a/lib/spack/spack/test/data/unparse/grads.txt
+++ b/lib/spack/spack/test/data/unparse/grads.txt
@@ -47,10 +47,10 @@ class Grads(AutotoolsPackage):
depends_on('readline')
depends_on('pkgconfig', type='build')
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set('SUPPLIBS', '/')
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set('GADDIR', self.prefix.data)
@run_after('install')
diff --git a/lib/spack/spack/test/data/unparse/llvm.txt b/lib/spack/spack/test/data/unparse/llvm.txt
index fadabb2377c..ac747bbcff9 100644
--- a/lib/spack/spack/test/data/unparse/llvm.txt
+++ b/lib/spack/spack/test/data/unparse/llvm.txt
@@ -517,7 +517,7 @@ class Llvm(CMakePackage, CudaPackage):
return (None, flags, None)
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""When using %clang, add only its ld.lld-$ver and/or ld.lld to our PATH"""
if self.compiler.name in ["clang", "apple-clang"]:
for lld in "ld.lld-{0}".format(self.compiler.version.version[0]), "ld.lld":
@@ -528,7 +528,7 @@ class Llvm(CMakePackage, CudaPackage):
os.symlink(bin, sym)
env.prepend_path("PATH", self.stage.path)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+clang" in self.spec:
env.set("CC", join_path(self.spec.prefix.bin, "clang"))
env.set("CXX", join_path(self.spec.prefix.bin, "clang++"))
diff --git a/lib/spack/spack/test/data/unparse/mfem.txt b/lib/spack/spack/test/data/unparse/mfem.txt
index 22f06e460f5..e52f1758dd4 100644
--- a/lib/spack/spack/test/data/unparse/mfem.txt
+++ b/lib/spack/spack/test/data/unparse/mfem.txt
@@ -318,7 +318,7 @@ class Mfem(Package, CudaPackage, ROCmPackage):
patch('mfem-4.0.0-makefile-syntax-fix.patch', when='@4.0.0')
phases = ['configure', 'build', 'install']
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset('MFEM_DIR')
env.unset('MFEM_BUILD_DIR')
diff --git a/lib/spack/spack/test/data/unparse/py-torch.txt b/lib/spack/spack/test/data/unparse/py-torch.txt
index 6d627cdfae7..0c2468d4f7c 100644
--- a/lib/spack/spack/test/data/unparse/py-torch.txt
+++ b/lib/spack/spack/test/data/unparse/py-torch.txt
@@ -281,7 +281,7 @@ class PyTorch(PythonPackage, CudaPackage):
"caffe2/CMakeLists.txt",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set environment variables used to control the build.
PyTorch's ``setup.py`` is a thin wrapper around ``cmake``.
diff --git a/lib/spack/spack/test/data/unparse/trilinos.txt b/lib/spack/spack/test/data/unparse/trilinos.txt
index 4b2a2a318ed..ac35d884850 100644
--- a/lib/spack/spack/test/data/unparse/trilinos.txt
+++ b/lib/spack/spack/test/data/unparse/trilinos.txt
@@ -440,7 +440,7 @@ class Trilinos(CMakePackage, CudaPackage):
url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-{0}.tar.gz"
return url.format(version.dashed)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(self, env: EnvironmentModifications, dependent_spec: Spec) -> None:
if "+cuda" in self.spec:
# currently Trilinos doesn't perform the memory fence so
# it relies on blocking CUDA kernel launch. This is needed
@@ -453,7 +453,7 @@ class Trilinos(CMakePackage, CudaPackage):
else:
self.spec.kokkos_cxx = spack_cxx
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+cuda" in spec and "+wrapper" in spec:
if "+mpi" in spec:
@@ -847,7 +847,7 @@ class Trilinos(CMakePackage, CudaPackage):
)
filter_file(r"-lpytrilinos", "", "%s/Makefile.export.Trilinos" % self.prefix.include)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+exodus" in self.spec:
env.prepend_path("PYTHONPATH", self.prefix.lib)
diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py
index 425a6b3f0bc..7fe94a43bb1 100644
--- a/lib/spack/spack/test/database.py
+++ b/lib/spack/spack/test/database.py
@@ -5,6 +5,7 @@
import contextlib
import datetime
import functools
+import gzip
import json
import os
import pathlib
@@ -32,6 +33,7 @@
import spack.database
import spack.deptypes as dt
import spack.package_base
+import spack.paths
import spack.repo
import spack.spec
import spack.store
@@ -1243,3 +1245,26 @@ def test_query_with_predicate_fn(database):
specs = database.query(predicate_fn=lambda x: not spack.repo.PATH.exists(x.spec.name))
assert not specs
+
+
+@pytest.mark.regression("49964")
+def test_querying_reindexed_database_specfilev5(tmp_path):
+ """Tests that we can query a reindexed database from before compilers as dependencies,
+ and get appropriate results for % and similar selections.
+ """
+ test_path = pathlib.Path(spack.paths.test_path)
+ zipfile = test_path / "data" / "database" / "index.json.v7_v8.json.gz"
+ with gzip.open(str(zipfile), "rt", encoding="utf-8") as f:
+ data = json.load(f)
+
+ index_json = tmp_path / spack.database._DB_DIRNAME / spack.database.INDEX_JSON_FILE
+ index_json.parent.mkdir(parents=True)
+ index_json.write_text(json.dumps(data))
+
+ db = spack.database.Database(str(tmp_path))
+
+ specs = db.query("%gcc")
+
+ assert len(specs) == 8
+ assert len([x for x in specs if x.external]) == 2
+ assert len([x for x in specs if x.original_spec_format() < 5]) == 8
diff --git a/lib/spack/spack/test/env.py b/lib/spack/spack/test/env.py
index a888c88d99b..64476624d0d 100644
--- a/lib/spack/spack/test/env.py
+++ b/lib/spack/spack/test/env.py
@@ -20,7 +20,7 @@
SpackEnvironmentViewError,
_error_on_nonempty_view_dir,
)
-from spack.spec_list import UndefinedReferenceError
+from spack.environment.list import UndefinedReferenceError
pytestmark = pytest.mark.not_on_windows("Envs are not supported on windows")
@@ -107,7 +107,8 @@ def test_env_change_spec_in_definition(tmp_path, mock_packages, mutable_mock_env
assert any(x.intersects("mpileaks@2.1%gcc") for x in e.user_specs)
- e.change_existing_spec(spack.spec.Spec("mpileaks@2.2"), list_name="desired_specs")
+ with e:
+ e.change_existing_spec(spack.spec.Spec("mpileaks@2.2"), list_name="desired_specs")
e.write()
# Ensure changed specs are in memory
@@ -776,10 +777,8 @@ def test_env_with_include_def_missing(mutable_mock_env_path, mock_packages):
"""
)
- e = ev.Environment(env_path)
- with e:
- with pytest.raises(UndefinedReferenceError, match=r"which does not appear"):
- e.concretize()
+ with pytest.raises(UndefinedReferenceError, match=r"which is not defined"):
+ _ = ev.Environment(env_path)
@pytest.mark.regression("41292")
diff --git a/lib/spack/spack/test/fetch_strategy.py b/lib/spack/spack/test/fetch_strategy.py
index d0451e77c25..f349da03ef1 100644
--- a/lib/spack/spack/test/fetch_strategy.py
+++ b/lib/spack/spack/test/fetch_strategy.py
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from io import StringIO
+
import pytest
from spack import fetch_strategy
@@ -13,3 +15,136 @@ def test_fetchstrategy_bad_url_scheme():
with pytest.raises(ValueError):
fetcher = fetch_strategy.from_url_scheme("bogus-scheme://example.com/a/b/c") # noqa: F841
+
+
+@pytest.mark.parametrize(
+ "expected,total_bytes",
+ [
+ (" 0.00 B", 0),
+ (" 999.00 B", 999),
+ (" 1.00 KB", 1000),
+ (" 2.05 KB", 2048),
+ (" 1.00 MB", 1e6),
+ (" 12.30 MB", 1.23e7),
+ (" 1.23 GB", 1.23e9),
+ (" 999.99 GB", 9.9999e11),
+ ("5000.00 GB", 5e12),
+ ],
+)
+def test_format_bytes(expected, total_bytes):
+ assert fetch_strategy._format_bytes(total_bytes) == expected
+
+
+@pytest.mark.parametrize(
+ "expected,total_bytes,elapsed",
+ [
+ (" 0.0 B/s", 0, 0), # no time passed -- defaults to 1s.
+ (" 0.0 B/s", 0, 1),
+ (" 999.0 B/s", 999, 1),
+ (" 1.0 KB/s", 1000, 1),
+ (" 500.0 B/s", 1000, 2),
+ (" 2.0 KB/s", 2048, 1),
+ (" 1.0 MB/s", 1e6, 1),
+ (" 500.0 KB/s", 1e6, 2),
+ (" 12.3 MB/s", 1.23e7, 1),
+ (" 1.2 GB/s", 1.23e9, 1),
+ (" 999.9 GB/s", 9.999e11, 1),
+ ("5000.0 GB/s", 5e12, 1),
+ ],
+)
+def test_format_speed(expected, total_bytes, elapsed):
+ assert fetch_strategy._format_speed(total_bytes, elapsed) == expected
+
+
+def test_fetch_progress_unknown_size():
+ # time stamps in seconds, with 0.1s delta except 1.5 -> 1.55.
+ time_stamps = iter([1.0, 1.5, 1.55, 2.0, 3.0, 5.0, 5.5, 5.5])
+ progress = fetch_strategy.FetchProgress(total_bytes=None, get_time=lambda: next(time_stamps))
+ assert progress.start_time == 1.0
+ out = StringIO()
+
+ progress.advance(1000, out)
+ assert progress.last_printed == 1.5
+ progress.advance(50, out)
+ assert progress.last_printed == 1.5 # does not print, too early after last print
+ progress.advance(2000, out)
+ assert progress.last_printed == 2.0
+ progress.advance(3000, out)
+ assert progress.last_printed == 3.0
+ progress.advance(4000, out)
+ assert progress.last_printed == 5.0
+ progress.advance(4000, out)
+ assert progress.last_printed == 5.5
+ progress.print(final=True, out=out) # finalize download
+
+ outputs = [
+ "\r [ | ] 1.00 KB @ 2.0 KB/s",
+ "\r [ / ] 3.05 KB @ 3.0 KB/s",
+ "\r [ - ] 6.05 KB @ 3.0 KB/s",
+ "\r [ \\ ] 10.05 KB @ 2.5 KB/s", # have to escape \ here but is aligned in output
+ "\r [ | ] 14.05 KB @ 3.1 KB/s",
+ "\r [100%] 14.05 KB @ 3.1 KB/s\n", # final print: no spinner; newline
+ ]
+
+ assert out.getvalue() == "".join(outputs)
+
+
+def test_fetch_progress_known_size():
+ time_stamps = iter([1.0, 1.5, 3.0, 4.0, 4.0])
+ progress = fetch_strategy.FetchProgress(total_bytes=6000, get_time=lambda: next(time_stamps))
+ out = StringIO()
+ progress.advance(1000, out) # time 1.5
+ progress.advance(2000, out) # time 3.0
+ progress.advance(3000, out) # time 4.0
+ progress.print(final=True, out=out)
+
+ outputs = [
+ "\r [ 17%] 1.00 KB @ 2.0 KB/s",
+ "\r [ 50%] 3.00 KB @ 1.5 KB/s",
+ "\r [100%] 6.00 KB @ 2.0 KB/s",
+ "\r [100%] 6.00 KB @ 2.0 KB/s\n", # final print has newline
+ ]
+
+ assert out.getvalue() == "".join(outputs)
+
+
+def test_fetch_progress_disabled():
+ """When disabled, FetchProgress shouldn't print anything when advanced"""
+
+ def get_time():
+ raise RuntimeError("Should not be called")
+
+ progress = fetch_strategy.FetchProgress(enabled=False, get_time=get_time)
+ out = StringIO()
+ progress.advance(1000, out)
+ progress.advance(2000, out)
+ progress.print(final=True, out=out)
+ assert progress.last_printed == 0
+ assert not out.getvalue()
+
+
+@pytest.mark.parametrize(
+ "header,value,total_bytes",
+ [
+ ("Content-Length", "1234", 1234),
+ ("Content-Length", "0", 0),
+ ("Content-Length", "-10", 0),
+ ("Content-Length", "not a number", 0),
+ ("Not-Content-Length", "1234", 0),
+ ],
+)
+def test_fetch_progress_from_headers(header, value, total_bytes):
+ time_stamps = iter([1.0, 1.5, 3.0, 4.0, 4.0])
+ progress = fetch_strategy.FetchProgress.from_headers(
+ {header: value}, get_time=lambda: next(time_stamps), enabled=True
+ )
+ assert progress.total_bytes == total_bytes
+ assert progress.enabled
+ assert progress.start_time == 1.0
+
+
+def test_fetch_progress_from_headers_disabled():
+ progress = fetch_strategy.FetchProgress.from_headers(
+ {"Content-Length": "1234"}, get_time=lambda: 1.0, enabled=False
+ )
+ assert not progress.enabled
diff --git a/lib/spack/spack/test/spec_list.py b/lib/spack/spack/test/spec_list.py
index 275d267fa69..fdafdbf05d7 100644
--- a/lib/spack/spack/test/spec_list.py
+++ b/lib/spack/spack/test/spec_list.py
@@ -6,53 +6,56 @@
import pytest
import spack.concretize
+from spack.environment.list import SpecListParser
from spack.installer import PackageInstaller
from spack.spec import Spec
-from spack.spec_list import SpecList
+
+DEFAULT_EXPANSION = [
+ "mpileaks",
+ "zmpi@1.0",
+ "mpich@3.0",
+ {"matrix": [["hypre"], ["%gcc@4.5.0", "%clang@3.3"]]},
+ "libelf",
+]
+
+DEFAULT_CONSTRAINTS = [
+ [Spec("mpileaks")],
+ [Spec("zmpi@1.0")],
+ [Spec("mpich@3.0")],
+ [Spec("hypre"), Spec("%gcc@4.5.0")],
+ [Spec("hypre"), Spec("%clang@3.3")],
+ [Spec("libelf")],
+]
+
+DEFAULT_SPECS = [
+ Spec("mpileaks"),
+ Spec("zmpi@1.0"),
+ Spec("mpich@3.0"),
+ Spec("hypre%gcc@4.5.0"),
+ Spec("hypre%clang@3.3"),
+ Spec("libelf"),
+]
+
+
+@pytest.fixture()
+def parser_and_speclist():
+ """Default configuration of parser and user spec list for tests"""
+ parser = SpecListParser()
+ parser.parse_definitions(
+ data=[
+ {"gccs": ["%gcc@4.5.0"]},
+ {"clangs": ["%clang@3.3"]},
+ {"mpis": ["zmpi@1.0", "mpich@3.0"]},
+ ]
+ )
+ result = parser.parse_user_specs(
+ name="specs",
+ yaml_list=["mpileaks", "$mpis", {"matrix": [["hypre"], ["$gccs", "$clangs"]]}, "libelf"],
+ )
+ return parser, result
class TestSpecList:
- default_input = ["mpileaks", "$mpis", {"matrix": [["hypre"], ["$gccs", "$clangs"]]}, "libelf"]
-
- default_reference = {
- "gccs": SpecList("gccs", ["%gcc@4.5.0"]),
- "clangs": SpecList("clangs", ["%clang@3.3"]),
- "mpis": SpecList("mpis", ["zmpi@1.0", "mpich@3.0"]),
- }
-
- default_expansion = [
- "mpileaks",
- "zmpi@1.0",
- "mpich@3.0",
- {"matrix": [["hypre"], ["%gcc@4.5.0", "%clang@3.3"]]},
- "libelf",
- ]
-
- default_constraints = [
- [Spec("mpileaks")],
- [Spec("zmpi@1.0")],
- [Spec("mpich@3.0")],
- [Spec("hypre"), Spec("%gcc@4.5.0")],
- [Spec("hypre"), Spec("%clang@3.3")],
- [Spec("libelf")],
- ]
-
- default_specs = [
- Spec("mpileaks"),
- Spec("zmpi@1.0"),
- Spec("mpich@3.0"),
- Spec("hypre%gcc@4.5.0"),
- Spec("hypre%clang@3.3"),
- Spec("libelf"),
- ]
-
- def test_spec_list_expansions(self):
- speclist = SpecList("specs", self.default_input, self.default_reference)
-
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
-
@pytest.mark.regression("28749")
@pytest.mark.parametrize(
"specs,expected",
@@ -86,116 +89,87 @@ def test_spec_list_expansions(self):
],
)
def test_spec_list_constraint_ordering(self, specs, expected):
- speclist = SpecList("specs", specs)
- expected_specs = [Spec(x) for x in expected]
- assert speclist.specs == expected_specs
+ result = SpecListParser().parse_user_specs(name="specs", yaml_list=specs)
+ assert result.specs == [Spec(x) for x in expected]
- def test_spec_list_add(self):
- speclist = SpecList("specs", self.default_input, self.default_reference)
+ def test_mock_spec_list(self, parser_and_speclist):
+ """Tests expected properties on the default mock spec list"""
+ parser, mock_list = parser_and_speclist
+ assert mock_list.specs_as_yaml_list == DEFAULT_EXPANSION
+ assert mock_list.specs_as_constraints == DEFAULT_CONSTRAINTS
+ assert mock_list.specs == DEFAULT_SPECS
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
+ def test_spec_list_add(self, parser_and_speclist):
+ parser, mock_list = parser_and_speclist
+ mock_list.add("libdwarf")
- speclist.add("libdwarf")
+ assert mock_list.specs_as_yaml_list == DEFAULT_EXPANSION + ["libdwarf"]
+ assert mock_list.specs_as_constraints == DEFAULT_CONSTRAINTS + [[Spec("libdwarf")]]
+ assert mock_list.specs == DEFAULT_SPECS + [Spec("libdwarf")]
- assert speclist.specs_as_yaml_list == self.default_expansion + ["libdwarf"]
- assert speclist.specs_as_constraints == self.default_constraints + [[Spec("libdwarf")]]
- assert speclist.specs == self.default_specs + [Spec("libdwarf")]
+ def test_spec_list_remove(self, parser_and_speclist):
+ parser, mock_list = parser_and_speclist
+ mock_list.remove("libelf")
- def test_spec_list_remove(self):
- speclist = SpecList("specs", self.default_input, self.default_reference)
+ assert mock_list.specs_as_yaml_list + ["libelf"] == DEFAULT_EXPANSION
+ assert mock_list.specs_as_constraints + [[Spec("libelf")]] == DEFAULT_CONSTRAINTS
+ assert mock_list.specs + [Spec("libelf")] == DEFAULT_SPECS
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
-
- speclist.remove("libelf")
-
- assert speclist.specs_as_yaml_list + ["libelf"] == self.default_expansion
-
- assert speclist.specs_as_constraints + [[Spec("libelf")]] == self.default_constraints
-
- assert speclist.specs + [Spec("libelf")] == self.default_specs
-
- def test_spec_list_update_reference(self):
- speclist = SpecList("specs", self.default_input, self.default_reference)
-
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
-
- new_mpis = SpecList("mpis", self.default_reference["mpis"].yaml_list)
- new_mpis.add("mpich@3.3")
- new_reference = self.default_reference.copy()
- new_reference["mpis"] = new_mpis
-
- speclist.update_reference(new_reference)
-
- expansion = list(self.default_expansion)
- expansion.insert(3, "mpich@3.3")
- constraints = list(self.default_constraints)
- constraints.insert(3, [Spec("mpich@3.3")])
- specs = list(self.default_specs)
- specs.insert(3, Spec("mpich@3.3"))
-
- assert speclist.specs_as_yaml_list == expansion
- assert speclist.specs_as_constraints == constraints
- assert speclist.specs == specs
-
- def test_spec_list_extension(self):
- speclist = SpecList("specs", self.default_input, self.default_reference)
-
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
-
- new_ref = self.default_reference.copy()
- otherlist = SpecList("specs", ["zlib", {"matrix": [["callpath"], ["%intel@18"]]}], new_ref)
-
- speclist.extend(otherlist)
-
- assert speclist.specs_as_yaml_list == (
- self.default_expansion + otherlist.specs_as_yaml_list
+ def test_spec_list_extension(self, parser_and_speclist):
+ parser, mock_list = parser_and_speclist
+ other_list = parser.parse_user_specs(
+ name="specs", yaml_list=[{"matrix": [["callpath"], ["%intel@18"]]}]
)
- assert speclist.specs == self.default_specs + otherlist.specs
- assert speclist._reference is new_ref
+ mock_list.extend(other_list)
+
+ assert mock_list.specs_as_yaml_list == (DEFAULT_EXPANSION + other_list.specs_as_yaml_list)
+ assert mock_list.specs == DEFAULT_SPECS + other_list.specs
+
+ def test_spec_list_nested_matrices(self, parser_and_speclist):
+ parser, _ = parser_and_speclist
- def test_spec_list_nested_matrices(self):
inner_matrix = [{"matrix": [["zlib", "libelf"], ["%gcc", "%intel"]]}]
outer_addition = ["+shared", "~shared"]
outer_matrix = [{"matrix": [inner_matrix, outer_addition]}]
- speclist = SpecList("specs", outer_matrix)
+ result = parser.parse_user_specs(name="specs", yaml_list=outer_matrix)
expected_components = itertools.product(
["zlib", "libelf"], ["%gcc", "%intel"], ["+shared", "~shared"]
)
expected = [Spec(" ".join(combo)) for combo in expected_components]
- assert set(speclist.specs) == set(expected)
+ assert set(result.specs) == set(expected)
@pytest.mark.regression("16897")
def test_spec_list_recursion_specs_as_constraints(self):
input = ["mpileaks", "$mpis", {"matrix": [["hypre"], ["$%gccs", "$%clangs"]]}, "libelf"]
- reference = {
- "gccs": SpecList("gccs", ["gcc@4.5.0"]),
- "clangs": SpecList("clangs", ["clang@3.3"]),
- "mpis": SpecList("mpis", ["zmpi@1.0", "mpich@3.0"]),
- }
-
- speclist = SpecList("specs", input, reference)
-
- assert speclist.specs_as_yaml_list == self.default_expansion
- assert speclist.specs_as_constraints == self.default_constraints
- assert speclist.specs == self.default_specs
-
- def test_spec_list_matrix_exclude(self, mock_packages):
- # Test on non-boolean variants for regression for #16841
- matrix = [
- {"matrix": [["multivalue-variant"], ["foo=bar", "foo=baz"]], "exclude": ["foo=bar"]}
+ definitions = [
+ {"gccs": ["gcc@4.5.0"]},
+ {"clangs": ["clang@3.3"]},
+ {"mpis": ["zmpi@1.0", "mpich@3.0"]},
]
- speclist = SpecList("specs", matrix)
- assert len(speclist.specs) == 1
+
+ parser = SpecListParser()
+ parser.parse_definitions(data=definitions)
+ result = parser.parse_user_specs(name="specs", yaml_list=input)
+
+ assert result.specs_as_yaml_list == DEFAULT_EXPANSION
+ assert result.specs_as_constraints == DEFAULT_CONSTRAINTS
+ assert result.specs == DEFAULT_SPECS
+
+ @pytest.mark.regression("16841")
+ def test_spec_list_matrix_exclude(self, mock_packages):
+ parser = SpecListParser()
+ result = parser.parse_user_specs(
+ name="specs",
+ yaml_list=[
+ {
+ "matrix": [["multivalue-variant"], ["foo=bar", "foo=baz"]],
+ "exclude": ["foo=bar"],
+ }
+ ],
+ )
+ assert len(result.specs) == 1
def test_spec_list_exclude_with_abstract_hashes(self, mock_packages, install_mockery):
# Put mpich in the database so it can be referred to by hash.
@@ -205,9 +179,10 @@ def test_spec_list_exclude_with_abstract_hashes(self, mock_packages, install_moc
# Create matrix and exclude +debug, which excludes the first mpich after its abstract hash
# is resolved.
- speclist = SpecList(
- "specs",
- [
+ parser = SpecListParser()
+ result = parser.parse_user_specs(
+ name="specs",
+ yaml_list=[
{
"matrix": [
["mpileaks"],
@@ -220,5 +195,5 @@ def test_spec_list_exclude_with_abstract_hashes(self, mock_packages, install_moc
)
# Ensure that only mpich~debug is selected, and that the assembled spec remains abstract.
- assert len(speclist.specs) == 1
- assert speclist.specs[0] == Spec(f"mpileaks ^callpath ^mpich/{mpich_2.dag_hash(5)}")
+ assert len(result.specs) == 1
+ assert result.specs[0] == Spec(f"mpileaks ^callpath ^mpich/{mpich_2.dag_hash(5)}")
diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py
index eee7791baa4..28788aadf62 100644
--- a/lib/spack/spack/test/spec_semantics.py
+++ b/lib/spack/spack/test/spec_semantics.py
@@ -638,7 +638,7 @@ def test_multivalued_variant_2(self):
a = Spec("multivalue-variant foo=bar")
b = Spec("multivalue-variant foo=bar,baz")
# The specs are abstract and they **could** be constrained
- assert a.satisfies(b)
+ assert b.satisfies(a) and not a.satisfies(b)
# An abstract spec can instead be constrained
assert a.constrain(b)
@@ -973,13 +973,10 @@ def test_spec_formatting_bad_formats(self, default_mock_concretization, fmt_str)
with pytest.raises(SpecFormatStringError):
spec.format(fmt_str)
- def test_combination_of_wildcard_or_none(self):
- # Test that using 'none' and another value raises
- with pytest.raises(spack.spec_parser.SpecParsingError, match="cannot be combined"):
- Spec("multivalue-variant foo=none,bar")
-
- # Test that using wildcard and another value raises
- with pytest.raises(spack.spec_parser.SpecParsingError, match="cannot be combined"):
+ def test_wildcard_is_invalid_variant_value(self):
+ """The spec string x=* is parsed as a multi-valued variant with values the empty set.
+ That excludes * as a literal variant value."""
+ with pytest.raises(spack.spec_parser.SpecParsingError, match="cannot use reserved value"):
Spec("multivalue-variant foo=*,bar")
def test_errors_in_variant_directive(self):
@@ -1368,6 +1365,18 @@ def test_splice_swap_names_mismatch_virtuals(self, default_mock_concretization,
with pytest.raises(spack.spec.SpliceError, match="virtual"):
vt.splice(vh, transitive)
+ def test_adaptor_optflags(self):
+ """Tests that we can obtain the list of optflags, and debugflags,
+ from the compiler adaptor, and that this list is taken from the
+ appropriate compiler package.
+ """
+ # pkg-a depends on c, so only the gcc compiler should be chosen
+ spec = spack.concretize.concretize_one(Spec("pkg-a %gcc"))
+ assert "-Otestopt" in spec.package.compiler.opt_flags
+ # This is not set, make sure we get an empty list
+ for x in spec.package.compiler.debug_flags:
+ pass
+
def test_spec_override(self):
init_spec = Spec("pkg-a foo=baz foobar=baz cflags=-O3 cxxflags=-O1")
change_spec = Spec("pkg-a foo=fee cflags=-O2")
diff --git a/lib/spack/spack/test/spec_syntax.py b/lib/spack/spack/test/spec_syntax.py
index 1a80540c042..d3ac7344cce 100644
--- a/lib/spack/spack/test/spec_syntax.py
+++ b/lib/spack/spack/test/spec_syntax.py
@@ -633,6 +633,23 @@ def _specfile_for(spec_str, filename):
],
"zlib %[virtuals=fortran] gcc@14.1 %[virtuals=c,cxx] clang",
),
+ # test := and :== syntax for key value pairs
+ (
+ "gcc languages:=c,c++",
+ [
+ Token(SpecTokens.UNQUALIFIED_PACKAGE_NAME, "gcc"),
+ Token(SpecTokens.KEY_VALUE_PAIR, "languages:=c,c++"),
+ ],
+ "gcc languages:='c,c++'",
+ ),
+ (
+ "gcc languages:==c,c++",
+ [
+ Token(SpecTokens.UNQUALIFIED_PACKAGE_NAME, "gcc"),
+ Token(SpecTokens.PROPAGATED_KEY_VALUE_PAIR, "languages:==c,c++"),
+ ],
+ "gcc languages:=='c,c++'",
+ ),
],
)
def test_parse_single_spec(spec_str, tokens, expected_roundtrip, mock_git_test_package):
diff --git a/lib/spack/spack/test/spec_yaml.py b/lib/spack/spack/test/spec_yaml.py
index 13f7b65a1f8..a3b09a2e66f 100644
--- a/lib/spack/spack/test/spec_yaml.py
+++ b/lib/spack/spack/test/spec_yaml.py
@@ -433,6 +433,10 @@ def test_load_json_specfiles(specfile, expected_hash, reader_cls):
assert s2.format("{compiler.name}") == "gcc"
assert s2.format("{compiler.version}") != "none"
+ # Ensure satisfies still works with compilers
+ assert s2.satisfies("%gcc")
+ assert s2.satisfies("%gcc@9.4.0")
+
def test_anchorify_1():
"""Test that anchorify replaces duplicate values with references to a single instance, and
diff --git a/lib/spack/spack/test/util/package_hash.py b/lib/spack/spack/test/util/package_hash.py
index ad35b66a868..72ad61e9719 100644
--- a/lib/spack/spack/test/util/package_hash.py
+++ b/lib/spack/spack/test/util/package_hash.py
@@ -334,20 +334,20 @@ def test_remove_complex_package_logic_filtered():
"package_spec,expected_hash",
[
("amdfftw", "tivb752zddjgvfkogfs7cnnvp5olj6co"),
- ("grads", "rrlmwml3f2frdnqavmro3ias66h5b2ce"),
- ("llvm", "nufffum5dabmaf4l5tpfcblnbfjknvd3"),
+ ("grads", "lomrsppasfxegyamz4r33zgwiqkveftv"),
+ ("llvm", "paicamlvy5jkgxw4xnacaxahrixe3f3i"),
# has @when("@4.1.0") and raw unicode literals
- ("mfem", "whwftpqbjvzncmb52oz6izkanbha2uji"),
- ("mfem@4.0.0", "whwftpqbjvzncmb52oz6izkanbha2uji"),
- ("mfem@4.1.0", "bpi7of3xelo7fr3ta2lm6bmiruijnxcg"),
+ ("mfem", "slf5qyyyhuj66mo5lpuhkrs35akh2zck"),
+ ("mfem@4.0.0", "slf5qyyyhuj66mo5lpuhkrs35akh2zck"),
+ ("mfem@4.1.0", "yo3ymaulytctas67zjn663ixw5cfyh5u"),
# has @when("@1.5.0:")
- ("py-torch", "qs7djgqn7dy7r3ps4g7hv2pjvjk4qkhd"),
- ("py-torch@1.0", "qs7djgqn7dy7r3ps4g7hv2pjvjk4qkhd"),
- ("py-torch@1.6", "p4ine4hc6f2ik2f2wyuwieslqbozll5w"),
+ ("py-torch", "m3ucsddqr7hjevtgx4cad34nrtqgyjfg"),
+ ("py-torch@1.0", "m3ucsddqr7hjevtgx4cad34nrtqgyjfg"),
+ ("py-torch@1.6", "insaxs6bq34rvyhajdbyr4wddqeqb2t3"),
# has a print with multiple arguments
("legion", "bq2etsik5l6pbryxmbhfhzynci56ruy4"),
# has nested `with when()` blocks and loops
- ("trilinos", "vqrgscjrla4hi7bllink7v6v6dwxgc2p"),
+ ("trilinos", "ojbtbu3p6gpa42sbilblo2ioanvhouxu"),
],
)
def test_package_hash_consistency(package_spec, expected_hash):
diff --git a/lib/spack/spack/test/variant.py b/lib/spack/spack/test/variant.py
index 1fb6a6ef973..d32bb35fb33 100644
--- a/lib/spack/spack/test/variant.py
+++ b/lib/spack/spack/test/variant.py
@@ -12,7 +12,6 @@
import spack.variant
from spack.spec import Spec, VariantMap
from spack.variant import (
- AbstractVariant,
BoolValuedVariant,
DuplicateVariantError,
InconsistentValidationError,
@@ -22,6 +21,7 @@
SingleValuedVariant,
UnsatisfiableVariantSpecError,
Variant,
+ VariantValue,
disjoint_sets,
)
@@ -29,173 +29,108 @@
class TestMultiValuedVariant:
def test_initialization(self):
# Basic properties
- a = MultiValuedVariant("foo", "bar,baz")
- assert repr(a) == "MultiValuedVariant('foo', 'bar,baz')"
- assert str(a) == "foo=bar,baz"
+ a = MultiValuedVariant("foo", ("bar", "baz"))
+ assert str(a) == "foo:=bar,baz"
+ assert a.values == ("bar", "baz")
assert a.value == ("bar", "baz")
assert "bar" in a
assert "baz" in a
- assert eval(repr(a)) == a
-
- # Spaces are trimmed
- b = MultiValuedVariant("foo", "bar, baz")
- assert repr(b) == "MultiValuedVariant('foo', 'bar, baz')"
- assert str(b) == "foo=bar,baz"
- assert b.value == ("bar", "baz")
- assert "bar" in b
- assert "baz" in b
- assert a == b
- assert hash(a) == hash(b)
- assert eval(repr(b)) == a
# Order is not important
- c = MultiValuedVariant("foo", "baz, bar")
- assert repr(c) == "MultiValuedVariant('foo', 'baz, bar')"
- assert str(c) == "foo=bar,baz"
- assert c.value == ("bar", "baz")
+ c = MultiValuedVariant("foo", ("baz", "bar"))
+ assert str(c) == "foo:=bar,baz"
+ assert c.values == ("bar", "baz")
assert "bar" in c
assert "baz" in c
assert a == c
assert hash(a) == hash(c)
- assert eval(repr(c)) == a
# Check the copy
d = a.copy()
- assert repr(a) == repr(d)
assert str(a) == str(d)
- assert d.value == ("bar", "baz")
+ assert d.values == ("bar", "baz")
assert "bar" in d
assert "baz" in d
assert a == d
assert a is not d
assert hash(a) == hash(d)
- assert eval(repr(d)) == a
def test_satisfies(self):
- a = MultiValuedVariant("foo", "bar,baz")
- b = MultiValuedVariant("foo", "bar")
- c = MultiValuedVariant("fee", "bar,baz")
- d = MultiValuedVariant("foo", "True")
+ a = MultiValuedVariant("foo", ("bar", "baz"))
+ b = MultiValuedVariant("foo", ("bar",))
+ c = MultiValuedVariant("fee", ("bar", "baz"))
+ d = MultiValuedVariant("foo", (True,))
- # 'foo=bar,baz' satisfies 'foo=bar'
- assert a.satisfies(b)
-
- # 'foo=bar' does not satisfy 'foo=bar,baz'
- assert not b.satisfies(a)
-
- # 'foo=bar,baz' does not satisfy 'foo=bar,baz' and vice-versa
- assert not a.satisfies(c)
- assert not c.satisfies(a)
-
- # Implicit type conversion for variants of other types
+ # concrete, different values do not satisfy each other
+ assert not a.satisfies(b) and not b.satisfies(a)
+ assert not a.satisfies(c) and not c.satisfies(a)
+ # SingleValuedVariant and MultiValuedVariant with the same single concrete value do satisfy
+ # eachother
b_sv = SingleValuedVariant("foo", "bar")
- assert b.satisfies(b_sv)
- d_sv = SingleValuedVariant("foo", "True")
- assert d.satisfies(d_sv)
- almost_d_bv = SingleValuedVariant("foo", "true")
- assert not d.satisfies(almost_d_bv)
+ assert b.satisfies(b_sv) and b_sv.satisfies(b)
+ d_sv = SingleValuedVariant("foo", True)
+ assert d.satisfies(d_sv) and d_sv.satisfies(d)
+ almost_d_bv = SingleValuedVariant("foo", True)
+ assert d.satisfies(almost_d_bv)
- d_bv = BoolValuedVariant("foo", "True")
- assert d.satisfies(d_bv)
- # This case is 'peculiar': the two BV instances are
- # equivalent, but if converted to MV they are not
- # as MV is case sensitive with respect to 'True' and 'False'
- almost_d_bv = BoolValuedVariant("foo", "true")
- assert not d.satisfies(almost_d_bv)
+ d_bv = BoolValuedVariant("foo", True)
+ assert d.satisfies(d_bv) and d_bv.satisfies(d)
- def test_compatible(self):
- a = MultiValuedVariant("foo", "bar,baz")
- b = MultiValuedVariant("foo", "True")
- c = MultiValuedVariant("fee", "bar,baz")
- d = MultiValuedVariant("foo", "bar,barbaz")
+ def test_intersects(self):
+ a = MultiValuedVariant("foo", ("bar", "baz"))
+ b = MultiValuedVariant("foo", (True,))
+ c = MultiValuedVariant("fee", ("bar", "baz"))
+ d = MultiValuedVariant("foo", ("bar", "barbaz"))
- # If the name of two multi-valued variants is the same,
- # they are compatible
- assert a.compatible(b)
- assert not a.compatible(c)
- assert a.compatible(d)
+ # concrete, different values do not intersect.
+ assert not a.intersects(b) and not b.intersects(a)
+ assert not a.intersects(c) and not c.intersects(a)
+ assert not a.intersects(d) and not d.intersects(a)
+ assert not b.intersects(c) and not c.intersects(b)
+ assert not b.intersects(d) and not d.intersects(b)
+ assert not c.intersects(d) and not d.intersects(c)
- assert b.compatible(a)
- assert not b.compatible(c)
- assert b.compatible(d)
+ # SV and MV intersect if they have the same concrete value.
+ b_sv = SingleValuedVariant("foo", True)
+ assert b.intersects(b_sv)
+ assert not c.intersects(b_sv)
- assert not c.compatible(a)
- assert not c.compatible(b)
- assert not c.compatible(d)
-
- assert d.compatible(a)
- assert d.compatible(b)
- assert not d.compatible(c)
-
- # Implicit type conversion for other types
-
- b_sv = SingleValuedVariant("foo", "True")
- assert b.compatible(b_sv)
- assert not c.compatible(b_sv)
-
- b_bv = BoolValuedVariant("foo", "True")
- assert b.compatible(b_bv)
- assert not c.compatible(b_bv)
+ # BoolValuedVariant intersects if the value is the same
+ b_bv = BoolValuedVariant("foo", True)
+ assert b.intersects(b_bv)
+ assert not c.intersects(b_bv)
def test_constrain(self):
- # Try to constrain on a value with less constraints than self
- a = MultiValuedVariant("foo", "bar,baz")
- b = MultiValuedVariant("foo", "bar")
-
- changed = a.constrain(b)
- assert not changed
- t = MultiValuedVariant("foo", "bar,baz")
- assert a == t
-
- # Try to constrain on a value with more constraints than self
- a = MultiValuedVariant("foo", "bar,baz")
- b = MultiValuedVariant("foo", "bar")
-
- changed = b.constrain(a)
- assert changed
- t = MultiValuedVariant("foo", "bar,baz")
- assert a == t
+ # Concrete values cannot be constrained
+ a = MultiValuedVariant("foo", ("bar", "baz"))
+ b = MultiValuedVariant("foo", ("bar",))
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ a.constrain(b)
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ b.constrain(a)
# Try to constrain on the same value
- a = MultiValuedVariant("foo", "bar,baz")
+ a = MultiValuedVariant("foo", ("bar", "baz"))
b = a.copy()
- changed = a.constrain(b)
- assert not changed
- t = MultiValuedVariant("foo", "bar,baz")
- assert a == t
+ assert not a.constrain(b)
+ assert a == b == MultiValuedVariant("foo", ("bar", "baz"))
# Try to constrain on a different name
- a = MultiValuedVariant("foo", "bar,baz")
- b = MultiValuedVariant("fee", "bar")
+ a = MultiValuedVariant("foo", ("bar", "baz"))
+ b = MultiValuedVariant("fee", ("bar",))
- with pytest.raises(ValueError):
+ with pytest.raises(UnsatisfiableVariantSpecError):
a.constrain(b)
- # Implicit type conversion for variants of other types
-
- a = MultiValuedVariant("foo", "bar,baz")
- b_sv = SingleValuedVariant("foo", "bar")
- c_sv = SingleValuedVariant("foo", "barbaz")
-
- assert not a.constrain(b_sv)
- assert a.constrain(c_sv)
-
- d_bv = BoolValuedVariant("foo", "True")
-
- assert a.constrain(d_bv)
- assert not a.constrain(d_bv)
-
def test_yaml_entry(self):
- a = MultiValuedVariant("foo", "bar,baz,barbaz")
- b = MultiValuedVariant("foo", "bar, baz, barbaz")
- expected = ("foo", sorted(["bar", "baz", "barbaz"]))
+ a = MultiValuedVariant("foo", ("bar", "baz", "barbaz"))
+ expected = ("foo", sorted(("bar", "baz", "barbaz")))
assert a.yaml_entry() == expected
- assert b.yaml_entry() == expected
- a = MultiValuedVariant("foo", "bar")
+ a = MultiValuedVariant("foo", ("bar",))
expected = ("foo", sorted(["bar"]))
assert a.yaml_entry() == expected
@@ -205,152 +140,76 @@ class TestSingleValuedVariant:
def test_initialization(self):
# Basic properties
a = SingleValuedVariant("foo", "bar")
- assert repr(a) == "SingleValuedVariant('foo', 'bar')"
assert str(a) == "foo=bar"
+ assert a.values == ("bar",)
assert a.value == "bar"
assert "bar" in a
- assert eval(repr(a)) == a
-
- # Raise if multiple values are passed
- with pytest.raises(ValueError):
- SingleValuedVariant("foo", "bar, baz")
# Check the copy
b = a.copy()
- assert repr(a) == repr(b)
assert str(a) == str(b)
+ assert b.values == ("bar",)
assert b.value == "bar"
assert "bar" in b
assert a == b
assert a is not b
assert hash(a) == hash(b)
- assert eval(repr(b)) == a
def test_satisfies(self):
a = SingleValuedVariant("foo", "bar")
b = SingleValuedVariant("foo", "bar")
c = SingleValuedVariant("foo", "baz")
d = SingleValuedVariant("fee", "bar")
- e = SingleValuedVariant("foo", "True")
- # 'foo=bar' can only satisfy 'foo=bar'
- assert a.satisfies(b)
- assert not a.satisfies(c)
- assert not a.satisfies(d)
+ # concrete, different values do not satisfy each other
+ assert not a.satisfies(c) and not c.satisfies(a)
+ assert not a.satisfies(d) and not d.satisfies(a)
+ assert not b.satisfies(c) and not c.satisfies(b)
+ assert not b.satisfies(d) and not d.satisfies(b)
+ assert not c.satisfies(d) and not d.satisfies(c)
- assert b.satisfies(a)
- assert not b.satisfies(c)
- assert not b.satisfies(d)
+ assert a.satisfies(b) and b.satisfies(a)
- assert not c.satisfies(a)
- assert not c.satisfies(b)
- assert not c.satisfies(d)
-
- # Implicit type conversion for variants of other types
-
- a_mv = MultiValuedVariant("foo", "bar")
- assert a.satisfies(a_mv)
- multiple_values = MultiValuedVariant("foo", "bar,baz")
- assert not a.satisfies(multiple_values)
-
- e_bv = BoolValuedVariant("foo", "True")
- assert e.satisfies(e_bv)
- almost_e_bv = BoolValuedVariant("foo", "true")
- assert not e.satisfies(almost_e_bv)
-
- def test_compatible(self):
+ def test_intersects(self):
a = SingleValuedVariant("foo", "bar")
b = SingleValuedVariant("fee", "bar")
c = SingleValuedVariant("foo", "baz")
d = SingleValuedVariant("foo", "bar")
- # If the name of two multi-valued variants is the same,
- # they are compatible
- assert not a.compatible(b)
- assert not a.compatible(c)
- assert a.compatible(d)
+ # concrete, different values do not intersect
+ assert not a.intersects(b) and not b.intersects(a)
+ assert not a.intersects(c) and not c.intersects(a)
+ assert not b.intersects(c) and not c.intersects(b)
+ assert not b.intersects(d) and not d.intersects(b)
+ assert not c.intersects(d) and not d.intersects(c)
- assert not b.compatible(a)
- assert not b.compatible(c)
- assert not b.compatible(d)
-
- assert not c.compatible(a)
- assert not c.compatible(b)
- assert not c.compatible(d)
-
- assert d.compatible(a)
- assert not d.compatible(b)
- assert not d.compatible(c)
-
- # Implicit type conversion for variants of other types
-
- a_mv = MultiValuedVariant("foo", "bar")
- b_mv = MultiValuedVariant("fee", "bar")
- c_mv = MultiValuedVariant("foo", "baz")
- d_mv = MultiValuedVariant("foo", "bar")
-
- assert not a.compatible(b_mv)
- assert not a.compatible(c_mv)
- assert a.compatible(d_mv)
-
- assert not b.compatible(a_mv)
- assert not b.compatible(c_mv)
- assert not b.compatible(d_mv)
-
- assert not c.compatible(a_mv)
- assert not c.compatible(b_mv)
- assert not c.compatible(d_mv)
-
- assert d.compatible(a_mv)
- assert not d.compatible(b_mv)
- assert not d.compatible(c_mv)
-
- e = SingleValuedVariant("foo", "True")
- e_bv = BoolValuedVariant("foo", "True")
- almost_e_bv = BoolValuedVariant("foo", "true")
-
- assert e.compatible(e_bv)
- assert not e.compatible(almost_e_bv)
+ assert a.intersects(d) and d.intersects(a)
def test_constrain(self):
# Try to constrain on a value equal to self
a = SingleValuedVariant("foo", "bar")
b = SingleValuedVariant("foo", "bar")
- changed = a.constrain(b)
- assert not changed
- t = SingleValuedVariant("foo", "bar")
- assert a == t
+ assert not a.constrain(b)
+ assert a == SingleValuedVariant("foo", "bar")
# Try to constrain on a value with a different value
a = SingleValuedVariant("foo", "bar")
b = SingleValuedVariant("foo", "baz")
- with pytest.raises(UnsatisfiableVariantSpecError):
- b.constrain(a)
-
# Try to constrain on a value with a different value
a = SingleValuedVariant("foo", "bar")
b = SingleValuedVariant("fee", "bar")
- with pytest.raises(ValueError):
+ with pytest.raises(UnsatisfiableVariantSpecError):
b.constrain(a)
# Try to constrain on the same value
a = SingleValuedVariant("foo", "bar")
b = a.copy()
- changed = a.constrain(b)
- assert not changed
- t = SingleValuedVariant("foo", "bar")
- assert a == t
-
- # Implicit type conversion for variants of other types
- a = SingleValuedVariant("foo", "True")
- mv = MultiValuedVariant("foo", "True")
- bv = BoolValuedVariant("foo", "True")
- for v in (mv, bv):
- assert not a.constrain(v)
+ assert not a.constrain(b)
+ assert a == SingleValuedVariant("foo", "bar")
def test_yaml_entry(self):
a = SingleValuedVariant("foo", "bar")
@@ -362,129 +221,94 @@ def test_yaml_entry(self):
class TestBoolValuedVariant:
def test_initialization(self):
# Basic properties - True value
- for v in (True, "True", "TRUE", "TrUe"):
- a = BoolValuedVariant("foo", v)
- assert repr(a) == "BoolValuedVariant('foo', {0})".format(repr(v))
- assert str(a) == "+foo"
- assert a.value is True
- assert True in a
- assert eval(repr(a)) == a
+ a = BoolValuedVariant("foo", True)
+ assert str(a) == "+foo"
+ assert a.value is True
+ assert a.values == (True,)
+ assert True in a
# Copy - True value
b = a.copy()
- assert repr(a) == repr(b)
assert str(a) == str(b)
assert b.value is True
+ assert b.values == (True,)
assert True in b
assert a == b
assert a is not b
assert hash(a) == hash(b)
- assert eval(repr(b)) == a
- # Basic properties - False value
- for v in (False, "False", "FALSE", "FaLsE"):
- a = BoolValuedVariant("foo", v)
- assert repr(a) == "BoolValuedVariant('foo', {0})".format(repr(v))
- assert str(a) == "~foo"
- assert a.value is False
- assert False in a
- assert eval(repr(a)) == a
-
- # Copy - True value
+ # Copy - False value
+ a = BoolValuedVariant("foo", False)
b = a.copy()
- assert repr(a) == repr(b)
assert str(a) == str(b)
assert b.value is False
+ assert b.values == (False,)
assert False in b
assert a == b
assert a is not b
- assert eval(repr(b)) == a
-
- # Invalid values
- for v in ("bar", "bar,baz"):
- with pytest.raises(ValueError):
- BoolValuedVariant("foo", v)
def test_satisfies(self):
a = BoolValuedVariant("foo", True)
b = BoolValuedVariant("foo", False)
c = BoolValuedVariant("fee", False)
- d = BoolValuedVariant("foo", "True")
+ d = BoolValuedVariant("foo", True)
- assert not a.satisfies(b)
- assert not a.satisfies(c)
- assert a.satisfies(d)
+ # concrete, different values do not satisfy each other
+ assert not a.satisfies(b) and not b.satisfies(a)
+ assert not a.satisfies(c) and not c.satisfies(a)
+ assert not b.satisfies(c) and not c.satisfies(b)
+ assert not b.satisfies(d) and not d.satisfies(b)
+ assert not c.satisfies(d) and not d.satisfies(c)
- assert not b.satisfies(a)
- assert not b.satisfies(c)
- assert not b.satisfies(d)
+ assert a.satisfies(d) and d.satisfies(a)
- assert not c.satisfies(a)
- assert not c.satisfies(b)
- assert not c.satisfies(d)
+ # # BV variants are case insensitive to 'True' or 'False'
+ # d_mv = MultiValuedVariant("foo", "True")
+ # assert d.satisfies(d_mv)
+ # assert not b.satisfies(d_mv)
- assert d.satisfies(a)
- assert not d.satisfies(b)
- assert not d.satisfies(c)
+ # d_mv = MultiValuedVariant("foo", "FaLsE")
+ # assert not d.satisfies(d_mv)
+ # assert b.satisfies(d_mv)
- # BV variants are case insensitive to 'True' or 'False'
- d_mv = MultiValuedVariant("foo", "True")
- assert d.satisfies(d_mv)
- assert not b.satisfies(d_mv)
+ # d_mv = MultiValuedVariant("foo", "bar")
+ # assert not d.satisfies(d_mv)
+ # assert not b.satisfies(d_mv)
- d_mv = MultiValuedVariant("foo", "FaLsE")
- assert not d.satisfies(d_mv)
- assert b.satisfies(d_mv)
+ # d_sv = SingleValuedVariant("foo", "True")
+ # assert d.satisfies(d_sv)
- d_mv = MultiValuedVariant("foo", "bar")
- assert not d.satisfies(d_mv)
- assert not b.satisfies(d_mv)
-
- d_sv = SingleValuedVariant("foo", "True")
- assert d.satisfies(d_sv)
-
- def test_compatible(self):
+ def test_intersects(self):
a = BoolValuedVariant("foo", True)
b = BoolValuedVariant("fee", True)
c = BoolValuedVariant("foo", False)
- d = BoolValuedVariant("foo", "True")
+ d = BoolValuedVariant("foo", True)
- # If the name of two multi-valued variants is the same,
- # they are compatible
- assert not a.compatible(b)
- assert not a.compatible(c)
- assert a.compatible(d)
+ # concrete, different values do not intersect each other
+ assert not a.intersects(b) and not b.intersects(a)
+ assert not a.intersects(c) and not c.intersects(a)
+ assert not b.intersects(c) and not c.intersects(b)
+ assert not b.intersects(d) and not d.intersects(b)
+ assert not c.intersects(d) and not d.intersects(c)
- assert not b.compatible(a)
- assert not b.compatible(c)
- assert not b.compatible(d)
+ assert a.intersects(d) and d.intersects(a)
- assert not c.compatible(a)
- assert not c.compatible(b)
- assert not c.compatible(d)
+ # for value in ("True", "TrUe", "TRUE"):
+ # d_mv = MultiValuedVariant("foo", value)
+ # assert d.intersects(d_mv)
+ # assert not c.intersects(d_mv)
- assert d.compatible(a)
- assert not d.compatible(b)
- assert not d.compatible(c)
-
- for value in ("True", "TrUe", "TRUE"):
- d_mv = MultiValuedVariant("foo", value)
- assert d.compatible(d_mv)
- assert not c.compatible(d_mv)
-
- d_sv = SingleValuedVariant("foo", value)
- assert d.compatible(d_sv)
- assert not c.compatible(d_sv)
+ # d_sv = SingleValuedVariant("foo", value)
+ # assert d.intersects(d_sv)
+ # assert not c.intersects(d_sv)
def test_constrain(self):
# Try to constrain on a value equal to self
- a = BoolValuedVariant("foo", "True")
+ a = BoolValuedVariant("foo", True)
b = BoolValuedVariant("foo", True)
- changed = a.constrain(b)
- assert not changed
- t = BoolValuedVariant("foo", True)
- assert a == t
+ assert not a.constrain(b)
+ assert a == BoolValuedVariant("foo", True)
# Try to constrain on a value with a different value
a = BoolValuedVariant("foo", True)
@@ -497,44 +321,35 @@ def test_constrain(self):
a = BoolValuedVariant("foo", True)
b = BoolValuedVariant("fee", True)
- with pytest.raises(ValueError):
+ with pytest.raises(UnsatisfiableVariantSpecError):
b.constrain(a)
# Try to constrain on the same value
a = BoolValuedVariant("foo", True)
b = a.copy()
- changed = a.constrain(b)
- assert not changed
- t = BoolValuedVariant("foo", True)
- assert a == t
-
- # Try to constrain on other values
- a = BoolValuedVariant("foo", "True")
- sv = SingleValuedVariant("foo", "True")
- mv = MultiValuedVariant("foo", "True")
- for v in (sv, mv):
- assert not a.constrain(v)
+ assert not a.constrain(b)
+ assert a == BoolValuedVariant("foo", True)
def test_yaml_entry(self):
- a = BoolValuedVariant("foo", "True")
+ a = BoolValuedVariant("foo", True)
expected = ("foo", True)
assert a.yaml_entry() == expected
- a = BoolValuedVariant("foo", "False")
+ a = BoolValuedVariant("foo", False)
expected = ("foo", False)
assert a.yaml_entry() == expected
def test_from_node_dict():
- a = MultiValuedVariant.from_node_dict("foo", ["bar"])
- assert type(a) is MultiValuedVariant
+ a = VariantValue.from_node_dict("foo", ["bar"])
+ assert a.type == spack.variant.VariantType.MULTI
- a = MultiValuedVariant.from_node_dict("foo", "bar")
- assert type(a) is SingleValuedVariant
+ a = VariantValue.from_node_dict("foo", "bar")
+ assert a.type == spack.variant.VariantType.SINGLE
- a = MultiValuedVariant.from_node_dict("foo", "true")
- assert type(a) is BoolValuedVariant
+ a = VariantValue.from_node_dict("foo", "true")
+ assert a.type == spack.variant.VariantType.BOOL
class TestVariant:
@@ -548,7 +363,7 @@ def test_validation(self):
# Multiple values are not allowed
with pytest.raises(MultipleValuesInExclusiveVariantError):
- vspec.value = "bar,baz"
+ vspec.set("bar", "baz")
# Inconsistent vspec
vspec.name = "FOO"
@@ -557,10 +372,10 @@ def test_validation(self):
# Valid multi-value vspec
a.multi = True
- vspec = a.make_variant("bar,baz")
+ vspec = a.make_variant("bar", "baz")
a.validate_or_raise(vspec, "test-package")
# Add an invalid value
- vspec.value = "bar,baz,barbaz"
+ vspec.set("bar", "baz", "barbaz")
with pytest.raises(InvalidVariantValueError):
a.validate_or_raise(vspec, "test-package")
@@ -571,12 +386,12 @@ def validator(x):
except ValueError:
return False
- a = Variant("foo", default=1024, description="", values=validator, multi=False)
+ a = Variant("foo", default="1024", description="", values=validator, multi=False)
vspec = a.make_default()
a.validate_or_raise(vspec, "test-package")
- vspec.value = 2056
+ vspec.set("2056")
a.validate_or_raise(vspec, "test-package")
- vspec.value = "foo"
+ vspec.set("foo")
with pytest.raises(InvalidVariantValueError):
a.validate_or_raise(vspec, "test-package")
@@ -606,9 +421,9 @@ def test_invalid_values(self) -> None:
a["foo"] = 2
# Duplicate variant
- a["foo"] = MultiValuedVariant("foo", "bar,baz")
+ a["foo"] = MultiValuedVariant("foo", ("bar", "baz"))
with pytest.raises(DuplicateVariantError):
- a["foo"] = MultiValuedVariant("foo", "bar")
+ a["foo"] = MultiValuedVariant("foo", ("bar",))
with pytest.raises(DuplicateVariantError):
a["foo"] = SingleValuedVariant("foo", "bar")
@@ -618,7 +433,7 @@ def test_invalid_values(self) -> None:
# Non matching names between key and vspec.name
with pytest.raises(KeyError):
- a["bar"] = MultiValuedVariant("foo", "bar")
+ a["bar"] = MultiValuedVariant("foo", ("bar",))
def test_set_item(self) -> None:
# Check that all the three types of variants are accepted
@@ -626,7 +441,7 @@ def test_set_item(self) -> None:
a["foo"] = BoolValuedVariant("foo", True)
a["bar"] = SingleValuedVariant("bar", "baz")
- a["foobar"] = MultiValuedVariant("foobar", "a, b, c, d, e")
+ a["foobar"] = MultiValuedVariant("foobar", ("a", "b", "c", "d", "e"))
def test_substitute(self) -> None:
# Check substitution of a key that exists
@@ -642,48 +457,47 @@ def test_substitute(self) -> None:
def test_satisfies_and_constrain(self) -> None:
# foo=bar foobar=fee feebar=foo
a = VariantMap(Spec())
- a["foo"] = MultiValuedVariant("foo", "bar")
+ a["foo"] = MultiValuedVariant("foo", ("bar",))
a["foobar"] = SingleValuedVariant("foobar", "fee")
a["feebar"] = SingleValuedVariant("feebar", "foo")
# foo=bar,baz foobar=fee shared=True
b = VariantMap(Spec())
- b["foo"] = MultiValuedVariant("foo", "bar, baz")
+ b["foo"] = MultiValuedVariant("foo", ("bar", "baz"))
b["foobar"] = SingleValuedVariant("foobar", "fee")
b["shared"] = BoolValuedVariant("shared", True)
- assert a.intersects(b)
- assert b.intersects(a)
-
- assert not a.satisfies(b)
- assert not b.satisfies(a)
+ # concrete, different values do not intersect / satisfy each other
+ assert not a.intersects(b) and not b.intersects(a)
+ assert not a.satisfies(b) and not b.satisfies(a)
# foo=bar,baz foobar=fee feebar=foo shared=True
c = VariantMap(Spec())
- c["foo"] = MultiValuedVariant("foo", "bar, baz")
+ c["foo"] = MultiValuedVariant("foo", ("bar", "baz"))
c["foobar"] = SingleValuedVariant("foobar", "fee")
c["feebar"] = SingleValuedVariant("feebar", "foo")
c["shared"] = BoolValuedVariant("shared", True)
- assert a.constrain(b)
- assert a == c
+ # concrete values cannot be constrained
+ with pytest.raises(spack.variant.UnsatisfiableVariantSpecError):
+ a.constrain(b)
def test_copy(self) -> None:
a = VariantMap(Spec())
a["foo"] = BoolValuedVariant("foo", True)
a["bar"] = SingleValuedVariant("bar", "baz")
- a["foobar"] = MultiValuedVariant("foobar", "a, b, c, d, e")
+ a["foobar"] = MultiValuedVariant("foobar", ("a", "b", "c", "d", "e"))
c = a.copy()
assert a == c
def test_str(self) -> None:
c = VariantMap(Spec())
- c["foo"] = MultiValuedVariant("foo", "bar, baz")
+ c["foo"] = MultiValuedVariant("foo", ("bar", "baz"))
c["foobar"] = SingleValuedVariant("foobar", "fee")
c["feebar"] = SingleValuedVariant("feebar", "foo")
c["shared"] = BoolValuedVariant("shared", True)
- assert str(c) == "+shared feebar=foo foo=bar,baz foobar=fee"
+ assert str(c) == "+shared feebar=foo foo:=bar,baz foobar=fee"
def test_disjoint_set_initialization_errors():
@@ -778,10 +592,10 @@ def test_wild_card_valued_variants_equivalent_to_str():
several_arbitrary_values = ("doe", "re", "mi")
# "*" case
- wild_output = wild_var.make_variant(several_arbitrary_values)
+ wild_output = wild_var.make_variant(*several_arbitrary_values)
wild_var.validate_or_raise(wild_output, "test-package")
# str case
- str_output = str_var.make_variant(several_arbitrary_values)
+ str_output = str_var.make_variant(*several_arbitrary_values)
str_var.validate_or_raise(str_output, "test-package")
# equivalence each instance already validated
assert str_output.value == wild_output.value
@@ -900,33 +714,175 @@ def test_concretize_variant_default_with_multiple_defs(
@pytest.mark.parametrize(
- "spec,variant_name,after",
+ "spec,variant_name,narrowed_type",
[
# dev_path is a special case
- ("foo dev_path=/path/to/source", "dev_path", SingleValuedVariant),
+ ("foo dev_path=/path/to/source", "dev_path", spack.variant.VariantType.SINGLE),
# reserved name: won't be touched
- ("foo patches=2349dc44", "patches", AbstractVariant),
+ ("foo patches=2349dc44", "patches", spack.variant.VariantType.MULTI),
# simple case -- one definition applies
- ("variant-values@1.0 v=foo", "v", SingleValuedVariant),
+ ("variant-values@1.0 v=foo", "v", spack.variant.VariantType.SINGLE),
# simple, but with bool valued variant
- ("pkg-a bvv=true", "bvv", BoolValuedVariant),
- # variant doesn't exist at version
- ("variant-values@4.0 v=bar", "v", spack.spec.InvalidVariantForSpecError),
- # multiple definitions, so not yet knowable
- ("variant-values@2.0 v=bar", "v", AbstractVariant),
+ ("pkg-a bvv=true", "bvv", spack.variant.VariantType.BOOL),
+ # takes the second definition, which overrides the single-valued one
+ ("variant-values@2.0 v=bar", "v", spack.variant.VariantType.MULTI),
],
)
-def test_substitute_abstract_variants(mock_packages, spec, variant_name, after):
+def test_substitute_abstract_variants_narrowing(mock_packages, spec, variant_name, narrowed_type):
spec = Spec(spec)
+ spack.spec.substitute_abstract_variants(spec)
+ assert spec.variants[variant_name].type == narrowed_type
- # all variants start out as AbstractVariant
- assert isinstance(spec.variants[variant_name], AbstractVariant)
- if issubclass(after, Exception):
- # if we're checking for an error, use pytest.raises
- with pytest.raises(after):
- spack.spec.substitute_abstract_variants(spec)
- else:
- # ensure that the type of the variant on the spec has been narrowed (or not)
- spack.spec.substitute_abstract_variants(spec)
- assert isinstance(spec.variants[variant_name], after)
+def test_substitute_abstract_variants_failure(mock_packages):
+ with pytest.raises(spack.spec.InvalidVariantForSpecError):
+ # variant doesn't exist at version
+ spack.spec.substitute_abstract_variants(Spec("variant-values@4.0 v=bar"))
+
+
+def test_abstract_variant_satisfies_abstract_abstract():
+ # rhs should be a subset of lhs
+ assert Spec("foo=bar").satisfies("foo=bar")
+ assert Spec("foo=bar,baz").satisfies("foo=bar")
+ assert Spec("foo=bar,baz").satisfies("foo=bar,baz")
+ assert not Spec("foo=bar").satisfies("foo=baz")
+ assert not Spec("foo=bar").satisfies("foo=bar,baz")
+ assert Spec("foo=bar").satisfies("foo=*") # rhs empty set
+ assert Spec("foo=*").satisfies("foo=*") # lhs and rhs empty set
+ assert not Spec("foo=*").satisfies("foo=bar") # lhs empty set, rhs not
+
+
+def test_abstract_variant_satisfies_concrete_abstract():
+ # rhs should be a subset of lhs
+ assert Spec("foo:=bar").satisfies("foo=bar")
+ assert Spec("foo:=bar,baz").satisfies("foo=bar")
+ assert Spec("foo:=bar,baz").satisfies("foo=bar,baz")
+ assert not Spec("foo:=bar").satisfies("foo=baz")
+ assert not Spec("foo:=bar").satisfies("foo=bar,baz")
+ assert Spec("foo:=bar").satisfies("foo=*") # rhs empty set
+
+
+def test_abstract_variant_satisfies_abstract_concrete():
+ # always false since values can be added to the lhs
+ assert not Spec("foo=bar").satisfies("foo:=bar")
+ assert not Spec("foo=bar,baz").satisfies("foo:=bar")
+ assert not Spec("foo=bar,baz").satisfies("foo:=bar,baz")
+ assert not Spec("foo=bar").satisfies("foo:=baz")
+ assert not Spec("foo=bar").satisfies("foo:=bar,baz")
+ assert not Spec("foo=*").satisfies("foo:=bar") # lhs empty set
+
+
+def test_abstract_variant_satisfies_concrete_concrete():
+ # concrete values only satisfy each other when equal
+ assert Spec("foo:=bar").satisfies("foo:=bar")
+ assert not Spec("foo:=bar,baz").satisfies("foo:=bar")
+ assert not Spec("foo:=bar").satisfies("foo:=bar,baz")
+ assert Spec("foo:=bar,baz").satisfies("foo:=bar,baz")
+
+
+def test_abstract_variant_intersects_abstract_abstract():
+ # always true since the union of values satisfies both
+ assert Spec("foo=bar").intersects("foo=bar")
+ assert Spec("foo=bar,baz").intersects("foo=bar")
+ assert Spec("foo=bar,baz").intersects("foo=bar,baz")
+ assert Spec("foo=bar").intersects("foo=baz")
+ assert Spec("foo=bar").intersects("foo=bar,baz")
+ assert Spec("foo=bar").intersects("foo=*") # rhs empty set
+ assert Spec("foo=*").intersects("foo=*") # lhs and rhs empty set
+ assert Spec("foo=*").intersects("foo=bar") # lhs empty set, rhs not
+
+
+def test_abstract_variant_intersects_concrete_abstract():
+ assert Spec("foo:=bar").intersects("foo=bar")
+ assert Spec("foo:=bar,baz").intersects("foo=bar")
+ assert Spec("foo:=bar,baz").intersects("foo=bar,baz")
+ assert not Spec("foo:=bar").intersects("foo=baz") # rhs has at least baz, lhs has not
+ assert not Spec("foo:=bar").intersects("foo=bar,baz") # rhs has at least baz, lhs has not
+ assert Spec("foo:=bar").intersects("foo=*") # rhs empty set
+
+
+def test_abstract_variant_intersects_abstract_concrete():
+ assert Spec("foo=bar").intersects("foo:=bar")
+ assert not Spec("foo=bar,baz").intersects("foo:=bar") # lhs has at least baz, rhs has not
+ assert Spec("foo=bar,baz").intersects("foo:=bar,baz")
+ assert not Spec("foo=bar").intersects("foo:=baz") # lhs has at least bar, rhs has not
+ assert Spec("foo=bar").intersects("foo:=bar,baz")
+ assert Spec("foo=*").intersects("foo:=bar") # lhs empty set
+
+
+def test_abstract_variant_intersects_concrete_concrete():
+ # concrete values only intersect each other when equal
+ assert Spec("foo:=bar").intersects("foo:=bar")
+ assert not Spec("foo:=bar,baz").intersects("foo:=bar")
+ assert not Spec("foo:=bar").intersects("foo:=bar,baz")
+ assert Spec("foo:=bar,baz").intersects("foo:=bar,baz")
+
+
+def test_abstract_variant_constrain_abstract_abstract():
+ s1 = Spec("foo=bar")
+ s2 = Spec("foo=*")
+ assert s1.constrain("foo=baz")
+ assert s1 == Spec("foo=bar,baz")
+ assert s2.constrain("foo=baz")
+ assert s2 == Spec("foo=baz")
+
+
+def test_abstract_variant_constrain_abstract_concrete_fail():
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ Spec("foo=bar").constrain("foo:=baz")
+
+
+def test_abstract_variant_constrain_abstract_concrete_ok():
+ s1 = Spec("foo=bar")
+ s2 = Spec("foo=*")
+ assert s1.constrain("foo:=bar") # the change is concreteness
+ assert s1 == Spec("foo:=bar")
+ assert s2.constrain("foo:=bar")
+ assert s2 == Spec("foo:=bar")
+
+
+def test_abstract_variant_constrain_concrete_concrete_fail():
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ Spec("foo:=bar").constrain("foo:=bar,baz")
+
+
+def test_abstract_variant_constrain_concrete_concrete_ok():
+ s = Spec("foo:=bar")
+ assert not s.constrain("foo:=bar") # no change
+
+
+def test_abstract_variant_constrain_concrete_abstract_fail():
+ s = Spec("foo:=bar")
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ s.constrain("foo=baz")
+
+
+def test_abstract_variant_constrain_concrete_abstract_ok():
+ s = Spec("foo:=bar,baz")
+ assert not s.constrain("foo=bar") # no change in value or concreteness
+ assert not s.constrain("foo=*")
+
+
+def test_patches_variant():
+ """patches=x,y,z is a variant with special satisfies behavior when the rhs is abstract; it
+ allows string prefix matching of the lhs."""
+ assert Spec("patches:=abcdef").satisfies("patches=ab")
+ assert Spec("patches:=abcdef").satisfies("patches=abcdef")
+ assert not Spec("patches:=abcdef").satisfies("patches=xyz")
+ assert Spec("patches:=abcdef,xyz").satisfies("patches=xyz")
+ assert not Spec("patches:=abcdef").satisfies("patches=abcdefghi")
+
+ # but when the rhs is concrete, it must match exactly
+ assert Spec("patches:=abcdef").satisfies("patches:=abcdef")
+ assert not Spec("patches:=abcdef").satisfies("patches:=ab")
+ assert not Spec("patches:=abcdef,xyz").satisfies("patches:=abc,xyz")
+ assert not Spec("patches:=abcdef").satisfies("patches:=abcdefghi")
+
+
+def test_constrain_narrowing():
+ s = Spec("foo=*")
+ assert s.variants["foo"].type == spack.variant.VariantType.MULTI
+ assert not s.variants["foo"].concrete
+ s.constrain("+foo")
+ assert s.variants["foo"].type == spack.variant.VariantType.BOOL
+ assert s.variants["foo"].concrete
diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py
index e52807eda74..7c158d462b2 100644
--- a/lib/spack/spack/util/environment.py
+++ b/lib/spack/spack/util/environment.py
@@ -7,18 +7,27 @@
import inspect
import json
import os
+import pathlib
import pickle
import re
import shlex
import subprocess
import sys
-from functools import wraps
+import warnings
from typing import Any, Callable, Dict, Iterable, List, MutableMapping, Optional, Tuple, Union
from llnl.path import path_to_os_path, system_path_filter
from llnl.util import tty
from llnl.util.lang import dedupe
+import spack.error
+
+# List is invariant, so List[str] is not a subtype of List[Union[str, pathlib.PurePath]].
+# Sequence is covariant, but because str itself is a subtype of Sequence[str], we cannot exlude it
+# in the type hint. So, use an awkward union type to allow (mixed) str and PurePath items.
+ListOfPaths = Union[List[str], List[pathlib.PurePath], List[Union[str, pathlib.PurePath]]]
+
+
if sys.platform == "win32":
SYSTEM_PATHS = [
"C:\\",
@@ -61,28 +70,6 @@
ModificationList = List[Union["NameModifier", "NameValueModifier"]]
-def system_env_normalize(func):
- """Decorator wrapping calls to system env modifications,
- converting all env variable names to all upper case on Windows, no-op
- on other platforms before calling env modification method.
-
- Windows, due to a DOS holdover, treats all env variable names case
- insensitively, however Spack's env modification class does not,
- meaning setting `Path` and `PATH` would be distinct env operations
- for Spack, but would cause a collision when actually performing the
- env modification operations on the env.
- Normalize all env names to all caps to prevent this collision from the
- Spack side."""
-
- @wraps(func)
- def case_insensitive_modification(self, name: str, *args, **kwargs):
- if sys.platform == "win32":
- name = name.upper()
- return func(self, name, *args, **kwargs)
-
- return case_insensitive_modification
-
-
def is_system_path(path: Path) -> bool:
"""Returns True if the argument is a system path, False otherwise."""
return bool(path) and (os.path.normpath(path) in SYSTEM_DIRS)
@@ -251,7 +238,7 @@ class NameModifier:
__slots__ = ("name", "separator", "trace")
def __init__(self, name: str, *, separator: str = os.pathsep, trace: Optional[Trace] = None):
- self.name = name
+ self.name = name.upper() if sys.platform == "win32" else name
self.separator = separator
self.trace = trace
@@ -271,9 +258,9 @@ class NameValueModifier:
__slots__ = ("name", "value", "separator", "trace")
def __init__(
- self, name: str, value: Any, *, separator: str = os.pathsep, trace: Optional[Trace] = None
+ self, name: str, value: str, *, separator: str = os.pathsep, trace: Optional[Trace] = None
):
- self.name = name
+ self.name = name.upper() if sys.platform == "win32" else name
self.value = value
self.separator = separator
self.trace = trace
@@ -292,6 +279,23 @@ def execute(self, env: MutableMapping[str, str]):
raise NotImplementedError("must be implemented by derived classes")
+class NamePathModifier(NameValueModifier):
+ """Base class for modifiers that modify the value of an environment variable
+ that is a path."""
+
+ __slots__ = ("name", "value", "separator", "trace")
+
+ def __init__(
+ self,
+ name: str,
+ value: Union[str, pathlib.PurePath],
+ *,
+ separator: str = os.pathsep,
+ trace: Optional[Trace] = None,
+ ):
+ super().__init__(name, str(value), separator=separator, trace=trace)
+
+
class SetEnv(NameValueModifier):
__slots__ = ("force", "raw")
@@ -309,17 +313,17 @@ def __init__(
self.raw = raw
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"SetEnv: {self.name}={str(self.value)}", level=3)
- env[self.name] = str(self.value)
+ tty.debug(f"SetEnv: {self.name}={self.value}", level=3)
+ env[self.name] = self.value
class AppendFlagsEnv(NameValueModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"AppendFlagsEnv: {self.name}={str(self.value)}", level=3)
+ tty.debug(f"AppendFlagsEnv: {self.name}={self.value}", level=3)
if self.name in env and env[self.name]:
- env[self.name] += self.separator + str(self.value)
+ env[self.name] += self.separator + self.value
else:
- env[self.name] = str(self.value)
+ env[self.name] = self.value
class UnsetEnv(NameModifier):
@@ -331,7 +335,7 @@ def execute(self, env: MutableMapping[str, str]):
class RemoveFlagsEnv(NameValueModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"RemoveFlagsEnv: {self.name}-{str(self.value)}", level=3)
+ tty.debug(f"RemoveFlagsEnv: {self.name}-{self.value}", level=3)
environment_value = env.get(self.name, "")
flags = environment_value.split(self.separator) if environment_value else []
flags = [f for f in flags if f != self.value]
@@ -339,33 +343,44 @@ def execute(self, env: MutableMapping[str, str]):
class SetPath(NameValueModifier):
+ def __init__(
+ self,
+ name: str,
+ value: ListOfPaths,
+ *,
+ separator: str = os.pathsep,
+ trace: Optional[Trace] = None,
+ ):
+ super().__init__(
+ name, separator.join(str(x) for x in value), separator=separator, trace=trace
+ )
+
def execute(self, env: MutableMapping[str, str]):
- string_path = self.separator.join(str(item) for item in self.value)
- tty.debug(f"SetPath: {self.name}={string_path}", level=3)
- env[self.name] = string_path
+ tty.debug(f"SetPath: {self.name}={self.value}", level=3)
+ env[self.name] = self.value
-class AppendPath(NameValueModifier):
+class AppendPath(NamePathModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"AppendPath: {self.name}+{str(self.value)}", level=3)
+ tty.debug(f"AppendPath: {self.name}+{self.value}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator) if environment_value else []
directories.append(path_to_os_path(os.path.normpath(self.value)).pop())
env[self.name] = self.separator.join(directories)
-class PrependPath(NameValueModifier):
+class PrependPath(NamePathModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"PrependPath: {self.name}+{str(self.value)}", level=3)
+ tty.debug(f"PrependPath: {self.name}+{self.value}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator) if environment_value else []
directories = [path_to_os_path(os.path.normpath(self.value)).pop()] + directories
env[self.name] = self.separator.join(directories)
-class RemoveFirstPath(NameValueModifier):
+class RemoveFirstPath(NamePathModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"RemoveFirstPath: {self.name}-{str(self.value)}", level=3)
+ tty.debug(f"RemoveFirstPath: {self.name}-{self.value}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator)
directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories]
@@ -375,9 +390,9 @@ def execute(self, env: MutableMapping[str, str]):
env[self.name] = self.separator.join(directories)
-class RemoveLastPath(NameValueModifier):
+class RemoveLastPath(NamePathModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"RemoveLastPath: {self.name}-{str(self.value)}", level=3)
+ tty.debug(f"RemoveLastPath: {self.name}-{self.value}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator)[::-1]
directories = [path_to_os_path(os.path.normpath(x)).pop() for x in directories]
@@ -387,9 +402,9 @@ def execute(self, env: MutableMapping[str, str]):
env[self.name] = self.separator.join(directories[::-1])
-class RemovePath(NameValueModifier):
+class RemovePath(NamePathModifier):
def execute(self, env: MutableMapping[str, str]):
- tty.debug(f"RemovePath: {self.name}-{str(self.value)}", level=3)
+ tty.debug(f"RemovePath: {self.name}-{self.value}", level=3)
environment_value = env.get(self.name, "")
directories = environment_value.split(self.separator)
directories = [
@@ -422,6 +437,36 @@ def execute(self, env: MutableMapping[str, str]):
env[self.name] = self.separator.join(directories)
+def _validate_path_value(name: str, value: Any) -> Union[str, pathlib.PurePath]:
+ """Ensure the value for an env variable is string or path"""
+ types = (str, pathlib.PurePath)
+ if isinstance(value, types):
+ return value
+ types_str = " or ".join([f"`{t.__name__}`" for t in types])
+ warnings.warn(
+ f"when setting environment variable {name}={value}: value is of type "
+ f"`{type(value).__name__}`, but {types_str} was expected. This is deprecated and will be "
+ f"an error in Spack v1.0",
+ spack.error.SpackAPIWarning,
+ stacklevel=3,
+ )
+ return str(value)
+
+
+def _validate_value(name: str, value: Any) -> str:
+ """Ensure the value for an env variable is a string"""
+ if isinstance(value, str):
+ return value
+ warnings.warn(
+ f"when setting environment variable {name}={value}: value is of type "
+ f"`{type(value).__name__}`, but `str` was expected. This is deprecated and will be an "
+ "error in Spack v1.0",
+ spack.error.SpackAPIWarning,
+ stacklevel=3,
+ )
+ return str(value)
+
+
class EnvironmentModifications:
"""Keeps track of requests to modify the current environment."""
@@ -473,8 +518,7 @@ def _trace(self) -> Optional[Trace]:
return Trace(filename=filename, lineno=lineno, context=current_context)
- @system_env_normalize
- def set(self, name: str, value: str, *, force: bool = False, raw: bool = False):
+ def set(self, name: str, value: str, *, force: bool = False, raw: bool = False) -> None:
"""Stores a request to set an environment variable.
Args:
@@ -483,11 +527,11 @@ def set(self, name: str, value: str, *, force: bool = False, raw: bool = False):
force: if True, audit will not consider this modification a warning
raw: if True, format of value string is skipped
"""
+ value = _validate_value(name, value)
item = SetEnv(name, value, trace=self._trace(), force=force, raw=raw)
self.env_modifications.append(item)
- @system_env_normalize
- def append_flags(self, name: str, value: str, sep: str = " "):
+ def append_flags(self, name: str, value: str, sep: str = " ") -> None:
"""Stores a request to append 'flags' to an environment variable.
Args:
@@ -495,11 +539,11 @@ def append_flags(self, name: str, value: str, sep: str = " "):
value: flags to be appended
sep: separator for the flags (default: " ")
"""
+ value = _validate_value(name, value)
item = AppendFlagsEnv(name, value, separator=sep, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def unset(self, name: str):
+ def unset(self, name: str) -> None:
"""Stores a request to unset an environment variable.
Args:
@@ -508,8 +552,7 @@ def unset(self, name: str):
item = UnsetEnv(name, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def remove_flags(self, name: str, value: str, sep: str = " "):
+ def remove_flags(self, name: str, value: str, sep: str = " ") -> None:
"""Stores a request to remove flags from an environment variable
Args:
@@ -517,11 +560,11 @@ def remove_flags(self, name: str, value: str, sep: str = " "):
value: flags to be removed
sep: separator for the flags (default: " ")
"""
+ value = _validate_value(name, value)
item = RemoveFlagsEnv(name, value, separator=sep, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def set_path(self, name: str, elements: List[str], separator: str = os.pathsep):
+ def set_path(self, name: str, elements: ListOfPaths, separator: str = os.pathsep) -> None:
"""Stores a request to set an environment variable to a list of paths,
separated by a character defined in input.
@@ -530,11 +573,13 @@ def set_path(self, name: str, elements: List[str], separator: str = os.pathsep):
elements: ordered list paths
separator: separator for the paths (default: os.pathsep)
"""
+ elements = [_validate_path_value(name, x) for x in elements]
item = SetPath(name, elements, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def append_path(self, name: str, path: str, separator: str = os.pathsep):
+ def append_path(
+ self, name: str, path: Union[str, pathlib.PurePath], separator: str = os.pathsep
+ ) -> None:
"""Stores a request to append a path to list of paths.
Args:
@@ -542,11 +587,13 @@ def append_path(self, name: str, path: str, separator: str = os.pathsep):
path: path to be appended
separator: separator for the paths (default: os.pathsep)
"""
+ path = _validate_path_value(name, path)
item = AppendPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def prepend_path(self, name: str, path: str, separator: str = os.pathsep):
+ def prepend_path(
+ self, name: str, path: Union[str, pathlib.PurePath], separator: str = os.pathsep
+ ) -> None:
"""Stores a request to prepend a path to list of paths.
Args:
@@ -554,11 +601,13 @@ def prepend_path(self, name: str, path: str, separator: str = os.pathsep):
path: path to be prepended
separator: separator for the paths (default: os.pathsep)
"""
+ path = _validate_path_value(name, path)
item = PrependPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def remove_first_path(self, name: str, path: str, separator: str = os.pathsep):
+ def remove_first_path(
+ self, name: str, path: Union[str, pathlib.PurePath], separator: str = os.pathsep
+ ) -> None:
"""Stores a request to remove first instance of path from a list of paths.
Args:
@@ -566,11 +615,13 @@ def remove_first_path(self, name: str, path: str, separator: str = os.pathsep):
path: path to be removed
separator: separator for the paths (default: os.pathsep)
"""
+ path = _validate_path_value(name, path)
item = RemoveFirstPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def remove_last_path(self, name: str, path: str, separator: str = os.pathsep):
+ def remove_last_path(
+ self, name: str, path: Union[str, pathlib.PurePath], separator: str = os.pathsep
+ ) -> None:
"""Stores a request to remove last instance of path from a list of paths.
Args:
@@ -578,11 +629,13 @@ def remove_last_path(self, name: str, path: str, separator: str = os.pathsep):
path: path to be removed
separator: separator for the paths (default: os.pathsep)
"""
+ path = _validate_path_value(name, path)
item = RemoveLastPath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def remove_path(self, name: str, path: str, separator: str = os.pathsep):
+ def remove_path(
+ self, name: str, path: Union[str, pathlib.PurePath], separator: str = os.pathsep
+ ) -> None:
"""Stores a request to remove a path from a list of paths.
Args:
@@ -590,11 +643,11 @@ def remove_path(self, name: str, path: str, separator: str = os.pathsep):
path: path to be removed
separator: separator for the paths (default: os.pathsep)
"""
+ path = _validate_path_value(name, path)
item = RemovePath(name, path, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def deprioritize_system_paths(self, name: str, separator: str = os.pathsep):
+ def deprioritize_system_paths(self, name: str, separator: str = os.pathsep) -> None:
"""Stores a request to deprioritize system paths in a path list,
otherwise preserving the order.
@@ -605,8 +658,7 @@ def deprioritize_system_paths(self, name: str, separator: str = os.pathsep):
item = DeprioritizeSystemPaths(name, separator=separator, trace=self._trace())
self.env_modifications.append(item)
- @system_env_normalize
- def prune_duplicate_paths(self, name: str, separator: str = os.pathsep):
+ def prune_duplicate_paths(self, name: str, separator: str = os.pathsep) -> None:
"""Stores a request to remove duplicates from a path list, otherwise
preserving the order.
diff --git a/lib/spack/spack/variant.py b/lib/spack/spack/variant.py
index 5fa2251f127..cd4de737779 100644
--- a/lib/spack/spack/variant.py
+++ b/lib/spack/spack/variant.py
@@ -10,7 +10,6 @@
import functools
import inspect
import itertools
-import re
from typing import Any, Callable, Collection, Iterable, List, Optional, Tuple, Type, Union
import llnl.util.lang as lang
@@ -33,24 +32,22 @@
"target",
}
-special_variant_values = [None, "none", "*"]
-
-class VariantType(enum.Enum):
+class VariantType(enum.IntEnum):
"""Enum representing the three concrete variant types."""
- MULTI = "multi"
- BOOL = "bool"
- SINGLE = "single"
+ BOOL = 1
+ SINGLE = 2
+ MULTI = 3
@property
- def variant_class(self) -> Type:
- if self is self.MULTI:
- return MultiValuedVariant
- elif self is self.BOOL:
- return BoolValuedVariant
- else:
- return SingleValuedVariant
+ def string(self) -> str:
+ """Convert the variant type to a string."""
+ if self == VariantType.BOOL:
+ return "bool"
+ elif self == VariantType.SINGLE:
+ return "single"
+ return "multi"
class Variant:
@@ -134,7 +131,7 @@ def isa_type(v):
self.sticky = sticky
self.precedence = precedence
- def validate_or_raise(self, vspec: "AbstractVariant", pkg_name: str):
+ def validate_or_raise(self, vspec: "VariantValue", pkg_name: str):
"""Validate a variant spec against this package variant. Raises an
exception if any error is found.
@@ -156,7 +153,7 @@ def validate_or_raise(self, vspec: "AbstractVariant", pkg_name: str):
raise InconsistentValidationError(vspec, self)
# If the value is exclusive there must be at most one
- value = vspec.value_as_tuple
+ value = vspec.values
if not self.multi and len(value) != 1:
raise MultipleValuesInExclusiveVariantError(vspec, pkg_name)
@@ -191,27 +188,15 @@ def allowed_values(self):
v = docstring if docstring else ""
return v
- def make_default(self):
- """Factory that creates a variant holding the default value.
+ def make_default(self) -> "VariantValue":
+ """Factory that creates a variant holding the default value(s)."""
+ variant = VariantValue.from_string_or_bool(self.name, self.default)
+ variant.type = self.variant_type
+ return variant
- Returns:
- MultiValuedVariant or SingleValuedVariant or BoolValuedVariant:
- instance of the proper variant
- """
- return self.make_variant(self.default)
-
- def make_variant(self, value: Union[str, bool]) -> "AbstractVariant":
- """Factory that creates a variant holding the value passed as
- a parameter.
-
- Args:
- value: value that will be hold by the variant
-
- Returns:
- MultiValuedVariant or SingleValuedVariant or BoolValuedVariant:
- instance of the proper variant
- """
- return self.variant_type.variant_class(self.name, value)
+ def make_variant(self, *value: Union[str, bool]) -> "VariantValue":
+ """Factory that creates a variant holding the value(s) passed."""
+ return VariantValue(self.variant_type, self.name, value)
@property
def variant_type(self) -> VariantType:
@@ -237,27 +222,6 @@ def __str__(self):
)
-def implicit_variant_conversion(method):
- """Converts other to type(self) and calls method(self, other)
-
- Args:
- method: any predicate method that takes another variant as an argument
-
- Returns: decorated method
- """
-
- @functools.wraps(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, propagate=other.propagate)
- except (spack.error.SpecError, ValueError):
- return False
- return method(self, other)
-
- return convert
-
-
def _flatten(values) -> Collection:
"""Flatten instances of _ConditionalVariantValues for internal representation"""
if isinstance(values, DisjointSetsOfValues):
@@ -275,335 +239,244 @@ def _flatten(values) -> Collection:
#: Type for value of a variant
-ValueType = Union[str, bool, Tuple[Union[str, bool], ...]]
+ValueType = Tuple[Union[bool, str], ...]
#: Type of variant value when output for JSON, YAML, etc.
SerializedValueType = Union[str, bool, List[Union[str, bool]]]
@lang.lazy_lexicographic_ordering
-class AbstractVariant:
- """A variant that has not yet decided who it wants to be. It behaves like
- a multi valued variant which **could** do things.
-
- This kind of variant is generated during parsing of expressions like
- ``foo=bar`` and differs from multi valued variants because it will
- satisfy any other variant with the same name. This is because it **could**
- do it if it grows up to be a multi valued variant with the right set of
- values.
- """
+class VariantValue:
+ """A VariantValue is a key-value pair that represents a variant. It can have zero or more
+ values. Values have set semantics, so they are unordered and unique. The variant type can
+ be narrowed from multi to single to boolean, this limits the number of values that can be
+ stored in the variant. Multi-valued variants can either be concrete or abstract: abstract
+ means that the variant takes at least the values specified, but may take more when concretized.
+ Concrete means that the variant takes exactly the values specified. Lastly, a variant can be
+ marked as propagating, which means that it should be propagated to dependencies."""
name: str
propagate: bool
- _value: ValueType
- _original_value: Any
+ concrete: bool
+ type: VariantType
+ _values: ValueType
- def __init__(self, name: str, value: ValueType, propagate: bool = False) -> None:
+ slots = ("name", "propagate", "concrete", "type", "_values")
+
+ def __init__(
+ self,
+ type: VariantType,
+ name: str,
+ value: ValueType,
+ *,
+ propagate: bool = False,
+ concrete: bool = False,
+ ) -> None:
self.name = name
+ self.type = type
self.propagate = propagate
+ # only multi-valued variants can be abstract
+ self.concrete = concrete or type in (VariantType.BOOL, VariantType.SINGLE)
# Invokes property setter
- self.value = value
+ self.set(*value)
@staticmethod
def from_node_dict(
- name: str, value: Union[str, List[str]], *, propagate: bool = False
- ) -> "AbstractVariant":
+ name: str, value: Union[str, List[str]], *, propagate: bool = False, abstract: bool = False
+ ) -> "VariantValue":
"""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, (), propagate=propagate)
- mvar._value = tuple(value)
- mvar._original_value = mvar._value
- return mvar
+ return VariantValue(
+ VariantType.MULTI, name, tuple(value), propagate=propagate, concrete=not abstract
+ )
+ # todo: is this necessary? not literal true / false in json/yaml?
elif str(value).upper() == "TRUE" or str(value).upper() == "FALSE":
- return BoolValuedVariant(name, value, propagate=propagate)
+ return VariantValue(
+ VariantType.BOOL, name, (str(value).upper() == "TRUE",), propagate=propagate
+ )
- return SingleValuedVariant(name, value, propagate=propagate)
+ return VariantValue(VariantType.SINGLE, name, (value,), propagate=propagate)
+
+ @staticmethod
+ def from_string_or_bool(
+ name: str, value: Union[str, bool], *, propagate: bool = False, concrete: bool = False
+ ) -> "VariantValue":
+ if value is True or value is False:
+ return VariantValue(VariantType.BOOL, name, (value,), propagate=propagate)
+
+ elif value.upper() in ("TRUE", "FALSE"):
+ return VariantValue(
+ VariantType.BOOL, name, (value.upper() == "TRUE",), propagate=propagate
+ )
+
+ elif value == "*":
+ return VariantValue(VariantType.MULTI, name, (), propagate=propagate)
+
+ return VariantValue(
+ VariantType.MULTI,
+ name,
+ tuple(value.split(",")),
+ propagate=propagate,
+ concrete=concrete,
+ )
+
+ @staticmethod
+ def from_concretizer(name: str, value: str, type: str) -> "VariantValue":
+ """Reconstruct a variant from concretizer output."""
+ if type == "bool":
+ return VariantValue(VariantType.BOOL, name, (value == "True",))
+ elif type == "multi":
+ return VariantValue(VariantType.MULTI, name, (value,), concrete=True)
+ else:
+ return VariantValue(VariantType.SINGLE, name, (value,))
def yaml_entry(self) -> Tuple[str, SerializedValueType]:
- """Returns a key, value tuple suitable to be an entry in a yaml dict.
+ """Returns a (key, value) tuple suitable to be an entry in a yaml dict.
Returns:
tuple: (name, value_representation)
"""
- return self.name, list(self.value_as_tuple)
+ if self.type == VariantType.MULTI:
+ return self.name, list(self.values)
+ return self.name, self.values[0]
@property
- def value_as_tuple(self) -> Tuple[Union[bool, str], ...]:
- """Getter for self.value that always returns a Tuple (even for single valued variants).
-
- This makes it easy to iterate over possible values.
- """
- if isinstance(self._value, (bool, str)):
- return (self._value,)
- return self._value
+ def values(self) -> ValueType:
+ return self._values
@property
- def value(self) -> ValueType:
- """Returns a tuple of strings containing the values stored in
- the variant.
+ def value(self) -> Union[ValueType, bool, str]:
+ return self._values[0] if self.type != VariantType.MULTI else self._values
- Returns:
- tuple: values stored in the variant
- """
- return self._value
+ def set(self, *value: Union[bool, str]) -> None:
+ """Set the value(s) of the variant."""
+ if len(value) > 1:
+ value = tuple(sorted(set(value)))
- @value.setter
- def value(self, value: ValueType) -> None:
- self._value_setter(value)
+ if self.type != VariantType.MULTI:
+ if len(value) != 1:
+ raise MultipleValuesInExclusiveVariantError(self)
+ unwrapped = value[0]
+ if self.type == VariantType.BOOL and unwrapped not in (True, False):
+ raise ValueError(
+ f"cannot set a boolean variant to a value that is not a boolean: {unwrapped}"
+ )
- def _value_setter(self, value: ValueType) -> None:
- # Store the original value
- self._original_value = value
+ if "*" in value:
+ raise InvalidVariantValueError("cannot use reserved value '*'")
- if not isinstance(value, (tuple, list)):
- # Store a tuple of CSV string representations
- # Tuple is necessary here instead of list because the
- # values need to be hashed
- value = tuple(re.split(r"\s*,\s*", str(value)))
-
- for val in special_variant_values:
- if val in value and len(value) > 1:
- msg = "'%s' cannot be combined with other variant" % val
- msg += " values."
- raise InvalidVariantValueCombinationError(msg)
-
- # With multi-value variants it is necessary
- # to remove duplicates and give an order
- # to a set
- self._value = tuple(sorted(set(value)))
+ self._values = value
def _cmp_iter(self) -> Iterable:
yield self.name
yield self.propagate
- yield from (str(v) for v in self.value_as_tuple)
+ yield self.concrete
+ yield from (str(v) for v in self.values)
- def copy(self) -> "AbstractVariant":
- """Returns an instance of a variant equivalent to self
-
- Returns:
- AbstractVariant: a copy of self
-
- >>> a = MultiValuedVariant('foo', True)
- >>> b = a.copy()
- >>> assert a == b
- >>> assert a is not b
- """
- return type(self)(self.name, self._original_value, self.propagate)
-
- @implicit_variant_conversion
- def satisfies(self, other: "AbstractVariant") -> bool:
- """Returns true if ``other.name == self.name``, because any value that
- other holds and is not in self yet **could** be added.
-
- Args:
- other: constraint to be met for the method to return True
-
- Returns:
- bool: True or False
- """
- # If names are different then `self` does not satisfy `other`
- # (`foo=bar` will never satisfy `baz=bar`)
- return other.name == self.name
-
- def intersects(self, other: "AbstractVariant") -> bool:
- """Returns True if there are variant matching both self and other, False otherwise."""
- if isinstance(other, (SingleValuedVariant, BoolValuedVariant)):
- return other.intersects(self)
- return other.name == self.name
-
- def compatible(self, other: "AbstractVariant") -> bool:
- """Returns True if self and other are compatible, False otherwise.
-
- As there is no semantic check, two VariantSpec are compatible if
- either they contain the same value or they are both multi-valued.
-
- Args:
- other: instance against which we test compatibility
-
- Returns:
- bool: True or False
- """
- # If names are different then `self` is not compatible with `other`
- # (`foo=bar` is incompatible with `baz=bar`)
- return self.intersects(other)
-
- @implicit_variant_conversion
- def constrain(self, other: "AbstractVariant") -> bool:
- """Modify self to match all the constraints for other if both
- instances are multi-valued. Returns True if self changed,
- False otherwise.
-
- Args:
- other: instance against which we constrain self
-
- Returns:
- bool: True or False
- """
- if self.name != other.name:
- raise ValueError("variants must have the same name")
-
- old_value = self.value
-
- values = list(sorted(set(self.value_as_tuple + other.value_as_tuple)))
- # If we constraint wildcard by another value, just take value
- if "*" in values and len(values) > 1:
- 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:
- return item in self.value_as_tuple
-
- def __repr__(self) -> str:
- return f"{type(self).__name__}({repr(self.name)}, {repr(self._original_value)})"
-
- def __str__(self) -> str:
- delim = "==" if self.propagate else "="
- values = spack.spec_parser.quote_if_needed(",".join(str(v) for v in self.value_as_tuple))
- return f"{self.name}{delim}{values}"
-
-
-class MultiValuedVariant(AbstractVariant):
- """A variant that can hold multiple values at once."""
-
- @implicit_variant_conversion
- def satisfies(self, other: AbstractVariant) -> bool:
- """Returns true if ``other.name == self.name`` and ``other.value`` is
- a strict subset of self. Does not try to validate.
-
- Args:
- other: constraint to be met for the method to return True
-
- Returns:
- bool: True or False
- """
- super_sat = super().satisfies(other)
-
- if not super_sat:
- return False
-
- if "*" in other or "*" in self:
- return True
-
- # allow prefix find on patches
- if self.name == "patches":
- return all(
- any(str(w).startswith(str(v)) for w in self.value_as_tuple)
- for v in other.value_as_tuple
- )
-
- # Otherwise we want all the values in `other` to be also in `self`
- return all(v in self for v in other.value_as_tuple)
-
- def append(self, value: Union[str, bool]) -> None:
- """Add another value to this multi-valued variant."""
- self._value = tuple(sorted((value,) + self.value_as_tuple))
- self._original_value = ",".join(str(v) for v in self._value)
-
- def __str__(self) -> str:
- # Special-case patches to not print the full 64 character sha256
- if self.name == "patches":
- values_str = ",".join(str(x)[:7] for x in self.value_as_tuple)
- else:
- values_str = ",".join(str(x) for x in self.value_as_tuple)
-
- delim = "==" if self.propagate else "="
- return f"{self.name}{delim}{spack.spec_parser.quote_if_needed(values_str)}"
-
-
-class SingleValuedVariant(AbstractVariant):
- """A variant that can hold multiple values, but one at a time."""
-
- def _value_setter(self, value: ValueType) -> None:
- # Treat the value as a multi-valued variant
- super()._value_setter(value)
-
- # Then check if there's only a single value
- values = self.value_as_tuple
- if len(values) != 1:
- raise MultipleValuesInExclusiveVariantError(self)
-
- self._value = values[0]
-
- @implicit_variant_conversion
- def satisfies(self, other: "AbstractVariant") -> bool:
- abstract_sat = super().satisfies(other)
-
- return abstract_sat and (
- self.value == other.value or other.value == "*" or self.value == "*"
+ def copy(self) -> "VariantValue":
+ return VariantValue(
+ self.type, self.name, self.values, propagate=self.propagate, concrete=self.concrete
)
- def intersects(self, other: "AbstractVariant") -> bool:
- return self.satisfies(other)
-
- def compatible(self, other: "AbstractVariant") -> bool:
- return self.satisfies(other)
-
- @implicit_variant_conversion
- def constrain(self, other: "AbstractVariant") -> bool:
+ def satisfies(self, other: "VariantValue") -> bool:
+ """The lhs satisfies the rhs if all possible concretizations of lhs are also
+ possible concretizations of rhs."""
if self.name != other.name:
- raise ValueError("variants must have the same name")
-
- if other.value == "*":
return False
- if self.value == "*":
- self.value = other.value
- return True
-
- if self.value != other.value:
- raise UnsatisfiableVariantSpecError(other.value, self.value)
- self.propagate = self.propagate and other.propagate
+ if not other.concrete:
+ # rhs abstract means the lhs must at least contain its values.
+ # special-case patches with rhs abstract: their values may be prefixes of the lhs
+ # values.
+ if self.name == "patches":
+ return all(
+ isinstance(v, str)
+ and any(isinstance(w, str) and w.startswith(v) for w in self.values)
+ for v in other.values
+ )
+ return all(v in self for v in other.values)
+ if self.concrete:
+ # both concrete: they must be equal
+ return self.values == other.values
return False
- def __contains__(self, item: ValueType) -> bool:
- return item == self.value
+ def intersects(self, other: "VariantValue") -> bool:
+ """True iff there exists a concretization that satisfies both lhs and rhs."""
+ if self.name != other.name:
+ return False
+ if self.concrete:
+ if other.concrete:
+ return self.values == other.values
+ return all(v in self for v in other.values)
+ if other.concrete:
+ return all(v in other for v in self.values)
+ # both abstract: the union is a valid concretization of both
+ return True
- def yaml_entry(self) -> Tuple[str, SerializedValueType]:
- assert isinstance(self.value, (bool, str))
- return self.name, self.value
+ def constrain(self, other: "VariantValue") -> bool:
+ """Constrain self with other if they intersect. Returns true iff self was changed."""
+ if not self.intersects(other):
+ raise UnsatisfiableVariantSpecError(self, other)
+ old_values = self.values
+ self.set(*self.values, *other.values)
+ changed = old_values != self.values
+ if self.propagate and not other.propagate:
+ self.propagate = False
+ changed = True
+ if not self.concrete and other.concrete:
+ self.concrete = True
+ changed = True
+ if self.type > other.type:
+ self.type = other.type
+ changed = True
+ return changed
+
+ def append(self, value: Union[str, bool]) -> None:
+ self.set(*self.values, value)
+
+ def __contains__(self, item: Union[str, bool]) -> bool:
+ return item in self.values
def __str__(self) -> str:
+ # boolean variants are printed +foo or ~foo
+ if self.type == VariantType.BOOL:
+ sigil = "+" if self.value else "~"
+ if self.propagate:
+ sigil *= 2
+ return f"{sigil}{self.name}"
+
+ # concrete multi-valued foo:=bar,baz
+ concrete = ":" if self.type == VariantType.MULTI and self.concrete else ""
delim = "==" if self.propagate else "="
- return f"{self.name}{delim}{spack.spec_parser.quote_if_needed(str(self.value))}"
-
-
-class BoolValuedVariant(SingleValuedVariant):
- """A variant that can hold either True or False.
-
- BoolValuedVariant can also hold the value '*', for coerced
- comparisons between ``foo=*`` and ``+foo`` or ``~foo``."""
-
- def _value_setter(self, value: ValueType) -> None:
- # Check the string representation of the value and turn
- # it to a boolean
- if str(value).upper() == "TRUE":
- self._original_value = value
- self._value = True
- elif str(value).upper() == "FALSE":
- self._original_value = value
- self._value = False
- elif str(value) == "*":
- self._original_value = value
- self._value = "*"
+ if not self.values:
+ value_str = "*"
+ elif self.name == "patches" and self.concrete:
+ value_str = ",".join(str(x)[:7] for x in self.values)
else:
- msg = 'cannot construct a BoolValuedVariant for "{0}" from '
- msg += "a value that does not represent a bool"
- raise ValueError(msg.format(self.name))
+ value_str = ",".join(str(x) for x in self.values)
+ return f"{self.name}{concrete}{delim}{spack.spec_parser.quote_if_needed(value_str)}"
- def __contains__(self, item: ValueType) -> bool:
- return item is self.value
+ def __repr__(self):
+ return (
+ f"VariantValue({self.type!r}, {self.name!r}, {self.values!r}, "
+ f"propagate={self.propagate!r}, concrete={self.concrete!r})"
+ )
- def __str__(self) -> str:
- sigil = "+" if self.value else "~"
- if self.propagate:
- sigil *= 2
- return f"{sigil}{self.name}"
+
+def MultiValuedVariant(name: str, value: ValueType, propagate: bool = False) -> VariantValue:
+ return VariantValue(VariantType.MULTI, name, value, propagate=propagate, concrete=True)
+
+
+def SingleValuedVariant(
+ name: str, value: Union[bool, str], propagate: bool = False
+) -> VariantValue:
+ return VariantValue(VariantType.SINGLE, name, (value,), propagate=propagate)
+
+
+def BoolValuedVariant(name: str, value: bool, propagate: bool = False) -> VariantValue:
+ return VariantValue(VariantType.BOOL, name, (value,), propagate=propagate)
# The class below inherit from Sequence to disguise as a tuple and comply
@@ -810,7 +683,7 @@ def __lt__(self, other):
def prevalidate_variant_value(
pkg_cls: "Type[spack.package_base.PackageBase]",
- variant: AbstractVariant,
+ variant: VariantValue,
spec: Optional["spack.spec.Spec"] = None,
strict: bool = False,
) -> List[Variant]:
@@ -831,8 +704,8 @@ def prevalidate_variant_value(
list of variant definitions that will accept the given value. List will be empty
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 or variant.propagate:
+ # do not validate non-user variants or optional variants
+ if variant.name in RESERVED_NAMES or variant.propagate:
return []
# raise if there is no definition at all
@@ -915,17 +788,13 @@ class MultipleValuesInExclusiveVariantError(spack.error.SpecError, ValueError):
only one.
"""
- def __init__(self, variant: AbstractVariant, pkg_name: Optional[str] = None):
+ def __init__(self, variant: VariantValue, pkg_name: Optional[str] = None):
pkg_info = "" if pkg_name is None else f" in package '{pkg_name}'"
msg = f"multiple values are not allowed for variant '{variant.name}'{pkg_info}"
super().__init__(msg.format(variant, pkg_info))
-class InvalidVariantValueCombinationError(spack.error.SpecError):
- """Raised when a variant has values '*' or 'none' with other values."""
-
-
class InvalidVariantValueError(spack.error.SpecError):
"""Raised when variants have invalid values."""
diff --git a/lib/spack/spack/version/version_types.py b/lib/spack/spack/version/version_types.py
index 6728d23e3e3..33810059e49 100644
--- a/lib/spack/spack/version/version_types.py
+++ b/lib/spack/spack/version/version_types.py
@@ -1257,7 +1257,7 @@ def _prev_version(v: StandardVersion) -> StandardVersion:
return StandardVersion("", (release, prerelease), separators)
-def Version(string: Union[str, int]) -> ConcreteVersion:
+def Version(string: Union[str, int]) -> Union[StandardVersion, GitVersion]:
if not isinstance(string, (str, int)):
raise TypeError(f"Cannot construct a version from {type(string)}")
string = str(string)
diff --git a/share/spack/gitlab/cloud_pipelines/configs/ci.yaml b/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
index 3e81461e48d..e3679f87493 100644
--- a/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
+++ b/share/spack/gitlab/cloud_pipelines/configs/ci.yaml
@@ -22,7 +22,7 @@ ci:
script::
- - if [ -n "$SPACK_EXTRA_MIRROR" ]; then spack mirror add local "${SPACK_EXTRA_MIRROR}/${SPACK_CI_STACK_NAME}"; fi
- spack config blame mirrors
- - - spack --color=always --backtrace ci rebuild -j ${SPACK_BUILD_JOBS} --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
+ - - spack --color=always --backtrace ci rebuild -j ${SPACK_BUILD_JOBS} --tests --timeout 300 > >(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
@@ -42,7 +42,7 @@ ci:
aud: "${OIDC_TOKEN_AUDIENCE}"
- signing-job:
- image: { "name": "ghcr.io/spack/notary:latest", "entrypoint": [""] }
+ image: { "name": "ghcr.io/spack/notary:0.0.1", "entrypoint": [""] }
tags: ["aws"]
script:
- - aws s3 sync --exclude "*" --include "*spec.json*" ${SPACK_BUILDCACHE_DESTINATION}/build_cache /tmp
diff --git a/share/spack/gitlab/cloud_pipelines/configs/win64/ci.yaml b/share/spack/gitlab/cloud_pipelines/configs/win64/ci.yaml
index 649e3f0ef87..2d8aedf6d44 100644
--- a/share/spack/gitlab/cloud_pipelines/configs/win64/ci.yaml
+++ b/share/spack/gitlab/cloud_pipelines/configs/win64/ci.yaml
@@ -5,7 +5,6 @@ ci:
- Write-Output "Done"
before_script::
- - git config core.autocrlf true
- fsutil 8dot3name set C:\ 0
- . .\share\spack\setup-env.ps1
- If (Test-Path -path C:\\key\intermediate_ci_signing_key.gpg) { spack.ps1 gpg trust C:\\key\intermediate_ci_signing_key.gpg }
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 7ff00e0203d..9dcd427bddd 100644
--- a/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml
+++ b/share/spack/gitlab/cloud_pipelines/stacks/e4s-oneapi/spack.yaml
@@ -173,11 +173,11 @@ spack:
- vtk-m ~openmp # +openmp: https://github.com/spack/spack/issues/31830
- zfp
# --
- # - paraview +qt # llvm-17.0.6: https://github.com/spack/spack/issues/49625
- # - py-cinemasci # llvm-14.0.6: https://github.com/spack/spack/issues/49625
- # - visit # llvm-17.0.6: https://github.com/spack/spack/issues/49625
+ # - paraview +qt # concretize: paraview: Qt support requires GLX on non Windows; llvm-17.0.6: https://github.com/spack/spack/issues/49625
+ # - py-cinemasci # py-maturin-1.8.3: rust-lld: error: undefined symbol: _intel_fast_memcpy
+ # - visit # vtk-9.2.6: ??
# --
- # - chapel ~cuda ~rocm # llvm-19.1.7: https://github.com/spack/spack/issues/49625
+ # - chapel ~cuda ~rocm # chapel-2.4.0: KeyError: 'intel-oneapi-compilers': /builds/spack/spack/var/spack/repos/builtin/packages/chapel/package.py:602, in setup_chpl_compilers: env.set("CHPL_HOST_COMPILER", self.compiler_map[self.spec.compiler.name])
# - cp2k +mpi # dbcsr-2.8.0: FAILED: src/CMakeFiles/dbcsr.dir/dbcsr_api.F-pp.f src/CMakeFiles/dbcsr.dir/dbcsr_api.F.o.ddi:
# - dealii # taskflow@3.7.0: cmake: Taskflow currently supports the following compilers: g++ v7.0 or above, clang++ v6.0 or above
# - exago +mpi ~ipopt +hiop ~python +raja ^hiop+raja~sparse # raja-0.14.0: RAJA/pattern/kernel/Tile.hpp:174:30: error: no member named 'block_id' in 'IterableTiler'
@@ -185,8 +185,8 @@ spack:
# - fftx # fftx-1.2.0: https://github.com/spack/spack/issues/49621
# - fpm # fpm-0.10.0: /tmp/ifx1305151083OkWTRB/ifxqBG60i.i90: error #6405: The same named entity from different modules and/or program units cannot be referenced. [TOML_TABLE]; fpm.F90(32048): error #7002: Error in opening the compiled module file. Check INCLUDE paths. [FPM_MANIFEST_PREPROCESS]
# - geopm-runtime # concretize: c-blosc2: conflicts with '%oneapi';
- # - glvis # llvm-17.0.6: https://github.com/spack/spack/issues/49625
- # - gptune ~mpispawn # llvm-14.0.6: https://github.com/spack/spack/issues/49625
+ - glvis # llvm-17.0.6: https://github.com/spack/spack/issues/49625
+ # - gptune ~mpispawn # py-maturin-1.8.3: rust-lld: error: undefined symbol: __intel_cpu_feature_indicator_x
# - lbann # lbann-0.104: https://github.com/spack/spack/issues/49619
# - libpressio +bitgrooming +bzip2 ~cuda ~cusz +fpzip +hdf5 +libdistributed +lua +openmp +python +sz +sz3 +unix +zfp # concretize: c-blosc2: conflicts with '%oneapi';
# - nek5000 +mpi ~visit # nek5000-19.0: RuntimeError: Cannot build example: short_tests/eddy.
@@ -209,8 +209,8 @@ spack:
# --
# - py-jupyterlab # py-maturin: rust-lld: error: undefined symbol: _intel_fast_memcpy
# - py-notebook # py-maturin: rust-lld: error: undefined symbol: _intel_fast_memcpy
- # - py-numba # llvm-14.0.6: https://github.com/spack/spack/issues/49625
- # - py-pandas # llvm-14.0.6: https://github.com/spack/spack/issues/49625
+ - py-numba # llvm-14.0.6: https://github.com/spack/spack/issues/49625
+ - py-pandas # llvm-14.0.6: https://github.com/spack/spack/issues/49625
# - py-plotly # py-maturin: rust-lld: error: undefined symbol: _intel_fast_memcpy
- aml +level_zero
diff --git a/share/spack/gitlab/cloud_pipelines/stacks/hep/spack.yaml b/share/spack/gitlab/cloud_pipelines/stacks/hep/spack.yaml
index cfdb74bdf91..3027875ed7b 100644
--- a/share/spack/gitlab/cloud_pipelines/stacks/hep/spack.yaml
+++ b/share/spack/gitlab/cloud_pipelines/stacks/hep/spack.yaml
@@ -20,12 +20,14 @@ spack:
require: +analysis +dd4hep +edm4hep +examples +fatras +geant4 +hepmc3 +podio +pythia8 +python +svg +tgeo cxxstd=20
celeritas:
require: +geant4 +hepmc3 +root +shared cxxstd=20
+ geant4:
+ require: +opengl +qt +threads +x11
hip:
require: '@5.7.1 +rocm'
rivet:
require: hepmc=3
root:
- require: +davix +dcache +examples +fftw +fits +fortran +gdml +graphviz +gsl +http +math +minuit +mlp +mysql +opengl +postgres +pythia8 +python +r +roofit +root7 +rpath ~shadow +spectrum +sqlite +ssl +tbb +threads +tmva +tmva-cpu +unuran +vc +vdt +veccore +webgui +x +xml +xrootd # cxxstd=20
+ require: +arrow ~daos +davix +dcache +emacs +examples +fftw +fits +fortran +gdml +graphviz +gsl +http +math +minuit +mlp +mysql +opengl +postgres +pythia8 +python +r +roofit +root7 +rpath ~shadow +spectrum +sqlite +ssl +tbb +threads +tmva +tmva-cpu +unuran +vc +vdt +veccore +webgui +x +xml +xrootd # cxxstd=20
# note: root cxxstd=20 not concretizable within sherpa
vecgeom:
require: +gdml +geant4 +root +shared cxxstd=20
@@ -66,8 +68,10 @@ spack:
- fjcontrib
#- garfieldpp
- gaudi +aida +examples +heppdt +xercesc ^gdb +debuginfod +python
- - geant4 +opengl +qt +threads ~vtk ^[virtuals=qmake] qt
+ - geant4 ~vtk ^[virtuals=qmake] qt
+ - geant4 ~vtk ^[virtuals=qmake] qt-base
#- genie +atmo
+ - geomodel +examples +fullsimlight +geomodelg4 +hepmc3 +pythia +tools +visualization
- hepmc
- hepmc3 +interfaces +protobuf +python +rootio
#- herwig3 +njet +vbfnlo # Note: herwig3 fails to find evtgen
@@ -97,6 +101,7 @@ spack:
- py-uhi
- py-uproot +lz4 +xrootd +zstd
- py-vector
+ - py-zfit
- pythia8 +evtgen +fastjet +hdf5 +hepmc +hepmc3 +lhapdf ~madgraph5amc +python +rivet ~root # pythia8 and root circularly depend
- rivet
- root ~cuda
diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash
index f2a3c7be1dc..94d4457d393 100644
--- a/share/spack/spack-completion.bash
+++ b/share/spack/spack-completion.bash
@@ -563,14 +563,14 @@ _spack_buildcache() {
then
SPACK_COMPREPLY="-h --help"
else
- SPACK_COMPREPLY="push create install list keys check download get-buildcache-name save-specfile sync update-index rebuild-index"
+ SPACK_COMPREPLY="push create install list keys check download save-specfile sync update-index rebuild-index"
fi
}
_spack_buildcache_push() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -f --force --unsigned -u --signed --key -k --update-index --rebuild-index --spec-file --only --with-build-dependencies --without-build-dependencies --fail-fast --base-image --tag -t --private -j --jobs"
+ SPACK_COMPREPLY="-h --help -f --force --unsigned -u --signed --key -k --update-index --rebuild-index --only --with-build-dependencies --without-build-dependencies --fail-fast --base-image --tag -t --private -j --jobs"
else
_mirrors
fi
@@ -579,7 +579,7 @@ _spack_buildcache_push() {
_spack_buildcache_create() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -f --force --unsigned -u --signed --key -k --update-index --rebuild-index --spec-file --only --with-build-dependencies --without-build-dependencies --fail-fast --base-image --tag -t --private -j --jobs"
+ SPACK_COMPREPLY="-h --help -f --force --unsigned -u --signed --key -k --update-index --rebuild-index --only --with-build-dependencies --without-build-dependencies --fail-fast --base-image --tag -t --private -j --jobs"
else
_mirrors
fi
@@ -610,22 +610,18 @@ _spack_buildcache_keys() {
_spack_buildcache_check() {
if $list_options
then
- SPACK_COMPREPLY="-h --help -m --mirror-url -o --output-file --scope -s --spec --spec-file"
+ SPACK_COMPREPLY="-h --help -m --mirror-url -o --output-file --scope"
else
_all_packages
fi
}
_spack_buildcache_download() {
- SPACK_COMPREPLY="-h --help -s --spec --spec-file -p --path"
-}
-
-_spack_buildcache_get_buildcache_name() {
- SPACK_COMPREPLY="-h --help -s --spec --spec-file"
+ SPACK_COMPREPLY="-h --help -s --spec -p --path"
}
_spack_buildcache_save_specfile() {
- SPACK_COMPREPLY="-h --help --root-spec --root-specfile -s --specs --specfile-dir"
+ SPACK_COMPREPLY="-h --help --root-spec -s --specs --specfile-dir"
}
_spack_buildcache_sync() {
@@ -700,7 +696,7 @@ _spack_ci_rebuild_index() {
}
_spack_ci_rebuild() {
- SPACK_COMPREPLY="-h --help -t --tests --fail-fast -j --jobs"
+ SPACK_COMPREPLY="-h --help -t --tests --fail-fast --timeout -j --jobs"
}
_spack_ci_reproduce_build() {
@@ -753,7 +749,7 @@ _spack_compiler() {
then
SPACK_COMPREPLY="-h --help"
else
- SPACK_COMPREPLY="find add remove rm list info"
+ SPACK_COMPREPLY="find add remove rm list ls info"
fi
}
@@ -797,6 +793,10 @@ _spack_compiler_list() {
SPACK_COMPREPLY="-h --help --scope"
}
+_spack_compiler_ls() {
+ SPACK_COMPREPLY="-h --help --scope"
+}
+
_spack_compiler_info() {
if $list_options
then
@@ -1177,7 +1177,7 @@ _spack_external() {
then
SPACK_COMPREPLY="-h --help"
else
- SPACK_COMPREPLY="find list read-cray-manifest"
+ SPACK_COMPREPLY="find list ls read-cray-manifest"
fi
}
@@ -1194,6 +1194,10 @@ _spack_external_list() {
SPACK_COMPREPLY="-h --help"
}
+_spack_external_ls() {
+ SPACK_COMPREPLY="-h --help"
+}
+
_spack_external_read_cray_manifest() {
SPACK_COMPREPLY="-h --help --file --directory --ignore-default-dir --dry-run --fail-on-error"
}
@@ -1210,7 +1214,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 --only-deprecated --deprecated --install-tree --start-date --end-date"
+ SPACK_COMPREPLY="-h --help --format -H --hashes --json -I --install-status --specfile-format -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
@@ -1903,7 +1907,7 @@ _spack_test() {
_spack_test_run() {
if $list_options
then
- SPACK_COMPREPLY="-h --help --alias --fail-fast --fail-first --externals -x --explicit --keep-stage --log-format --log-file --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp --help-cdash --clean --dirty"
+ SPACK_COMPREPLY="-h --help --alias --fail-fast --fail-first --externals -x --explicit --keep-stage --log-format --log-file --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp --help-cdash --timeout --clean --dirty"
else
_installed_packages
fi
diff --git a/share/spack/spack-completion.fish b/share/spack/spack-completion.fish
index b4d4f7932b7..560f47193f5 100644
--- a/share/spack/spack-completion.fish
+++ b/share/spack/spack-completion.fish
@@ -693,7 +693,6 @@ complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a list -d
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a keys -d 'get public keys available on mirrors'
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a check -d 'check specs against remote binary mirror(s) to see if any need to be rebuilt'
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a download -d 'download buildcache entry from a remote mirror to local folder'
-complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a get-buildcache-name -d 'get name (prefix) of buildcache entries for this spec'
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a save-specfile -d 'get full spec for dependencies and write them to files in the specified output directory'
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a sync -d 'sync binaries (and associated metadata) from one mirror to another'
complete -c spack -n '__fish_spack_using_command_pos 0 buildcache' -f -a update-index -d 'update a buildcache index'
@@ -702,7 +701,7 @@ complete -c spack -n '__fish_spack_using_command buildcache' -s h -l help -f -a
complete -c spack -n '__fish_spack_using_command buildcache' -s h -l help -d 'show this help message and exit'
# spack buildcache push
-set -g __fish_spack_optspecs_spack_buildcache_push h/help f/force u/unsigned signed k/key= update-index spec-file= only= with-build-dependencies without-build-dependencies fail-fast base-image= t/tag= private j/jobs=
+set -g __fish_spack_optspecs_spack_buildcache_push h/help f/force u/unsigned signed k/key= update-index only= with-build-dependencies without-build-dependencies fail-fast base-image= t/tag= private j/jobs=
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache push' -f -k -a '(__fish_spack_specs)'
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command buildcache push' -s h -l help -d 'show this help message and exit'
@@ -716,8 +715,6 @@ complete -c spack -n '__fish_spack_using_command buildcache push' -l key -s k -r
complete -c spack -n '__fish_spack_using_command buildcache push' -l key -s k -r -d 'key for signing'
complete -c spack -n '__fish_spack_using_command buildcache push' -l update-index -l rebuild-index -f -a update_index
complete -c spack -n '__fish_spack_using_command buildcache push' -l update-index -l rebuild-index -d 'regenerate buildcache index after building package(s)'
-complete -c spack -n '__fish_spack_using_command buildcache push' -l spec-file -r -f -a spec_file
-complete -c spack -n '__fish_spack_using_command buildcache push' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -f -a 'package dependencies'
complete -c spack -n '__fish_spack_using_command buildcache push' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
complete -c spack -n '__fish_spack_using_command buildcache push' -l with-build-dependencies -f -a with_build_dependencies
@@ -736,7 +733,7 @@ complete -c spack -n '__fish_spack_using_command buildcache push' -s j -l jobs -
complete -c spack -n '__fish_spack_using_command buildcache push' -s j -l jobs -r -d 'explicitly set number of parallel jobs'
# spack buildcache create
-set -g __fish_spack_optspecs_spack_buildcache_create h/help f/force u/unsigned signed k/key= update-index spec-file= only= with-build-dependencies without-build-dependencies fail-fast base-image= t/tag= private j/jobs=
+set -g __fish_spack_optspecs_spack_buildcache_create h/help f/force u/unsigned signed k/key= update-index only= with-build-dependencies without-build-dependencies fail-fast base-image= t/tag= private j/jobs=
complete -c spack -n '__fish_spack_using_command_pos_remainder 1 buildcache create' -f -k -a '(__fish_spack_specs)'
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command buildcache create' -s h -l help -d 'show this help message and exit'
@@ -750,8 +747,6 @@ complete -c spack -n '__fish_spack_using_command buildcache create' -l key -s k
complete -c spack -n '__fish_spack_using_command buildcache create' -l key -s k -r -d 'key for signing'
complete -c spack -n '__fish_spack_using_command buildcache create' -l update-index -l rebuild-index -f -a update_index
complete -c spack -n '__fish_spack_using_command buildcache create' -l update-index -l rebuild-index -d 'regenerate buildcache index after building package(s)'
-complete -c spack -n '__fish_spack_using_command buildcache create' -l spec-file -r -f -a spec_file
-complete -c spack -n '__fish_spack_using_command buildcache create' -l spec-file -r -d 'create buildcache entry for spec from json or yaml file'
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -f -a 'package dependencies'
complete -c spack -n '__fish_spack_using_command buildcache create' -l only -r -d 'select the buildcache mode. The default is to build a cache for the package along with all its dependencies. Alternatively, one can decide to build a cache for only the package or only the dependencies'
complete -c spack -n '__fish_spack_using_command buildcache create' -l with-build-dependencies -f -a with_build_dependencies
@@ -811,7 +806,7 @@ complete -c spack -n '__fish_spack_using_command buildcache keys' -s f -l force
complete -c spack -n '__fish_spack_using_command buildcache keys' -s f -l force -d 'force new download of keys'
# spack buildcache check
-set -g __fish_spack_optspecs_spack_buildcache_check h/help m/mirror-url= o/output-file= scope= s/spec= spec-file=
+set -g __fish_spack_optspecs_spack_buildcache_check h/help m/mirror-url= o/output-file= scope=
complete -c spack -n '__fish_spack_using_command_pos_remainder 0 buildcache check' -f -k -a '(__fish_spack_specs)'
complete -c spack -n '__fish_spack_using_command buildcache check' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command buildcache check' -s h -l help -d 'show this help message and exit'
@@ -821,39 +816,22 @@ complete -c spack -n '__fish_spack_using_command buildcache check' -s o -l outpu
complete -c spack -n '__fish_spack_using_command buildcache check' -s o -l output-file -r -d 'file where rebuild info should be written'
complete -c spack -n '__fish_spack_using_command buildcache check' -l scope -r -f -a '_builtin defaults system site user command_line'
complete -c spack -n '__fish_spack_using_command buildcache check' -l scope -r -d 'configuration scope containing mirrors to check'
-complete -c spack -n '__fish_spack_using_command buildcache check' -s s -l spec -r -f -a spec
-complete -c spack -n '__fish_spack_using_command buildcache check' -s s -l spec -r -d 'check single spec instead of release specs file'
-complete -c spack -n '__fish_spack_using_command buildcache check' -l spec-file -r -f -a spec_file
-complete -c spack -n '__fish_spack_using_command buildcache check' -l spec-file -r -d 'check single spec from json or yaml file instead of release specs file'
# spack buildcache download
-set -g __fish_spack_optspecs_spack_buildcache_download h/help s/spec= spec-file= p/path=
+set -g __fish_spack_optspecs_spack_buildcache_download h/help s/spec= p/path=
complete -c spack -n '__fish_spack_using_command buildcache download' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command buildcache download' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command buildcache download' -s s -l spec -r -f -a spec
complete -c spack -n '__fish_spack_using_command buildcache download' -s s -l spec -r -d 'download built tarball for spec from mirror'
-complete -c spack -n '__fish_spack_using_command buildcache download' -l spec-file -r -f -a spec_file
-complete -c spack -n '__fish_spack_using_command buildcache download' -l spec-file -r -d 'download built tarball for spec (from json or yaml file) from mirror'
complete -c spack -n '__fish_spack_using_command buildcache download' -s p -l path -r -f -a path
complete -c spack -n '__fish_spack_using_command buildcache download' -s p -l path -r -d 'path to directory where tarball should be downloaded'
-# spack buildcache get-buildcache-name
-set -g __fish_spack_optspecs_spack_buildcache_get_buildcache_name h/help s/spec= spec-file=
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -s h -l help -f -a help
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -s h -l help -d 'show this help message and exit'
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -s s -l spec -r -f -a spec
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -s s -l spec -r -d 'spec string for which buildcache name is desired'
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -l spec-file -r -f -a spec_file
-complete -c spack -n '__fish_spack_using_command buildcache get-buildcache-name' -l spec-file -r -d 'path to spec json or yaml file for which buildcache name is desired'
-
# spack buildcache save-specfile
-set -g __fish_spack_optspecs_spack_buildcache_save_specfile h/help root-spec= root-specfile= s/specs= specfile-dir=
+set -g __fish_spack_optspecs_spack_buildcache_save_specfile h/help root-spec= s/specs= specfile-dir=
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -l root-spec -r -f -a root_spec
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -l root-spec -r -d 'root spec of dependent spec'
-complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -l root-specfile -r -f -a root_specfile
-complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -l root-specfile -r -d 'path to json or yaml file containing root spec of dependent spec'
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -s s -l specs -r -f -a specs
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -s s -l specs -r -d 'list of dependent specs for which saved yaml is desired'
complete -c spack -n '__fish_spack_using_command buildcache save-specfile' -l specfile-dir -r -f -a specfile_dir
@@ -989,13 +967,15 @@ complete -c spack -n '__fish_spack_using_command ci rebuild-index' -s h -l help
complete -c spack -n '__fish_spack_using_command ci rebuild-index' -s h -l help -d 'show this help message and exit'
# spack ci rebuild
-set -g __fish_spack_optspecs_spack_ci_rebuild h/help t/tests fail-fast j/jobs=
+set -g __fish_spack_optspecs_spack_ci_rebuild h/help t/tests fail-fast timeout= j/jobs=
complete -c spack -n '__fish_spack_using_command ci rebuild' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command ci rebuild' -s h -l help -d 'show this help message and exit'
complete -c spack -n '__fish_spack_using_command ci rebuild' -s t -l tests -f -a tests
complete -c spack -n '__fish_spack_using_command ci rebuild' -s t -l tests -d 'run stand-alone tests after the build'
complete -c spack -n '__fish_spack_using_command ci rebuild' -l fail-fast -f -a fail_fast
complete -c spack -n '__fish_spack_using_command ci rebuild' -l fail-fast -d 'stop stand-alone tests after the first failure'
+complete -c spack -n '__fish_spack_using_command ci rebuild' -l timeout -r -f -a timeout
+complete -c spack -n '__fish_spack_using_command ci rebuild' -l timeout -r -d 'maximum time (in seconds) that tests are allowed to run'
complete -c spack -n '__fish_spack_using_command ci rebuild' -s j -l jobs -r -f -a jobs
complete -c spack -n '__fish_spack_using_command ci rebuild' -s j -l jobs -r -d 'explicitly set number of parallel jobs'
@@ -1074,6 +1054,7 @@ complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a add -d 's
complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a remove -d 'remove compiler by spec'
complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a rm -d 'remove compiler by spec'
complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a list -d 'list available compilers'
+complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a ls -d 'list available compilers'
complete -c spack -n '__fish_spack_using_command_pos 0 compiler' -f -a info -d 'show compiler paths'
complete -c spack -n '__fish_spack_using_command compiler' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command compiler' -s h -l help -d 'show this help message and exit'
@@ -1133,6 +1114,13 @@ complete -c spack -n '__fish_spack_using_command compiler list' -s h -l help -d
complete -c spack -n '__fish_spack_using_command compiler list' -l scope -r -f -a '_builtin defaults system site user command_line'
complete -c spack -n '__fish_spack_using_command compiler list' -l scope -r -d 'configuration scope to read from'
+# spack compiler ls
+set -g __fish_spack_optspecs_spack_compiler_ls h/help scope=
+complete -c spack -n '__fish_spack_using_command compiler ls' -s h -l help -f -a help
+complete -c spack -n '__fish_spack_using_command compiler ls' -s h -l help -d 'show this help message and exit'
+complete -c spack -n '__fish_spack_using_command compiler ls' -l scope -r -f -a '_builtin defaults system site user command_line'
+complete -c spack -n '__fish_spack_using_command compiler ls' -l scope -r -d 'configuration scope to read from'
+
# spack compiler info
set -g __fish_spack_optspecs_spack_compiler_info h/help scope=
complete -c spack -n '__fish_spack_using_command_pos 0 compiler info' -f -a '(__fish_spack_installed_compilers)'
@@ -1727,6 +1715,7 @@ complete -c spack -n '__fish_spack_using_command extensions' -s s -l show -r -d
set -g __fish_spack_optspecs_spack_external h/help
complete -c spack -n '__fish_spack_using_command_pos 0 external' -f -a find -d 'add external packages to packages.yaml'
complete -c spack -n '__fish_spack_using_command_pos 0 external' -f -a list -d 'list detectable packages, by repository and name'
+complete -c spack -n '__fish_spack_using_command_pos 0 external' -f -a ls -d 'list detectable packages, by repository and name'
complete -c spack -n '__fish_spack_using_command_pos 0 external' -f -a read-cray-manifest -d 'consume a Spack-compatible description of externally-installed packages, including dependency relationships'
complete -c spack -n '__fish_spack_using_command external' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command external' -s h -l help -d 'show this help message and exit'
@@ -1756,6 +1745,11 @@ set -g __fish_spack_optspecs_spack_external_list h/help
complete -c spack -n '__fish_spack_using_command external list' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command external list' -s h -l help -d 'show this help message and exit'
+# spack external ls
+set -g __fish_spack_optspecs_spack_external_ls h/help
+complete -c spack -n '__fish_spack_using_command external ls' -s h -l help -f -a help
+complete -c spack -n '__fish_spack_using_command external ls' -s h -l help -d 'show this help message and exit'
+
# spack external read-cray-manifest
set -g __fish_spack_optspecs_spack_external_read_cray_manifest h/help file= directory= ignore-default-dir dry-run fail-on-error
complete -c spack -n '__fish_spack_using_command external read-cray-manifest' -s h -l help -f -a help
@@ -1792,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 only-deprecated deprecated install-tree= start-date= end-date=
+set -g __fish_spack_optspecs_spack_find h/help format= H/hashes json I/install-status specfile-format 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'
@@ -1804,6 +1798,8 @@ complete -c spack -n '__fish_spack_using_command find' -l json -f -a json
complete -c spack -n '__fish_spack_using_command find' -l json -d 'output specs as machine-readable json records'
complete -c spack -n '__fish_spack_using_command find' -s I -l install-status -f -a install_status
complete -c spack -n '__fish_spack_using_command find' -s I -l install-status -d 'show install status of packages'
+complete -c spack -n '__fish_spack_using_command find' -l specfile-format -f -a specfile_format
+complete -c spack -n '__fish_spack_using_command find' -l specfile-format -d 'show the specfile format for installed deps '
complete -c spack -n '__fish_spack_using_command find' -s d -l deps -f -a deps
complete -c spack -n '__fish_spack_using_command find' -s d -l deps -d 'output dependencies along with found specs'
complete -c spack -n '__fish_spack_using_command find' -s p -l paths -f -a paths
@@ -2950,7 +2946,7 @@ complete -c spack -n '__fish_spack_using_command test' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command test' -s h -l help -d 'show this help message and exit'
# spack test run
-set -g __fish_spack_optspecs_spack_test_run h/help alias= fail-fast fail-first externals x/explicit keep-stage log-format= log-file= cdash-upload-url= cdash-build= cdash-site= cdash-track= cdash-buildstamp= help-cdash clean dirty
+set -g __fish_spack_optspecs_spack_test_run h/help alias= fail-fast fail-first externals x/explicit keep-stage log-format= log-file= cdash-upload-url= cdash-build= cdash-site= cdash-track= cdash-buildstamp= help-cdash timeout= clean dirty
complete -c spack -n '__fish_spack_using_command_pos_remainder 0 test run' -f -a '(__fish_spack_installed_specs)'
complete -c spack -n '__fish_spack_using_command test run' -s h -l help -f -a help
complete -c spack -n '__fish_spack_using_command test run' -s h -l help -d 'show this help message and exit'
@@ -2977,6 +2973,8 @@ complete -c spack -n '__fish_spack_using_command test run' -l cdash-track -r -f
complete -c spack -n '__fish_spack_using_command test run' -l cdash-buildstamp -r -f -a cdash_buildstamp
complete -c spack -n '__fish_spack_using_command test run' -l help-cdash -f -a help_cdash
complete -c spack -n '__fish_spack_using_command test run' -l help-cdash -d 'show usage instructions for CDash reporting'
+complete -c spack -n '__fish_spack_using_command test run' -l timeout -r -f -a timeout
+complete -c spack -n '__fish_spack_using_command test run' -l timeout -r -d 'maximum time (in seconds) that tests are allowed to run'
complete -c spack -n '__fish_spack_using_command test run' -l clean -f -a dirty
complete -c spack -n '__fish_spack_using_command test run' -l clean -d 'unset harmful variables in the build environment (default)'
complete -c spack -n '__fish_spack_using_command test run' -l dirty -f -a dirty
diff --git a/var/spack/repos/builtin.mock/packages/build-env-compiler-var-b/package.py b/var/spack/repos/builtin.mock/packages/build-env-compiler-var-b/package.py
index 0e797aed0de..5d3879f2818 100644
--- a/var/spack/repos/builtin.mock/packages/build-env-compiler-var-b/package.py
+++ b/var/spack/repos/builtin.mock/packages/build-env-compiler-var-b/package.py
@@ -11,7 +11,7 @@ class BuildEnvCompilerVarB(Package):
url = "https://www.example.com"
version("1.0", md5="0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CC", "this-should-be-dropped")
env.set("CXX", "this-should-be-dropped")
env.set("FC", "this-should-be-dropped")
diff --git a/var/spack/repos/builtin.mock/packages/callpath/package.py b/var/spack/repos/builtin.mock/packages/callpath/package.py
index cf3d52707f7..9ad90f14ac1 100644
--- a/var/spack/repos/builtin.mock/packages/callpath/package.py
+++ b/var/spack/repos/builtin.mock/packages/callpath/package.py
@@ -22,5 +22,5 @@ def install(self, spec, prefix):
mkdirp(prefix)
touch(join_path(prefix, "dummyfile"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOOBAR", self.name)
diff --git a/var/spack/repos/builtin.mock/packages/cmake-client/package.py b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
index c9bf018e960..c9c6e30da72 100644
--- a/var/spack/repos/builtin.mock/packages/cmake-client/package.py
+++ b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
@@ -67,7 +67,9 @@ def setup_build_environment(self, spack_env):
"link arg on dependency spec not readable from " "setup_build_environment.",
)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spack_cc # Ensure spack module-scope variable is avaiable
check(
from_cmake == "from_cmake",
diff --git a/var/spack/repos/builtin.mock/packages/cmake/package.py b/var/spack/repos/builtin.mock/packages/cmake/package.py
index 1c34499a3bd..d33ec83a5fe 100644
--- a/var/spack/repos/builtin.mock/packages/cmake/package.py
+++ b/var/spack/repos/builtin.mock/packages/cmake/package.py
@@ -36,11 +36,13 @@ class Cmake(Package):
url="https://cmake.org/files/v3.4/cmake-3.4.3.tar.gz",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spack_cc # Ensure spack module-scope variable is avaiable
env.set("for_install", "for_install")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spack_cc # Ensure spack module-scope variable is avaiable
env.set("from_cmake", "from_cmake")
diff --git a/var/spack/repos/builtin.mock/packages/conflict-parent/package.py b/var/spack/repos/builtin.mock/packages/conflict-parent/package.py
index 6dc3240c24c..17ec0e57058 100644
--- a/var/spack/repos/builtin.mock/packages/conflict-parent/package.py
+++ b/var/spack/repos/builtin.mock/packages/conflict-parent/package.py
@@ -23,5 +23,5 @@ def install(self, spec, prefix):
make()
make("install")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOOBAR", self.name)
diff --git a/var/spack/repos/builtin.mock/packages/conflict/package.py b/var/spack/repos/builtin.mock/packages/conflict/package.py
index 1b36c351518..2143f226484 100644
--- a/var/spack/repos/builtin.mock/packages/conflict/package.py
+++ b/var/spack/repos/builtin.mock/packages/conflict/package.py
@@ -24,5 +24,5 @@ def install(self, spec, prefix):
make()
make("install")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOOBAR", self.name)
diff --git a/var/spack/repos/builtin.mock/packages/gcc/package.py b/var/spack/repos/builtin.mock/packages/gcc/package.py
index d029a522681..77c789a92d9 100644
--- a/var/spack/repos/builtin.mock/packages/gcc/package.py
+++ b/var/spack/repos/builtin.mock/packages/gcc/package.py
@@ -40,6 +40,8 @@ class Gcc(CompilerPackage, Package):
compiler_version_regex = r"(? None:
pass
@when("@:1.4")
diff --git a/var/spack/repos/builtin.mock/packages/hash-test2/package.py b/var/spack/repos/builtin.mock/packages/hash-test2/package.py
index 7141410f924..842b6622874 100644
--- a/var/spack/repos/builtin.mock/packages/hash-test2/package.py
+++ b/var/spack/repos/builtin.mock/packages/hash-test2/package.py
@@ -23,7 +23,9 @@ class HashTest2(Package):
variant("variantx", default=False, description="Test variant X")
variant("varianty", default=False, description="Test variant Y")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
pass
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin.mock/packages/hash-test3/package.py b/var/spack/repos/builtin.mock/packages/hash-test3/package.py
index d72b4f819ad..8d55eb127c9 100644
--- a/var/spack/repos/builtin.mock/packages/hash-test3/package.py
+++ b/var/spack/repos/builtin.mock/packages/hash-test3/package.py
@@ -22,7 +22,9 @@ class HashTest3(Package):
variant("variantx", default=False, description="Test variant X")
variant("varianty", default=False, description="Test variant Y")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
pass
@when("@:1.4")
diff --git a/var/spack/repos/builtin.mock/packages/libceed/package.py b/var/spack/repos/builtin.mock/packages/libceed/package.py
new file mode 100644
index 00000000000..f6bea56b3ad
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/libceed/package.py
@@ -0,0 +1,18 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.package import *
+
+
+class Libceed(Package):
+ """Package that has a dependency imposing conditional requirements on platforms"""
+
+ homepage = "https://github.com/CEED/libCEED"
+ url = "http://www.fake.com/libceed.tgz"
+
+ version("0.12.0", sha256="e491ccadebc5cdcd1fc08b5b4509a0aba4e2c096f53d7880062a66b82a0baf84")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("libxsmm")
diff --git a/var/spack/repos/builtin.mock/packages/libxsmm/package.py b/var/spack/repos/builtin.mock/packages/libxsmm/package.py
new file mode 100644
index 00000000000..6de7fb55f53
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/libxsmm/package.py
@@ -0,0 +1,21 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.package import *
+
+
+class Libxsmm(Package):
+ """Package that imposes conditional requirements on platforms"""
+
+ homepage = "https://github.com/libxsmm/libxsmm"
+ url = "https://github.com/libxsmm/libxsmm/archive/1.17.tar.gz"
+ git = "https://github.com/libxsmm/libxsmm.git"
+
+ version("main", branch="main")
+ version("1.16.3", sha256="e491ccadebc5cdcd1fc08b5b4509a0aba4e2c096f53d7880062a66b82a0baf84")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ requires("platform=linux", "platform=test")
+ requires("platform=linux", when="@:1")
diff --git a/var/spack/repos/builtin.mock/packages/modifies-run-env/package.py b/var/spack/repos/builtin.mock/packages/modifies-run-env/package.py
index 491e78fe727..89b3164d03c 100644
--- a/var/spack/repos/builtin.mock/packages/modifies-run-env/package.py
+++ b/var/spack/repos/builtin.mock/packages/modifies-run-env/package.py
@@ -13,7 +13,7 @@ class ModifiesRunEnv(Package):
version("1.0", md5="0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DEPENDENCY_ENV_VAR", "1")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin.mock/packages/module-long-help/package.py b/var/spack/repos/builtin.mock/packages/module-long-help/package.py
index eaace9f8f27..0362d3ccf4e 100644
--- a/var/spack/repos/builtin.mock/packages/module-long-help/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-long-help/package.py
@@ -14,5 +14,5 @@ class ModuleLongHelp(Package):
version("1.0", "0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOO", "bar")
diff --git a/var/spack/repos/builtin.mock/packages/module-manpath-append/package.py b/var/spack/repos/builtin.mock/packages/module-manpath-append/package.py
index eed270cbe06..8db25f467cf 100644
--- a/var/spack/repos/builtin.mock/packages/module-manpath-append/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-manpath-append/package.py
@@ -11,5 +11,5 @@ class ModuleManpathAppend(Package):
version("1.0", "0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("MANPATH", "/path/to/man")
diff --git a/var/spack/repos/builtin.mock/packages/module-manpath-prepend/package.py b/var/spack/repos/builtin.mock/packages/module-manpath-prepend/package.py
index 78874d9b326..b2ab7c600fa 100644
--- a/var/spack/repos/builtin.mock/packages/module-manpath-prepend/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-manpath-prepend/package.py
@@ -11,6 +11,6 @@ class ModuleManpathPrepend(Package):
version("1.0", "0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("MANPATH", "/path/to/man")
env.prepend_path("MANPATH", "/path/to/share/man")
diff --git a/var/spack/repos/builtin.mock/packages/module-manpath-setenv/package.py b/var/spack/repos/builtin.mock/packages/module-manpath-setenv/package.py
index f4f6368a580..dc37c438a3c 100644
--- a/var/spack/repos/builtin.mock/packages/module-manpath-setenv/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-manpath-setenv/package.py
@@ -11,5 +11,5 @@ class ModuleManpathSetenv(Package):
version("1.0", "0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MANPATH", "/path/to/man")
diff --git a/var/spack/repos/builtin.mock/packages/module-path-separator/package.py b/var/spack/repos/builtin.mock/packages/module-path-separator/package.py
index 0aadd1029fb..e7978b553f6 100644
--- a/var/spack/repos/builtin.mock/packages/module-path-separator/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-path-separator/package.py
@@ -11,7 +11,7 @@ class ModulePathSeparator(Package):
version("1.0", md5="0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("COLON", "foo")
env.prepend_path("COLON", "foo")
env.remove_path("COLON", "foo")
diff --git a/var/spack/repos/builtin.mock/packages/module-setenv-raw/package.py b/var/spack/repos/builtin.mock/packages/module-setenv-raw/package.py
index 767d222a72c..29f803b31c5 100644
--- a/var/spack/repos/builtin.mock/packages/module-setenv-raw/package.py
+++ b/var/spack/repos/builtin.mock/packages/module-setenv-raw/package.py
@@ -11,5 +11,5 @@ class ModuleSetenvRaw(Package):
version("1.0", "0123456789abcdef0123456789abcdef")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOO", "{{name}}, {name}, {{}}, {}", raw=True)
diff --git a/var/spack/repos/builtin.mock/packages/mpileaks/package.py b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
index 587a615cdde..be9fe17fb0a 100644
--- a/var/spack/repos/builtin.mock/packages/mpileaks/package.py
+++ b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
@@ -33,5 +33,5 @@ def install(self, spec, prefix):
touch(prefix.mpileaks)
mkdirp(prefix.man)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FOOBAR", self.name)
diff --git a/var/spack/repos/builtin.mock/packages/variant-values/package.py b/var/spack/repos/builtin.mock/packages/variant-values/package.py
index f93f261d3a2..a8f0926dee0 100644
--- a/var/spack/repos/builtin.mock/packages/variant-values/package.py
+++ b/var/spack/repos/builtin.mock/packages/variant-values/package.py
@@ -14,9 +14,9 @@ class VariantValues(Package):
version("2.0", md5="b2472aae70f542116d616e634cb3ff35")
version("3.0", md5="d616e634cb3ff35b2472aae70f542116")
- variant("v", default="foo", values=["foo"], when="@1.0")
+ variant("v", default="foo", values=["foo"], multi=False, when="@1.0")
- variant("v", default="foo", values=["foo", "bar"], when="@2.0")
+ variant("v", default="foo", values=["foo", "bar"], multi=False, when="@2.0")
# this overrides the prior definition entirely
- variant("v", default="bar", values=["foo", "bar"], when="@2.0:3.0")
+ variant("v", default="bar", values=["foo", "bar"], multi=True, when="@2.0:3.0")
diff --git a/var/spack/repos/builtin.mock/packages/zlib/package.py b/var/spack/repos/builtin.mock/packages/zlib/package.py
index 32c96637e1e..71ee76da599 100644
--- a/var/spack/repos/builtin.mock/packages/zlib/package.py
+++ b/var/spack/repos/builtin.mock/packages/zlib/package.py
@@ -35,7 +35,7 @@ def libs(self):
shared = "+shared" in self.spec
return find_libraries(["libz"], root=self.prefix, recursive=True, shared=shared)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+pic" in self.spec:
env.append_flags("CFLAGS", self.compiler.cc_pic_flag)
if "+optimize" in self.spec:
diff --git a/var/spack/repos/builtin/packages/3dtk/package.py b/var/spack/repos/builtin/packages/3dtk/package.py
index 62effbb4afd..c3ca2defdfb 100644
--- a/var/spack/repos/builtin/packages/3dtk/package.py
+++ b/var/spack/repos/builtin/packages/3dtk/package.py
@@ -21,6 +21,9 @@ class _3dtk(CMakePackage):
version("trunk", svn="https://svn.code.sf.net/p/slam6d/code/trunk", preferred=True)
version("1.2", svn="https://svn.code.sf.net/p/slam6d/code/branches/3dtk-release-1.2")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
variant("cgal", default=False, description="Compile with CGAL support")
variant("opengl", default=True, description="Compile with OpenGL support")
variant("opencv", default=True, description="Compile with OpenCV support")
@@ -68,7 +71,7 @@ class _3dtk(CMakePackage):
patch("homebrew.patch", when="platform=darwin")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["eigen"].prefix.include)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/acct/package.py b/var/spack/repos/builtin/packages/acct/package.py
index 2eb3775142c..4b96b3d174a 100644
--- a/var/spack/repos/builtin/packages/acct/package.py
+++ b/var/spack/repos/builtin/packages/acct/package.py
@@ -5,11 +5,11 @@
from spack.package import *
-class Acct(AutotoolsPackage):
+class Acct(AutotoolsPackage, GNUMirrorPackage):
"""Utilities for monitoring process activities."""
homepage = "https://www.gnu.org/software/acct"
- url = "https://ftp.gnu.org/gnu/acct/acct-6.6.4.tar.gz"
+ gnu_mirror_path = "acct/acct-6.6.4.tar.gz"
license("GPL-3.0-or-later")
@@ -20,7 +20,7 @@ class Acct(AutotoolsPackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def installcheck(self):
diff --git a/var/spack/repos/builtin/packages/acfl/package.py b/var/spack/repos/builtin/packages/acfl/package.py
index a6f86997462..d57482a94db 100644
--- a/var/spack/repos/builtin/packages/acfl/package.py
+++ b/var/spack/repos/builtin/packages/acfl/package.py
@@ -458,7 +458,7 @@ def headers(self):
hlist.directories = [incdir]
return hlist
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
arm_dir = get_acfl_prefix(self.spec)
armpl_dir = get_armpl_prefix(self.spec)
diff --git a/var/spack/repos/builtin/packages/activeharmony/package.py b/var/spack/repos/builtin/packages/activeharmony/package.py
index cbdc7eee387..6928cba9996 100644
--- a/var/spack/repos/builtin/packages/activeharmony/package.py
+++ b/var/spack/repos/builtin/packages/activeharmony/package.py
@@ -25,8 +25,8 @@ class Activeharmony(MakefilePackage):
cflags = ["-O3", "-fPIC"]
- def setup_build_environment(self, spack_env):
- spack_env.set("CFLAGS", " ".join(self.cflags))
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("CFLAGS", " ".join(self.cflags))
@when("@:4.5")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/actsvg/package.py b/var/spack/repos/builtin/packages/actsvg/package.py
index a5907daa0af..a82da4c4785 100644
--- a/var/spack/repos/builtin/packages/actsvg/package.py
+++ b/var/spack/repos/builtin/packages/actsvg/package.py
@@ -46,10 +46,14 @@ class Actsvg(CMakePackage):
"web", default=True, when="@0.4.36:", description="Build the webpage builder interface"
)
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("boost +program_options", type="test")
depends_on("boost +program_options", when="+examples")
depends_on("googletest", when="+examples")
depends_on("python@3.8:", when="+python")
+ depends_on("py-pybind11@2.10:", when="+python @0.4.42:")
def cmake_args(self):
args = [
@@ -58,5 +62,8 @@ def cmake_args(self):
self.define_from_variant("ACTSVG_BUILD_PYTHON_BINDINGS", "python"),
self.define_from_variant("ACTSVG_BUILD_WEB", "web"),
self.define("ACTSVG_BUILD_TESTING", self.run_tests),
+ self.define("ACTSVG_USE_SYSTEM_LIBS", True),
+ # The pybind11 loading does not respect `ACTSVG_USE_SYSTEM_LIBS`.
+ self.define("ACTSVG_USE_SYSTEM_PYBIND11", True),
]
return args
diff --git a/var/spack/repos/builtin/packages/adf/package.py b/var/spack/repos/builtin/packages/adf/package.py
index 3c0211ff075..8874139f81b 100644
--- a/var/spack/repos/builtin/packages/adf/package.py
+++ b/var/spack/repos/builtin/packages/adf/package.py
@@ -25,7 +25,7 @@ def url_for_version(self, version):
license_files = ["license.txt"]
license_vars = ["SCMLICENSE"]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ADFHOME", self.prefix)
env.set("ADFBIN", self.prefix.bin)
env.set("ADFRESOURCES", self.prefix.atomicdata)
diff --git a/var/spack/repos/builtin/packages/adios/package.py b/var/spack/repos/builtin/packages/adios/package.py
index b98876ce228..40c28e69513 100644
--- a/var/spack/repos/builtin/packages/adios/package.py
+++ b/var/spack/repos/builtin/packages/adios/package.py
@@ -107,33 +107,19 @@ class Adios(AutotoolsPackage):
sha256="aea47e56013b57c2d5d36e23e0ae6010541c3333a84003784437768c2e350b05",
)
- def validate(self, spec):
- """Checks if incompatible variants have been activated at the same time
-
- Args:
- spec: spec of the package
-
- Raises:
- RuntimeError: in case of inconsistencies
- """
- if "+fortran" in spec and not self.compiler.fc:
- msg = "cannot build a fortran variant without a fortran compiler"
- raise RuntimeError(msg)
-
def with_or_without_hdf5(self, activated):
if activated:
return f"--with-phdf5={self.spec['hdf5'].prefix}"
return "--without-phdf5"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://github.com/ornladios/ADIOS/issues/206
if self.spec.satisfies("+fortran %gcc@10:"):
env.set("FCFLAGS", "-fallow-argument-mismatch")
def configure_args(self):
spec = self.spec
- self.validate(spec)
extra_args = [
# required, otherwise building its python bindings will fail
diff --git a/var/spack/repos/builtin/packages/adios2/package.py b/var/spack/repos/builtin/packages/adios2/package.py
index 486295a8dd2..2612c163b73 100644
--- a/var/spack/repos/builtin/packages/adios2/package.py
+++ b/var/spack/repos/builtin/packages/adios2/package.py
@@ -257,7 +257,7 @@ def patch(self):
filter_file("mpc++_r)", "mpcc_r mpiFCC)", f, string=True)
filter_file("mpf77_r", "mpf77_r mpifrt", f, string=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://github.com/ornladios/ADIOS2/issues/2228
if self.spec.satisfies("+fortran %gcc@10:"):
env.set("FFLAGS", "-fallow-argument-mismatch")
@@ -358,7 +358,7 @@ def libs(self):
list(libs_to_seek), root=self.spec.prefix, shared=("+shared" in spec), recursive=True
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
try:
all_libs = self.libs
idx = all_libs.basenames.index("libadios2_h5vol.so")
diff --git a/var/spack/repos/builtin/packages/adlbx/package.py b/var/spack/repos/builtin/packages/adlbx/package.py
index 2e0c4d12f07..358a3f42fc0 100644
--- a/var/spack/repos/builtin/packages/adlbx/package.py
+++ b/var/spack/repos/builtin/packages/adlbx/package.py
@@ -29,7 +29,7 @@ class Adlbx(AutotoolsPackage):
depends_on("m4", type="build", when="@master")
depends_on("mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("CC", spec["mpi"].mpicc)
env.set("CXX", spec["mpi"].mpicxx)
diff --git a/var/spack/repos/builtin/packages/adwaita-icon-theme/package.py b/var/spack/repos/builtin/packages/adwaita-icon-theme/package.py
index f810b4665b2..4019dc3a2ca 100644
--- a/var/spack/repos/builtin/packages/adwaita-icon-theme/package.py
+++ b/var/spack/repos/builtin/packages/adwaita-icon-theme/package.py
@@ -18,14 +18,18 @@ class AdwaitaIconTheme(AutotoolsPackage):
depends_on("gdk-pixbuf", type="build")
depends_on("librsvg", type="build")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/alquimia/package.py b/var/spack/repos/builtin/packages/alquimia/package.py
index db6adf27041..1f1b5270cc7 100644
--- a/var/spack/repos/builtin/packages/alquimia/package.py
+++ b/var/spack/repos/builtin/packages/alquimia/package.py
@@ -14,6 +14,8 @@ class Alquimia(CMakePackage):
maintainers("smolins", "balay")
+ tags = ["e4s"]
+
license("BSD-3-Clause-LBNL")
version("master")
diff --git a/var/spack/repos/builtin/packages/amber/package.py b/var/spack/repos/builtin/packages/amber/package.py
index 4a5ffbecc87..760a50329dd 100644
--- a/var/spack/repos/builtin/packages/amber/package.py
+++ b/var/spack/repos/builtin/packages/amber/package.py
@@ -153,7 +153,7 @@ def url_for_version(self, version):
url = "file://{0}/Amber{1}.tar.bz2".format(os.getcwd(), version)
return url
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
amber_src = self.stage.source_path
env.set("AMBERHOME", amber_src)
@@ -242,7 +242,7 @@ def install(self, spec, prefix):
# just install everything that was built
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("AMBER_PREFIX", self.prefix)
env.set("AMBERHOME", self.prefix)
# CUDA
diff --git a/var/spack/repos/builtin/packages/ambertools/package.py b/var/spack/repos/builtin/packages/ambertools/package.py
index 9964e4978f0..a6709a7c0ba 100644
--- a/var/spack/repos/builtin/packages/ambertools/package.py
+++ b/var/spack/repos/builtin/packages/ambertools/package.py
@@ -20,6 +20,9 @@ class Ambertools(CMakePackage):
version("22jlmrcc", sha256="1571d4e0f7d45b2a71dce5999fa875aea8c90ee219eb218d7916bf30ea229121")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("flex", type="build")
depends_on("bison", type="build")
depends_on("tcsh", type="build")
@@ -63,11 +66,11 @@ def cmake_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("AMBER_PREFIX", self.prefix)
env.set("AMBERHOME", self.prefix)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("AMBER_PREFIX", self.prefix)
env.set("AMBERHOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/amdblis/blis-4.0_gcc_clang_znver4.patch b/var/spack/repos/builtin/packages/amdblis/blis-4.0_gcc_clang_znver4.patch
deleted file mode 100644
index 31f71bf8c5a..00000000000
--- a/var/spack/repos/builtin/packages/amdblis/blis-4.0_gcc_clang_znver4.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-diff -Naur a/config/zen4/make_defs.mk b/config/zen4/make_defs.mk
---- a/config/zen4/make_defs.mk 2022-11-12 13:05:45.000000000 +0000
-+++ b/config/zen4/make_defs.mk 2023-05-12 14:40:10.848359434 +0000
-@@ -73,6 +73,15 @@
-
-
- # gcc 11.0 or later:
-+ifeq ($(shell test $(GCC_VERSION) -ge 13; echo $$?),0)
-+ifneq ($(DEBUG_TYPE),noopt)
-+CKOPTFLAGS := -O2 -fgcse-after-reload -fipa-cp-clone -floop-interchange -floop-unroll-and-jam -fpeel-loops -fpredictive-commoning -fsplit-loops -fsplit-paths -ftree-loop-distribution -funswitch-loops -fvect-cost-model=dynamic -fversion-loops-for-strides -fomit-frame-pointer
-+endif
-+
-+CKVECFLAGS += -march=znver4 -mfpmath=sse
-+CRVECFLAGS += -march=znver4
-+
-+else
- ifeq ($(shell test $(GCC_VERSION) -ge 11; echo $$?),0)
- # Update CKOPTFLAGS for gcc 11+ to use O3 optimization without
- # -ftree-partial-pre flag. This flag results in suboptimal code
-@@ -100,6 +109,7 @@
- endif # GCC 8
- endif # GCC 9
- endif # GCC 11
-+endif # GCC 13
- else
- ifeq ($(CC_VENDOR),clang)
-
-@@ -132,6 +142,16 @@
- #if compiling with clang
- VENDOR_STRING := $(strip $(shell ${CC_VENDOR} --version | egrep -o '[0-9]+\.[0-9]+\.?[0-9]*'))
- CC_MAJOR := $(shell (echo ${VENDOR_STRING} | cut -d. -f1))
-+#clang 16 or later:
-+ifeq ($(shell test $(CC_MAJOR) -ge 16; echo $$?),0)
-+CKVECFLAGS += -march=znver4
-+CRVECFLAGS += -march=znver4
-+else
-+#clang 12 or later:
-+ifeq ($(shell test $(CC_MAJOR) -ge 12; echo $$?),0)
-+CKVECFLAGS += -march=znver3 -mavx512f -mavx512dq -mavx512bw -mavx512vl -mavx512vnni -mavx512bf16 -mfpmath=sse -falign-loops=64
-+CRVECFLAGS += -march=znver3
-+else
- #clang 9.0 or later:
- ifeq ($(shell test $(CC_MAJOR) -ge 9; echo $$?),0)
- CKVECFLAGS += -march=znver2
-@@ -139,7 +159,9 @@
- else
- CKVECFLAGS += -march=znver1
- CRVECFLAGS += -march=znver1
--endif # ge 9
-+endif # clang 9
-+endif # clang 12
-+endif # clang 16
- endif # aocc 2
- endif # aocc 3
- endif # aocc 4
diff --git a/var/spack/repos/builtin/packages/amdlibflame/package.py b/var/spack/repos/builtin/packages/amdlibflame/package.py
index 26876c882a5..f6d9220dc78 100644
--- a/var/spack/repos/builtin/packages/amdlibflame/package.py
+++ b/var/spack/repos/builtin/packages/amdlibflame/package.py
@@ -250,6 +250,8 @@ def install(self, pkg, spec, prefix):
# make install in parallel fails with message 'File already exists'
make("install", parallel=False)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.external:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/amdscalapack/package.py b/var/spack/repos/builtin/packages/amdscalapack/package.py
index faeaa9acd8b..af55e448411 100644
--- a/var/spack/repos/builtin/packages/amdscalapack/package.py
+++ b/var/spack/repos/builtin/packages/amdscalapack/package.py
@@ -29,6 +29,8 @@ class Amdscalapack(ScalapackBase):
maintainers("amd-toolchain-support")
+ tags = ["e4s"]
+
license("BSD-3-Clause-Open-MPI")
version(
"5.0",
@@ -135,6 +137,8 @@ def cmake_args(self):
return args
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.external:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/amp/package.py b/var/spack/repos/builtin/packages/amp/package.py
index c0e85d04934..79549696300 100644
--- a/var/spack/repos/builtin/packages/amp/package.py
+++ b/var/spack/repos/builtin/packages/amp/package.py
@@ -31,6 +31,10 @@ class Amp(CMakePackage):
variant("trilinos", default=True, description="Build with support for Trilinos")
variant("zlib", default=True, description="Build with support for zlib")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
# Everything should be compiled position independent (-fpic)
depends_on("blas")
depends_on("lapack")
diff --git a/var/spack/repos/builtin/packages/ampl/package.py b/var/spack/repos/builtin/packages/ampl/package.py
index 2213e8341b1..0c019eb64eb 100644
--- a/var/spack/repos/builtin/packages/ampl/package.py
+++ b/var/spack/repos/builtin/packages/ampl/package.py
@@ -85,7 +85,7 @@ class Ampl(Package):
def url_for_version(self, version):
return "file://{0}/ampl.linux-intel64.{1}.tgz".format(os.getcwd(), version)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
if self.spec.satisfies("+ide"):
env.prepend_path("PATH", join_path(self.prefix, "amplide"))
diff --git a/var/spack/repos/builtin/packages/ampliconnoise/package.py b/var/spack/repos/builtin/packages/ampliconnoise/package.py
index cb20ccc542c..05cd420f8ac 100644
--- a/var/spack/repos/builtin/packages/ampliconnoise/package.py
+++ b/var/spack/repos/builtin/packages/ampliconnoise/package.py
@@ -23,7 +23,7 @@ class Ampliconnoise(MakefilePackage):
patch("Fix-return-type.patch")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.Scripts)
env.set("PYRO_LOOKUP_FILE", os.path.join(self.prefix, "Data", "LookUp_E123.dat"))
env.set("SEQ_LOOKUP_FILE", os.path.join(self.prefix, "Data", "Tran.dat"))
diff --git a/var/spack/repos/builtin/packages/amr-wind/package.py b/var/spack/repos/builtin/packages/amr-wind/package.py
index 3a16d2eb546..4d21bc545fc 100644
--- a/var/spack/repos/builtin/packages/amr-wind/package.py
+++ b/var/spack/repos/builtin/packages/amr-wind/package.py
@@ -276,7 +276,7 @@ class AmrWind(CMakePackage, CudaPackage, ROCmPackage):
"openfast@4.0.0:4.0.1", msg="OpenFAST 4.0.0:4.0.1 contains a bug. Use OpenFAST >= 4.0.2."
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Avoid compile errors with Intel interprocedural optimization
if self.spec.satisfies("%intel"):
env.append_flags("CXXFLAGS", "-no-ipo")
diff --git a/var/spack/repos/builtin/packages/amrfinder/package.py b/var/spack/repos/builtin/packages/amrfinder/package.py
index ff11c4bc328..ea5b11bfc3c 100644
--- a/var/spack/repos/builtin/packages/amrfinder/package.py
+++ b/var/spack/repos/builtin/packages/amrfinder/package.py
@@ -29,7 +29,7 @@ class Amrfinder(MakefilePackage):
depends_on("hmmer")
depends_on("curl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("INSTALL_DIR", prefix.bin)
env.set("DEFAULT_DB_DIR", prefix.share)
diff --git a/var/spack/repos/builtin/packages/amrvis/package.py b/var/spack/repos/builtin/packages/amrvis/package.py
index e44af96aac4..a71ee642f6e 100644
--- a/var/spack/repos/builtin/packages/amrvis/package.py
+++ b/var/spack/repos/builtin/packages/amrvis/package.py
@@ -143,7 +143,7 @@ def edit(self, spec, prefix):
with open("GNUmakefile", "w") as file:
file.writelines(contents)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# We don't want an AMREX_HOME the user may have set already
env.unset("AMREX_HOME")
# Help force Amrvis to not pick up random system compilers
diff --git a/var/spack/repos/builtin/packages/anaconda3/package.py b/var/spack/repos/builtin/packages/anaconda3/package.py
index 06cdd527f8f..f3af10fe7fd 100644
--- a/var/spack/repos/builtin/packages/anaconda3/package.py
+++ b/var/spack/repos/builtin/packages/anaconda3/package.py
@@ -220,6 +220,6 @@ def install(self, spec, prefix):
bash = which("bash")
bash(anaconda_script, "-b", "-f", "-p", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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/angsd/package.py b/var/spack/repos/builtin/packages/angsd/package.py
index 99139c2408a..0edd95359b3 100644
--- a/var/spack/repos/builtin/packages/angsd/package.py
+++ b/var/spack/repos/builtin/packages/angsd/package.py
@@ -35,7 +35,7 @@ class Angsd(MakefilePackage):
depends_on("r", type="run", when="+r")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("R_LIBS", self.prefix.R)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/antlr/package.py b/var/spack/repos/builtin/packages/antlr/package.py
index 45e976bbd7d..3b77bd08146 100644
--- a/var/spack/repos/builtin/packages/antlr/package.py
+++ b/var/spack/repos/builtin/packages/antlr/package.py
@@ -33,7 +33,7 @@ class Antlr(AutotoolsPackage):
extends("python", when="+python")
depends_on("java", type=("build", "run"), when="+java")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+pic"):
env.set("CXXFLAGS", "-fPIC")
diff --git a/var/spack/repos/builtin/packages/antlr4-complete/package.py b/var/spack/repos/builtin/packages/antlr4-complete/package.py
index 3e2bc105087..70b69bef86f 100644
--- a/var/spack/repos/builtin/packages/antlr4-complete/package.py
+++ b/var/spack/repos/builtin/packages/antlr4-complete/package.py
@@ -56,7 +56,7 @@ def install(self, spec, prefix):
rename(glob.glob("antlr-*-complete.jar")[0], "antlr-complete.jar")
install("antlr-complete.jar", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ANTLR4_JAR_LOCATION", join_path(self.prefix.bin, "antlr-complete.jar"))
env.set("ANTLR_JAR_LOCATION", join_path(self.prefix.bin, "antlr-complete.jar"))
env.set("ANTLR_EXECUTABLE", join_path(self.prefix.bin, "antlr-complete.jar"))
diff --git a/var/spack/repos/builtin/packages/ants/package.py b/var/spack/repos/builtin/packages/ants/package.py
index c2c8ff322a3..25159e4f222 100644
--- a/var/spack/repos/builtin/packages/ants/package.py
+++ b/var/spack/repos/builtin/packages/ants/package.py
@@ -42,5 +42,5 @@ def install(self, spec, prefix):
make("install")
install_tree("Scripts", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ANTSPATH", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/aocc/package.py b/var/spack/repos/builtin/packages/aocc/package.py
index de11a97842e..9fe90d92319 100644
--- a/var/spack/repos/builtin/packages/aocc/package.py
+++ b/var/spack/repos/builtin/packages/aocc/package.py
@@ -64,7 +64,8 @@ class Aocc(Package, LlvmDetection, CompilerPackage):
# Licensing
license_url = "https://www.amd.com/en/developer/aocc/aocc-compiler/eula.html"
- depends_on("c", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("libxml2")
depends_on("zlib-api")
@@ -115,6 +116,15 @@ def cfg_files(self):
with open(join_path(self.prefix.bin, "{}.cfg".format(compiler)), "w") as f:
f.write(compiler_options)
+ def _cc_path(self):
+ return os.path.join(self.spec.prefix.bin, "clang")
+
+ def _cxx_path(self):
+ return os.path.join(self.spec.prefix.bin, "clang++")
+
+ def _fortran_path(self):
+ return os.path.join(self.spec.prefix.bin, "flang")
+
compiler_version_regex = r"AOCC_(\d+[._]\d+[._]\d+)"
fortran_names = ["flang"]
@@ -138,6 +148,7 @@ def cfg_files(self):
}
implicit_rpath_libs = ["libclang"]
+ stdcxx_libs = ("-lstdc++",)
def _standard_flag(self, *, language: str, standard: str) -> str:
flags = {
diff --git a/var/spack/repos/builtin/packages/aocl-da/package.py b/var/spack/repos/builtin/packages/aocl-da/package.py
index 53beca51837..edc6f956771 100644
--- a/var/spack/repos/builtin/packages/aocl-da/package.py
+++ b/var/spack/repos/builtin/packages/aocl-da/package.py
@@ -52,6 +52,10 @@ class AoclDa(CMakePackage):
when="@5.0",
)
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("cmake@3.22:", type="build")
for vers in ["5.0"]:
with when(f"@={vers}"):
@@ -82,13 +86,13 @@ class AoclDa(CMakePackage):
depends_on("py-pytest", type="test")
depends_on("py-scikit-learn", type=("test", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
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):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", join_path(self.prefix, "python_package"))
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/aocl-utils/package.py b/var/spack/repos/builtin/packages/aocl-utils/package.py
index 31302f70e30..5750891d180 100644
--- a/var/spack/repos/builtin/packages/aocl-utils/package.py
+++ b/var/spack/repos/builtin/packages/aocl-utils/package.py
@@ -47,7 +47,8 @@ class AoclUtils(CMakePackage):
variant("shared", default=True, when="@4.2:", description="build shared library")
variant("examples", default=False, description="enable examples")
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("cmake@3.22:", type="build")
depends_on("doxygen", when="+doc")
diff --git a/var/spack/repos/builtin/packages/aotriton/package.py b/var/spack/repos/builtin/packages/aotriton/package.py
index ce8a53b48c2..0b700f200f5 100644
--- a/var/spack/repos/builtin/packages/aotriton/package.py
+++ b/var/spack/repos/builtin/packages/aotriton/package.py
@@ -55,7 +55,7 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set environment variables used to control the build"""
if self.spec.satisfies("%clang"):
env.set("TRITON_HIP_LLD_PATH", self.spec["llvm-amdgpu"].prefix / bin / ld.lld)
diff --git a/var/spack/repos/builtin/packages/apktool/package.py b/var/spack/repos/builtin/packages/apktool/package.py
index a1e89400785..c51d48c94d7 100644
--- a/var/spack/repos/builtin/packages/apktool/package.py
+++ b/var/spack/repos/builtin/packages/apktool/package.py
@@ -20,7 +20,7 @@ class Apktool(Package):
depends_on("java@8:", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LC_ALL", "en_US.UTF-8")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/apple-gl/package.py b/var/spack/repos/builtin/packages/apple-gl/package.py
index 1da7fcd7233..8040b619a94 100644
--- a/var/spack/repos/builtin/packages/apple-gl/package.py
+++ b/var/spack/repos/builtin/packages/apple-gl/package.py
@@ -9,7 +9,9 @@ class AppleGlBase(BundlePackage):
maintainers("aphecetche")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# we try to setup a build environment with enough hints
# for the build system to pick up on the Apple framework version
# of OpenGL.
diff --git a/var/spack/repos/builtin/packages/apptainer/package.py b/var/spack/repos/builtin/packages/apptainer/package.py
index 97b7d512b35..c44e0270121 100644
--- a/var/spack/repos/builtin/packages/apptainer/package.py
+++ b/var/spack/repos/builtin/packages/apptainer/package.py
@@ -37,6 +37,7 @@ class Apptainer(SingularityBase):
)
version("main", branch="main", get_full_repo=True) # apptainer version uses git describe
+ version("1.4.0", sha256="204cded54046547cb3eb4c7874bdf45892fedc58b0d104195c59d2972cba51d3")
version("1.3.6", sha256="b5343369e7fdf67572f887d81f8d2b938f099fb39c876d96430d747935960d51")
version("1.3.5", sha256="fe1c977da952edf1056915b2df67ae2203ef06065d4e4901a237c902329306b2")
version("1.3.4", sha256="c6ccfdd7c967e5c36dde8711f369c4ac669a16632b79fa0dcaf7e772b7a47397")
@@ -53,18 +54,23 @@ class Apptainer(SingularityBase):
version("1.1.3", sha256="c7bf7f4d5955e1868739627928238d02f94ca9fd0caf110b0243d65548427899")
version("1.0.2", sha256="2d7a9d0a76d5574459d249c3415e21423980d9154ce85e8c34b0600782a7dfd3")
+ variant("libsubid", default=True, when="@1.4:", description="Enable libsubid support")
+
depends_on("c", type="build") # generated
depends_on("e2fsprogs@1.47:+fuse2fs", type="run")
depends_on("go@1.17.5:", when="@1.1.0:")
depends_on("go@1.19:", when="@1.2:")
depends_on("go@1.20:", when="@1.3:")
+ depends_on("go@1.22.7:", when="@1.4:")
depends_on("gocryptfs@2.4:", type="run", when="@1.3:")
depends_on("squashfuse", type="run")
depends_on("squashfuse@0.5.1:", type="run", when="@1.3:")
depends_on("fuse-overlayfs", type="run")
depends_on("fuse-overlayfs@1.13:", type="run", when="@1.3:")
+ depends_on("shadow", when="+libsubid")
+
singularity_org = "apptainer"
singularity_name = "apptainer"
singularity_security_urls = (
@@ -79,6 +85,8 @@ def config_options(self):
options = []
if spec.satisfies("@1.1.0: +suid"):
options.append("--with-suid")
+ if spec.satisfies("@1.4: ~libsubid"):
+ options.append("--without-libsubid")
return options
def flag_handler(self, name, flags):
diff --git a/var/spack/repos/builtin/packages/aqlprofile/package.py b/var/spack/repos/builtin/packages/aqlprofile/package.py
index e7dc8d568ed..589b9732a03 100644
--- a/var/spack/repos/builtin/packages/aqlprofile/package.py
+++ b/var/spack/repos/builtin/packages/aqlprofile/package.py
@@ -322,7 +322,7 @@ def install(self, spec, prefix):
install_tree(f"opt/rocm-{spec.version}/share/", prefix.share)
install_tree(f"opt/rocm-{spec.version}/lib/", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["hsa-rocr-dev"].prefix.lib)
# This package is installed from binaries, and we haven't patched rpaths.
diff --git a/var/spack/repos/builtin/packages/aragorn/package.py b/var/spack/repos/builtin/packages/aragorn/package.py
index c53195bc4d6..ea8614c850c 100644
--- a/var/spack/repos/builtin/packages/aragorn/package.py
+++ b/var/spack/repos/builtin/packages/aragorn/package.py
@@ -28,6 +28,8 @@ class Aragorn(Package):
expand=False,
)
+ depends_on("c", type="build")
+
# fix checksum error
def url_for_version(self, version):
return f"http://www.ansikte.se/ARAGORN/Downloads/aragorn{version}.c"
diff --git a/var/spack/repos/builtin/packages/arborx/package.py b/var/spack/repos/builtin/packages/arborx/package.py
index cfd16f08166..cfccaca5d02 100644
--- a/var/spack/repos/builtin/packages/arborx/package.py
+++ b/var/spack/repos/builtin/packages/arborx/package.py
@@ -22,6 +22,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
license("BSD-3-Clause")
version("master", branch="master")
+ version("2.0", sha256="5ea6d8f832a69aac77d66c1ae55f96c2ff227272b8a6ba694c7ebcdf3a2413d5")
version("1.7", sha256="e3d9a57a1d7c1ad62f6bbb43fd29a366506f3a16cbbe801c04d10f5fb0dec201")
version("1.6", sha256="c2230de185d62f1999d36c6b8b92825f19ab9fbf30bdae90595cab04e76561a4")
version("1.5", sha256="c26f23c17e749ccf3e2d353a68969aa54d31b8e720dbfdbc2cef16c5d8477e9e")
@@ -40,12 +41,13 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
# Allowed C++ standard
variant(
"cxxstd",
- default="17",
- values=("14", "17", "2a", "2b"),
+ default="20",
+ values=("14", "17", "20", "23"),
multi=False,
description="Use the specified C++ standard when building.",
)
conflicts("cxxstd=14", when="@1.3:")
+ conflicts("cxxstd=17", when="@2.0:")
# ArborX relies on Kokkos to provide devices, providing one-to-one matching
# variants. The only way to disable those devices is to make sure Kokkos
@@ -66,6 +68,7 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@3.12:", type="build")
depends_on("cmake@3.16:", type="build", when="@1.0:")
+ depends_on("cmake@3.22:", type="build", when="@2.0:")
depends_on("mpi", when="+mpi")
depends_on("rocthrust", when="+rocm")
patch("0001-update-major-version-required-for-rocm-6.0.patch", when="@:1.5+rocm ^hip@6.0:")
@@ -77,7 +80,8 @@ class Arborx(CMakePackage, CudaPackage, ROCmPackage):
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")
- depends_on("kokkos@4.2.00:", when="@1.7:")
+ depends_on("kokkos@4.2.00:", when="@1.7")
+ depends_on("kokkos@4.5.00:", when="@2.0:")
for backend in kokkos_backends:
depends_on("kokkos+%s" % backend.lower(), when="~trilinos+%s" % backend.lower())
diff --git a/var/spack/repos/builtin/packages/arm-forge/package.py b/var/spack/repos/builtin/packages/arm-forge/package.py
index c325bd76beb..60b00daf7ea 100644
--- a/var/spack/repos/builtin/packages/arm-forge/package.py
+++ b/var/spack/repos/builtin/packages/arm-forge/package.py
@@ -205,7 +205,7 @@ def install(self, spec, prefix):
probe = join_path(prefix, "bin", "forge-probe")
subprocess.call([probe, "--install", "global"])
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Only PATH is needed for Forge.
# Adding lib to LD_LIBRARY_PATH can cause conflicts with Forge's internal libs.
env.clear()
diff --git a/var/spack/repos/builtin/packages/armadillo/package.py b/var/spack/repos/builtin/packages/armadillo/package.py
index 04e0aa66fe9..97e23ee5357 100644
--- a/var/spack/repos/builtin/packages/armadillo/package.py
+++ b/var/spack/repos/builtin/packages/armadillo/package.py
@@ -16,6 +16,7 @@ class Armadillo(CMakePackage):
license("Apache-2.0")
+ version("14.4.1", sha256="26ce272bfdc8246c278e6f8cfa53777a1efb14ef196e88082fee05da1a463491")
version("14.4.0", sha256="023242fd59071d98c75fb015fd3293c921132dc39bf46d221d4b059aae8d79f4")
version("14.2.3", sha256="fc70c3089a8d2bb7f2510588597d4b35b4323f6d4be5db5c17c6dba20ab4a9cc")
version("14.2.2", sha256="3054c8e63db3abdf1a5c8f9fdb7e6b4ad833f9bcfb58324c0ff86de0784c70e0")
diff --git a/var/spack/repos/builtin/packages/armcimpi/package.py b/var/spack/repos/builtin/packages/armcimpi/package.py
index fdd3cb1496b..8c5fb2b8420 100644
--- a/var/spack/repos/builtin/packages/armcimpi/package.py
+++ b/var/spack/repos/builtin/packages/armcimpi/package.py
@@ -46,5 +46,7 @@ def configure_args(self):
args.extend(self.with_or_without("progress"))
return args
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("ARMCIMPI_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/armcomputelibrary/package.py b/var/spack/repos/builtin/packages/armcomputelibrary/package.py
index 1cdc8404a68..f2f7169ed66 100644
--- a/var/spack/repos/builtin/packages/armcomputelibrary/package.py
+++ b/var/spack/repos/builtin/packages/armcomputelibrary/package.py
@@ -121,7 +121,7 @@ def build_args(self, spec, prefix):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Spack compiler wrapper inject -mcpu flag for some targets.
# This can conflict with -march set in scons script, so override it here.
env.set("SPACK_TARGET_ARGS", "")
diff --git a/var/spack/repos/builtin/packages/armpl-gcc/package.py b/var/spack/repos/builtin/packages/armpl-gcc/package.py
index 77cf566d72a..bef185ce28f 100644
--- a/var/spack/repos/builtin/packages/armpl-gcc/package.py
+++ b/var/spack/repos/builtin/packages/armpl-gcc/package.py
@@ -495,7 +495,7 @@ def headers(self):
hlist.directories = [incdir]
return hlist
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
armpl_dir = get_armpl_prefix(self.spec)
if self.spec.platform == "darwin":
env.prepend_path("DYLD_LIBRARY_PATH", join_path(armpl_dir, "lib"))
@@ -526,7 +526,9 @@ def make_pkgconfig_files(self):
for f in find(join_path(armpl_dir, "pkgconfig"), "*"):
symlink(f, f + ".pc")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
armpl_dir = get_armpl_prefix(self.spec)
if self.spec.satisfies("@:22"):
# pkgconfig directory is not in standard ("lib", "lib64", "share") location
diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py
index 47120520964..71350a0e6b7 100644
--- a/var/spack/repos/builtin/packages/arpack-ng/package.py
+++ b/var/spack/repos/builtin/packages/arpack-ng/package.py
@@ -149,7 +149,7 @@ def configure_args(self):
return options
@when("@:3.7.0 %gcc@10:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# version up to and including 3.7.0 are not ported to gcc 10
# https://github.com/opencollab/arpack-ng/issues/242
env.set("FFLAGS", "-fallow-argument-mismatch")
diff --git a/var/spack/repos/builtin/packages/arrow/package.py b/var/spack/repos/builtin/packages/arrow/package.py
index 1caf9441c51..771e4965679 100644
--- a/var/spack/repos/builtin/packages/arrow/package.py
+++ b/var/spack/repos/builtin/packages/arrow/package.py
@@ -74,7 +74,7 @@ class Arrow(CMakePackage, CudaPackage):
depends_on("re2+shared", when="+python")
depends_on("snappy~shared", when="+snappy @9:")
depends_on("snappy~shared", when="@8:")
- depends_on("thrift+pic", when="+parquet")
+ depends_on("thrift@0.11:+cpp", when="+parquet")
depends_on("utf8proc@2.7.0: +shared", when="+compute")
depends_on("utf8proc@2.7.0: +shared", when="+gandiva")
depends_on("utf8proc@2.7.0: +shared", when="+python")
diff --git a/var/spack/repos/builtin/packages/ascent/package.py b/var/spack/repos/builtin/packages/ascent/package.py
index 2edfee726ac..7df3386e030 100644
--- a/var/spack/repos/builtin/packages/ascent/package.py
+++ b/var/spack/repos/builtin/packages/ascent/package.py
@@ -176,7 +176,7 @@ class Ascent(CMakePackage, CudaPackage, ROCmPackage):
depends_on("conduit@:0.7.2", when="@:0.7.1")
depends_on("conduit@0.8.2:", when="@0.8:")
depends_on("conduit@0.8.6:", when="@0.9:")
- depends_on("conduit@0.9.1:", when="@0.9.3:")
+ depends_on("conduit@0.9.1:0.9.3", when="@0.9.3:")
depends_on("conduit+python", when="+python")
depends_on("conduit~python", when="~python")
depends_on("conduit+mpi", when="+mpi")
@@ -350,7 +350,7 @@ def patch(self):
$<$,$>:-std=c++17>)"""
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CTEST_OUTPUT_ON_FAILURE", "1")
####################################################################
diff --git a/var/spack/repos/builtin/packages/asio/package.py b/var/spack/repos/builtin/packages/asio/package.py
index eb831b8afba..b1984d03053 100644
--- a/var/spack/repos/builtin/packages/asio/package.py
+++ b/var/spack/repos/builtin/packages/asio/package.py
@@ -18,6 +18,7 @@ class Asio(AutotoolsPackage):
license("BSL-1.0")
# As uneven minor versions of asio are not considered stable, they wont be added anymore
+ version("1.34.2", sha256="f3bac015305fbb700545bd2959fbc52d75a1ec2e05f9c7f695801273ceb78cf5")
version("1.34.0", sha256="061ed6c8b97527756aed3e34d2cbcbcb6d3c80afd26ed6304f51119e1ef6a1cd")
version("1.32.0", sha256="f1b94b80eeb00bb63a3c8cef5047d4e409df4d8a3fe502305976965827d95672")
version("1.30.2", sha256="755bd7f85a4b269c67ae0ea254907c078d408cce8e1a352ad2ed664d233780e8")
diff --git a/var/spack/repos/builtin/packages/aspect/package.py b/var/spack/repos/builtin/packages/aspect/package.py
index 9f271669c3c..364e1084bec 100644
--- a/var/spack/repos/builtin/packages/aspect/package.py
+++ b/var/spack/repos/builtin/packages/aspect/package.py
@@ -49,5 +49,5 @@ class Aspect(CMakePackage):
def cmake_args(self):
return [self.define_from_variant("ASPECT_USE_FP_EXCEPTIONS", "fpe")]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("Aspect_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/aspell/package.py b/var/spack/repos/builtin/packages/aspell/package.py
index a026296ecf5..ee4759bffff 100644
--- a/var/spack/repos/builtin/packages/aspell/package.py
+++ b/var/spack/repos/builtin/packages/aspell/package.py
@@ -33,5 +33,5 @@ def make_missing_files(self):
make("gen/dirs.h")
make("gen/static_filters.src.cpp")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ASPELL_CONF", f"prefix {self.prefix}")
diff --git a/var/spack/repos/builtin/packages/aspera-cli/package.py b/var/spack/repos/builtin/packages/aspera-cli/package.py
index deb31d85ca2..af8eda52f90 100644
--- a/var/spack/repos/builtin/packages/aspera-cli/package.py
+++ b/var/spack/repos/builtin/packages/aspera-cli/package.py
@@ -20,7 +20,7 @@ class AsperaCli(Package):
expand=False,
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.cli.bin)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/astral/package.py b/var/spack/repos/builtin/packages/astral/package.py
index 789ab126cab..1500b5a3351 100644
--- a/var/spack/repos/builtin/packages/astral/package.py
+++ b/var/spack/repos/builtin/packages/astral/package.py
@@ -46,5 +46,5 @@ def install(self, spec, prefix):
filter_file("^java", java, script, **kwargs)
filter_file("astral.jar", join_path(prefix.tools, jar_file), script, **kwargs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ASTRAL_HOME", self.prefix.tools)
diff --git a/var/spack/repos/builtin/packages/at-spi2-core/package.py b/var/spack/repos/builtin/packages/at-spi2-core/package.py
index 204140c055a..5d688374b55 100644
--- a/var/spack/repos/builtin/packages/at-spi2-core/package.py
+++ b/var/spack/repos/builtin/packages/at-spi2-core/package.py
@@ -56,15 +56,19 @@ def url_for_version(self, version):
url = "http://ftp.gnome.org/pub/gnome/sources/at-spi2-core"
return url + f"/{version.up_to(2)}/at-spi2-core-{version}.tar.xz"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
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_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# this avoids an "import site" error in the build
env.unset("PYTHONHOME")
diff --git a/var/spack/repos/builtin/packages/athena/package.py b/var/spack/repos/builtin/packages/athena/package.py
index e7879274c49..914107b074c 100644
--- a/var/spack/repos/builtin/packages/athena/package.py
+++ b/var/spack/repos/builtin/packages/athena/package.py
@@ -179,7 +179,7 @@ class Athena(AutotoolsPackage):
patch("missing-separator.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("OPT", "-O3")
diff --git a/var/spack/repos/builtin/packages/atk/package.py b/var/spack/repos/builtin/packages/atk/package.py
index faeafadbf8e..79137621444 100644
--- a/var/spack/repos/builtin/packages/atk/package.py
+++ b/var/spack/repos/builtin/packages/atk/package.py
@@ -39,10 +39,12 @@ def url_for_version(self, version):
f"{version.up_to(2)}/atk-{version}.tar.xz"
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/atop/package.py b/var/spack/repos/builtin/packages/atop/package.py
index 46502959fa1..be74988bf0f 100644
--- a/var/spack/repos/builtin/packages/atop/package.py
+++ b/var/spack/repos/builtin/packages/atop/package.py
@@ -25,7 +25,7 @@ class Atop(Package):
depends_on("ncurses")
depends_on("gmake", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("LDFLAGS", "-ltinfo")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/augustus/package.py b/var/spack/repos/builtin/packages/augustus/package.py
index 6eba45c88c9..4b863369a95 100644
--- a/var/spack/repos/builtin/packages/augustus/package.py
+++ b/var/spack/repos/builtin/packages/augustus/package.py
@@ -173,7 +173,7 @@ def filter_sbang(self):
files = glob.glob("*.py")
filter_file(pattern, repl, *files, backup=False)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
htslib = self.spec["htslib"].prefix
bamtools = self.spec["bamtools"].prefix
@@ -184,6 +184,6 @@ def setup_build_environment(self, env):
env.set("HTSLIB_INSTALL_DIR", htslib)
env.set("BAMTOOLS_INSTALL_DIR", bamtools)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("AUGUSTUS_CONFIG_PATH", join_path(self.prefix, "config"))
env.prepend_path("PATH", join_path(self.prefix, "scripts"))
diff --git a/var/spack/repos/builtin/packages/authd/package.py b/var/spack/repos/builtin/packages/authd/package.py
index 0f52ad1a548..38649f73869 100644
--- a/var/spack/repos/builtin/packages/authd/package.py
+++ b/var/spack/repos/builtin/packages/authd/package.py
@@ -19,7 +19,7 @@ class Authd(MakefilePackage):
depends_on("c", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/autoconf-archive/package.py b/var/spack/repos/builtin/packages/autoconf-archive/package.py
index d74e4cd973a..983e227da18 100644
--- a/var/spack/repos/builtin/packages/autoconf-archive/package.py
+++ b/var/spack/repos/builtin/packages/autoconf-archive/package.py
@@ -34,6 +34,8 @@ class AutoconfArchive(AutotoolsPackage, GNUMirrorPackage):
# The package does not produce any libraries and does not use libtool:
patch_libtool = False
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Adds the ACLOCAL path for autotools."""
env.append_path("ACLOCAL_PATH", self.prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/autofact/package.py b/var/spack/repos/builtin/packages/autofact/package.py
index e3c427e44a6..0c1c860538a 100644
--- a/var/spack/repos/builtin/packages/autofact/package.py
+++ b/var/spack/repos/builtin/packages/autofact/package.py
@@ -31,6 +31,6 @@ def patch(self):
def install(self, spec, prefix):
install_tree(self.stage.source_path, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.scripts)
env.set("PATH2AUTOFACT", self.prefix)
diff --git a/var/spack/repos/builtin/packages/avizo/package.py b/var/spack/repos/builtin/packages/avizo/package.py
index 06381bcacb2..1413cb3dc8a 100644
--- a/var/spack/repos/builtin/packages/avizo/package.py
+++ b/var/spack/repos/builtin/packages/avizo/package.py
@@ -62,7 +62,7 @@ class Avizo(Package):
license_files = ["share/license/password.dat"]
license_vars = ["MCSLMD_LICENSE_FILE"]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MCSLMD_LICENSE_FILE", join_path(self.prefix.share.license, "password.dat"))
def install(self, spec, prefix):
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 1c2dcbefbe5..0cf2e86fccc 100644
--- a/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py
+++ b/var/spack/repos/builtin/packages/aws-ofi-nccl/package.py
@@ -55,11 +55,13 @@ def url_for_version(self, version):
return url_fmt.format(version)
# To enable this plug-in to work with NCCL add it to the LD_LIBRARY_PATH
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("LD_LIBRARY_PATH", self.prefix.lib)
# To enable this plug-in to work with NCCL add it to the LD_LIBRARY_PATH
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.append_path("LD_LIBRARY_PATH", self.prefix.lib)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/aws-ofi-rccl/package.py b/var/spack/repos/builtin/packages/aws-ofi-rccl/package.py
index f91e02a7e5e..a74726b443c 100644
--- a/var/spack/repos/builtin/packages/aws-ofi-rccl/package.py
+++ b/var/spack/repos/builtin/packages/aws-ofi-rccl/package.py
@@ -36,11 +36,13 @@ class AwsOfiRccl(AutotoolsPackage):
depends_on("libtool", type="build")
# To enable this plug-in to work with RCCL add it to the LD_LIBRARY_PATH
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
# To enable this plug-in to work with RCCL add it to the LD_LIBRARY_PATH
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/axom/package.py b/var/spack/repos/builtin/packages/axom/package.py
index 45da799a943..157de9d30cc 100644
--- a/var/spack/repos/builtin/packages/axom/package.py
+++ b/var/spack/repos/builtin/packages/axom/package.py
@@ -36,7 +36,7 @@ class Axom(CachedCMakePackage, CudaPackage, ROCmPackage):
homepage = "https://github.com/LLNL/axom"
git = "https://github.com/LLNL/axom.git"
- tags = ["radiuss"]
+ tags = ["radiuss", "e4s"]
test_requires_compiler = True
diff --git a/var/spack/repos/builtin/packages/babelflow/package.py b/var/spack/repos/builtin/packages/babelflow/package.py
index 25c0d53ba24..c5aef384b17 100644
--- a/var/spack/repos/builtin/packages/babelflow/package.py
+++ b/var/spack/repos/builtin/packages/babelflow/package.py
@@ -30,7 +30,7 @@ class Babelflow(CMakePackage):
# Fix missing implicit includes
@when("%gcc@7:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-include limits")
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/babelstream/package.py b/var/spack/repos/builtin/packages/babelstream/package.py
index d5546584512..09a96ebf1f7 100644
--- a/var/spack/repos/builtin/packages/babelstream/package.py
+++ b/var/spack/repos/builtin/packages/babelstream/package.py
@@ -25,6 +25,8 @@ class Babelstream(CMakePackage, CudaPackage, ROCmPackage, MakefilePackage):
version("main", branch="main")
maintainers("tomdeakin", "kaanolgu", "tom91136")
# Previous maintainers: "robj0nes"
+
+ depends_on("c", type="build")
depends_on("cxx", type="build", when="languages=cxx")
depends_on("fortran", type="build", when="languages=fortran")
# Languages
@@ -829,7 +831,7 @@ def edit(self, pkg, spec, prefix):
for key in config:
inc.write("{0} = {1}\n".format(key, config[key]))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
######################################
# Build and Installation Directories #
######################################
diff --git a/var/spack/repos/builtin/packages/babl/package.py b/var/spack/repos/builtin/packages/babl/package.py
index ca2a45a8505..d19cf4eb06f 100644
--- a/var/spack/repos/builtin/packages/babl/package.py
+++ b/var/spack/repos/builtin/packages/babl/package.py
@@ -36,8 +36,12 @@ class Babl(MesonPackage):
depends_on("lcms")
depends_on("gobject-introspection")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/backupninja/package.py b/var/spack/repos/builtin/packages/backupninja/package.py
index 461f5f4ebd0..fc172d1716b 100644
--- a/var/spack/repos/builtin/packages/backupninja/package.py
+++ b/var/spack/repos/builtin/packages/backupninja/package.py
@@ -22,5 +22,5 @@ class Backupninja(AutotoolsPackage):
depends_on("bash", type="build")
depends_on("gawk", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/bam-readcount/package.py b/var/spack/repos/builtin/packages/bam-readcount/package.py
index 07af8d06baa..d8924c944fa 100644
--- a/var/spack/repos/builtin/packages/bam-readcount/package.py
+++ b/var/spack/repos/builtin/packages/bam-readcount/package.py
@@ -16,7 +16,8 @@ class BamReadcount(CMakePackage):
version("1.0.1", sha256="8ebf84d9efee0f2d3b43f0452dbf16b27337c960e25128f6a7173119e62588b8")
version("0.8.0", sha256="4f4dd558e3c6bfb24d6a57ec441568f7524be6639b24f13ea6f2bb350c7ea65f")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CFLAGS", self.compiler.cc_pic_flag)
diff --git a/var/spack/repos/builtin/packages/bamaddrg/package.py b/var/spack/repos/builtin/packages/bamaddrg/package.py
index 80a4faeeef1..e3a2cd1d870 100644
--- a/var/spack/repos/builtin/packages/bamaddrg/package.py
+++ b/var/spack/repos/builtin/packages/bamaddrg/package.py
@@ -19,6 +19,6 @@ class Bamaddrg(MakefilePackage):
depends_on("bamtools", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BAMTOOLS_ROOT", self.spec["bamtools"].prefix)
env.set("PREFIX", self.prefix)
diff --git a/var/spack/repos/builtin/packages/bart/package.py b/var/spack/repos/builtin/packages/bart/package.py
index d4d87205f70..c2fc44d1231 100644
--- a/var/spack/repos/builtin/packages/bart/package.py
+++ b/var/spack/repos/builtin/packages/bart/package.py
@@ -85,5 +85,5 @@ def install(self, spec, prefix):
install("python/bartview.py", join_path(prefix.bin, "bartview"))
filter_file(r"#!/usr/bin/python", "#!/usr/bin/env python", prefix.bin.bartview)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("TOOLBOX_PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/barvinok/package.py b/var/spack/repos/builtin/packages/barvinok/package.py
index 3374547a06d..dee7e7119fa 100644
--- a/var/spack/repos/builtin/packages/barvinok/package.py
+++ b/var/spack/repos/builtin/packages/barvinok/package.py
@@ -25,7 +25,7 @@ class Barvinok(AutotoolsPackage):
depends_on("llvm +clang", when="+pet")
depends_on("libyaml", when="+pet")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CFLAGS", "-pthread")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/bazel/package.py b/var/spack/repos/builtin/packages/bazel/package.py
index bdb980cc63b..6b71b38fb19 100644
--- a/var/spack/repos/builtin/packages/bazel/package.py
+++ b/var/spack/repos/builtin/packages/bazel/package.py
@@ -256,7 +256,7 @@ def determine_version(cls, exe):
match = re.search(r"Build label: ([\d.]+)", output)
return match.group(1) if match else None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# fix the broken linking (on power9)
# https://github.com/bazelbuild/bazel/issues/10327
env.set("BAZEL_LINKOPTS", "")
diff --git a/var/spack/repos/builtin/packages/bbmap/package.py b/var/spack/repos/builtin/packages/bbmap/package.py
index 624aa7e8419..c1f9ab6fdac 100644
--- a/var/spack/repos/builtin/packages/bbmap/package.py
+++ b/var/spack/repos/builtin/packages/bbmap/package.py
@@ -25,6 +25,6 @@ class Bbmap(Package, SourceforgePackage):
def install(self, spec, prefix):
install_tree(".", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BBMAP_CONFIG", self.prefix.bin.config)
env.set("BBMAP_RESOURCES", self.prefix.bin.resources)
diff --git a/var/spack/repos/builtin/packages/bcftools/package.py b/var/spack/repos/builtin/packages/bcftools/package.py
index d3f0d393b71..4a006a4416f 100644
--- a/var/spack/repos/builtin/packages/bcftools/package.py
+++ b/var/spack/repos/builtin/packages/bcftools/package.py
@@ -133,5 +133,5 @@ def install(self, spec, prefix):
install("plugins/*.so", self.prefix.libexec.bcftools)
@when("@1.2")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BCFTOOLS_PLUGINS", self.prefix.libexec.bcftools)
diff --git a/var/spack/repos/builtin/packages/bcl2fastq2/package.py b/var/spack/repos/builtin/packages/bcl2fastq2/package.py
index 1e9a97e8b2f..cfef7210c5e 100644
--- a/var/spack/repos/builtin/packages/bcl2fastq2/package.py
+++ b/var/spack/repos/builtin/packages/bcl2fastq2/package.py
@@ -30,6 +30,9 @@ class Bcl2fastq2(Package):
conflicts("platform=darwin", msg="malloc.h/etc requirements break build on macs")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("boost@1.54.0:1.55")
# TODO: replace this with an explicit list of components of Boost,
diff --git a/var/spack/repos/builtin/packages/bdsim/package.py b/var/spack/repos/builtin/packages/bdsim/package.py
index 9029105e985..e1e603daab6 100644
--- a/var/spack/repos/builtin/packages/bdsim/package.py
+++ b/var/spack/repos/builtin/packages/bdsim/package.py
@@ -28,6 +28,7 @@ class Bdsim(CMakePackage):
version("1.6.0", sha256="c0149a68d3c2436e036e8f71a13a251a2d88afe51e4387fe43ebd31a96bb3d7d")
depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
depends_on("cmake")
depends_on("geant4")
diff --git a/var/spack/repos/builtin/packages/beast1/package.py b/var/spack/repos/builtin/packages/beast1/package.py
index a132896332c..43b30a463d8 100644
--- a/var/spack/repos/builtin/packages/beast1/package.py
+++ b/var/spack/repos/builtin/packages/beast1/package.py
@@ -25,7 +25,7 @@ def url_for_version(self, ver):
base = "https://github.com/beast-dev/beast-mcmc/releases/download"
return "{0}/v{1}/BEASTv{1}.tgz".format(base, ver.dotted)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BEAST1", self.prefix)
env.set("BEAST_LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/beast2/package.py b/var/spack/repos/builtin/packages/beast2/package.py
index 5560b5a057e..4ec7a167452 100644
--- a/var/spack/repos/builtin/packages/beast2/package.py
+++ b/var/spack/repos/builtin/packages/beast2/package.py
@@ -49,7 +49,7 @@ def patch(self):
r"(beast\.pkgmgmt.*\b)|(viz.*\b)", "{0} {1} \\1".format(javafx, modules), i
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BEAST", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/benchmark/package.py b/var/spack/repos/builtin/packages/benchmark/package.py
index 65cae28d2bb..bade4054a89 100644
--- a/var/spack/repos/builtin/packages/benchmark/package.py
+++ b/var/spack/repos/builtin/packages/benchmark/package.py
@@ -45,7 +45,7 @@ class Benchmark(CMakePackage):
variant(
"build_type",
- default="RelWithDebInfo",
+ default="Release",
description="The build type to build",
values=("Debug", "Release", "RelWithDebInfo", "MinSizeRel", "Coverage"),
)
diff --git a/var/spack/repos/builtin/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py
index ffdfa0185c5..cf3c5fc21be 100644
--- a/var/spack/repos/builtin/packages/binutils/package.py
+++ b/var/spack/repos/builtin/packages/binutils/package.py
@@ -25,7 +25,7 @@ class Binutils(AutotoolsPackage, GNUMirrorPackage):
"GPL-2.0-or-later AND LGPL-2.1-or-later AND GPL-3.0-or-later AND LGPL-3.0-or-later",
checked_by="tgamblin",
)
-
+ version("2.44", sha256="f66390a661faa117d00fab2e79cf2dc9d097b42cc296bf3f8677d1e7b452dc3a")
version("2.43.1", sha256="becaac5d295e037587b63a42fad57fe3d9d7b83f478eb24b67f9eec5d0f1872f")
version("2.43", sha256="fed3c3077f0df7a4a1aa47b080b8c53277593ccbb4e5e78b73ffb4e3f265e750")
version("2.42", sha256="aa54850ebda5064c72cd4ec2d9b056c294252991486350d9a97ab2a6dfdfaf12")
diff --git a/var/spack/repos/builtin/packages/bioawk/package.py b/var/spack/repos/builtin/packages/bioawk/package.py
index 9887f36e0e8..c5228fddedd 100644
--- a/var/spack/repos/builtin/packages/bioawk/package.py
+++ b/var/spack/repos/builtin/packages/bioawk/package.py
@@ -16,6 +16,8 @@ class Bioawk(MakefilePackage):
version("1.0", sha256="316a6561dda41e8327b85106db3704e94e23d7a89870392d19ef8559f7859e2d")
+ depends_on("c", type="build")
+
depends_on("zlib-api")
depends_on("bison", type=("build"))
diff --git a/var/spack/repos/builtin/packages/biopieces/package.py b/var/spack/repos/builtin/packages/biopieces/package.py
index c4f1e17f794..3f8e4242150 100644
--- a/var/spack/repos/builtin/packages/biopieces/package.py
+++ b/var/spack/repos/builtin/packages/biopieces/package.py
@@ -63,7 +63,7 @@ class Biopieces(Package):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Note: user will need to set environment variables on their own,
# dependent on where they will want data to be located:
# BP_DATA - Contains genomic data etc.
diff --git a/var/spack/repos/builtin/packages/blackhat/package.py b/var/spack/repos/builtin/packages/blackhat/package.py
index ee7a4aac80a..7228dab768a 100644
--- a/var/spack/repos/builtin/packages/blackhat/package.py
+++ b/var/spack/repos/builtin/packages/blackhat/package.py
@@ -30,5 +30,5 @@ def patch(self):
def configure_args(self):
return ["--with-QDpath=" + self.spec["qd"].prefix, "--enable-pythoninterface=no"]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-Wno-deprecated")
diff --git a/var/spack/repos/builtin/packages/blat/package.py b/var/spack/repos/builtin/packages/blat/package.py
index d40f3a97013..30acecfdd49 100644
--- a/var/spack/repos/builtin/packages/blat/package.py
+++ b/var/spack/repos/builtin/packages/blat/package.py
@@ -16,6 +16,8 @@ class Blat(Package):
version("37", sha256="88ee2b272d42ab77687c61d200b11f1d58443951069feb7e10226a2509f84cf2")
version("35", sha256="06d9bcf114ec4a4b21fef0540a0532556b6602322a5a2b33f159dc939ae53620")
+ depends_on("c", type="build")
+
depends_on("libpng")
depends_on("uuid", when="@37:")
depends_on("mysql-client", when="@37:")
@@ -30,7 +32,7 @@ def flag_handler(self, name, flags):
flags.append("-fcommon")
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MACHTYPE", "x86_64")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/bml/package.py b/var/spack/repos/builtin/packages/bml/package.py
index f30bc953dc6..861335b536d 100644
--- a/var/spack/repos/builtin/packages/bml/package.py
+++ b/var/spack/repos/builtin/packages/bml/package.py
@@ -14,7 +14,7 @@ class Bml(CMakePackage):
url = "https://github.com/lanl/bml/archive/refs/tags/v2.2.0.tar.gz"
git = "https://github.com/lanl/bml.git"
- maintainers("jeanlucf22")
+ maintainers("jeanlucf22", "finkeljos")
license("BSD-3-Clause")
@@ -31,19 +31,33 @@ class Bml(CMakePackage):
version("1.2.2", sha256="babc2fd0229397e418be00f3691277e86f549b5a23cadbcee66078595e9176a0")
version("1.1.0", sha256="a90ede19d80ed870f0bf1588875a9f371484d89006a7296010d8d791da3eac33")
- variant("shared", default=True, description="Build shared libs")
- variant("mpi", default=True, description="Build with MPI Support")
-
- conflicts("+mpi", when="@:1.2.2")
-
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
-
depends_on("blas")
depends_on("lapack")
+
+ variant("shared", default=True, description="Build shared libs")
+
+ variant("mpi", default=True, description="Build with MPI Support")
depends_on("mpi", when="+mpi")
- depends_on("python", type="build")
+ conflicts("+mpi", when="@:1.2.2")
+
+ variant("magma", default=False, description="Build with magma support")
+ depends_on("magma", when="+magma")
+ conflicts("+magma", when="@1.1.0:2.2.0", msg="Must use master branch of bml")
+
+ variant(
+ "cusolver",
+ default=False,
+ when="+magma",
+ description="Use cusolver diagonalization instead internal magma one.",
+ )
+ depends_on("cuda", when="+cusolver")
+
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ if "+magma" in self.spec:
+ env.set("MAGMA_ROOT", self.spec["magma"].prefix)
def cmake_args(self):
args = [self.define_from_variant("BUILD_SHARED_LIBS", "shared")]
@@ -55,4 +69,16 @@ def cmake_args(self):
args.append("-DCMAKE_Fortran_COMPILER=%s" % spec["mpi"].mpifc)
else:
args.append("-DBML_MPI=False")
+
+ # if using magma variant
+ if "+magma" in self.spec:
+ args.append("-DBML_MAGMA=True")
+
+ # cmake doesnt find lapack lib without explicilty setting it.
+ args.append("-DBLAS_LIBRARIES=%s" % self.spec["blas"].libs)
+ args.append("-DLAPACK_LIBRARIES=%s" % self.spec["lapack"].libs)
+
+ # if using cusolver variant, magma required to use cusolver
+ if "+cusolver" in self.spec:
+ args.append("-DBML_CUSOLVER=True")
return args
diff --git a/var/spack/repos/builtin/packages/bohrium/package.py b/var/spack/repos/builtin/packages/bohrium/package.py
index 834060e5b20..6a5793a38bd 100644
--- a/var/spack/repos/builtin/packages/bohrium/package.py
+++ b/var/spack/repos/builtin/packages/bohrium/package.py
@@ -199,7 +199,7 @@ def cmake_args(self):
#
# Environment setup
#
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Bohrium needs an extra include dir apart from
# the self.prefix.include dir
env.prepend_path("CPATH", self.prefix.include.bohrium)
diff --git a/var/spack/repos/builtin/packages/bonniepp/package.py b/var/spack/repos/builtin/packages/bonniepp/package.py
index 405aaaece44..b3e1e28804e 100644
--- a/var/spack/repos/builtin/packages/bonniepp/package.py
+++ b/var/spack/repos/builtin/packages/bonniepp/package.py
@@ -21,6 +21,6 @@ def configure_args(self):
configure_args.append("--enable-debug")
return configure_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Prepend the sbin directory to PATH."""
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py
index 41bcd02458c..961283a712a 100644
--- a/var/spack/repos/builtin/packages/boost/package.py
+++ b/var/spack/repos/builtin/packages/boost/package.py
@@ -29,6 +29,7 @@ class Boost(Package):
license("BSL-1.0")
version("develop", branch="develop", submodules=True)
+ version("1.88.0", sha256="46d9d2c06637b219270877c9e16155cbd015b6dc84349af064c088e9b5b12f7b")
version("1.87.0", sha256="af57be25cb4c4f4b413ed692fe378affb4352ea50fbe294a11ef548f4d527d89")
version("1.86.0", sha256="1bed88e40401b2cb7a1f76d4bab499e352fa4d0c5f31c0dbae64e24d34d7513b")
version("1.85.0", sha256="7009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617")
@@ -134,6 +135,7 @@ class Boost(Package):
"log",
"math",
"mpi",
+ "mqtt5",
"nowide",
"program_options",
"python",
@@ -735,6 +737,8 @@ def install(self, spec, prefix):
with_libs = {f"{lib}" for lib in Boost.all_libs if f"+{lib}" in spec}
# Remove libraries that the release version does not support
+ if not spec.satisfies("@1.88.0:"):
+ with_libs.discard("mqtt5")
if not spec.satisfies("@1.85.0:"):
with_libs.discard("charconv")
if not spec.satisfies("@1.84.0:"):
@@ -831,10 +835,12 @@ def is_64bit():
if (sys.platform == "darwin") and ("+shared" in spec):
fix_darwin_install_name(prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BOOST_ROOT", self.prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if "+context" in self.spec and "context-impl" in self.spec.variants:
context_impl = self.spec.variants["context-impl"].value
# fcontext, as the default, has no corresponding macro
diff --git a/var/spack/repos/builtin/packages/braker/package.py b/var/spack/repos/builtin/packages/braker/package.py
index 2245b55f876..012484ec6b9 100644
--- a/var/spack/repos/builtin/packages/braker/package.py
+++ b/var/spack/repos/builtin/packages/braker/package.py
@@ -64,5 +64,5 @@ def filter_sbang(self):
files = glob.iglob("*.pl")
filter_file(pattern, repl, *files, backup=False)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/breakdancer/package.py b/var/spack/repos/builtin/packages/breakdancer/package.py
index cccf69c740a..e14f128e818 100644
--- a/var/spack/repos/builtin/packages/breakdancer/package.py
+++ b/var/spack/repos/builtin/packages/breakdancer/package.py
@@ -44,7 +44,7 @@ class Breakdancer(CMakePackage):
parallel = False
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# get the perl tools in the path
env.prepend_path("PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/breseq/package.py b/var/spack/repos/builtin/packages/breseq/package.py
index 209ffbf1f06..35919a0fefb 100644
--- a/var/spack/repos/builtin/packages/breseq/package.py
+++ b/var/spack/repos/builtin/packages/breseq/package.py
@@ -35,6 +35,6 @@ class Breseq(AutotoolsPackage):
conflicts("%gcc@:4.8")
conflicts("%clang@:3.3")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LDFLAGS", "-L{0}".format(self.spec["zlib-api"].prefix.lib))
env.set("CFLAGS", "-I{0}".format(self.spec["zlib-api"].prefix.include))
diff --git a/var/spack/repos/builtin/packages/bricks/package.py b/var/spack/repos/builtin/packages/bricks/package.py
index 5395c1d4280..d05aacc77f1 100644
--- a/var/spack/repos/builtin/packages/bricks/package.py
+++ b/var/spack/repos/builtin/packages/bricks/package.py
@@ -21,6 +21,8 @@ class Bricks(CMakePackage):
# List of GitHub accounts to notify when the package is updated.
maintainers("ztuowen", "drhansj")
+ tags = ["e4s"]
+
license("MIT")
version("r0.1", branch="r0.1")
diff --git a/var/spack/repos/builtin/packages/bucky/package.py b/var/spack/repos/builtin/packages/bucky/package.py
index 7381d417231..9318215cf30 100644
--- a/var/spack/repos/builtin/packages/bucky/package.py
+++ b/var/spack/repos/builtin/packages/bucky/package.py
@@ -19,6 +19,8 @@ class Bucky(MakefilePackage):
requires("%gcc", msg="bucky can only be compiled with GCC")
+ depends_on("cxx", type="build")
+
build_directory = "src"
def edit(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/bufr/package.py b/var/spack/repos/builtin/packages/bufr/package.py
index 9fb596e9f10..85fbd973891 100644
--- a/var/spack/repos/builtin/packages/bufr/package.py
+++ b/var/spack/repos/builtin/packages/bufr/package.py
@@ -137,7 +137,7 @@ def _setup_bufr_environment(self, env, suffix):
pydir = join_path(os.path.dirname(lib[0]), f"python{pyver}", "site-packages")
env.prepend_path("PYTHONPATH", pydir)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
suffixes = ["4"]
if not self.spec.satisfies("@12:"):
suffixes += ["8", "d"]
@@ -145,7 +145,7 @@ def setup_run_environment(self, env):
self._setup_bufr_environment(env, suffix)
@on_package_attributes(run_tests=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_path("LD_LIBRARY_PATH", join_path(self.build_directory, "src"))
def check(self):
diff --git a/var/spack/repos/builtin/packages/butterflypack/package.py b/var/spack/repos/builtin/packages/butterflypack/package.py
index 2be34f04756..613eeb4d721 100644
--- a/var/spack/repos/builtin/packages/butterflypack/package.py
+++ b/var/spack/repos/builtin/packages/butterflypack/package.py
@@ -24,6 +24,8 @@ class Butterflypack(CMakePackage):
url = "https://github.com/liuyangzhuan/ButterflyPACK/archive/v2.2.0.tar.gz"
maintainers("liuyangzhuan")
+ tags = ["e4s"]
+
license("BSD-3-Clause-LBNL")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py
index 5f0ad51cd8e..6ce731ed257 100644
--- a/var/spack/repos/builtin/packages/bzip2/package.py
+++ b/var/spack/repos/builtin/packages/bzip2/package.py
@@ -131,7 +131,6 @@ def install(self, spec, prefix):
# Build the static library and everything else
if self.spec.satisfies("platform=windows"):
# Build step
- nmake = Executable("nmake.exe")
nmake("-f", "makefile.msc")
# Install step
mkdirp(self.prefix.include)
diff --git a/var/spack/repos/builtin/packages/cachefilesd/package.py b/var/spack/repos/builtin/packages/cachefilesd/package.py
index 1d1e46c0e2e..09ab9322bb8 100644
--- a/var/spack/repos/builtin/packages/cachefilesd/package.py
+++ b/var/spack/repos/builtin/packages/cachefilesd/package.py
@@ -29,5 +29,5 @@ def edit(self, spec, prefix):
def install(self, spec, prefix):
make("DESTDIR={0}".format(prefix), "install")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py
index ab1795d6cec..ab829f6f614 100644
--- a/var/spack/repos/builtin/packages/caliper/package.py
+++ b/var/spack/repos/builtin/packages/caliper/package.py
@@ -3,6 +3,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
+import socket
import sys
from spack.package import *
@@ -149,6 +150,19 @@ def _get_sys_type(self, spec):
sys_type = env["SYS_TYPE"]
return sys_type
+ @property
+ def cache_name(self):
+ hostname = socket.gethostname()
+ if "SYS_TYPE" in env:
+ hostname = hostname.rstrip("1234567890")
+ return "{0}-{1}-{2}@{3}-{4}.cmake".format(
+ hostname,
+ self._get_sys_type(self.spec),
+ self.spec.compiler.name,
+ self.spec.compiler.version,
+ self.spec.dag_hash(8),
+ )
+
def initconfig_compiler_entries(self):
spec = self.spec
entries = super().initconfig_compiler_entries()
@@ -249,7 +263,7 @@ def initconfig_package_entries(self):
def cmake_args(self):
return []
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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))
diff --git a/var/spack/repos/builtin/packages/camp/package.py b/var/spack/repos/builtin/packages/camp/package.py
index 07a8b4ff2ef..c0f873f715e 100644
--- a/var/spack/repos/builtin/packages/camp/package.py
+++ b/var/spack/repos/builtin/packages/camp/package.py
@@ -15,11 +15,17 @@ class Camp(CMakePackage, CudaPackage, ROCmPackage):
git = "https://github.com/LLNL/camp.git"
url = "https://github.com/LLNL/camp/archive/v0.1.0.tar.gz"
- maintainers("trws", "adrienbernede")
+ maintainers("adrienbernede", "kab163", "trws")
license("BSD-3-Clause")
version("main", branch="main", submodules=False)
+ version(
+ "2025.03.0",
+ tag="v2025.03.0",
+ commit="ee0a3069a7ae72da8bcea63c06260fad34901d43",
+ submodules=False,
+ )
version(
"2024.07.0",
tag="v2024.07.0",
diff --git a/var/spack/repos/builtin/packages/care/package.py b/var/spack/repos/builtin/packages/care/package.py
index aaec56cd8eb..002a4f23877 100644
--- a/var/spack/repos/builtin/packages/care/package.py
+++ b/var/spack/repos/builtin/packages/care/package.py
@@ -24,6 +24,30 @@ class Care(CachedCMakePackage, CudaPackage, ROCmPackage):
version("develop", branch="develop", submodules=False)
version("master", branch="master", submodules=False)
+ version(
+ "0.15.1",
+ tag="v0.15.1",
+ commit="f198c8b3d5dcfd274107b4263331818e86b50c7a",
+ submodules=False,
+ )
+ version(
+ "0.15.0",
+ tag="v0.15.0",
+ commit="aff9eea69b6d95342371aacc44b73bef785255f3",
+ submodules=False,
+ )
+ version(
+ "0.14.1",
+ tag="v0.14.1",
+ commit="110c6e5766ead59b231e2b05deecd7567874e907",
+ submodules=False,
+ )
+ version(
+ "0.14.0",
+ tag="v0.14.0",
+ commit="2784188a067abac35747d58b5a5daa1b3852756b",
+ submodules=False,
+ )
version(
"0.13.3",
tag="v0.13.3",
@@ -67,6 +91,7 @@ class Care(CachedCMakePackage, CudaPackage, ROCmPackage):
variant(
"implicit_conversions",
default=False,
+ when="@:0.14",
description="Enable implicit" "conversions to/from raw pointers",
)
variant("tests", default=False, description="Build tests")
@@ -111,7 +136,6 @@ class Care(CachedCMakePackage, CudaPackage, ROCmPackage):
depends_on("raja@2024.02.0:", when="@0.12.0:")
depends_on("raja@2022.10.5:", when="@0.10.0:")
- # TODO: Add an enable_pick variant
depends_on("chai+enable_pick+raja")
depends_on("chai@2024.07.0:", when="@0.13.2:")
depends_on("chai@2024.02.2:", when="@0.13.1:")
@@ -209,12 +233,6 @@ def initconfig_hardware_entries(self):
if spec.satisfies("+rocm"):
entries.append(cmake_cache_option("ENABLE_HIP", True))
- archs = self.spec.variants["amdgpu_target"].value
- if archs != "none":
- arch_str = ",".join(archs)
- entries.append(
- cmake_cache_string("HIP_HIPCC_FLAGS", "--amdgpu-target={0}".format(arch_str))
- )
else:
entries.append(cmake_cache_option("ENABLE_HIP", False))
@@ -250,6 +268,13 @@ def initconfig_package_entries(self):
entries.append(cmake_cache_string("CMAKE_BUILD_TYPE", spec.variants["build_type"].value))
+ # C++14
+ if spec.satisfies("@:0.14.1"):
+ entries.append(cmake_cache_string("BLT_CXX_STD", "c++14"))
+ # C++17
+ else:
+ entries.append(cmake_cache_string("BLT_CXX_STD", "c++17"))
+
entries.append(cmake_cache_option("ENABLE_TESTS", spec.satisfies("+tests")))
entries.append(cmake_cache_option("CARE_ENABLE_TESTS", spec.satisfies("+tests")))
# For tests to work, we also need BLT_ENABLE_TESTS to be on.
diff --git a/var/spack/repos/builtin/packages/casper/package.py b/var/spack/repos/builtin/packages/casper/package.py
index 2a5ce9aa8d1..f1ffb694e6d 100644
--- a/var/spack/repos/builtin/packages/casper/package.py
+++ b/var/spack/repos/builtin/packages/casper/package.py
@@ -23,6 +23,7 @@ class Casper(MakefilePackage):
)
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
depends_on("jellyfish@2.2.3:")
depends_on("boost+exception")
@@ -37,5 +38,5 @@ def flag_handler(self, name, flags):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/cbench/package.py b/var/spack/repos/builtin/packages/cbench/package.py
index 872408cf0e3..19d72697602 100644
--- a/var/spack/repos/builtin/packages/cbench/package.py
+++ b/var/spack/repos/builtin/packages/cbench/package.py
@@ -35,7 +35,7 @@ class Cbench(MakefilePackage):
conflicts("%xl")
conflicts("%xl_r")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# The location of the Cbench source tree
env.set("CBENCHOME", self.stage.source_path)
diff --git a/var/spack/repos/builtin/packages/cbflib/package.py b/var/spack/repos/builtin/packages/cbflib/package.py
index e3f0169d528..6c36416deaa 100644
--- a/var/spack/repos/builtin/packages/cbflib/package.py
+++ b/var/spack/repos/builtin/packages/cbflib/package.py
@@ -30,7 +30,7 @@ class Cbflib(MakefilePackage):
patch("cbf_f16.patch")
patch("cbf_int.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
ce = Executable(self.compiler.cc)
ce(
"-E",
diff --git a/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py b/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py
index 1fe117f2b10..e5eb6024b7c 100644
--- a/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py
@@ -62,7 +62,7 @@ class CbtfArgonavisGui(QMakePackage):
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set up the build environment for this package."""
env.set("BOOSTROOT", self.spec["boost"].prefix)
env.set("CBTF_ROOT", self.spec["cbtf"].prefix)
@@ -75,7 +75,7 @@ def setup_build_environment(self, env):
env.set("KRELL_ROOT_XERCES", self.spec["xerces-c"].prefix)
env.set("INSTALL_ROOT", self.spec.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the runtime environment for this package."""
# The implementor of qtgraph has set up the library and include
diff --git a/var/spack/repos/builtin/packages/cbtf-argonavis/package.py b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
index 2057335cf9c..b5b3e64a79a 100644
--- a/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
@@ -119,12 +119,12 @@ def cmake_args(self):
return cmake_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
env.prepend_path("LD_LIBRARY_PATH", self.spec["cuda"].prefix + "/extras/CUPTI/lib64")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
env.prepend_path("LD_LIBRARY_PATH", self.spec["cuda"].prefix + "/extras/CUPTI/lib64")
diff --git a/var/spack/repos/builtin/packages/cbtf-krell/package.py b/var/spack/repos/builtin/packages/cbtf-krell/package.py
index 93140098aa8..aa9e001c046 100644
--- a/var/spack/repos/builtin/packages/cbtf-krell/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-krell/package.py
@@ -225,7 +225,7 @@ def cmake_args(self):
return cmake_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
# Environment settings for cbtf-krell, bin is automatically
diff --git a/var/spack/repos/builtin/packages/cce/package.py b/var/spack/repos/builtin/packages/cce/package.py
index 080bcf27234..e26980e71c4 100644
--- a/var/spack/repos/builtin/packages/cce/package.py
+++ b/var/spack/repos/builtin/packages/cce/package.py
@@ -12,6 +12,8 @@ class Cce(Package, CompilerPackage):
homepage = "https://cpe.ext.hpe.com/docs/cce/index.html"
url = "https://cpe.ext.hpe.com/docs/cce/index.html"
+ has_code = False
+
compiler_languages = ["c", "cxx", "fortran"]
c_names = ["craycc"]
cxx_names = ["crayCC"]
diff --git a/var/spack/repos/builtin/packages/cdhit/package.py b/var/spack/repos/builtin/packages/cdhit/package.py
index b41b12c5208..5b5110ca80d 100644
--- a/var/spack/repos/builtin/packages/cdhit/package.py
+++ b/var/spack/repos/builtin/packages/cdhit/package.py
@@ -43,5 +43,5 @@ def build(self, spec, prefix):
make_args.append("zlib=no")
make(*make_args)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cgal/package.py b/var/spack/repos/builtin/packages/cgal/package.py
index 1960dd6f49d..d11d321739c 100644
--- a/var/spack/repos/builtin/packages/cgal/package.py
+++ b/var/spack/repos/builtin/packages/cgal/package.py
@@ -143,7 +143,7 @@ def url_for_version(self, version):
return url.format(version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("BOOST_INCLUDEDIR", spec["boost"].headers.directories[0])
diff --git a/var/spack/repos/builtin/packages/chai/package.py b/var/spack/repos/builtin/packages/chai/package.py
index 0e72e71d1e4..b6d790803cb 100644
--- a/var/spack/repos/builtin/packages/chai/package.py
+++ b/var/spack/repos/builtin/packages/chai/package.py
@@ -18,11 +18,17 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage):
git = "https://github.com/LLNL/CHAI.git"
tags = ["ecp", "e4s", "radiuss"]
- maintainers("davidbeckingsale", "adayton1", "adrienbernede")
+ maintainers("adayton1", "adrienbernede", "davidbeckingsale", "kab163")
license("BSD-3-Clause")
version("develop", branch="develop", submodules=False)
+ version(
+ "2025.03.0",
+ tag="v2025.03.0",
+ commit="79f6414a00a89070054ac97baed47d21d10c83a4",
+ submodules=False,
+ )
version(
"2024.07.0",
tag="v2024.07.0",
@@ -101,7 +107,7 @@ class Chai(CachedCMakePackage, CudaPackage, ROCmPackage):
# We propagate the patch here.
patch("change_mpi_target_name_umpire_patch.patch", when="@2022.10.0:2023.06.0")
- variant("enable_pick", default=False, description="Enable pick method")
+ variant("enable_pick", default=False, when="@:2024", description="Enable pick method")
variant(
"separable_compilation",
default=True,
diff --git a/var/spack/repos/builtin/packages/changa/package.py b/var/spack/repos/builtin/packages/changa/package.py
index c36de02f1d0..92b54a05453 100644
--- a/var/spack/repos/builtin/packages/changa/package.py
+++ b/var/spack/repos/builtin/packages/changa/package.py
@@ -52,7 +52,7 @@ class Changa(AutotoolsPackage, CudaPackage):
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CHARM_DIR", self.spec["charmpp"].prefix)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/chapel/package.py b/var/spack/repos/builtin/packages/chapel/package.py
index ab098df9f59..0592547faef 100644
--- a/var/spack/repos/builtin/packages/chapel/package.py
+++ b/var/spack/repos/builtin/packages/chapel/package.py
@@ -749,11 +749,11 @@ def setup_env_vars(self, env):
self.update_lib_path(env, self.spec["hsa-rocr-dev"].prefix)
self.setup_chpl_comm(env, self.spec)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
self.unset_chpl_env_vars(env)
self.setup_env_vars(env)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_env_vars(env)
chpl_home = join_path(self.prefix.share, "chapel", self._output_version_short)
env.prepend_path("PATH", join_path(chpl_home, "util"))
diff --git a/var/spack/repos/builtin/packages/charmpp/package.py b/var/spack/repos/builtin/packages/charmpp/package.py
index 705063d82f9..b382bde6b04 100644
--- a/var/spack/repos/builtin/packages/charmpp/package.py
+++ b/var/spack/repos/builtin/packages/charmpp/package.py
@@ -423,7 +423,9 @@ def check_build(self):
parallel=False,
)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if not self.spec.satisfies("backend=mpi"):
env.set("MPICC", self.prefix.bin.ampicc)
env.set("MPICXX", self.prefix.bin.ampicxx)
diff --git a/var/spack/repos/builtin/packages/chez-scheme/package.py b/var/spack/repos/builtin/packages/chez-scheme/package.py
index 11adcfab0e6..b551cf8e515 100644
--- a/var/spack/repos/builtin/packages/chez-scheme/package.py
+++ b/var/spack/repos/builtin/packages/chez-scheme/package.py
@@ -41,8 +41,8 @@ class ChezScheme(AutotoolsPackage):
conflicts("+iconv", when="platform=windows")
conflicts("+curses", when="platform=windows")
- def setup_build_environment(self, env):
- env.set("ZUO_JOBS", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("ZUO_JOBS", str(make_jobs))
def patch(self):
true = which_string("true", required=True)
diff --git a/var/spack/repos/builtin/packages/chlorop/package.py b/var/spack/repos/builtin/packages/chlorop/package.py
index 633308d60ee..cb7abebbefb 100644
--- a/var/spack/repos/builtin/packages/chlorop/package.py
+++ b/var/spack/repos/builtin/packages/chlorop/package.py
@@ -30,5 +30,5 @@ def install(self, spec, prefix):
os.rename("chlorop", "bin/chlorop")
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CHLOROP", self.prefix)
diff --git a/var/spack/repos/builtin/packages/chrony/package.py b/var/spack/repos/builtin/packages/chrony/package.py
index d016e9b5287..b493734802c 100644
--- a/var/spack/repos/builtin/packages/chrony/package.py
+++ b/var/spack/repos/builtin/packages/chrony/package.py
@@ -26,5 +26,5 @@ class Chrony(AutotoolsPackage):
depends_on("ruby-asciidoctor")
depends_on("bison", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/cinch/package.py b/var/spack/repos/builtin/packages/cinch/package.py
index f2293968f11..dc438c40165 100644
--- a/var/spack/repos/builtin/packages/cinch/package.py
+++ b/var/spack/repos/builtin/packages/cinch/package.py
@@ -24,6 +24,8 @@ def install(self, spec, prefix):
# (CMake) Header Only library so just copy
install_tree(self.stage.source_path, prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("CMAKE_PREFIX_PATH", self.prefix)
env.set("CINCH_SOURCE_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/citcoms/package.py b/var/spack/repos/builtin/packages/citcoms/package.py
index 7b872301956..90242305487 100644
--- a/var/spack/repos/builtin/packages/citcoms/package.py
+++ b/var/spack/repos/builtin/packages/citcoms/package.py
@@ -41,7 +41,7 @@ class Citcoms(AutotoolsPackage):
depends_on("cuda", when="+cuda")
depends_on("hdf5+mpi", when="+hdf5")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+ggrd"):
env.set("HC_HOME", self.spec["hc"].prefix)
diff --git a/var/spack/repos/builtin/packages/clingo-bootstrap/package.py b/var/spack/repos/builtin/packages/clingo-bootstrap/package.py
index 6e679e20ee9..e9c588fbd68 100644
--- a/var/spack/repos/builtin/packages/clingo-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/clingo-bootstrap/package.py
@@ -134,7 +134,7 @@ def pgo_train(self):
use_mods.append_flags("LDFLAGS", use_flag)
cmake.add_default_envmod(use_mods)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if (
self.spec.satisfies("%gcc") or self.spec.satisfies("%clang")
) and "+static_libstdcpp" in self.spec:
diff --git a/var/spack/repos/builtin/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py
index 1d43f966d07..8a1890f4b77 100644
--- a/var/spack/repos/builtin/packages/cmake/package.py
+++ b/var/spack/repos/builtin/packages/cmake/package.py
@@ -355,7 +355,9 @@ def install(self, spec, prefix):
filter_file("mpc++_r)", "mpc++_r mpiFCC)", f, string=True)
filter_file("mpifc)", "mpifc mpifrt)", f, string=True)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# CMake 4.0.0 breaks compatibility with CMake projects requiring a CMake
# < 3.5. However, many projects that specify a minimum requirement for
# versions older than 3.5 are actually compatible with newer CMake
diff --git a/var/spack/repos/builtin/packages/cmark/package.py b/var/spack/repos/builtin/packages/cmark/package.py
index d846be60530..a48ead01d23 100644
--- a/var/spack/repos/builtin/packages/cmark/package.py
+++ b/var/spack/repos/builtin/packages/cmark/package.py
@@ -14,6 +14,7 @@ class Cmark(CMakePackage):
license("BSD-2-Clause")
+ version("0.31.1", sha256="3da93db5469c30588cfeb283d9d62edfc6ded9eb0edc10a4f5bbfb7d722ea802")
version("0.31.0", sha256="bbcb8f8c03b5af33fcfcf11a74e9499f20a9043200b8552f78a6e8ba76e04d11")
version("0.29.0", sha256="2558ace3cbeff85610de3bda32858f722b359acdadf0c4691851865bb84924a6")
version("0.28.3", sha256="acc98685d3c1b515ff787ac7c994188dadaf28a2d700c10c1221da4199bae1fc")
diff --git a/var/spack/repos/builtin/packages/cmdstan/package.py b/var/spack/repos/builtin/packages/cmdstan/package.py
index 9e6102c1a94..54c01714240 100644
--- a/var/spack/repos/builtin/packages/cmdstan/package.py
+++ b/var/spack/repos/builtin/packages/cmdstan/package.py
@@ -84,5 +84,5 @@ def install(self, spec, prefix):
install("stanc", prefix.bin)
install("stansummary", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CMDSTAN", self.prefix)
diff --git a/var/spack/repos/builtin/packages/cmor/package.py b/var/spack/repos/builtin/packages/cmor/package.py
index 17df84b273b..5f1e5e8a274 100644
--- a/var/spack/repos/builtin/packages/cmor/package.py
+++ b/var/spack/repos/builtin/packages/cmor/package.py
@@ -48,12 +48,6 @@ class Cmor(AutotoolsPackage):
depends_on("py-wheel", when="+python", type="build")
depends_on("py-numpy", type=("build", "run"), when="+python")
- @run_before("configure")
- def validate(self):
- if self.spec.satisfies("+fortran") and not self.compiler.fc:
- msg = "cannot build a fortran variant without a fortran compiler"
- raise RuntimeError(msg)
-
def configure_args(self):
spec = self.spec
args = ["--disable-debug"]
diff --git a/var/spack/repos/builtin/packages/coinhsl/package.py b/var/spack/repos/builtin/packages/coinhsl/package.py
index 12f03226332..93c9c67795e 100644
--- a/var/spack/repos/builtin/packages/coinhsl/package.py
+++ b/var/spack/repos/builtin/packages/coinhsl/package.py
@@ -62,7 +62,7 @@ def meson_args(self):
args.append(f"-Dlibblas={blas}")
args.extend([f"-Dlibblas_path={p}" for p in blas_paths])
args.append(f"-Dliblapack={lapack}")
- args.extend([f"-Dlibblas_path={p}" for p in lapack_paths])
+ args.extend([f"-Dliblapack_path={p}" for p in lapack_paths])
if spec.satisfies("+metis"):
metis = spec["metis"]
if metis.satisfies("@5"):
diff --git a/var/spack/repos/builtin/packages/comgr/package.py b/var/spack/repos/builtin/packages/comgr/package.py
index 46dc7356b43..fb29081675c 100644
--- a/var/spack/repos/builtin/packages/comgr/package.py
+++ b/var/spack/repos/builtin/packages/comgr/package.py
@@ -28,7 +28,7 @@ def url_for_version(self, version):
license("NCSA")
- version("master", branch="amd-stg-open")
+ version("master", branch="amd-stg-open", deprecated=True)
version("6.3.3", sha256="4df9aba24e574edf23844c0d2d9dda112811db5c2b08c9428604a21b819eb23d")
version("6.3.2", sha256="1f52e45660ea508d3fe717a9903fe27020cee96de95a3541434838e0193a4827")
version("6.3.1", sha256="e9c2481cccacdea72c1f8d3970956c447cec47e18dfb9712cbbba76a2820552c")
@@ -139,7 +139,7 @@ def cmake_args(self):
args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan"))
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@5.7: +asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/compiler-wrapper/package.py b/var/spack/repos/builtin/packages/compiler-wrapper/package.py
index e4a5e77abcd..7bc4d7a0251 100644
--- a/var/spack/repos/builtin/packages/compiler-wrapper/package.py
+++ b/var/spack/repos/builtin/packages/compiler-wrapper/package.py
@@ -141,7 +141,9 @@ def install(self, spec, prefix):
(cray_dir / "crayCC").symlink_to(installed_script)
(cray_dir / "CC").symlink_to(installed_script)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if sys.platform == "win32":
return
diff --git a/var/spack/repos/builtin/packages/composable-kernel/package.py b/var/spack/repos/builtin/packages/composable-kernel/package.py
index a9aeba2e4d4..f071f0e295f 100644
--- a/var/spack/repos/builtin/packages/composable-kernel/package.py
+++ b/var/spack/repos/builtin/packages/composable-kernel/package.py
@@ -17,7 +17,7 @@ class ComposableKernel(CMakePackage):
license("MIT")
- version("master", branch="develop")
+ version("master", branch="develop", deprecated=True)
version("6.3.3", sha256="b7102efba044455416a6127af1951019fe8365a653ea7eb0b1d83bb4542c9309")
version("6.3.2", sha256="875237fe493ff040f8f63b827cddf2ff30a8d3aa18864f87d0e35323c7d62a2d")
version("6.3.1", sha256="3e8c8c832ca3f9ceb99ab90f654b93b7db876f08d90eda87a70bc629c854052a")
@@ -91,7 +91,7 @@ class ComposableKernel(CMakePackage):
# https://github.com/ROCm/composable_kernel/commit/959073842c0db839d45d565eb260fd018c996ce4
patch("0001-mark-kernels-maybe-unused.patch", when="@6.2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/conda4aarch64/package.py b/var/spack/repos/builtin/packages/conda4aarch64/package.py
index dc0f0e79c2d..ecb55006c8a 100644
--- a/var/spack/repos/builtin/packages/conda4aarch64/package.py
+++ b/var/spack/repos/builtin/packages/conda4aarch64/package.py
@@ -26,6 +26,6 @@ def install(self, spec, prefix):
bash = which("bash")
bash(conda_script, "-b", "-f", "-p", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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/conduit/package.py b/var/spack/repos/builtin/packages/conduit/package.py
index 3029cecfa92..2a1160dcd1d 100644
--- a/var/spack/repos/builtin/packages/conduit/package.py
+++ b/var/spack/repos/builtin/packages/conduit/package.py
@@ -43,6 +43,7 @@ class Conduit(CMakePackage):
# is to bridge any spack dependencies that are still using the name master
version("master", branch="develop", submodules=True)
# note: 2021-05-05 latest tagged release is now preferred instead of develop
+ version("0.9.4", sha256="c9edfb2ff09890084313ad9c2d83bfb7c10e70b696980762d1ae1488f9f08e6c")
version("0.9.3", sha256="2968fa8df6e6c43800c019a008ef064ee9995dc2ff448b72dc5017c188a2e6d4")
version("0.9.2", sha256="45d5a4eccd0fc978d153d29c440c53c483b8f29dfcf78ddcc9aa15c59b257177")
version("0.9.1", sha256="a3f1168738dcf72f8ebf83299850301aaf56e803f40618fc1230a755d0d05363")
@@ -218,7 +219,7 @@ class Conduit(CMakePackage):
sha256="784d74942a63acf698c31b39848b46b4b755bf06faa6aa6fb81be61783ec0c30",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CTEST_OUTPUT_ON_FAILURE", "1")
# conduit uses a <=1.10 api version before 0.8
if "@:0.7 +hdf5" in self.spec and "@1.10:" in self.spec["hdf5"]:
diff --git a/var/spack/repos/builtin/packages/conmon/package.py b/var/spack/repos/builtin/packages/conmon/package.py
index f06cdd7f29e..e8b80cda0c5 100644
--- a/var/spack/repos/builtin/packages/conmon/package.py
+++ b/var/spack/repos/builtin/packages/conmon/package.py
@@ -6,26 +6,32 @@
class Conmon(MakefilePackage):
- """An OCI container runtime monitor"""
+ """An OCI container runtime monitor that tracks and logs container lifecycle events."""
homepage = "https://github.com/containers/conmon"
url = "https://github.com/containers/conmon/archive/v2.0.30.tar.gz"
+ git = "https://github.com/containers/conmon.git"
+
maintainers("bernhardkaindl")
license("Apache-2.0")
+ sanity_check_is_file = ["bin/conmon"]
+
+ version("main", branch="main")
+ version("2.1.13", sha256="350992cb2fe4a69c0caddcade67be20462b21b4078dae00750e8da1774926d60")
version("2.1.12", sha256="842f0b5614281f7e35eec2a4e35f9f7b9834819aa58ecdad8d0ff6a84f6796a6")
version("2.1.7", sha256="7d0f9a2f7cb8a76c51990128ac837aaf0cc89950b6ef9972e94417aa9cf901fe")
version("2.1.5", sha256="ee3179ee2b9a9107acec00eb546062cf7deb847f135a3b81503d22b0d226b3ed")
version("2.0.30", sha256="4b0a98fbe8a63c42f60edac25c19aa6606caa7b1e4fe7846fc7f7de0b566ba25")
- depends_on("c", type="build") # generated
-
+ depends_on("c", type="build")
depends_on("go", type="build")
depends_on("go-md2man", type="build")
depends_on("pkgconfig", type="build")
- depends_on("libseccomp")
+
depends_on("glib")
+ depends_on("libseccomp")
def install(self, spec, prefix):
- make("install", "PREFIX=" + prefix)
+ make("install", f"PREFIX={prefix}")
diff --git a/var/spack/repos/builtin/packages/connect-proxy/package.py b/var/spack/repos/builtin/packages/connect-proxy/package.py
index c6173f4dd89..d3cd9b0621b 100644
--- a/var/spack/repos/builtin/packages/connect-proxy/package.py
+++ b/var/spack/repos/builtin/packages/connect-proxy/package.py
@@ -16,6 +16,8 @@ class ConnectProxy(MakefilePackage):
version("1.105", sha256="07366026b1f81044ecd8da9b5b5b51321327ecdf6ba23576271a311bbd69d403")
+ depends_on("c", type="build")
+
def build(self, spec, prefix):
make("CC={0}".format(spack_cc))
diff --git a/var/spack/repos/builtin/packages/conserver/package.py b/var/spack/repos/builtin/packages/conserver/package.py
index b644af2d8fd..03bab5dfb8b 100644
--- a/var/spack/repos/builtin/packages/conserver/package.py
+++ b/var/spack/repos/builtin/packages/conserver/package.py
@@ -23,5 +23,5 @@ class Conserver(AutotoolsPackage):
depends_on("c", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/corenlp/package.py b/var/spack/repos/builtin/packages/corenlp/package.py
index 833a6ce240c..0f43520841f 100644
--- a/var/spack/repos/builtin/packages/corenlp/package.py
+++ b/var/spack/repos/builtin/packages/corenlp/package.py
@@ -65,8 +65,8 @@ def install(self, spec, prefix):
kwargs = {"ignore_absent": False, "backup": False, "string": False}
filter_file("^java", java, script, **kwargs)
- def setup_run_environment(self, run_env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
class_paths = []
class_paths.extend(find(prefix.lib, "*.jar"))
classpath = os.pathsep.join(class_paths)
- run_env.prepend_path("CLASSPATH", classpath)
+ env.prepend_path("CLASSPATH", classpath)
diff --git a/var/spack/repos/builtin/packages/cosign/package.py b/var/spack/repos/builtin/packages/cosign/package.py
index 57f6883259c..c047d8a8f68 100644
--- a/var/spack/repos/builtin/packages/cosign/package.py
+++ b/var/spack/repos/builtin/packages/cosign/package.py
@@ -25,7 +25,7 @@ class Cosign(Package):
depends_on("go", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Point GOPATH at the top of the staging dir for the build step.
env.prepend_path("GOPATH", self.stage.path)
diff --git a/var/spack/repos/builtin/packages/cosma/package.py b/var/spack/repos/builtin/packages/cosma/package.py
index db5e8ef817a..9cc7a8b7e5b 100644
--- a/var/spack/repos/builtin/packages/cosma/package.py
+++ b/var/spack/repos/builtin/packages/cosma/package.py
@@ -52,7 +52,9 @@ class Cosma(CMakePackage):
with when("+rocm"):
variant("rccl", default=False, description="Use rocm rccl")
- depends_on("cxx", type="build") # generated
+ depends_on("cxx", type="build")
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
depends_on("cmake@3.22:", type="build")
depends_on("mpi@3:")
@@ -81,7 +83,7 @@ class Cosma(CMakePackage):
patch("fj-ssl2.patch", when="^fujitsu-ssl2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda"):
env.set("CUDA_PATH", self.spec["cuda"].prefix)
diff --git a/var/spack/repos/builtin/packages/costa/package.py b/var/spack/repos/builtin/packages/costa/package.py
index c9ce1f123d3..ad821aa2efe 100644
--- a/var/spack/repos/builtin/packages/costa/package.py
+++ b/var/spack/repos/builtin/packages/costa/package.py
@@ -50,7 +50,7 @@ def url_for_version(self, version):
)
return "https://github.com/eth-cscs/COSTA/archive/refs/tags/v{0}.tar.gz".format(version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
return
def costa_scalapack_cmake_arg(self):
diff --git a/var/spack/repos/builtin/packages/covfie/package.py b/var/spack/repos/builtin/packages/covfie/package.py
index 4147bb9ed4b..8eb75299bcd 100644
--- a/var/spack/repos/builtin/packages/covfie/package.py
+++ b/var/spack/repos/builtin/packages/covfie/package.py
@@ -6,25 +6,27 @@
class Covfie(CMakePackage, CudaPackage):
- """
- Covfie is a library for compositional descriptions of storage methods for
- vector fields and other structured multi-dimensional data.
- """
+ """Covfie is a library for compositional descriptions of storage methods for
+ vector fields and other structured multi-dimensional data."""
homepage = "https://github.com/acts-project/covfie"
- url = "https://github.com/acts-project/covfie/archive/refs/tags/v0.1.0.tar.gz"
+ url = "https://github.com/acts-project/covfie/archive/refs/tags/v0.13.0.tar.gz"
+ git = "https://github.com/acts-project/covfie.git"
list_url = "https://github.com/acts-project/covfie/tags"
- license("MPL-2.0")
-
maintainers("stephenswat")
+ license("MPL-2.0")
+
+ version("main", branch="main")
+ version("0.13.0", sha256="e9cd0546c7bc9539f440273bbad303c97215ccd87403cedb4aa387a313938d57")
version("0.12.1", sha256="c33d7707ee30ab5fa8df686a780600343760701023ac0b23355627e1f2f044de")
version("0.12.0", sha256="e35e94075a40e89c4691ff373e3061577295d583a2546c682b2d652d9fce7828")
version("0.11.0", sha256="39fcd0f218d3b4f3aacc6af497a8cda8767511efae7a72b47781f10fd4340f4f")
version("0.10.0", sha256="d44142b302ffc193ad2229f1d2cc6d8d720dd9da8c37989ada4f23018f86c964")
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("cmake@3.21:", type="build", when="@0.11:")
depends_on("cmake@3.18:", type="build")
diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py
index 6bbc43c5ab0..361b5c0d915 100644
--- a/var/spack/repos/builtin/packages/cp2k/package.py
+++ b/var/spack/repos/builtin/packages/cp2k/package.py
@@ -40,6 +40,8 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
maintainers("dev-zero", "mtaillefumier", "RMeli", "abussy")
+ tags = ["e4s"]
+
license("GPL-2.0-or-later")
version("2025.1", sha256="65c8ad5488897b0f995919b9fa77f2aba4b61677ba1e3c19bb093d5c08a8ce1d")
@@ -113,7 +115,7 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
variant("pytorch", default=False, description="Enable libtorch support")
variant("quip", default=False, description="Enable quip support")
variant("dftd4", when="@2024.2:", default=False, description="Enable DFT-D4 support")
- variant("mpi_f08", default=False, description="Use MPI F08 module")
+ variant("mpi_f08", default=False, description="Use MPI F08 module", when="+mpi")
variant("smeagol", default=False, description="Enable libsmeagol support", when="@2025.2:")
variant(
"pw_gpu", default=True, description="Enable FFT calculations on GPU", when="@2025.2: +cuda"
@@ -157,6 +159,13 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
description="Enable TrexIO support",
when="@2025.2: build_system=cmake",
)
+ variant(
+ "greenx",
+ default=False,
+ description="Enable green X support",
+ when="@2025.2: build_system=cmake",
+ )
+
variant("deepmd", default=False, description="Enable DeepMD-kit support")
conflicts("+deepmd", msg="DeepMD-kit is not yet available in Spack")
@@ -206,7 +215,7 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
depends_on("blas")
depends_on("lapack")
depends_on("fftw-api@3")
-
+ depends_on("greenx", when="+greenx")
depends_on("hdf5+hl+fortran", when="+hdf5")
depends_on("trexio", when="+trexio")
@@ -328,7 +337,8 @@ class Cp2k(MakefilePackage, CMakePackage, CudaPackage, ROCmPackage):
depends_on("sirius@7.3:", when="@9.1")
depends_on("sirius@7.4:7.5", when="@2023.2")
depends_on("sirius@7.5:", when="@2024.1:")
- depends_on("sirius@7.6: +pugixml", when="@2024.2:")
+ depends_on("sirius@7.6:7.7 +pugixml", when="@2024.2:")
+ depends_on("sirius@7.7: +pugixml", when="@2025.2:")
with when("+libvori"):
depends_on("libvori@201219:", when="@8.1")
depends_on("libvori@210412:", when="@8.2:")
@@ -634,7 +644,6 @@ def edit(self, pkg, spec, prefix):
)
else:
libs.append(elpa.libs.ld_flags)
-
if spec.satisfies("@:4"):
if elpa.satisfies("@:2014.5"):
cppflags.append("-D__ELPA")
@@ -1047,6 +1056,8 @@ def cmake_args(self):
]
args += [
+ "-DCP2K_USE_FFTW3=ON",
+ self.define_from_variant("CP2K_USE_MPI", "mpi"),
self.define_from_variant("CP2K_ENABLE_REGTESTS", "enable_regtests"),
self.define_from_variant("CP2K_USE_ELPA", "elpa"),
self.define_from_variant("CP2K_USE_DLAF", "dlaf"),
@@ -1073,8 +1084,12 @@ def cmake_args(self):
self.define_from_variant("CP2K_USE_HDF5", "hdf5"),
self.define_from_variant("CP2K_USE_DEEPMD", "deepmd"),
self.define_from_variant("CP2K_USE_TREXIO", "trexio"),
+ self.define_from_variant("CP2K_USE_GREENX", "greenx"),
]
+ if spec.satisfies("^[virtuals=fftw-api] fftw+openmp"):
+ args += ["-DCP2K_USE_FFTW3_WITH_OPENMP=ON"]
+
# we force the use elpa openmp threading support. might need to be revisited though
args += [
self.define(
@@ -1086,8 +1101,6 @@ def cmake_args(self):
if "spla" in spec and (spec.satisfies("+cuda") or spec.satisfies("+rocm")):
args += ["-DCP2K_USE_SPLA_GEMM_OFFLOADING=ON"]
- args += ["-DCP2K_USE_FFTW3=ON"]
-
if spec.satisfies("smm=libxsmm"):
args += ["-DCP2K_USE_LIBXSMM=ON"]
else:
@@ -1097,6 +1110,9 @@ def cmake_args(self):
blas = spec["blas"]
if blas.name == "intel-oneapi-mkl":
+ if spec.satisfies("^[virtuals=fftw-api] intel-oneapi-mkl"):
+ args += ["-DCP2K_USE_FFTW3_WITH_MKL=ON"]
+
args += ["-DCP2K_BLAS_VENDOR=MKL"]
if sys.platform == "darwin":
args += [
diff --git a/var/spack/repos/builtin/packages/cplex/package.py b/var/spack/repos/builtin/packages/cplex/package.py
index 8d32543575a..9da64331607 100644
--- a/var/spack/repos/builtin/packages/cplex/package.py
+++ b/var/spack/repos/builtin/packages/cplex/package.py
@@ -52,7 +52,7 @@ def configure(self, spec, prefix):
for key in config:
input_file.write("{0}={1}\n".format(key, config[key]))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(self.prefix, "cplex/bin/x86-64_linux"))
env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "cplex/bin/x86-64_linux"))
env.prepend_path("MATLABPATH", join_path(self.prefix, "cplex/matlab/x86-64_linux"))
diff --git a/var/spack/repos/builtin/packages/cppgsl/package.py b/var/spack/repos/builtin/packages/cppgsl/package.py
index 864233af9b7..bb267bad557 100644
--- a/var/spack/repos/builtin/packages/cppgsl/package.py
+++ b/var/spack/repos/builtin/packages/cppgsl/package.py
@@ -15,6 +15,7 @@ class Cppgsl(CMakePackage):
license("MIT")
version("main", branch="main")
+ version("4.2.0", sha256="2c717545a073649126cb99ebd493fa2ae23120077968795d2c69cbab821e4ac6")
version("4.1.0", sha256="0a227fc9c8e0bf25115f401b9a46c2a68cd28f299d24ab195284eb3f1d7794bd")
version("4.0.0", sha256="f0e32cb10654fea91ad56bde89170d78cfbf4363ee0b01d8f097de2ba49f6ce9")
version("3.1.0", sha256="d3234d7f94cea4389e3ca70619b82e8fb4c2f33bb3a070799f1e18eef500a083")
diff --git a/var/spack/repos/builtin/packages/cppunit/package.py b/var/spack/repos/builtin/packages/cppunit/package.py
index 53712899c48..4432407e192 100644
--- a/var/spack/repos/builtin/packages/cppunit/package.py
+++ b/var/spack/repos/builtin/packages/cppunit/package.py
@@ -41,12 +41,13 @@ class Cppunit(AutotoolsPackage):
)
depends_on("cxx", type="build")
+ depends_on("c", type="build")
depends_on("autoconf", type="build", when="@master,1.15_20220904")
depends_on("automake", type="build", when="@master,1.15_20220904")
depends_on("libtool", type="build", when="@master,1.15_20220904")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
cxxstd = self.spec.variants["cxxstd"].value
cxxstdflag = (
"" if cxxstd == "default" else getattr(self.compiler, "cxx{0}_flag".format(cxxstd))
diff --git a/var/spack/repos/builtin/packages/cracklib/package.py b/var/spack/repos/builtin/packages/cracklib/package.py
index 0fee6139b8e..ccb37a24d49 100644
--- a/var/spack/repos/builtin/packages/cracklib/package.py
+++ b/var/spack/repos/builtin/packages/cracklib/package.py
@@ -35,5 +35,5 @@ def autoreconf(self, spec, prefix):
sh = which("sh")
sh("./autogen.sh")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/cray-mpich/package.py b/var/spack/repos/builtin/packages/cray-mpich/package.py
index 8be3e5ae2dd..a427df13967 100644
--- a/var/spack/repos/builtin/packages/cray-mpich/package.py
+++ b/var/spack/repos/builtin/packages/cray-mpich/package.py
@@ -74,7 +74,7 @@ def external_prefix(self):
libdir = get_path_args_from_module_line(line)[0]
return os.path.dirname(os.path.normpath(libdir))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+wrappers"):
self.setup_mpi_wrapper_variables(env)
return
diff --git a/var/spack/repos/builtin/packages/cray-mvapich2/package.py b/var/spack/repos/builtin/packages/cray-mvapich2/package.py
index 265e9ef5015..0a73a07d818 100644
--- a/var/spack/repos/builtin/packages/cray-mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/cray-mvapich2/package.py
@@ -28,7 +28,7 @@ class CrayMvapich2(MpichEnvironmentModifications, Package):
requires("platform=linux", msg="Cray MVAPICH2 is only available on Cray")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.has_virtual_dependency("c"):
env.set("MPICC", self["c"].cc)
diff --git a/var/spack/repos/builtin/packages/cronie/package.py b/var/spack/repos/builtin/packages/cronie/package.py
index 9003ac64bb9..541894b2378 100644
--- a/var/spack/repos/builtin/packages/cronie/package.py
+++ b/var/spack/repos/builtin/packages/cronie/package.py
@@ -24,5 +24,5 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/crow/package.py b/var/spack/repos/builtin/packages/crow/package.py
new file mode 100644
index 00000000000..ca3da81fac6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/crow/package.py
@@ -0,0 +1,53 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class Crow(CMakePackage):
+ """Crow is a C++ microframework for creating HTTP and WebSocket services. It uses routing
+ similar to Python's Flask, which makes it easy to use. It is also extremely fast, beating
+ many other C++ and non-C++ web frameworks."""
+
+ homepage = "https://crowcpp.org"
+ url = "https://github.com/CrowCpp/Crow/archive/refs/tags/v1.2.1.2.tar.gz"
+
+ maintainers("ta7mid")
+
+ license("BSD-3-Clause")
+
+ version("1.2.1.2", sha256="dc008515f64c9054250909a16bf0d9173af845d2c6d4e49ed6d3f0f32dfdc747")
+ version("1.2.0", sha256="c80d0b23c6a20f8aa6fe776669dc8a9fb984046891d2f70bfc0539d16998164b")
+
+ variant(
+ "asio",
+ default="standalone",
+ description="Asio variant to use: the non-boost Asio or Boost.Asio",
+ values=("standalone", "boost"),
+ )
+ variant(
+ "ssl",
+ default=False,
+ description="Enable support for HTTPS and encrypted WebSocket connections using OpenSSL",
+ )
+ variant(
+ "compression", default=False, description="Enable support for HTTP compression using zlib"
+ )
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("asio", when="asio=standalone")
+ depends_on("boost+system+date_time", when="asio=boost")
+ depends_on("openssl", when="+ssl")
+ depends_on("zlib", when="+compression")
+
+ def cmake_args(self):
+ return [
+ self.define("CROW_BUILD_EXAMPLES", False),
+ self.define("CROW_BUILD_TESTS", False),
+ self.define("CROW_USE_BOOST", self.spec.satisfies("asio=boost")),
+ self.define_from_variant("CROW_ENABLE_SSL", "ssl"),
+ self.define_from_variant("CROW_ENABLE_COMPRESSION", "compression"),
+ ]
diff --git a/var/spack/repos/builtin/packages/crtm-fix/package.py b/var/spack/repos/builtin/packages/crtm-fix/package.py
index 6a19bcc7b8f..120716fe946 100644
--- a/var/spack/repos/builtin/packages/crtm-fix/package.py
+++ b/var/spack/repos/builtin/packages/crtm-fix/package.py
@@ -55,6 +55,7 @@ def install(self, spec, prefix):
for d in endian_dirs:
fix_files = fix_files + find(".", "*/{}/*".format(d), recursive=False)
fix_files = fix_files + find(".", "*/*/{}/*".format(d), recursive=False)
+ fix_files = fix_files + find(".", "*/*/*/{}/*".format(d), recursive=False)
if self.spec.satisfies("~testfiles"):
fix_files = [f for f in fix_files if "/fix/test_data/" not in f]
fix_files = [f for f in fix_files if os.path.isfile(f)]
@@ -88,5 +89,5 @@ def install(self, spec, prefix):
for f in fix_files:
install(f, self.prefix.fix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CRTM_FIX", self.prefix.fix)
diff --git a/var/spack/repos/builtin/packages/cryptsetup/package.py b/var/spack/repos/builtin/packages/cryptsetup/package.py
index 4652b9f394a..d7da4e81f59 100644
--- a/var/spack/repos/builtin/packages/cryptsetup/package.py
+++ b/var/spack/repos/builtin/packages/cryptsetup/package.py
@@ -58,10 +58,14 @@ def configure_args(self):
]
return args
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Prepend the sbin directory to PATH."""
env.prepend_path("PATH", self.prefix.sbin)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Prepend the sbin directory to PATH."""
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/cub/package.py b/var/spack/repos/builtin/packages/cub/package.py
index 71d016b6fbb..8588bf474d8 100644
--- a/var/spack/repos/builtin/packages/cub/package.py
+++ b/var/spack/repos/builtin/packages/cub/package.py
@@ -41,7 +41,9 @@ class Cub(Package):
version("1.7.1", sha256="50b8777b83093fdfdab429a61fccdbfbbb991b3bbc08385118e5ad58e8f62e1d")
version("1.4.1", sha256="7c3784cf59f02d4a88099d6a11e357032bac9eac2b9c78aaec947d1270e21871")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("CUB_DIR", self.prefix.include.cub.cmake)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/cuda/package.py b/var/spack/repos/builtin/packages/cuda/package.py
index 3860a0f5eee..87929b4e14c 100644
--- a/var/spack/repos/builtin/packages/cuda/package.py
+++ b/var/spack/repos/builtin/packages/cuda/package.py
@@ -718,7 +718,7 @@ def determine_version(cls, exe):
match = re.search(r"Cuda compilation tools, release .*?, V(\S+)", output)
return match.group(1) if match else None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:8.0.61"):
# Perl 5.26 removed current directory from module search path,
# CUDA 9 has a fix for this, but CUDA 8 and lower don't.
@@ -729,7 +729,9 @@ def setup_build_environment(self, env):
env.set("LIBXML2HOME", libxml2_home)
env.append_path("LD_LIBRARY_PATH", libxml2_home.lib)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if "cxx" in dependent_spec:
env.set("CUDAHOSTCXX", dependent_spec["cxx"].package.cxx)
env.set("CUDA_HOME", self.prefix)
@@ -743,7 +745,7 @@ def cmake_prefix_paths(self):
cmake_prefix_paths.append(cub_path)
return cmake_prefix_paths
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CUDA_HOME", self.prefix)
env.set("NVHPC_CUDA_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/cudnn/package.py b/var/spack/repos/builtin/packages/cudnn/package.py
index 35cc4297759..b4049083426 100644
--- a/var/spack/repos/builtin/packages/cudnn/package.py
+++ b/var/spack/repos/builtin/packages/cudnn/package.py
@@ -8,22 +8,61 @@
from spack.package import *
_versions = {
+ # cuDNN 9.8.0
+ "9.8.0.87-12": {
+ "Linux-x86_64": "321b9b33bb1287404d93d5672d352f16feabc4b220ac6ae0b86e4b27f257dcf4",
+ "Linux-aarch64": "22f62f474f0cbb35bef540adb1d841da63c9cd3df76b3c4e43010f436b2cd85c",
+ },
+ "9.8.0.87-11": {
+ "Linux-x86_64": "cf4dfaef8311d987d640a322f668cd5240ac3e5302abe9617dd991b5b2532758",
+ "Linux-aarch64": "8ff117715fb3323032d1b489880117556ad8b5e57a9060143f0cb72384db7710",
+ },
+ # cuDNN 9.7.1
+ "9.7.1.26-12": {
+ "Linux-x86_64": "109a5e5c6bcdf4396e6f63f3f862ed2dcf16ee93ee034dc704a1b11bdf00c0b1",
+ "Linux-aarch64": "92824550a95eb275b06c90998410e12ce05140e0508f0905644c654c9ed7a764",
+ },
+ "9.7.1.26-11": {
+ "Linux-x86_64": "73aadf2d1b721a34bd7b90908d02906257f2addbd246cf8db58e21d68d855ea2",
+ "Linux-aarch64": "25ca58ff295401a8f7edbceb2657ab483c4ee4a80f9a92f8d0cbe5f15aae1cde",
+ },
+ # cuDNN 9.6.0
+ "9.6.0.74-12": {
+ "Linux-x86_64": "72595f0d17d952cf568c1d76e370a9c303bb08c2f80888a8cf33e316a65d46a8",
+ "Linux-aarch64": "f71fb008833fa92f9eac02c0b786a21f5e383470235ddeb1eee98fe370148ace",
+ },
+ "9.6.0.74-11": {
+ "Linux-x86_64": "9717b0022d4f5ea88ccd9796bef7ad1cc5d04b3bd53f690041767aabfb98d14d",
+ "Linux-aarch64": "5f7440fd8269f7a7986bff89dd6924e4145644a94958ab49f146b6f8c0230d46",
+ },
+ # cuDNN 9.5.1
+ "9.5.1.17-12": {
+ "Linux-x86_64": "35dd20b9c68324ae1288ac36f66ab1f318d2bfecfafb703a82617aa283272be4",
+ "Linux-aarch64": "340c49b32c133b0321c5c5b00d14fb64887dcac83ee8fd24195d9191061f1ad7",
+ },
+ "9.5.1.17-11": {
+ "Linux-x86_64": "b1f5050cd2bfd7fa9d3d0dd00d417cc2124692d8421295e12f841be6c8e3a426",
+ "Linux-aarch64": "ad68d12ee351b5f3478078fc8188eefb8712721c3e501c9345ec5ffb0b85fae8",
+ },
# cuDNN 9.2.0
"9.2.0.82-12": {
"Linux-x86_64": "1362b4d437e37e92c9814c3b4065db5106c2e03268e22275a5869e968cee7aa8",
- "Linux-aarch64": "24cc2a0308dfe412c02c7d41d4b07ec12dacb021ebf8c719de38eb77d22f68c1",
+ "Linux-aarch64": "2b017070bbd361aa2d8f7ef84620c2e66062b9424a477b08cba925316c85aed1",
},
"9.2.0.82-11": {
- "Linux-x86_64": "99dcb3fa2bf7eed7f35b0f8e58e7d1f04d9a52e01e382efc1de16fed230d3b26"
+ "Linux-x86_64": "99dcb3fa2bf7eed7f35b0f8e58e7d1f04d9a52e01e382efc1de16fed230d3b26",
+ "Linux-aarch64": "62973737acc11c20f0640e63248a8d988b53b6aad219cf17eaff63a05970853d",
},
# cuDNN 8.9.7
"8.9.7.29-12": {
"Linux-x86_64": "475333625c7e42a7af3ca0b2f7506a106e30c93b1aa0081cd9c13efb6e21e3bb",
"Linux-ppc64le": "8574d291b299f9cc0134304473c9933bd098cc717e8d0876f4aba9f9eebe1b76",
+ "Linux-aarch64": "e98b7c80010785e5d5ca01ee4ce9b5b0c8c73587ea6f8648be34d3f8d1d47bd1",
},
"8.9.7.29-11": {
"Linux-x86_64": "a3e2509028cecda0117ce5a0f42106346e82e86d390f4bb9475afc976c77402e",
"Linux-ppc64le": "f23fd7d59f9d4f743fa926f317dab0d37f6ea21edb2726ceb607bea45b0f9f36",
+ "Linux-aarch64": "91c37cfb458f541419e98510f13aaf5975c0232c613e18b776385490074eea17",
},
# cuDNN 8.9.5
"8.9.5.30-12": {
@@ -34,25 +73,29 @@
"8.9.5.30-11": {
"Linux-x86_64": "bbe10e3c08cd7e4aea1012213781e4fe270e1c908263444f567cafefb2cc6525",
"Linux-ppc64le": "d678f8b2903b95de7eeaef38890c5674705864ea049b2b63e90565f2c0ea682f",
+ "Linux-aarch64": "50e3d38cb70a53bb059da0aefc60e1460729c6988e2697200c43b80d218e556c",
},
# cuDNN 8.9.0
"8.9.0.131-12": {
"Linux-x86_64": "477631002be61022b60961cba0a501271507a93f81d6b08384bc320cb8706c98",
"Linux-ppc64le": "ff239e4cbbf21fa18104b62a887686e2197f820ad58817d62e509c735a331829",
- "Linux-aarch64": "fab70f4fb3b933ff502200a1d954d2c6fc205ff9c9b1d271ea4c41e980a66596",
+ "Linux-aarch64": "0f09605e282dcf7f66eb3957c394c197e8b8a4d41635a880e217fc8d37342e0f",
},
"8.9.0.131-11": {
"Linux-x86_64": "3cb82c50723f14b41d43523f222cd52cc9d50b3ad67c380f4be51bd1133daa2d",
"Linux-ppc64le": "18778de490550c5b584e96560208e5e37678397037946e10a1c2824174c69725",
+ "Linux-aarch64": "3e50e31833718a9d755c0ae8f126e9f0f62213d9d2b0a545a6bc2dcafda2386f",
},
# cuDNN 8.8.1
"8.8.1.3-12": {
"Linux-x86_64": "79d77a769c7e7175abc7b5c2ed5c494148c0618a864138722c887f95c623777c",
"Linux-ppc64le": "b0e89021a846952cad8cfc674edce2883f6e344ebd47a2394f706b1136715bc7",
+ "Linux-aarch64": "9e3977aa1b9d06eb860b582ac8933630675a0243029c259bfec5bb5699867d20",
},
"8.8.1.3-11": {
"Linux-x86_64": "af7584cae0cc5524b5913ef08c29ba6154113c60eb0a37a0590a91b515a8a8f9",
"Linux-ppc64le": "d086003d09d5388aa42142f07483a773aa74b602478b0933e24fc63f56f1658f",
+ "Linux-aarch64": "3b35aaf9a4249886d938d996498c85a19cde9b74657685f2272ec6553e863359",
},
# cuDNN 8.7.0
"8.7.0.84-11.8": {
@@ -334,7 +377,7 @@ def url_for_version(self, version):
.replace("darwin", "osx")
.replace("aarch64", "aarch64sbsa")
)
- elif version < Version("8.8.0"):
+ else:
sys_key = sys_key.replace("aarch64", "sbsa")
if version >= Version("8.3.1"):
@@ -381,7 +424,7 @@ def url_for_version(self, version):
url = "https://developer.download.nvidia.com/compute/redist/cudnn/v{0}/cudnn-{1}-{2}-v{3}.tgz"
return url.format(directory, cuda, sys_key, ver)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Package is not compiled, and does not work unless LD_LIBRARY_PATH is set
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/cupla/package.py b/var/spack/repos/builtin/packages/cupla/package.py
index 07384bdf00a..43d0d1c86a9 100644
--- a/var/spack/repos/builtin/packages/cupla/package.py
+++ b/var/spack/repos/builtin/packages/cupla/package.py
@@ -32,12 +32,14 @@ def install(self, spec, prefix):
install("Findcupla.cmake", self.prefix)
install("cuplaConfig.cmake", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CUPLA_ROOT", self.prefix)
env.prepend_path("CMAKE_PREFIX_PATH", self.prefix)
env.set("CUPLA", self.prefix.share.cupla)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("CUPLA_ROOT", self.prefix)
env.prepend_path("CMAKE_PREFIX_PATH", self.prefix)
env.set("CUPLA", self.prefix.share.cupla)
diff --git a/var/spack/repos/builtin/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py
index efd3e2ab1c4..9d3dd5f2d60 100644
--- a/var/spack/repos/builtin/packages/curl/package.py
+++ b/var/spack/repos/builtin/packages/curl/package.py
@@ -208,7 +208,9 @@ def flag_handler(self, name, flags):
class BuildEnvironment:
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.satisfies("libs=static"):
env.append_flags("CFLAGS", "-DCURL_STATICLIB")
env.append_flags("CXXFLAGS", "-DCURL_STATICLIB")
diff --git a/var/spack/repos/builtin/packages/cutlass/package.py b/var/spack/repos/builtin/packages/cutlass/package.py
index 058041a39e9..0a59aaefc95 100644
--- a/var/spack/repos/builtin/packages/cutlass/package.py
+++ b/var/spack/repos/builtin/packages/cutlass/package.py
@@ -53,7 +53,7 @@ class Cutlass(CMakePackage, CudaPackage):
"https://developer.nvidia.com/cuda-gpus",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CUDACXX", self.spec["cuda"].prefix.bin.nvcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/dalton/package.py b/var/spack/repos/builtin/packages/dalton/package.py
index 82f83efc0a1..d853957cbc9 100644
--- a/var/spack/repos/builtin/packages/dalton/package.py
+++ b/var/spack/repos/builtin/packages/dalton/package.py
@@ -73,7 +73,7 @@ class Dalton(CMakePackage):
" version or a different compiler suite.",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix.join("dalton"))
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/daos/package.py b/var/spack/repos/builtin/packages/daos/package.py
index 341f2e442f5..0257af8e642 100644
--- a/var/spack/repos/builtin/packages/daos/package.py
+++ b/var/spack/repos/builtin/packages/daos/package.py
@@ -33,6 +33,7 @@ class Daos(SConsPackage):
depends_on("boost", type="build")
depends_on("cmocka", type="build")
depends_on("go", type="build")
+ depends_on("pkgconfig", type="build")
depends_on("hwloc")
depends_on("isa-l@2.30.0:")
depends_on("isa-l-crypto@2.23.0:")
diff --git a/var/spack/repos/builtin/packages/darshan-runtime/package.py b/var/spack/repos/builtin/packages/darshan-runtime/package.py
index 08267d42dbb..81a4a2cd3b5 100644
--- a/var/spack/repos/builtin/packages/darshan-runtime/package.py
+++ b/var/spack/repos/builtin/packages/darshan-runtime/package.py
@@ -156,7 +156,7 @@ def configure_args(self):
return extra_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.variants["log_path"].value == "none":
# set a default path for log file that can be overrode by user
darshan_log_dir = os.environ["HOME"]
diff --git a/var/spack/repos/builtin/packages/dataspaces/package.py b/var/spack/repos/builtin/packages/dataspaces/package.py
index 588f927531b..852881b96de 100644
--- a/var/spack/repos/builtin/packages/dataspaces/package.py
+++ b/var/spack/repos/builtin/packages/dataspaces/package.py
@@ -34,6 +34,8 @@ class Dataspaces(AutotoolsPackage):
variant("ptag", default="250", description="Cray UGNI protection tag", values=is_string)
variant("mpi", default=True, description="Use MPI for collective communication")
+ depends_on("c", type="build")
+
depends_on("m4", type="build")
depends_on("automake", type="build")
depends_on("autoconf", type="build")
@@ -44,7 +46,7 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+mpi"):
env.set("CC", self.spec["mpi"].mpicc)
env.set("FC", self.spec["mpi"].mpifc)
diff --git a/var/spack/repos/builtin/packages/dbcsr/package.py b/var/spack/repos/builtin/packages/dbcsr/package.py
index 8983892dd1a..bd4748d95f2 100644
--- a/var/spack/repos/builtin/packages/dbcsr/package.py
+++ b/var/spack/repos/builtin/packages/dbcsr/package.py
@@ -31,6 +31,8 @@ class Dbcsr(CMakePackage, CudaPackage, ROCmPackage):
version("2.1.0", sha256="9e58fd998f224632f356e479d18b5032570d00d87b86736b6a6ac2d03f8d4b3c")
version("2.0.1", sha256="61d5531b661e1dab043353a1d67939ddcde3893d3dc7b0ab3d05074d448b485c")
+ variant("tests", default=False, description="Build DBCSR unit tests")
+ variant("tests", default=True, description="Build DBCSR unit tests", when="@2.1:2.2")
variant("mpi", default=True, description="Compile with MPI")
variant("openmp", default=False, description="Build with OpenMP support")
variant("shared", default=True, description="Build shared library")
@@ -162,12 +164,9 @@ def cmake_args(self):
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
self.define_from_variant("WITH_EXAMPLES", "examples"),
self.define_from_variant("WITH_G2G", "g2g"),
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- # Switch necessary as a result of a bug.
- if spec.satisfies("@2.1:2.2"):
- args += ["-DBUILD_TESTING=ON"]
-
if self.spec.satisfies("+cuda"):
cuda_arch = self.spec.variants["cuda_arch"].value[0]
diff --git a/var/spack/repos/builtin/packages/dbus/package.py b/var/spack/repos/builtin/packages/dbus/package.py
index 186f0b8ca83..bff2aef5cc1 100644
--- a/var/spack/repos/builtin/packages/dbus/package.py
+++ b/var/spack/repos/builtin/packages/dbus/package.py
@@ -30,6 +30,7 @@ class Dbus(AutotoolsPackage, MesonPackage):
)
# Note: odd minor versions are unstable, keep last stable version preferred
+ version("1.16.2", sha256="0ba2a1a4b16afe7bceb2c07e9ce99a8c2c3508e5dec290dbb643384bd6beb7e2")
version("1.16.0", sha256="9f8ca5eb51cbe09951aec8624b86c292990ae2428b41b856e2bed17ec65c8849")
version("1.15.12", sha256="0589c9c707dd593e31f0709caefa5828e69c668c887a7c0d2e5ba445a86bae4d")
version("1.15.10", sha256="f700f2f1d0473f11e52f3f3e179f577f31b85419f9ae1972af8c3db0bcfde178")
diff --git a/var/spack/repos/builtin/packages/dbxtool/package.py b/var/spack/repos/builtin/packages/dbxtool/package.py
index d9047005135..226b30a8dac 100644
--- a/var/spack/repos/builtin/packages/dbxtool/package.py
+++ b/var/spack/repos/builtin/packages/dbxtool/package.py
@@ -21,7 +21,7 @@ class Dbxtool(MakefilePackage):
depends_on("efivar")
depends_on("popt")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["efivar"].prefix.include.efivar)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dd4hep/package.py b/var/spack/repos/builtin/packages/dd4hep/package.py
index c78156c89f8..51386e589e7 100644
--- a/var/spack/repos/builtin/packages/dd4hep/package.py
+++ b/var/spack/repos/builtin/packages/dd4hep/package.py
@@ -71,6 +71,7 @@ class Dd4hep(CMakePackage):
variant("utilityapps", default=True, description="Build UtilityApps subpackage.")
# variants for other build options
+ variant("doc", default=False, description="Build documentation")
variant("xercesc", default=False, description="Enable 'Detector Builders' based on XercesC")
variant("hepmc3", default=False, description="Enable build with hepmc3")
variant(
@@ -90,16 +91,30 @@ class Dd4hep(CMakePackage):
" some places in addtion to the debug build type",
)
+ _cxxstd_values = ("14", "17", "20")
+ variant(
+ "cxxstd",
+ default="20",
+ values=_cxxstd_values,
+ multi=False,
+ description="Use the specified C++ standard when building.",
+ )
+
depends_on("c", type="build")
depends_on("cxx", type="build")
depends_on("cmake @3.12:", type="build")
depends_on("cmake @3.14:", type="build", when="@1.26:")
+
+ for _std in _cxxstd_values:
+ for _pkg in ["boost", "root"]:
+ depends_on(f"{_pkg} cxxstd={_std}", when=f"cxxstd={_std}")
+
depends_on("boost @1.49:")
- depends_on("boost +iostreams", when="+ddg4")
depends_on("boost +system +filesystem", when="%gcc@:7")
depends_on("root @6.08: +gdml +math +python")
depends_on("root @6.12.2: +root7", when="@1.26:") # DDCoreGraphics needs ROOT::ROOTHistDraw
+
with when("+ddeve"):
depends_on("root @6.08: +geom +opengl +x")
depends_on("root @:6.27", when="@:1.23")
@@ -108,9 +123,14 @@ class Dd4hep(CMakePackage):
requires("^root +root7 +webgui", when="@1.24: ^root @6.27:")
depends_on("root @6.08: +gdml +geom +math +python +x +opengl", when="+utilityapps")
- extends("python")
+ with when("+ddg4"):
+ depends_on("boost +iostreams")
+ depends_on("geant4@10.2.2:")
+ for _std in _cxxstd_values:
+ depends_on(f"geant4 cxxstd={_std}", when=f"cxxstd={_std}")
+
+ depends_on("imagemagick", when="+doc")
depends_on("xerces-c", when="+xercesc")
- depends_on("geant4@10.2.2:", when="+ddg4")
depends_on("assimp@5.0.2:", when="+ddcad")
depends_on("hepmc3", when="+hepmc3")
depends_on("hepmc3@3.2.6:", when="+hepmc3-gz")
@@ -122,15 +142,21 @@ class Dd4hep(CMakePackage):
depends_on("lcio", when="+lcio")
depends_on("py-pytest", type=("build", "test"))
with when("+edm4hep"):
- depends_on("edm4hep")
+ # Packages with cxxstd: note they only support 17 and onward
+ for _std in ["17", "20"]:
+ for _pkg in ["edm4hep", "podio"]:
+ depends_on(f"{_pkg} cxxstd={_std}", when=f"cxxstd={_std}")
+
+ # Specific version requirements
depends_on("edm4hep@0.10.5:", when="@1.31:")
- depends_on("podio")
depends_on("podio@:0.16.03", when="@:1.23")
depends_on("podio@:0", when="@:1.29")
depends_on("podio@0.16:", when="@1.24:")
depends_on("podio@0.16.3:", when="@1.26:")
depends_on("podio@0.16.7:", when="@1.31:")
+ extends("python")
+
# See https://github.com/AIDASoft/DD4hep/pull/771 and https://github.com/AIDASoft/DD4hep/pull/876
conflicts(
"^cmake@3.16:3.17.2",
@@ -139,12 +165,6 @@ class Dd4hep(CMakePackage):
)
conflicts("~ddrec+dddetectors", msg="Need to enable +ddrec to build +dddetectors.")
- # Geant4 needs to be (at least) the same version as DD4hep, but we don't
- # have a very good handle on that at this stage, because we make that
- # dependent on roots cxxstd. However, cxxstd=11 will never work
- # See https://github.com/AIDASoft/DD4hep/pull/1191
- conflicts("^geant4 cxxstd=11", when="+ddg4")
-
# See https://github.com/AIDASoft/DD4hep/issues/1210
conflicts("^root@6.31.1:", when="@:1.27")
@@ -157,11 +177,8 @@ def libs(self):
def cmake_args(self):
spec = self.spec
- cxxstd = spec["root"].variants["cxxstd"].value
- # root can be built with cxxstd=11, but dd4hep requires 14
- if cxxstd == "11":
- cxxstd = "14"
args = [
+ self.define_from_variant("BUILD_DOCS", "doc"),
self.define_from_variant("DD4HEP_USE_EDM4HEP", "edm4hep"),
self.define_from_variant("DD4HEP_USE_XERCESC", "xercesc"),
self.define_from_variant("DD4HEP_USE_TBB", "tbb"),
@@ -170,6 +187,7 @@ def cmake_args(self):
self.define_from_variant("DD4HEP_USE_HEPMC3", "hepmc3"),
self.define_from_variant("DD4HEP_USE_GEANT4_UNITS", "geant4units"),
self.define_from_variant("DD4HEP_BUILD_DEBUG", "debug"),
+ self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"),
# DD4hep@1.26: with hepmc3@3.2.6: allows compressed hepmc3 files
self.define(
"DD4HEP_HEPMC3_COMPRESSION_SUPPORT", self.spec.satisfies("@1.26: ^hepmc3@3.2.6:")
@@ -178,7 +196,6 @@ def cmake_args(self):
# However, with spack it is preferrable to have a proper external
# dependency, so we disable it.
self.define("DD4HEP_LOAD_ASSIMP", False),
- self.define("CMAKE_CXX_STANDARD", cxxstd),
self.define("BUILD_TESTING", self.run_tests),
self.define("BOOST_ROOT", spec["boost"].prefix),
self.define("Boost_NO_BOOST_CMAKE", True),
@@ -199,7 +216,7 @@ def cmake_args(self):
args.append(self.define("DD4HEP_BUILD_PACKAGES", " ".join(enabled_packages)))
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# used p.ex. in ddsim to find DDDetectors dir
env.set("DD4hepINSTALL", self.prefix)
env.set("DD4HEP", self.prefix.examples)
diff --git a/var/spack/repos/builtin/packages/ddt/package.py b/var/spack/repos/builtin/packages/ddt/package.py
index b50215af135..3d39842bcc6 100644
--- a/var/spack/repos/builtin/packages/ddt/package.py
+++ b/var/spack/repos/builtin/packages/ddt/package.py
@@ -48,7 +48,7 @@ def url_for_version(self, version):
else:
return f"https://downloads.linaroforge.com/{version}/linaro-forge-{version}-linux-x86_64.tar"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(self.prefix, "bin"))
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py b/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
index c4cc40ec275..c418eb40c83 100644
--- a/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
+++ b/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
@@ -20,5 +20,5 @@ class DealiiParameterGui(CMakePackage):
depends_on("qt")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PARAMETER_GUI_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py
index b266a8578e7..f440c4db0cc 100644
--- a/var/spack/repos/builtin/packages/dealii/package.py
+++ b/var/spack/repos/builtin/packages/dealii/package.py
@@ -18,6 +18,8 @@ class Dealii(CMakePackage, CudaPackage):
maintainers("jppelteret", "luca-heltai")
+ tags = ["e4s"]
+
# Don't add RPATHs to this package for the full build DAG.
# only add for immediate deps.
transitive_rpaths = False
@@ -686,10 +688,10 @@ def cmake_args(self):
return options
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DEAL_II_DIR", self.prefix)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+cuda") and spec.satisfies("+mpi"):
env.set("CUDAHOSTCXX", spec["mpi"].mpicxx)
diff --git a/var/spack/repos/builtin/packages/deconseq-standalone/package.py b/var/spack/repos/builtin/packages/deconseq-standalone/package.py
index 5908dd7d41f..b616a8f6777 100644
--- a/var/spack/repos/builtin/packages/deconseq-standalone/package.py
+++ b/var/spack/repos/builtin/packages/deconseq-standalone/package.py
@@ -37,5 +37,5 @@ def install(self, spec, prefix):
chmod("+x", join_path(prefix.bin, "deconseq.pl"))
chmod("+x", join_path(prefix.bin, "splitFasta.pl"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PERL5LIB", self.prefix)
diff --git a/var/spack/repos/builtin/packages/delphes/package.py b/var/spack/repos/builtin/packages/delphes/package.py
index a6c53233d83..7cbfb52151f 100644
--- a/var/spack/repos/builtin/packages/delphes/package.py
+++ b/var/spack/repos/builtin/packages/delphes/package.py
@@ -56,7 +56,7 @@ def cmake_args(self):
args.append(f"-DCMAKE_CXX_STANDARD={self.spec['root'].variants['cxxstd'].value}")
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# make the cards distributed with delphes more easily accessible
env.set("DELPHES_DIR", self.prefix)
env.set("DELPHES", self.prefix)
diff --git a/var/spack/repos/builtin/packages/dhpmm-f/package.py b/var/spack/repos/builtin/packages/dhpmm-f/package.py
index 9213fbdc941..2b2a661bc6c 100644
--- a/var/spack/repos/builtin/packages/dhpmm-f/package.py
+++ b/var/spack/repos/builtin/packages/dhpmm-f/package.py
@@ -15,6 +15,9 @@ class DhpmmF(MakefilePackage):
version("alpha", sha256="35321ecbc749f2682775ffcd27833afc8c8eb4fa7753ce769727c9d1fe097848")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("blas", type="link")
depends_on("lapack", type="link")
diff --git a/var/spack/repos/builtin/packages/dialign-tx/package.py b/var/spack/repos/builtin/packages/dialign-tx/package.py
index cf677d871ca..36114015d07 100644
--- a/var/spack/repos/builtin/packages/dialign-tx/package.py
+++ b/var/spack/repos/builtin/packages/dialign-tx/package.py
@@ -18,6 +18,8 @@ class DialignTx(MakefilePackage):
build_directory = "source"
+ depends_on("c", type="build")
+
conflicts("%gcc@6:")
def edit(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dialign/package.py b/var/spack/repos/builtin/packages/dialign/package.py
index 3a2fb077355..477a58d03f1 100644
--- a/var/spack/repos/builtin/packages/dialign/package.py
+++ b/var/spack/repos/builtin/packages/dialign/package.py
@@ -27,5 +27,5 @@ def install(self, spec, prefix):
mkdirp(prefix.share)
install_tree("dialign2_dir", prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DIALIGN2_DIR", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/dicom3tools/package.py b/var/spack/repos/builtin/packages/dicom3tools/package.py
index c305d1d894f..c6135690af5 100644
--- a/var/spack/repos/builtin/packages/dicom3tools/package.py
+++ b/var/spack/repos/builtin/packages/dicom3tools/package.py
@@ -26,6 +26,7 @@ class Dicom3tools(MakefilePackage):
description="default UID Root assignment",
)
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("bzip2", type="build")
diff --git a/var/spack/repos/builtin/packages/diffutils/package.py b/var/spack/repos/builtin/packages/diffutils/package.py
index e258cae6ee2..efaca998923 100644
--- a/var/spack/repos/builtin/packages/diffutils/package.py
+++ b/var/spack/repos/builtin/packages/diffutils/package.py
@@ -41,7 +41,7 @@ class Diffutils(AutotoolsPackage, GNUMirrorPackage):
depends_on("iconv")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%fj"):
env.append_flags("CFLAGS", "-Qunused-arguments")
diff --git a/var/spack/repos/builtin/packages/dihydrogen/package.py b/var/spack/repos/builtin/packages/dihydrogen/package.py
index 251b2b33adc..2e5f4b0a936 100644
--- a/var/spack/repos/builtin/packages/dihydrogen/package.py
+++ b/var/spack/repos/builtin/packages/dihydrogen/package.py
@@ -125,6 +125,7 @@ class Dihydrogen(CachedCMakePackage, CudaPackage, ROCmPackage):
)
# Dependencies
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("catch2@3.0.1:", type=("build", "test"), when="+developer")
@@ -347,7 +348,7 @@ def initconfig_package_entries(self):
entries.extend(get_blas_entries(spec))
return entries
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+openmp %apple-clang"):
env.append_flags("CPPFLAGS", self.compiler.openmp_flag)
env.append_flags("CFLAGS", self.spec["llvm-openmp"].headers.include_flags)
diff --git a/var/spack/repos/builtin/packages/dire/package.py b/var/spack/repos/builtin/packages/dire/package.py
index fbc20f7ea56..1e154b966cf 100644
--- a/var/spack/repos/builtin/packages/dire/package.py
+++ b/var/spack/repos/builtin/packages/dire/package.py
@@ -21,6 +21,7 @@ class Dire(Package):
version("2.004", sha256="8cc1213b58fec744fdaa50834560a14b141de99efb2c3e3d3d47f3d6d84b179f")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("zlib-api")
diff --git a/var/spack/repos/builtin/packages/dislin/package.py b/var/spack/repos/builtin/packages/dislin/package.py
index 89765aa7d25..a8b964d6655 100644
--- a/var/spack/repos/builtin/packages/dislin/package.py
+++ b/var/spack/repos/builtin/packages/dislin/package.py
@@ -36,17 +36,19 @@ def libs(self):
return find_libraries(libraries, root=self.prefix, shared=True, recursive=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DISLIN", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DISLIN", self.prefix)
env.prepend_path("PATH", self.prefix)
env.prepend_path("LD_LIBRARY_PATH", self.prefix)
env.prepend_path("LD_LIBRARY_PATH", self.spec["motif"].prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.spec["mesa"].prefix.lib)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/distcc/package.py b/var/spack/repos/builtin/packages/distcc/package.py
index 51b029cf4a4..9d937130b7c 100644
--- a/var/spack/repos/builtin/packages/distcc/package.py
+++ b/var/spack/repos/builtin/packages/distcc/package.py
@@ -27,5 +27,5 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
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 e68bef59f41..189abac91a5 100644
--- a/var/spack/repos/builtin/packages/dla-future-fortran/package.py
+++ b/var/spack/repos/builtin/packages/dla-future-fortran/package.py
@@ -20,17 +20,18 @@ class DlaFutureFortran(CMakePackage):
license("BSD-3-Clause")
version("main", branch="main")
+ version("0.4.0", sha256="1c42ed1a12b472ee02702c507a0a4fc94d2090701726ebc782b1b5e8278c8c5b")
version("0.3.0", sha256="404ce0d2d3df9317764450158901fd6cb2198b37f5687e9616519100ad6e9ece")
version("0.2.0", sha256="7fd3e1779c111b35f0d2701a024398b4f6e8dea4af523b6c8617d28c0b7ae61a")
version("0.1.0", sha256="9fd8a105cbb2f3e1daf8a49910f98fce68ca0b954773dba98a91464cf2e7c1da")
- variant("shared", default=True, description="Build shared libraries.")
- variant("test", default=False, description="Build tests.")
-
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.")
+
generator("ninja")
depends_on("cmake@3.22:", type="build")
depends_on("pkgconfig", type="build")
@@ -38,6 +39,7 @@ class DlaFutureFortran(CMakePackage):
depends_on("dla-future@0.4.1:0.5 +scalapack", when="@0.1.0")
depends_on("dla-future@0.6.0: +scalapack", when="@0.2.0:")
depends_on("dla-future@0.7.3: +scalapack", when="@0.3:")
+ depends_on("dla-future@0.9: +scalapack", when="@0.4:")
depends_on("dla-future +shared", when="+shared")
depends_on("mpi", when="+test")
diff --git a/var/spack/repos/builtin/packages/dla-future/package.py b/var/spack/repos/builtin/packages/dla-future/package.py
index 0d41c594362..a1894dee0a5 100644
--- a/var/spack/repos/builtin/packages/dla-future/package.py
+++ b/var/spack/repos/builtin/packages/dla-future/package.py
@@ -15,6 +15,7 @@ class DlaFuture(CMakePackage, CudaPackage, ROCmPackage):
license("BSD-3-Clause")
+ version("0.9.0", sha256="0297afb46285745413fd4536d8d7fe123e3045d4899cc91eed501bcd4b588ea6")
version("0.8.0", sha256="4c30c33ee22417514d839a75d99ae4c24860078fb595ee24ce4ebf45fbce5e69")
version("0.7.3", sha256="8c829b72f4ea9c924abdb6fe2ac7489304be4056ab76b8eba226c33ce7b7dc0e")
version(
diff --git a/var/spack/repos/builtin/packages/dmd/package.py b/var/spack/repos/builtin/packages/dmd/package.py
index 0702c760545..2aa1667b141 100644
--- a/var/spack/repos/builtin/packages/dmd/package.py
+++ b/var/spack/repos/builtin/packages/dmd/package.py
@@ -44,7 +44,7 @@ class Dmd(MakefilePackage):
placement="tools",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.linux.bin64)
env.prepend_path("LIBRARY_PATH", self.prefix.linux.lib64)
env.prepend_path("LD_LIBRARY_PATH", self.prefix.linux.lib64)
diff --git a/var/spack/repos/builtin/packages/docbook-xml/package.py b/var/spack/repos/builtin/packages/docbook-xml/package.py
index 8a66805e3f9..7b7025c414e 100644
--- a/var/spack/repos/builtin/packages/docbook-xml/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xml/package.py
@@ -379,10 +379,12 @@ def config_docbook(self):
catalog,
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
catalog = self.catalog
env.prepend_path("XML_CATALOG_FILES", catalog, separator=" ")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
catalog = self.catalog
env.prepend_path("XML_CATALOG_FILES", catalog, separator=" ")
diff --git a/var/spack/repos/builtin/packages/docbook-xsl/package.py b/var/spack/repos/builtin/packages/docbook-xsl/package.py
index 152145c8a4d..dd68dae5a07 100644
--- a/var/spack/repos/builtin/packages/docbook-xsl/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xsl/package.py
@@ -67,10 +67,12 @@ def config_docbook(self):
catalog,
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
catalog = self.catalog
env.prepend_path("XML_CATALOG_FILES", catalog, separator=" ")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
catalog = self.catalog
env.prepend_path("XML_CATALOG_FILES", catalog, separator=" ")
diff --git a/var/spack/repos/builtin/packages/dock/package.py b/var/spack/repos/builtin/packages/dock/package.py
index b41054c0110..302784b0dd3 100644
--- a/var/spack/repos/builtin/packages/dock/package.py
+++ b/var/spack/repos/builtin/packages/dock/package.py
@@ -27,7 +27,7 @@ class Dock(Package):
depends_on("flex", type="build")
depends_on("mpi", when="+mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+mpi"):
env.set("MPICH_HOME", self.spec["mpi"].prefix)
diff --git a/var/spack/repos/builtin/packages/dorado/package.py b/var/spack/repos/builtin/packages/dorado/package.py
index 0ed5e4dfd78..c84978660b9 100644
--- a/var/spack/repos/builtin/packages/dorado/package.py
+++ b/var/spack/repos/builtin/packages/dorado/package.py
@@ -38,7 +38,7 @@ class Dorado(CMakePackage, CudaPackage):
patch("cmake-htslib.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["libdeflate"].prefix.lib64)
env.prepend_path("LIBRARY_PATH", self.spec["libdeflate"].prefix.lib64)
diff --git a/var/spack/repos/builtin/packages/dosfstools/package.py b/var/spack/repos/builtin/packages/dosfstools/package.py
index 1d3199abb6c..c77ec38e7ad 100644
--- a/var/spack/repos/builtin/packages/dosfstools/package.py
+++ b/var/spack/repos/builtin/packages/dosfstools/package.py
@@ -30,5 +30,5 @@ class Dosfstools(AutotoolsPackage):
def autoreconf(self, spec, prefix):
Executable("./autogen.sh")()
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/dotnet-core-sdk/package.py b/var/spack/repos/builtin/packages/dotnet-core-sdk/package.py
index deb974b5428..cadd2e9c38f 100644
--- a/var/spack/repos/builtin/packages/dotnet-core-sdk/package.py
+++ b/var/spack/repos/builtin/packages/dotnet-core-sdk/package.py
@@ -85,7 +85,7 @@ class DotnetCoreSdk(Package):
variant("telemetry", default=False, description="allow collection of telemetry data")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("~telemetry"):
env.set("DOTNET_CLI_TELEMETRY_OPTOUT", "1")
diff --git a/var/spack/repos/builtin/packages/dpdk/package.py b/var/spack/repos/builtin/packages/dpdk/package.py
index 47c8165010d..f99cfc1098b 100644
--- a/var/spack/repos/builtin/packages/dpdk/package.py
+++ b/var/spack/repos/builtin/packages/dpdk/package.py
@@ -49,7 +49,7 @@ class Dpdk(MakefilePackage, MesonPackage):
class MesonBuilder(MesonBuilder):
def meson_args(self):
- return ["--warnlevel=3"]
+ return ["--warnlevel=2"]
class MakefileBuilder(MakefileBuilder):
diff --git a/var/spack/repos/builtin/packages/draco/package.py b/var/spack/repos/builtin/packages/draco/package.py
index 6304b5bfd48..c550228e833 100644
--- a/var/spack/repos/builtin/packages/draco/package.py
+++ b/var/spack/repos/builtin/packages/draco/package.py
@@ -5,7 +5,7 @@
from spack.package import *
-class Draco(CMakePackage):
+class Draco(CMakePackage, CudaPackage, ROCmPackage):
"""Draco is an object-oriented component library geared towards numerically
intensive, radiation (particle) transport applications built for parallel
computing hardware. It consists of semi-independent packages and a robust
@@ -19,6 +19,7 @@ class Draco(CMakePackage):
license("BSD-3-Clause-Open-MPI")
version("develop", branch="develop")
+ version("7.20.0", sha256="5b695f686c914dfac7cc144ffba37f24b1fb1e53058fbcb6df0ea94fe9971ea6")
version("7.19.0", sha256="04b33cfea244052efcdd40d2b9dd79348749d34647aaf4dfcb15cdfdbe989783")
version("7.18.0", sha256="b210e202a06ffdaf149193b5cba164411fd508e20e573e1dfc46d1f56e3fffaa")
version("7.14.1", sha256="b05c75f1b8ea1d4fac4900d897fb1c948b470826b174ed8b97b32c6da9f030bf")
@@ -44,6 +45,12 @@ class Draco(CMakePackage):
version("6.20.1", sha256="b1c51000c9557e0818014713fce70d681869c50ed9c4548dcfb2e9219c354ebe")
version("6.20.0", sha256="a6e3142c1c90b09c4ff8057bfee974369b815122b01d1f7b57888dcb9b1128f6")
+ variant(
+ "build_type",
+ default="Release",
+ description="CMake build type",
+ values=("Debug", "Release", "RelWithDebInfo", "MinSizeRel"),
+ )
variant("caliper", default=False, description="Enable caliper timers support")
variant("cuda", default=False, description="Enable Cuda/GPU support")
variant("eospac", default=True, description="Enable EOSPAC support")
@@ -54,6 +61,9 @@ class Draco(CMakePackage):
variant("pythontools", default=False, description="Enable support for extra python tools")
variant("qt", default=False, description="Enable Qt support")
variant("superlu-dist", default=True, description="Enable SuperLU-DIST support")
+ variant(
+ "openmp", default=True, when="@7.16.0:", description="Enable OpenMP support if available"
+ )
depends_on("cmake@3.9:", when="@:6", type="build")
depends_on("cmake@3.11:", when="@7.0.0:7.1", type="build")
@@ -71,7 +81,6 @@ class Draco(CMakePackage):
# Optional dependencies
depends_on("caliper", when="+caliper")
- depends_on("cuda@11.0:", when="+cuda")
depends_on("eospac@6.3:", when="+eospac")
depends_on("lapack", when="+lapack")
depends_on("libquo@1.3.1:", when="@7.4.0:+libquo")
@@ -82,7 +91,13 @@ class Draco(CMakePackage):
depends_on("superlu-dist@:5", when="@:7.6+superlu-dist")
depends_on("py-matplotlib", when="+pythontools", type=("run"))
+ # Hardware-specific variants
+ depends_on("cuda@11.0:", when="+cuda")
+
conflicts("+cuda", when="@:7.6")
+ # HIP support existed pre-7.18, but was not exposed via Spack recipe:
+ conflicts("+rocm", when="@:7.18.0")
+ conflicts("+cuda", when="+rocm", msg="+cuda and +rocm cannot both be set")
conflicts("+caliper", when="@:7.7")
with when("@7.19.0:"):
conflicts("gcc@:9.0")
@@ -103,23 +118,41 @@ def url_for_version(self, version):
return url.format(version.underscored)
def cmake_args(self):
+ spec = self.spec
options = []
options.extend(
[
"-Wno-dev",
self.define("BUILD_TESTING", self.run_tests),
- "-DUSE_CUDA={0}".format("ON" if "+cuda" in self.spec else "OFF"),
"-DUSE_QT={0}".format("ON" if "+qt" in self.spec else "OFF"),
]
)
- if self.spec.satisfies("+fast_fma"):
+ # OpenMP toggle exposed via CMake for 7.16+
+ if spec.satisfies("@7.16.0:"):
+ options.extend(["-DUSE_OPENMP={0}".format("ON" if "+openmp" in self.spec else "OFF")])
+ # "rocm" variant introduced at 7.18
+ if spec.satisfies("@7.18.0:"):
+ options.extend(
+ ["-DUSE_GPU={0}".format("ON" if ("+cuda" in spec) or ("+rocm" in spec) else "OFF")]
+ )
+ elif spec.satisfies("@7.15.0:7.17.99"):
+ options.extend(["-DUSE_GPU={0}".format("ON" if "+cuda" in spec else "OFF")])
+ else:
+ options.extend(["-DUSE_CUDA={0}".format("ON" if "+cuda" in spec else "OFF")])
+
+ # FMA option
+ if "+fast_fma" in self.spec:
options.extend(
[
"-DDRACO_ROUNDOFF_MODE={0}".format(
- "FAST" if "build_type=Release" in self.spec else "ACCURATE"
+ "FAST" if "build_type=Release" in spec else "ACCURATE"
)
]
)
+ # OneAPI-specific logic
+ if spec.satisfies("%oneapi"):
+ # Known issues with oneapi+IPO for packages that depend on draco.
+ options.extend(["-DUSE_IPO=OFF"])
return options
def check(self):
diff --git a/var/spack/repos/builtin/packages/dray/package.py b/var/spack/repos/builtin/packages/dray/package.py
index 706afd9163c..e15eb805df4 100644
--- a/var/spack/repos/builtin/packages/dray/package.py
+++ b/var/spack/repos/builtin/packages/dray/package.py
@@ -65,6 +65,7 @@ class Dray(Package, CudaPackage):
# set to false for systems that implicitly link mpi
variant("blt_find_mpi", default=True, description="Use BLT CMake Find MPI logic")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
@@ -109,7 +110,7 @@ class Dray(Package, CudaPackage):
depends_on("mfem~shared", when="~shared")
depends_on("gmake", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CTEST_OUTPUT_ON_FAILURE", "1")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dtf/package.py b/var/spack/repos/builtin/packages/dtf/package.py
index 0f7e18090e1..a4ac0861bdd 100644
--- a/var/spack/repos/builtin/packages/dtf/package.py
+++ b/var/spack/repos/builtin/packages/dtf/package.py
@@ -36,7 +36,7 @@ class Dtf(AutotoolsPackage):
configure_directory = "pnetcdf"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
dtf_srcdir = join_path(self.stage.source_path, "libdtf")
env.append_path("LD_LIBRARY_PATH", self.prefix.lib)
env.append_path("LD_LIBRARY_PATH", dtf_srcdir)
diff --git a/var/spack/repos/builtin/packages/duckdb/package.py b/var/spack/repos/builtin/packages/duckdb/package.py
index 9e86bf8f5f3..a96bbd8ad4e 100644
--- a/var/spack/repos/builtin/packages/duckdb/package.py
+++ b/var/spack/repos/builtin/packages/duckdb/package.py
@@ -104,7 +104,7 @@ class Duckdb(MakefilePackage):
def duckdb_extension_prefix(self):
return self.prefix.lib.duckdb
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
cmake_args = [] # Future use
if self.spec.satisfies("+ninjabuild"):
env.set("GEN", "ninja")
diff --git a/var/spack/repos/builtin/packages/e2fsprogs/package.py b/var/spack/repos/builtin/packages/e2fsprogs/package.py
index 81f7152d62a..db3c926bff0 100644
--- a/var/spack/repos/builtin/packages/e2fsprogs/package.py
+++ b/var/spack/repos/builtin/packages/e2fsprogs/package.py
@@ -45,7 +45,7 @@ class E2fsprogs(AutotoolsPackage):
when="@:1.47.0 +fuse2fs",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/e3sm-scorpio/package.py b/var/spack/repos/builtin/packages/e3sm-scorpio/package.py
index 58e3deec336..ca1d7bd6b9f 100644
--- a/var/spack/repos/builtin/packages/e3sm-scorpio/package.py
+++ b/var/spack/repos/builtin/packages/e3sm-scorpio/package.py
@@ -50,7 +50,7 @@ def cmake_args(self):
return opts
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("NetCDF_C_PATH", self.spec["netcdf-c"].prefix)
env.set("NetCDF_Fortran_PATH", self.spec["netcdf-fortran"].prefix)
if self.spec.satisfies("+mpi"):
diff --git a/var/spack/repos/builtin/packages/easi/package.py b/var/spack/repos/builtin/packages/easi/package.py
index 993f5ba5bbc..a52f8e4a356 100644
--- a/var/spack/repos/builtin/packages/easi/package.py
+++ b/var/spack/repos/builtin/packages/easi/package.py
@@ -29,6 +29,7 @@ class Easi(CMakePackage):
version("1.1.2", tag="v1.1.2", commit="4c87ef3b3dca9415d116ef102cb8de750ef7e1a0")
depends_on("cxx", type="build") # generated
+ depends_on("c", type="build", when="@1.5.0: jit=lua")
depends_on("fortran", type="build") # generated
variant("python", default=True, description="Install python bindings")
@@ -84,7 +85,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+python"):
full_path = os.path.join(python_platlib, "easilib/cmake/easi/python_wrapper")
env.prepend_path("PYTHONPATH", full_path)
diff --git a/var/spack/repos/builtin/packages/eccodes/package.py b/var/spack/repos/builtin/packages/eccodes/package.py
index b29e5599a2b..dd883952c44 100644
--- a/var/spack/repos/builtin/packages/eccodes/package.py
+++ b/var/spack/repos/builtin/packages/eccodes/package.py
@@ -305,11 +305,6 @@ def libs(self):
msg.format("shared" if shared else "static", self.spec.name, self.spec.prefix)
)
- @run_before("cmake")
- def check_fortran(self):
- if "+fortran" in self.spec and self.compiler.fc is None:
- raise InstallError("Fortran interface requires a Fortran compiler!")
-
def cmake_args(self):
jp2k = self.spec.variants["jp2k"].value
diff --git a/var/spack/repos/builtin/packages/ecflow/package.py b/var/spack/repos/builtin/packages/ecflow/package.py
index 16bafe32dbf..0f47ce073d7 100644
--- a/var/spack/repos/builtin/packages/ecflow/package.py
+++ b/var/spack/repos/builtin/packages/ecflow/package.py
@@ -87,7 +87,7 @@ def patch(self):
)
@when("+ssl ^openssl~shared")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LIBS", self.spec["zlib"].libs.search_flags)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/eckit/package.py b/var/spack/repos/builtin/packages/eckit/package.py
index fa1e27f91b8..3e60b63dda5 100644
--- a/var/spack/repos/builtin/packages/eckit/package.py
+++ b/var/spack/repos/builtin/packages/eckit/package.py
@@ -183,7 +183,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Bug fix for macOS - cmake's find_package doesn't add "libtinfo.dylib" to the
# ncurses libraries, but the ncurses pkgconfig explicitly sets it. We need to
# add the correct spec['ncurses'].libs.ld_flags to LDFLAGS to compile eckit
diff --git a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
index bc41b77ce41..bde93777222 100644
--- a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
+++ b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
@@ -28,6 +28,8 @@ class EclipseGcjParser(Package):
expand=False,
)
+ depends_on("c", type="build")
+
@property
def gcj(self):
"""Obtain Executable for the gcj included with this GCC,
diff --git a/var/spack/repos/builtin/packages/edm4hep/package.py b/var/spack/repos/builtin/packages/edm4hep/package.py
index f8ccf7a4580..a672b1d760b 100644
--- a/var/spack/repos/builtin/packages/edm4hep/package.py
+++ b/var/spack/repos/builtin/packages/edm4hep/package.py
@@ -93,6 +93,14 @@ class Edm4hep(CMakePackage):
conflicts("%clang@:16", when="@0.99.1:", msg="Incomplete consteval support in clang")
+ # Fix missing nljson import
+ # NOTE that downstream packages (dd4hep) may fail for 0.99 and before
+ patch(
+ "https://patch-diff.githubusercontent.com/raw/key4hep/EDM4hep/pull/379.patch?full_index=1",
+ when="@0.99.1",
+ sha256="c4be2f27c7bda4d033f92fee14e48ddf59fbe606d208e8288d9bdb3dec5ad5c2",
+ )
+
def cmake_args(self):
args = [
self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"),
@@ -101,7 +109,7 @@ def cmake_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["edm4hep"].libs.directories[0])
if self.spec.satisfies("@:0.10.5"):
env.prepend_path("PYTHONPATH", self.prefix.python)
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index f4e0dc00773..e2e7d6923d8 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -80,7 +80,7 @@ class Eigen(CMakePackage, ROCmPackage):
# TODO: latex and doxygen needed to produce docs with make doc
# TODO: Other dependencies might be needed to test this package
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.prefix.include.eigen3)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/eigenexa/package.py b/var/spack/repos/builtin/packages/eigenexa/package.py
index f716c4c97e0..5a0aa4d06b8 100644
--- a/var/spack/repos/builtin/packages/eigenexa/package.py
+++ b/var/spack/repos/builtin/packages/eigenexa/package.py
@@ -44,7 +44,7 @@ def url_for_version(self, version):
version, "tar.gz" if version >= Version("2.7") else ".tgz"
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("FC", self.spec["mpi"].mpifc, force=True)
env.set("F77", self.spec["mpi"].mpif77, force=True)
env.set("CC", self.spec["mpi"].mpicc, force=True)
diff --git a/var/spack/repos/builtin/packages/elmerfem/package.py b/var/spack/repos/builtin/packages/elmerfem/package.py
index 2577c028410..d09a018031a 100644
--- a/var/spack/repos/builtin/packages/elmerfem/package.py
+++ b/var/spack/repos/builtin/packages/elmerfem/package.py
@@ -128,7 +128,7 @@ def patch(self):
string=True,
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ELMER_HOME", self.prefix)
env.set("ELMER_Fortran_COMPILER", self.compiler.fc)
if self.spec.satisfies("+gui"):
diff --git a/var/spack/repos/builtin/packages/emacs/package.py b/var/spack/repos/builtin/packages/emacs/package.py
index 5f7d4130e80..49c92f12609 100644
--- a/var/spack/repos/builtin/packages/emacs/package.py
+++ b/var/spack/repos/builtin/packages/emacs/package.py
@@ -126,7 +126,7 @@ def configure_args(self):
return args
@when("platform=darwin")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("^ncurses+termlib"):
env.append_flags("LDFLAGS", "-ltinfo")
diff --git a/var/spack/repos/builtin/packages/embree/package.py b/var/spack/repos/builtin/packages/embree/package.py
index 6224ede5faf..9fea72890e1 100644
--- a/var/spack/repos/builtin/packages/embree/package.py
+++ b/var/spack/repos/builtin/packages/embree/package.py
@@ -14,6 +14,7 @@ class Embree(CMakePackage):
license("Apache-2.0", checked_by="wdconinc")
+ version("4.4.0", sha256="acb517b0ea0f4b442235d5331b69f96192c28da6aca5d5dde0cbe40799638d5c")
version("4.3.3", sha256="8a3bc3c3e21aa209d9861a28f8ba93b2f82ed0dc93341dddac09f1f03c36ef2d")
version("4.3.2", sha256="dc7bb6bac095b2e7bc64321435acd07c6137d6d60e4b79ec07bb0b215ddf81cb")
version("4.3.1", sha256="824edcbb7a8cd393c5bdb7a16738487b21ecc4e1d004ac9f761e934f97bb02a4")
diff --git a/var/spack/repos/builtin/packages/enzyme/package.py b/var/spack/repos/builtin/packages/enzyme/package.py
index 1497da1a884..36a30fa33ce 100644
--- a/var/spack/repos/builtin/packages/enzyme/package.py
+++ b/var/spack/repos/builtin/packages/enzyme/package.py
@@ -61,7 +61,9 @@ def libs(self):
return find_libraries(libs, root=self.prefix, recursive=True)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Get the LLVMEnzyme and ClangEnzyme lib paths
llvm, clang = self.libs
diff --git a/var/spack/repos/builtin/packages/epics-base/package.py b/var/spack/repos/builtin/packages/epics-base/package.py
index 9e4f335d767..90b0d0c7b53 100644
--- a/var/spack/repos/builtin/packages/epics-base/package.py
+++ b/var/spack/repos/builtin/packages/epics-base/package.py
@@ -38,15 +38,17 @@ def get_epics_host_arch(self):
perl = which("perl", required=True)
return perl("%s/perl/EpicsHostArch.pl" % self.prefix.lib, output=str, error=str).strip()
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("EPICS_BASE", self.prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
epics_host_arch = self.get_epics_host_arch()
env.set("EPICS_HOST_ARCH", epics_host_arch)
env.set("EPICS_BASE", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
epics_host_arch = self.get_epics_host_arch()
env.set("EPICS_HOST_ARCH", epics_host_arch)
env.set("EPICS_BASE", self.prefix)
diff --git a/var/spack/repos/builtin/packages/epics-ca-gateway/package.py b/var/spack/repos/builtin/packages/epics-ca-gateway/package.py
index a79ea8a1877..90bd41f276b 100644
--- a/var/spack/repos/builtin/packages/epics-ca-gateway/package.py
+++ b/var/spack/repos/builtin/packages/epics-ca-gateway/package.py
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import os
+
from spack.package import *
@@ -34,5 +36,5 @@ def edit(self, spec, prefix):
release_file.write("EPICS_BASE = " + env["EPICS_BASE"] + "\n")
release_file.write("PCAS = " + spec["epics-pcas"].prefix)
- def setup_run_environment(self, envmod):
- envmod.prepend_path("PATH", join_path(self.prefix.bin, env["EPICS_HOST_ARCH"]))
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
+ env.prepend_path("PATH", join_path(self.prefix.bin, os.environ["EPICS_HOST_ARCH"]))
diff --git a/var/spack/repos/builtin/packages/epics-pcas/package.py b/var/spack/repos/builtin/packages/epics-pcas/package.py
index cb22d6256a1..fb32a8d0a65 100644
--- a/var/spack/repos/builtin/packages/epics-pcas/package.py
+++ b/var/spack/repos/builtin/packages/epics-pcas/package.py
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import os
+
from spack.package import *
@@ -30,5 +32,5 @@ def edit(self, spec, prefix):
with open("configure/RELEASE.local", "w") as release_file:
release_file.write("EPICS_BASE = " + env["EPICS_BASE"] + "\n")
- def setup_run_environment(self, envmod):
- envmod.prepend_path("PATH", join_path(self.prefix.bin, env["EPICS_HOST_ARCH"]))
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
+ env.prepend_path("PATH", join_path(self.prefix.bin, os.environ["EPICS_HOST_ARCH"]))
diff --git a/var/spack/repos/builtin/packages/epics-snmp/package.py b/var/spack/repos/builtin/packages/epics-snmp/package.py
index bdb9728beef..4b8605ac71c 100644
--- a/var/spack/repos/builtin/packages/epics-snmp/package.py
+++ b/var/spack/repos/builtin/packages/epics-snmp/package.py
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import os
+
from spack.package import *
@@ -32,5 +34,5 @@ def edit(self, spec, prefix):
makefile = FileFilter("snmpApp/src/Makefile")
makefile.filter("USR_CPPFLAGS", "USR_CPPFLAGS += `net-snmp-config --cflags`\nUSR_CPPFLAGS")
- def setup_run_environment(self, envmod):
- envmod.prepend_path("PATH", join_path(self.prefix.bin, env["EPICS_HOST_ARCH"]))
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
+ env.prepend_path("PATH", join_path(self.prefix.bin, os.environ["EPICS_HOST_ARCH"]))
diff --git a/var/spack/repos/builtin/packages/eq-r/package.py b/var/spack/repos/builtin/packages/eq-r/package.py
index 38ff94cd4de..da242c8f5f1 100644
--- a/var/spack/repos/builtin/packages/eq-r/package.py
+++ b/var/spack/repos/builtin/packages/eq-r/package.py
@@ -36,7 +36,7 @@ class EqR(AutotoolsPackage):
configure_directory = "src"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("CC", spec["mpi"].mpicc)
env.set("CXX", spec["mpi"].mpicxx)
diff --git a/var/spack/repos/builtin/packages/esmf/darwin_dylib_install_name.patch b/var/spack/repos/builtin/packages/esmf/darwin_dylib_install_name.patch
deleted file mode 100644
index 0f363b378c2..00000000000
--- a/var/spack/repos/builtin/packages/esmf/darwin_dylib_install_name.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/build/common.mk 2017-11-25 17:16:31.000000000 +1100
-+++ b/build/common.mk 2017-11-25 17:26:20.000000000 +1100
-@@ -3415,11 +3415,11 @@
- mkdir tmp_$$NEXTLIB ;\
- cd tmp_$$NEXTLIB ;\
- $(ESMF_AREXTRACT) ../$$NEXTLIB.a ;\
-- echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
-- $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
-+ echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -Wl,-install_name -Wl,@rpath/$$NEXTLIB.$(ESMF_SL_SUFFIX) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
-+ $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -Wl,-install_name -Wl,@rpath/$$NEXTLIB.$(ESMF_SL_SUFFIX) -o $(ESMF_LDIR)/$$NEXTLIB.$(ESMF_SL_SUFFIX) *.o $(ESMF_SL_LIBLIBS) ;\
- echo Converting $$NEXTLIB.a to $$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) ;\
-- echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
-- $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
-+ echo $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -Wl,-install_name -Wl,@rpath/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
-+ $(ESMF_SL_LIBLINKER) $(ESMF_SL_LIBOPTS) -Wl,-install_name -Wl,@rpath/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) -o $(ESMF_LDIR)/$$NEXTLIB\_fullylinked.$(ESMF_SL_SUFFIX) *.o $(ESMF_CXXLINKOPTS) $(ESMF_CXXLINKPATHS) $(ESMF_CXXLINKRPATHS) $(ESMF_CXXLINKLIBS) ;\
- cd .. ;\
- $(ESMF_RM) -r tmp_$$NEXTLIB ;\
- fi ;\
diff --git a/var/spack/repos/builtin/packages/esmf/gcc.patch b/var/spack/repos/builtin/packages/esmf/gcc.patch
deleted file mode 100644
index 4b349b271f2..00000000000
--- a/var/spack/repos/builtin/packages/esmf/gcc.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-From 3706bf758012daebadef83d6575c477aeff9c89b Mon Sep 17 00:00:00 2001
-From: Walter Spector
-Date: Fri, 29 Apr 2016 12:57:16 -0700
-Subject: [PATCH] Fix a file open test in the Moab I/O code that gcc 6.1
- noticed.
-
----
- src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp b/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
-index 1c44057..89e5f23 100644
---- a/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
-+++ b/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
-@@ -105,7 +105,7 @@ void ReadABAQUS::reset()
- ReadABAQUS::~ReadABAQUS()
- {
- mdbImpl->release_interface(readMeshIface);
-- if (NULL != abFile)
-+ if (abFile.is_open())
- abFile.close();
- }
-
---
-2.7.4
-
diff --git a/var/spack/repos/builtin/packages/esmf/intel.patch b/var/spack/repos/builtin/packages/esmf/intel.patch
deleted file mode 100644
index ab955d8c52e..00000000000
--- a/var/spack/repos/builtin/packages/esmf/intel.patch
+++ /dev/null
@@ -1,17 +0,0 @@
---- old/build_config/Linux.intel.default/build_rules.mk 2019-06-27 15:55:30.857527494 -0400
-+++ new/build_config/Linux.intel.default/build_rules.mk 2019-06-27 15:56:13.007089627 -0400
-@@ -187,10 +187,10 @@
- ############################################################
- # OpenMP compiler and linker flags
- #
--ESMF_OPENMP_F90COMPILEOPTS += -openmp
--ESMF_OPENMP_CXXCOMPILEOPTS += -openmp
--ESMF_OPENMP_F90LINKOPTS += -openmp
--ESMF_OPENMP_CXXLINKOPTS += -openmp
-+ESMF_OPENMP_F90COMPILEOPTS += -qopenmp
-+ESMF_OPENMP_CXXCOMPILEOPTS += -qopenmp
-+ESMF_OPENMP_F90LINKOPTS += -qopenmp
-+ESMF_OPENMP_CXXLINKOPTS += -qopenmp
-
- ############################################################
- # Set rpath syntax
diff --git a/var/spack/repos/builtin/packages/esmf/mvapich2.patch b/var/spack/repos/builtin/packages/esmf/mvapich2.patch
deleted file mode 100644
index 8352faae446..00000000000
--- a/var/spack/repos/builtin/packages/esmf/mvapich2.patch
+++ /dev/null
@@ -1,225 +0,0 @@
-From 34de0ccf556ba75d35c9687dae5d9f666a1b2a18 Mon Sep 17 00:00:00 2001
-From: Walter Spector
-Date: Tue, 22 Nov 2016 10:57:53 -0800
-Subject: [PATCH] Detect and use libmpifort when available in mvaphich2
- configurations.
-
----
- build_config/Darwin.absoft.default/build_rules.mk | 1 +
- build_config/Darwin.g95.default/build_rules.mk | 1 +
- build_config/Darwin.gfortran.default/build_rules.mk | 1 +
- build_config/Darwin.gfortranclang.default/build_rules.mk | 1 +
- build_config/Darwin.intel.default/build_rules.mk | 1 +
- build_config/Darwin.nag.default/build_rules.mk | 1 +
- build_config/Linux.absoft.default/build_rules.mk | 1 +
- build_config/Linux.g95.default/build_rules.mk | 1 +
- build_config/Linux.gfortran.default/build_rules.mk | 1 +
- build_config/Linux.gfortranclang.default/build_rules.mk | 1 +
- build_config/Linux.intel.default/build_rules.mk | 1 +
- build_config/Linux.intelgcc.default/build_rules.mk | 1 +
- build_config/Linux.lahey.default/build_rules.mk | 1 +
- build_config/Linux.nag.default/build_rules.mk | 1 +
- build_config/Linux.pgi.default/build_rules.mk | 1 +
- scripts/libs.mvapich2f90 | 10 ++++++++++
- 16 files changed, 25 insertions(+)
- create mode 100755 scripts/libs.mvapich2f90
-
-diff --git a/build_config/Darwin.absoft.default/build_rules.mk b/build_config/Darwin.absoft.default/build_rules.mk
-index 059ff82..88a95fe 100644
---- a/build_config/Darwin.absoft.default/build_rules.mk
-+++ b/build_config/Darwin.absoft.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Darwin.g95.default/build_rules.mk b/build_config/Darwin.g95.default/build_rules.mk
-index 9789b26..a7bf89c 100644
---- a/build_config/Darwin.g95.default/build_rules.mk
-+++ b/build_config/Darwin.g95.default/build_rules.mk
-@@ -54,6 +54,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Darwin.gfortran.default/build_rules.mk b/build_config/Darwin.gfortran.default/build_rules.mk
-index 96a2a4f..2e05248 100644
---- a/build_config/Darwin.gfortran.default/build_rules.mk
-+++ b/build_config/Darwin.gfortran.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Darwin.gfortranclang.default/build_rules.mk b/build_config/Darwin.gfortranclang.default/build_rules.mk
-index da52f08..cf90636 100644
---- a/build_config/Darwin.gfortranclang.default/build_rules.mk
-+++ b/build_config/Darwin.gfortranclang.default/build_rules.mk
-@@ -56,6 +56,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Darwin.intel.default/build_rules.mk b/build_config/Darwin.intel.default/build_rules.mk
-index f6593f1..b851691 100644
---- a/build_config/Darwin.intel.default/build_rules.mk
-+++ b/build_config/Darwin.intel.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Darwin.nag.default/build_rules.mk b/build_config/Darwin.nag.default/build_rules.mk
-index 4ee8689..1dd172d 100644
---- a/build_config/Darwin.nag.default/build_rules.mk
-+++ b/build_config/Darwin.nag.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.absoft.default/build_rules.mk b/build_config/Linux.absoft.default/build_rules.mk
-index 7a2314e..43231c9 100644
---- a/build_config/Linux.absoft.default/build_rules.mk
-+++ b/build_config/Linux.absoft.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.g95.default/build_rules.mk b/build_config/Linux.g95.default/build_rules.mk
-index 5f45593..5d71e59 100644
---- a/build_config/Linux.g95.default/build_rules.mk
-+++ b/build_config/Linux.g95.default/build_rules.mk
-@@ -54,6 +54,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.gfortran.default/build_rules.mk b/build_config/Linux.gfortran.default/build_rules.mk
-index 47b55de..2954eab 100644
---- a/build_config/Linux.gfortran.default/build_rules.mk
-+++ b/build_config/Linux.gfortran.default/build_rules.mk
-@@ -61,6 +61,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.gfortranclang.default/build_rules.mk b/build_config/Linux.gfortranclang.default/build_rules.mk
-index 4c58349..6a68841 100644
---- a/build_config/Linux.gfortranclang.default/build_rules.mk
-+++ b/build_config/Linux.gfortranclang.default/build_rules.mk
-@@ -64,6 +64,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.intel.default/build_rules.mk b/build_config/Linux.intel.default/build_rules.mk
-index abb2873..55dd61a 100644
---- a/build_config/Linux.intel.default/build_rules.mk
-+++ b/build_config/Linux.intel.default/build_rules.mk
-@@ -60,6 +60,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.intelgcc.default/build_rules.mk b/build_config/Linux.intelgcc.default/build_rules.mk
-index 7c0e5c9..135c822 100644
---- a/build_config/Linux.intelgcc.default/build_rules.mk
-+++ b/build_config/Linux.intelgcc.default/build_rules.mk
-@@ -60,6 +60,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.lahey.default/build_rules.mk b/build_config/Linux.lahey.default/build_rules.mk
-index 9959bda..7a83264 100644
---- a/build_config/Linux.lahey.default/build_rules.mk
-+++ b/build_config/Linux.lahey.default/build_rules.mk
-@@ -57,6 +57,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- ESMF_F90DEFAULT = mpif90
- ESMF_F90LINKERDEFAULT = mpicxx
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.nag.default/build_rules.mk b/build_config/Linux.nag.default/build_rules.mk
-index 0fd6435..41a7e60 100644
---- a/build_config/Linux.nag.default/build_rules.mk
-+++ b/build_config/Linux.nag.default/build_rules.mk
-@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/build_config/Linux.pgi.default/build_rules.mk b/build_config/Linux.pgi.default/build_rules.mk
-index f6380b1..052a1cb 100644
---- a/build_config/Linux.pgi.default/build_rules.mk
-+++ b/build_config/Linux.pgi.default/build_rules.mk
-@@ -80,6 +80,7 @@ ifeq ($(ESMF_COMM),mvapich2)
- # Mvapich2 ---------------------------------------------------
- ESMF_F90DEFAULT = mpif90
- ESMF_CXXDEFAULT = mpicxx
-+ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
- ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
- ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
- else
-diff --git a/scripts/libs.mvapich2f90 b/scripts/libs.mvapich2f90
-new file mode 100755
-index 0000000..e4b6f27
---- /dev/null
-+++ b/scripts/libs.mvapich2f90
-@@ -0,0 +1,10 @@
-+#!/bin/sh
-+# this scripts determines the correct MVAPICH2 Fortran bindings library to
-+# use when mpicxx is used for linking. If libmpifort, use it.
-+PATHEXE=`which mpicxx`
-+MVAPICH2_LIBDIR=`dirname ${PATHEXE}`/../lib*
-+ls -1 ${MVAPICH2_LIBDIR} | grep mpifort > /dev/null 2>&1
-+if [ $? = 0 ]; then
-+ echo -lmpifort;
-+fi
-+
---
-2.7.4
-
diff --git a/var/spack/repos/builtin/packages/esmf/package.py b/var/spack/repos/builtin/packages/esmf/package.py
index ebd52be4cba..ba293ace6c7 100644
--- a/var/spack/repos/builtin/packages/esmf/package.py
+++ b/var/spack/repos/builtin/packages/esmf/package.py
@@ -30,6 +30,7 @@ class Esmf(MakefilePackage, PythonExtension):
# Develop is a special name for spack and is always considered the newest version
version("develop", branch="develop")
# generate chksum with 'spack checksum esmf@x.y.z'
+ version("8.8.1", sha256="b0acb59d4f000bfbdfddc121a24819bd2a50997c7b257b0db2ceb96f3111b173")
version("8.8.0", sha256="f89327428aeef6ad34660b5b78f30d1c55ec67efb8f7df1991fdaa6b1eb3a27c")
version("8.7.0", sha256="d7ab266e2af8c8b230721d4df59e61aa03c612a95cc39c07a2d5695746f21f56")
version("8.6.1", sha256="dc270dcba1c0b317f5c9c6a32ab334cb79468dda283d1e395d98ed2a22866364")
@@ -138,24 +139,10 @@ class Esmf(MakefilePackage, PythonExtension):
conflicts("%aocc", when="@:8.3")
- # Make esmf build with newer intel versions
- patch("intel.patch", when="@:7.0 %intel@17:")
- # Make esmf build with newer gcc versions
- # https://sourceforge.net/p/esmf/esmf/ci/3706bf758012daebadef83d6575c477aeff9c89b/
- patch("gcc.patch", when="@:7.0 %gcc@6:")
-
- # Fix undefined reference errors with mvapich2
- # https://sourceforge.net/p/esmf/esmf/ci/34de0ccf556ba75d35c9687dae5d9f666a1b2a18/
- patch("mvapich2.patch", when="@:7.0")
-
# explicit type cast of variables from long to int
patch("longtoint.patch", when="@:8.3.2 %cce@14:")
patch("longtoint.patch", when="@:8.3.2 %oneapi@2022:")
- # Allow different directories for creation and
- # installation of dynamic libraries on OSX:
- patch("darwin_dylib_install_name.patch", when="platform=darwin @:7.0")
-
# Missing include file for newer gcc compilers
# https://trac.macports.org/ticket/57493
patch("cstddef.patch", when="@7.1.0r %gcc@8:")
@@ -175,7 +162,7 @@ def patch(self):
os.path.join("src/addon/esmpy/pyproject.toml"),
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ESMFMKFILE", os.path.join(self.prefix.lib, "esmf.mk"))
@@ -195,13 +182,6 @@ class MakefileBuilder(spack.build_systems.makefile.MakefileBuilder):
# below sets the compilers to the MPI wrappers.
filter_compiler_wrappers("esmf.mk", relative_root="lib")
- # Make script from mvapich2.patch executable
- @when("@:7.0")
- @run_before("build")
- def chmod_scripts(self):
- chmod = which("chmod")
- chmod("+x", "scripts/libs.mvapich2f90")
-
def url_for_version(self, version):
if version < Version("8.0.0"):
# Older ESMF releases had a custom tag format ESMF_x_y_z
@@ -214,7 +194,7 @@ def url_for_version(self, version):
version.dotted
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# Installation instructions can be found at:
# http://www.earthsystemmodeling.org/esmf_releases/last_built/ESMF_usrdoc/node9.html
@@ -460,7 +440,9 @@ def post_install(self):
def check(self):
make("check", parallel=False)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("ESMFMKFILE", os.path.join(self.prefix.lib, "esmf.mk"))
def install(self, pkg, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/esys-particle/package.py b/var/spack/repos/builtin/packages/esys-particle/package.py
index 8f2bef156b5..e59be717425 100644
--- a/var/spack/repos/builtin/packages/esys-particle/package.py
+++ b/var/spack/repos/builtin/packages/esys-particle/package.py
@@ -33,7 +33,7 @@ def patch(self):
for file in files:
filter_file("PYTHON_LIBRARIES", "Python_LIBRARIES", file, string=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
pylibpath = join_path(
self.prefix.lib, "python{0}".format(self.spec["python"].version.up_to(2))
)
diff --git a/var/spack/repos/builtin/packages/etcd/package.py b/var/spack/repos/builtin/packages/etcd/package.py
index b9ba3503377..6db0ccfb616 100644
--- a/var/spack/repos/builtin/packages/etcd/package.py
+++ b/var/spack/repos/builtin/packages/etcd/package.py
@@ -22,7 +22,7 @@ class Etcd(Package):
depends_on("go@1.19:")
depends_on("gmake", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Point GOPATH at the top of the staging dir for the build step.
env.prepend_path("GOPATH", self.stage.path)
diff --git a/var/spack/repos/builtin/packages/evtgen/package.py b/var/spack/repos/builtin/packages/evtgen/package.py
index 736b4230390..515aa3358a1 100644
--- a/var/spack/repos/builtin/packages/evtgen/package.py
+++ b/var/spack/repos/builtin/packages/evtgen/package.py
@@ -84,5 +84,5 @@ def patch(self):
filter_file("-shared", "-dynamiclib -undefined dynamic_lookup", "make.inc")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("EVTGEN", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/examinimd/package.py b/var/spack/repos/builtin/packages/examinimd/package.py
index 1abfd9729d9..2c9cd2a62ae 100644
--- a/var/spack/repos/builtin/packages/examinimd/package.py
+++ b/var/spack/repos/builtin/packages/examinimd/package.py
@@ -33,6 +33,8 @@ class Examinimd(MakefilePackage):
conflicts("+openmp", when="+pthreads")
+ depends_on("cxx", type="build")
+
depends_on("kokkos-legacy")
depends_on("mpi", when="+mpi")
diff --git a/var/spack/repos/builtin/packages/exawind/package.py b/var/spack/repos/builtin/packages/exawind/package.py
index 2a9040bd13f..213209bfb6a 100644
--- a/var/spack/repos/builtin/packages/exawind/package.py
+++ b/var/spack/repos/builtin/packages/exawind/package.py
@@ -122,7 +122,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-DUSE_STK_SIMD_NONE")
if self.spec.satisfies("+rocm+amr_wind_gpu~nalu_wind_gpu"):
# Manually turn off device self.defines to solve Kokkos issues in Nalu-Wind headers
diff --git a/var/spack/repos/builtin/packages/exciting/package.py b/var/spack/repos/builtin/packages/exciting/package.py
index c9d9f4e8d94..522b34a5d8d 100644
--- a/var/spack/repos/builtin/packages/exciting/package.py
+++ b/var/spack/repos/builtin/packages/exciting/package.py
@@ -147,7 +147,7 @@ def install(self, spec, prefix):
install_tree("species", prefix.species)
install_tree("tools", prefix.tools)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("WNHOME", self.prefix)
env.set("EXCITINGROOT", self.prefix)
env.set("EXCITINGBIN", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/exodusii/package.py b/var/spack/repos/builtin/packages/exodusii/package.py
index 4cc3aeeacf5..d09fb90b619 100644
--- a/var/spack/repos/builtin/packages/exodusii/package.py
+++ b/var/spack/repos/builtin/packages/exodusii/package.py
@@ -138,7 +138,7 @@ class Exodusii(CMakePackage):
depends_on("python@3.0:")
conflicts("+shared", when="platform=windows")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/express/package.py b/var/spack/repos/builtin/packages/express/package.py
index 099f1d54863..4b4b44731b9 100644
--- a/var/spack/repos/builtin/packages/express/package.py
+++ b/var/spack/repos/builtin/packages/express/package.py
@@ -30,6 +30,8 @@ class Express(CMakePackage):
)
depends_on("bamtools")
depends_on("zlib-api")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
# patch from the debian package repo:
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=811859
@@ -52,5 +54,5 @@ def patch(self):
"%s" % self.spec["bamtools"].libs,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["bamtools"].prefix.include.bamtools)
diff --git a/var/spack/repos/builtin/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py
index 11f151b6364..74d2c1b93a2 100644
--- a/var/spack/repos/builtin/packages/extrae/package.py
+++ b/var/spack/repos/builtin/packages/extrae/package.py
@@ -210,10 +210,12 @@ def install(self, spec, prefix):
else:
make("install", parallel=False)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# set EXTRAE_HOME in the module file
env.set("EXTRAE_HOME", self.prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# set EXTRAE_HOME for everyone using the Extrae package
env.set("EXTRAE_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/eztrace/package.py b/var/spack/repos/builtin/packages/eztrace/package.py
index 0b4bf1a72b4..905838aaf6f 100644
--- a/var/spack/repos/builtin/packages/eztrace/package.py
+++ b/var/spack/repos/builtin/packages/eztrace/package.py
@@ -105,7 +105,7 @@ def cmake_args(self):
class AutotoolsBuilder(autotools.AutotoolsBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LDFLAGS", "--linkfortran")
def autoreconf(self, pkg, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/f77-zmq/package.py b/var/spack/repos/builtin/packages/f77-zmq/package.py
index 52e93bdb609..09a3377b93f 100644
--- a/var/spack/repos/builtin/packages/f77-zmq/package.py
+++ b/var/spack/repos/builtin/packages/f77-zmq/package.py
@@ -27,7 +27,7 @@ class F77Zmq(MakefilePackage):
depends_on("python@3:", type="build", when="@:4.3.1")
depends_on("python", type="build", when="@4.3.2:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CFLAGS", "-O3")
env.append_flags("CFLAGS", "-g")
diff --git a/var/spack/repos/builtin/packages/faiss/package.py b/var/spack/repos/builtin/packages/faiss/package.py
index 1a207719d59..21b4f38b207 100644
--- a/var/spack/repos/builtin/packages/faiss/package.py
+++ b/var/spack/repos/builtin/packages/faiss/package.py
@@ -80,7 +80,7 @@ class Faiss(AutotoolsPackage, CMakePackage, CudaPackage):
# https://github.com/facebookresearch/faiss/issues/2300
patch("fixes-in-v1.7.2.patch", when="@1.7.2")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+python"):
env.prepend_path("PYTHONPATH", python_platlib)
if self.spec.satisfies("platform=darwin"):
diff --git a/var/spack/repos/builtin/packages/fastjet/package.py b/var/spack/repos/builtin/packages/fastjet/package.py
index 7de7eb0f7a3..b4d4cfbcc75 100644
--- a/var/spack/repos/builtin/packages/fastjet/package.py
+++ b/var/spack/repos/builtin/packages/fastjet/package.py
@@ -114,6 +114,12 @@ class Fastjet(AutotoolsPackage):
when="@3.4:3.4.1 +atlas",
level=0,
)
+ patch(
+ "https://gitlab.com/fastjet/fastjet/-/merge_requests/8.diff",
+ sha256="acc00a619c449552732935ec7a3bf8b191692bfff507cd01a0130c2b9586ba32",
+ level=1,
+ when="@2.4.0:3.4.3",
+ )
def configure_args(self):
extra_args = []
@@ -142,5 +148,5 @@ def configure_args(self):
def flag_handler(self, name, flags):
if name == "cxxflags":
- flags.append(f"-std=c++{self.spec.variants['cxxstd'].value}")
+ flags.append(f"-O2 -Wall -std=c++{self.spec.variants['cxxstd'].value}")
return (None, flags, None)
diff --git a/var/spack/repos/builtin/packages/fasttree/package.py b/var/spack/repos/builtin/packages/fasttree/package.py
index 2104043e6b5..acb9e42d5df 100644
--- a/var/spack/repos/builtin/packages/fasttree/package.py
+++ b/var/spack/repos/builtin/packages/fasttree/package.py
@@ -31,6 +31,8 @@ class Fasttree(Package):
variant("openmp", default=True, description="Add openmp support to Fasttree.")
+ depends_on("c", type="build")
+
def install(self, spec, prefix):
cc = Executable(spack_cc)
if self.spec.satisfies("+openmp"):
diff --git a/var/spack/repos/builtin/packages/fenics-dolfinx/package.py b/var/spack/repos/builtin/packages/fenics-dolfinx/package.py
index 9836f23bd14..519198c6d82 100644
--- a/var/spack/repos/builtin/packages/fenics-dolfinx/package.py
+++ b/var/spack/repos/builtin/packages/fenics-dolfinx/package.py
@@ -30,6 +30,8 @@ class FenicsDolfinx(CMakePackage):
multi=True,
)
+ # HDF5 dependency requires C in CMake
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
# Graph partitioner dependencies
@@ -39,7 +41,9 @@ class FenicsDolfinx(CMakePackage):
variant("slepc", default=False, description="slepc support")
variant("adios2", default=False, description="adios2 support")
+ variant("petsc", default=False, description="PETSc support")
+ depends_on("petsc", when="+slepc")
depends_on("cmake@3.21:", when="@0.9:", type="build")
depends_on("cmake@3.19:", when="@:0.8", type="build")
depends_on("pkgconfig", type="build")
@@ -49,7 +53,7 @@ class FenicsDolfinx(CMakePackage):
depends_on("pugixml")
depends_on("spdlog", when="@0.9:")
- depends_on("petsc+mpi+shared")
+ depends_on("petsc+mpi+shared", when="+petsc")
depends_on("slepc", when="+slepc")
depends_on("adios2@2.8.1:+mpi", when="@0.9: +adios2")
@@ -75,6 +79,7 @@ class FenicsDolfinx(CMakePackage):
def cmake_args(self):
return [
self.define("DOLFINX_SKIP_BUILD_TESTS", True),
+ self.define_from_variant("DOLFINX_ENABLE_PETSC", "petsc"),
self.define_from_variant("DOLFINX_ENABLE_SLEPC", "slepc"),
self.define_from_variant("DOLFINX_ENABLE_ADIOS2", "adios2"),
self.define("DOLFINX_UFCX_PYTHON", False),
diff --git a/var/spack/repos/builtin/packages/fenics/package.py b/var/spack/repos/builtin/packages/fenics/package.py
index 247772cd545..db3bc654c0f 100644
--- a/var/spack/repos/builtin/packages/fenics/package.py
+++ b/var/spack/repos/builtin/packages/fenics/package.py
@@ -182,10 +182,10 @@ def cmake_args(self):
]
# set environment for bulding python interface
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DOLFIN_DIR", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DOLFIN_DIR", self.prefix)
# build python interface of dolfin
diff --git a/var/spack/repos/builtin/packages/ferret/package.py b/var/spack/repos/builtin/packages/ferret/package.py
index a2ef28c248e..f09897ee550 100644
--- a/var/spack/repos/builtin/packages/ferret/package.py
+++ b/var/spack/repos/builtin/packages/ferret/package.py
@@ -30,6 +30,7 @@ class Ferret(Package):
variant("datasets", default=False, description="Install Ferret standard datasets")
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
depends_on("fortran", type="build") # generated
depends_on("hdf5+hl")
@@ -186,7 +187,7 @@ def install(self, spec, prefix):
mkdir(self.prefix.fer_dsets)
install_tree("fer_dsets", self.prefix.fer_dsets)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FER_DIR", self.prefix)
env.set(
"FER_GO", " ".join([".", self.prefix.go, self.prefix.examples, self.prefix.contrib])
diff --git a/var/spack/repos/builtin/packages/ffb/package.py b/var/spack/repos/builtin/packages/ffb/package.py
index f49498285bf..c747abd8d39 100644
--- a/var/spack/repos/builtin/packages/ffb/package.py
+++ b/var/spack/repos/builtin/packages/ffb/package.py
@@ -22,6 +22,10 @@ class Ffb(MakefilePackage):
patch("xvx.patch")
patch("gffv3tr.patch")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("mpi")
depends_on("blas")
depends_on("scalapack")
@@ -167,5 +171,5 @@ def install(self, spec, prefix):
install_tree("bin", prefix.bin)
install_tree("macro", prefix.macro)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix.macro)
diff --git a/var/spack/repos/builtin/packages/ffmpeg/package.py b/var/spack/repos/builtin/packages/ffmpeg/package.py
index 46faed21a7b..99d83961d9a 100644
--- a/var/spack/repos/builtin/packages/ffmpeg/package.py
+++ b/var/spack/repos/builtin/packages/ffmpeg/package.py
@@ -180,7 +180,7 @@ def headers(self):
return headers
@when("@:6.0 %apple-clang@15:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:3"):
env.append_flags("CFLAGS", "-Wno-error=incompatible-function-pointer-types")
diff --git a/var/spack/repos/builtin/packages/ffr/package.py b/var/spack/repos/builtin/packages/ffr/package.py
index 12f67c3982c..f8bfbeea7e7 100644
--- a/var/spack/repos/builtin/packages/ffr/package.py
+++ b/var/spack/repos/builtin/packages/ffr/package.py
@@ -32,6 +32,9 @@ class Ffr(MakefilePackage):
patch("gfortran_format_31.patch", when="@3.1.004 %gcc")
patch("gfortran_format_30.patch", when="@3.0_000 %gcc")
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
+
depends_on("mpi")
depends_on("metis@:4", type="link")
diff --git a/var/spack/repos/builtin/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py
index e2f2d12180a..70d5c874914 100644
--- a/var/spack/repos/builtin/packages/fftw/package.py
+++ b/var/spack/repos/builtin/packages/fftw/package.py
@@ -86,7 +86,7 @@ def selected_precisions(self):
"""Precisions that have been selected in this build"""
return self.spec.variants["precision"].value
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+openmp %apple-clang"):
env.append_flags("CPPFLAGS", self.compiler.openmp_flag)
env.append_flags("CFLAGS", self.spec["llvm-openmp"].headers.include_flags)
diff --git a/var/spack/repos/builtin/packages/fftx/package.py b/var/spack/repos/builtin/packages/fftx/package.py
index 4477a965284..cecf2f21626 100644
--- a/var/spack/repos/builtin/packages/fftx/package.py
+++ b/var/spack/repos/builtin/packages/fftx/package.py
@@ -81,11 +81,15 @@ def install(self, spec, prefix):
if os.path.isdir(dir):
install_tree("cache_jit_files", prefix.cache_jit_files)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("FFTX_HOME", self.prefix)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("FFTX_HOME", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("FFTX_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/fgsl/package.py b/var/spack/repos/builtin/packages/fgsl/package.py
index fedebc94acb..84bfef13a15 100644
--- a/var/spack/repos/builtin/packages/fgsl/package.py
+++ b/var/spack/repos/builtin/packages/fgsl/package.py
@@ -47,6 +47,6 @@ class Fgsl(AutotoolsPackage):
def create_m4_dir(self):
mkdir("m4")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.compiler.name == "gcc":
env.append_flags("FCFLAGS", "-ffree-line-length-none")
diff --git a/var/spack/repos/builtin/packages/fides/package.py b/var/spack/repos/builtin/packages/fides/package.py
index 62aefff58ee..e8bfacb2e60 100644
--- a/var/spack/repos/builtin/packages/fides/package.py
+++ b/var/spack/repos/builtin/packages/fides/package.py
@@ -39,7 +39,7 @@ class Fides(CMakePackage):
# Fix missing implicit includes
@when("%gcc@7:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-include limits -include numeric")
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/findutils/package.py b/var/spack/repos/builtin/packages/findutils/package.py
index d0ea0026df2..aa4d5f53a1c 100644
--- a/var/spack/repos/builtin/packages/findutils/package.py
+++ b/var/spack/repos/builtin/packages/findutils/package.py
@@ -74,9 +74,9 @@ def url_for_version(self, version):
# Taken from here to build 4.8.0 with apple-clang:
# https://github.com/Homebrew/homebrew-core/blob/master/Formula/findutils.rb
- def setup_build_environment(self, spack_env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@4.8.0 %apple-clang"):
- spack_env.set("CFLAGS", "-D__nonnull\\(params\\)=")
+ env.set("CFLAGS", "-D__nonnull\\(params\\)=")
@classmethod
def determine_version(cls, exe):
diff --git a/var/spack/repos/builtin/packages/fish/package.py b/var/spack/repos/builtin/packages/fish/package.py
index fff0b36eb0a..db93cd3d755 100644
--- a/var/spack/repos/builtin/packages/fish/package.py
+++ b/var/spack/repos/builtin/packages/fish/package.py
@@ -21,6 +21,7 @@ class Fish(CMakePackage):
license("GPL-2.0-only")
version("master", branch="master")
+ version("4.0.2", sha256="6e1ecdb164285fc057b2f35acbdc20815c1623099e7bb47bbfc011120adf7e83")
version("4.0.1", sha256="4ed63a70207283e15cf21fc5f21db4230421e4f98d4826b5b1c8254d69c762b5")
version("4.0.0", sha256="2fda5bd970357064d8d4c896e08285ba59965ca2a8c4829ca8a82bf3b89c69f3")
version("3.7.1", sha256="614c9f5643cd0799df391395fa6bbc3649427bb839722ce3b114d3bbc1a3b250")
diff --git a/var/spack/repos/builtin/packages/fj/package.py b/var/spack/repos/builtin/packages/fj/package.py
index dd31eddac73..024749b2226 100644
--- a/var/spack/repos/builtin/packages/fj/package.py
+++ b/var/spack/repos/builtin/packages/fj/package.py
@@ -19,6 +19,8 @@ class Fj(Package, CompilerPackage):
provides("c", "cxx")
provides("fortran")
+ has_code = False
+
def install(self, spec, prefix):
raise InstallError(
"Fujitsu compilers are not installable yet, but can be "
diff --git a/var/spack/repos/builtin/packages/flamemaster/package.py b/var/spack/repos/builtin/packages/flamemaster/package.py
index f3612bd568e..b5062cf4c70 100644
--- a/var/spack/repos/builtin/packages/flamemaster/package.py
+++ b/var/spack/repos/builtin/packages/flamemaster/package.py
@@ -127,6 +127,9 @@ class Flamemaster(CMakePackage):
variant("eglib", default=False, description="Build with EG lib")
variant("sundials", default=True, description="with sundials")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("blas")
depends_on("lapack")
depends_on("cmake@3.12", type="build")
@@ -135,7 +138,7 @@ class Flamemaster(CMakePackage):
root_cmakelists_dir = "Repository"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LAPACK_HOME", self.spec["lapack"].prefix)
env.set("BLIS_HOME", self.spec["blas"].prefix)
diff --git a/var/spack/repos/builtin/packages/flecsph/package.py b/var/spack/repos/builtin/packages/flecsph/package.py
index e220bb50083..3267124e42c 100644
--- a/var/spack/repos/builtin/packages/flecsph/package.py
+++ b/var/spack/repos/builtin/packages/flecsph/package.py
@@ -32,7 +32,7 @@ class Flecsph(CMakePackage):
depends_on("googletest", type="test")
depends_on("pkgconfig", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5_ROOT", self.spec["hdf5"].prefix)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/fleur/package.py b/var/spack/repos/builtin/packages/fleur/package.py
index f70e1fe7309..789c356a249 100644
--- a/var/spack/repos/builtin/packages/fleur/package.py
+++ b/var/spack/repos/builtin/packages/fleur/package.py
@@ -75,7 +75,7 @@ class Fleur(Package):
conflicts("@:4.0", when="+spfft", msg="SpFFT is supported from Fleur v4.0")
conflicts("@:4.0", when="+external_libxc", msg="External libxc is supported from Fleur v4.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+mpi"):
diff --git a/var/spack/repos/builtin/packages/flibcpp/package.py b/var/spack/repos/builtin/packages/flibcpp/package.py
index 6c93e076723..3aceea0912f 100644
--- a/var/spack/repos/builtin/packages/flibcpp/package.py
+++ b/var/spack/repos/builtin/packages/flibcpp/package.py
@@ -42,14 +42,6 @@ class Flibcpp(CMakePackage):
depends_on("swig@4.0.2-fortran", type="build", when="+swig")
depends_on("py-sphinx", type="build", when="+doc")
- @run_before("cmake")
- def die_without_fortran(self):
- # Until we can pass compiler requirements through virtual
- # dependencies, explicitly check for Fortran compiler instead of
- # waiting for configure error.
- if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError("Flibcpp requires a Fortran compiler")
-
def cmake_args(self):
from_variant = self.define_from_variant
fstd_key = (
diff --git a/var/spack/repos/builtin/packages/flux-core/package.py b/var/spack/repos/builtin/packages/flux-core/package.py
index e5d733c4bf4..043c9f7626e 100644
--- a/var/spack/repos/builtin/packages/flux-core/package.py
+++ b/var/spack/repos/builtin/packages/flux-core/package.py
@@ -20,6 +20,12 @@ class FluxCore(AutotoolsPackage):
license("LGPL-3.0-only")
version("master", branch="master")
+ version("0.73.0", sha256="d029c3da68bd0a0bea40d964de772e90a55eec72303b610396882f9e94d8c0c6")
+ version("0.72.0", sha256="1642d9f93cca6e0e934b534609787a31753462215ab376d190cdced16c386524")
+ version("0.71.0", sha256="023fd3e2153e20ba28cdf60fefa14d60053df61de3b9e273bf6f9a9ebdef0b52")
+ version("0.70.0", sha256="f68fbc2038d7c0d54c71260b4a8253a73cf6abc09a663ab060a00a4181a9fa94")
+ version("0.69.0", sha256="c44fe9c41e54c2a7dcde24c660c07c8b422072540add0447cbba867719e167b5")
+ version("0.68.0", sha256="fd3d0b0b13136f3914733c7f9e775372a8808d3c7c724ba076fda277a5abeae3")
version("0.67.0", sha256="9406e776cbeff971881143fd1b94c42ec912e5b226401d2d3d91d766dd81de8c")
version("0.66.0", sha256="0a25cfb1ebc033c249614eb2350c6fb57b00cdf3c584d0759c787f595c360daa")
version("0.65.0", sha256="a60bc7ed13b8e6d09e99176123a474aad2d9792fff6eb6fd4da2a00e1d2865ab")
@@ -98,6 +104,9 @@ class FluxCore(AutotoolsPackage):
depends_on("py-jsonschema@2.3:", type=("build", "run"), when="@:0.58.0")
depends_on("py-ply", type=("build", "run"), when="@0.46.1:")
depends_on("py-setuptools", type="build", when="@0.67.0:")
+ # distutils was dropped in Python 3.12, this fallback was added 9/19/2023
+ # for version 0.54.0 but we don't need it until setuptools is dropped
+ depends_on("py-packaging", type=("build", "run"))
depends_on("jansson@2.10:")
depends_on("pkgconfig")
depends_on("lz4")
@@ -179,11 +188,11 @@ def lua_share_dir(self):
def lua_lib_dir(self):
return os.path.join("lib", "lua", str(self.lua_version))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Ensure ./fluxometer.lua can be found during flux's make check
env.append_path("LUA_PATH", "./?.lua", separator=";")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# If this package is external, we expect the external provider to set things
# like LUA paths. So, we early return. If the package is not external,
# properly set these environment variables to make sure the user environment
diff --git a/var/spack/repos/builtin/packages/flux-pmix/package.py b/var/spack/repos/builtin/packages/flux-pmix/package.py
index f1b50972af6..f4e74baa0e7 100644
--- a/var/spack/repos/builtin/packages/flux-pmix/package.py
+++ b/var/spack/repos/builtin/packages/flux-pmix/package.py
@@ -55,7 +55,7 @@ def add_pluginpath(self):
with open(rcfile, "w") as fp:
fp.write('plugin.load("' + pluginpath + '")')
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.prepend_path("FLUX_SHELL_RC_PATH", join_path(self.prefix.etc, "flux/shell/lua.d"))
if spec.satisfies("@0.3.0:"):
diff --git a/var/spack/repos/builtin/packages/flux-sched/package.py b/var/spack/repos/builtin/packages/flux-sched/package.py
index 0947f4e263c..252bec90c36 100644
--- a/var/spack/repos/builtin/packages/flux-sched/package.py
+++ b/var/spack/repos/builtin/packages/flux-sched/package.py
@@ -22,6 +22,7 @@ class FluxSched(CMakePackage, AutotoolsPackage):
license("LGPL-3.0-only")
version("master", branch="master")
+ version("0.44.0", sha256="a2b71a0c5fb51a89d32cff9eca2fc7c275a7a1a81746bea8d00b4c1868af366e")
version("0.43.0", sha256="0d9f6b88f99270fa84094b144a35bd6075adf92b9ec5c7f7f60fceffa668c996")
version("0.42.2", sha256="3a4a513c6539f2927e7a544f431e97456e50c71b63f8744d31e0dee3dc7fcc2e")
version("0.42.1", sha256="ab56b257e4918ad7e26ef6a375d0ea500a4929bf6633937f0c11c06e21db56b9")
@@ -80,6 +81,7 @@ class FluxSched(CMakePackage, AutotoolsPackage):
conflicts("%gcc@:9.3", when="@0.34:")
conflicts("%gcc@:11", when="@0.37:", msg="gcc version must be 12 or higher")
conflicts("%clang@:14", when="@0.37:", msg="clang must be version 15 or higher")
+ conflicts("flux-core@0.68:", when="@:0.38", msg="sched before 0.38 requires older core")
depends_on("py-sphinx@1.6.3:", when="+docs", type="build")
depends_on("flux-core", type=("build", "link", "run"))
@@ -180,7 +182,7 @@ def lua_share_dir(self):
def lua_lib_dir(self):
return os.path.join("lib", "lua", str(self.lua_version))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# If this package is external, we expect the external provider to set
# things like LUA paths. So, we early return. If the package is not
# external, properly set these environment variables to make sure the
diff --git a/var/spack/repos/builtin/packages/fmt/package.py b/var/spack/repos/builtin/packages/fmt/package.py
index e962ab1c19a..c1737e406d7 100644
--- a/var/spack/repos/builtin/packages/fmt/package.py
+++ b/var/spack/repos/builtin/packages/fmt/package.py
@@ -79,6 +79,8 @@ class Fmt(CMakePackage):
# (https://github.com/fmtlib/fmt/issues/3028)
conflicts("cxxstd=17", when="@9.0.0%intel")
conflicts("cxxstd=17", when="@9.0.0%nvhpc")
+ # clang-21 requires fmt-11.1.0 (https://github.com/fmtlib/fmt/pull/4187)
+ conflicts("%[virtuals=cxx] llvm@21:", when="@:11.0")
# Use CMAKE_CXX_STANDARD to define C++ flag, as in later versions
patch("fmt-use-cmake-cxx-standard_3.0.0.patch", when="@3.0.0")
diff --git a/var/spack/repos/builtin/packages/foam-extend/package.py b/var/spack/repos/builtin/packages/foam-extend/package.py
index d64dc78969b..62a203319f3 100644
--- a/var/spack/repos/builtin/packages/foam-extend/package.py
+++ b/var/spack/repos/builtin/packages/foam-extend/package.py
@@ -115,7 +115,7 @@ class FoamExtend(Package):
# - End of definitions / setup -
#
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Add environment variables to the generated module file.
These environment variables come from running:
@@ -155,10 +155,10 @@ def setup_run_environment(self, env):
"FOAM_RUN",
"(FOAM|WM)_.*USER_.*",
],
- whitelist=[ # Whitelist these
- "MPI_ARCH_PATH", # Can be needed for compilation
+ whitelist=[
+ "MPI_ARCH_PATH",
"PYTHON_BIN_DIR",
- ],
+ ], # Whitelist these # Can be needed for compilation
)
env.extend(mods)
@@ -176,7 +176,9 @@ def setup_run_environment(self, env):
for d in ["wmake", self.archbin]: # bin added automatically
env.prepend_path("PATH", join_path(self.projectdir, d))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Location of the OpenFOAM project.
This is identical to the WM_PROJECT_DIR value, but we avoid that
variable since it would mask the normal OpenFOAM cleanup of
diff --git a/var/spack/repos/builtin/packages/font-util/package.py b/var/spack/repos/builtin/packages/font-util/package.py
index 7fb9a8d6a60..f9a1d438ec4 100644
--- a/var/spack/repos/builtin/packages/font-util/package.py
+++ b/var/spack/repos/builtin/packages/font-util/package.py
@@ -237,7 +237,7 @@ class FontUtil(AutotoolsPackage, XorgPackage):
multi=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.bin)
env.prepend_path("PKG_CONFIG_PATH", self.prefix.lib.pkgconfig)
diff --git a/var/spack/repos/builtin/packages/fontconfig/package.py b/var/spack/repos/builtin/packages/fontconfig/package.py
index c5996114e1a..39a4af3c610 100644
--- a/var/spack/repos/builtin/packages/fontconfig/package.py
+++ b/var/spack/repos/builtin/packages/fontconfig/package.py
@@ -23,6 +23,7 @@ class Fontconfig(AutotoolsPackage):
version("2.11.1", sha256="b6b066c7dce3f436fdc0dfbae9d36122b38094f4f53bd8dffd45e195b0540d8d")
depends_on("c", type="build") # generated
+ depends_on("fortran", type="build")
# freetype2 21.0.15+ provided by freetype 2.8.1+
depends_on("freetype@2.8.1:", when="@2.13:")
diff --git a/var/spack/repos/builtin/packages/fortrilinos/package.py b/var/spack/repos/builtin/packages/fortrilinos/package.py
index 86b1ddcdcb1..011745525ba 100644
--- a/var/spack/repos/builtin/packages/fortrilinos/package.py
+++ b/var/spack/repos/builtin/packages/fortrilinos/package.py
@@ -69,14 +69,6 @@ class Fortrilinos(CMakePackage):
"trilinos+amesos2+anasazi+belos+kokkos+ifpack2+muelu+nox+tpetra" "+stratimikos", when="+hl"
)
- @run_before("cmake")
- def die_without_fortran(self):
- # Until we can pass variants such as +fortran through virtual
- # dependencies, require Fortran compiler to
- # avoid delayed build errors in dependents.
- if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError("ForTrilinos requires a Fortran compiler")
-
def cmake_args(self):
return [
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
diff --git a/var/spack/repos/builtin/packages/fpchecker/package.py b/var/spack/repos/builtin/packages/fpchecker/package.py
index c19106c0ba6..27bed9003e3 100644
--- a/var/spack/repos/builtin/packages/fpchecker/package.py
+++ b/var/spack/repos/builtin/packages/fpchecker/package.py
@@ -17,6 +17,8 @@ class Fpchecker(CMakePackage):
maintainers("ilagunap")
+ tags = ["e4s"]
+
license("Apache-2.0")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/fplo/package.py b/var/spack/repos/builtin/packages/fplo/package.py
index 2dd38f6bc90..3ff828a93aa 100644
--- a/var/spack/repos/builtin/packages/fplo/package.py
+++ b/var/spack/repos/builtin/packages/fplo/package.py
@@ -44,6 +44,10 @@ class Fplo(MakefilePackage):
# Sets the correct python module import order.
patch("fedit_py.patch")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("mkl")
depends_on("ncurses")
depends_on("perl", type="run")
diff --git a/var/spack/repos/builtin/packages/fpm/package.py b/var/spack/repos/builtin/packages/fpm/package.py
index e9f3b25c598..991eada138f 100644
--- a/var/spack/repos/builtin/packages/fpm/package.py
+++ b/var/spack/repos/builtin/packages/fpm/package.py
@@ -43,7 +43,7 @@ class Fpm(Package):
depends_on("c", type="build")
depends_on("fortran", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@0.4.0"):
env.set("FPM_C_COMPILER", self.compiler.cc)
diff --git a/var/spack/repos/builtin/packages/fpocket/package.py b/var/spack/repos/builtin/packages/fpocket/package.py
index 64fd59fb380..a7f94016bbd 100644
--- a/var/spack/repos/builtin/packages/fpocket/package.py
+++ b/var/spack/repos/builtin/packages/fpocket/package.py
@@ -28,7 +28,7 @@ class Fpocket(MakefilePackage):
class MakefileBuilder(makefile.MakefileBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.pkg.compiler.name == "gcc":
env.set("CXX", "g++")
diff --git a/var/spack/repos/builtin/packages/freebayes/package.py b/var/spack/repos/builtin/packages/freebayes/package.py
index 3ce21fee896..dc3f4c0ef0a 100644
--- a/var/spack/repos/builtin/packages/freebayes/package.py
+++ b/var/spack/repos/builtin/packages/freebayes/package.py
@@ -75,7 +75,7 @@ def vcflib_builddir(self):
return join_path(self.build_directory, "vcflib")
@when("@1.3.4:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.run_tests:
env.prepend_path("PATH", self.vcflib_builddir)
env.prepend_path("PATH", self.build_directory)
diff --git a/var/spack/repos/builtin/packages/freeipmi/package.py b/var/spack/repos/builtin/packages/freeipmi/package.py
index 7e06cd54c5d..72309168dd9 100644
--- a/var/spack/repos/builtin/packages/freeipmi/package.py
+++ b/var/spack/repos/builtin/packages/freeipmi/package.py
@@ -6,7 +6,7 @@
from spack.package import *
-class Freeipmi(AutotoolsPackage):
+class Freeipmi(AutotoolsPackage, GNUMirrorPackage):
"""FreeIPMI provides in-band and out-of-band IPMI software based on the IPMI
v1.5/2.0 specification. The IPMI specification defines a set of interfaces
for platform management and is implemented by a number vendors for system
@@ -19,7 +19,7 @@ class Freeipmi(AutotoolsPackage):
info."""
homepage = "https://www.gnu.org/software/freeipmi/"
- url = "https://ftp.gnu.org/gnu/freeipmi/freeipmi-1.6.4.tar.gz"
+ gnu_mirror_path = "freeipmi/freeipmi-1.6.4.tar.gz"
license("GPL-3.0-or-later")
diff --git a/var/spack/repos/builtin/packages/freesurfer/package.py b/var/spack/repos/builtin/packages/freesurfer/package.py
index 1d9be48082a..12fe0a43f0d 100644
--- a/var/spack/repos/builtin/packages/freesurfer/package.py
+++ b/var/spack/repos/builtin/packages/freesurfer/package.py
@@ -38,7 +38,7 @@ def url_for_version(self, version):
version, version
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
source_file = join_path(self.prefix, "SetUpFreeSurfer.sh")
env.prepend_path("PATH", self.prefix.bin)
env.set("FREESURFER_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/fsl/package.py b/var/spack/repos/builtin/packages/fsl/package.py
index 058e1b4449a..c1f4d04bc88 100644
--- a/var/spack/repos/builtin/packages/fsl/package.py
+++ b/var/spack/repos/builtin/packages/fsl/package.py
@@ -26,6 +26,9 @@ class Fsl(Package, CudaPackage):
version("6.0.4", sha256="58b88f38e080b05d70724d57342f58e1baf56e2bd3b98506a72b4446cad5033e")
version("5.0.10", sha256="ca183e489320de0e502a7ba63230a7f55098917a519e8c738b005d526e700842")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("python", type=("build", "run"))
depends_on("expat")
depends_on("libx11")
@@ -186,7 +189,7 @@ def postinstall(self):
script = Executable(join_path(prefix, "etc", "fslconf", "post_install.sh"))
script("-f", prefix)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if not self.stage.source_path:
self.stage.fetch()
self.stage.expand_archive()
@@ -199,7 +202,7 @@ def setup_build_environment(self, env):
if os.path.isfile(fslsetup):
env.extend(EnvironmentModifications.from_sourcing_file(fslsetup))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Set the environment variables after copying tree
env.set("FSLDIR", self.prefix)
fslsetup = join_path(self.prefix, "etc", "fslconf", "fsl.sh")
diff --git a/var/spack/repos/builtin/packages/fstrack/package.py b/var/spack/repos/builtin/packages/fstrack/package.py
index e326c69c561..fed6d437276 100644
--- a/var/spack/repos/builtin/packages/fstrack/package.py
+++ b/var/spack/repos/builtin/packages/fstrack/package.py
@@ -30,7 +30,7 @@ class Fstrack(MakefilePackage):
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Compilers
env.set("F90", spack_fc)
diff --git a/var/spack/repos/builtin/packages/fujitsu-mpi/package.py b/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
index a4b39b110fe..c22a9784fb5 100644
--- a/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
+++ b/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
@@ -54,7 +54,9 @@ def setup_dependent_package(self, module, dependent_spec):
self.spec.mpif77 = self.prefix.bin.mpifrt
self.spec.mpifc = self.prefix.bin.mpifrt
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Use the spack compiler wrappers under MPI
dependent_module = dependent_spec.package.module
env.set("OMPI_CC", dependent_module.spack_cc)
@@ -70,7 +72,7 @@ def setup_dependent_build_environment(self, env, dependent_spec):
env.set("MPI_CXX_COMPILER", self.prefix.bin.mpiFCC)
env.set("MPI_Fortran_COMPILER", self.prefix.bin.mpifrt)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Because MPI are both compilers and runtimes, we set up the compilers
# as part of run environment
if self.spec.satisfies("%gcc"):
diff --git a/var/spack/repos/builtin/packages/fujitsu-ssl2/package.py b/var/spack/repos/builtin/packages/fujitsu-ssl2/package.py
index be72a3814ff..1dd60250b2f 100644
--- a/var/spack/repos/builtin/packages/fujitsu-ssl2/package.py
+++ b/var/spack/repos/builtin/packages/fujitsu-ssl2/package.py
@@ -122,7 +122,9 @@ def scalapack_libs(self):
return libs
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
path = self.prefix.include
env.append_flags("fcc_ENV", "-idirafter " + path)
env.append_flags("FCC_ENV", "-idirafter " + path)
diff --git a/var/spack/repos/builtin/packages/fzf/package.py b/var/spack/repos/builtin/packages/fzf/package.py
index 0dc8883f500..c17b99d0652 100644
--- a/var/spack/repos/builtin/packages/fzf/package.py
+++ b/var/spack/repos/builtin/packages/fzf/package.py
@@ -63,7 +63,7 @@ def url_for_version(self, version):
base = "refs/tags/v" if self.spec.satisfies("@:0.53.0") else ""
return f"https://github.com/junegunn/fzf/archive/{base}{version}.tar.gz"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set up the build environment for fzf."""
# Setup build env from GoPackage builder
super().setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/g2/package.py b/var/spack/repos/builtin/packages/g2/package.py
index a6392e98e79..fe06beb25b8 100644
--- a/var/spack/repos/builtin/packages/g2/package.py
+++ b/var/spack/repos/builtin/packages/g2/package.py
@@ -6,11 +6,13 @@
class G2(CMakePackage):
- """Utilities for coding/decoding GRIB2 messages. This library contains
- Fortran 90 decoder/encoder routines for GRIB edition 2, as well as
- indexing/searching utility routines.
+ """Utilities for coding/decoding GRIB2 messages.
- This is part of the NCEPLIBS project."""
+ This library contains Fortran 90 decoder/encoder routines for GRIB edition 2,
+ as well as indexing/searching utility routines.
+
+ This is part of the NCEPLIBS project.
+ """
homepage = "https://noaa-emc.github.io/NCEPLIBS-g2"
url = "https://github.com/NOAA-EMC/NCEPLIBS-g2/archive/refs/tags/v3.4.3.tar.gz"
@@ -18,6 +20,8 @@ class G2(CMakePackage):
maintainers("AlexanderRichert-NOAA", "Hang-Lei-NOAA", "edwardhartnett")
+ license("LGPL-3.0")
+
version("develop", branch="develop")
version("3.5.1", sha256="a9acdb5d23eca532838f21c4a917727ac85851fc9e1f100d65a6f27c1a563998")
version("3.5.0", sha256="3ff59a705bedf56061bba2d667a04391d82701847f93ea5fa1c1d3bd335d07da")
@@ -39,28 +43,35 @@ class G2(CMakePackage):
)
variant("w3emc", default=True, description="Enable GRIB1 through w3emc", when="@3.4.6:")
variant("shared", default=False, description="Build shared library", when="@3.4.7:")
- variant("openmp", default=False, description="Use OpenMP multithreading", when="@develop")
- variant("utils", default=False, description="Build grib utilities", when="@develop")
+ variant("aec", default=True, description="Use AEC library", when="@4:")
+ variant("openmp", default=False, description="Use OpenMP multithreading", when="@4:")
+ variant("utils", default=False, description="Build grib utilities", when="@4:")
variant(
"g2c_compare",
default=False,
description="Enable copygb2 tests using g2c_compare",
- when="@develop",
+ when="@4:",
)
+ variant("use_g2c_api", default=False, description="Use new file-based API", when="@4:")
+ # Build dependencies
depends_on("c", type="build")
depends_on("fortran", type="build")
+ # Required dependencies
depends_on("jasper@:2.0.32", when="@:3.4.7")
depends_on("jasper")
depends_on("libpng")
- depends_on("zlib-api", when="@develop")
+ depends_on("g2c@2:", when="@4:")
+ depends_on("g2c@2: +aec", when="+aec")
+ depends_on("zlib-api", when="@4:")
depends_on("bacio", when="@3.4.6:")
- depends_on("ip", when="@develop")
+ depends_on("ip@3.3.3:", when="@4:")
requires("^ip precision=d", when="^ip@4.1:")
depends_on("sp", when="^ip@:4")
requires("^sp precision=d", when="^ip@:4 ^sp@2.4:")
depends_on("g2c@1.8: +utils", when="+g2c_compare")
+
with when("+w3emc"):
depends_on("w3emc")
depends_on("w3emc precision=4", when="precision=4")
@@ -73,28 +84,30 @@ def cmake_args(self):
self.define_from_variant("OPENMP", "openmp"),
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
self.define_from_variant("BUILD_WITH_W3EMC", "w3emc"),
+ self.define_from_variant("USE_AEC", "aec"),
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
self.define("BUILD_4", self.spec.satisfies("precision=4")),
self.define("BUILD_D", self.spec.satisfies("precision=d")),
self.define_from_variant("G2C_COMPARE", "g2c_compare"),
+ self.define_from_variant("USE_G2C_API", "use_g2c_api"),
self.define_from_variant("BUILD_UTILS", "utils"),
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
precisions = (
self.spec.variants["precision"].value if self.spec.satisfies("@3.4.6:") else ("4", "d")
)
for suffix in precisions:
lib = find_libraries(
- "libg2_" + suffix,
+ f"libg2_{suffix}",
root=self.prefix,
shared=self.spec.satisfies("+shared"),
recursive=True,
)
- env.set("G2_LIB" + suffix, lib[0])
- env.set("G2_INC" + suffix, join_path(self.prefix, "include_" + suffix))
+ env.set(f"G2_LIB{suffix}", lib[0])
+ env.set(f"G2_INC{suffix}", join_path(self.prefix, f"include_{suffix}"))
def check(self):
with working_dir(self.build_directory):
diff --git a/var/spack/repos/builtin/packages/g2c/package.py b/var/spack/repos/builtin/packages/g2c/package.py
index 658664a1c9a..ff3b01f80c8 100644
--- a/var/spack/repos/builtin/packages/g2c/package.py
+++ b/var/spack/repos/builtin/packages/g2c/package.py
@@ -38,22 +38,16 @@ class G2c(CMakePackage):
when="@1.7:",
)
variant(
- "pthreads",
- default=False,
- description="Turn on thread-safety with pthreads",
- when="@develop",
+ "pthreads", default=False, description="Turn on thread-safety with pthreads", when="@2:"
)
variant(
- "utils",
- default=True,
- description="Build and install some utility programs",
- when="@develop",
+ "utils", default=True, description="Build and install some utility programs", when="@2:"
)
variant(
"build_v2_api",
- default=False,
+ default=True,
description="Build new g2c API, experimental until 2.0.0 release",
- when="@develop",
+ when="@2:",
)
depends_on("c", type="build")
@@ -64,6 +58,7 @@ class G2c(CMakePackage):
depends_on("openjpeg", when="+openjpeg")
depends_on("libxml2@2.9:", when="+build_v2_api")
+ conflicts("+utils ~build_v2_api", msg="+utils requires G2C API")
conflicts("+jasper +openjpeg", msg="Either Jasper or OpenJPEG should be used, not both")
def cmake_args(self):
@@ -83,7 +78,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:1.6"):
shared = False
else:
diff --git a/var/spack/repos/builtin/packages/g4abla/package.py b/var/spack/repos/builtin/packages/g4abla/package.py
index d831848d85e..0ec4604b6e7 100644
--- a/var/spack/repos/builtin/packages/g4abla/package.py
+++ b/var/spack/repos/builtin/packages/g4abla/package.py
@@ -26,7 +26,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4ABLADATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4channeling/package.py b/var/spack/repos/builtin/packages/g4channeling/package.py
index a579faa130a..4943130d2cc 100644
--- a/var/spack/repos/builtin/packages/g4channeling/package.py
+++ b/var/spack/repos/builtin/packages/g4channeling/package.py
@@ -24,7 +24,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4CHANNELINGDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4emlow/package.py b/var/spack/repos/builtin/packages/g4emlow/package.py
index 19b35718376..f96a86e1a77 100644
--- a/var/spack/repos/builtin/packages/g4emlow/package.py
+++ b/var/spack/repos/builtin/packages/g4emlow/package.py
@@ -31,14 +31,14 @@ class G4emlow(Package):
version("6.50", sha256="c97be73fece5fb4f73c43e11c146b43f651c6991edd0edf8619c9452f8ab1236")
version("6.35", sha256="1564045a0acad344c8d432cd48c2c3bb2e051a81ab3099a84e0f56ba0fe82cec")
- depends_on("cxx", type="build") # generated
-
def install(self, spec, prefix):
mkdirp(join_path(prefix.share, "data"))
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4LEDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4ensdfstate/package.py b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
index 3c73c8d9885..f42d5ac044b 100644
--- a/var/spack/repos/builtin/packages/g4ensdfstate/package.py
+++ b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
@@ -28,7 +28,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4ENSDFSTATEDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4incl/package.py b/var/spack/repos/builtin/packages/g4incl/package.py
index 75a5f2e3e79..46ef09c61bb 100644
--- a/var/spack/repos/builtin/packages/g4incl/package.py
+++ b/var/spack/repos/builtin/packages/g4incl/package.py
@@ -27,7 +27,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4INCLDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4ndl/package.py b/var/spack/repos/builtin/packages/g4ndl/package.py
index 4c0559dfac0..8943aba1949 100644
--- a/var/spack/repos/builtin/packages/g4ndl/package.py
+++ b/var/spack/repos/builtin/packages/g4ndl/package.py
@@ -27,7 +27,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4NEUTRONHPDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4neutronxs/package.py b/var/spack/repos/builtin/packages/g4neutronxs/package.py
index 90d89cab670..2ba675286a0 100644
--- a/var/spack/repos/builtin/packages/g4neutronxs/package.py
+++ b/var/spack/repos/builtin/packages/g4neutronxs/package.py
@@ -26,7 +26,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4NEUTRONXSDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4nudexlib/package.py b/var/spack/repos/builtin/packages/g4nudexlib/package.py
index eb48a6a4480..0a7ca8be5e3 100644
--- a/var/spack/repos/builtin/packages/g4nudexlib/package.py
+++ b/var/spack/repos/builtin/packages/g4nudexlib/package.py
@@ -25,7 +25,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4NUDEXLIBDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4particlexs/package.py b/var/spack/repos/builtin/packages/g4particlexs/package.py
index 87ee6336a42..76ed7c2c5fc 100644
--- a/var/spack/repos/builtin/packages/g4particlexs/package.py
+++ b/var/spack/repos/builtin/packages/g4particlexs/package.py
@@ -30,7 +30,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4PARTICLEXSDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4photonevaporation/package.py b/var/spack/repos/builtin/packages/g4photonevaporation/package.py
index 095721d5603..22af6b877b6 100644
--- a/var/spack/repos/builtin/packages/g4photonevaporation/package.py
+++ b/var/spack/repos/builtin/packages/g4photonevaporation/package.py
@@ -30,7 +30,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4LEVELGAMMADATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4pii/package.py b/var/spack/repos/builtin/packages/g4pii/package.py
index ebffa8730da..981d3ea0d04 100644
--- a/var/spack/repos/builtin/packages/g4pii/package.py
+++ b/var/spack/repos/builtin/packages/g4pii/package.py
@@ -24,7 +24,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4PIIDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
index 3281e9a9e5f..748cbf54394 100644
--- a/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
+++ b/var/spack/repos/builtin/packages/g4radioactivedecay/package.py
@@ -30,7 +30,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4RADIOACTIVEDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4realsurface/package.py b/var/spack/repos/builtin/packages/g4realsurface/package.py
index c5b47f786cf..6308dd21162 100644
--- a/var/spack/repos/builtin/packages/g4realsurface/package.py
+++ b/var/spack/repos/builtin/packages/g4realsurface/package.py
@@ -27,7 +27,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4REALSURFACEDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4saiddata/package.py b/var/spack/repos/builtin/packages/g4saiddata/package.py
index cd8455027a3..829e3745095 100644
--- a/var/spack/repos/builtin/packages/g4saiddata/package.py
+++ b/var/spack/repos/builtin/packages/g4saiddata/package.py
@@ -25,7 +25,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4SAIDXSDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4tendl/package.py b/var/spack/repos/builtin/packages/g4tendl/package.py
index b7116fb716d..14c76adf4f2 100644
--- a/var/spack/repos/builtin/packages/g4tendl/package.py
+++ b/var/spack/repos/builtin/packages/g4tendl/package.py
@@ -26,7 +26,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4PARTICLEHPDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/g4urrpt/package.py b/var/spack/repos/builtin/packages/g4urrpt/package.py
index 7f73868932f..dae5236fb7f 100644
--- a/var/spack/repos/builtin/packages/g4urrpt/package.py
+++ b/var/spack/repos/builtin/packages/g4urrpt/package.py
@@ -26,7 +26,9 @@ def install(self, spec, prefix):
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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
install_path = join_path(self.prefix.share, "data", self.g4datasetname)
env.set("G4URRPTDATA", install_path)
diff --git a/var/spack/repos/builtin/packages/gadap/package.py b/var/spack/repos/builtin/packages/gadap/package.py
index 59961c668ff..bb50836fa95 100644
--- a/var/spack/repos/builtin/packages/gadap/package.py
+++ b/var/spack/repos/builtin/packages/gadap/package.py
@@ -26,6 +26,6 @@ class Gadap(AutotoolsPackage):
# libdap uses namespacing in recent versions, so we need to patch this source
patch("cxx-updates.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CFLAGS", "-fPIC")
env.set("CXXFLAGS", "-fPIC")
diff --git a/var/spack/repos/builtin/packages/gams/package.py b/var/spack/repos/builtin/packages/gams/package.py
index fc7b444f946..931615d8417 100644
--- a/var/spack/repos/builtin/packages/gams/package.py
+++ b/var/spack/repos/builtin/packages/gams/package.py
@@ -20,7 +20,7 @@ class Gams(Package):
def url_for_version(self, version):
return "file://{0}/linux_x64_64_sfx.exe".format(os.getcwd())
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"PATH", join_path(self.prefix, "gams{0}_linux_x64_64_sfx".format(self.version))
)
diff --git a/var/spack/repos/builtin/packages/garcon/package.py b/var/spack/repos/builtin/packages/garcon/package.py
index a18839ddec4..12131969462 100644
--- a/var/spack/repos/builtin/packages/garcon/package.py
+++ b/var/spack/repos/builtin/packages/garcon/package.py
@@ -45,6 +45,8 @@ def configure_args(self):
args += self.enable_or_disable("introspection")
return args
- def setup_dependent_build_environment(self, env, dep_spec):
- if self.spec.satisfies("+introspection") and dep_spec.satisfies("+introspection"):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
+ if self.spec.satisfies("+introspection") and dependent_spec.satisfies("+introspection"):
env.append_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/garfieldpp/package.py b/var/spack/repos/builtin/packages/garfieldpp/package.py
index cd4adc763f9..9248a9165bf 100644
--- a/var/spack/repos/builtin/packages/garfieldpp/package.py
+++ b/var/spack/repos/builtin/packages/garfieldpp/package.py
@@ -44,7 +44,7 @@ def cmake_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GARFIELD_INSTALL", self.prefix)
env.set("HEED_DATABASE", self.prefix.share.Heed.database)
@@ -56,6 +56,8 @@ def setup_run_environment(self, env):
env.prepend_path("LD_LIBRARY_PATH", self.spec["root"].prefix.lib.root)
env.prepend_path("LD_LIBRARY_PATH", self.spec["gsl"].prefix.lib.root)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("GARFIELD_INSTALL", self.prefix)
env.set("HEED_DATABASE", self.prefix.share.Heed.database)
diff --git a/var/spack/repos/builtin/packages/gate/package.py b/var/spack/repos/builtin/packages/gate/package.py
index 4bfa2ee5bae..4e005728d3a 100644
--- a/var/spack/repos/builtin/packages/gate/package.py
+++ b/var/spack/repos/builtin/packages/gate/package.py
@@ -61,11 +61,11 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
gc_default_platform = self.spec.variants["default_platform"].value
env.set("GC_DEFAULT_PLATFORM", gc_default_platform)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GC_GATE_EXE_DIR", self.prefix.bin)
env.set(
"GC_CONDOR_SCRIPT", join_path(self.prefix, "share", "jobsplitter", "condor.script")
diff --git a/var/spack/repos/builtin/packages/gatk/package.py b/var/spack/repos/builtin/packages/gatk/package.py
index fb2c1b0a59b..ae2e0e98f9c 100644
--- a/var/spack/repos/builtin/packages/gatk/package.py
+++ b/var/spack/repos/builtin/packages/gatk/package.py
@@ -101,5 +101,5 @@ def install(self, spec, prefix):
**kwargs,
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("GATK", join_path(self.prefix.bin, "GenomeAnalysisTK.jar"))
diff --git a/var/spack/repos/builtin/packages/gaudi/package.py b/var/spack/repos/builtin/packages/gaudi/package.py
index 4bcfb0ab433..dd35ff2c949 100644
--- a/var/spack/repos/builtin/packages/gaudi/package.py
+++ b/var/spack/repos/builtin/packages/gaudi/package.py
@@ -17,6 +17,8 @@ class Gaudi(CMakePackage, CudaPackage):
tags = ["hep"]
version("master", branch="master")
+ version("39.4", sha256="dd698e0788811fa8325ed5f37ecf3fd9bde55720489224a517b52360819564d7")
+ version("39.3", sha256="009a306a7413f3207f0d5fa19034186c0bb3c8de0c807d38f515338a41a8a0bc")
version("39.2", sha256="9697f5092df49187e3d30256c821a4400534e77ddaa2d976ba4bb22745c904d6")
version("39.1", sha256="acdeddcc2383a127b1ad4b0bdaf9f1c6699b64105e0c1d8095c560c96c157885")
version("39.0", sha256="faa3653e2e6c769292c0592e3fc35cd98a2820bd6fc0c967cac565808b927262")
@@ -179,7 +181,7 @@ def cmake_args(self):
args.append(self.define("GAUDI_CXX_STANDARD", "20"))
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# environment as in Gaudi.xenv
env.prepend_path("PATH", self.prefix.scripts)
env.prepend_path("PYTHONPATH", self.prefix.python)
diff --git a/var/spack/repos/builtin/packages/gaussian-view/package.py b/var/spack/repos/builtin/packages/gaussian-view/package.py
index dc66ef07799..d0d89f51de9 100644
--- a/var/spack/repos/builtin/packages/gaussian-view/package.py
+++ b/var/spack/repos/builtin/packages/gaussian-view/package.py
@@ -95,7 +95,7 @@ def caveats(self):
)
@when("@:6.0")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GV_DIR", self.prefix)
env.set("GV_LIB_PATH", self.prefix.lib)
@@ -106,7 +106,7 @@ def setup_run_environment(self, env):
env.prepend_path("QT_PLUGIN_PATH", self.prefix.plugins)
@when("@6.1:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GV_DIR", self.prefix)
# the wrappers in gv/exec setup everything just nicely
diff --git a/var/spack/repos/builtin/packages/gaussian/package.py b/var/spack/repos/builtin/packages/gaussian/package.py
index 07528f9899a..cf9766f81bb 100644
--- a/var/spack/repos/builtin/packages/gaussian/package.py
+++ b/var/spack/repos/builtin/packages/gaussian/package.py
@@ -52,7 +52,7 @@ def bsd_install(self):
bsd_install = Executable(join_path("bsd", "install"))
bsd_install()
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("g" + self.ver + "root", self.prefix)
env.prepend_path("GAUSS_EXEDIR", self.g_root)
diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py
index 7150857bbf5..42ff4ca8dfc 100644
--- a/var/spack/repos/builtin/packages/gcc/package.py
+++ b/var/spack/repos/builtin/packages/gcc/package.py
@@ -40,12 +40,12 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
version("master", branch="master")
# Latest stable
- version("14.2.0", sha256="a7b39bc69cbf9e25826c5a60ab26477001f7c08d85cec04bc0e29cabed6f3cc9")
+ version("15.1.0", sha256="e2b09ec21660f01fecffb715e0120265216943f038d0e48a9868713e54f06cea")
# Previous stable series releases
- version("14.1.0", sha256="e283c654987afe3de9d8080bc0bd79534b5ca0d681a73a11ff2b5d3767426840")
# Final releases of previous versions
+ version("14.2.0", sha256="a7b39bc69cbf9e25826c5a60ab26477001f7c08d85cec04bc0e29cabed6f3cc9")
version("13.3.0", sha256="0845e9621c9543a13f484e94584a49ffc0129970e9914624235fc1d061a0c083")
version("12.4.0", sha256="704f652604ccbccb14bdabf3478c9511c89788b12cb3bbffded37341916a9175")
version("11.5.0", sha256="a6e21868ead545cf87f0c01f84276e4b5281d672098591c1c896241f09363478")
@@ -63,6 +63,10 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
# Deprecated older non-final releases
with default_args(deprecated=True):
+ version(
+ "14.1.0", sha256="e283c654987afe3de9d8080bc0bd79534b5ca0d681a73a11ff2b5d3767426840"
+ )
+
version(
"13.2.0", sha256="e275e76442a6067341a27f04c5c6b83d8613144004c0413528863dc6b5c743da"
)
@@ -378,11 +382,10 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
# on XCode 12.5
conflicts("+bootstrap", when="@:11.1 %apple-clang@12.0.5")
- # aarch64/M1 is supported in GCC 11.3-12.2 and 13
requires(
- "@11.3,12.2,13.1:",
+ "@11.3:",
when="target=aarch64: platform=darwin",
- msg="Only GCC 11.3-12.2, 13.1+ support macOS M1 (aarch64)",
+ msg="Only GCC 11.3+ support aarch64-darwin",
)
# Newer binutils than RHEL's is required to run `as` on some instructions
@@ -438,8 +441,8 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
# aarch64-darwin support from Iain Sandoe's branch
patch(
- "https://github.com/iains/gcc-14-branch/compare/04696df09633baf97cdbbdd6e9929b9d472161d3..gcc-14.2-darwin-r2.patch?full_index=1",
- sha256="01ea668489f3f0fb2439060f6c333c4c17ef4c19c4c4e6e6aa4b8ea493e97685",
+ "https://github.com/iains/gcc-14-branch/compare/04696df09633baf97cdbbdd6e9929b9d472161d3..a495b2dded281beeafec91074e4e82a5a3df8104.patch?full_index=1",
+ sha256="838cf070bec5468340018bf003f714f6340c562b878f3244303d2b7ba9949ccd",
when="@14.2.0 target=aarch64:",
)
patch(
@@ -449,8 +452,8 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
)
patch(
- "https://github.com/iains/gcc-13-branch/compare/b71f1de6e9cf7181a288c0f39f9b1ef6580cf5c8..gcc-13.3-darwin-r1.patch?full_index=1",
- sha256="d957520afc286ac46aa3c4bf9b64618d02ca0bf1466f32321b5d6beec6a396eb",
+ "https://github.com/iains/gcc-13-branch/compare/b71f1de6e9cf7181a288c0f39f9b1ef6580cf5c8..7808d253bf53c6c6ce63f04a66601b595e2bae08.patch?full_index=1",
+ sha256="e7d4415e66ba09dd65b102a842e62e6f9ba6b41da878e08235e59a3fc53058eb",
when="@13.3.0 target=aarch64:",
)
patch(
@@ -465,8 +468,8 @@ class Gcc(AutotoolsPackage, GNUMirrorPackage, CompilerPackage):
)
patch(
- "https://github.com/iains/gcc-12-branch/compare/2bada4bc59bed4be34fab463bdb3c3ebfd2b41bb..gcc-12.4-darwin-r0.patch?full_index=1",
- sha256="e242adf240a62ed3005da75a9e304bda980b84ce497f124b4bddc819ee821e2a",
+ "https://github.com/iains/gcc-12-branch/compare/2bada4bc59bed4be34fab463bdb3c3ebfd2b41bb..99533d94172ed7a24c0e54c4ea97e6ae2260409e.patch?full_index=1",
+ sha256="4f59c671b34cc24b57eaa528592a5188f18716cd3cd63c4601fbbda92d397ce2",
when="@12.4.0 target=aarch64:",
)
patch(
@@ -618,7 +621,7 @@ def supported_languages(self):
opt_flags = ["-O", "-O0", "-O1", "-O2", "-O3", "-Os", "-Ofast", "-Og"]
implicit_rpath_libs = ["libgcc", "libgfortran"]
- stdcxx_libs = "-lstdc++"
+ stdcxx_libs = ("-lstdc++",)
def _standard_flag(self, *, language, standard):
flags = {
@@ -1048,14 +1051,14 @@ def write_specs_file(self):
set_install_permissions(specs_file)
tty.info(f"Wrote new spec file to {specs_file}")
- def setup_run_environment(self, env):
- if self.spec.satisfies("languages=c"):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
+ if self.cc and self.spec.satisfies("languages=c"):
env.set("CC", self.cc)
- if self.spec.satisfies("languages=c++"):
+ if self.cxx and self.spec.satisfies("languages=c++"):
env.set("CXX", self.cxx)
- if self.spec.satisfies("languages=fortran"):
+ if self.fortran and self.spec.satisfies("languages=fortran"):
env.set("FC", self.fortran)
env.set("F77", self.fortran)
@@ -1158,19 +1161,13 @@ def runtime_constraints(cls, *, spec, pkg):
spec: spec that will inject runtime dependencies
pkg: object used to forward information to the solver
"""
- pkg("*").depends_on(
- "gcc-runtime",
- when="%gcc",
- type="link",
- description="If any package uses %gcc, it depends on gcc-runtime",
- )
- pkg("*").depends_on(
- f"gcc-runtime@{str(spec.version)}:",
- when=f"^[deptypes=build] {spec.name}@{spec.versions}",
- type="link",
- description=f"If any package uses %{str(spec)}, "
- f"it depends on gcc-runtime@{str(spec.version)}:",
- )
+ for language in ("c", "cxx", "fortran"):
+ pkg("*").depends_on(
+ f"gcc-runtime@{spec.version}:",
+ when=f"%[virtuals={language}] {spec.name}@{spec.versions}",
+ type="link",
+ description=f"Inject gcc-runtime when gcc is used as a {language} compiler",
+ )
gfortran_str = "libgfortran@5"
if spec.satisfies("gcc@:6"):
@@ -1181,21 +1178,17 @@ def runtime_constraints(cls, *, spec, pkg):
for fortran_virtual in ("fortran-rt", gfortran_str):
pkg("*").depends_on(
fortran_virtual,
- when=f"^[virtuals=fortran deptypes=build] {spec.name}@{spec.versions}",
+ when=f"%[virtuals=fortran] {spec.name}@{spec.versions}",
type="link",
description=f"Add a dependency on '{gfortran_str}' for nodes compiled with "
- f"{str(spec)} and using the 'fortran' language",
+ f"{spec} and using the 'fortran' language",
)
# The version of gcc-runtime is the same as the %gcc used to "compile" it
- pkg("gcc-runtime").requires(
- f"@{str(spec.versions)}", when=f"^[deptypes=build] {spec.name}@{spec.versions}"
- )
+ pkg("gcc-runtime").requires(f"@{spec.versions}", when=f"%{spec.name}@{spec.versions}")
# If a node used %gcc@X.Y its dependencies must use gcc-runtime@:X.Y
# (technically @:X is broader than ... <= @=X but this should work in practice)
- pkg("*").propagate(
- f"gcc@:{str(spec.version)}", when=f"^[deptypes=build] {spec.name}@{spec.versions}"
- )
+ pkg("*").propagate(f"gcc@:{spec.version}", when=f"%{spec.name}@{spec.versions}")
def _post_buildcache_install_hook(self):
if not self.spec.satisfies("platform=linux"):
diff --git a/var/spack/repos/builtin/packages/gdal/package.py b/var/spack/repos/builtin/packages/gdal/package.py
index 344d6a9f4d0..ccb548eff28 100644
--- a/var/spack/repos/builtin/packages/gdal/package.py
+++ b/var/spack/repos/builtin/packages/gdal/package.py
@@ -364,7 +364,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension):
depends_on("openjpeg", when="+openjpeg")
depends_on("openssl", when="+openssl")
depends_on("oracle-instant-client", when="+oracle")
- depends_on("parquet-cpp", when="+parquet")
+ depends_on("arrow", when="+parquet")
# depends_on('pcidsk', when='+pcidsk')
depends_on("pcre2", when="@3.5:+pcre2")
depends_on("pcre", when="@:3.4+pcre2")
@@ -512,7 +512,7 @@ class Gdal(CMakePackage, AutotoolsPackage, PythonExtension):
def determine_version(cls, exe):
return Executable(exe)("--version", output=str, error=str).rstrip()
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+java"):
class_paths = find(self.prefix, "*.jar")
classpath = os.pathsep.join(class_paths)
@@ -639,7 +639,7 @@ def cmake_args(self):
class AutotoolsBuilder(AutotoolsBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Needed to install Python bindings to GDAL installation
# prefix instead of Python installation prefix.
# See swig/python/GNUmakefile for more details.
diff --git a/var/spack/repos/builtin/packages/gdbm/package.py b/var/spack/repos/builtin/packages/gdbm/package.py
index 83b4e5e53b0..406749885db 100644
--- a/var/spack/repos/builtin/packages/gdbm/package.py
+++ b/var/spack/repos/builtin/packages/gdbm/package.py
@@ -16,6 +16,7 @@ class Gdbm(AutotoolsPackage, GNUMirrorPackage):
license("GPL-3.0-or-later")
+ version("1.25", sha256="d02db3c5926ed877f8817b81cd1f92f53ef74ca8c6db543fbba0271b34f393ec")
version("1.24", sha256="695e9827fdf763513f133910bc7e6cfdb9187943a4fec943e57449723d2b8dbf")
version("1.23", sha256="74b1081d21fff13ae4bd7c16e5d6e504a4c26f7cde1dca0d963a484174bbcacd")
version("1.22", sha256="f366c823a6724af313b6bbe975b2809f9a157e5f6a43612a72949138d161d762")
diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
index aaf25a0d57f..b4edd503a87 100644
--- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
+++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
@@ -69,11 +69,13 @@ def url_for_version(self, version):
url = "https://download.gnome.org/sources/gdk-pixbuf/{0}/gdk-pixbuf-{1}.tar.xz"
return url.format(version.up_to(2), version)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
@@ -83,7 +85,7 @@ def meson_args(self):
args.append(f"-Dtests={'true' if self.run_tests else 'false'}")
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# The "post-install.sh" script uses gdk-pixbuf-query-loaders,
# which was installed earlier.
env.prepend_path("PATH", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/gdrcopy/package.py b/var/spack/repos/builtin/packages/gdrcopy/package.py
index 285ab7b3194..2daad61116d 100644
--- a/var/spack/repos/builtin/packages/gdrcopy/package.py
+++ b/var/spack/repos/builtin/packages/gdrcopy/package.py
@@ -40,7 +40,7 @@ class Gdrcopy(MakefilePackage, CudaPackage):
depends_on("check")
requires("+cuda")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CUDA", self.spec["cuda"].prefix)
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/geant3/package.py b/var/spack/repos/builtin/packages/geant3/package.py
index b4558e7228c..7c9cca3e14d 100644
--- a/var/spack/repos/builtin/packages/geant3/package.py
+++ b/var/spack/repos/builtin/packages/geant3/package.py
@@ -41,6 +41,6 @@ def cmake_args(self):
args.append(self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"))
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("platform=darwin"):
env.unset("MACOSX_DEPLOYMENT_TARGET")
diff --git a/var/spack/repos/builtin/packages/geant4-vmc/package.py b/var/spack/repos/builtin/packages/geant4-vmc/package.py
index 65ed2d67a8c..0c5e9a0e80d 100644
--- a/var/spack/repos/builtin/packages/geant4-vmc/package.py
+++ b/var/spack/repos/builtin/packages/geant4-vmc/package.py
@@ -40,6 +40,6 @@ class Geant4Vmc(CMakePackage):
depends_on("geant4")
depends_on("vmc")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("platform=darwin"):
env.unset("MACOSX_DEPLOYMENT_TARGET")
diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py
index 2867203617f..94ea15b60b6 100644
--- a/var/spack/repos/builtin/packages/geant4/package.py
+++ b/var/spack/repos/builtin/packages/geant4/package.py
@@ -21,6 +21,7 @@ class Geant4(CMakePackage):
maintainers("drbenmorgan", "sethrj")
+ version("11.3.2", sha256="077edca6aa3b3940f351cf9a948457cad3fb117f215b88c52cce315e1a07fd7a")
version("11.3.1", sha256="9059da076928f25cab1ff1f35e0f611a4d7fe005e374e9b8d7f3ff2434b7af54")
version("11.3.0", sha256="d9d71daff8890a7b5e0e33ea9a65fe6308ad6713000b43ba6705af77078e7ead")
version("11.2.2", sha256="3a8d98c63fc52578f6ebf166d7dffaec36256a186d57f2520c39790367700c8d")
diff --git a/var/spack/repos/builtin/packages/gegl/package.py b/var/spack/repos/builtin/packages/gegl/package.py
index d9a479ae38e..9de8ec59c28 100644
--- a/var/spack/repos/builtin/packages/gegl/package.py
+++ b/var/spack/repos/builtin/packages/gegl/package.py
@@ -37,10 +37,14 @@ class Gegl(MesonPackage):
depends_on("gobject-introspection")
depends_on("json-glib")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
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_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/genemark-et/package.py b/var/spack/repos/builtin/packages/genemark-et/package.py
index 658c69e8a53..f6580939b5d 100644
--- a/var/spack/repos/builtin/packages/genemark-et/package.py
+++ b/var/spack/repos/builtin/packages/genemark-et/package.py
@@ -63,5 +63,5 @@ def filter_sbang(self):
files = glob.iglob("*.pl")
filter_file(pattern, repl, *files, backup=False)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/generate-ninja/package.py b/var/spack/repos/builtin/packages/generate-ninja/package.py
index cad66cf067b..02b0b5a0320 100644
--- a/var/spack/repos/builtin/packages/generate-ninja/package.py
+++ b/var/spack/repos/builtin/packages/generate-ninja/package.py
@@ -29,7 +29,7 @@ class GenerateNinja(Package):
depends_on("python", type="build")
depends_on("llvm+clang", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DEPLOY", "1")
env.set("CC", self.spec["llvm"].home.bin.clang)
env.set("CXX", self.spec["llvm"].home.bin.join("clang++"))
diff --git a/var/spack/repos/builtin/packages/genesis/package.py b/var/spack/repos/builtin/packages/genesis/package.py
index 233093cb5eb..8fb16392484 100644
--- a/var/spack/repos/builtin/packages/genesis/package.py
+++ b/var/spack/repos/builtin/packages/genesis/package.py
@@ -92,7 +92,7 @@ def configure_args(self):
options.append("--host=Fugaku")
return options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("FC", self.spec["mpi"].mpifc, force=True)
env.set("F77", self.spec["mpi"].mpif77, force=True)
env.set("CC", self.spec["mpi"].mpicc, force=True)
diff --git a/var/spack/repos/builtin/packages/genfit/package.py b/var/spack/repos/builtin/packages/genfit/package.py
index 57997f4f390..889fb3269c0 100644
--- a/var/spack/repos/builtin/packages/genfit/package.py
+++ b/var/spack/repos/builtin/packages/genfit/package.py
@@ -30,7 +30,7 @@ class Genfit(CMakePackage):
version("b496504a", sha256="e1582b35782118ade08498adc03f3fda01979ff8bed61e0520edae46d7bfe477")
depends_on("cxx", type="build") # generated
-
+ depends_on("c", type="build")
depends_on("root")
depends_on("root@:6.16.00", when="@b496504a")
depends_on("eigen")
diff --git a/var/spack/repos/builtin/packages/genie/package.py b/var/spack/repos/builtin/packages/genie/package.py
index a49736dee66..53b4d177d9b 100644
--- a/var/spack/repos/builtin/packages/genie/package.py
+++ b/var/spack/repos/builtin/packages/genie/package.py
@@ -92,10 +92,10 @@ def url_for_version(self, version):
else:
return url.format(version.underscored)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GENIE", self.stage.source_path)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GENIE", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/genometools/package.py b/var/spack/repos/builtin/packages/genometools/package.py
index 8bc86886774..26c1e28df1c 100644
--- a/var/spack/repos/builtin/packages/genometools/package.py
+++ b/var/spack/repos/builtin/packages/genometools/package.py
@@ -34,5 +34,7 @@ class Genometools(MakefilePackage):
def install(self, spec, prefix):
make("install", f"prefix={prefix}")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("CPATH", self.prefix.include.genometools)
diff --git a/var/spack/repos/builtin/packages/geomodel/package.py b/var/spack/repos/builtin/packages/geomodel/package.py
index 64cfd2acfca..cdf8ef392fd 100644
--- a/var/spack/repos/builtin/packages/geomodel/package.py
+++ b/var/spack/repos/builtin/packages/geomodel/package.py
@@ -65,7 +65,8 @@ class Geomodel(CMakePackage):
conflicts("+fullsimlight", when="+fsl", msg="FSL triggers the build of the FullSimLight")
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("cmake@3.16:", type="build")
@@ -89,7 +90,7 @@ class Geomodel(CMakePackage):
depends_on("qt-5compat")
depends_on("coin3d")
depends_on("soqt")
- depends_on("opengl")
+ depends_on("gl")
def cmake_args(self):
args = [
diff --git a/var/spack/repos/builtin/packages/geopm-runtime/package.py b/var/spack/repos/builtin/packages/geopm-runtime/package.py
index 20dd20dd6ea..4560864af01 100644
--- a/var/spack/repos/builtin/packages/geopm-runtime/package.py
+++ b/var/spack/repos/builtin/packages/geopm-runtime/package.py
@@ -152,7 +152,7 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Required to ensure libgeopm.so
# can be used with LD_PRELOAD
if os.path.isdir(self.prefix.lib64):
diff --git a/var/spack/repos/builtin/packages/geopm-service/package.py b/var/spack/repos/builtin/packages/geopm-service/package.py
index 6b0057d52e5..3c7f33259f9 100644
--- a/var/spack/repos/builtin/packages/geopm-service/package.py
+++ b/var/spack/repos/builtin/packages/geopm-service/package.py
@@ -153,7 +153,7 @@ def configure_args(self):
args.append("--disable-cpuid")
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Required to ensure geopmdpy can load
# libgeopmd.so.2 via CFFI
if os.path.isdir(self.prefix.lib64):
diff --git a/var/spack/repos/builtin/packages/getorganelle/package.py b/var/spack/repos/builtin/packages/getorganelle/package.py
index 242874f4c5c..4a125a156d4 100644
--- a/var/spack/repos/builtin/packages/getorganelle/package.py
+++ b/var/spack/repos/builtin/packages/getorganelle/package.py
@@ -30,6 +30,6 @@ class Getorganelle(PythonPackage):
# Allow access to relevant runtime scripts
# I.e. get_organelle_config.py, get_organelle_from_reads.py, etc.
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix)
env.prepend_path("PATH", prefix.Utilities)
diff --git a/var/spack/repos/builtin/packages/gfsio/package.py b/var/spack/repos/builtin/packages/gfsio/package.py
index 47a061fb85a..87bf6a03773 100644
--- a/var/spack/repos/builtin/packages/gfsio/package.py
+++ b/var/spack/repos/builtin/packages/gfsio/package.py
@@ -31,7 +31,7 @@ def cmake_args(self):
args = [self.define("ENABLE_TESTS", self.run_tests)]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
lib = find_libraries("libgfsio", root=self.prefix, shared=False, recursive=True)
# Only one library version, but still need to set _4 to make NCO happy
for suffix in ("4", ""):
diff --git a/var/spack/repos/builtin/packages/gh/package.py b/var/spack/repos/builtin/packages/gh/package.py
index 1ae220c15b4..21d9fd0dbcc 100644
--- a/var/spack/repos/builtin/packages/gh/package.py
+++ b/var/spack/repos/builtin/packages/gh/package.py
@@ -15,6 +15,8 @@ class Gh(GoPackage):
license("MIT")
+ version("2.70.0", sha256="9e2247e5b31131fd4ac63916b9483a065fcfb861ebb93588cf2ff42952ae08c5")
+ version("2.69.0", sha256="e2deb3759bbe4da8ad4f071ca604fda5c2fc803fef8b3b89896013e4b1c1fe65")
version("2.63.2", sha256="2578a8b1f00cb292a8094793515743f2a86e02b8d0b18d6b95959ddbeebd6b8d")
version("2.63.1", sha256="b9a90118dfb46204dbcc0d09c2073d48f35b6f640b4db33fbaa24892fed56c8d")
version("2.63.0", sha256="c5309db9707c9e64ebe264e1e2d0f893ecead9056d680b39a565aaa5513d2947")
@@ -45,12 +47,13 @@ class Gh(GoPackage):
conflicts("platform=darwin", when="@2.28.0")
- depends_on("go@1.16:", type="build")
- depends_on("go@1.18:", type="build", when="@2.10.0:")
- depends_on("go@1.19:", type="build", when="@2.21.0:")
- depends_on("go@1.21:", type="build", when="@2.33.0:")
- depends_on("go@1.22:", type="build", when="@2.47.0:")
+ depends_on("go@1.23.0:", type="build", when="@2.66.0:")
depends_on("go@1.22.5:", type="build", when="@2.56.0:")
+ depends_on("go@1.22.0:", type="build", when="@2.47.0:")
+ depends_on("go@1.21.0:", type="build", when="@2.33.0:")
+ depends_on("go@1.19.0:", type="build", when="@2.21.0:")
+ depends_on("go@1.18.0:", type="build", when="@2.10.0:")
+ depends_on("go@1.16.0:", type="build")
@property
def build_args(self):
diff --git a/var/spack/repos/builtin/packages/ginkgo/package.py b/var/spack/repos/builtin/packages/ginkgo/package.py
index 4fe0cf239cf..401ae2549a6 100644
--- a/var/spack/repos/builtin/packages/ginkgo/package.py
+++ b/var/spack/repos/builtin/packages/ginkgo/package.py
@@ -132,7 +132,7 @@ class Ginkgo(CMakePackage, CudaPackage, ROCmPackage):
when="+rocm @1.8.0",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+sycl"):
env.set("MKLROOT", join_path(spec["intel-oneapi-mkl"].prefix, "mkl", "latest"))
diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py
index cebb08a14b0..5a43e4e330a 100644
--- a/var/spack/repos/builtin/packages/git/package.py
+++ b/var/spack/repos/builtin/packages/git/package.py
@@ -195,7 +195,7 @@ def determine_variants(cls, exes, version_str):
def patch(self):
filter_file(r"^EXTLIBS =$", "#EXTLIBS =", "Makefile")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# We use EXTLIBS rather than LDFLAGS so that git's Makefile
# inserts the information into the proper place in the link commands
# (alongside the # other libraries/paths that configure discovers).
@@ -325,7 +325,7 @@ def install_subtree(self):
make(" ".join(install_args))
install("git-subtree", self.prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Setup run environment if using SVN extension
# Libs from perl-alien-svn and apr-util are required in
# LD_LIBRARY_PATH
diff --git a/var/spack/repos/builtin/packages/glibc/package.py b/var/spack/repos/builtin/packages/glibc/package.py
index 46d851c5d5f..5863cd96183 100644
--- a/var/spack/repos/builtin/packages/glibc/package.py
+++ b/var/spack/repos/builtin/packages/glibc/package.py
@@ -113,7 +113,7 @@ class Glibc(AutotoolsPackage, GNUMirrorPackage):
conflicts("musl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:2.21"):
env.append_flags("LDFLAGS", "-no-pie")
if self.spec.satisfies("@:2.16"):
diff --git a/var/spack/repos/builtin/packages/gluegen/package.py b/var/spack/repos/builtin/packages/gluegen/package.py
index d2503edf8b5..52c373ceead 100644
--- a/var/spack/repos/builtin/packages/gluegen/package.py
+++ b/var/spack/repos/builtin/packages/gluegen/package.py
@@ -65,17 +65,19 @@ def install(self, spec, prefix):
install_tree("make", prefix.make)
filter_file("..", prefix, join_path(prefix.make, "build.xml"), string=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"CLASSPATH", join_path(self.stage.source_path, "ant-optional", "optional-1.5.4.jar")
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
class_paths = find(prefix.build, "*.jar")
classpath = os.pathsep.join(class_paths)
env.prepend_path("CLASSPATH", classpath)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
class_paths = find(prefix.build, "*.jar")
classpath = os.pathsep.join(class_paths)
env.prepend_path("CLASSPATH", classpath)
diff --git a/var/spack/repos/builtin/packages/glvis/package.py b/var/spack/repos/builtin/packages/glvis/package.py
index 42b43229530..5ddad45b8c4 100644
--- a/var/spack/repos/builtin/packages/glvis/package.py
+++ b/var/spack/repos/builtin/packages/glvis/package.py
@@ -13,7 +13,7 @@ class Glvis(MakefilePackage):
homepage = "https://glvis.org"
git = "https://github.com/glvis/glvis.git"
- tags = ["radiuss"]
+ tags = ["radiuss", "e4s"]
maintainers("v-dobrev", "tzanio", "tomstitt", "goxberry")
diff --git a/var/spack/repos/builtin/packages/gmap-gsnap/package.py b/var/spack/repos/builtin/packages/gmap-gsnap/package.py
index 07c5a40c85b..e725bb9206f 100644
--- a/var/spack/repos/builtin/packages/gmap-gsnap/package.py
+++ b/var/spack/repos/builtin/packages/gmap-gsnap/package.py
@@ -102,5 +102,5 @@ def install(self, spec, prefix):
with working_dir(simd):
make("install")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PERL", self.spec["perl"].prefix.bin.perl)
diff --git a/var/spack/repos/builtin/packages/gmsh/package.py b/var/spack/repos/builtin/packages/gmsh/package.py
index a1b4dce28f0..7f2392c5746 100644
--- a/var/spack/repos/builtin/packages/gmsh/package.py
+++ b/var/spack/repos/builtin/packages/gmsh/package.py
@@ -195,5 +195,5 @@ def cmake_args(self):
return options
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/gnuradio/package.py b/var/spack/repos/builtin/packages/gnuradio/package.py
index 1f48d7cf892..d7eb86e39f0 100644
--- a/var/spack/repos/builtin/packages/gnuradio/package.py
+++ b/var/spack/repos/builtin/packages/gnuradio/package.py
@@ -68,14 +68,18 @@ class Gnuradio(CMakePackage):
def cmake_args(self):
return ["-DENABLE_INTERNAL_VOLK=OFF"]
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/gnutls/package.py b/var/spack/repos/builtin/packages/gnutls/package.py
index 26fb32edacb..731345287ac 100644
--- a/var/spack/repos/builtin/packages/gnutls/package.py
+++ b/var/spack/repos/builtin/packages/gnutls/package.py
@@ -90,7 +90,7 @@ def url_for_version(self, version):
url = "https://www.gnupg.org/ftp/gcrypt/gnutls/v{0}/gnutls-{1}.tar.xz"
return url.format(version.up_to(2), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+guile"):
env.set("GUILE", self.spec["guile"].prefix.bin.guile)
diff --git a/var/spack/repos/builtin/packages/go-bootstrap/package.py b/var/spack/repos/builtin/packages/go-bootstrap/package.py
index a59ff36ecf7..c729d3825e6 100644
--- a/var/spack/repos/builtin/packages/go-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/go-bootstrap/package.py
@@ -116,7 +116,9 @@ def url_for_version(self, version):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set GOROOT_BOOTSTRAP: When using an external compiler, get its GOROOT env"""
if self.spec.external:
# Use the go compiler added by ``spack external find go-bootstrap``:
diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py
index 6433e57d063..d4cd1e4c99c 100644
--- a/var/spack/repos/builtin/packages/go/package.py
+++ b/var/spack/repos/builtin/packages/go/package.py
@@ -33,13 +33,16 @@ class Go(Package):
extendable = True
executables = ["^go$"]
+ unresolved_libraries = ["libtiff.so.*"] # go/src/debug/elf/testdata/libtiffxx.so_
maintainers("alecbcs")
license("BSD-3-Clause")
+ version("1.24.2", sha256="9dc77ffadc16d837a1bf32d99c624cb4df0647cee7b119edd9e7b1bcc05f2e00")
version("1.24.1", sha256="8244ebf46c65607db10222b5806aeb31c1fcf8979c1b6b12f60c677e9a3c0656")
version("1.24.0", sha256="d14120614acb29d12bcab72bd689f257eb4be9e0b6f88a8fb7e41ac65f8556e5")
+ version("1.23.8", sha256="0ca1f1e37ea255e3ce283af3f4e628502fb444587da987a5bb96d6c6f15930d4")
version("1.23.7", sha256="7cfabd46b73eb4c26b19d69515dd043d7183a6559acccd5cfdb25eb6b266a458")
version("1.23.6", sha256="039c5b04e65279daceee8a6f71e70bd05cf5b801782b6f77c6e19e2ed0511222")
version("1.23.5", sha256="a6f3f4bbd3e6bdd626f79b668f212fbb5649daf75084fb79b678a0ae4d97423b")
@@ -98,12 +101,12 @@ def determine_version(cls, exe):
match = re.search(r"go version go(\S+)", output)
return match.group(1) if match else None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# We need to set CC/CXX_FOR_TARGET, otherwise cgo will use the
# internal Spack wrappers and fail.
env.set("CC_FOR_TARGET", self["c"].cc)
env.set("CXX_FOR_TARGET", self["cxx"].cxx)
- env.set("GOMAXPROCS", make_jobs)
+ env.set("GOMAXPROCS", str(make_jobs))
def build(self, spec, prefix):
# Build script depend on bash
diff --git a/var/spack/repos/builtin/packages/gobject-introspection/package.py b/var/spack/repos/builtin/packages/gobject-introspection/package.py
index a8ed96afa9f..7e75b3a7e03 100644
--- a/var/spack/repos/builtin/packages/gobject-introspection/package.py
+++ b/var/spack/repos/builtin/packages/gobject-introspection/package.py
@@ -115,21 +115,25 @@ def url_for_version(self, version):
url = "https://download.gnome.org/sources/gobject-introspection/{0}/gobject-introspection-{1}.tar.xz"
return url.format(version.up_to(2), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# 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):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
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")
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/google-cloud-cli/package.py b/var/spack/repos/builtin/packages/google-cloud-cli/package.py
index c4284a34716..e3551369401 100644
--- a/var/spack/repos/builtin/packages/google-cloud-cli/package.py
+++ b/var/spack/repos/builtin/packages/google-cloud-cli/package.py
@@ -77,13 +77,13 @@ class GoogleCloudCli(Package):
def url_for_version(self, version):
return f"https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-{version}-{self.system}-{self.machine}.{self.ext}"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://cloud.google.com/sdk/gcloud/reference/topic/startup
env.set("CLOUDSDK_PYTHON", self.spec["python"].command.path)
# ~70 dependencies with no hints as to what versions are supported, just use bundled deps
env.set("CLOUDSDK_PYTHON_SITEPACKAGES", "0")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_build_environment(env)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/gpgme/package.py b/var/spack/repos/builtin/packages/gpgme/package.py
index 7c32fe2b86e..8ebe0b86f33 100644
--- a/var/spack/repos/builtin/packages/gpgme/package.py
+++ b/var/spack/repos/builtin/packages/gpgme/package.py
@@ -42,7 +42,7 @@ def configure_args(self):
"""Fix the build when incompatible Qt libraries are installed on the host"""
return ["--enable-languages=cpp"]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Build tests create a public keyring in ~/.gnupg if $HOME is not redirected"""
if self.run_tests:
env.set("HOME", self.build_directory)
diff --git a/var/spack/repos/builtin/packages/gplates/package.py b/var/spack/repos/builtin/packages/gplates/package.py
index c20efef97d7..a077a541dd0 100644
--- a/var/spack/repos/builtin/packages/gplates/package.py
+++ b/var/spack/repos/builtin/packages/gplates/package.py
@@ -21,6 +21,8 @@ class Gplates(CMakePackage):
version("2.3.0", sha256="7d4be9d524d1fcbb6a81de29bd1d4b13133082db23f0808965c5efe30e9538ab")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("cmake@3.5:", when="@2.3:", type="build")
depends_on("cmake@2.8.8:", when="@2.1", type="build")
depends_on("cmake@2.6.2:", when="@2.0", type="build")
diff --git a/var/spack/repos/builtin/packages/gprofng-gui/package.py b/var/spack/repos/builtin/packages/gprofng-gui/package.py
index 27eb3ef0793..fbf84c18449 100644
--- a/var/spack/repos/builtin/packages/gprofng-gui/package.py
+++ b/var/spack/repos/builtin/packages/gprofng-gui/package.py
@@ -6,11 +6,11 @@
from spack.package import *
-class GprofngGui(AutotoolsPackage):
+class GprofngGui(AutotoolsPackage, GNUMirrorPackage):
"""A graphical environment to analyze the performance data generated by the gprofng"""
homepage = "https://sourceware.org/binutils/wiki/gprofng"
- url = "https://ftp.gnu.org/gnu/gprofng-gui/gprofng-gui-1.1.tar.gz"
+ gnu_mirror_path = "gprofng-gui/gprofng-gui-1.1.tar.gz"
git = "https://git.savannah.gnu.org/git/gprofng-gui.git"
maintainers("pramodk")
diff --git a/var/spack/repos/builtin/packages/gptune/package.py b/var/spack/repos/builtin/packages/gptune/package.py
index 17d584ee9e5..8864255aad7 100644
--- a/var/spack/repos/builtin/packages/gptune/package.py
+++ b/var/spack/repos/builtin/packages/gptune/package.py
@@ -24,6 +24,8 @@ class Gptune(CMakePackage):
git = "https://github.com/gptune/GPTune.git"
maintainers("liuyangzhuan")
+ tags = ["e4s"]
+
license("BSD-3-Clause-LBNL")
version("master", branch="master")
@@ -195,7 +197,7 @@ def cache_test_sources(self):
cp = which("cp")
cp(script_path, join_path(python_platlib, "gptune"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GPTUNE_INSTALL_PATH", python_platlib)
cmd = {"bash": which("bash"), "cp": which("cp"), "git": which("git"), "rm": which("rm")}
diff --git a/var/spack/repos/builtin/packages/grace/package.py b/var/spack/repos/builtin/packages/grace/package.py
index 97434a28326..8907575f539 100644
--- a/var/spack/repos/builtin/packages/grace/package.py
+++ b/var/spack/repos/builtin/packages/grace/package.py
@@ -63,7 +63,7 @@ def configure_args(self):
args.append("--enable-netcdf")
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Grace installs a subfolder in the prefix directory
# so we account for that...
env.prepend_path("PATH", self.prefix.grace.bin)
diff --git a/var/spack/repos/builtin/packages/grackle/package.py b/var/spack/repos/builtin/packages/grackle/package.py
index 6dd2c670402..b3690d6380e 100644
--- a/var/spack/repos/builtin/packages/grackle/package.py
+++ b/var/spack/repos/builtin/packages/grackle/package.py
@@ -28,6 +28,8 @@ class Grackle(Package):
depends_on("libtool", when="@2.2:")
depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("fortran", type="build")
depends_on("tcsh", type="build")
depends_on("mpi")
diff --git a/var/spack/repos/builtin/packages/grads/package.py b/var/spack/repos/builtin/packages/grads/package.py
index 2e9a077a933..6c2353b0eec 100644
--- a/var/spack/repos/builtin/packages/grads/package.py
+++ b/var/spack/repos/builtin/packages/grads/package.py
@@ -83,7 +83,7 @@ def flag_handler(self, name, flags):
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SUPPLIBS", "/")
# Recent versions configure scripts break without PKG_CONFIG set
@@ -92,7 +92,7 @@ def setup_build_environment(self, env):
if "+hdf4" in self.spec and "~shared" in self.spec["hdf"]:
env.set("LIBS", self.spec["hdf:transitive"].libs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GADDIR", self.prefix.data)
@run_after("install")
diff --git a/var/spack/repos/builtin/packages/graphviz/package.py b/var/spack/repos/builtin/packages/graphviz/package.py
index 8813ec798c9..a5ace891c51 100644
--- a/var/spack/repos/builtin/packages/graphviz/package.py
+++ b/var/spack/repos/builtin/packages/graphviz/package.py
@@ -159,7 +159,7 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh", "NOCONFIG")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Set MACOSX_DEPLOYMENT_TARGET to 10.x due to old configure
super().setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/greenx/package.py b/var/spack/repos/builtin/packages/greenx/package.py
new file mode 100644
index 00000000000..7f28ef071d0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/greenx/package.py
@@ -0,0 +1,50 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class Greenx(CMakePackage):
+ """GreenX: An open-source library that supports exascale implementations
+ of Green's-function-based methodologies."""
+
+ homepage = "https://nomad-coe.github.io/greenX"
+ url = "https://github.com/nomad-coe/greenX/archive/refs/tags/v2.1.tar.gz"
+
+ maintainers("RMeli")
+
+ license("Apache-2.0", checked_by="RMeli")
+
+ version("2.1", sha256="2fc1fc2c93b0bab14babc33386f7932192336813cea6db11cd27dbc36b541e41")
+
+ variant("shared", default=True, description="Build shared libraries")
+ variant("ac", default=True, description="Enable Analytical Continuation component")
+ variant(
+ "gmp",
+ when="+ac",
+ default=True,
+ description="Enable GMP library for multiple precision arithmetic",
+ )
+ variant("minmax", default=True, description="Enable minmax time-frequency grids component")
+ variant("lbasis", default=False, description="Enable localized basis component")
+ variant("paw", default=False, description="Enable PAW component")
+
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
+ depends_on("blas")
+ depends_on("lapack")
+
+ depends_on("gmp", when="+gmp")
+
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define_from_variant("AC_COMPONENT", "ac"),
+ self.define_from_variant("ENABLE_GNU_GMP", "gmp"),
+ self.define_from_variant("MINMAX_COMPONENT", "minmax"),
+ self.define_from_variant("LBASIS_COMPONENT", "lbasis"),
+ self.define_from_variant("PAW_COMPONENT", "paw"),
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/grep/package.py b/var/spack/repos/builtin/packages/grep/package.py
index 8129f7c331a..150b78e0310 100644
--- a/var/spack/repos/builtin/packages/grep/package.py
+++ b/var/spack/repos/builtin/packages/grep/package.py
@@ -5,12 +5,12 @@
from spack.package import *
-class Grep(AutotoolsPackage):
+class Grep(AutotoolsPackage, GNUMirrorPackage):
"""Grep searches one or more input files for lines containing a match to
a specified pattern"""
homepage = "https://www.gnu.org/software/grep/"
- url = "https://ftp.gnu.org/gnu/grep/grep-3.3.tar.xz"
+ gnu_mirror_path = "grep/grep-3.3.tar.xz"
license("GPL-3.0-or-later")
diff --git a/var/spack/repos/builtin/packages/grib-api/package.py b/var/spack/repos/builtin/packages/grib-api/package.py
index 6aabeab5c43..1785bae73d2 100644
--- a/var/spack/repos/builtin/packages/grib-api/package.py
+++ b/var/spack/repos/builtin/packages/grib-api/package.py
@@ -70,6 +70,8 @@ class GribApi(CMakePackage):
# tests are enabled but the testing scripts don't use it.
# depends_on('valgrind', type='test', when='+test')
+ depends_on("fortran", type="build", when="+fortran")
+
depends_on("netcdf-c", when="+netcdf")
depends_on("openjpeg@1.5.0:1.5", when="jp2k=openjpeg")
depends_on("jasper", when="jp2k=jasper")
@@ -85,11 +87,6 @@ class GribApi(CMakePackage):
# CMAKE_INSTALL_RPATH must be a semicolon-separated list.
patch("cmake_install_rpath.patch")
- @run_before("cmake")
- def check_fortran(self):
- if "+fortran" in self.spec and self.compiler.fc is None:
- raise InstallError("Fortran interface requires a Fortran compiler!")
-
def cmake_args(self):
var_opt_list = [
("+pthreads", "GRIB_THREADS"),
diff --git a/var/spack/repos/builtin/packages/gridlab-d/package.py b/var/spack/repos/builtin/packages/gridlab-d/package.py
index eed224b21f4..a030caf9eae 100644
--- a/var/spack/repos/builtin/packages/gridlab-d/package.py
+++ b/var/spack/repos/builtin/packages/gridlab-d/package.py
@@ -52,7 +52,7 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Need to add GLPATH otherwise Gridlab-D will not run.
env.set("GLPATH", join_path(self.prefix, "lib", "gridlabd"))
env.prepend_path("GLPATH", join_path(self.prefix, "share", "gridlabd"))
diff --git a/var/spack/repos/builtin/packages/grnboost/package.py b/var/spack/repos/builtin/packages/grnboost/package.py
index 3d3e4edd07d..5fec1640d55 100644
--- a/var/spack/repos/builtin/packages/grnboost/package.py
+++ b/var/spack/repos/builtin/packages/grnboost/package.py
@@ -29,7 +29,7 @@ class Grnboost(Package):
depends_on("xgboost", type="run")
depends_on("spark+hadoop", type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
grnboost_jar = join_path(self.prefix, "target", "scala-2.11", "GRNBoost.jar")
xgboost_version = self.spec["xgboost"].version.string
xgboost_jar = join_path(
diff --git a/var/spack/repos/builtin/packages/groff/package.py b/var/spack/repos/builtin/packages/groff/package.py
index 8d9b7a714a8..297eee85379 100644
--- a/var/spack/repos/builtin/packages/groff/package.py
+++ b/var/spack/repos/builtin/packages/groff/package.py
@@ -89,10 +89,10 @@ def configure_args(self):
args.append("--without-libiconv-prefix")
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+x"):
dir = join_path(self.prefix.lib, "X11", "app-defaults")
- env.set_path("XFILESEARCHPATH", dir)
+ env.prepend_path("XFILESEARCHPATH", dir)
def flag_handler(self, name, flags):
if name == "cxxflags":
diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py
index 42c7daa067e..3a4f44c2491 100644
--- a/var/spack/repos/builtin/packages/gromacs/package.py
+++ b/var/spack/repos/builtin/packages/gromacs/package.py
@@ -625,7 +625,7 @@ def patch(self):
r"-gencode;arch=compute_20,code=sm_21;?", "", "cmake/gmxManageNvccConfig.cmake"
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cufftmp"):
env.append_path(
"LD_LIBRARY_PATH",
@@ -952,7 +952,7 @@ def cmake_args(self):
options.append("-DGMX_VERSION_STRING_OF_FORK=spack")
return options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cufftmp"):
env.append_path(
"LD_LIBRARY_PATH",
diff --git a/var/spack/repos/builtin/packages/gsettings-desktop-schemas/package.py b/var/spack/repos/builtin/packages/gsettings-desktop-schemas/package.py
index 776aded4177..f46e66bcec4 100644
--- a/var/spack/repos/builtin/packages/gsettings-desktop-schemas/package.py
+++ b/var/spack/repos/builtin/packages/gsettings-desktop-schemas/package.py
@@ -25,14 +25,18 @@ class GsettingsDesktopSchemas(MesonPackage):
depends_on("gettext", type="build")
depends_on("pkgconfig", type="build")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/gsl/package.py b/var/spack/repos/builtin/packages/gsl/package.py
index 1b745936dd8..b92aa764d06 100644
--- a/var/spack/repos/builtin/packages/gsl/package.py
+++ b/var/spack/repos/builtin/packages/gsl/package.py
@@ -71,7 +71,7 @@ def configure_args(self):
return configure_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# cmake looks for GSL_ROOT_DIR to find GSL so this helps pick the spack one
# when there are multiple installations (e.g. a system one and a spack one)
env.set("GSL_ROOT_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/gslib/package.py b/var/spack/repos/builtin/packages/gslib/package.py
index 72610111e8c..38220a5f553 100644
--- a/var/spack/repos/builtin/packages/gslib/package.py
+++ b/var/spack/repos/builtin/packages/gslib/package.py
@@ -18,13 +18,20 @@ class Gslib(Package):
version("1.0.5", tag="v1.0.5", commit="1de2fba1d94e27e20f3bc3af6a3a35901e223ecd")
version("1.0.4", tag="v1.0.4", commit="00a074c15a13fdfd121ac5781ae450af809dde3b")
version("1.0.3", tag="v1.0.3", commit="e2df99fad9480a981034fd0e4b3a7fe8f3cf9ae3")
- version("1.0.2", tag="v1.0.2", commit="e53419c32a4a326e55e1c3e0d7de14ce665c1788")
- version("1.0.1", tag="v1.0.1", commit="d16685f24551b7efd69e58d96dc76aec75239ea3")
- version("1.0.0", tag="v1.0.0", commit="9533e652320a3b26a72c36487ae265b02072cd48")
+ version(
+ "1.0.2", tag="v1.0.2", commit="e53419c32a4a326e55e1c3e0d7de14ce665c1788", deprecated=True
+ )
+ version(
+ "1.0.1", tag="v1.0.1", commit="d16685f24551b7efd69e58d96dc76aec75239ea3", deprecated=True
+ )
+ version(
+ "1.0.0", tag="v1.0.0", commit="9533e652320a3b26a72c36487ae265b02072cd48", deprecated=True
+ )
variant("mpi", default=True, description="Build with MPI")
variant("mpiio", default=True, description="Build with MPI I/O")
variant("blas", default=False, description="Build with BLAS")
+ variant("shared", default=False, description="Build shared libs. Disables static libs")
depends_on("c", type="build") # generated
depends_on("fortran", type="build") # generated
@@ -39,14 +46,22 @@ class Gslib(Package):
def install(self, spec, prefix):
src_dir = "src"
lib_dir = "lib"
- libname = "libgs.a"
if self.spec.satisfies("@1.0.1:"):
makefile = "Makefile"
else:
makefile = "src/Makefile"
- cc = self.compiler.cc
+ cc = self["c"].cc
+
+ # Maybe this is too restrictive. Can +shared and +static be okay?
+ # If so, should add +/~ static variant.
+ if "+shared" in spec:
+ libname = "libgs.so"
+ filter_file(r"SHARED.*?=.*0", "SHARED = 1", makefile)
+ filter_file(r"STATIC.*?=.*0", "STATIC = 0", makefile)
+ else:
+ libname = "libgs.a"
if "+mpiio" not in spec:
filter_file(r"MPIIO.*?=.*1", "MPIIO = 0", makefile)
@@ -68,16 +83,14 @@ def install(self, spec, prefix):
if self.spec.satisfies("@1.0.3:"):
make(make_cmd)
make("install", "INSTALL_ROOT=%s" % self.prefix)
- else:
- if self.spec.satisfies("@1.0.1:"):
- make(make_cmd)
- make("install")
- install_tree(lib_dir, prefix.lib)
- elif self.version == Version("1.0.0"):
- with working_dir(src_dir):
- make(make_cmd)
- mkdir(prefix.lib)
- install(libname, prefix.lib)
- # Should only install the headers (this will be fixed in gslib on
- # future releases).
+ elif self.spec.satisfies("@1.0.1:"):
+ make(make_cmd)
+ make("install")
+ install_tree(lib_dir, prefix.lib)
install_tree(src_dir, prefix.include)
+ elif self.version == Version("1.0.0"):
+ with working_dir(src_dir):
+ make(make_cmd)
+ mkdir(prefix.lib)
+ install(libname, prefix.lib)
+ install_tree(src_dir, prefix.include)
diff --git a/var/spack/repos/builtin/packages/gsoap/package.py b/var/spack/repos/builtin/packages/gsoap/package.py
index 3521945c316..0b8ce7cb9c1 100644
--- a/var/spack/repos/builtin/packages/gsoap/package.py
+++ b/var/spack/repos/builtin/packages/gsoap/package.py
@@ -55,8 +55,10 @@ class Gsoap(AutotoolsPackage, SourceforgePackage):
def configure_args(self):
return ["--enable-ipv6"]
- def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
- spack_env.prepend_path("PKG_CONFIG_PATH", "%s/lib/ldconfig" % self.prefix)
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
+ env.prepend_path("PKG_CONFIG_PATH", "%s/lib/ldconfig" % self.prefix)
def flag_handler(self, name, flags):
if name in ["cflags", "cxxflags", "cppflags"]:
diff --git a/var/spack/repos/builtin/packages/gtk-doc/package.py b/var/spack/repos/builtin/packages/gtk-doc/package.py
index 190fe77853f..b0fb47ed3b7 100644
--- a/var/spack/repos/builtin/packages/gtk-doc/package.py
+++ b/var/spack/repos/builtin/packages/gtk-doc/package.py
@@ -49,7 +49,7 @@ class GtkDoc(AutotoolsPackage):
patch("build.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""If test/tools.sh does not find gtkdocize it starts a sh which blocks"""
env.prepend_path("PATH", join_path(self.stage.source_path, "buildsystems", "autotools"))
diff --git a/var/spack/repos/builtin/packages/gtkplus/package.py b/var/spack/repos/builtin/packages/gtkplus/package.py
index 6c537dd55e3..9b951c46b23 100644
--- a/var/spack/repos/builtin/packages/gtkplus/package.py
+++ b/var/spack/repos/builtin/packages/gtkplus/package.py
@@ -107,17 +107,21 @@ def patch(self):
if self.spec.satisfies("@3.24:%gcc@11:"):
filter_file(" '-Werror=array-bounds',", "", "meson.build", string=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
class BuildEnvironment:
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/gtksourceview/package.py b/var/spack/repos/builtin/packages/gtksourceview/package.py
index 2fa15260c05..517ccf17362 100644
--- a/var/spack/repos/builtin/packages/gtksourceview/package.py
+++ b/var/spack/repos/builtin/packages/gtksourceview/package.py
@@ -47,16 +47,20 @@ def url_for_version(self, version):
url += "{0}/gtksourceview-{1}.tar.xz"
return url.format(version.up_to(2), version)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
# TODO: If https://github.com/spack/spack/pull/12344 is merged, this
diff --git a/var/spack/repos/builtin/packages/guidance/package.py b/var/spack/repos/builtin/packages/guidance/package.py
index 11f30b84652..e6e8722690a 100644
--- a/var/spack/repos/builtin/packages/guidance/package.py
+++ b/var/spack/repos/builtin/packages/guidance/package.py
@@ -42,5 +42,5 @@ def install(self, spac, prefix):
with working_dir(join_path("www", "Guidance")): # copy without suffix
install("guidance.pl", join_path(prefix.bin.www.Guidance, "guidance"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix.bin.www.Guidance)
diff --git a/var/spack/repos/builtin/packages/gurobi/package.py b/var/spack/repos/builtin/packages/gurobi/package.py
index aa6c46e936c..353bb42e750 100644
--- a/var/spack/repos/builtin/packages/gurobi/package.py
+++ b/var/spack/repos/builtin/packages/gurobi/package.py
@@ -50,7 +50,7 @@ def patch(self):
gurobi_shell = join_path("linux64", "bin", "gurobi.sh")
filter_file(r":\$PYTHONPATH", "", gurobi_shell)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("GUROBI_HOME", self.prefix)
env.set("GRB_LICENSE_FILE", join_path(self.prefix, "gurobi.lic"))
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/gzip/package.py b/var/spack/repos/builtin/packages/gzip/package.py
index ab283c83933..ffd8cfa14cf 100644
--- a/var/spack/repos/builtin/packages/gzip/package.py
+++ b/var/spack/repos/builtin/packages/gzip/package.py
@@ -4,12 +4,12 @@
from spack.package import *
-class Gzip(AutotoolsPackage):
+class Gzip(AutotoolsPackage, GNUMirrorPackage):
"""GNU Gzip is a popular data compression program originally written by
Jean-loup Gailly for the GNU project."""
homepage = "https://www.gnu.org/software/gzip/"
- url = "https://ftp.gnu.org/gnu/gzip/gzip-1.10.tar.gz"
+ gnu_mirror_path = "gzip/gzip-1.10.tar.gz"
license("GPL-3.0-or-later")
diff --git a/var/spack/repos/builtin/packages/h5bench/package.py b/var/spack/repos/builtin/packages/h5bench/package.py
index a1f6f41860f..c086c7c5dab 100644
--- a/var/spack/repos/builtin/packages/h5bench/package.py
+++ b/var/spack/repos/builtin/packages/h5bench/package.py
@@ -51,7 +51,7 @@ class H5bench(CMakePackage):
depends_on("parallel-netcdf", when="+e3sm")
depends_on("parallel-netcdf", when="+all")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5_HOME", self.spec["hdf5"].prefix)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/h5hut/package.py b/var/spack/repos/builtin/packages/h5hut/package.py
index d3214cf555d..b01f30ae64c 100644
--- a/var/spack/repos/builtin/packages/h5hut/package.py
+++ b/var/spack/repos/builtin/packages/h5hut/package.py
@@ -38,13 +38,6 @@ class H5hut(AutotoolsPackage):
# install: .libs/libH5hut.a: No such file or directory
parallel = False
- @run_before("configure")
- def validate(self):
- """Checks if Fortran compiler is available."""
-
- if self.spec.satisfies("+fortran") and not self.compiler.fc:
- raise RuntimeError("Cannot build Fortran variant without a Fortran compiler.")
-
def flag_handler(self, name, flags):
build_system_flags = []
if (
diff --git a/var/spack/repos/builtin/packages/h5z-zfp/package.py b/var/spack/repos/builtin/packages/h5z-zfp/package.py
index 8ccc9337f37..ddaa7ba86a2 100644
--- a/var/spack/repos/builtin/packages/h5z-zfp/package.py
+++ b/var/spack/repos/builtin/packages/h5z-zfp/package.py
@@ -20,47 +20,19 @@ class H5zZfp(CMakePackage):
version("1.1.0", sha256="48a81e69d1f3b61d9a1eb07e868164fadf3b88690ec930efd849f5889681a893")
variant("fortran", default=True, description="Enable Fortran support")
+ variant("tests", default=False, description="Build tests")
- depends_on("c", type="build") # generated
- depends_on("fortran", type="build") # generated
-
- depends_on("hdf5+fortran", when="+fortran")
- depends_on("hdf5", when="~fortran")
- depends_on("mpi", when="^hdf5+mpi")
+ depends_on("c", type="build")
+ depends_on("fortran", type="build", when="+fortran")
+ depends_on("hdf5")
depends_on("zfp bsws=8")
+ depends_on("hdf5+fortran", when="+fortran")
+ depends_on("mpi", when="^hdf5+mpi")
- @property
- def make_defs(self):
- cc = spack_cc
- fc = spack_fc
- if self.spec.satisfies("^hdf5+mpi"):
- cc = self.spec["mpi"].mpicc
- fc = self.spec["mpi"].mpifc
- make_defs = [
- "PREFIX=%s" % prefix,
- "CC=%s" % cc,
- "HDF5_HOME=%s" % self.spec["hdf5"].prefix,
- "ZFP_HOME=%s" % self.spec["zfp"].prefix,
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("FORTRAN_INTERFACE", "fortran"),
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- if self.spec.satisfies("+fortran") and fc:
- make_defs += ["FC=%s" % fc]
- else:
- make_defs += ["FC="]
-
- return make_defs
-
- @property
- def build_targets(self):
- targets = ["all"]
- return self.make_defs + targets
-
- @property
- def install_targets(self):
- make_args = ["install"]
- return make_args + self.make_defs
-
- @run_after("build")
- @on_package_attributes(run_tests=True)
- def check_build(self):
- make("check", *self.make_defs, parallel=False)
+ return args
diff --git a/var/spack/repos/builtin/packages/hal/package.py b/var/spack/repos/builtin/packages/hal/package.py
index c5a71dc0fb0..5c849f05e1c 100644
--- a/var/spack/repos/builtin/packages/hal/package.py
+++ b/var/spack/repos/builtin/packages/hal/package.py
@@ -42,7 +42,7 @@ def patch(self):
r"^include \$\{sonLibRootDir\}/include\.mk", "# include ${sonLibRootDir}/include.mk"
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("sonLibRootDir", self.spec["sonlib"].prefix)
def install(self, spec, prefix):
@@ -102,5 +102,5 @@ def install(self, spec, prefix):
# The hal directory is a python library so we set the path
# to be the installation root
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/harfbuzz/package.py b/var/spack/repos/builtin/packages/harfbuzz/package.py
index 22f28373c5e..e11df8f692a 100644
--- a/var/spack/repos/builtin/packages/harfbuzz/package.py
+++ b/var/spack/repos/builtin/packages/harfbuzz/package.py
@@ -125,10 +125,12 @@ def flag_handler(self, name, flags):
flags.append("-std=gnu99")
return None, None, flags
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
@@ -138,7 +140,9 @@ def patch(self):
class SetupEnvironment:
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/hc/package.py b/var/spack/repos/builtin/packages/hc/package.py
index a77595ff77b..d02a4709d6b 100644
--- a/var/spack/repos/builtin/packages/hc/package.py
+++ b/var/spack/repos/builtin/packages/hc/package.py
@@ -26,7 +26,7 @@ class Hc(MakefilePackage):
# /usr/bin/ld: cannot find -lggrd
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GMTHOME", self.spec["gmt"].prefix)
env.set("NETCDFHOME", self.spec["netcdf-c"].prefix)
env.set("HC_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/hcoll/package.py b/var/spack/repos/builtin/packages/hcoll/package.py
index 33a51b5b0de..8f8dd824d75 100644
--- a/var/spack/repos/builtin/packages/hcoll/package.py
+++ b/var/spack/repos/builtin/packages/hcoll/package.py
@@ -28,15 +28,16 @@ class Hcoll(Package):
version("3.9.1927")
# ucx throws warnings when running alongside the wrong version of hcoll
- requires("ucx@1.18", when="@4.8.3230")
- requires("ucx@1.17", when="@4.8.3228")
- requires("ucx@1.16:1.17", when="@4.8.3227")
- requires("ucx@1.15:1.16", when="@4.8.3223")
- requires("ucx@1.15", when="@4.8.3221")
- requires("ucx@1.14", when="@4.8.3217:4.8.3220")
- requires("ucx@1.13", when="@4.7.3208")
- requires("ucx@1.12", when="@4.7.3202")
- requires("ucx@1.11", when="@4.7.3199")
+ # commented out until a working solution is found
+ # requires("ucx@1.18", when="@4.8.3230")
+ # requires("ucx@1.17", when="@4.8.3228")
+ # requires("ucx@1.16:1.17", when="@4.8.3227")
+ # requires("ucx@1.15:1.16", when="@4.8.3223")
+ # requires("ucx@1.15", when="@4.8.3221")
+ # requires("ucx@1.14", when="@4.8.3217:4.8.3220")
+ # requires("ucx@1.13", when="@4.7.3208")
+ # requires("ucx@1.12", when="@4.7.3202")
+ # requires("ucx@1.11", when="@4.7.3199")
# HCOLL needs to be added as an external package to SPACK. For this, the
# config file packages.yaml needs to be adjusted:
diff --git a/var/spack/repos/builtin/packages/hdf-eos2/package.py b/var/spack/repos/builtin/packages/hdf-eos2/package.py
index 65e9cf730c4..40de73c4727 100644
--- a/var/spack/repos/builtin/packages/hdf-eos2/package.py
+++ b/var/spack/repos/builtin/packages/hdf-eos2/package.py
@@ -67,6 +67,8 @@ class HdfEos2(AutotoolsPackage):
conflicts("~static", when="~shared", msg="At least one of +static or +shared must be set")
+ depends_on("c", type="build")
+
# Build dependencies
depends_on("hdf")
# Because hdf always depends on zlib and jpeg in spack, the tests below in configure_args
@@ -127,7 +129,7 @@ def flag_handler(self, name, flags):
return flags, None, None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Add flags to LDFLAGS for any dependencies that need it
extra_ldflags = []
# hdf might have link dependency on rpc, if so need to add flags
diff --git a/var/spack/repos/builtin/packages/hdf5-blosc/package.py b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
index 66d817817d4..10c2a348c30 100644
--- a/var/spack/repos/builtin/packages/hdf5-blosc/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
@@ -201,14 +201,18 @@ def check_install(self, spec):
raise RuntimeError("HDF5 Blosc plugin check failed")
shutil.rmtree(checkdir)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/hdf5-vfd-gds/package.py b/var/spack/repos/builtin/packages/hdf5-vfd-gds/package.py
index 79579fbb106..e892f03eff1 100644
--- a/var/spack/repos/builtin/packages/hdf5-vfd-gds/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vfd-gds/package.py
@@ -38,5 +38,5 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-async/package.py b/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
index ca319f8228e..bc25b6f9ba0 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-async/package.py
@@ -41,7 +41,7 @@ class Hdf5VolAsync(CMakePackage):
depends_on("openmpi +thread_multiple", when="^[virtuals=mpi] openmpi@:2")
depends_on("mvapich2 threads=multiple", when="^[virtuals=mpi] mvapich2")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
env.set("MPICH_MAX_THREAD_SAFETY", "multiple")
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 d741663b238..149a6c28f05 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-cache/package.py
@@ -12,6 +12,8 @@ class Hdf5VolCache(CMakePackage):
maintainers("hyoklee", "lrknox")
+ tags = ["e4s"]
+
license("BSD-3-Clause")
version("default", branch="develop")
@@ -30,7 +32,7 @@ def flag_handler(self, name, flags):
flags.append("-Wno-error=incompatible-function-pointer-types")
return (flags, None, None)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-daos/package.py b/var/spack/repos/builtin/packages/hdf5-vol-daos/package.py
index 3a5d7f03286..137284ecc9c 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-daos/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-daos/package.py
@@ -16,6 +16,8 @@ class Hdf5VolDaos(CMakePackage):
maintainers("hyoklee", "soumagne")
+ tags = ["e4s"]
+
license("BSD-3-Clause")
version("master", branch="master", submodules=True)
@@ -41,7 +43,7 @@ def cmake_args(self):
return cmake_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("HDF5_PLUGIN_PATH", self.prefix.lib)
def check(self):
diff --git a/var/spack/repos/builtin/packages/hdf5-vol-log/package.py b/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
index 6fff746f084..c7fc3df1f41 100644
--- a/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-vol-log/package.py
@@ -14,6 +14,8 @@ class Hdf5VolLog(AutotoolsPackage):
git = "https://github.com/DataLib-ECP/vol-log-based.git"
maintainers("hyoklee", "lrknox")
+ tags = ["e4s"]
+
version("master-1.1", branch="master")
version("1.4.0", tag="logvol.1.4.0", commit="786d2cc4da8b4a0827ee00b1b0ab3968ef942f99")
@@ -28,7 +30,7 @@ class Hdf5VolLog(AutotoolsPackage):
depends_on("libtool", type="build")
depends_on("m4", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 4cf2cd44c51..ed206beced0 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -507,21 +507,15 @@ def is_enabled(text):
return results
@when("@:1.8.21,1.10.0:1.10.5+szip")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SZIP_INSTALL", self.spec["szip"].prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# According to related github posts and problems running test_install
# as a stand-alone test, it appears the lib path must be added to
# LD_LIBRARY_PATH.
env.append_path("LD_LIBRARY_PATH", self.prefix.lib)
- @run_before("cmake")
- def fortran_check(self):
- if self.spec.satisfies("+fortran") and not self.compiler.fc:
- msg = "cannot build a Fortran variant without a Fortran compiler"
- raise RuntimeError(msg)
-
def cmake_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/hdfview/package.py b/var/spack/repos/builtin/packages/hdfview/package.py
index 4b824014576..3441594b4a8 100644
--- a/var/spack/repos/builtin/packages/hdfview/package.py
+++ b/var/spack/repos/builtin/packages/hdfview/package.py
@@ -51,7 +51,7 @@ def install(self, spec, prefix):
chmod("+x", self.prefix.bin.hdfview)
install_tree(path, prefix)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5LIBS", self.spec["hdf5"].prefix)
env.set("HDFLIBS", self.spec["hdf"].prefix)
env.set("ANT_HOME", self.spec["ant"].prefix)
diff --git a/var/spack/repos/builtin/packages/heasoft/package.py b/var/spack/repos/builtin/packages/heasoft/package.py
index 08f9198d126..706b6a8611f 100644
--- a/var/spack/repos/builtin/packages/heasoft/package.py
+++ b/var/spack/repos/builtin/packages/heasoft/package.py
@@ -138,7 +138,7 @@ def generate_environment(self):
headas_setup = Executable(headas_setup_file)
headas_setup("sh")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
try:
env.extend(
EnvironmentModifications.from_sourcing_file(
diff --git a/var/spack/repos/builtin/packages/heimdall/package.py b/var/spack/repos/builtin/packages/heimdall/package.py
index 7b76a16d20b..fd35934e972 100644
--- a/var/spack/repos/builtin/packages/heimdall/package.py
+++ b/var/spack/repos/builtin/packages/heimdall/package.py
@@ -32,7 +32,7 @@ class Heimdall(AutotoolsPackage, CudaPackage):
depends_on(f"psrdada cuda_arch={arch}", when=f"cuda_arch={arch}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec["psrdada"].prefix.bin)
env.prepend_path("PATH", self.prefix.bin)
env.prepend_path("LD_LIBRARY_PATH", self.spec["dedisp"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/helics/package.py b/var/spack/repos/builtin/packages/helics/package.py
index 85c891f3e4e..38361683385 100644
--- a/var/spack/repos/builtin/packages/helics/package.py
+++ b/var/spack/repos/builtin/packages/helics/package.py
@@ -197,7 +197,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+python"):
env.prepend_path("PYTHONPATH", self.prefix.python)
diff --git a/var/spack/repos/builtin/packages/hepmcanalysis/package.py b/var/spack/repos/builtin/packages/hepmcanalysis/package.py
index 9a6314303ea..769cb54ffda 100644
--- a/var/spack/repos/builtin/packages/hepmcanalysis/package.py
+++ b/var/spack/repos/builtin/packages/hepmcanalysis/package.py
@@ -34,7 +34,7 @@ def patch(self):
"config.mk",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HepMCdir", self.spec["hepmc"].prefix)
env.set("FastJetdir", self.spec["fastjet"].prefix)
env.set("CLHEPdir", self.spec["clhep"].prefix)
diff --git a/var/spack/repos/builtin/packages/hermes-shm/package.py b/var/spack/repos/builtin/packages/hermes-shm/package.py
index 655bd46b298..04262bdb915 100644
--- a/var/spack/repos/builtin/packages/hermes-shm/package.py
+++ b/var/spack/repos/builtin/packages/hermes-shm/package.py
@@ -41,6 +41,8 @@ class HermesShm(CMakePackage):
depends_on("yaml-cpp")
depends_on("doxygen@1.9.3:", type="build")
depends_on("libelf")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
# Machine variants
variant("ares", default=False, description="Build in ares")
diff --git a/var/spack/repos/builtin/packages/hermes/package.py b/var/spack/repos/builtin/packages/hermes/package.py
index 49fdb7d65a5..bf0fce1b2c7 100644
--- a/var/spack/repos/builtin/packages/hermes/package.py
+++ b/var/spack/repos/builtin/packages/hermes/package.py
@@ -84,19 +84,19 @@ def cmake_args(self):
args.append(self.define("HERMES_ENABLE_PYTHON", "ON"))
return args
- def set_include(self, env, path):
+ def set_include(self, env: EnvironmentModifications, path: str):
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):
+ def set_lib(self, env: EnvironmentModifications, path: str):
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):
+ def set_flags(self, env: EnvironmentModifications, path: str):
self.set_include(env, "{}/include".format(self.prefix))
self.set_include(env, "{}/include".format(self.prefix))
self.set_lib(env, "{}/lib".format(self.prefix))
@@ -104,8 +104,10 @@ def set_flags(self, env):
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):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
+ self.set_flags(env)
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.set_flags(env)
diff --git a/var/spack/repos/builtin/packages/herwig3/package.py b/var/spack/repos/builtin/packages/herwig3/package.py
index 684b76cb948..ab409becfa9 100644
--- a/var/spack/repos/builtin/packages/herwig3/package.py
+++ b/var/spack/repos/builtin/packages/herwig3/package.py
@@ -91,7 +91,7 @@ def flag_handler(self, name, flags):
return (flags, None, None)
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
thepeg_home = self.spec["thepeg"].prefix
env.prepend_path("LD_LIBRARY_PATH", thepeg_home.lib.ThePEG)
env.set("HERWIGINCLUDE", "-I" + self.prefix.include)
diff --git a/var/spack/repos/builtin/packages/herwigpp/package.py b/var/spack/repos/builtin/packages/herwigpp/package.py
index f81b417802f..5591939fcdf 100644
--- a/var/spack/repos/builtin/packages/herwigpp/package.py
+++ b/var/spack/repos/builtin/packages/herwigpp/package.py
@@ -33,7 +33,7 @@ class Herwigpp(AutotoolsPackage):
depends_on("fastjet")
depends_on("thepeg@1.9.2", when="@2.7.1")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["thepeg"].prefix.lib.ThePEG)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/hicolor-icon-theme/package.py b/var/spack/repos/builtin/packages/hicolor-icon-theme/package.py
index f119eff1901..ff100a76f6f 100644
--- a/var/spack/repos/builtin/packages/hicolor-icon-theme/package.py
+++ b/var/spack/repos/builtin/packages/hicolor-icon-theme/package.py
@@ -17,14 +17,18 @@ class HicolorIconTheme(AutotoolsPackage):
version("0.17", sha256="317484352271d18cbbcfac3868eab798d67fff1b8402e740baa6ff41d588a9d8")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/hicops/package.py b/var/spack/repos/builtin/packages/hicops/package.py
index 7f45ddcb3a8..95dd1d9cada 100644
--- a/var/spack/repos/builtin/packages/hicops/package.py
+++ b/var/spack/repos/builtin/packages/hicops/package.py
@@ -109,7 +109,7 @@ class Hicops(CMakePackage):
conflicts("+mpip -timemory")
conflicts("+mpip -mpi")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.tools)
env.prepend_path("PATH", self.prefix.bin.tools)
env.set("HICOPS_INSTALL", self.prefix)
diff --git a/var/spack/repos/builtin/packages/hiop/package.py b/var/spack/repos/builtin/packages/hiop/package.py
index 8d85f27019e..9afe3602178 100644
--- a/var/spack/repos/builtin/packages/hiop/package.py
+++ b/var/spack/repos/builtin/packages/hiop/package.py
@@ -21,6 +21,9 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
license("BSD-3-Clause")
# Most recent tagged snapshot is the preferred version when profiling.
+ version(
+ "1.1.1", tag="v1.1.1", commit="d8762e05150b2040a27f69d8bf6603f22190a869", submodules=True
+ )
version(
"1.1.0", tag="v1.1.0", commit="7ccfa86a71fdb670ae690199ac676f3c1365799a", submodules=True
)
@@ -72,6 +75,11 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
version("master", branch="master")
version("develop", branch="develop")
+ variant(
+ "axom",
+ default=False,
+ description="Enable/Disable AXOM to use Sidre for scalable checkpointing",
+ )
variant("jsrun", default=False, description="Enable/Disable jsrun command for testing")
variant("shared", default=False, description="Enable/Disable shared libraries")
variant("mpi", default=True, description="Enable/Disable MPI")
@@ -91,9 +99,9 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
description="Enable/disable cuSovler LU refactorization",
)
- 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")
depends_on("lapack")
depends_on("blas")
@@ -143,15 +151,20 @@ class Hiop(CMakePackage, CudaPackage, ROCmPackage):
# RAJA > 0.14 and Umpire > 6.0 require c++ std 14
# We are working on supporting newer Umpire/RAJA versions
- depends_on("raja@0.14", when="@0.5:+raja")
+ depends_on("raja@2024.07.0", when="@1.1.1:+raja")
+ depends_on("raja@0.14", when="@0.5:1.1.0+raja")
depends_on("raja@:0.13", when="@0.3.99:0.4+raja")
- depends_on("umpire@6", when="@0.5:+raja")
+ depends_on("umpire@2024.07.0", when="@1.1.1:+raja")
+ depends_on("umpire@6", when="@0.5:1.1.0+raja")
depends_on("umpire@:5", when="@0.3.99:0.4+raja")
- depends_on("camp@0.2.3:0.2", when="@0.3.99:+raja")
+ depends_on("camp@0.2.3:0.2", when="@0.3.99:1.1.0+raja")
+ depends_on("camp@2024.07.0", when="@1.1.1+raja")
# This is no longer a requirement in RAJA > 0.14
depends_on("umpire+cuda~shared", when="+raja+cuda ^raja@:0.14")
+ depends_on("axom", when="+axom")
+
conflicts(
"+shared",
when="+cuda+raja ^raja@:0.14",
@@ -203,6 +216,7 @@ def cmake_args(self):
self.define_from_variant("HIOP_USE_MPI", "mpi"),
self.define_from_variant("HIOP_DEEPCHECKS", "deepchecking"),
self.define_from_variant("HIOP_USE_CUDA", "cuda"),
+ self.define_from_variant("HIOP_USE_AXOM", "axom"),
self.define_from_variant("HIOP_USE_HIP", "rocm"),
self.define_from_variant("HIOP_USE_RAJA", "raja"),
self.define_from_variant("HIOP_USE_UMPIRE", "raja"),
@@ -272,6 +286,9 @@ def cmake_args(self):
if spec.satisfies("+sparse"):
args.append(self.define("HIOP_COINHSL_DIR", spec["coinhsl"].prefix))
+ if spec.satisfies("+axom"):
+ args.append(self.define("AXOM_DIR", spec["axom"].prefix))
+
return args
# If testing on a cluster without access to home directory in a job, you may
diff --git a/var/spack/repos/builtin/packages/hip-rocclr/package.py b/var/spack/repos/builtin/packages/hip-rocclr/package.py
index e324bf3357f..c1cc3ade7c7 100644
--- a/var/spack/repos/builtin/packages/hip-rocclr/package.py
+++ b/var/spack/repos/builtin/packages/hip-rocclr/package.py
@@ -22,7 +22,7 @@ class HipRocclr(CMakePackage):
license("MIT")
- version("master", branch="main")
+ version("master", branch="main", deprecated=True)
version("5.6.1", sha256="cc9a99c7e4de3d9360c0a471b27d626e84a39c9e60e0aff1e8e1500d82391819")
version("5.6.0", sha256="864f87323e793e60b16905284fba381a7182b960dd4a37fb67420c174442c03c")
version("5.5.1", sha256="1375fc7723cfaa0ae22a78682186d4804188b0a54990bfd9c0b8eb421b85e37e")
diff --git a/var/spack/repos/builtin/packages/hip-tensor/package.py b/var/spack/repos/builtin/packages/hip-tensor/package.py
index 5c3dbdd6dfe..2b479d37c40 100644
--- a/var/spack/repos/builtin/packages/hip-tensor/package.py
+++ b/var/spack/repos/builtin/packages/hip-tensor/package.py
@@ -15,7 +15,7 @@ class HipTensor(CMakePackage, ROCmPackage):
maintainers("srekolam", "afzpatel")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="2f4e34c5a96004e24fcdf70f9157f1079ab177a78f6dbf96ea8290f668257c23")
version("6.3.2", sha256="094db6d759eb32e9d15c36fce7f5b5d46ba81416953a8d9435b2fb9c161d8c83")
version("6.3.1", sha256="142401331526e6da3fa172cce283f1c053056cb59cf431264443da76cee2f168")
@@ -69,7 +69,7 @@ class HipTensor(CMakePackage, ROCmPackage):
]:
depends_on(f"hipcc@{ver}", when=f"@{ver}")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@6.1"):
env.set("CXX", self.spec["hipcc"].prefix.bin.hipcc)
else:
diff --git a/var/spack/repos/builtin/packages/hip-tests/package.py b/var/spack/repos/builtin/packages/hip-tests/package.py
index 4d7ba5d2f56..d794b07a412 100644
--- a/var/spack/repos/builtin/packages/hip-tests/package.py
+++ b/var/spack/repos/builtin/packages/hip-tests/package.py
@@ -83,7 +83,7 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/hip/package.py b/var/spack/repos/builtin/packages/hip/package.py
index 055c74f73bd..03b7e9f30de 100644
--- a/var/spack/repos/builtin/packages/hip/package.py
+++ b/var/spack/repos/builtin/packages/hip/package.py
@@ -24,7 +24,7 @@ class Hip(CMakePackage):
license("MIT")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="aa3a5466304d1dbee0d976b50fccb710dd12e2e1d5534793396447c0ff845e2c")
version("6.3.2", sha256="66a4eba98bd74fc7126ce7cb4d59653b22075fe95a70412fe283dc806ae366e0")
version("6.3.1", sha256="76f862493c4912a06e0e0b8da3917c2ba7481f1e05f2c23ffd5e05f8c44e3037")
@@ -532,13 +532,15 @@ def set_variables(self, env):
# This is picked up by CMake when using HIP as a CMake language.
env.append_path("HIPFLAGS", f"--gcc-toolchain={self.compiler.prefix}", separator=" ")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
self.set_variables(env)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.set_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.set_variables(env)
if "amdgpu_target" in dependent_spec.variants:
@@ -546,7 +548,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
if "none" not in arch and "auto" not in arch:
env.set("HCC_AMDGPU_TARGET", ",".join(arch.value))
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_dependent_build_environment(env, dependent_spec)
def setup_dependent_package(self, module, dependent_spec):
diff --git a/var/spack/repos/builtin/packages/hipblas/package.py b/var/spack/repos/builtin/packages/hipblas/package.py
index a518769e520..b8c38fa6497 100644
--- a/var/spack/repos/builtin/packages/hipblas/package.py
+++ b/var/spack/repos/builtin/packages/hipblas/package.py
@@ -22,8 +22,8 @@ class Hipblas(CMakePackage, CudaPackage, ROCmPackage):
license("MIT")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="8f645a5c9298170e71354437188eeca8272ff2b98077e9f34d1ca0fd7f27b7f8")
version("6.3.2", sha256="6e86d4f8657e13665e37fdf3174c3a30f4c7dff2c4e2431d1be110cd7d463971")
version("6.3.1", sha256="77a1845254d738c43a48bc52fa3e94499ed83535b5771408ff476122bc4b7b7c")
@@ -147,7 +147,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/hipblaslt/package.py b/var/spack/repos/builtin/packages/hipblaslt/package.py
index 54c45b5dcad..90c306b3a07 100644
--- a/var/spack/repos/builtin/packages/hipblaslt/package.py
+++ b/var/spack/repos/builtin/packages/hipblaslt/package.py
@@ -82,7 +82,7 @@ class Hipblaslt(CMakePackage):
patch("0001-Set-LLVM_Path-Add-Hiblas-Include-to-CmakeLists-6.1.Patch", when="@6.1:6.2")
patch("0001-Set-LLVM-Path-6.3.Patch", when="@6.3:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("@6.3.0:"):
env.set(
diff --git a/var/spack/repos/builtin/packages/hipcub/package.py b/var/spack/repos/builtin/packages/hipcub/package.py
index f2c3d4dd2e2..cafe568b849 100644
--- a/var/spack/repos/builtin/packages/hipcub/package.py
+++ b/var/spack/repos/builtin/packages/hipcub/package.py
@@ -96,7 +96,7 @@ class Hipcub(CMakePackage, CudaPackage, ROCmPackage):
# fix hardcoded search in /opt/rocm and broken config mode search
patch("find-hip-cuda-rocm-5.3.patch", when="@5.3: +cuda")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+rocm"):
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
diff --git a/var/spack/repos/builtin/packages/hipfft/package.py b/var/spack/repos/builtin/packages/hipfft/package.py
index e86445d7f25..e6ab3069707 100644
--- a/var/spack/repos/builtin/packages/hipfft/package.py
+++ b/var/spack/repos/builtin/packages/hipfft/package.py
@@ -23,7 +23,7 @@ class Hipfft(CMakePackage, CudaPackage, ROCmPackage):
license("MIT")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="c032d59a45b0eb4441539498bd4c22d8442fbc554cb08d6cb452a1d27be6c57c")
version("6.3.2", sha256="5d9e662c7d67f4c814cad70476b57651df5ae6b65f371ca6dbb5aa51d9eeb6f5")
version("6.3.1", sha256="b709df2d0115748ed004d0cddce829cb0f9ec3761eb855e61f0097cab04e4806")
@@ -105,7 +105,7 @@ class Hipfft(CMakePackage, CudaPackage, ROCmPackage):
# https://github.com/ROCm/rocFFT/pull/85)
patch("001-remove-submodule-and-sync-shared-files-from-rocFFT.patch", when="@6.0.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/hipfort/package.py b/var/spack/repos/builtin/packages/hipfort/package.py
index 2f8b4c06735..eca0015408b 100644
--- a/var/spack/repos/builtin/packages/hipfort/package.py
+++ b/var/spack/repos/builtin/packages/hipfort/package.py
@@ -75,7 +75,7 @@ class Hipfort(CMakePackage):
]:
depends_on(f"hip@{ver}", type="build", when=f"@{ver}")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/hipify-clang/package.py b/var/spack/repos/builtin/packages/hipify-clang/package.py
index 461650a343d..8d6f7423bd2 100644
--- a/var/spack/repos/builtin/packages/hipify-clang/package.py
+++ b/var/spack/repos/builtin/packages/hipify-clang/package.py
@@ -18,7 +18,7 @@ class HipifyClang(CMakePackage):
license("MIT")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="94d32b0e02c0c34debb9a8034cb5fcd6c2ee35b67350c64690034cf94cd38ddd")
version("6.3.2", sha256="c0da5118be8207fab6d19803417c0b8d2db5bc766279038527cbd6fa92b25c67")
version("6.3.1", sha256="5f9d9a65545f97b18c6a0d4394dca1bcdee10737a5635b79378ea505081f9315")
@@ -106,7 +106,7 @@ class HipifyClang(CMakePackage):
]:
depends_on(f"rocm-core@{ver}", when=f"@{ver}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# The installer puts the binaries directly into the prefix
# instead of prefix/bin, so add prefix to the PATH
env.prepend_path("PATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/hiprand/package.py b/var/spack/repos/builtin/packages/hiprand/package.py
index ac990e810b5..b95939d53c4 100644
--- a/var/spack/repos/builtin/packages/hiprand/package.py
+++ b/var/spack/repos/builtin/packages/hiprand/package.py
@@ -22,8 +22,8 @@ class Hiprand(CMakePackage, CudaPackage, ROCmPackage):
license("MIT")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="ea0d7638a463c06d30692205f8c591d3fe025b58a772226ca1c972e723118a2f")
version("6.3.2", sha256="0a08ed7554c161b095c866cd5e6f0d63cdf063e5b3c1183afa6ac18bad94a575")
version("6.3.1", sha256="ec43bf64eda348cf53c2767e553fd9561540dc50ae3ce95ca916404aa9a3eafb")
@@ -118,7 +118,7 @@ class Hiprand(CMakePackage, CudaPackage, ROCmPackage):
"rocrand amdgpu_target={0}".format(tgt), when="+rocm amdgpu_target={0}".format(tgt)
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/hipsolver/package.py b/var/spack/repos/builtin/packages/hipsolver/package.py
index 911d54331f9..38a6382d247 100644
--- a/var/spack/repos/builtin/packages/hipsolver/package.py
+++ b/var/spack/repos/builtin/packages/hipsolver/package.py
@@ -27,8 +27,8 @@ class Hipsolver(CMakePackage, CudaPackage, ROCmPackage):
license("MIT")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="529263f9abe5b7485bbabedc3993630abaa0d5fd547c4add0993d1cb0d71e226")
version("6.3.2", sha256="885c999da8e4aa0b4cb9584bc0fc0d6a8c8d56f5e7ee6d211c608003eff22aa7")
version("6.3.1", sha256="793074ebaa4a3b16dc6e4d2a54ecbb259f1e0ec7fdcd7f885da622a1d1478b76")
@@ -144,7 +144,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/hipsparse/package.py b/var/spack/repos/builtin/packages/hipsparse/package.py
index 22d2ef1b6db..071ca4df56f 100644
--- a/var/spack/repos/builtin/packages/hipsparse/package.py
+++ b/var/spack/repos/builtin/packages/hipsparse/package.py
@@ -115,7 +115,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/hipsparselt/package.py b/var/spack/repos/builtin/packages/hipsparselt/package.py
index 3fca3d9074f..047ac36ff98 100644
--- a/var/spack/repos/builtin/packages/hipsparselt/package.py
+++ b/var/spack/repos/builtin/packages/hipsparselt/package.py
@@ -91,7 +91,7 @@ class Hipsparselt(CMakePackage, ROCmPackage):
patch("0001-update-llvm-path-add-hipsparse-include-dir-for-spack-6.2.patch", when="@6.2")
patch("0001-update-llvm-path-add-hipsparse-include-dir-for-spack-6.3.patch", when="@6.3")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/hipsycl/package.py b/var/spack/repos/builtin/packages/hipsycl/package.py
index 389b41090ea..ed7fc1f0a06 100644
--- a/var/spack/repos/builtin/packages/hipsycl/package.py
+++ b/var/spack/repos/builtin/packages/hipsycl/package.py
@@ -38,6 +38,8 @@ class Hipsycl(CMakePackage, ROCmPackage):
variant("cuda", default=False, description="Enable CUDA backend for SYCL kernels")
variant("rocm", default=False, description="Enable ROCM backend for SYCL kernels")
+ depends_on("cxx", type="build")
+
depends_on("cmake@3.5:", type="build")
depends_on("boost +filesystem", when="@:0.8")
depends_on("boost@1.67.0:1.69.0 +filesystem +fiber +context cxxstd=17", when="@0.9.1:")
diff --git a/var/spack/repos/builtin/packages/hiptt/package.py b/var/spack/repos/builtin/packages/hiptt/package.py
index fa60f5e5b12..e41969ba1c1 100644
--- a/var/spack/repos/builtin/packages/hiptt/package.py
+++ b/var/spack/repos/builtin/packages/hiptt/package.py
@@ -24,7 +24,9 @@ class Hiptt(MakefilePackage, ROCmPackage):
patch("bugfix_make.patch")
# To enable this package add it to the LD_LIBRARY_PATH
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
hiptt_home = self.prefix
env.prepend_path("cuTT_ROOT", hiptt_home)
env.prepend_path("cuTT_LIBRARY", hiptt_home.lib)
diff --git a/var/spack/repos/builtin/packages/hpc-beeflow/package.py b/var/spack/repos/builtin/packages/hpc-beeflow/package.py
index ca5de3e5a7f..e4e9b48a0a0 100644
--- a/var/spack/repos/builtin/packages/hpc-beeflow/package.py
+++ b/var/spack/repos/builtin/packages/hpc-beeflow/package.py
@@ -17,15 +17,22 @@ class HpcBeeflow(PythonPackage):
specified to run on."""
homepage = "https://github.com/lanl/bee"
- pypi = "hpc_beeflow/hpc_beeflow-0.1.9.tar.gz"
+ pypi = "hpc_beeflow/hpc_beeflow-0.1.10.tar.gz"
- # maintainers("pagrubel")
+ maintainers("pagrubel")
+
+ tags = ["e4s"]
license("MIT")
+ version("0.1.10", sha256="b7863798e15591a16f6cd265f9b5b7385779630f1c37d8a2a5178b8bf89fc664")
version("0.1.9", sha256="196eb9155a5ca6e35d0cc514e0609cf352fc757088707306653496b83a311ac1")
- depends_on("python@3.8.3:3.12.2", type=("build", "run"))
+ depends_on("neo4j@5.17.0", type=("build", "run"))
+ depends_on("redis@7.4.0", type=("build", "run"))
+
+ depends_on("python@3.8.3:3.13.0", when="@0.1.10:", type=("build", "run"))
+ depends_on("python@3.8.3:3.12.2", when="@:0.1.9", type=("build", "run"))
depends_on("py-poetry@0.12:", type="build")
depends_on("py-flask@2.0:", type=("build", "run"))
@@ -37,12 +44,28 @@ class HpcBeeflow(PythonPackage):
depends_on("py-cwl-utils@0.16:", type=("build", "run"))
depends_on("py-apscheduler@3.6.3:", type=("build", "run"))
depends_on("py-jsonpickle@2.2.0:", type=("build", "run"))
- depends_on("py-requests@:2.28", type=("build", "run"))
- depends_on("py-requests-unixsocket@0.3.0:", type=("build", "run"))
+ depends_on("py-requests@:2.28", when="@:0.1.9", type=("build", "run"))
+ depends_on("py-requests@2.32.3:", when="@0.1.10:", type=("build", "run"))
+ depends_on("py-requests-unixsocket@0.3.0:", when="@:0.1.9", type=("build", "run"))
+ depends_on("py-requests-unixsocket@0.4.1:", when="@0.1.10:", type=("build", "run"))
depends_on("py-python-daemon@2.3.1:", type=("build", "run"))
depends_on("py-gunicorn@20.1.0:22", type=("build", "run"))
- depends_on("py-typer@0.5.0:", type=("build", "run"))
+ depends_on("py-typer@0.5.0", type=("build", "run"))
depends_on("py-cffi@1.15.1:", type=("build", "run"))
depends_on("py-celery+redis+sqlalchemy@5.3.4:", type=("build", "run"))
depends_on("py-docutils@0.18.1", type=("build", "run"))
depends_on("py-graphviz@0.20.3:", type=("build", "run"))
+ depends_on("py-networkx@3.1", when="@0.1.10:", type=("build", "run"))
+ depends_on("py-pre-commit@3.5.0", when="@0.1.10:", type=("build", "run"))
+ depends_on("py-mypy-extensions", type=("build", "run"))
+
+ def setup_run_environment(self, env):
+
+ neo4j_bin = join_path(self.spec["neo4j"].prefix, "packaging/standalone/target")
+ redis_bin = join_path(self.spec["redis"].prefix, "bin")
+
+ env.prepend_path("PATH", neo4j_bin)
+ env.prepend_path("PATH", redis_bin)
+
+ env.set("neo4j_path", neo4j_bin)
+ env.set("redis_path", redis_bin)
diff --git a/var/spack/repos/builtin/packages/hpcg/package.py b/var/spack/repos/builtin/packages/hpcg/package.py
index 2353292fef7..71991572eeb 100644
--- a/var/spack/repos/builtin/packages/hpcg/package.py
+++ b/var/spack/repos/builtin/packages/hpcg/package.py
@@ -68,6 +68,7 @@ def configure(self, spec, prefix):
and not spec.satisfies("%arm")
and not spec.satisfies("%intel")
and not spec.satisfies("%oneapi")
+ and not spec.satisfies("%fj")
and not spec.satisfies("%clang")
):
CXXFLAGS += " -ftree-vectorizer-verbose=0 "
diff --git a/var/spack/repos/builtin/packages/hpctoolkit/package.py b/var/spack/repos/builtin/packages/hpctoolkit/package.py
index bd69978d307..04f21fb464e 100644
--- a/var/spack/repos/builtin/packages/hpctoolkit/package.py
+++ b/var/spack/repos/builtin/packages/hpctoolkit/package.py
@@ -267,7 +267,7 @@ def patch(self):
# module file. The run dependencies are all curried into hpctoolkit
# and we don't want to risk exposing a package if the application
# uses a different version of the same package.
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.clear()
env.prepend_path("PATH", spec.prefix.bin)
@@ -281,7 +281,7 @@ def setup_run_environment(self, env):
def test_sort(self):
"""build and run selection sort unit test"""
exe = "tst-sort"
- cxx = which(os.environ["CXX"])
+ cxx = Executable(self["cxx"].cxx)
cxx(self.test_suite.current_test_data_dir.join("sort.cpp"), "-o", exe)
hpcrun = which("hpcrun")
diff --git a/var/spack/repos/builtin/packages/hpcx-mpi/package.py b/var/spack/repos/builtin/packages/hpcx-mpi/package.py
index 004e509d94a..e5f7c5219fb 100644
--- a/var/spack/repos/builtin/packages/hpcx-mpi/package.py
+++ b/var/spack/repos/builtin/packages/hpcx-mpi/package.py
@@ -38,8 +38,10 @@ def make_base_environment(self, prefix, env):
env.prepend_path("LD_LIBRARY_PATH", prefix.lib)
env.set("OPAL_PREFIX", prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.make_base_environment(self.prefix, env)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.make_base_environment(self.prefix, env)
diff --git a/var/spack/repos/builtin/packages/hping/package.py b/var/spack/repos/builtin/packages/hping/package.py
index d186867825d..89862e860ed 100644
--- a/var/spack/repos/builtin/packages/hping/package.py
+++ b/var/spack/repos/builtin/packages/hping/package.py
@@ -22,7 +22,7 @@ class Hping(AutotoolsPackage):
depends_on("libpcap")
depends_on("tcl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("TCLSH", self.spec["tcl"].prefix.bin.tclsh)
@run_before("configure")
@@ -37,5 +37,5 @@ def install(self, spec, prefix):
mkdirp(prefix.sbin)
make("install")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
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 0df4ab5fe3c..3e337e7f90b 100644
--- a/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py
+++ b/var/spack/repos/builtin/packages/hsa-rocr-dev/package.py
@@ -22,7 +22,7 @@ class HsaRocrDev(CMakePackage):
maintainers("srekolam", "renjithravindrankannath", "haampie", "afzpatel")
libraries = ["libhsa-runtime64"]
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="aa2e30d3d68707d6df4840e954bb08cc13cd312cec1a98a64d97adbe07262f50")
version("6.3.2", sha256="aaecaa7206b6fa1d5d7b8f7c1f7c5057a944327ba4779448980d7e7c7122b074")
version("6.3.1", sha256="547ceeeda9a41cdffa21e57809dc5834f94938a0a2809c283aebcbcf01901df0")
@@ -158,7 +158,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@5.7: +asan"):
numa_inc = self.spec["numactl"].prefix.include
numa_lib = self.spec["numactl"].prefix.lib
diff --git a/var/spack/repos/builtin/packages/hsakmt-roct/package.py b/var/spack/repos/builtin/packages/hsakmt-roct/package.py
index 5c2526d2559..b274bed223d 100644
--- a/var/spack/repos/builtin/packages/hsakmt-roct/package.py
+++ b/var/spack/repos/builtin/packages/hsakmt-roct/package.py
@@ -20,7 +20,7 @@ class HsakmtRoct(CMakePackage):
maintainers("srekolam", "renjithravindrankannath")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.2.4", sha256="5c71655e3a1b9d1404dc8cb64b9d2fadd27e67606aaa8aec0c325768d8c483c0")
version("6.2.1", sha256="bba5dd8cce595d94d6a8e467dbd6de9e921f81e665ca8aac1e346e0ade7620f0")
version("6.2.0", sha256="73df98ca2be8a887cb76554c23f148ef6556bdbccfac99f34111fa1f87fd7c5d")
diff --git a/var/spack/repos/builtin/packages/hwdata/package.py b/var/spack/repos/builtin/packages/hwdata/package.py
index d7045662f25..90f360e7f96 100644
--- a/var/spack/repos/builtin/packages/hwdata/package.py
+++ b/var/spack/repos/builtin/packages/hwdata/package.py
@@ -13,5 +13,9 @@ class Hwdata(AutotoolsPackage):
license("GPL-2.0-or-later OR XFree86-1.1")
+ version("0.392", sha256="1f472d8f2ec824d4efe6a75480767c4ce240fa5d91b6428d9f8775035da3ba1f")
version("0.345", sha256="fafcc97421ba766e08a2714ccc3eebb0daabc99e67d53c2d682721dd01ccf7a7")
version("0.340", sha256="e3a0ef18af6795a362345a2c2c7177be351cb27b4cc0ed9278b7409759258802")
+
+ def configure_args(self):
+ return [f"--datarootdir={self.prefix.share}"] # Will default to /usr/share if not set
diff --git a/var/spack/repos/builtin/packages/hybpiper/package.py b/var/spack/repos/builtin/packages/hybpiper/package.py
index 5b0e23e8aa2..d8631404a0c 100644
--- a/var/spack/repos/builtin/packages/hybpiper/package.py
+++ b/var/spack/repos/builtin/packages/hybpiper/package.py
@@ -57,7 +57,7 @@ class Hybpiper(PythonPackage, Package):
depends_on("spades")
depends_on("spades@3.15.4:", when="@2.1:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("HYBPIPER_HOME", self.prefix)
@when("@:1.3.1")
diff --git a/var/spack/repos/builtin/packages/hybrid-lambda/package.py b/var/spack/repos/builtin/packages/hybrid-lambda/package.py
index 0a06b51dbf5..4f7cdb49ea8 100644
--- a/var/spack/repos/builtin/packages/hybrid-lambda/package.py
+++ b/var/spack/repos/builtin/packages/hybrid-lambda/package.py
@@ -44,6 +44,6 @@ def change_install_option_in_makefile(self):
filter_file(r"INSTALL = /bin/install -c", "INSTALL = /bin/install -C", "Makefile")
@on_package_attributes(run_tests=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# build testcases with cppunit
env.prepend_path("LD_LIBRARY_PATH", self.spec["cppunit"].libs.directories[0])
diff --git a/var/spack/repos/builtin/packages/hydrogen/package.py b/var/spack/repos/builtin/packages/hydrogen/package.py
index fd7fa7878b0..1a04f5daa03 100644
--- a/var/spack/repos/builtin/packages/hydrogen/package.py
+++ b/var/spack/repos/builtin/packages/hydrogen/package.py
@@ -279,7 +279,7 @@ def initconfig_package_entries(self):
return entries
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+openmp %apple-clang"):
env.append_flags("CPPFLAGS", self.compiler.openmp_flag)
env.append_flags("CFLAGS", self.spec["llvm-openmp"].headers.include_flags)
diff --git a/var/spack/repos/builtin/packages/hypre-cmake/package.py b/var/spack/repos/builtin/packages/hypre-cmake/package.py
index 4be4034190e..49534684c29 100644
--- a/var/spack/repos/builtin/packages/hypre-cmake/package.py
+++ b/var/spack/repos/builtin/packages/hypre-cmake/package.py
@@ -80,7 +80,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda"):
env.set("CUDA_HOME", self.spec["cuda"].prefix)
env.set("CUDA_PATH", self.spec["cuda"].prefix)
diff --git a/var/spack/repos/builtin/packages/hypre/package.py b/var/spack/repos/builtin/packages/hypre/package.py
index 5d0059e2261..6933cefdf4f 100644
--- a/var/spack/repos/builtin/packages/hypre/package.py
+++ b/var/spack/repos/builtin/packages/hypre/package.py
@@ -3,7 +3,6 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
-import sys
from spack.package import *
@@ -56,15 +55,7 @@ class Hypre(AutotoolsPackage, CudaPackage, ROCmPackage):
version("2.10.1", sha256="a4a9df645ebdc11e86221b794b276d1e17974887ead161d5050aaf0b43bb183a")
version("2.10.0b", sha256="b55dbdc692afe5a00490d1ea1c38dd908dae244f7bdd7faaf711680059824c11")
- # Versions 2.13.0 and later can be patched to build shared
- # libraries on Darwin; the patch for this capability does not
- # apply to version 2.12.1 and earlier due to changes in the build system
- # between versions 2.12.1 and 2.13.0.
- variant(
- "shared",
- default=(sys.platform != "darwin"),
- description="Build shared library (disables static library)",
- )
+ variant("shared", default=True, description="Build shared library (disables static library)")
# Use internal SuperLU routines for FEI - version 2.12.1 and below
variant("internal-superlu", default=False, description="Use internal SuperLU routines")
variant(
@@ -118,9 +109,11 @@ class Hypre(AutotoolsPackage, CudaPackage, ROCmPackage):
def patch(self): # fix sequential compilation in 'src/seq_mv'
filter_file("\tmake", "\t$(MAKE)", "src/seq_mv/Makefile")
- 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="+cuda")
+ depends_on("cxx", type="build", when="+rocm")
+ depends_on("cxx", type="build", when="+sycl")
+ depends_on("fortran", type="build", when="+fortran")
depends_on("mpi", when="+mpi")
depends_on("blas", when="+lapack")
@@ -354,7 +347,7 @@ def configure_args(self):
return configure_args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+mpi"):
env.set("CC", spec["mpi"].mpicc)
diff --git a/var/spack/repos/builtin/packages/icedtea/package.py b/var/spack/repos/builtin/packages/icedtea/package.py
index 70ab9bab077..460de022236 100644
--- a/var/spack/repos/builtin/packages/icedtea/package.py
+++ b/var/spack/repos/builtin/packages/icedtea/package.py
@@ -189,12 +189,14 @@ def configure_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set JAVA_HOME."""
env.set("JAVA_HOME", self.home)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set JAVA_HOME and CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
@@ -210,7 +212,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
classpath = os.pathsep.join(class_paths)
env.set("CLASSPATH", classpath)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
diff --git a/var/spack/repos/builtin/packages/icet/package.py b/var/spack/repos/builtin/packages/icet/package.py
index 9cd69ac8586..6bd028fa61e 100644
--- a/var/spack/repos/builtin/packages/icet/package.py
+++ b/var/spack/repos/builtin/packages/icet/package.py
@@ -30,6 +30,8 @@ def cmake_args(self):
self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
]
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Work-around for ill-placed CMake modules"""
env.prepend_path("CMAKE_PREFIX_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/icu4c/package.py b/var/spack/repos/builtin/packages/icu4c/package.py
index 93de1b824a1..0e83737c6d3 100644
--- a/var/spack/repos/builtin/packages/icu4c/package.py
+++ b/var/spack/repos/builtin/packages/icu4c/package.py
@@ -92,7 +92,7 @@ class AutotoolsBuilder(spack.build_systems.autotools.AutotoolsBuilder):
# Need to make sure that locale is UTF-8 in order to process source files in UTF-8.
@when("@59:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LC_ALL", "en_US.UTF-8")
def configure_args(self):
@@ -114,7 +114,7 @@ def configure_args(self):
class MSBuildBuilder(spack.build_systems.msbuild.MSBuildBuilder):
# Need to make sure that locale is UTF-8 in order to process source files in UTF-8.
@when("@59:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LC_ALL", "en_US.UTF-8")
def msbuild_args(self):
diff --git a/var/spack/repos/builtin/packages/idl/package.py b/var/spack/repos/builtin/packages/idl/package.py
index 556b604c738..1cdf2f538e4 100644
--- a/var/spack/repos/builtin/packages/idl/package.py
+++ b/var/spack/repos/builtin/packages/idl/package.py
@@ -30,7 +30,7 @@ def install(self, spec, prefix):
install_script = Executable("./install.sh")
install_script("-s", input="silent/idl_answer_file")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# set necessary environment variables
env.prepend_path("EXELIS_DIR", self.prefix)
env.prepend_path("IDL_DIR", self.prefix.idl)
diff --git a/var/spack/repos/builtin/packages/improved-rdock/package.py b/var/spack/repos/builtin/packages/improved-rdock/package.py
index 5468685a97e..48f964e5be9 100644
--- a/var/spack/repos/builtin/packages/improved-rdock/package.py
+++ b/var/spack/repos/builtin/packages/improved-rdock/package.py
@@ -22,6 +22,7 @@ class ImprovedRdock(MakefilePackage):
version("main", branch="main")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("popt")
@@ -59,7 +60,7 @@ def install(self, spec, prefix):
set_executable(shfile)
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("RBT_ROOT", self.prefix)
def test_rdock(self):
diff --git a/var/spack/repos/builtin/packages/influxdb/package.py b/var/spack/repos/builtin/packages/influxdb/package.py
index 2bb6761894c..92e88294fee 100644
--- a/var/spack/repos/builtin/packages/influxdb/package.py
+++ b/var/spack/repos/builtin/packages/influxdb/package.py
@@ -42,7 +42,7 @@ class Influxdb(Package):
if pkg:
version(ver, sha256=pkg[0], url=pkg[1])
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.usr.bin)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/intel-llvm/package.py b/var/spack/repos/builtin/packages/intel-llvm/package.py
index 67452de9bcc..f2d715c0ec8 100644
--- a/var/spack/repos/builtin/packages/intel-llvm/package.py
+++ b/var/spack/repos/builtin/packages/intel-llvm/package.py
@@ -27,10 +27,10 @@ class IntelLlvm(CMakePackage):
# conflicts('target != x86_64',
# msg='Intel LLVM compiler currently only works for x86')
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", self.compiler.cxx11_flag)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+clang"):
env.set("CC", join_path(self.spec.prefix.bin, "clang"))
env.set("CXX", join_path(self.spec.prefix.bin, "clang++"))
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 597b9dc4d0e..3f50ff6e17d 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-advisor/package.py
@@ -23,6 +23,12 @@ class IntelOneapiAdvisor(IntelOneApiLibraryPackageWithSdk):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/advisor.html"
)
+ version(
+ "2025.1.1",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/4e67c003-b691-442c-846e-ef4ff4432d4d/intel-advisor-2025.1.1.25_offline.sh",
+ sha256="7377d85b4e02237aab932d53dfbef1564ba385b9407506022266b0c854f64ab8",
+ expand=False,
+ )
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/d9566edf-d6dd-4b85-9dda-efdf0ebb199a/intel-advisor-2025.1.0.507_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 c695aeb0215..c764af5bc2c 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-ccl/package.py
@@ -26,6 +26,12 @@ class IntelOneapiCcl(IntelOneApiLibraryPackage):
depends_on("intel-oneapi-mpi")
+ version(
+ "2021.15.1",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/422b4c09-4f3b-4e4d-b74e-502775398c9a/intel-oneccl-2021.15.1.5_offline.sh",
+ sha256="551a32d0cdf537d34d73bad1268ec70b6776be2a7c28b9753754ded7eb3407e0",
+ expand=False,
+ )
version(
"2021.15.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8f5d5e38-1626-41c1-9c20-44d966c43ae1/intel-oneccl-2021.15.0.401_offline.sh",
diff --git a/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py b/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py
index 0755331d973..c5081eef589 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers-classic/package.py
@@ -81,7 +81,7 @@ def oneapi_compiler_prefix(self):
oneapi_version = self.spec["intel-oneapi-compilers"].version
return self.spec["intel-oneapi-compilers"].prefix.compiler.join(str(oneapi_version))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Adds environment variables to the generated module file.
These environment variables come from running:
@@ -99,7 +99,9 @@ def setup_run_environment(self, env):
env.set("F77", bin_prefix.ifort)
env.set("FC", bin_prefix.ifort)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
super().setup_dependent_build_environment(env, dependent_spec)
# Edge cases for Intel's oneAPI compilers when using the legacy classic compilers:
# Always pass flags to disable deprecation warnings, since these warnings can
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 9432b19d660..d56a102168a 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-compilers/package.py
@@ -11,6 +11,17 @@
from spack.package import *
versions = [
+ {
+ "version": "2025.1.1",
+ "cpp": {
+ "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c4d2aef3-3123-475e-800c-7d66fd8da2a5/intel-dpcpp-cpp-compiler-2025.1.1.9_offline.sh",
+ "sha256": "63ea61f54a5ea9d30059ea499697e04953915ef317c0e8fc457077b690c726df",
+ },
+ "ftn": {
+ "url": "https://registrationcenter-download.intel.com/akdlm/IRC_NAS/0e4735b3-8721-422b-b204-00eefe413bfd/intel-fortran-compiler-2025.1.1.10_offline.sh",
+ "sha256": "c59060a5b959fb0faeb1cde349689086da41d491adb41fd6c97177fcf59bf957",
+ },
+ },
{
"version": "2025.1.0",
"cpp": {
@@ -444,7 +455,7 @@ def _classic_bin(self):
def compiler_search_prefix(self):
return self._llvm_bin
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Adds environment variables to the generated module file.
These environment variables come from running:
@@ -470,7 +481,9 @@ def setup_run_environment(self, env):
env.set("F77", self._llvm_bin.ifx)
env.set("FC", self._llvm_bin.ifx)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
super().setup_dependent_build_environment(env, dependent_spec)
# 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:
@@ -479,9 +492,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
# also ensures that shared objects and libraries required by the compiler,
# e.g. libonnx, can be found succesfully
# due to a fix, this is no longer required for OneAPI versions >= 2024.2
- bin_dir = os.path.dirname(self.cxx)
- lib_dir = os.path.join(os.path.dirname(bin_dir), "lib")
if self.cxx and self.spec.satisfies("%oneapi@:2024.1"):
+ bin_dir = os.path.dirname(self.cxx)
+ lib_dir = os.path.join(os.path.dirname(bin_dir), "lib")
env.prepend_path("PATH", bin_dir)
env.prepend_path("LD_LIBRARY_PATH", lib_dir)
@@ -655,38 +668,32 @@ def determine_variants(cls, exes, version_str):
@classmethod
def runtime_constraints(cls, *, spec, pkg):
- pkg("*").depends_on(
- "intel-oneapi-runtime",
- when="%oneapi",
- type="link",
- description="If any package uses %oneapi, it depends on intel-oneapi-runtime",
- )
- pkg("*").depends_on(
- f"intel-oneapi-runtime@{str(spec.version)}:",
- when=f"^[deptypes=build] {spec.name}@{spec.versions}",
- type="link",
- description=f"If any package uses %{str(spec)}, "
- f"it depends on intel-oneapi-runtime@{str(spec.version)}:",
- )
+ for language in ("c", "cxx", "fortran"):
+ pkg("*").depends_on(
+ f"intel-oneapi-runtime@{spec.version}:",
+ when=f"%[virtuals={language}] {spec.name}@{spec.versions}",
+ type="link",
+ description="Inject intel-oneapi-runtime when oneapi is used as "
+ f"a {language} compiler",
+ )
for fortran_virtual in ("fortran-rt", "libifcore@5"):
pkg("*").depends_on(
fortran_virtual,
- when=f"^[virtuals=fortran deptypes=build] {spec.name}@{spec.versions}",
+ when=f"%[virtuals=fortran] {spec.name}@{spec.versions}",
type="link",
- description=f"Add a dependency on 'libifcore' for nodes compiled with "
- f"{str(spec)} and using the 'fortran' language",
+ description="Add a dependency on 'libifcore' for nodes compiled with "
+ f"{spec.name}@{spec.versions} and using the 'fortran' language",
)
# The version of intel-oneapi-runtime is the same as the %oneapi used to "compile" it
pkg("intel-oneapi-runtime").requires(
- f"@{str(spec.versions)}", when=f"^[deptypes=build] {spec.name}@{spec.versions}"
+ f"@{spec.versions}", when=f"%{spec.name}@{spec.versions}"
)
- # If a node used %intel-oneapi=runtime@X.Y its dependencies must use @:X.Y
+ # If a node used %intel-oneapi-runtime@X.Y its dependencies must use @:X.Y
# (technically @:X is broader than ... <= @=X but this should work in practice)
pkg("*").propagate(
- f"intel-oneapi-compilers@:{str(spec.version)}",
- when=f"^[deptypes=build] {spec.name}@{spec.versions}",
+ f"intel-oneapi-compilers@:{spec.version}", when=f"%{spec.name}@{spec.versions}"
)
def _cc_path(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 b18fcc513d2..d558f65cd43 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-dal/package.py
@@ -25,6 +25,12 @@ class IntelOneapiDal(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onedal.html"
)
+ version(
+ "2025.5.0",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/6f7d2b45-7c33-4ab7-80ac-ac0f7f6e38ed/intel-onedal-2025.5.0.11_offline.sh",
+ sha256="9b6224a60a1d2c266e98d3aa80cd8dc4f64b9429c9115c6f5236ad2fa88cacd0",
+ expand=False,
+ )
version(
"2025.4.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/e4da59ef-aa3a-4223-b3a0-4728014113e6/intel-onedal-2025.4.0.655_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 73b4095ad41..1c83e5b5890 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-dnn/package.py
@@ -25,6 +25,12 @@ class IntelOneapiDnn(IntelOneApiLibraryPackage):
"https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/onednn.html"
)
+ version(
+ "2025.1.1",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/72399822-f66b-4699-b723-214850e74b25/intel-onednn-2025.1.1.10_offline.sh",
+ sha256="bb466368c22f55ff8cd6e0ff82763740588cc42deaada7acf8948f1b807c0661",
+ expand=False,
+ )
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/9cf476b7-5b8b-4995-ac33-91a446bc0c6e/intel-onednn-2025.1.0.653_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 fb02255bd86..edf412dc855 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-mkl/package.py
@@ -233,7 +233,9 @@ def libs(self):
else:
return IntelOneApiStaticLibraryList(libs, system_libs)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Only if environment modifications are desired (default is +envmods)
if self.spec.satisfies("+envmods"):
env.set("MKLROOT", self.component_prefix)
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 573b520b0ab..d4b8e856ddd 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-mpi/package.py
@@ -204,7 +204,9 @@ def setup_dependent_package(self, module, dep_spec):
# no self.spec.mpif90
self.spec.mpifc = wrappers[4]
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
dependent_module = dependent_spec.package.module
for var_name, attr_name in (
("I_MPI_CC", "spack_cc"),
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 71a489d8e98..8e53d4102fd 100644
--- a/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py
+++ b/var/spack/repos/builtin/packages/intel-oneapi-vtune/package.py
@@ -24,6 +24,18 @@ class IntelOneapiVtune(IntelOneApiLibraryPackageWithSdk):
homepage = "https://software.intel.com/content/www/us/en/develop/tools/oneapi/components/vtune-profiler.html"
+ version(
+ "2025.3.0",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/740981cd-e6af-4eb6-b147-c7912fadfb84/intel-vtune-2025.3.0.18_offline.sh",
+ sha256="d5237c577716ec221f12777f9e3a48b34d6bbb8bbeb22c000cc400b2b4f1325a",
+ expand=False,
+ )
+ version(
+ "2025.2.0",
+ url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/c4c4ece5-c19f-43a9-99ad-3192164d8529/intel-vtune-2025.2.0.219_offline.sh",
+ sha256="d6e8bc3b4070cb876bcf035c0ba9ee800db0401e6a43f9d4062b0488bdea1260",
+ expand=False,
+ )
version(
"2025.1.0",
url="https://registrationcenter-download.intel.com/akdlm/IRC_NAS/05b14253-a457-4472-bcf7-d98676542072/intel-vtune-2025.1.0.686_offline.sh",
diff --git a/var/spack/repos/builtin/packages/intel-tbb/package.py b/var/spack/repos/builtin/packages/intel-tbb/package.py
index 567a22e1dda..bcc5871fc8d 100644
--- a/var/spack/repos/builtin/packages/intel-tbb/package.py
+++ b/var/spack/repos/builtin/packages/intel-tbb/package.py
@@ -195,7 +195,7 @@ def libs(self):
class SetupEnvironment:
# We set OS here in case the user has it set to something else
# that TBB doesn't expect.
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("OS", platform.system())
diff --git a/var/spack/repos/builtin/packages/intel-xed/package.py b/var/spack/repos/builtin/packages/intel-xed/package.py
index a15f56bfce9..783fccba00f 100644
--- a/var/spack/repos/builtin/packages/intel-xed/package.py
+++ b/var/spack/repos/builtin/packages/intel-xed/package.py
@@ -102,7 +102,7 @@ def patch(self):
except OSError:
pass
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# XED needs PYTHONPATH to find the mbuild directory.
env.prepend_path("PYTHONPATH", self.mdir)
diff --git a/var/spack/repos/builtin/packages/ip/package.py b/var/spack/repos/builtin/packages/ip/package.py
index 5ee1f20ed29..47743f813cd 100644
--- a/var/spack/repos/builtin/packages/ip/package.py
+++ b/var/spack/repos/builtin/packages/ip/package.py
@@ -105,7 +105,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
suffixes = (
self.spec.variants["precision"].value
if self.spec.satisfies("@4.1:")
diff --git a/var/spack/repos/builtin/packages/ip2/package.py b/var/spack/repos/builtin/packages/ip2/package.py
index 69c5b7262c2..aeca5d08fab 100644
--- a/var/spack/repos/builtin/packages/ip2/package.py
+++ b/var/spack/repos/builtin/packages/ip2/package.py
@@ -30,7 +30,7 @@ class Ip2(CMakePackage):
depends_on("sp")
requires("^sp precision=4,8,d", when="^sp@2.4:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
for suffix in ("4", "8", "d"):
lib = find_libraries(
"libip2_" + suffix, root=self.prefix, shared=False, recursive=True
diff --git a/var/spack/repos/builtin/packages/ipcalc/package.py b/var/spack/repos/builtin/packages/ipcalc/package.py
index 436f7800c44..5df8d32077f 100644
--- a/var/spack/repos/builtin/packages/ipcalc/package.py
+++ b/var/spack/repos/builtin/packages/ipcalc/package.py
@@ -24,7 +24,7 @@ class Ipcalc(MakefilePackage):
depends_on("geoip-api-c")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LIBPATH", self.spec["geoip-api-c"].prefix.lib)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/ipm/package.py b/var/spack/repos/builtin/packages/ipm/package.py
index d7d4c4debbc..147ef9465b6 100644
--- a/var/spack/repos/builtin/packages/ipm/package.py
+++ b/var/spack/repos/builtin/packages/ipm/package.py
@@ -63,7 +63,7 @@ class Ipm(AutotoolsPackage):
def patch(self):
filter_file(r"#!/usr/bin/perl", "#!/usr/bin/env perl", "bin/ipm_parse")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("MPICC", spec["mpi"].mpicc)
env.set("MPIFC", spec["mpi"].mpifc)
diff --git a/var/spack/repos/builtin/packages/iproute2/package.py b/var/spack/repos/builtin/packages/iproute2/package.py
index 1c17bc6c9f6..656a4474182 100644
--- a/var/spack/repos/builtin/packages/iproute2/package.py
+++ b/var/spack/repos/builtin/packages/iproute2/package.py
@@ -37,5 +37,5 @@ class Iproute2(AutotoolsPackage):
def install(self, spec, prefix):
make("install", "DESTDIR={0}".format(prefix), "PREFIX=")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/isescan/package.py b/var/spack/repos/builtin/packages/isescan/package.py
index 749f860d1f9..b5e3ae68023 100644
--- a/var/spack/repos/builtin/packages/isescan/package.py
+++ b/var/spack/repos/builtin/packages/isescan/package.py
@@ -28,7 +28,7 @@ class Isescan(Package):
depends_on("fraggenescan@:1.30", type="run")
depends_on("hmmer@3.1b2:", type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "ssw201507"))
diff --git a/var/spack/repos/builtin/packages/ispc/package.py b/var/spack/repos/builtin/packages/ispc/package.py
index cccf093aa86..0a54b6abb0d 100644
--- a/var/spack/repos/builtin/packages/ispc/package.py
+++ b/var/spack/repos/builtin/packages/ispc/package.py
@@ -93,7 +93,7 @@ class Ispc(CMakePackage):
sha256="3f7dae8d4a683fca2a6157bbcb7cbe9692ff2094b0f4afaf29be121c02b0b3ad",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@1.18.0:"):
env.append_flags("LDFLAGS", "-lz")
diff --git a/var/spack/repos/builtin/packages/itensor/package.py b/var/spack/repos/builtin/packages/itensor/package.py
index 2dfa818e7a3..90e04b8a173 100644
--- a/var/spack/repos/builtin/packages/itensor/package.py
+++ b/var/spack/repos/builtin/packages/itensor/package.py
@@ -37,6 +37,7 @@ class Itensor(MakefilePackage):
variant("hdf5", default=False, description="Build rockstar with HDF5 support.")
variant("shared", default=False, description="Also build dynamic libraries.")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("lapack")
diff --git a/var/spack/repos/builtin/packages/iwyu/package.py b/var/spack/repos/builtin/packages/iwyu/package.py
index a7b246d4351..4e432fc9145 100644
--- a/var/spack/repos/builtin/packages/iwyu/package.py
+++ b/var/spack/repos/builtin/packages/iwyu/package.py
@@ -10,9 +10,8 @@
class Iwyu(CMakePackage):
- """include-what-you-use: A tool for use with clang to analyze #includes in
- C and C++ source files
- """
+ """Include-what-you-use: A tool for use with clang to analyze #includes in
+ C and C++ source files."""
homepage = "https://include-what-you-use.org"
url = "https://include-what-you-use.org/downloads/include-what-you-use-0.13.src.tar.gz"
@@ -24,6 +23,11 @@ class Iwyu(CMakePackage):
executables = ["^include-what-you-use$"]
+ sanity_check_is_file = ["bin/include-what-you-use"]
+
+ version("0.24", sha256="a23421ceff601d3ea215e8fa9292bfa8ca39eb1ac2098dbbedfc6cfe65541c10")
+ version("0.23", sha256="0004d5a9169717acf2f481248a5bfc15c7d55ddc2b9cdc7f461b06e93d49c73f")
+ version("0.22", sha256="859074b461ea4b8325a73418c207ca33b5e6566b08e6b587eb9164416569a6dd")
version("0.21", sha256="6a351919ff89bda7c95c895472601868db3daab96a958b38e0362890d58760b6")
version("0.20", sha256="75fce1e6485f280f8f13f4c2d090b11d2fd2102b50857507c8413a919b7af899")
version("0.19", sha256="2b10157b60ea08adc08e3896b4921c73fcadd5ec4eb652b29a34129d501e5ee0")
@@ -36,11 +40,14 @@ class Iwyu(CMakePackage):
version("0.12", sha256="a5892fb0abccb820c394e4e245c00ef30fc94e4ae58a048b23f94047c0816025")
version("0.11", sha256="2d2877726c4aed9518cbb37673ffbc2b7da9c239bf8fe29432da35c1c0ec367a")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
-
- patch("iwyu-013-cmake.patch", when="@0.13:0.14")
+ # Build dependencies
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ # Required dependencies
+ depends_on("llvm+clang@20", when="@0.24")
+ depends_on("llvm+clang@19", when="@0.23")
+ depends_on("llvm+clang@18", when="@0.22")
depends_on("llvm+clang@17.0:17", when="@0.21")
depends_on("llvm+clang@16.0:16", when="@0.20")
depends_on("llvm+clang@15.0:15", when="@0.19")
@@ -56,7 +63,9 @@ class Iwyu(CMakePackage):
# iwyu uses X86AsmParser so must have the x86 target on non-x86 arch
_arches = set(str(x.family) for x in archspec.cpu.TARGETS.values())
for _arch in _arches - set(["x86", "x86_64"]):
- depends_on("llvm targets=x86", when="arch={0}:".format(_arch))
+ depends_on("llvm targets=x86", when=f"arch={_arch}:")
+
+ patch("iwyu-013-cmake.patch", when="@0.13:0.14")
@classmethod
def determine_version(cls, exe):
diff --git a/var/spack/repos/builtin/packages/javafx/package.py b/var/spack/repos/builtin/packages/javafx/package.py
index 74e11a82fd1..2811a2c002b 100644
--- a/var/spack/repos/builtin/packages/javafx/package.py
+++ b/var/spack/repos/builtin/packages/javafx/package.py
@@ -61,5 +61,5 @@ def install(self, spec, prefix):
install_tree("legal", prefix.legal)
install_tree("lib", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("JAVAFX_HOME", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/jblob/package.py b/var/spack/repos/builtin/packages/jblob/package.py
index f1c2f410661..0fe6463af61 100644
--- a/var/spack/repos/builtin/packages/jblob/package.py
+++ b/var/spack/repos/builtin/packages/jblob/package.py
@@ -22,7 +22,7 @@ class Jblob(Package):
depends_on("java@8:", type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("JAVA_HOME", self.spec["java"].prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py
index be4d8ccbc69..23c783308bb 100644
--- a/var/spack/repos/builtin/packages/jdk/package.py
+++ b/var/spack/repos/builtin/packages/jdk/package.py
@@ -96,12 +96,14 @@ def libs(self):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set JAVA_HOME."""
env.set("JAVA_HOME", self.home)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set JAVA_HOME and CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
@@ -117,7 +119,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
classpath = os.pathsep.join(class_paths)
env.set("CLASSPATH", classpath)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
diff --git a/var/spack/repos/builtin/packages/jmol/package.py b/var/spack/repos/builtin/packages/jmol/package.py
index e0c87d5a8fc..07e1e3b27eb 100644
--- a/var/spack/repos/builtin/packages/jmol/package.py
+++ b/var/spack/repos/builtin/packages/jmol/package.py
@@ -33,7 +33,7 @@ def install(self, spec, prefix):
# no subdirs - tarball was unpacked in spack-src
install_tree("./", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
env.set("JMOL_HOME", self.prefix)
env.prepend_path("PATH", self.spec["java"].prefix.bin)
diff --git a/var/spack/repos/builtin/packages/jogl/package.py b/var/spack/repos/builtin/packages/jogl/package.py
index 7e7330a7213..fbb28a255ef 100644
--- a/var/spack/repos/builtin/packages/jogl/package.py
+++ b/var/spack/repos/builtin/packages/jogl/package.py
@@ -58,15 +58,17 @@ def install(self, spec, prefix):
with working_dir(join_path("build", "lib")):
install("*.so", prefix.lib)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("CLASSPATH")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
class_paths = find(prefix.lib, "*.jar")
classpath = os.pathsep.join(class_paths)
env.prepend_path("CLASSPATH", classpath)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
class_paths = find(prefix.lib, "*.jar")
classpath = os.pathsep.join(class_paths)
env.prepend_path("CLASSPATH", classpath)
diff --git a/var/spack/repos/builtin/packages/jube/package.py b/var/spack/repos/builtin/packages/jube/package.py
index 16789ed3fd8..028ae6d81b1 100644
--- a/var/spack/repos/builtin/packages/jube/package.py
+++ b/var/spack/repos/builtin/packages/jube/package.py
@@ -138,7 +138,7 @@ class Jube(PythonPackage):
depends_on("py-setuptools", type="build")
depends_on("py-pyyaml", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if not self.spec.variants["resource_manager"].value == "none":
env.prepend_path(
"JUBE_INCLUDE_PATH",
diff --git a/var/spack/repos/builtin/packages/julia/package.py b/var/spack/repos/builtin/packages/julia/package.py
index d1212158d7c..13ad1f22016 100644
--- a/var/spack/repos/builtin/packages/julia/package.py
+++ b/var/spack/repos/builtin/packages/julia/package.py
@@ -331,7 +331,7 @@ def patch(self):
time = (os.path.getatime(f), os.path.getmtime(f))
os.utime(os.path.join("base", "Makefile"), time)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# this is a bit ridiculous, but we are setting runtime linker paths to
# dependencies so that libwhich can locate them.
if self.spec.satisfies("platform=linux"):
diff --git a/var/spack/repos/builtin/packages/justbuild/package.py b/var/spack/repos/builtin/packages/justbuild/package.py
index 619c8df9896..1640745f70c 100644
--- a/var/spack/repos/builtin/packages/justbuild/package.py
+++ b/var/spack/repos/builtin/packages/justbuild/package.py
@@ -48,7 +48,7 @@ class Justbuild(Package):
sanity_check_is_file = [join_path("bin", "just"), join_path("bin", "just-mr")]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
ar = which("ar")
if self.spec.version < Version("1.2.1"):
family = ', "COMPILER_FAMILY":"unknown"'
diff --git a/var/spack/repos/builtin/packages/jwt-cpp/package.py b/var/spack/repos/builtin/packages/jwt-cpp/package.py
index e9c2f2a9cbb..fd8750879c7 100644
--- a/var/spack/repos/builtin/packages/jwt-cpp/package.py
+++ b/var/spack/repos/builtin/packages/jwt-cpp/package.py
@@ -15,6 +15,7 @@ class JwtCpp(CMakePackage):
license("MIT")
+ version("0.7.1", sha256="e52f247d5e62fac5da6191170998271a70ce27f747f2ce8fde9b09f96a5375a4")
version("0.7.0", sha256="b9eb270e3ba8221e4b2bc38723c9a1cb4fa6c241a42908b9a334daff31137406")
version("0.6.0", sha256="0227bd6e0356b211341075c7997c837f0b388c01379bd256aa525566a5553f03")
version("0.5.2", sha256="d3188f9611597eb1bb285169879e1d87202bf10a08e4e7734c9f2097bfd4a850")
@@ -35,7 +36,7 @@ class JwtCpp(CMakePackage):
description="SSL library to use",
)
- depends_on("c", type="build")
+ depends_on("c", type="build", when="@:0.7.0")
depends_on("cxx", type="build")
depends_on("openssl@1.0.2:", when="@0.4.0:0.4.99")
diff --git a/var/spack/repos/builtin/packages/jxrlib-debian/package.py b/var/spack/repos/builtin/packages/jxrlib-debian/package.py
index 5edd67ca0bb..430b809cca7 100644
--- a/var/spack/repos/builtin/packages/jxrlib-debian/package.py
+++ b/var/spack/repos/builtin/packages/jxrlib-debian/package.py
@@ -25,7 +25,7 @@ class JxrlibDebian(MakefilePackage):
depends_on("c", type="build") # generated
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DIR_INSTALL", self.prefix)
if self.spec.satisfies("+shared"):
env.set("SHARED", "True")
diff --git a/var/spack/repos/builtin/packages/kadath/package.py b/var/spack/repos/builtin/packages/kadath/package.py
index 8e7fe96adf4..454fab03cc2 100644
--- a/var/spack/repos/builtin/packages/kadath/package.py
+++ b/var/spack/repos/builtin/packages/kadath/package.py
@@ -61,7 +61,7 @@ def patch(self):
join_path("codes", code, "CMakeLists.txt"),
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HOME_KADATH", self.stage.source_path)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/kicad/package.py b/var/spack/repos/builtin/packages/kicad/package.py
index 9fa9812699a..dc9c7d0b7da 100644
--- a/var/spack/repos/builtin/packages/kicad/package.py
+++ b/var/spack/repos/builtin/packages/kicad/package.py
@@ -102,16 +102,20 @@ class Kicad(CMakePackage):
destination="",
)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py b/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py
index b8535a8697f..34dee3cc381 100644
--- a/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py
+++ b/var/spack/repos/builtin/packages/kokkos-nvcc-wrapper/package.py
@@ -151,7 +151,9 @@ def install(self, spec, prefix):
mkdir(prefix.bin)
install(src, prefix.bin)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
wrapper = join_path(self.prefix.bin, "nvcc_wrapper")
env.set("CUDA_ROOT", dependent_spec["cuda"].prefix)
env.set("NVCC_WRAPPER_DEFAULT_COMPILER", self.compiler.cxx)
diff --git a/var/spack/repos/builtin/packages/kokkos-tools/package.py b/var/spack/repos/builtin/packages/kokkos-tools/package.py
index f190954bbe7..c27751b3df5 100644
--- a/var/spack/repos/builtin/packages/kokkos-tools/package.py
+++ b/var/spack/repos/builtin/packages/kokkos-tools/package.py
@@ -18,6 +18,8 @@ class KokkosTools(CMakePackage):
variant("mpi", default=False, description="Enable MPI support")
variant("papi", default=False, description="Enable PAPI support")
+ depends_on("cxx", type="build")
+
depends_on("kokkos")
depends_on("mpi", when="+mpi")
depends_on("papi", when="+papi")
diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py
index 534422a97bf..b27408413b4 100644
--- a/var/spack/repos/builtin/packages/kokkos/package.py
+++ b/var/spack/repos/builtin/packages/kokkos/package.py
@@ -271,16 +271,26 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
"gfx1030": "navi1030",
"gfx1100": "navi1100",
}
+ amdgpu_apu_arch_map = {"gfx942": "amd_gfx942_apu"}
amd_support_conflict_msg = (
"{0} is not supported; "
"Kokkos supports the following AMD GPU targets: " + ", ".join(amdgpu_arch_map.keys())
)
+ amd_apu_support_conflict_msg = (
+ "{0} is not supported; "
+ "Kokkos supports the following AMD GPU targets with unified memory: "
+ + ", ".join(amdgpu_apu_arch_map.keys())
+ )
for arch in ROCmPackage.amdgpu_targets:
if arch not in amdgpu_arch_map:
conflicts(
- "+rocm",
- when="amdgpu_target={0}".format(arch),
- msg=amd_support_conflict_msg.format(arch),
+ "+rocm", when=f"amdgpu_target={arch}", msg=amd_support_conflict_msg.format(arch)
+ )
+ if arch not in amdgpu_apu_arch_map:
+ conflicts(
+ "+rocm+apu",
+ when=f"amdgpu_target={arch}",
+ msg=amd_apu_support_conflict_msg.format(arch),
)
intel_gpu_arches = (
@@ -298,6 +308,7 @@ class Kokkos(CMakePackage, CudaPackage, ROCmPackage):
values=("none",) + intel_gpu_arches,
description="Intel GPU architecture",
)
+ variant("apu", default=False, description="Enable APU support", when="@4.5: +rocm")
for dev, (dflt, desc) in devices_variants.items():
variant(dev, default=dflt, description=desc)
@@ -456,7 +467,10 @@ def cmake_args(self):
for amdgpu_target in spec.variants["amdgpu_target"].value:
if amdgpu_target != "none":
if amdgpu_target in self.amdgpu_arch_map:
- spack_microarches.append(self.amdgpu_arch_map[amdgpu_target])
+ if spec.satisfies("+apu") and amdgpu_target in self.amdgpu_apu_arch_map:
+ spack_microarches.append(self.amdgpu_apu_arch_map[amdgpu_target])
+ else:
+ spack_microarches.append(self.amdgpu_arch_map[amdgpu_target])
else:
# Note that conflict declarations should prevent
# choosing an unsupported AMD GPU target
diff --git a/var/spack/repos/builtin/packages/laghos/package.py b/var/spack/repos/builtin/packages/laghos/package.py
index ab23dfb560d..38e3c4d7352 100644
--- a/var/spack/repos/builtin/packages/laghos/package.py
+++ b/var/spack/repos/builtin/packages/laghos/package.py
@@ -12,7 +12,7 @@ class Laghos(MakefilePackage):
discretization and explicit high-order time-stepping.
"""
- tags = ["proxy-app", "ecp-proxy-app"]
+ tags = ["proxy-app", "ecp-proxy-app", "e4s"]
homepage = "https://computing.llnl.gov/projects/co-design/laghos"
url = "https://github.com/CEED/Laghos/archive/v1.0.tar.gz"
diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py
index c3033e58b82..56c689bafa3 100644
--- a/var/spack/repos/builtin/packages/lammps/package.py
+++ b/var/spack/repos/builtin/packages/lammps/package.py
@@ -18,7 +18,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage, PythonExtension):
url = "https://github.com/lammps/lammps/archive/patch_1Sep2017.tar.gz"
git = "https://github.com/lammps/lammps.git"
- tags = ["ecp", "ecp-apps"]
+ tags = ["ecp", "ecp-apps", "e4s"]
maintainers("rbberger")
@@ -30,12 +30,18 @@ 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("20250402", sha256="5087ebd6b00cd44a7d73303d49685668f6effa76dc375912f7f75db558b39bca")
version("20250204", sha256="a4cb0a58451d47ac31ee3e1f148d92f445298d6e27f2d06f161b9b4168d79eb1")
version("20241119", sha256="7d1a825f13eef06d82ed8ae950f4a5ca6da9f6a5979745a85a7a58781e4c6ffa")
+ version(
+ "20240829.2",
+ sha256="f8ca3f021a819ced8658055f7750e235c51b4937ddb621cf1bd7bee08e0b6266",
+ preferred=True,
+ )
version(
"20240829.1",
sha256="3aea41869aa2fb8120fc4814cab645686f969e2eb7c66aa5587e500597d482dc",
- preferred=True,
+ deprecated=True,
)
version(
"20240829",
@@ -421,6 +427,7 @@ class Lammps(CMakePackage, CudaPackage, ROCmPackage, PythonExtension):
depends_on("fortran", type="build", when=f"+{fc_pkg}")
stable_versions = {
+ "20240829.2",
"20240829.1",
"20240829",
"20230802.4",
@@ -707,6 +714,7 @@ def url_for_version(self, version):
depends_on("blas", when="+latte")
depends_on("lapack", when="+latte")
depends_on("python", when="+python")
+ depends_on("python@3.6:", when="@20250402: +python")
depends_on("mpi", when="+user-lb")
depends_on("mpi", when="+latboltz")
depends_on("mpi", when="+user-h5md")
@@ -726,6 +734,7 @@ def url_for_version(self, version):
depends_on("kokkos@4.3.01:", when="@20240627: +kokkos")
depends_on("kokkos@4.4.01:", when="@20241119: +kokkos")
depends_on("kokkos@4.5.01:", when="@20250204: +kokkos")
+ depends_on("kokkos@4.6.00:", when="@20250402: +kokkos")
depends_on("adios2", when="+user-adios")
depends_on("adios2", when="+adios")
depends_on("plumed", when="+user-plumed")
@@ -769,6 +778,11 @@ def url_for_version(self, version):
extends("python", when="+python")
+ conflicts(
+ "lammps_sizes=smallsmall",
+ when="@20250402:",
+ msg="smallsmall support has been removed in version 20250402",
+ )
conflicts("+cuda", when="+opencl")
conflicts("+rocm", when="+opencl")
conflicts("+body", when="+poems@:20180628")
@@ -1019,11 +1033,11 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+intel %aocc"):
env.append_flags("LDFLAGS", "-lalm -lm")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("LAMMPS_POTENTIALS", self.prefix.share.lammps.potentials)
if self.spec.satisfies("+python"):
if self.spec.platform == "darwin":
diff --git a/var/spack/repos/builtin/packages/landsfcutil/package.py b/var/spack/repos/builtin/packages/landsfcutil/package.py
index faae7a868b9..2ff397b9dd5 100644
--- a/var/spack/repos/builtin/packages/landsfcutil/package.py
+++ b/var/spack/repos/builtin/packages/landsfcutil/package.py
@@ -31,7 +31,7 @@ def cmake_args(self):
args = [self.define("ENABLE_TESTS", self.run_tests)]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
for suffix in ("4", "d"):
lib = find_libraries(
"liblandsfcutil_" + suffix, root=self.prefix, shared=False, recursive=True
diff --git a/var/spack/repos/builtin/packages/launchmon/package.py b/var/spack/repos/builtin/packages/launchmon/package.py
index 67540265e9e..8dcbd674c87 100644
--- a/var/spack/repos/builtin/packages/launchmon/package.py
+++ b/var/spack/repos/builtin/packages/launchmon/package.py
@@ -38,7 +38,7 @@ class Launchmon(AutotoolsPackage):
patch("launchmon-char-conv.patch", when="@1.0.2")
patch("for_aarch64.patch", when="@:1.0.2 target=aarch64:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@master"):
# automake for launchmon requires the AM_PATH_LIBGCRYPT macro
# which is defined in libgcrypt.m4
diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py
index d382e6c80c0..9114a1f4363 100644
--- a/var/spack/repos/builtin/packages/lbann/package.py
+++ b/var/spack/repos/builtin/packages/lbann/package.py
@@ -18,7 +18,7 @@ class Lbann(CachedCMakePackage, CudaPackage, ROCmPackage):
homepage = "https://software.llnl.gov/lbann/"
url = "https://github.com/LLNL/lbann/archive/v0.91.tar.gz"
git = "https://github.com/LLNL/lbann.git"
- tags = ["ecp", "radiuss"]
+ tags = ["ecp", "radiuss", "e4s"]
maintainers("bvanessen")
@@ -117,6 +117,7 @@ class Lbann(CachedCMakePackage, CudaPackage, ROCmPackage):
conflicts("+gold", when="platform=darwin", msg="gold does not work on Darwin")
conflicts("+lld", when="platform=darwin", msg="lld does not work on Darwin")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("cmake@3.17.0:", type="build")
@@ -249,7 +250,7 @@ class Lbann(CachedCMakePackage, CudaPackage, ROCmPackage):
generator("ninja")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-fno-omit-frame-pointer")
if self.spec.satisfies("%apple-clang"):
env.append_flags("CPPFLAGS", self.compiler.openmp_flag)
diff --git a/var/spack/repos/builtin/packages/lbzip2/package.py b/var/spack/repos/builtin/packages/lbzip2/package.py
index 5174339313b..c8057e2ee69 100644
--- a/var/spack/repos/builtin/packages/lbzip2/package.py
+++ b/var/spack/repos/builtin/packages/lbzip2/package.py
@@ -9,7 +9,17 @@ class Lbzip2(AutotoolsPackage):
"""Multi-threaded compression utility with support for bzip2
compressed file format"""
- homepage = "https://lbzip2.org/"
- url = "http://archive.lbzip2.org/lbzip2-2.5.tar.gz"
+ homepage = "https://github.com/kjn/lbzip2/"
+ url = "https://github.com/kjn/lbzip2/archive/refs/tags/v2.5.tar.gz"
- version("2.5", sha256="46c75ee93cc95eedc6005625442b2b8e59a2bef3ba80987d0491f055185650e9")
+ depends_on("c", type="build")
+
+ depends_on("autoconf", type="build")
+ depends_on("automake", type="build")
+ depends_on("libtool", type="build")
+
+ version(
+ "2.5",
+ sha256="7be69ece83ecdc8f12b9201d838eee5cdb499f2fd68cffd2af58866076ccac43",
+ deprecated=True,
+ )
diff --git a/var/spack/repos/builtin/packages/lcals/package.py b/var/spack/repos/builtin/packages/lcals/package.py
index a9b4dd891d8..6ab77d09304 100644
--- a/var/spack/repos/builtin/packages/lcals/package.py
+++ b/var/spack/repos/builtin/packages/lcals/package.py
@@ -30,6 +30,8 @@ class Lcals(MakefilePackage):
values=("sse", "avx", "MIC"),
)
+ depends_on("cxx", type="build")
+
@property
def build_targets(self):
targets = []
diff --git a/var/spack/repos/builtin/packages/lci/package.py b/var/spack/repos/builtin/packages/lci/package.py
index 7247f390c23..306fe4c94b3 100644
--- a/var/spack/repos/builtin/packages/lci/package.py
+++ b/var/spack/repos/builtin/packages/lci/package.py
@@ -24,6 +24,8 @@ class Lci(CMakePackage):
license("MIT")
version("master", branch="master")
+ version("1.7.9", sha256="49f212d034e7d0b63af29e76b17935a3221830090af02c0e0912cea8a7a58d91")
+ version("1.7.8", sha256="9d54dd669b54e715162c5184a0e5cc64fd479e9fda60b2a490197d901368afda")
version("1.7.7", sha256="c310f699b7b4317a2f5c3557f85c240fe3c85d2d06618dd248434ef807d53779")
version("1.7.6", sha256="c88ccea2ad277ed38fc23187771b52b6fb212ed4429114717bfa8887ed21665c")
version("1.7.5", sha256="13e4084c9e7aaf55966ba5aa0423164b8fd21ee7526fc62017b3c9b3db99cb83")
diff --git a/var/spack/repos/builtin/packages/lcio/package.py b/var/spack/repos/builtin/packages/lcio/package.py
index ad443ec4a6f..2dab7610f5b 100644
--- a/var/spack/repos/builtin/packages/lcio/package.py
+++ b/var/spack/repos/builtin/packages/lcio/package.py
@@ -116,7 +116,7 @@ def url_for_version(self, version):
return
return url
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("LCIO", self.prefix)
env.prepend_path("PYTHONPATH", self.prefix.python)
# needed for the python bindings to find "Exceptions.h"
diff --git a/var/spack/repos/builtin/packages/lcms/package.py b/var/spack/repos/builtin/packages/lcms/package.py
index 71125644224..5fd47c6933a 100644
--- a/var/spack/repos/builtin/packages/lcms/package.py
+++ b/var/spack/repos/builtin/packages/lcms/package.py
@@ -53,7 +53,7 @@ def build_directory(self):
/ f"VC{self.pkg.compiler.visual_studio_version}"
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"INCLUDE",
";".join([dep.prefix.include for dep in self.spec.dependencies(deptype="link")]),
diff --git a/var/spack/repos/builtin/packages/ldak/package.py b/var/spack/repos/builtin/packages/ldak/package.py
index dcc461beb3a..0ecf87bc7b0 100644
--- a/var/spack/repos/builtin/packages/ldak/package.py
+++ b/var/spack/repos/builtin/packages/ldak/package.py
@@ -24,6 +24,8 @@ class Ldak(Package):
variant("glpk", default=False, description="Use glpk instead of vendored qsopt")
+ depends_on("c", type="build")
+
depends_on("zlib-api")
depends_on("blas")
depends_on("lapack")
diff --git a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
index 1662dc809de..557765add63 100644
--- a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
@@ -35,7 +35,9 @@ class LdcBootstrap(CMakePackage):
depends_on("libedit")
depends_on("binutils")
- def setup_dependent_build_environment(self, env, dep_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# The code below relies on this function being executed after the
# environment has been sanitized (because LD_LIBRARY_PATH is among
# the variables that get unset)
diff --git a/var/spack/repos/builtin/packages/legion/package.py b/var/spack/repos/builtin/packages/legion/package.py
index 174a5e35c42..41917ecc92d 100644
--- a/var/spack/repos/builtin/packages/legion/package.py
+++ b/var/spack/repos/builtin/packages/legion/package.py
@@ -129,6 +129,7 @@ class Legion(CMakePackage, ROCmPackage):
depends_on("hip@5.1:", when="+rocm")
depends_on("hdf5", when="+hdf5")
depends_on("hwloc", when="+hwloc")
+ depends_on("libfabric", when="network=gasnet conduit=ofi-slingshot11")
# cuda-centric
cuda_arch_list = CudaPackage.cuda_arch_values
@@ -150,8 +151,10 @@ class Legion(CMakePackage, ROCmPackage):
patch("hip-offload-arch.patch", when="@23.03.0 +rocm")
def patch(self):
- if self.spec.satisfies(
- "network=gasnet conduit=ofi-slingshot11 ^[virtuals=mpi] cray-mpich+wrappers"
+ if self.spec.satisfies("network=gasnet conduit=ofi-slingshot11") and (
+ self.spec.satisfies("^[virtuals=mpi] cray-mpich+wrappers")
+ or self.spec.satisfies("^[virtuals=mpi] mpich netmod=ofi ^libfabric fabrics=cxi")
+ or self.spec.satisfies("^[virtuals=mpi] openmpi fabrics=ofi ^libfabric fabrics=cxi")
):
filter_file(
r"--with-mpi-cc=cc",
diff --git a/var/spack/repos/builtin/packages/lesstif/package.py b/var/spack/repos/builtin/packages/lesstif/package.py
index 689f9150e04..6d21cb84ade 100644
--- a/var/spack/repos/builtin/packages/lesstif/package.py
+++ b/var/spack/repos/builtin/packages/lesstif/package.py
@@ -28,7 +28,7 @@ class Lesstif(AutotoolsPackage):
def patch(self):
filter_file("ACLOCALDIR=.*", "ACLOCALDIR='${datarootdir}/aclocal'", "configure")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# 'sed' fails if LANG=en_US.UTF-8 as is often the case on Macs.
# The configure script finds our superenv sed wrapper, sets
# SED, but then doesn't use that variable.
diff --git a/var/spack/repos/builtin/packages/lhapdf/package.py b/var/spack/repos/builtin/packages/lhapdf/package.py
index d5385f8673c..3faf2b27d38 100644
--- a/var/spack/repos/builtin/packages/lhapdf/package.py
+++ b/var/spack/repos/builtin/packages/lhapdf/package.py
@@ -49,7 +49,7 @@ class Lhapdf(AutotoolsPackage):
depends_on("py-setuptools", type="build", when="+python")
depends_on("gettext", type="build", when="+python")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Add -lintl if provided by gettext, otherwise libintl is provided by the system's glibc:
if (
self.spec.satisfies("+python")
diff --git a/var/spack/repos/builtin/packages/lhapdf5/package.py b/var/spack/repos/builtin/packages/lhapdf5/package.py
index 682b0e2fcae..23939417534 100644
--- a/var/spack/repos/builtin/packages/lhapdf5/package.py
+++ b/var/spack/repos/builtin/packages/lhapdf5/package.py
@@ -32,7 +32,7 @@ class Lhapdf5(AutotoolsPackage):
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("FFLAGS", "-std=legacy")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/lhapdfsets/package.py b/var/spack/repos/builtin/packages/lhapdfsets/package.py
index 807d21a1428..a044805f6d5 100644
--- a/var/spack/repos/builtin/packages/lhapdfsets/package.py
+++ b/var/spack/repos/builtin/packages/lhapdfsets/package.py
@@ -64,10 +64,12 @@ def install(self, spec, prefix):
tar("xfz", _filename)
os.remove(_filename)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("LHAPDF_DATA_PATH", self.prefix.share.lhapdfsets)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("LHAPDF_DATA_PATH", self.prefix.share.lhapdfsets)
@classmethod
diff --git a/var/spack/repos/builtin/packages/libarchive/package.py b/var/spack/repos/builtin/packages/libarchive/package.py
index abe3b301c06..225abbc9a45 100644
--- a/var/spack/repos/builtin/packages/libarchive/package.py
+++ b/var/spack/repos/builtin/packages/libarchive/package.py
@@ -16,6 +16,9 @@ class Libarchive(AutotoolsPackage):
license("BSD-2-Clause AND BSD-3-Clause AND Public-Domain")
+ version("3.7.9", sha256="aa90732c5a6bdda52fda2ad468ac98d75be981c15dde263d7b5cf6af66fd009f")
+ version("3.7.8", sha256="a123d87b1bd8adb19e8c187da17ae2d957c7f9596e741b929e6b9ceefea5ad0f")
+ version("3.7.7", sha256="4cc540a3e9a1eebdefa1045d2e4184831100667e6d7d5b315bb1cbc951f8ddff")
version("3.7.6", sha256="b4071807367b15b72777c2eaac80f42c8ea2d20212ab279514a19fe1f6f96ef4")
version("3.7.5", sha256="37556113fe44d77a7988f1ef88bf86ab68f53d11e85066ffd3c70157cc5110f1")
@@ -131,6 +134,7 @@ class Libarchive(AutotoolsPackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
+ depends_on("pkgconfig", type="build")
depends_on("bzip2", when="compression=bz2lib")
depends_on("lz4", when="compression=lz4")
diff --git a/var/spack/repos/builtin/packages/libatasmart/package.py b/var/spack/repos/builtin/packages/libatasmart/package.py
index 2c901ae0631..84921f79908 100644
--- a/var/spack/repos/builtin/packages/libatasmart/package.py
+++ b/var/spack/repos/builtin/packages/libatasmart/package.py
@@ -25,5 +25,5 @@ class Libatasmart(AutotoolsPackage):
depends_on("libtool", type="build")
depends_on("m4", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/libcap-ng/package.py b/var/spack/repos/builtin/packages/libcap-ng/package.py
index e9c7d25f0c1..0ef9f270cd3 100644
--- a/var/spack/repos/builtin/packages/libcap-ng/package.py
+++ b/var/spack/repos/builtin/packages/libcap-ng/package.py
@@ -32,7 +32,7 @@ class LibcapNg(AutotoolsPackage):
extends("python", when="+python")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+python"):
env.set("PYTHON", python.path)
diff --git a/var/spack/repos/builtin/packages/libcatalyst/package.py b/var/spack/repos/builtin/packages/libcatalyst/package.py
index 6a5c34e165e..8d6d90ad739 100644
--- a/var/spack/repos/builtin/packages/libcatalyst/package.py
+++ b/var/spack/repos/builtin/packages/libcatalyst/package.py
@@ -53,7 +53,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+conduit"):
env.prepend_path("CMAKE_PREFIX_PATH", spec["conduit"].prefix)
diff --git a/var/spack/repos/builtin/packages/libceed/package.py b/var/spack/repos/builtin/packages/libceed/package.py
index d6df0b28133..948a35c80e5 100644
--- a/var/spack/repos/builtin/packages/libceed/package.py
+++ b/var/spack/repos/builtin/packages/libceed/package.py
@@ -55,6 +55,7 @@ class Libceed(MakefilePackage, CudaPackage, ROCmPackage):
depends_on("occa~cuda", when="~cuda")
depends_on("libxsmm", when="+libxsmm")
+ depends_on("blas", when="+libxsmm", type="link")
depends_on("magma", when="+magma")
@@ -136,6 +137,7 @@ def common_make_opts(self):
if spec.satisfies("+libxsmm"):
makeopts += ["XSMM_DIR=%s" % spec["libxsmm"].prefix]
+ makeopts += ["BLAS_LIB=%s" % spec["blas"].libs]
if spec.satisfies("+magma"):
makeopts += ["MAGMA_DIR=%s" % spec["magma"].prefix]
diff --git a/var/spack/repos/builtin/packages/libcerf/package.py b/var/spack/repos/builtin/packages/libcerf/package.py
index 02bc1dc8c66..3f1468f5297 100644
--- a/var/spack/repos/builtin/packages/libcerf/package.py
+++ b/var/spack/repos/builtin/packages/libcerf/package.py
@@ -3,24 +3,52 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.build_systems.autotools import AutotoolsBuilder
+from spack.build_systems.cmake import CMakeBuilder
from spack.package import *
-class Libcerf(AutotoolsPackage, SourceforgePackage):
+class Libcerf(AutotoolsPackage, CMakePackage):
"""A self-contained C library providing complex error functions, based
on Faddeeva's plasma dispersion function w(z). Also provides Dawson's
- integral and Voigt's convolution of a Gaussian and a Lorentzian
+ integral and Voigt's convolution of a Gaussian and a Lorentzian"""
- """
+ homepage = "https://jugit.fz-juelich.de/mlz/libcerf/"
+ url = "https://jugit.fz-juelich.de/mlz/libcerf/-/archive/v2.4/libcerf-v2.4.tar.gz"
- homepage = "https://sourceforge.net/projects/libcerf/"
- sourceforge_mirror_path = "libcerf/libcerf-1.3.tgz"
+ license("MIT")
- version("1.3", sha256="d7059e923d3f370c89fb4d19ed4f827d381bc3f0e36da5595a04aeaaf3e6a859")
+ maintainers("white238")
- depends_on("c", type="build") # generated
- depends_on("fortran", type="build") # generated
+ version("2.4", sha256="080b30ae564c3dabe3b89264522adaf5647ec754021572bee54929697b276cdc")
+ version("2.3", sha256="cceefee46e84ce88d075103390b4f9d04c34e4bc3b96d733292c36836d4f7065")
+ version(
+ "1.3",
+ sha256="d7059e923d3f370c89fb4d19ed4f827d381bc3f0e36da5595a04aeaaf3e6a859",
+ url="https://sourceforge.net/projects/libcerf/files/libcerf-1.3.tgz",
+ )
+ variant("cpp", default=False, when="@2:", description="Compile source as C++")
+
+ # Build system
+ build_system(
+ conditional("cmake", when="@2:"), conditional("autotools", when="@=1.3"), default="cmake"
+ )
+
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
+
+
+class CMakeBuilder(CMakeBuilder):
+ def cmake_args(self):
+ args = []
+
+ args.append(self.define_from_variant("CERF_CPP", "cpp"))
+
+ return args
+
+
+class AutotoolsBuilder(AutotoolsBuilder):
def configure_args(self):
spec = self.spec
options = []
diff --git a/var/spack/repos/builtin/packages/libcxi/package.py b/var/spack/repos/builtin/packages/libcxi/package.py
index a663751c977..b3a3ba5c25b 100644
--- a/var/spack/repos/builtin/packages/libcxi/package.py
+++ b/var/spack/repos/builtin/packages/libcxi/package.py
@@ -23,6 +23,12 @@ class Libcxi(AutotoolsPackage):
depends_on("c", type="build")
+ with default_args(type="build", when="@main"):
+ depends_on("autoconf")
+ depends_on("automake")
+ depends_on("libtool")
+ depends_on("pkgconfig")
+
depends_on("cassini-headers")
depends_on("cxi-driver")
@@ -54,7 +60,7 @@ def autoreconf(self, spec, prefix):
sh = which("sh")
sh("autogen.sh")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CFLAGS", f"-I{self.spec['cassini-headers'].prefix.include}")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/libdap4/package.py b/var/spack/repos/builtin/packages/libdap4/package.py
index 1cee469517d..47ef022722d 100644
--- a/var/spack/repos/builtin/packages/libdap4/package.py
+++ b/var/spack/repos/builtin/packages/libdap4/package.py
@@ -39,7 +39,7 @@ class Libdap4(AutotoolsPackage):
depends_on("uuid")
depends_on("rpc")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Configure script will search for RPC library, but not actually add RPC library references
# during configure tests. This can cause a failure with libtirpc if the following variable
# is not set.
diff --git a/var/spack/repos/builtin/packages/libdisplay-info/package.py b/var/spack/repos/builtin/packages/libdisplay-info/package.py
new file mode 100644
index 00000000000..469549f5614
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libdisplay-info/package.py
@@ -0,0 +1,23 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class LibdisplayInfo(MesonPackage):
+ """EDID and DisplayID library"""
+
+ homepage = "https://emersion.pages.freedesktop.org/libdisplay-info/"
+ url = "https://gitlab.freedesktop.org/emersion/libdisplay-info/-/archive/0.2.0/libdisplay-info-0.2.0.tar.bz2"
+
+ maintainers("teaguesterling")
+
+ license("MIT", checked_by="teaguesterling")
+
+ version("0.2.0", sha256="f6cf2ddbba3753ae38de5113d1fcb8fab977dfaf5fb07b38cd68d8482765e208")
+
+ depends_on("c", type="build")
+ with default_args(type="build"):
+ depends_on("hwdata@0.392:")
+ depends_on("python")
diff --git a/var/spack/repos/builtin/packages/libfabric/package.py b/var/spack/repos/builtin/packages/libfabric/package.py
index 6584d351aa9..c6b18cd18f8 100644
--- a/var/spack/repos/builtin/packages/libfabric/package.py
+++ b/var/spack/repos/builtin/packages/libfabric/package.py
@@ -175,17 +175,19 @@ def determine_variants(cls, exes, version):
results.append(" ".join(variants))
return results
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.run_tests:
env.prepend_path("PATH", self.prefix.bin)
# To enable this package add it to the LD_LIBRARY_PATH
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64)
# To enable this package add it to the LD_LIBRARY_PATH
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib64)
diff --git a/var/spack/repos/builtin/packages/libffi/package.py b/var/spack/repos/builtin/packages/libffi/package.py
index a4db1aa30db..8fb8fec9efa 100644
--- a/var/spack/repos/builtin/packages/libffi/package.py
+++ b/var/spack/repos/builtin/packages/libffi/package.py
@@ -16,6 +16,7 @@ class Libffi(AutotoolsPackage):
license("MIT")
+ version("3.4.7", sha256="138607dee268bdecf374adf9144c00e839e38541f75f24a1fcf18b78fda48b2d")
version("3.4.6", sha256="b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e")
version("3.4.5", sha256="96fff4e589e3b239d888d9aa44b3ff30693c2ba1617f953925a70ddebcc102b2")
version("3.4.4", sha256="d66c56ad259a82cf2a9dfc408b32bf5da52371500b84745f7fb8b645712df676")
@@ -32,8 +33,8 @@ class Libffi(AutotoolsPackage):
sha256="d06ebb8e1d9a22d19e38d63fdb83954253f39bedc5d46232a05645685722ca37",
)
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
patch("clang-powerpc-3.2.1.patch", when="@3.2.1 platform=linux %clang")
# ref.: https://github.com/libffi/libffi/pull/561
@@ -44,6 +45,10 @@ class Libffi(AutotoolsPackage):
when="@3.4.3:3.4.4",
)
+ conflicts(
+ "%apple-clang@17.0.0", when="@:3.4.6", msg="Newer libffi required for Apple Clang 17.0.0"
+ )
+
@property
def headers(self):
# The headers are probably in self.prefix.lib but we search everywhere
@@ -61,7 +66,7 @@ def flag_handler(self, name, flags):
def configure_args(self):
args = ["--with-pic"]
- if self.spec.version >= Version("3.3"):
+ if self.spec.satisfies("@3.3:"):
# Spack adds its own target flags, so tell libffi not to
# second-guess us
args.append("--without-gcc-arch")
diff --git a/var/spack/repos/builtin/packages/libhugetlbfs/package.py b/var/spack/repos/builtin/packages/libhugetlbfs/package.py
index de5734e25da..851c07cffcc 100644
--- a/var/spack/repos/builtin/packages/libhugetlbfs/package.py
+++ b/var/spack/repos/builtin/packages/libhugetlbfs/package.py
@@ -26,7 +26,7 @@ class Libhugetlbfs(AutotoolsPackage):
install_targets = ["-e", "install"]
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BUILDTYPE", "NATIVEONLY")
env.set("PREFIX", self.prefix)
env.set("V", "1")
diff --git a/var/spack/repos/builtin/packages/libiconv/package.py b/var/spack/repos/builtin/packages/libiconv/package.py
index 10928743d2c..43d314e9c5f 100644
--- a/var/spack/repos/builtin/packages/libiconv/package.py
+++ b/var/spack/repos/builtin/packages/libiconv/package.py
@@ -14,6 +14,7 @@ class Libiconv(AutotoolsPackage, GNUMirrorPackage):
license("LGPL-2.1-or-later")
+ version("1.18", sha256="3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8")
version("1.17", sha256="8f74213b56238c85a50a5329f77e06198771e70dd9a739779f4c02f65d971313")
version("1.16", sha256="e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04")
version("1.15", sha256="ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178")
diff --git a/var/spack/repos/builtin/packages/libint/package.py b/var/spack/repos/builtin/packages/libint/package.py
index 093b32e343e..bcc856e0eb8 100644
--- a/var/spack/repos/builtin/packages/libint/package.py
+++ b/var/spack/repos/builtin/packages/libint/package.py
@@ -117,7 +117,7 @@ def optflags(self):
return flags
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Set optimization flags
env.set("CFLAGS", self.optflags)
env.set("CXXFLAGS", self.optflags)
diff --git a/var/spack/repos/builtin/packages/libluv/package.py b/var/spack/repos/builtin/packages/libluv/package.py
index 2f04376a308..85f12e9769a 100644
--- a/var/spack/repos/builtin/packages/libluv/package.py
+++ b/var/spack/repos/builtin/packages/libluv/package.py
@@ -15,6 +15,8 @@ class Libluv(CMakePackage):
license("Apache-2.0")
+ version("1.50.0-1", sha256="d867c3024d9c981d54f2edd83e13fd6dc1158f0608635f7b1c0f6b5586b5bc34")
+ version("1.48.0-2", sha256="2c3a1ddfebb4f6550293a40ee789f7122e97647eede51511f57203de48c03b7a")
version("1.48.0-2", sha256="2c3a1ddfebb4f6550293a40ee789f7122e97647eede51511f57203de48c03b7a")
version("1.45.0-0", sha256="fa6c46fb09f88320afa7f88017efd7b0d2b3a0158c5ba5b6851340b0332a2b81")
version("1.44.2-1", sha256="3eb5c7bc44f61fbc4148ea30e3221d410263e0ffa285672851fc19debf9e5c30")
diff --git a/var/spack/repos/builtin/packages/libmaus2/package.py b/var/spack/repos/builtin/packages/libmaus2/package.py
index 3af59d51db0..ea8330a39aa 100644
--- a/var/spack/repos/builtin/packages/libmaus2/package.py
+++ b/var/spack/repos/builtin/packages/libmaus2/package.py
@@ -33,6 +33,6 @@ class Libmaus2(AutotoolsPackage):
),
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%gcc@8.0:8.9") or self.spec.satisfies("%fj"):
env.append_flags("LDFLAGS", "-lstdc++fs")
diff --git a/var/spack/repos/builtin/packages/libmesh/package.py b/var/spack/repos/builtin/packages/libmesh/package.py
index c2503c6054f..18f85925d7d 100644
--- a/var/spack/repos/builtin/packages/libmesh/package.py
+++ b/var/spack/repos/builtin/packages/libmesh/package.py
@@ -133,6 +133,9 @@ class Libmesh(AutotoolsPackage):
"variant.",
)
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("boost", when="+boost")
# TODO: replace this with an explicit list of components of Boost,
@@ -321,5 +324,7 @@ def configure_args(self):
return options
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.append_flags("PERL", self.spec["perl"].command.path)
diff --git a/var/spack/repos/builtin/packages/libmicrohttpd/package.py b/var/spack/repos/builtin/packages/libmicrohttpd/package.py
index 9c2e651ae88..acd8d977d9d 100644
--- a/var/spack/repos/builtin/packages/libmicrohttpd/package.py
+++ b/var/spack/repos/builtin/packages/libmicrohttpd/package.py
@@ -5,13 +5,13 @@
from spack.package import *
-class Libmicrohttpd(AutotoolsPackage):
+class Libmicrohttpd(AutotoolsPackage, GNUMirrorPackage):
"""GNU libmicrohttpd is a small C library that is supposed to make
it easy to run an HTTP server as part of another application.
"""
homepage = "https://www.gnu.org/software/libmicrohttpd/"
- url = "https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.71.tar.gz"
+ gnu_mirror_path = "libmicrohttpd/libmicrohttpd-0.9.71.tar.gz"
maintainers("hainest")
diff --git a/var/spack/repos/builtin/packages/libogg/package.py b/var/spack/repos/builtin/packages/libogg/package.py
index 4bdfd7c7572..38e3637e39f 100644
--- a/var/spack/repos/builtin/packages/libogg/package.py
+++ b/var/spack/repos/builtin/packages/libogg/package.py
@@ -21,7 +21,8 @@ class Libogg(CMakePackage, AutotoolsPackage, Package):
version("1.3.4", sha256="fe5670640bd49e828d64d2879c31cb4dde9758681bb664f9bdbf159a01b0c76e")
version("1.3.2", sha256="e19ee34711d7af328cb26287f4137e70630e7261b17cbe3cd41011d73a654692")
- depends_on("c", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
variant("shared", default=True, description="Build shared library", when="build_system=cmake")
variant(
diff --git a/var/spack/repos/builtin/packages/libpng/package.py b/var/spack/repos/builtin/packages/libpng/package.py
index 04b07110d34..c1c8704bb50 100644
--- a/var/spack/repos/builtin/packages/libpng/package.py
+++ b/var/spack/repos/builtin/packages/libpng/package.py
@@ -11,12 +11,13 @@ class Libpng(CMakePackage):
homepage = "http://www.libpng.org/pub/png/libpng.html"
url = "https://prdownloads.sourceforge.net/libpng/libpng-1.6.37.tar.xz"
- git = "https://github.com/glennrp/libpng.git"
+ git = "https://github.com/pnggroup/libpng"
maintainers("AlexanderRichert-NOAA")
license("Libpng")
+ version("1.6.47", sha256="b213cb381fbb1175327bd708a77aab708a05adde7b471bc267bd15ac99893631")
version("1.6.39", sha256="1f4696ce70b4ee5f85f1e1623dc1229b210029fa4b7aee573df3e2ba7b036937")
version("1.6.37", sha256="505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca")
# From http://www.libpng.org/pub/png/libpng.html (2019-04-15)
@@ -29,8 +30,13 @@ class Libpng(CMakePackage):
version("1.5.30", sha256="7d76275fad2ede4b7d87c5fd46e6f488d2a16b5a69dc968ffa840ab39ba756ed")
version("1.2.57", sha256="0f4620e11fa283fedafb474427c8e96bf149511a1804bdc47350963ae5cf54d8")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.14:", type="build", when="@1.6.47:")
+ depends_on("cmake@3.1:", type="build", when="@1.6.37:")
+ depends_on("cmake@2.8.3:", type="build", when="@1.5.30:")
+ depends_on("cmake@2.4.3:", type="build", when="@1.2.57:")
depends_on("zlib-api")
@@ -43,6 +49,9 @@ class Libpng(CMakePackage):
)
variant("pic", default=False, description="PIC")
+ # Tries but fails to include fp.h, removed in libpng 1.6.45
+ conflicts("@:1.6.44", when="%apple-clang@17:")
+
@property
def libs(self):
# v1.2 does not have a version-less symlink
@@ -62,6 +71,9 @@ def cmake_args(self):
self.define("PNG_STATIC", "static" in self.spec.variants["libs"].value),
self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"),
]
+ zlib_lib = self.spec["zlib-api"].libs
+ if zlib_lib:
+ args.append(self.define("ZLIB_LIBRARY", zlib_lib[0]))
if self.spec.satisfies("platform=darwin target=aarch64:"):
args.append("-DPNG_ARM_NEON=off")
return args
diff --git a/var/spack/repos/builtin/packages/libpressio/package.py b/var/spack/repos/builtin/packages/libpressio/package.py
index 18f8f7cbaf8..a020e47156b 100644
--- a/var/spack/repos/builtin/packages/libpressio/package.py
+++ b/var/spack/repos/builtin/packages/libpressio/package.py
@@ -262,7 +262,7 @@ class Libpressio(CMakePackage, CudaPackage):
depends_on("zfp", when="+zfp")
depends_on("petsc", when="+petsc")
depends_on("mpi@2:", when="+mpi")
- depends_on("lua-sol2", when="+lua")
+ depends_on("lua-sol2@:3.3.0", when="+lua")
depends_on("libdistributed@0.0.11:", when="+libdistributed")
depends_on("libdistributed@0.4.0:", when="@0.85.0:+libdistributed")
depends_on("pkgconfig", type="build")
@@ -395,7 +395,7 @@ def cmake_args(self):
args.append("-DHDF5_ROOT=" + self.spec["hdf5"].prefix)
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+hdf5") and self.spec.satisfies("+json"):
env.prepend_path("HDF5_PLUGIN_PATH", self.prefix.lib64)
diff --git a/var/spack/repos/builtin/packages/libproxy/package.py b/var/spack/repos/builtin/packages/libproxy/package.py
index a1a67bd28e4..41496f5e4cd 100644
--- a/var/spack/repos/builtin/packages/libproxy/package.py
+++ b/var/spack/repos/builtin/packages/libproxy/package.py
@@ -43,7 +43,7 @@ def cmake_args(self):
args.append(self.define("PYTHON3_SITEPKG_DIR", python_platlib))
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+python"):
libs = self.spec["libproxy"].libs.directories[0]
if self.spec.satisfies("platform=darwin"):
diff --git a/var/spack/repos/builtin/packages/libpsm3/package.py b/var/spack/repos/builtin/packages/libpsm3/package.py
index 921fb3af1f9..b2f47514fb1 100644
--- a/var/spack/repos/builtin/packages/libpsm3/package.py
+++ b/var/spack/repos/builtin/packages/libpsm3/package.py
@@ -51,7 +51,7 @@ def install(self, spec, prefix):
os.unlink("%s/libpsm3-fi.la" % prefix.lib)
install("src/libpsm3-fi.la", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("FI_PROVIDER_PATH", self.prefix.lib)
env.set("FI_PROVIDER", "psm3")
env.set("PSM3_ALLOW_ROUTERS", "1")
diff --git a/var/spack/repos/builtin/packages/librsb/package.py b/var/spack/repos/builtin/packages/librsb/package.py
index 74674829e4a..e8a8f4cd6b8 100644
--- a/var/spack/repos/builtin/packages/librsb/package.py
+++ b/var/spack/repos/builtin/packages/librsb/package.py
@@ -42,10 +42,10 @@ class Librsb(AutotoolsPackage):
variant("serial", default=False, description="Disable OpenMP support.")
variant("verbose", default=False, description="Extra Library Verbosity. Good for learning.")
- def setup_build_environment(self, spack_env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
- spack_env.set("LSAN_OPTIONS", "verbosity=1:log_threads=1")
- spack_env.set("ASAN_OPTS", "detect_leaks=0")
+ env.set("LSAN_OPTIONS", "verbosity=1:log_threads=1")
+ env.set("ASAN_OPTS", "detect_leaks=0")
def configure_args(self):
args = [
diff --git a/var/spack/repos/builtin/packages/librsvg/package.py b/var/spack/repos/builtin/packages/librsvg/package.py
index 80a2e692233..3d02aedabd9 100644
--- a/var/spack/repos/builtin/packages/librsvg/package.py
+++ b/var/spack/repos/builtin/packages/librsvg/package.py
@@ -67,18 +67,22 @@ def url_for_version(self, version):
url += "{0}/librsvg-{1}.tar.xz"
return url.format(version.up_to(2), version)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
# librsvg uses pthread_atfork() but does not use -pthread on Ubuntu 18.04 %gcc@8
env.append_flags("LDFLAGS", "-pthread")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/libsm/package.py b/var/spack/repos/builtin/packages/libsm/package.py
index b61f952269e..d43a2f9e801 100644
--- a/var/spack/repos/builtin/packages/libsm/package.py
+++ b/var/spack/repos/builtin/packages/libsm/package.py
@@ -15,6 +15,7 @@ class Libsm(AutotoolsPackage, XorgPackage):
maintainers("wdconinc")
+ version("1.2.6", sha256="166b4b50d606cdd83f1ddc61b5b9162600034f848b3e32ccbb0e63536b7d6cdd")
version("1.2.5", sha256="a11c3d23b60dce0c13256a8ce9478c1ea330719c0747b5adfbce60571198fa57")
version("1.2.4", sha256="51464ce1abce323d5b6707ceecf8468617106e1a8a98522f8342db06fd024c15")
version("1.2.3", sha256="1e92408417cb6c6c477a8a6104291001a40b3bb56a4a60608fdd9cd2c5a0f320")
diff --git a/var/spack/repos/builtin/packages/libtasn1/package.py b/var/spack/repos/builtin/packages/libtasn1/package.py
index 283b5089728..4ef4e854d2c 100644
--- a/var/spack/repos/builtin/packages/libtasn1/package.py
+++ b/var/spack/repos/builtin/packages/libtasn1/package.py
@@ -5,11 +5,11 @@
from spack.package import *
-class Libtasn1(Package):
+class Libtasn1(Package, GNUMirrorPackage):
"""ASN.1 structure parser library."""
homepage = "https://www.gnu.org/software/libtasn1/"
- url = "https://ftp.gnu.org/gnu/libtasn1/libtasn1-4.13.tar.gz"
+ gnu_mirror_path = "libtasn1/libtasn1-4.13.tar.gz"
license("LGPL-2.1-or-later")
diff --git a/var/spack/repos/builtin/packages/libtermkey/package.py b/var/spack/repos/builtin/packages/libtermkey/package.py
index 43008217338..642f2e4a3ec 100644
--- a/var/spack/repos/builtin/packages/libtermkey/package.py
+++ b/var/spack/repos/builtin/packages/libtermkey/package.py
@@ -27,7 +27,7 @@ class Libtermkey(MakefilePackage):
depends_on("pkgconfig", type="build")
depends_on("unibilium")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LIBTOOL", self.spec["libtool"].prefix.bin.join("libtool"))
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/libtheora/package.py b/var/spack/repos/builtin/packages/libtheora/package.py
index 5aa73497d5d..ee3daed1e39 100644
--- a/var/spack/repos/builtin/packages/libtheora/package.py
+++ b/var/spack/repos/builtin/packages/libtheora/package.py
@@ -82,7 +82,7 @@ class MSBuildBuilder(MSBuildBuilder):
def is_64bit(self):
return "64" in str(self.pkg.spec.target.family)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.pkg.spec
env.set("SPACK_OGG_PREFIX", spec["libogg"].prefix)
# devenv is needed to convert ancient MSbuild project to modern
diff --git a/var/spack/repos/builtin/packages/libtool/package.py b/var/spack/repos/builtin/packages/libtool/package.py
index d9d014fbcc4..3dd76852bd9 100644
--- a/var/spack/repos/builtin/packages/libtool/package.py
+++ b/var/spack/repos/builtin/packages/libtool/package.py
@@ -89,7 +89,9 @@ def patch(self):
filter_file("-fno-builtin", "-Mnobuiltin", "configure")
filter_file("-fno-builtin", "-Mnobuiltin", "libltdl/configure")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.append_path("ACLOCAL_PATH", self.prefix.share.aclocal)
def setup_dependent_package(self, module, dependent_spec):
@@ -116,12 +118,12 @@ def post_install(self):
join_path(self.prefix.bin, "libtoolize"), join_path(self.prefix.bin, "glibtoolize")
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Wrapper until spack has a real implementation of setup_test_environment()"""
if self.run_tests:
self.setup_test_environment(env)
- def setup_test_environment(self, env):
+ def setup_test_environment(self, env: EnvironmentModifications):
"""When Fortran is not provided, a few tests need to be skipped"""
if self.compiler.f77 is None:
env.set("F77", "no")
diff --git a/var/spack/repos/builtin/packages/libunwind/package.py b/var/spack/repos/builtin/packages/libunwind/package.py
index 081f649a997..5b52e93b57f 100644
--- a/var/spack/repos/builtin/packages/libunwind/package.py
+++ b/var/spack/repos/builtin/packages/libunwind/package.py
@@ -14,6 +14,8 @@ class Libunwind(AutotoolsPackage):
git = "https://github.com/libunwind/libunwind"
maintainers("mwkrentel")
+ tags = ["e4s"]
+
license("MIT")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/libuser/package.py b/var/spack/repos/builtin/packages/libuser/package.py
index f0feed6a98b..d4503d8ceee 100644
--- a/var/spack/repos/builtin/packages/libuser/package.py
+++ b/var/spack/repos/builtin/packages/libuser/package.py
@@ -23,5 +23,5 @@ class Libuser(AutotoolsPackage):
depends_on("linux-pam")
depends_on("popt")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/libvterm/package.py b/var/spack/repos/builtin/packages/libvterm/package.py
index 45ad96db84c..3f432fb9545 100644
--- a/var/spack/repos/builtin/packages/libvterm/package.py
+++ b/var/spack/repos/builtin/packages/libvterm/package.py
@@ -30,7 +30,7 @@ def url_for_version(self, version):
url = "https://launchpad.net/libvterm/trunk/v{0}/+download/libvterm-{1}.tar.gz"
return url.format(version.up_to(2), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LIBTOOL", self.spec["libtool"].prefix.bin.join("libtool"))
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/libwnck/package.py b/var/spack/repos/builtin/packages/libwnck/package.py
index ac595cb8cd4..d7deccfcff3 100644
--- a/var/spack/repos/builtin/packages/libwnck/package.py
+++ b/var/spack/repos/builtin/packages/libwnck/package.py
@@ -71,6 +71,8 @@ def configure_args(self):
return args
- def setup_dependent_build_environment(self, env, dep_spec):
- if self.spec.satisfies("+introspection") and dep_spec.satisfies("+introspection"):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
+ if self.spec.satisfies("+introspection") and dependent_spec.satisfies("+introspection"):
env.append_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/libx11/package.py b/var/spack/repos/builtin/packages/libx11/package.py
index 7f6e677780f..a602cb9dcb4 100644
--- a/var/spack/repos/builtin/packages/libx11/package.py
+++ b/var/spack/repos/builtin/packages/libx11/package.py
@@ -63,10 +63,14 @@ def configure_args(self):
return config_args
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XLOCALEDIR", self.prefix.share.X11.locale)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XLOCALEDIR", self.prefix.share.X11.locale)
@property
diff --git a/var/spack/repos/builtin/packages/libxc/package.py b/var/spack/repos/builtin/packages/libxc/package.py
index 4c6e66b5dd7..234a9ab1973 100644
--- a/var/spack/repos/builtin/packages/libxc/package.py
+++ b/var/spack/repos/builtin/packages/libxc/package.py
@@ -104,7 +104,7 @@ def libs(self):
class AutotoolsBuilder(autotools.AutotoolsBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# microarchitecture-specific optimization flags should be controlled
# by Spack, otherwise we may end up with contradictory or invalid flags
# see https://github.com/spack/spack/issues/17794
diff --git a/var/spack/repos/builtin/packages/libxcb/package.py b/var/spack/repos/builtin/packages/libxcb/package.py
index 59e4b8d6489..8e05dbb05c5 100644
--- a/var/spack/repos/builtin/packages/libxcb/package.py
+++ b/var/spack/repos/builtin/packages/libxcb/package.py
@@ -69,5 +69,5 @@ def patch(self):
# If a newer release can be verified to build with LC_ALL=en_US.ISO-8859-1,
# then we can limit the following function, e.g.
# when("@:1.17")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LC_ALL", "C.UTF-8")
diff --git a/var/spack/repos/builtin/packages/libxfce4ui/package.py b/var/spack/repos/builtin/packages/libxfce4ui/package.py
index 04dd61ff01a..64a8a7ae975 100644
--- a/var/spack/repos/builtin/packages/libxfce4ui/package.py
+++ b/var/spack/repos/builtin/packages/libxfce4ui/package.py
@@ -58,8 +58,12 @@ def configure_args(self):
return args
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/libxfce4util/package.py b/var/spack/repos/builtin/packages/libxfce4util/package.py
index a1d4b47f4ac..ef03ed1b6c1 100644
--- a/var/spack/repos/builtin/packages/libxfce4util/package.py
+++ b/var/spack/repos/builtin/packages/libxfce4util/package.py
@@ -48,8 +48,12 @@ def configure_args(self):
return args
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py
index 898eb946c4d..7d0717867a3 100644
--- a/var/spack/repos/builtin/packages/libxml2/package.py
+++ b/var/spack/repos/builtin/packages/libxml2/package.py
@@ -5,11 +5,11 @@
import llnl.util.filesystem as fs
-from spack.build_systems import autotools, nmake
+from spack.build_systems import autotools, cmake, nmake
from spack.package import *
-class Libxml2(AutotoolsPackage, NMakePackage):
+class Libxml2(AutotoolsPackage, CMakePackage, NMakePackage):
"""Libxml2 is the XML C parser and toolkit developed for the Gnome
project (but usable outside of the Gnome platform), it is free
software available under the MIT License."""
@@ -106,7 +106,12 @@ def url_for_version(self, version):
sha256="5dc43fed02b443d2563a502a52caafe39477c06fc30b70f786d5ed3eb5aea88d",
when="@2.9.11:2.9.14",
)
- build_system(conditional("nmake", when="platform=windows"), "autotools", default="autotools")
+ build_system(
+ conditional("nmake", when="platform=windows"),
+ conditional("cmake", when="@2.11:"),
+ "autotools",
+ default="autotools",
+ )
def flag_handler(self, name, flags):
if name == "cflags" and self.spec.satisfies("+pic"):
@@ -262,6 +267,18 @@ def configure_args(self):
return args
+class CMakeBuilder(AnyBuilder, cmake.CMakeBuilder):
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define_from_variant("LIBXML2_WITH_PYTHON", "python"),
+ self.define("LIBXML2_WITH_LZMA", True),
+ self.define("LIBXML2_WITH_ZLIB", True),
+ self.define("LIBXML2_WITH_TESTS", True),
+ ]
+ return args
+
+
class NMakeBuilder(AnyBuilder, nmake.NMakeBuilder):
phases = ("configure", "build", "install")
diff --git a/var/spack/repos/builtin/packages/libxsmm/package.py b/var/spack/repos/builtin/packages/libxsmm/package.py
index 2f5d90444e3..b20fd9946d5 100644
--- a/var/spack/repos/builtin/packages/libxsmm/package.py
+++ b/var/spack/repos/builtin/packages/libxsmm/package.py
@@ -95,7 +95,7 @@ class Libxsmm(MakefilePackage):
# A recent `as` is needed to compile libxmss until version 1.17
# (), but not afterwards
# ().
- depends_on("binutils+ld+gas@2.33:", type="build", when="@:1.17")
+ depends_on("binutils+ld+gas@2.33:", type="build")
# Version 2.0 supports both x86_64 and aarch64
requires("target=x86_64:", "target=aarch64:")
diff --git a/var/spack/repos/builtin/packages/ligra/package.py b/var/spack/repos/builtin/packages/ligra/package.py
index e6e31259f4a..bdf11729547 100644
--- a/var/spack/repos/builtin/packages/ligra/package.py
+++ b/var/spack/repos/builtin/packages/ligra/package.py
@@ -28,11 +28,11 @@ class Ligra(MakefilePackage):
depends_on("mkl", when="+mkl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+openmp"):
env.set("OPENMP", "1")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.apps)
env.prepend_path("PATH", self.prefix.utils)
diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py
index 81d51e6d362..16e58665150 100644
--- a/var/spack/repos/builtin/packages/likwid/package.py
+++ b/var/spack/repos/builtin/packages/likwid/package.py
@@ -113,7 +113,7 @@ def patch(self):
filter_file("^#!/usr/bin/perl -w", "#!/usr/bin/env perl", *files)
filter_file("^#!/usr/bin/perl", "#!/usr/bin/env perl", *files)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda"):
libs = find_libraries(
"libcupti", root=self.spec["cuda"].prefix, shared=True, recursive=True
diff --git a/var/spack/repos/builtin/packages/linaro-forge/package.py b/var/spack/repos/builtin/packages/linaro-forge/package.py
index 81e712b0871..82eb5e84e0b 100644
--- a/var/spack/repos/builtin/packages/linaro-forge/package.py
+++ b/var/spack/repos/builtin/packages/linaro-forge/package.py
@@ -22,6 +22,9 @@ class LinaroForge(Package):
maintainers("kenche-linaro")
if platform.machine() == "aarch64":
+ version(
+ "24.1.3", sha256="e79975611ae17b17481ec6626e9932bd0901cffcc6919bed523e3dc58dddefcd"
+ )
version(
"24.1.2", sha256="c3821b2e792d07b1b09f1ca81d1a27590b1bef62d5c48d6f7271debef62b6398"
)
@@ -100,6 +103,9 @@ class LinaroForge(Package):
"22.0.4", sha256="f4cb5bcbaa67f9209299fe4653186a2829760b8b16a2883913aa43766375b04c"
)
elif platform.machine() == "x86_64":
+ version(
+ "24.1.3", sha256="94ac68bbde8b56897d507c1ed27ff113bc8bf5167a2c513510a7ac7aed139d50"
+ )
version(
"24.1.2", sha256="794fed7cb60dd96fd68f0f414f6a8d15920cd2bd5a8795978150ca27c55a547d"
)
@@ -200,7 +206,7 @@ def install(self, spec, prefix):
probe = join_path(prefix, "bin", "forge-probe")
subprocess.call([probe, "--install", "global"])
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Only PATH is needed for Forge.
# Adding lib to LD_LIBRARY_PATH can cause conflicts with Forge's internal libs.
env.clear()
diff --git a/var/spack/repos/builtin/packages/linux-external-modules/package.py b/var/spack/repos/builtin/packages/linux-external-modules/package.py
index a1434ec5db8..0b898586841 100644
--- a/var/spack/repos/builtin/packages/linux-external-modules/package.py
+++ b/var/spack/repos/builtin/packages/linux-external-modules/package.py
@@ -323,7 +323,7 @@ class LinuxExternalModules(MakefilePackage):
depends_on("binutils@2.25:", when="@6.2:")
depends_on("binutils@2.23:", when="@6.0:6.2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("KBUILD_OUTPUT", self.prefix)
@run_before("build")
diff --git a/var/spack/repos/builtin/packages/linux-headers/package.py b/var/spack/repos/builtin/packages/linux-headers/package.py
index 6969e87f382..f4cfb4abb4c 100644
--- a/var/spack/repos/builtin/packages/linux-headers/package.py
+++ b/var/spack/repos/builtin/packages/linux-headers/package.py
@@ -31,7 +31,7 @@ def url_for_version(self, version):
url = "https://www.kernel.org/pub/linux/kernel/v{0}.x/linux-{1}.tar.xz"
return url.format(version.up_to(1), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# This variable is used in the Makefile. If it is defined on the
# system, it can break the build if there is no build recipe for
# that specific ARCH
diff --git a/var/spack/repos/builtin/packages/linux-perf/package.py b/var/spack/repos/builtin/packages/linux-perf/package.py
index 71e5a08d7f8..aff3eb305c8 100644
--- a/var/spack/repos/builtin/packages/linux-perf/package.py
+++ b/var/spack/repos/builtin/packages/linux-perf/package.py
@@ -99,7 +99,7 @@ class LinuxPerf(Package):
def url_for_version(self, version):
return f"https://cdn.kernel.org/pub/linux/kernel/v{version[0]}.x/linux-{version}.tar.xz"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# This variable is used in the Makefile. If it is defined on the
# system, it can break the build if there is no build recipe for
# that specific ARCH
diff --git a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py
index 6497165455e..a83ec931b42 100644
--- a/var/spack/repos/builtin/packages/llvm-amdgpu/package.py
+++ b/var/spack/repos/builtin/packages/llvm-amdgpu/package.py
@@ -33,7 +33,7 @@ class LlvmAmdgpu(CMakePackage, LlvmDetection, CompilerPackage):
license("Apache-2.0")
- version("master", branch="amd-stg-open")
+ version("master", branch="amd-stg-open", deprecated=True)
version("6.3.3", sha256="4df9aba24e574edf23844c0d2d9dda112811db5c2b08c9428604a21b819eb23d")
version("6.3.2", sha256="1f52e45660ea508d3fe717a9903fe27020cee96de95a3541434838e0193a4827")
version("6.3.1", sha256="e9c2481cccacdea72c1f8d3970956c447cec47e18dfb9712cbbba76a2820552c")
@@ -329,11 +329,13 @@ def cmake_args(self):
compiler_version_regex = r"roc-(\d+[._]\d+[._]\d+)"
# Make sure that the compiler paths are in the LD_LIBRARY_PATH
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
# Make sure that the compiler paths are in the LD_LIBRARY_PATH
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
# Required for enabling asan on dependent packages
for root, _, files in os.walk(self.prefix):
@@ -358,7 +360,9 @@ def post_install(self):
)
# Required for enabling asan on dependent packages
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
for root, _, files in os.walk(self.prefix):
if "libclang_rt.asan-x86_64.so" in files:
env.prepend_path("LD_LIBRARY_PATH", root)
diff --git a/var/spack/repos/builtin/packages/llvm-doe/package.py b/var/spack/repos/builtin/packages/llvm-doe/package.py
index 84e17efcfbe..47a06b82e55 100644
--- a/var/spack/repos/builtin/packages/llvm-doe/package.py
+++ b/var/spack/repos/builtin/packages/llvm-doe/package.py
@@ -375,7 +375,7 @@ def flag_handler(self, name, flags):
return (None, flags, None)
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""When using %clang, add only its ld.lld-$ver and/or ld.lld to our PATH"""
if self.compiler.name in ["clang", "apple-clang"]:
for lld in "ld.lld-{0}".format(self.compiler.version.version[0]), "ld.lld":
@@ -386,7 +386,7 @@ def setup_build_environment(self, env):
os.symlink(bin, sym)
env.prepend_path("PATH", self.stage.path)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+clang"):
env.set("CC", join_path(self.spec.prefix.bin, "clang"))
env.set("CXX", join_path(self.spec.prefix.bin, "clang++"))
diff --git a/var/spack/repos/builtin/packages/llvm/detection_test.yaml b/var/spack/repos/builtin/packages/llvm/detection_test.yaml
index a189b585680..482c0941d16 100644
--- a/var/spack/repos/builtin/packages/llvm/detection_test.yaml
+++ b/var/spack/repos/builtin/packages/llvm/detection_test.yaml
@@ -68,6 +68,34 @@ paths:
cxx: ".*/bin/clang[+][+]"
fortran: ".*/bin/flang"
+# flang and flang-new in the same directory
+- layout:
+ - executables:
+ - "bin/clang"
+ - "bin/clang++"
+ script: |
+ echo "clang version 20.1.0-rc1 (https://github.com/llvm/llvm-project af7f483a9d801252247b6c72e3763c1f55c5a506)"
+ echo "Target: x86_64-unknown-linux-gnu"
+ echo "Thread model: posix"
+ echo "InstalledDir: /tmp/clang/LLVM-20.1.0-rc1-Linux-X64/bin"
+ - executables:
+ - "bin/flang"
+ - "bin/flang-new"
+ script: |
+ echo "flang version 20.1.0-rc1 (https://github.com/llvm/llvm-project af7f483a9d801252247b6c72e3763c1f55c5a506)"
+ echo "Target: x86_64-unknown-linux-gnu"
+ echo "Thread model: posix"
+ echo "InstalledDir: /tmp/clang/LLVM-20.1.0-rc1-Linux-X64/bin"
+ platforms: ["darwin", "linux"]
+ results:
+ - spec: 'llvm@20.1.0 +flang+clang~lld~lldb'
+ extra_attributes:
+ compilers:
+ c: ".*/bin/clang"
+ cxx: ".*/bin/clang[+][+]"
+ fortran: ".*/bin/flang"
+
+
# `~` and other weird characters in the version string
- layout:
- executables:
diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py
index 4ee27a5d1f8..bed952d1a7a 100644
--- a/var/spack/repos/builtin/packages/llvm/package.py
+++ b/var/spack/repos/builtin/packages/llvm/package.py
@@ -55,6 +55,10 @@ class Llvm(CMakePackage, CudaPackage, LlvmDetection, CompilerPackage):
version("main", branch="main")
# Latest stable
+ version("20.1.4", sha256="65e3a582c4c684fa707a56ff643427bce3633eceaceae3295d81c0e830f44b89")
+ version("20.1.3", sha256="b40c0d185b98c2ee3c0cb2f14cde65a06008b33dfb471cc7ad868f8ca3f7f897")
+ version("20.1.2", sha256="9ee597456405ddf4809bcf66a4765137a68a85361347ca2a4bb13d9176e932ab")
+ version("20.1.1", sha256="edde69aa3e48a3892a8f01332ff79cfb6179151b42503c4ba77d2cd408b013bf")
version("20.1.0", sha256="08bc382733777dda3c96259e3732ff96c1df98d0470c4f85b163274eae687f4f")
# Previous stable series releases
@@ -801,7 +805,7 @@ def determine_version(cls, exe):
def determine_variants(cls, exes, version_str):
# Do not need to reuse more general logic from CompilerPackage
# because LLVM has kindly named compilers
- variants, compilers = ["+clang"], {}
+ variants, compilers = {"+clang"}, {}
lld_found, lldb_found = False, False
for exe in sorted(exes, key=len):
name = os.path.basename(exe)
@@ -809,18 +813,18 @@ def determine_variants(cls, exes, version_str):
compilers.setdefault("cxx", exe)
elif "clang" in name:
compilers.setdefault("c", exe)
- elif "flang" in name:
- variants.append("+flang")
+ elif "flang" in name and "fortran" not in compilers:
+ variants.add("+flang")
compilers.setdefault("fortran", exe)
elif "ld.lld" in name:
lld_found = True
elif "lldb" in name:
lldb_found = True
- variants.append("+lld" if lld_found else "~lld")
- variants.append("+lldb" if lldb_found else "~lldb")
+ variants.add("+lld" if lld_found else "~lld")
+ variants.add("+lldb" if lldb_found else "~lldb")
- return "".join(variants), {"compilers": compilers}
+ return "".join(sorted(variants)), {"compilers": compilers}
@classmethod
def validate_detected_spec(cls, spec, extra_attributes):
@@ -933,7 +937,7 @@ def flag_handler(self, name, flags):
return (None, flags, None)
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""When using %clang, add only its ld.lld-$ver and/or ld.lld to our PATH"""
if self.compiler.name in ["clang", "apple-clang"]:
for lld in "ld.lld-{0}".format(self.compiler.version.version[0]), "ld.lld":
@@ -948,7 +952,13 @@ def setup_build_environment(self, env):
# 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("%intel-oneapi-compilers"):
+ intel_libs = find_libraries(
+ ["libsvml", "libimf", "libirc"], self.spec["intel-oneapi-runtime"].prefix.lib
+ )
+ env.append_flags("LDFLAGS", intel_libs.ld_flags)
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+clang"):
env.set("CC", join_path(self.spec.prefix.bin, "clang"))
env.set("CXX", join_path(self.spec.prefix.bin, "clang++"))
diff --git a/var/spack/repos/builtin/packages/lmbench/package.py b/var/spack/repos/builtin/packages/lmbench/package.py
index 6bd97c4867e..0195181be1c 100644
--- a/var/spack/repos/builtin/packages/lmbench/package.py
+++ b/var/spack/repos/builtin/packages/lmbench/package.py
@@ -28,7 +28,7 @@ class Lmbench(MakefilePackage):
when="target=aarch64:",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["libtirpc"].prefix.include.tirpc)
env.append_flags("LDFLAGS", "-ltirpc")
diff --git a/var/spack/repos/builtin/packages/lmod/package.py b/var/spack/repos/builtin/packages/lmod/package.py
index ef5259eb6c0..78d00e1b6fc 100644
--- a/var/spack/repos/builtin/packages/lmod/package.py
+++ b/var/spack/repos/builtin/packages/lmod/package.py
@@ -77,7 +77,7 @@ class Lmod(AutotoolsPackage):
parallel = False
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
stage_lua_path = join_path(self.stage.source_path, "src", "?.lua")
env.append_path("LUA_PATH", stage_lua_path.format(version=self.version), separator=";")
diff --git a/var/spack/repos/builtin/packages/log4cxx/package.py b/var/spack/repos/builtin/packages/log4cxx/package.py
index 3b796619ce8..8f569b1101a 100644
--- a/var/spack/repos/builtin/packages/log4cxx/package.py
+++ b/var/spack/repos/builtin/packages/log4cxx/package.py
@@ -50,6 +50,8 @@ class Log4cxx(CMakePackage):
depends_on("expat")
depends_on("zlib-api")
depends_on("zip")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
def cmake_args(self):
return [
diff --git a/var/spack/repos/builtin/packages/logrotate/package.py b/var/spack/repos/builtin/packages/logrotate/package.py
index 54e2be01a75..f05b761a5a4 100644
--- a/var/spack/repos/builtin/packages/logrotate/package.py
+++ b/var/spack/repos/builtin/packages/logrotate/package.py
@@ -28,5 +28,5 @@ class Logrotate(AutotoolsPackage):
depends_on("popt")
depends_on("acl")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/logstash/package.py b/var/spack/repos/builtin/packages/logstash/package.py
index e2630f780c7..6a86fb93b67 100644
--- a/var/spack/repos/builtin/packages/logstash/package.py
+++ b/var/spack/repos/builtin/packages/logstash/package.py
@@ -32,6 +32,6 @@ def url_for_version(self, version):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# do not use the bundled jdk
env.set("LS_JAVA_HOME", self.spec["java"].home)
diff --git a/var/spack/repos/builtin/packages/lorene/package.py b/var/spack/repos/builtin/packages/lorene/package.py
index 59f967563b2..09ea498a092 100644
--- a/var/spack/repos/builtin/packages/lorene/package.py
+++ b/var/spack/repos/builtin/packages/lorene/package.py
@@ -30,6 +30,9 @@ class Lorene(MakefilePackage):
description="Build Bin_star solver for binary neutron star systems",
)
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("blas")
depends_on("fftw @3:", when="+fftw")
depends_on("gsl")
diff --git a/var/spack/repos/builtin/packages/lshw/package.py b/var/spack/repos/builtin/packages/lshw/package.py
index 421cc241e1d..af865502dac 100644
--- a/var/spack/repos/builtin/packages/lshw/package.py
+++ b/var/spack/repos/builtin/packages/lshw/package.py
@@ -29,8 +29,8 @@ class Lshw(MakefilePackage):
depends_on("c", type="build")
depends_on("cxx", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/ltr-retriever/package.py b/var/spack/repos/builtin/packages/ltr-retriever/package.py
index 91dfdfe2d35..df30cbc47f8 100644
--- a/var/spack/repos/builtin/packages/ltr-retriever/package.py
+++ b/var/spack/repos/builtin/packages/ltr-retriever/package.py
@@ -41,5 +41,5 @@ def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/lua-luajit-openresty/package.py b/var/spack/repos/builtin/packages/lua-luajit-openresty/package.py
index b1b9dc0ab5a..5e3046b8a07 100644
--- a/var/spack/repos/builtin/packages/lua-luajit-openresty/package.py
+++ b/var/spack/repos/builtin/packages/lua-luajit-openresty/package.py
@@ -65,7 +65,7 @@ def edit(self, spec, prefix):
# on some platforms for the final link stage to work
src_makefile.filter("^TARGET_LD = .*", f"TARGET_LD = {spack_cxx}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"LUA_PATH",
os.path.join(self.spec.prefix, "share", f"luajit-{self.version[0:2]}", "?.lua"),
diff --git a/var/spack/repos/builtin/packages/lua-sol2/package.py b/var/spack/repos/builtin/packages/lua-sol2/package.py
index 1c52bd98e48..36988ed9f1a 100644
--- a/var/spack/repos/builtin/packages/lua-sol2/package.py
+++ b/var/spack/repos/builtin/packages/lua-sol2/package.py
@@ -17,6 +17,7 @@ class LuaSol2(CMakePackage):
license("MIT")
version("develop", branch="develop")
+ version("3.5.0", tag="v3.5.0", commit="9190880c593dfb018ccf5cc9729ab87739709862")
version("3.3.0", tag="v3.3.0", commit="eba86625b707e3c8c99bbfc4624e51f42dc9e561")
version("3.2.3", sha256="f74158f92996f476786be9c9e83f8275129bb1da2a8d517d050421ac160a4b9e")
version("3.2.2", sha256="141790dae0c1821dd2dbac3595433de49ba72545845efc3ec7d88de8b0a3b2da")
@@ -28,6 +29,8 @@ class LuaSol2(CMakePackage):
depends_on("c", type="build")
depends_on("cxx", type="build")
+ depends_on("cmake@3.26.0:", when="@3.5.0:", 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 e715bf522f6..a65ee27d585 100644
--- a/var/spack/repos/builtin/packages/lua/package.py
+++ b/var/spack/repos/builtin/packages/lua/package.py
@@ -154,13 +154,17 @@ def _setup_dependent_env_helper(self, env, dependent_spec):
return lua_patterns, lua_cpatterns
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
lua_patterns, lua_cpatterns = self._setup_dependent_env_helper(env, dependent_spec)
env.prepend_path("LUA_PATH", ";".join(lua_patterns), separator=";")
env.prepend_path("LUA_CPATH", ";".join(lua_cpatterns), separator=";")
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# For run time environment set only the path for dependent_spec and
# prepend it to LUAPATH
lua_patterns, lua_cpatterns = self._setup_dependent_env_helper(env, dependent_spec)
@@ -169,7 +173,7 @@ def setup_dependent_run_environment(self, env, dependent_spec):
env.prepend_path("LUA_PATH", ";".join(lua_patterns), separator=";")
env.prepend_path("LUA_CPATH", ";".join(lua_cpatterns), separator=";")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"LUA_PATH", os.path.join(self.spec.prefix, self.lua_share_dir, "?.lua"), separator=";"
)
diff --git a/var/spack/repos/builtin/packages/lz4/package.py b/var/spack/repos/builtin/packages/lz4/package.py
index 4f31c02bd74..a98fdffbac9 100644
--- a/var/spack/repos/builtin/packages/lz4/package.py
+++ b/var/spack/repos/builtin/packages/lz4/package.py
@@ -87,7 +87,7 @@ def cmake_args(self):
class MakefileBuilder(MakefileBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+pic"):
env.set("CFLAGS", self.pkg.compiler.cc_pic_flag)
diff --git a/var/spack/repos/builtin/packages/m4/package.py b/var/spack/repos/builtin/packages/m4/package.py
index a77517282a7..3d0dbbb9504 100644
--- a/var/spack/repos/builtin/packages/m4/package.py
+++ b/var/spack/repos/builtin/packages/m4/package.py
@@ -76,20 +76,22 @@ def determine_version(cls, exe):
match = re.search(r"GNU M4\)?\s+(\S+)", output)
return match.group(1) if match else None
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Inform autom4te if it wasn't built correctly (some external
# installations such as homebrew). See
# https://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/autom4te-Invocation.html
env.set("M4", self.prefix.bin.m4)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# The default optimization level for icx/icpx is "-O2",
# but building m4 with this level breaks the build of dependents.
# So we set it explicitely to "-O0".
if self.spec.satisfies("%intel") or self.spec.satisfies("%oneapi"):
env.append_flags("CFLAGS", "-O0")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("M4", self.prefix.bin.m4)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/macfuse/package.py b/var/spack/repos/builtin/packages/macfuse/package.py
index be69d9e5f46..35a1dd8627b 100644
--- a/var/spack/repos/builtin/packages/macfuse/package.py
+++ b/var/spack/repos/builtin/packages/macfuse/package.py
@@ -40,5 +40,7 @@ def install(self, spec, prefix):
raise InstallError(msg)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("FUSE_LIBRARY_PATH", self.prefix.macFUSE)
diff --git a/var/spack/repos/builtin/packages/madis/package.py b/var/spack/repos/builtin/packages/madis/package.py
index f970898a40c..d0b910f5b74 100644
--- a/var/spack/repos/builtin/packages/madis/package.py
+++ b/var/spack/repos/builtin/packages/madis/package.py
@@ -30,7 +30,7 @@ class Madis(MakefilePackage):
depends_on("netcdf-fortran")
depends_on("parallel-netcdf", when="+pnetcdf")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
fflags = []
if self.spec.satisfies("%gcc@10:"):
fflags += ["-fallow-argument-mismatch"]
diff --git a/var/spack/repos/builtin/packages/mapl/package.py b/var/spack/repos/builtin/packages/mapl/package.py
index 974d36db93d..8a22c4803c8 100644
--- a/var/spack/repos/builtin/packages/mapl/package.py
+++ b/var/spack/repos/builtin/packages/mapl/package.py
@@ -37,6 +37,8 @@ class Mapl(CMakePackage):
version("develop", branch="develop")
version("main", branch="main")
+ version("2.55.1", sha256="eb8bbb42a9a488155bd38f9bc6f6863b8a0acb210852ee71834f160958500243")
+ version("2.55.0", sha256="13ec3d81d53cf18aa18322b74b9a6990ad7e51224f1156be5d1f834ee826f95c")
version("2.54.2", sha256="70b7be425d07a7be7d9bb0e53b93a372887a048caf23260e0ae602ca6e3670ed")
version("2.54.1", sha256="2430ded45a98989e9100037f54cf22f5a5083e17196514b3667d3003413e49e1")
version("2.53.2", sha256="0f294a5289541b0028773f8e5ab2bf04734ec09241baa5a3dcea0e939d40336f")
@@ -162,11 +164,17 @@ class Mapl(CMakePackage):
# Versions later than 3.14 remove FindESMF.cmake
# from ESMA_CMake.
+ resource(
+ name="esma_cmake",
+ git="https://github.com/GEOS-ESM/ESMA_cmake.git",
+ tag="v3.58.1",
+ when="@2.55:",
+ )
resource(
name="esma_cmake",
git="https://github.com/GEOS-ESM/ESMA_cmake.git",
tag="v3.55.0",
- when="@2.51:",
+ when="@2.51:2.54",
)
resource(
name="esma_cmake",
@@ -278,6 +286,7 @@ class Mapl(CMakePackage):
conflicts("+extdata2g", when="@:2.40.3 %intel@2021.7:")
depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("fortran", type="build")
depends_on("cmake@3.24:", type="build", when="@2.51:")
@@ -304,14 +313,16 @@ class Mapl(CMakePackage):
depends_on("udunits", when="@2.48:")
# gFTL dependency
- depends_on("gftl@1.14.0:", when="@2.48:")
+ depends_on("gftl@1.15.2:", when="@2.55:")
+ depends_on("gftl@1.14.0:", when="@2.48:2.54")
depends_on("gftl@1.13.0:", when="@2.45:2.47")
depends_on("gftl@1.11.0:", when="@2.44")
depends_on("gftl@1.10.0:", when="@2.40:2.43")
depends_on("gftl@1.5.5:1.9", when="@:2.39")
# gFTL-Shared dependency
- depends_on("gftl-shared@1.9.0:", when="@2.48:")
+ depends_on("gftl-shared@1.10.0:", when="@2.55:")
+ depends_on("gftl-shared@1.9.0:", when="@2.48:2.54")
depends_on("gftl-shared@1.8.0:", when="@2.45:2.47")
depends_on("gftl-shared@1.7.0:", when="@2.44")
depends_on("gftl-shared@1.6.1:", when="@2.40:2.43")
@@ -325,7 +336,8 @@ class Mapl(CMakePackage):
depends_on("yafyaml@1.0-beta5", when="@:2.22+extdata2g")
# pflogger dependency
- depends_on("pflogger@1.15.0: +mpi", when="@2.48:+pflogger")
+ depends_on("pflogger@1.16.1: +mpi", when="@2.55:+pflogger")
+ depends_on("pflogger@1.15.0: +mpi", when="@2.48:2.54+pflogger")
depends_on("pflogger@1.14.0: +mpi", when="@2.45:2.47+pflogger")
depends_on("pflogger@1.11.0: +mpi", when="@2.44+pflogger")
depends_on("pflogger@1.9.5: +mpi", when="@2.40:2.43+pflogger")
@@ -333,14 +345,16 @@ class Mapl(CMakePackage):
depends_on("pflogger@:1.6 +mpi", when="@:2.22+pflogger")
# fargparse dependency
- depends_on("fargparse@1.8.0:", when="@2.48:+fargparse")
+ depends_on("fargparse@1.9.0:", when="@2.55:+fargparse")
+ depends_on("fargparse@1.8.0:", when="@2.48:2.54+fargparse")
depends_on("fargparse@1.7.0:", when="@2.45:2.47+fargparse")
depends_on("fargparse@1.6.0:", when="@2.44+fargparse")
depends_on("fargparse@1.5.0:", when="@2.40:43+fargparse")
depends_on("fargparse@1.4.1:1.4", when="@:2.39+fargparse")
# pfunit dependency
- depends_on("pfunit@4.10: +mpi +fhamcrest", when="@2.48:+pfunit")
+ depends_on("pfunit@4.11.1: +mpi +fhamcrest", when="@2.55:+pfunit")
+ depends_on("pfunit@4.10: +mpi +fhamcrest", when="@2.48:2.54+pfunit")
depends_on("pfunit@4.9: +mpi +fhamcrest", when="@2.45:2.47+pfunit")
depends_on("pfunit@4.8: +mpi +fhamcrest", when="@2.44+pfunit")
depends_on("pfunit@4.7.3: +mpi +fhamcrest", when="@2.40:+pfunit")
@@ -431,7 +445,7 @@ def patch(self):
"(target_link_libraries[^)]+PUBLIC )", r"\1 %s " % nc_flags, "pfio/CMakeLists.txt"
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# esma_cmake, an internal dependency of mapl, is
# looking for the cmake argument -DBASEDIR, and
# if it doesn't find it, it's looking for an
diff --git a/var/spack/repos/builtin/packages/mapnik/package.py b/var/spack/repos/builtin/packages/mapnik/package.py
index 6a8c4e314fe..314a6cb7a4a 100644
--- a/var/spack/repos/builtin/packages/mapnik/package.py
+++ b/var/spack/repos/builtin/packages/mapnik/package.py
@@ -47,7 +47,7 @@ class Mapnik(AutotoolsPackage):
depends_on("sqlite+rtree", type=("build", "link", "run"))
depends_on("libwebp")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("GDAL_DATA", spec["gdal"].prefix.share.gdal)
diff --git a/var/spack/repos/builtin/packages/mapsplice2/package.py b/var/spack/repos/builtin/packages/mapsplice2/package.py
index be2235e0206..e52a0691cb1 100644
--- a/var/spack/repos/builtin/packages/mapsplice2/package.py
+++ b/var/spack/repos/builtin/packages/mapsplice2/package.py
@@ -19,6 +19,9 @@ class Mapsplice2(MakefilePackage):
patch("Makefile.patch")
patch("mapsplice_ebwt.patch")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("bowtie")
depends_on("ncurses", type="link")
depends_on("samtools", type="link")
diff --git a/var/spack/repos/builtin/packages/masa/package.py b/var/spack/repos/builtin/packages/masa/package.py
index a0e1ad76c7a..de8b9515960 100644
--- a/var/spack/repos/builtin/packages/masa/package.py
+++ b/var/spack/repos/builtin/packages/masa/package.py
@@ -53,7 +53,7 @@ def configure_args(self):
return options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Unfortunately can't use this because MASA overwrites it
# env.set('CXXFLAGS', self.compiler.cxx11_flag)
env.set("CXX", "{0} {1}".format(self.compiler.cxx, self.compiler.cxx11_flag))
diff --git a/var/spack/repos/builtin/packages/masurca/package.py b/var/spack/repos/builtin/packages/masurca/package.py
index 50bfe0fbf6c..e3c686579c3 100644
--- a/var/spack/repos/builtin/packages/masurca/package.py
+++ b/var/spack/repos/builtin/packages/masurca/package.py
@@ -41,7 +41,7 @@ def patch(self):
m = join_path("global-1", makefile)
filter_file("-minline-all-stringops", "", m)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@4:"):
env.set("DEST", self.prefix)
diff --git a/var/spack/repos/builtin/packages/mbedtls/package.py b/var/spack/repos/builtin/packages/mbedtls/package.py
index 9918bff1b28..f81671ba6c2 100644
--- a/var/spack/repos/builtin/packages/mbedtls/package.py
+++ b/var/spack/repos/builtin/packages/mbedtls/package.py
@@ -98,7 +98,7 @@ def flag_handler(self, name, flags):
return (None, flags, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "shared" in self.spec.variants["libs"].value:
env.set("SHARED", "yes")
diff --git a/var/spack/repos/builtin/packages/mc/package.py b/var/spack/repos/builtin/packages/mc/package.py
index 0b6438a84aa..dd2a7ac5226 100644
--- a/var/spack/repos/builtin/packages/mc/package.py
+++ b/var/spack/repos/builtin/packages/mc/package.py
@@ -27,7 +27,7 @@ class Mc(AutotoolsPackage):
depends_on("glib@2.14:")
depends_on("libssh2@1.2.5:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Fix compilation bug on macOS by pretending we don't have utimensat()
# https://github.com/MidnightCommander/mc/pull/130
if "darwin" in self.spec.architecture:
diff --git a/var/spack/repos/builtin/packages/mdspan/package.py b/var/spack/repos/builtin/packages/mdspan/package.py
index 5dadf0726ca..166249f13c4 100644
--- a/var/spack/repos/builtin/packages/mdspan/package.py
+++ b/var/spack/repos/builtin/packages/mdspan/package.py
@@ -13,31 +13,36 @@ class Mdspan(CMakePackage):
url = "https://github.com/kokkos/mdspan/archive/refs/tags/mdspan-0.6.0.zip"
git = "https://github.com/kokkos/mdspan.git"
+ maintainers("tpadioleau", "nmm0")
+
version("stable", branch="stable")
version("0.6.0", sha256="d6b7b9d4f472106df1d28729bd8383a8a7ea7938adf9f82d3be9c151344830d9")
variant("examples", default=True, description="Enable examples")
variant("tests", default=False, description="Enable tests")
variant("benchmarks", default=False, description="Enable benchmarks")
+ variant(
+ "cxxstd", default="17", values=["14", "17", "20"], multi=False, description="C++ standard"
+ )
+ variant(
+ "stdheaders",
+ default=False,
+ when="@stable",
+ description="Whether to install headers to emulate standard library headers and namespace",
+ )
depends_on("benchmark", when="+benchmarks")
- depends_on("googletest@main", when="+tests")
+ depends_on("googletest@1.14:1", when="+tests")
def cmake_args(self):
- args = []
-
- if self.spec.satisfies("+tests"):
- args.append("-DMDSPAN_ENABLE_TESTS=ON")
- args.append("-DMDSPAN_USE_SYSTEM_GTEST=ON")
- if self.spec.satisfies("+benchmarks"):
- args.append("-DMDSPAN_ENABLE_BENCHMARKS=ON")
- if self.spec.satisfies("+examples"):
- args.append("-DMDSPAN_ENABLE_EXAMPLES=ON")
-
- args.append("-DCMAKE_CXX_FLAGS='-Wall -Wextra -pedantic'")
- args.append("-DCMAKE_CXX_STANDARD=17")
- args.append("-DMDSPAN_CXX_STANDARD=17")
- args.append("-DCMAKE_CXX_COMPILER=g++")
- args.append("-DCMAKE_CXX_EXTENSIONS=OFF")
+ args = [
+ self.define_from_variant("MDSPAN_ENABLE_TESTS", "tests"),
+ self.define_from_variant("MDSPAN_USE_SYSTEM_GTEST", "tests"),
+ self.define_from_variant("MDSPAN_ENABLE_BENCHMARKS", "benchmarks"),
+ self.define_from_variant("MDSPAN_ENABLE_EXAMPLES", "examples"),
+ self.define_from_variant("MDSPAN_CXX_STANDARD", "cxxstd"),
+ self.define_from_variant("CMAKE_CXX_STANDARD", "cxxstd"),
+ self.define_from_variant("MDSPAN_INSTALL_STDMODE_HEADERS", "stdheaders"),
+ ]
return args
diff --git a/var/spack/repos/builtin/packages/mdsplus/package.py b/var/spack/repos/builtin/packages/mdsplus/package.py
index 41d3f3d04a0..cd109d1965f 100644
--- a/var/spack/repos/builtin/packages/mdsplus/package.py
+++ b/var/spack/repos/builtin/packages/mdsplus/package.py
@@ -57,7 +57,7 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./bootstrap")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MDSPLUS_DIR", self.prefix)
if "+python" in self.spec:
env.prepend_path("PYTHONPATH", "{0}/python".format(self.prefix))
diff --git a/var/spack/repos/builtin/packages/mefit/package.py b/var/spack/repos/builtin/packages/mefit/package.py
index b17ff4e6e37..00128dbc047 100644
--- a/var/spack/repos/builtin/packages/mefit/package.py
+++ b/var/spack/repos/builtin/packages/mefit/package.py
@@ -22,5 +22,5 @@ class Mefit(Package):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/melissa-api/package.py b/var/spack/repos/builtin/packages/melissa-api/package.py
index 6143a50cbba..fb931697225 100644
--- a/var/spack/repos/builtin/packages/melissa-api/package.py
+++ b/var/spack/repos/builtin/packages/melissa-api/package.py
@@ -27,5 +27,5 @@ class MelissaApi(CMakePackage):
depends_on("libzmq@4.1.5:")
depends_on("mpi")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/memsurfer/package.py b/var/spack/repos/builtin/packages/memsurfer/package.py
index 231da247d37..8569ee20575 100644
--- a/var/spack/repos/builtin/packages/memsurfer/package.py
+++ b/var/spack/repos/builtin/packages/memsurfer/package.py
@@ -37,7 +37,7 @@ class Memsurfer(PythonPackage):
depends_on("vtk@8.1.2 ~ffmpeg~mpi+opengl2~qt~xdmf+python")
# memsurfer's setup needs path to these deps to build extension modules
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("VTK_ROOT", self.spec["vtk"].prefix)
env.set("CGAL_ROOT", self.spec["cgal"].prefix)
env.set("BOOST_ROOT", self.spec["boost"].prefix)
diff --git a/var/spack/repos/builtin/packages/mepo/package.py b/var/spack/repos/builtin/packages/mepo/package.py
index 0697eb80680..062974c720c 100644
--- a/var/spack/repos/builtin/packages/mepo/package.py
+++ b/var/spack/repos/builtin/packages/mepo/package.py
@@ -16,6 +16,8 @@ class Mepo(PythonPackage):
license("Apache-2.0", checked_by="mathomp4")
+ version("2.3.2", sha256="82affbf7e40856c6d8e8b3c4998ab4ea4d37c0baac73ddc1d698bce0d73a5082")
+ version("2.3.1", sha256="76b7fe081de7b34e5680879352a070dd447e2b113f3e34e4ce20c02486c3c0d8")
version("2.3.0", sha256="e80d7157553d33382ab0c399fcd5ec43ab5ff642504b07c8aef266165f9095d2")
version("2.2.1", sha256="b691989bb762dc5944a2f13afd89666602fa7e40816f0cfb0278fe2164b34e30")
version("2.2.0", sha256="d7cf2456ec2ae9e1724782152b6bf86e06cf071263dbe2eb8ad5b8765b419857")
diff --git a/var/spack/repos/builtin/packages/meraculous/package.py b/var/spack/repos/builtin/packages/meraculous/package.py
index 2ecc7d7081f..386edd421e7 100644
--- a/var/spack/repos/builtin/packages/meraculous/package.py
+++ b/var/spack/repos/builtin/packages/meraculous/package.py
@@ -38,6 +38,6 @@ def patch(self):
edit = FileFilter("CMakeLists.txt")
edit.filter(r"-static-libstdc\+\+", "")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MERACULOUS_ROOT", self.prefix)
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/mercurial/package.py b/var/spack/repos/builtin/packages/mercurial/package.py
index c548001b4a4..966aaadc1f6 100644
--- a/var/spack/repos/builtin/packages/mercurial/package.py
+++ b/var/spack/repos/builtin/packages/mercurial/package.py
@@ -42,12 +42,12 @@ class Mercurial(PythonPackage):
depends_on("py-pygments", type=("build", "run"))
depends_on("py-certifi", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Python 3 support is still experimental, explicitly allow
- env.set("HGALLOWPYTHON3", True)
- env.set("HGPYTHON3", True)
+ env.set("HGALLOWPYTHON3", "True")
+ env.set("HGPYTHON3", "True")
# Setuptools is still opt-in, explicitly enable
- env.set("FORCE_SETUPTOOLS", True)
+ env.set("FORCE_SETUPTOOLS", "True")
@run_after("install")
def post_install(self):
diff --git a/var/spack/repos/builtin/packages/mergiraf/package.py b/var/spack/repos/builtin/packages/mergiraf/package.py
new file mode 100644
index 00000000000..0043ffc13d2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mergiraf/package.py
@@ -0,0 +1,20 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class Mergiraf(CargoPackage):
+ """A syntax-aware git merge driver for a growing collection of programming
+ languages and file formats.
+ """
+
+ homepage = "https://mergiraf.org/"
+ url = "https://codeberg.org/mergiraf/mergiraf/archive/v0.6.0.tar.gz"
+
+ maintainers("alecbcs")
+
+ license("GPL-3.0-only")
+
+ version("0.6.0", sha256="548b0ae3d811d6410beae9e7294867c7e6d791cf9f68ddda5c24e287f7978030")
diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py
index 38ffc3f1184..7aaeaa7ddec 100644
--- a/var/spack/repos/builtin/packages/mesa/package.py
+++ b/var/spack/repos/builtin/packages/mesa/package.py
@@ -26,6 +26,7 @@ class Mesa(MesonPackage):
sha256="cd3d6c60121dea73abbae99d399dc2facaecde1a8c6bd647e6d85410ff4b577b",
preferred=True,
)
+ version("23.3.3", sha256="518307c0057fa3cee8b58df78be431d4df5aafa7edc60d09278b2d7a0a80f3b4")
version("23.2.1", sha256="64de0616fc2d801f929ab1ac2a4f16b3e2783c4309a724c8a259b20df8bbc1cc")
version("23.1.9", sha256="295ba27c28146ed09214e8ce79afa1659edf9d142decc3c91f804552d64f7510")
version("23.0.3", sha256="386362a5d80df3b096636b67f340e1ce67b705b44767d5bdd11d2ed1037192d5")
@@ -61,8 +62,9 @@ class Mesa(MesonPackage):
depends_on("cmake", type="build")
depends_on("flex", type="build")
depends_on("gettext", type="build")
- # Upperbound on 3.11 because distutils is used for checking py-mako
- depends_on("python@3:3.11", type="build")
+ depends_on("python", type="build")
+ depends_on("python@:3.11", when="@:23.2", type="build")
+ depends_on("py-packaging", type="build", when="^python@3.12:")
depends_on("py-mako@0.8.0:", type="build")
depends_on("unwind")
depends_on("expat")
diff --git a/var/spack/repos/builtin/packages/meson/package.py b/var/spack/repos/builtin/packages/meson/package.py
index bf75e07a79e..a99aec22859 100644
--- a/var/spack/repos/builtin/packages/meson/package.py
+++ b/var/spack/repos/builtin/packages/meson/package.py
@@ -178,7 +178,9 @@ class Meson(PythonPackage):
def determine_version(cls, exe):
return Executable(exe)("--version", output=str, error=str).rstrip()
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# https://github.com/pybind/pybind11/issues/595
if self.spec.satisfies("platform=darwin"):
env.set("STRIP", "strip -x")
diff --git a/var/spack/repos/builtin/packages/met/package.py b/var/spack/repos/builtin/packages/met/package.py
index a39d16baba9..8b48266353e 100644
--- a/var/spack/repos/builtin/packages/met/package.py
+++ b/var/spack/repos/builtin/packages/met/package.py
@@ -87,7 +87,7 @@ def url_for_version(self, version):
url = "https://github.com/dtcenter/MET/archive/refs/tags/v{0}.tar.gz"
return url.format(version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
cppflags = []
ldflags = []
@@ -181,5 +181,5 @@ def configure_args(self):
return args
-# def setup_run_environment(self, env):
+# def setup_run_environment(self, env: EnvironmentModifications) -> None:
# env.set('MET_BASE', self.prefix)
diff --git a/var/spack/repos/builtin/packages/metabat/package.py b/var/spack/repos/builtin/packages/metabat/package.py
index 81686ce792a..cd1a977883e 100644
--- a/var/spack/repos/builtin/packages/metabat/package.py
+++ b/var/spack/repos/builtin/packages/metabat/package.py
@@ -43,7 +43,7 @@ class Metabat(CMakePackage):
depends_on("zlib-api", type="link")
depends_on("ncurses", type="link")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BOOST_ROOT", self.spec["boost"].prefix)
def install_args(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/metall/package.py b/var/spack/repos/builtin/packages/metall/package.py
index e920e35f8ed..ca0ee6b8c0f 100644
--- a/var/spack/repos/builtin/packages/metall/package.py
+++ b/var/spack/repos/builtin/packages/metall/package.py
@@ -71,11 +71,11 @@ def cmake_args(self):
args = ["-DINSTALL_HEADER_ONLY=ON"]
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Configure the directories for test
if self.run_tests:
env.set("METALL_TEST_DIR", join_path(self.build_directory, "build_test"))
# 'spack load metall' sets METALL_ROOT environmental variable
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("METALL_ROOT", self.prefix)
diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py
index 58e2cb9ff70..e3c139c3e9b 100644
--- a/var/spack/repos/builtin/packages/metis/package.py
+++ b/var/spack/repos/builtin/packages/metis/package.py
@@ -88,7 +88,7 @@ def patch(self):
class SetupEnvironment:
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Ignore warnings/errors re unrecognized omp pragmas on %intel
if "%intel@14:" in self.spec:
env.append_flags("CFLAGS", "-diag-disable 3180")
diff --git a/var/spack/repos/builtin/packages/metplus/package.py b/var/spack/repos/builtin/packages/metplus/package.py
index b56551bc91e..ac8faf5ca43 100644
--- a/var/spack/repos/builtin/packages/metplus/package.py
+++ b/var/spack/repos/builtin/packages/metplus/package.py
@@ -68,5 +68,5 @@ def install(self, spec, prefix):
install_tree(self.stage.source_path, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.ush)
diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py
index 877de433dfa..f6e136dc67a 100644
--- a/var/spack/repos/builtin/packages/mfem/package.py
+++ b/var/spack/repos/builtin/packages/mfem/package.py
@@ -527,7 +527,7 @@ class Mfem(Package, CudaPackage, ROCmPackage):
phases = ["configure", "build", "install"]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("MFEM_DIR")
env.unset("MFEM_BUILD_DIR")
# Workaround for changes made by the 'kokkos-nvcc-wrapper' package
@@ -672,8 +672,8 @@ def find_optional_library(name, prefix):
if cxxflags:
# Add opt/debug flags if they are not present in global cxx flags
- opt_flag_found = any(f in self.compiler.opt_flags for f in cxxflags)
- debug_flag_found = any(f in self.compiler.debug_flags for f in cxxflags)
+ opt_flag_found = any(f in self["cxx"].opt_flags for f in cxxflags)
+ debug_flag_found = any(f in self["cxx"].debug_flags for f in cxxflags)
if "+debug" in spec:
if not debug_flag_found:
diff --git a/var/spack/repos/builtin/packages/mgcfd-op2/package.py b/var/spack/repos/builtin/packages/mgcfd-op2/package.py
index 00d0dff76b0..ecdf3154b6c 100644
--- a/var/spack/repos/builtin/packages/mgcfd-op2/package.py
+++ b/var/spack/repos/builtin/packages/mgcfd-op2/package.py
@@ -34,7 +34,7 @@ class MgcfdOp2(MakefilePackage):
depends_on("op2-dsl+mpi", when="+mpi")
depends_on("op2-dsl~mpi", when="~mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
compiler_map = {"gcc": "gnu", "arm": "clang", "cce": "cray", "nvhpc": "pgi"}
if self.spec.compiler.name in compiler_map:
env.set("COMPILER", compiler_map[self.spec.compiler.name])
diff --git a/var/spack/repos/builtin/packages/microbiomeutil/package.py b/var/spack/repos/builtin/packages/microbiomeutil/package.py
index 9d91153aa88..cf0f45cf8e9 100644
--- a/var/spack/repos/builtin/packages/microbiomeutil/package.py
+++ b/var/spack/repos/builtin/packages/microbiomeutil/package.py
@@ -28,7 +28,7 @@ def install(self, spec, prefix):
install_tree("RESOURCES", prefix.resources)
install_tree("AmosCmp16Spipeline", prefix.AmosCmp16Spipeline)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.ChimeraSlayer)
env.prepend_path("PATH", join_path(self.prefix, "NAST-iEr"))
env.prepend_path("PATH", self.prefix.TreeChopper)
diff --git a/var/spack/repos/builtin/packages/migraphx/package.py b/var/spack/repos/builtin/packages/migraphx/package.py
index 795551cd3a9..80db312395b 100644
--- a/var/spack/repos/builtin/packages/migraphx/package.py
+++ b/var/spack/repos/builtin/packages/migraphx/package.py
@@ -149,7 +149,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/mii/package.py b/var/spack/repos/builtin/packages/mii/package.py
index 1010302e58b..77ceaf8457c 100644
--- a/var/spack/repos/builtin/packages/mii/package.py
+++ b/var/spack/repos/builtin/packages/mii/package.py
@@ -24,5 +24,5 @@ class Mii(MakefilePackage):
depends_on("c", type="build") # generated
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
diff --git a/var/spack/repos/builtin/packages/mimalloc/package.py b/var/spack/repos/builtin/packages/mimalloc/package.py
index e7976c962a9..ab8409ce75f 100644
--- a/var/spack/repos/builtin/packages/mimalloc/package.py
+++ b/var/spack/repos/builtin/packages/mimalloc/package.py
@@ -18,6 +18,7 @@ class Mimalloc(CMakePackage):
version("dev-slice", branch="dev-slice")
version("dev", branch="dev")
version("master", branch="master")
+ version("3.0.3", sha256="baf343041420e2924e1760bbbc0c111101c44e1cecb998e7951f646a957ee05f")
version("3.0.1", sha256="6a514ae31254b43e06e2a89fe1cbc9c447fdbf26edc6f794f3eb722f36e28261")
version("2.1.9", sha256="dd8ff701691f19bf4e225d42ef0d3d5e6ca0e03498ee4f044a0402e4697e4a20")
version("2.1.7", sha256="0eed39319f139afde8515010ff59baf24de9e47ea316a315398e8027d198202d")
diff --git a/var/spack/repos/builtin/packages/minc-toolkit/package.py b/var/spack/repos/builtin/packages/minc-toolkit/package.py
index 63a4a21c790..18b06b3714d 100644
--- a/var/spack/repos/builtin/packages/minc-toolkit/package.py
+++ b/var/spack/repos/builtin/packages/minc-toolkit/package.py
@@ -48,5 +48,5 @@ def cmake_args(self):
"-DMT_BUILD_ELASTIX=OFF",
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MINC_TOOLKIT", self.prefix)
diff --git a/var/spack/repos/builtin/packages/miniconda2/package.py b/var/spack/repos/builtin/packages/miniconda2/package.py
index e9d7c632965..0e6214b5d07 100644
--- a/var/spack/repos/builtin/packages/miniconda2/package.py
+++ b/var/spack/repos/builtin/packages/miniconda2/package.py
@@ -63,6 +63,6 @@ def install(self, spec, prefix):
bash = which("bash")
bash(script, "-b", "-f", "-p", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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/miniconda3/package.py b/var/spack/repos/builtin/packages/miniconda3/package.py
index 0bf8099bc43..eda58344474 100644
--- a/var/spack/repos/builtin/packages/miniconda3/package.py
+++ b/var/spack/repos/builtin/packages/miniconda3/package.py
@@ -171,6 +171,6 @@ def install(self, spec, prefix):
bash = which("bash")
bash(script, "-b", "-f", "-p", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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/miniforge3/package.py b/var/spack/repos/builtin/packages/miniforge3/package.py
index e4157bf13ae..32486b2cf65 100644
--- a/var/spack/repos/builtin/packages/miniforge3/package.py
+++ b/var/spack/repos/builtin/packages/miniforge3/package.py
@@ -69,7 +69,7 @@ def patch_sbang(self):
r"#!/usr/bin/env python", rf"#!{self.prefix.bin.python}", self.prefix.bin.mamba
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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/minigan/package.py b/var/spack/repos/builtin/packages/minigan/package.py
index bdb0fcf47b0..3205194f260 100644
--- a/var/spack/repos/builtin/packages/minigan/package.py
+++ b/var/spack/repos/builtin/packages/minigan/package.py
@@ -15,6 +15,8 @@ class Minigan(Package):
license("BSD-3-Clause")
+ tags = ["proxy-app"]
+
version("1.0.0", sha256="ef6d5def9c7040af520acc64b7a8b6c8ec4b7901721b11b0cb25a583ea0c8ae3")
depends_on("python", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/miopen-hip/package.py b/var/spack/repos/builtin/packages/miopen-hip/package.py
index 33a45ce096f..f17f9f2c227 100644
--- a/var/spack/repos/builtin/packages/miopen-hip/package.py
+++ b/var/spack/repos/builtin/packages/miopen-hip/package.py
@@ -178,7 +178,7 @@ class MiopenHip(CMakePackage):
depends_on("nlohmann-json", type="link")
depends_on("googletest", when="@6.1:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
lib_dir = self.spec["zlib-api"].libs.directories[0]
env.prepend_path("LIBRARY_PATH", lib_dir)
if self.spec.satisfies("+asan"):
diff --git a/var/spack/repos/builtin/packages/mitofates/package.py b/var/spack/repos/builtin/packages/mitofates/package.py
index 316dcada374..45b165c0ed0 100644
--- a/var/spack/repos/builtin/packages/mitofates/package.py
+++ b/var/spack/repos/builtin/packages/mitofates/package.py
@@ -44,6 +44,6 @@ def install(self, spec, prefix):
chmod = which("chmod")
chmod("+x", join_path(prefix, "MitoFates.pl"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# We want the main MitoFates.pl script in the path
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/mivisionx/package.py b/var/spack/repos/builtin/packages/mivisionx/package.py
index bd17800e396..c47e8e29d09 100644
--- a/var/spack/repos/builtin/packages/mivisionx/package.py
+++ b/var/spack/repos/builtin/packages/mivisionx/package.py
@@ -311,12 +311,12 @@ def patch(self):
]:
depends_on(f"rpp@{ver}", when=f"@{ver}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MIVISIONX_MODEL_COMPILER_PATH", self.spec.prefix.libexec.mivisionx.model_compiler)
if self.spec.satisfies("@6.1:"):
env.prepend_path("LD_LIBRARY_PATH", self.spec["hsa-rocr-dev"].prefix.lib)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@6.1:"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/mixcr/package.py b/var/spack/repos/builtin/packages/mixcr/package.py
index 6e41088bf8e..f9891eb5fb7 100644
--- a/var/spack/repos/builtin/packages/mixcr/package.py
+++ b/var/spack/repos/builtin/packages/mixcr/package.py
@@ -26,5 +26,5 @@ class Mixcr(Package):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/modylas/package.py b/var/spack/repos/builtin/packages/modylas/package.py
index df1bff55784..3ee16d747e3 100644
--- a/var/spack/repos/builtin/packages/modylas/package.py
+++ b/var/spack/repos/builtin/packages/modylas/package.py
@@ -35,7 +35,7 @@ class Modylas(AutotoolsPackage):
build_directory = "source"
configure_directory = "source"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+mpi"):
env.set("FC", self.spec["mpi"].mpifc, force=True)
fflags = ["-O3", self.compiler.openmp_flag]
diff --git a/var/spack/repos/builtin/packages/mokutil/package.py b/var/spack/repos/builtin/packages/mokutil/package.py
index 690b8e61e71..82fcce9d04b 100644
--- a/var/spack/repos/builtin/packages/mokutil/package.py
+++ b/var/spack/repos/builtin/packages/mokutil/package.py
@@ -25,7 +25,7 @@ class Mokutil(AutotoolsPackage):
depends_on("m4", type="build")
depends_on("efivar")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("C_INCLUDE_PATH", self.spec["efivar"].prefix.include.efivar)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/mold/package.py b/var/spack/repos/builtin/packages/mold/package.py
index 2c4afdd1ccd..3a84cb9fa2e 100644
--- a/var/spack/repos/builtin/packages/mold/package.py
+++ b/var/spack/repos/builtin/packages/mold/package.py
@@ -15,6 +15,7 @@ class Mold(CMakePackage):
license("MIT")
+ version("2.38.1", sha256="14bfb259fd7d0a1fdce9b66f8ed2dd0b134d15019cb359699646afeee1f18118")
version("2.37.1", sha256="b8e36086c95bd51e9829c9755c138f5c4daccdd63b6c35212b84229419f3ccbe")
version("2.37.0", sha256="28372bbc2ce069aa0362ba84ad5d1b0f2c0bcf84e95a0f533ecf79cb3aff232c")
version("2.36.0", sha256="3f57fe75535500ecce7a80fa1ba33675830b7d7deb1e5ee9a737e2bc43cdb1c7")
diff --git a/var/spack/repos/builtin/packages/molgw/package.py b/var/spack/repos/builtin/packages/molgw/package.py
index eea30462907..b647319e01b 100644
--- a/var/spack/repos/builtin/packages/molgw/package.py
+++ b/var/spack/repos/builtin/packages/molgw/package.py
@@ -18,13 +18,14 @@ class Molgw(MakefilePackage):
"""
homepage = "https://github.com/molgw/molgw"
- url = "https://github.com/molgw/molgw/archive/v3.3.tar.gz"
+ url = "https://github.com/molgw/molgw/archive/v3.4.tar.gz"
git = "https://github.com/molgw/molgw.git"
maintainers("bruneval")
license("GPL-3.0-only")
+ version("3.4", sha256="b7ce298c660861713c25873d46e09713cad80b3927110a6bf747c0114b387e6b")
version("3.3", sha256="ff1c8eb736049e52608d4554a2d435ee9d15e47c4a9934d41712962748929e81")
version("3.2", sha256="a3f9a99db52d95ce03bc3636b5999e6d92b503ec2f4afca33d030480c3e10242")
@@ -102,8 +103,6 @@ def edit(self, spec, prefix):
flags["FC"] = self.compiler.fc
# Set FCFLAGS
- if self.compiler.flags.get("fflags") is not None:
- flags["FCFLAGS"] = " ".join(self.compiler.flags.get("fflags")) + " "
if "+openmp" in spec:
flags["FCFLAGS"] = flags.get("FCFLAGS", "") + " {0} ".format(self.compiler.openmp_flag)
if "%intel" in spec or "%oneapi" in spec:
diff --git a/var/spack/repos/builtin/packages/mpest/package.py b/var/spack/repos/builtin/packages/mpest/package.py
index 861bc8aa3ef..8c95828ddfe 100644
--- a/var/spack/repos/builtin/packages/mpest/package.py
+++ b/var/spack/repos/builtin/packages/mpest/package.py
@@ -23,7 +23,7 @@ def install(self, spec, prefix):
mkdirp(prefix.bin)
install("mpest", prefix.bin)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("platform=darwin"):
env.set("ARCHITECTURE", "mac")
else:
diff --git a/var/spack/repos/builtin/packages/mpibind/package.py b/var/spack/repos/builtin/packages/mpibind/package.py
index e5b99a52a15..104ecc8a5f1 100644
--- a/var/spack/repos/builtin/packages/mpibind/package.py
+++ b/var/spack/repos/builtin/packages/mpibind/package.py
@@ -59,7 +59,7 @@ def autoreconf(self, spec, prefix):
autoreconf("--install", "--verbose", "--force")
@when("+flux")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Load the mpibind plugin into Flux"""
env.prepend_path("FLUX_SHELL_RC_PATH", join_path(self.prefix, "share", "mpibind"))
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py
index a6359052ac3..9b75f4ae4bf 100644
--- a/var/spack/repos/builtin/packages/mpich/package.py
+++ b/var/spack/repos/builtin/packages/mpich/package.py
@@ -16,7 +16,9 @@ class MpichEnvironmentModifications(spack.package_base.PackageBase):
MPICH, and derivatives.
"""
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
dependent_module = dependent_spec.package.module
for var_name, attr_name in (
("MPICH_CC", "spack_cc"),
@@ -28,11 +30,11 @@ def setup_dependent_build_environment(self, env, dependent_spec):
if hasattr(dependent_module, attr_name):
env.set(var_name, getattr(dependent_module, attr_name))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("F90")
env.unset("F90FLAGS")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_mpi_wrapper_variables(env)
def setup_dependent_package(self, module, dependent_spec):
@@ -493,7 +495,7 @@ def flag_handler(self, name, flags):
return flags, None, None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
MpichEnvironmentModifications.setup_build_environment(self, env)
if "pmi=cray" in self.spec:
env.set("CRAY_PMI_INCLUDE_OPTS", "-I" + self.spec["cray-pmi"].headers.directories[0])
diff --git a/var/spack/repos/builtin/packages/mpitrampoline/package.py b/var/spack/repos/builtin/packages/mpitrampoline/package.py
index 01944d4b030..a8825d34598 100644
--- a/var/spack/repos/builtin/packages/mpitrampoline/package.py
+++ b/var/spack/repos/builtin/packages/mpitrampoline/package.py
@@ -59,6 +59,7 @@ class Mpitrampoline(CMakePackage):
version("1.0.1", sha256="4ce91b99fb6d2dab481b5e477b6b6a0709add48cf0f287afbbb440fdf3232500")
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
depends_on("fortran", type="build") # generated
variant("shared", default=True, description="Build a shared version of the library")
@@ -80,7 +81,7 @@ def libs(self):
libraries = ["libmpitrampoline"]
return find_libraries(libraries, root=self.prefix.lib, shared=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Because MPI implementations provide compilers, they have to add to
# their run environments the code to make the compilers available.
env.set("MPITRAMPOLINE_CC", self.compiler.cc)
@@ -91,7 +92,9 @@ def setup_run_environment(self, env):
env.set("MPIF77", join_path(self.prefix.bin, "mpifc"))
env.set("MPIF90", join_path(self.prefix.bin, "mpifc"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
dependent_module = dependent_spec.package.module
# Use the Spack compiler wrappers under MPI
env.set("MPITRAMPOLINE_CC", dependent_module.spack_cc)
diff --git a/var/spack/repos/builtin/packages/mpt/package.py b/var/spack/repos/builtin/packages/mpt/package.py
index 14b03a55e70..133ebf770f5 100644
--- a/var/spack/repos/builtin/packages/mpt/package.py
+++ b/var/spack/repos/builtin/packages/mpt/package.py
@@ -33,14 +33,16 @@ def libs(self):
return find_libraries(libraries, root=self.prefix, shared=True, recursive=True)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# use the Spack compiler wrappers under MPI
dependent_module = dependent_spec.package.module
env.set("MPICC_CC", dependent_module.spack_cc)
env.set("MPICXX_CXX", dependent_module.spack_cxx)
env.set("MPIF90_F90", dependent_module.spack_fc)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Because MPI is both runtime and compiler, we have to setup the mpi
# compilers as part of the run environment.
env.set("MPICC", self.prefix.bin.mpicc)
diff --git a/var/spack/repos/builtin/packages/mptensor/package.py b/var/spack/repos/builtin/packages/mptensor/package.py
index d7e866b661a..c853cb5d1d5 100644
--- a/var/spack/repos/builtin/packages/mptensor/package.py
+++ b/var/spack/repos/builtin/packages/mptensor/package.py
@@ -19,7 +19,9 @@ class Mptensor(CMakePackage):
variant("mpi", default=False, description="Build with MPI library")
variant("doc", default=False, description="build documentation with Doxygen")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
+ depends_on("fortran", type="build")
depends_on("cmake@3.6:", type="build")
depends_on("mpi", when="+mpi")
diff --git a/var/spack/repos/builtin/packages/mrtrix3/package.py b/var/spack/repos/builtin/packages/mrtrix3/package.py
index e664ae58e55..49f657a40b5 100644
--- a/var/spack/repos/builtin/packages/mrtrix3/package.py
+++ b/var/spack/repos/builtin/packages/mrtrix3/package.py
@@ -49,5 +49,5 @@ def install(self, spec, prefix):
build()
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/msmpi/package.py b/var/spack/repos/builtin/packages/msmpi/package.py
index dac04482057..57714de4563 100644
--- a/var/spack/repos/builtin/packages/msmpi/package.py
+++ b/var/spack/repos/builtin/packages/msmpi/package.py
@@ -28,6 +28,8 @@ class Msmpi(Package):
provides("mpi")
+ depends_on("c", type="build")
+
depends_on("win-wdk")
patch("ifort_compat.patch")
@@ -56,7 +58,7 @@ def setup_dependent_package(self, module, dependent_spec):
class GenericBuilder(GenericBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
ifort_root = os.path.join(*self.pkg.compiler.fc.split(os.path.sep)[:-2])
env.set("SPACK_IFORT", ifort_root)
@@ -66,11 +68,6 @@ def is_64bit(self):
def build_command_line(self):
args = ["-noLogo"]
ifort_bin = self.pkg.compiler.fc
- if not ifort_bin:
- raise InstallError(
- "Cannot install MSMPI without fortran"
- "please select a compiler with fortran support."
- )
args.append("/p:IFORT_BIN=%s" % os.path.dirname(ifort_bin))
args.append("/p:VCToolsVersion=%s" % self.pkg.compiler.msvc_version)
args.append("/p:WindowsTargetPlatformVersion=%s" % str(self.pkg.spec["wdk"].version))
diff --git a/var/spack/repos/builtin/packages/msr-safe/package.py b/var/spack/repos/builtin/packages/msr-safe/package.py
index a9a6b24c2ae..cf989bcf605 100644
--- a/var/spack/repos/builtin/packages/msr-safe/package.py
+++ b/var/spack/repos/builtin/packages/msr-safe/package.py
@@ -17,6 +17,8 @@ class MsrSafe(MakefilePackage):
maintainers("kyotsukete", "rountree")
+ tags = ["e4s"]
+
license("GPL-2.0-only", checked_by="kyotsukete")
variant(
diff --git a/var/spack/repos/builtin/packages/msvc/package.py b/var/spack/repos/builtin/packages/msvc/package.py
index ddab1972b9f..ae24fde197d 100644
--- a/var/spack/repos/builtin/packages/msvc/package.py
+++ b/var/spack/repos/builtin/packages/msvc/package.py
@@ -31,6 +31,8 @@ class Msvc(Package, CompilerPackage):
homepage = "https://visualstudio.microsoft.com/vs/features/cplusplus/"
+ has_code = False
+
def install(self, spec, prefix):
raise InstallError(
"MSVC compilers are not installable with Spack, but can be "
@@ -90,7 +92,16 @@ def determine_variants(cls, exes, version_str):
extras["compilers"]["fortran"] = fortran_compiler
return spec, extras
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_package(self, module, dependent_spec):
+ """Populates dependent module with tooling available from VS"""
+ # We want these to resolve to the paths set by MSVC's VCVARs
+ # so no paths
+ module.nmake = Executable("nmake")
+ module.msbuild = Executable("msbuild")
+
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.init_msvc()
# Set the build environment variables for spack. Just using
# subprocess.call() doesn't work since that operates in its own
@@ -117,8 +128,10 @@ def setup_dependent_build_environment(self, env, dependent_spec):
else:
env.set_path(env_var, int_env[env_var].split(os.pathsep))
- env.set("CC", self.cc)
- env.set("CXX", self.cxx)
+ if self.cc:
+ env.set("CC", self.cc)
+ if self.cxx:
+ env.set("CXX", self.cxx)
if self.fortran:
env.set("FC", self.fortran)
env.set("F77", self.fortran)
diff --git a/var/spack/repos/builtin/packages/mujoco/package.py b/var/spack/repos/builtin/packages/mujoco/package.py
index abd38eed2d4..9c825512d1e 100644
--- a/var/spack/repos/builtin/packages/mujoco/package.py
+++ b/var/spack/repos/builtin/packages/mujoco/package.py
@@ -40,7 +40,7 @@ def url_for_version(self, version):
def install(self, spec, prefix):
copy_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", prefix.include)
env.prepend_path("LD_LIBRARY_PATH", prefix.bin)
if platform.system() == "Darwin":
diff --git a/var/spack/repos/builtin/packages/mumax/package.py b/var/spack/repos/builtin/packages/mumax/package.py
index 31137ad2cee..82f3577af7d 100644
--- a/var/spack/repos/builtin/packages/mumax/package.py
+++ b/var/spack/repos/builtin/packages/mumax/package.py
@@ -30,6 +30,8 @@ class Mumax(MakefilePackage, CudaPackage):
variant("cuda", default=True, description="Use CUDA; must be true")
variant("gnuplot", default=False, description="Use gnuplot for graphs")
+ depends_on("c", type="build")
+
depends_on("cuda")
depends_on("go", type="build")
depends_on("gnuplot", type="run", when="+gnuplot")
@@ -75,7 +77,7 @@ def edit(self, spec, prefix):
filter_file(r"(^\(cd test)", r"#\1", "make.bash")
filter_file(r"(for cc in ).*(; do)", r"\1{0}\2".format(self.cuda_arch), "cuda/make.bash")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("GOPATH", self.gopath)
env.set("CUDA_CC", self.cuda_arch)
env.set("NVCC_CCBIN", spack_cc)
diff --git a/var/spack/repos/builtin/packages/musica/package.py b/var/spack/repos/builtin/packages/musica/package.py
new file mode 100644
index 00000000000..94de144f787
--- /dev/null
+++ b/var/spack/repos/builtin/packages/musica/package.py
@@ -0,0 +1,54 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class Musica(CMakePackage):
+ """MUSICA - The multi-scale interface for chemistry and aerosols
+
+ MUSICA is a software package which exposes a flexible
+ API for including aerosol and gas-phase chemistry in
+ many contexts across languages and platforms. It is designed to
+ be used in conjunction with other software packages, such as
+ climate models, to provide a comprehensive framework for
+ simulating atmospheric chemistry processes.
+ """
+
+ homepage = "https://github.com/NCAR/musica"
+ url = "https://github.com/NCAR/musica/archive/refs/tags/v0.10.1.tar.gz"
+ git = "https://github.com/NCAR/musica.git"
+
+ maintainers("kshores", "mattldawson", "boulderdaze")
+
+ license("Apache-2.0", checked_by="kshores")
+
+ # Versions
+ version("0.10.1", sha256="edefab03a676a449761997734e6c5b654b2c4f92ce8f1cc66ef63b8ae8ccccf1")
+
+ # Options from CMake
+ variant("mpi", default=False, description="Enable MPI support")
+ variant("openmp", default=False, description="Enable OpenMP support")
+ variant("tests", default=True, description="Enable tests")
+ variant("fortran", default=False, description="Build Fortran interface")
+ variant("micm", default=True, description="Enable MICM support")
+ variant("tuvx", default=True, description="Enable TUV-x support")
+
+ # Dependencies
+ depends_on("cmake@3.21:", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+ depends_on("mpi", when="+mpi")
+
+ def cmake_args(self):
+ args = [
+ self.define_from_variant("MUSICA_ENABLE_MPI", "mpi"),
+ self.define_from_variant("MUSICA_ENABLE_OPENMP", "openmp"),
+ self.define_from_variant("MUSICA_ENABLE_TESTS", "tests"),
+ self.define_from_variant("MUSICA_BUILD_FORTRAN_INTERFACE", "fortran"),
+ self.define_from_variant("MUSICA_ENABLE_MICM", "micm"),
+ self.define_from_variant("MUSICA_ENABLE_TUVX", "tuvx"),
+ self.define("MUSICA_ENABLE_INSTALL", True),
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/mutationpp/package.py b/var/spack/repos/builtin/packages/mutationpp/package.py
index 0050cde2000..2548e5f9d04 100644
--- a/var/spack/repos/builtin/packages/mutationpp/package.py
+++ b/var/spack/repos/builtin/packages/mutationpp/package.py
@@ -47,12 +47,14 @@ def install_examples(self):
if "+examples" in self.spec and os.path.isdir("examples"):
install_tree("examples", self.prefix.examples)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MPP_DIRECTORY", self.prefix)
if os.path.isdir(self.prefix.data):
env.set("MPP_DATA_DIRECTORY", self.prefix.data)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("MPP_DIRECTORY", self.prefix)
if os.path.isdir(self.prefix.data):
env.set("MPP_DATA_DIRECTORY", self.prefix.data)
diff --git a/var/spack/repos/builtin/packages/mvapich-plus/package.py b/var/spack/repos/builtin/packages/mvapich-plus/package.py
index 784a952281d..61d915bd6c2 100644
--- a/var/spack/repos/builtin/packages/mvapich-plus/package.py
+++ b/var/spack/repos/builtin/packages/mvapich-plus/package.py
@@ -199,7 +199,7 @@ def flag_handler(self, name, flags):
flags.append("-fallow-argument-mismatch")
return (None, flags, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# mvapich2 configure fails when F90 and F90FLAGS are set
env.unset("F90")
env.unset("F90FLAGS")
@@ -226,14 +226,16 @@ def setup_build_environment(self, env):
env.set("CUDA_HOME", self.spec["hip"].prefix)
env.set("CUDA_ROOT", self.spec["hip"].prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MPI_ROOT", self.prefix)
# Because MPI functions as a compiler, we need to treat it as one and
# add its compiler paths to the run environment.
self.setup_compiler_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_compiler_environment(env)
# use the Spack compiler wrappers under MPI
@@ -243,7 +245,7 @@ def setup_dependent_build_environment(self, env, dependent_spec):
env.set("MPICH_F90", spack_fc)
env.set("MPICH_FC", spack_fc)
- def setup_compiler_environment(self, env):
+ def setup_compiler_environment(self, env: EnvironmentModifications):
# For Cray MPIs, the regular compiler wrappers *are* the MPI wrappers.
# Cray MPIs always have cray in the module name, e.g. "cray-mvapich"
if self.spec.satisfies("platform=cray"):
@@ -276,14 +278,6 @@ def setup_dependent_package(self, module, dependent_spec):
os.path.join(self.prefix.lib, f"libmpi.{dso_suffix}"),
]
- @run_before("configure")
- def die_without_fortran(self):
- # Until we can pass variants such as +fortran through virtual
- # dependencies depends_on('mpi'), require Fortran compiler to
- # avoid delayed build errors in dependents.
- if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError("Mvapich requires both C and Fortran compilers!")
-
def configure_args(self):
spec = self.spec
args = [
diff --git a/var/spack/repos/builtin/packages/mvapich/package.py b/var/spack/repos/builtin/packages/mvapich/package.py
index c0adb6b9044..0bc559427bc 100644
--- a/var/spack/repos/builtin/packages/mvapich/package.py
+++ b/var/spack/repos/builtin/packages/mvapich/package.py
@@ -207,13 +207,15 @@ def flag_handler(self, name, flags):
return (flags, None, None)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MPI_ROOT", self.prefix)
# Because MPI functions as a compiler, we need to treat it as one and
# add its compiler paths to the run environment.
self.setup_mpi_wrapper_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_mpi_wrapper_variables(env)
MpichEnvironmentModifications.setup_dependent_build_environment(self, env, dependent_spec)
diff --git a/var/spack/repos/builtin/packages/mvapich2-gdr/package.py b/var/spack/repos/builtin/packages/mvapich2-gdr/package.py
index dcce00f1364..9a1bfd74adb 100755
--- a/var/spack/repos/builtin/packages/mvapich2-gdr/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2-gdr/package.py
@@ -146,7 +146,7 @@ def process_manager_options(self):
)
return opts
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "pmi_version=pmi1" in self.spec:
env.set("SLURM_MPI_TYPE", "pmi1")
if "pmi_version=pmi2" in self.spec:
@@ -158,7 +158,9 @@ def setup_run_environment(self, env):
# add its compiler paths to the run environment.
self.setup_mpi_wrapper_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_mpi_wrapper_variables(env)
MpichEnvironmentModifications.setup_dependent_build_environment(self, env, dependent_spec)
diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index 1059df5bd3c..b32ec63a662 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -358,7 +358,7 @@ def flag_handler(self, name, flags):
return (flags, None, None)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "process_managers=slurm" in self.spec:
if "pmi_version=pmi1" in self.spec:
env.set("SLURM_MPI_TYPE", "pmi1")
@@ -372,7 +372,9 @@ def setup_run_environment(self, env):
# add its compiler paths to the run environment.
self.setup_mpi_wrapper_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_mpi_wrapper_variables(env)
MpichEnvironmentModifications.setup_dependent_build_environment(self, env, dependent_spec)
diff --git a/var/spack/repos/builtin/packages/mvapich2x/package.py b/var/spack/repos/builtin/packages/mvapich2x/package.py
index 88068d0c5f3..aacc96943cc 100644
--- a/var/spack/repos/builtin/packages/mvapich2x/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2x/package.py
@@ -198,7 +198,7 @@ def construct_cflags(self):
cflags = cflags + "-I/opt/xpmem/include"
return cflags
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "pmi_version=pmi1" in self.spec:
env.set("SLURM_MPI_TYPE", "pmi1")
if "pmi_version=pmi2" in self.spec:
@@ -210,7 +210,9 @@ def setup_run_environment(self, env):
# add its compiler paths to the run environment.
self.setup_mpi_wrapper_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_mpi_wrapper_variables(env)
MpichEnvironmentModifications.setup_dependent_build_environment(self, env, dependent_spec)
diff --git a/var/spack/repos/builtin/packages/mxnet/package.py b/var/spack/repos/builtin/packages/mxnet/package.py
index 6300f288281..d3ee9c127e7 100644
--- a/var/spack/repos/builtin/packages/mxnet/package.py
+++ b/var/spack/repos/builtin/packages/mxnet/package.py
@@ -75,7 +75,7 @@ class Mxnet(CMakePackage, CudaPackage, PythonExtension):
# python/setup.py assumes libs can be found in build directory
build_directory = "build"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MXNET_LIBRARY_PATH", self.spec["mxnet"].libs[0])
if self.spec.satisfies("+nccl ^nccl@2.1:"):
diff --git a/var/spack/repos/builtin/packages/mysql/package.py b/var/spack/repos/builtin/packages/mysql/package.py
index 46a1006f510..cc049ffdf76 100644
--- a/var/spack/repos/builtin/packages/mysql/package.py
+++ b/var/spack/repos/builtin/packages/mysql/package.py
@@ -212,7 +212,7 @@ def _fix_dtrace_shebang(self, env):
# prepend to PATH the temporary folder where it resides.
env.prepend_path("PATH", dtrace_copy_path)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
cxxstd = self.spec.variants["cxxstd"].value
flag = getattr(self.compiler, "cxx{0}_flag".format(cxxstd))
if flag:
diff --git a/var/spack/repos/builtin/packages/nag/package.py b/var/spack/repos/builtin/packages/nag/package.py
index 7cd51060b17..4381be5ed9f 100644
--- a/var/spack/repos/builtin/packages/nag/package.py
+++ b/var/spack/repos/builtin/packages/nag/package.py
@@ -36,7 +36,8 @@ class Nag(Package, CompilerPackage):
deprecated=True,
)
- depends_on("fortran", type="build") # generated
+ depends_on("gcc languages=c", type="run", when="platform=linux")
+ provides("fortran")
# Licensing
license_required = True
@@ -64,7 +65,7 @@ def install(self, spec, prefix):
# Run install script
os.system("./INSTALLU.sh")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("F77", self.prefix.bin.nagfor)
env.set("FC", self.prefix.bin.nagfor)
diff --git a/var/spack/repos/builtin/packages/nalu-wind/package.py b/var/spack/repos/builtin/packages/nalu-wind/package.py
index 7b66312a967..9371c042583 100644
--- a/var/spack/repos/builtin/packages/nalu-wind/package.py
+++ b/var/spack/repos/builtin/packages/nalu-wind/package.py
@@ -142,7 +142,9 @@ class NaluWind(CMakePackage, CudaPackage, ROCmPackage):
"openfast@4.0.0:4.0.1", msg="OpenFAST 4.0.0:4.0.1 contains a bug. Use OpenFAST >= 4.0.2."
)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
if spec.satisfies("+cuda") or spec.satisfies("+rocm"):
env.set("CUDA_LAUNCH_BLOCKING", "1")
@@ -150,7 +152,7 @@ def setup_dependent_run_environment(self, env, dependent_spec):
env.set("HIP_LAUNCH_BLOCKING", "1")
env.set("HIP_MANAGED_FORCE_DEVICE_ALLOC", "1")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.append_flags("CXXFLAGS", "-DUSE_STK_SIMD_NONE")
if spec.satisfies("+cuda"):
diff --git a/var/spack/repos/builtin/packages/namd/package.py b/var/spack/repos/builtin/packages/namd/package.py
index e2fb94c7186..1414249d4c2 100644
--- a/var/spack/repos/builtin/packages/namd/package.py
+++ b/var/spack/repos/builtin/packages/namd/package.py
@@ -23,7 +23,12 @@ class Namd(MakefilePackage, CudaPackage, ROCmPackage):
maintainers("jcphill")
version("master", branch="master")
- version("3.0", sha256="301c64f0f1db860f7336efdb26223ccf66b5ab42bfc9141df8d81ec1e20bf472")
+ version("3.0.1", sha256="3be0854545c45e58afb439a96708e127aef435d30113cc89adbab8f4b6888733")
+ version(
+ "3.0",
+ sha256="301c64f0f1db860f7336efdb26223ccf66b5ab42bfc9141df8d81ec1e20bf472",
+ deprecated=True,
+ )
version(
"3.0b7",
sha256="b18ff43b0f55ec59e137c62eba1812589dd88b2122c3a05ea652781667f438b4",
@@ -99,6 +104,9 @@ class Namd(MakefilePackage, CudaPackage, ROCmPackage):
# Handle change in python-config for python@3.8:
patch("namd-python38.patch", when="interface=python ^python@3.8:")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("charmpp@7.0.0:", when="@3.0:")
depends_on("charmpp@6.10.1:6", when="@2.14:2")
depends_on("charmpp@6.8.2", when="@2.13")
diff --git a/var/spack/repos/builtin/packages/nasm/package.py b/var/spack/repos/builtin/packages/nasm/package.py
index 78499b8fbeb..1ff483071f4 100644
--- a/var/spack/repos/builtin/packages/nasm/package.py
+++ b/var/spack/repos/builtin/packages/nasm/package.py
@@ -87,7 +87,9 @@ def install(self, pkg, spec, prefix):
for file in rdoff:
install(file, self.prefix.rdoff)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# This is required as NASM installs its binaries into an
# atypical location (i.e. flat in the prefix)
env.prepend_path("PATH", self.pkg.prefix)
diff --git a/var/spack/repos/builtin/packages/nccl-fastsocket/package.py b/var/spack/repos/builtin/packages/nccl-fastsocket/package.py
index 0b03798a6ec..9465c927a59 100644
--- a/var/spack/repos/builtin/packages/nccl-fastsocket/package.py
+++ b/var/spack/repos/builtin/packages/nccl-fastsocket/package.py
@@ -22,7 +22,7 @@ class NcclFastsocket(Package):
maintainers("danielahlin")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
tmp_path = tempfile.mkdtemp(prefix="spack")
env.set("TEST_TMPDIR", tmp_path)
@@ -56,7 +56,7 @@ def install(self, spec, prefix):
bazel(*args)
install_tree("bazel-bin", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# The current plugin pickup method of NCCL is to scan for libraries with certain
# names in the standard library search paths. Consequently, to make nccl-fastsocket
# discoverable to NCCL it is necessary to add it to the LD_LIBRARY_PATH.
diff --git a/var/spack/repos/builtin/packages/nccl-tests/package.py b/var/spack/repos/builtin/packages/nccl-tests/package.py
index 19f0184dfac..89ab167fb60 100644
--- a/var/spack/repos/builtin/packages/nccl-tests/package.py
+++ b/var/spack/repos/builtin/packages/nccl-tests/package.py
@@ -36,7 +36,7 @@ def build_targets(self):
targets.append("MPI=1")
return targets
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
cuda_arch = self.spec.variants["cuda_arch"].value
cuda_gencode = " ".join(self.cuda_flags(cuda_arch))
env.set("NVCC_GENCODE", cuda_gencode)
diff --git a/var/spack/repos/builtin/packages/nccmp/package.py b/var/spack/repos/builtin/packages/nccmp/package.py
index d4a7a0ed837..d4f90f2d583 100644
--- a/var/spack/repos/builtin/packages/nccmp/package.py
+++ b/var/spack/repos/builtin/packages/nccmp/package.py
@@ -13,6 +13,8 @@ class Nccmp(CMakePackage):
maintainers("ulmononian", "climbfuji")
+ tags = ["e4s"]
+
license("GPL-2.0-only")
version("1.9.1.0", sha256="5aa8d6cbc54d26f77e3d0511690cfafa57514a4145f75e8cabce782126509c91")
diff --git a/var/spack/repos/builtin/packages/ncftp/package.py b/var/spack/repos/builtin/packages/ncftp/package.py
index 1797750a8ac..ff1a223f7d9 100644
--- a/var/spack/repos/builtin/packages/ncftp/package.py
+++ b/var/spack/repos/builtin/packages/ncftp/package.py
@@ -26,7 +26,7 @@ def url_for_version(self, version):
else:
return url.format(f"ncftp-{version}")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%gcc@10:"):
# https://bugs.gentoo.org/722550
env.set("CFLAGS", "-fcommon")
diff --git a/var/spack/repos/builtin/packages/ncio/package.py b/var/spack/repos/builtin/packages/ncio/package.py
index b5f6c54e4c1..8b2055a307f 100644
--- a/var/spack/repos/builtin/packages/ncio/package.py
+++ b/var/spack/repos/builtin/packages/ncio/package.py
@@ -28,7 +28,7 @@ class Ncio(CMakePackage):
depends_on("mpi")
depends_on("netcdf-fortran")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
lib = find_libraries("libncio", root=self.prefix, shared=False, recursive=True)
env.set("NCIO_LIB", lib[0])
env.set("NCIO_INC", join_path(self.prefix, "include"))
diff --git a/var/spack/repos/builtin/packages/ncl/package.py b/var/spack/repos/builtin/packages/ncl/package.py
index eb626f29150..5c402884f73 100644
--- a/var/spack/repos/builtin/packages/ncl/package.py
+++ b/var/spack/repos/builtin/packages/ncl/package.py
@@ -161,9 +161,6 @@ def patch(self):
)
def install(self, spec, prefix):
- if (self.compiler.fc is None) or (self.compiler.cc is None):
- raise InstallError("NCL package requires both " "C and Fortran compilers.")
-
self.prepare_site_config()
self.prepare_install_config()
self.prepare_src_tree()
@@ -202,7 +199,7 @@ def install(self, spec, prefix):
)
filter_file("^(set cairolib[ ]*=).*", r'\1 "-lcairo -lfreetype"', wrapper)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("NCARG_ROOT", self.spec.prefix)
# We cannot rely on Spack knowledge of esmf when NCL is an external
diff --git a/var/spack/repos/builtin/packages/nco/package.py b/var/spack/repos/builtin/packages/nco/package.py
index 0bcc6e76e8d..43129b6e6e1 100644
--- a/var/spack/repos/builtin/packages/nco/package.py
+++ b/var/spack/repos/builtin/packages/nco/package.py
@@ -14,6 +14,8 @@ class Nco(AutotoolsPackage):
maintainers("altheaden", "xylar")
+ tags = ["e4s"]
+
license("BSD-3-Clause")
version("5.3.3", sha256="f9185e115e246fe884dcae0804146b56df7257f53de7ba190fea66977ccd5a64")
@@ -90,7 +92,7 @@ def configure_args(self):
config_args += self.enable_or_disable("openmp")
return config_args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("NETCDF_INC", spec["netcdf-c"].prefix.include)
env.set("NETCDF_LIB", spec["netcdf-c"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py
index a7271676c5d..4ecb1766d04 100644
--- a/var/spack/repos/builtin/packages/ncurses/package.py
+++ b/var/spack/repos/builtin/packages/ncurses/package.py
@@ -101,7 +101,7 @@ def determine_variants(cls, exes, version):
results.append(variants)
return results
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("TERMINFO")
def flag_handler(self, name, flags):
diff --git a/var/spack/repos/builtin/packages/ncvis/package.py b/var/spack/repos/builtin/packages/ncvis/package.py
index e055d7d7775..c0ed1b1dd88 100644
--- a/var/spack/repos/builtin/packages/ncvis/package.py
+++ b/var/spack/repos/builtin/packages/ncvis/package.py
@@ -29,5 +29,5 @@ class Ncvis(CMakePackage):
def install_resources(self):
install_tree("resources", self.prefix.resources)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("NCVIS_RESOURCE_DIR", self.prefix.resources)
diff --git a/var/spack/repos/builtin/packages/nek5000/package.py b/var/spack/repos/builtin/packages/nek5000/package.py
index 6d9c3e560ac..e9b07efc00d 100644
--- a/var/spack/repos/builtin/packages/nek5000/package.py
+++ b/var/spack/repos/builtin/packages/nek5000/package.py
@@ -26,6 +26,7 @@ class Nek5000(Package):
"fluid",
"ecp",
"ecp-apps",
+ "e4s",
]
version("develop", branch="master")
@@ -48,12 +49,6 @@ class Nek5000(Package):
patch("add_fjfortran.patch", when="%fj")
- @run_before("install")
- def fortran_check(self):
- if not self.compiler.f77:
- msg = "Cannot build Nek5000 without a Fortran 77 compiler."
- raise RuntimeError(msg)
-
@run_after("install")
def check_install(self):
with working_dir("short_tests/eddy"):
diff --git a/var/spack/repos/builtin/packages/nekbone/package.py b/var/spack/repos/builtin/packages/nekbone/package.py
index 35d75b52bea..324e095dc49 100644
--- a/var/spack/repos/builtin/packages/nekbone/package.py
+++ b/var/spack/repos/builtin/packages/nekbone/package.py
@@ -14,7 +14,7 @@ class Nekbone(Package):
homepage = "https://github.com/Nek5000/Nekbone"
git = "https://github.com/Nek5000/Nekbone.git"
- tags = ["proxy-app", "ecp-proxy-app"]
+ tags = ["proxy-app", "ecp-proxy-app", "e4s"]
license("mpich2")
@@ -35,12 +35,6 @@ class Nekbone(Package):
depends_on("mpi", when="+mpi")
- @run_before("install")
- def fortran_check(self):
- if not self.compiler.fc:
- msg = "Nekbone can not be built without a Fortran compiler."
- raise RuntimeError(msg)
-
def install(self, spec, prefix):
mkdir(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/nekcem/package.py b/var/spack/repos/builtin/packages/nekcem/package.py
index 5b50dc69195..fb9b3e5e573 100644
--- a/var/spack/repos/builtin/packages/nekcem/package.py
+++ b/var/spack/repos/builtin/packages/nekcem/package.py
@@ -34,12 +34,6 @@ class Nekcem(Package):
depends_on("blas")
depends_on("lapack")
- @run_before("install")
- def fortran_check(self):
- if not self.compiler.fc:
- msg = "NekCEM can not be built without a Fortran compiler."
- raise RuntimeError(msg)
-
@run_after("install")
def check_install(self):
nekcem_test = join_path(self.prefix.bin, "NekCEM", "tests", "2dboxpec")
diff --git a/var/spack/repos/builtin/packages/nekrs/package.py b/var/spack/repos/builtin/packages/nekrs/package.py
index 0549033f609..a8ef62e54b8 100644
--- a/var/spack/repos/builtin/packages/nekrs/package.py
+++ b/var/spack/repos/builtin/packages/nekrs/package.py
@@ -68,7 +68,7 @@ def patch(self):
filter_file(r"mpirun -np", "srun -n", "nrspre")
filter_file(r"mpirun -np", "srun -n", "nrsbmpi")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# The 'env' is included in the Spack generated module files.
spec = self.spec
env.set("OCCA_CXX", self.compiler.cxx)
@@ -99,7 +99,7 @@ def _setup_runtime_flags(self, s_env):
# Run-time CUDA compiler:
s_env.set("OCCA_CUDA_COMPILER", join_path(cuda_dir, "bin", "nvcc"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# The environment variable CXX is automatically set to the Spack
# compiler wrapper.
@@ -136,7 +136,9 @@ def setup_build_environment(self, env):
env.set("OCCA_VERBOSE", "1")
self._setup_runtime_flags(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Export OCCA_* variables for everyone using this package from within
# Spack.
self._setup_runtime_flags(env)
diff --git a/var/spack/repos/builtin/packages/nektar/package.py b/var/spack/repos/builtin/packages/nektar/package.py
index e14f531662a..2be31cb11c3 100644
--- a/var/spack/repos/builtin/packages/nektar/package.py
+++ b/var/spack/repos/builtin/packages/nektar/package.py
@@ -168,7 +168,7 @@ def install(self, spec, prefix):
with working_dir(self.build_directory):
python("setup.py", "install", "--prefix", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path(
"CMAKE_PREFIX_PATH",
os.path.join(
@@ -179,10 +179,14 @@ def setup_run_environment(self, env):
"PYTHONPATH", os.path.abspath(os.path.join(self.spec.prefix, "build_tree"))
)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_run_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_run_environment(env)
def add_files_to_view(self, view, merge_map, skip_if_exists=True):
diff --git a/var/spack/repos/builtin/packages/nektools/package.py b/var/spack/repos/builtin/packages/nektools/package.py
index 1ddb0a40ca8..886b8446088 100644
--- a/var/spack/repos/builtin/packages/nektools/package.py
+++ b/var/spack/repos/builtin/packages/nektools/package.py
@@ -68,12 +68,6 @@ class Nektools(Package):
depends_on("libxt", when="+postnek")
depends_on("visit", when="+visit")
- @run_before("install")
- def fortran_check(self):
- if not self.compiler.f77:
- msg = "Cannot build Nek5000 without a Fortran 77 compiler."
- raise RuntimeError(msg)
-
def install(self, spec, prefix):
tools_dir = "tools"
bin_dir = "bin"
diff --git a/var/spack/repos/builtin/packages/nest/package.py b/var/spack/repos/builtin/packages/nest/package.py
index 1f30befe40a..991b18223b6 100644
--- a/var/spack/repos/builtin/packages/nest/package.py
+++ b/var/spack/repos/builtin/packages/nest/package.py
@@ -138,5 +138,5 @@ def install_headers(self):
for f in find_headers("*.{0}".format(suffix), self.stage.source_path, recursive=True):
install(f, path_headers)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("NEST_INSTALL_DIR", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/netcdf-c/package.py b/var/spack/repos/builtin/packages/netcdf-c/package.py
index 1afbe2d1049..8d02077373c 100644
--- a/var/spack/repos/builtin/packages/netcdf-c/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-c/package.py
@@ -138,8 +138,7 @@ class NetcdfC(CMakePackage, AutotoolsPackage):
variant("blosc", default=True, description="Enable Blosc compression plugin")
variant("zstd", default=True, description="Enable Zstandard compression plugin")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
with when("build_system=cmake"):
# Based on the versions required by the root CMakeLists.txt:
@@ -283,7 +282,7 @@ class NetcdfC(CMakePackage, AutotoolsPackage):
build_system("cmake", "autotools", default=default_build_system)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@4.9.0:+shared"):
# Both HDF5 and NCZarr backends honor the same environment variable:
env.append_path("HDF5_PLUGIN_PATH", self.prefix.plugins)
@@ -304,7 +303,9 @@ def libs(self):
class AnyBuilder(BaseBuilder):
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# 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,
# we have to shadow nc-config from self.prefix.bin, which references the real compiler,
diff --git a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
index 71b87db3c8c..4727f237714 100644
--- a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
@@ -95,4 +95,4 @@ def cmake_args(self):
def check(self):
with working_dir(self.build_directory):
- make("test", parallel=False)
+ ctest()
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/package.py b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
index 12e90d6dc37..e3e0a55cc3d 100644
--- a/var/spack/repos/builtin/packages/netcdf-fortran/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
@@ -20,6 +20,8 @@ class NetcdfFortran(AutotoolsPackage):
maintainers("skosukhin", "WardF")
+ tags = ["e4s"]
+
license("Apache-2.0")
version("4.6.1", sha256="b50b0c72b8b16b140201a020936aa8aeda5c79cf265c55160986cd637807a37a")
@@ -35,8 +37,8 @@ class NetcdfFortran(AutotoolsPackage):
variant("shared", default=True, description="Enable shared library")
variant("doc", default=False, description="Enable building docs")
- depends_on("c", type="build") # generated
- depends_on("fortran", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
depends_on("netcdf-c")
depends_on("netcdf-c@4.7.4:", when="@4.5.3:") # nc_def_var_szip required
diff --git a/var/spack/repos/builtin/packages/netdata/package.py b/var/spack/repos/builtin/packages/netdata/package.py
index d473e3c147a..d0fedf794ae 100644
--- a/var/spack/repos/builtin/packages/netdata/package.py
+++ b/var/spack/repos/builtin/packages/netdata/package.py
@@ -35,7 +35,7 @@ class Netdata(AutotoolsPackage):
depends_on("uuid")
depends_on("zlib-api")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
@run_after("install")
diff --git a/var/spack/repos/builtin/packages/neuron/package.py b/var/spack/repos/builtin/packages/neuron/package.py
index 7d701214986..081cf016b2f 100644
--- a/var/spack/repos/builtin/packages/neuron/package.py
+++ b/var/spack/repos/builtin/packages/neuron/package.py
@@ -185,7 +185,7 @@ def filter_compilers(self):
nrnmakefile = join_path(self.prefix, "share/coreneuron/nrnivmodl_core_makefile")
filter_file("(?:^|\\s)CXX\\s*=.+", "CXX = {0}".format(cxx_compiler), nrnmakefile)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(self.prefix, "bin"))
env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "lib"))
if self.spec.satisfies("+python"):
diff --git a/var/spack/repos/builtin/packages/nfs-ganesha/package.py b/var/spack/repos/builtin/packages/nfs-ganesha/package.py
index b53c913b899..d944672a344 100644
--- a/var/spack/repos/builtin/packages/nfs-ganesha/package.py
+++ b/var/spack/repos/builtin/packages/nfs-ganesha/package.py
@@ -29,5 +29,5 @@ class NfsGanesha(CMakePackage):
root_cmakelists_dir = "src"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["ntirpc"].prefix.include.ntirpc)
diff --git a/var/spack/repos/builtin/packages/nginx/package.py b/var/spack/repos/builtin/packages/nginx/package.py
index 32d1bdd6606..7250087fd52 100644
--- a/var/spack/repos/builtin/packages/nginx/package.py
+++ b/var/spack/repos/builtin/packages/nginx/package.py
@@ -38,6 +38,6 @@ def configure_args(self):
args = ["--with-http_ssl_module"]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Prepend the sbin directory to PATH."""
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/ngspice/package.py b/var/spack/repos/builtin/packages/ngspice/package.py
index 39acd92aa70..35d9a089965 100644
--- a/var/spack/repos/builtin/packages/ngspice/package.py
+++ b/var/spack/repos/builtin/packages/ngspice/package.py
@@ -168,6 +168,6 @@ def flag_handler(self, name, flags):
flags.append("-g")
return (None, None, flags)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "build=lib" in self.spec:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/nim/package.py b/var/spack/repos/builtin/packages/nim/package.py
index f5db59f3349..4044a46b8b1 100644
--- a/var/spack/repos/builtin/packages/nim/package.py
+++ b/var/spack/repos/builtin/packages/nim/package.py
@@ -22,9 +22,11 @@ class Nim(Package):
maintainers("Buldram")
- version("devel", branch="devel")
+ version("develop", branch="devel")
+ version("2.2.4", sha256="f82b419750fcce561f3f897a0486b180186845d76fb5d99f248ce166108189c7")
version("2.2.2", sha256="7fcc9b87ac9c0ba5a489fdc26e2d8480ce96a3ca622100d6267ef92135fd8a1f")
version("2.2.0", sha256="ce9842849c9760e487ecdd1cdadf7c0f2844cafae605401c7c72ae257644893c")
+ version("2.0.16", sha256="b2e70c6c011b5507093090a8887fa252773208fd047ee38f8562e2569e5c378a")
version("2.0.14", sha256="d420b955833294b7861e3fb65021dac26d1c19c528c4d6e139ccd379e2c15a43")
version("2.0.12", sha256="c4887949c5eb8d7f9a9f56f0aeb2bf2140fabf0aee0f0580a319e2a09815733a")
version("2.0.4", sha256="71526bd07439dc8e378fa1a6eb407eda1298f1f3d4df4476dca0e3ca3cbe3f09")
@@ -56,16 +58,14 @@ class Nim(Package):
)
variant(
- "sqlite", default=False, when="@0:1.7.3", description="Install SQLite for std/db_sqlite"
+ "sqlite", default=False, when="@:1.7.3", description="Install SQLite for std/db_sqlite"
)
depends_on("c", type="build")
- depends_on("cxx", type="build")
-
- depends_on("gmake", type="build", when="@devel,0.20:")
+ depends_on("gmake", type="build", when="@0.20:")
depends_on("pcre", type="link")
depends_on("openssl", type="link")
- depends_on("openssl@1", type="link", when="@0:1.6.9")
+ depends_on("openssl@1", type="link", when="@:1.6.9")
depends_on("sqlite@3:", type="link", when="+sqlite")
# CVE-2021-46872
@@ -91,7 +91,7 @@ class Nim(Package):
patch(
"https://github.com/nim-lang/nimble/commit/89954f8b03b05970aea78c8fe1241138f5bbeae8.patch?full_index=1",
sha256="5e6f7e2d2dac5d2ed70b5047418d9b43e156de35737f9fad0052ae30dd539b03",
- when="@0:1.2.9,1.4.0:1.4.3",
+ when="@:1.2.9,1.4.0:1.4.3",
working_dir="dist/nimble",
)
@@ -99,7 +99,7 @@ class Nim(Package):
name="csources_v2",
git="https://github.com/nim-lang/csources_v2.git",
commit="86742fb02c6606ab01a532a0085784effb2e753e",
- when="@devel",
+ when="@develop",
)
phases = ["build", "install"]
@@ -115,25 +115,22 @@ def append_rpath(path, libdirs):
for path in filter_system_paths(libdirs):
quoted_path = shlex.quote(path)
if '"""' in quoted_path:
- raise InstallError(
- "Quoted dependency path " + quoted_path + ' contains """'
- )
+ raise InstallError(f'Quoted dependency path {quoted_path} contains """')
if not scope:
f.write("\nwhen not defined(vcc):\n") # TODO: Implement for msvc
scope = True
- f.write(' {.passl: """-Xlinker -rpath -Xlinker ' + quoted_path + '""".}\n')
+ f.write(f' {{.passl: """-Xlinker -rpath -Xlinker {quoted_path}""".}}\n')
- spec = self.spec
- append_rpath("lib/wrappers/pcre.nim", spec["pcre"].libs.directories)
- append_rpath("lib/wrappers/openssl.nim", spec["openssl"].libs.directories)
- if spec.satisfies("+sqlite"):
- append_rpath("lib/wrappers/sqlite3.nim", spec["sqlite"].libs.directories)
+ append_rpath("lib/wrappers/pcre.nim", self.spec["pcre"].libs.directories)
+ append_rpath("lib/wrappers/openssl.nim", self.spec["openssl"].libs.directories)
+ if self.spec.satisfies("+sqlite"):
+ append_rpath("lib/wrappers/sqlite3.nim", self.spec["sqlite"].libs.directories)
# Musl defines SysThread as a struct *pthread_t rather than an unsigned long as glibc does.
if self.spec.satisfies("^[virtuals=libc] musl"):
- if self.spec.satisfies("@devel,1.9.3:"):
+ if self.spec.satisfies("@1.9.3:"):
pthreadModule = "lib/std/private/threadtypes.nim"
elif self.spec.satisfies("@:0.19.6"):
pthreadModule = "lib/system/threads.nim"
@@ -148,7 +145,7 @@ def append_rpath(path, libdirs):
)
def build(self, spec, prefix):
- if spec.satisfies("@devel"):
+ if spec.satisfies("@develop"):
with working_dir("csources_v2"):
make()
@@ -167,12 +164,12 @@ def build(self, spec, prefix):
koch("boot", "-d:release", *nim_flags)
koch("tools", *nim_flags)
- if spec.satisfies("@devel"):
+ if spec.satisfies("@develop"):
koch("geninstall")
- def install(self, spec, prefix):
filter_file("1/nim", "1", "install.sh")
+ def install(self, spec, prefix):
Executable("./install.sh")(prefix)
-
install_tree("bin", prefix.bin)
+ install_tree("dist", prefix.dist)
diff --git a/var/spack/repos/builtin/packages/ninja/package.py b/var/spack/repos/builtin/packages/ninja/package.py
index 19be46d2928..642082f85cb 100644
--- a/var/spack/repos/builtin/packages/ninja/package.py
+++ b/var/spack/repos/builtin/packages/ninja/package.py
@@ -16,7 +16,7 @@ class Ninja(Package):
url = "https://github.com/ninja-build/ninja/archive/v1.7.2.tar.gz"
git = "https://github.com/ninja-build/ninja.git"
- tags = ["build-tools", "e4s", "windows"]
+ tags = ["build-tools", "windows"]
executables = ["^ninja$"]
@@ -81,7 +81,7 @@ def configure_test(self):
ninja_test = Executable("./ninja_test")
ninja_test()
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.misc)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/nix/package.py b/var/spack/repos/builtin/packages/nix/package.py
index d9163d3a1c9..8362a976a06 100644
--- a/var/spack/repos/builtin/packages/nix/package.py
+++ b/var/spack/repos/builtin/packages/nix/package.py
@@ -72,6 +72,8 @@ class Nix(AutotoolsPackage):
depends_on("openssl")
depends_on("sqlite@3.6.19:")
depends_on("xz")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
# gcc 4.9+ and higher supported with c++14
conflicts("%gcc@:4.8")
diff --git a/var/spack/repos/builtin/packages/nn-c/package.py b/var/spack/repos/builtin/packages/nn-c/package.py
index 70b21364de7..fe2e195d5e8 100644
--- a/var/spack/repos/builtin/packages/nn-c/package.py
+++ b/var/spack/repos/builtin/packages/nn-c/package.py
@@ -19,6 +19,8 @@ class NnC(AutotoolsPackage):
variant("pic", default=True, description="Produce position-independent code (for shared libs)")
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
configure_directory = "nn"
diff --git a/var/spack/repos/builtin/packages/nnn/package.py b/var/spack/repos/builtin/packages/nnn/package.py
index 5cc0561e289..b887713dd5f 100644
--- a/var/spack/repos/builtin/packages/nnn/package.py
+++ b/var/spack/repos/builtin/packages/nnn/package.py
@@ -57,7 +57,7 @@ class Nnn(MakefilePackage):
description="Add pipe to close and restore preview-tui for internal undetached edits",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("PREFIX", self.prefix)
if "+pcre" in spec:
diff --git a/var/spack/repos/builtin/packages/node-js/package.py b/var/spack/repos/builtin/packages/node-js/package.py
index f35c97471be..771378f16f4 100644
--- a/var/spack/repos/builtin/packages/node-js/package.py
+++ b/var/spack/repos/builtin/packages/node-js/package.py
@@ -164,7 +164,7 @@ def determine_version(cls, exe):
match = re.match(r"v([\d.]+)\s*", output)
return match.group(1) if match else None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Force use of experimental Python 3 support
env.set("PYTHON", self.spec["python"].command.path)
env.set("NODE_GYP_FORCE_PYTHON", self.spec["python"].command.path)
diff --git a/var/spack/repos/builtin/packages/npm/package.py b/var/spack/repos/builtin/packages/npm/package.py
index fb6a56d53dd..e208ab351b1 100644
--- a/var/spack/repos/builtin/packages/npm/package.py
+++ b/var/spack/repos/builtin/packages/npm/package.py
@@ -121,14 +121,18 @@ def install(self, spec, prefix):
".",
)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
npm_config_cache_dir = "%s/npm-cache" % dependent_spec.prefix
if not os.path.isdir(npm_config_cache_dir):
mkdirp(npm_config_cache_dir)
env.set("npm_config_cache", npm_config_cache_dir)
env.set("npm_config_install_links", "true")
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
npm_config_cache_dir = "%s/npm-cache" % dependent_spec.prefix
env.set("npm_config_cache", npm_config_cache_dir)
env.set("npm_config_install_links", "true")
diff --git a/var/spack/repos/builtin/packages/nut/package.py b/var/spack/repos/builtin/packages/nut/package.py
index 1da3335c51b..e8e0fc66692 100644
--- a/var/spack/repos/builtin/packages/nut/package.py
+++ b/var/spack/repos/builtin/packages/nut/package.py
@@ -35,7 +35,7 @@ class Nut(CMakePackage):
conflicts("%nag", when="@serial")
build_targets = ["VERBOSE=on"]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("RANDOM123_DIR", self.spec["random123"].prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/nvhpc/package.py b/var/spack/repos/builtin/packages/nvhpc/package.py
index fb375af1fc8..a314ce5c6ee 100644
--- a/var/spack/repos/builtin/packages/nvhpc/package.py
+++ b/var/spack/repos/builtin/packages/nvhpc/package.py
@@ -3,6 +3,7 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
#
# Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved.
+import glob
import os.path
import platform
@@ -519,7 +520,7 @@ def determine_variants(cls, exes, version_str):
def _version_prefix(self):
return join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("NVHPC_SILENT", "true")
env.set("NVHPC_ACCEPT_EULA", "accept")
env.set("NVHPC_INSTALL_DIR", self.prefix)
@@ -558,7 +559,7 @@ def install(self, spec, prefix):
# Update localrc to use Spack gcc
makelocalrc(*makelocalrc_args)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
prefix = Prefix(
join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version, "compilers")
)
@@ -586,7 +587,9 @@ def setup_run_environment(self, env):
env.prepend_path("PATH", mpi_prefix.bin)
env.prepend_path("LD_LIBRARY_PATH", mpi_prefix.lib)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
prefix = Prefix(
join_path(self.prefix, "Linux_%s" % self.spec.target.family, self.version, "compilers")
)
@@ -640,5 +643,23 @@ def libs(self):
return find_libraries(libs, root=prefix, recursive=True)
+ def _cc_path(self):
+ candidates = glob.glob(f"{self.prefix}/**/{self.spec.version}/compilers/bin/nvc")
+ if not candidates:
+ return None
+ return candidates[0]
+
+ def _cxx_path(self):
+ candidates = glob.glob(f"{self.prefix}/**/{self.spec.version}/compilers/bin/nvc++")
+ if not candidates:
+ return None
+ return candidates[0]
+
+ def _fortran_path(self):
+ candidates = glob.glob(f"{self.prefix}/**/{self.spec.version}/compilers/bin/nvfortran")
+ if not candidates:
+ return None
+ return candidates[0]
+
# Avoid binding stub libraries by absolute path
non_bindable_shared_objects = ["stubs"]
diff --git a/var/spack/repos/builtin/packages/nvpl-scalapack/package.py b/var/spack/repos/builtin/packages/nvpl-scalapack/package.py
index 04cbeda7850..09c8b4cb44c 100644
--- a/var/spack/repos/builtin/packages/nvpl-scalapack/package.py
+++ b/var/spack/repos/builtin/packages/nvpl-scalapack/package.py
@@ -16,6 +16,8 @@ class NvplScalapack(Package):
maintainers("RMeli")
+ tags = ["e4s"]
+
version("0.2.1", sha256="dada4d1ecf044d90609b9e62750b383d11be9b22c87e109414bcc07dce3c83c9")
provides("scalapack")
diff --git a/var/spack/repos/builtin/packages/nvshmem/package.py b/var/spack/repos/builtin/packages/nvshmem/package.py
index b7ea9e9350a..b8d49550a78 100644
--- a/var/spack/repos/builtin/packages/nvshmem/package.py
+++ b/var/spack/repos/builtin/packages/nvshmem/package.py
@@ -55,7 +55,7 @@ def url_for_version(self, version):
depends_on("gdrcopy", when="+gdrcopy")
depends_on("nccl", when="+nccl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CUDA_HOME", self.spec["cuda"].prefix)
env.set("NVSHMEM_PREFIX", self.prefix)
diff --git a/var/spack/repos/builtin/packages/nwchem/package.py b/var/spack/repos/builtin/packages/nwchem/package.py
index de05736af60..08edf8c4eb3 100644
--- a/var/spack/repos/builtin/packages/nwchem/package.py
+++ b/var/spack/repos/builtin/packages/nwchem/package.py
@@ -15,7 +15,7 @@ class Nwchem(Package):
url = "https://github.com/nwchemgit/nwchem/releases/download/v7.2.0-release/nwchem-7.2.0-release.revision-d0d141fd-srconly.2023-03-10.tar.bz2"
git = "https://github.com/nwchemgit/nwchem.git"
- tags = ["ecp", "ecp-apps"]
+ tags = ["ecp", "ecp-apps", "e4s"]
maintainers("jeffhammond")
@@ -262,6 +262,6 @@ def install(self, spec, prefix):
f.write(nwchemrc)
install(".nwchemrc", share_path)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("NWCHEM_BASIS_LIBRARY", join_path(self.prefix, "share/nwchem/libraries/"))
env.set("NWCHEM_NWPW_LIBRARY", join_path(self.prefix, "share/nwchem/libraryps/"))
diff --git a/var/spack/repos/builtin/packages/occa/package.py b/var/spack/repos/builtin/packages/occa/package.py
index 05c83d003f9..b466d2bcf58 100644
--- a/var/spack/repos/builtin/packages/occa/package.py
+++ b/var/spack/repos/builtin/packages/occa/package.py
@@ -71,7 +71,7 @@ def _setup_runtime_flags(self, s_env):
# Run-time CUDA compiler:
s_env.set("OCCA_CUDA_COMPILER", join_path(cuda_dir, "bin", "nvcc"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# The environment variable CXX is automatically set to the Spack
# compiler wrapper.
@@ -113,11 +113,13 @@ def setup_build_environment(self, env):
env.set("OCCA_VERBOSE", "1")
self._setup_runtime_flags(env)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# The 'env' is included in the Spack generated module files.
self._setup_runtime_flags(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Export OCCA_* variables for everyone using this package from within
# Spack.
self._setup_runtime_flags(env)
diff --git a/var/spack/repos/builtin/packages/octave-gsl/package.py b/var/spack/repos/builtin/packages/octave-gsl/package.py
index c7053257a62..29c0dba38bd 100644
--- a/var/spack/repos/builtin/packages/octave-gsl/package.py
+++ b/var/spack/repos/builtin/packages/octave-gsl/package.py
@@ -20,5 +20,5 @@ class OctaveGsl(OctavePackage, SourceforgePackage):
depends_on("gsl@2.4:")
extends("octave@2.9.7:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PKG_CONFIG_PATH", self.spec["gsl"].prefix)
diff --git a/var/spack/repos/builtin/packages/of-precice/package.py b/var/spack/repos/builtin/packages/of-precice/package.py
index 0662a92f0b9..e3667ba55fa 100644
--- a/var/spack/repos/builtin/packages/of-precice/package.py
+++ b/var/spack/repos/builtin/packages/of-precice/package.py
@@ -94,5 +94,5 @@ def install(self, spec, prefix):
# Place directly under 'lib' (no bin)
install_tree(join_path(self.build_userdir, "lib"), join_path(self.prefix, "lib"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "lib"))
diff --git a/var/spack/repos/builtin/packages/ollama/package.py b/var/spack/repos/builtin/packages/ollama/package.py
index 0192160f28b..4b1cd3b2d8f 100644
--- a/var/spack/repos/builtin/packages/ollama/package.py
+++ b/var/spack/repos/builtin/packages/ollama/package.py
@@ -36,7 +36,7 @@ class Ollama(GoPackage, CudaPackage):
class GoBuilder(spack.build_systems.go.GoBuilder):
phases = ("generate", "build", "install")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda"):
# These variables are consumed by gen_linux.sh which is called by
# "go generate".
diff --git a/var/spack/repos/builtin/packages/omnitrace/package.py b/var/spack/repos/builtin/packages/omnitrace/package.py
index 29f115f7222..19217d434b8 100644
--- a/var/spack/repos/builtin/packages/omnitrace/package.py
+++ b/var/spack/repos/builtin/packages/omnitrace/package.py
@@ -18,8 +18,8 @@ class Omnitrace(CMakePackage):
license("MIT")
- version("amd-mainline", branch="amd-mainline", submodules=True)
- version("amd-staging", branch="amd-staging", submodules=True)
+ version("amd-mainline", branch="amd-mainline", submodules=True, deprecated=True)
+ version("amd-staging", branch="amd-staging", submodules=True, deprecated=True)
version(
"rocm-6.3.0",
git="https://github.com/ROCm/rocprofiler-systems",
@@ -211,7 +211,7 @@ def flag_handler(self, name, flags):
flags.append("-lintl")
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+tau" in self.spec:
import glob
diff --git a/var/spack/repos/builtin/packages/onednn/package.py b/var/spack/repos/builtin/packages/onednn/package.py
index 7b1a7530ad4..8af3d9296a2 100644
--- a/var/spack/repos/builtin/packages/onednn/package.py
+++ b/var/spack/repos/builtin/packages/onednn/package.py
@@ -150,6 +150,6 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+acl"):
env.set("ACL_ROOT_DIR", self.spec["armcomputelibrary"].prefix)
diff --git a/var/spack/repos/builtin/packages/oommf/package.py b/var/spack/repos/builtin/packages/oommf/package.py
index d8e6dec46b7..dad266ddb00 100644
--- a/var/spack/repos/builtin/packages/oommf/package.py
+++ b/var/spack/repos/builtin/packages/oommf/package.py
@@ -200,7 +200,7 @@ def install(self, spec, prefix):
for f in install_files:
install(os.path.join(oommfdir, f), prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Set OOMMF_ROOT so that oommf.tcl can find its files.
oommfdir = self.get_oommf_path(self.prefix)
env.set("OOMMF_ROOT", oommfdir)
diff --git a/var/spack/repos/builtin/packages/opa-psm2/package.py b/var/spack/repos/builtin/packages/opa-psm2/package.py
index 3ce1a20bca4..5217f9cb2b9 100644
--- a/var/spack/repos/builtin/packages/opa-psm2/package.py
+++ b/var/spack/repos/builtin/packages/opa-psm2/package.py
@@ -43,7 +43,7 @@ class OpaPsm2(MakefilePackage, CudaPackage):
sha256="fe31fda9aaee13acb87d178af2282446196d2cc0b21163034573706110b2e2d6",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DESTDIR", self.prefix)
if "%intel" in self.spec:
# this variable must be set when we use the Intel compilers to
diff --git a/var/spack/repos/builtin/packages/opam/package.py b/var/spack/repos/builtin/packages/opam/package.py
index 99139754d72..32f7a3b85a5 100644
--- a/var/spack/repos/builtin/packages/opam/package.py
+++ b/var/spack/repos/builtin/packages/opam/package.py
@@ -53,7 +53,7 @@ def build_directory(self):
return self.stage.source_path
@when("@:1.2.2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""In OCaml <4.06.1, the default was -safe-string=0, and this has
changed in OCaml >=4.06.1. OPAM version 1 was written before 4.06.1
was released, so OPAM <2.0 assumes mutable strings and requires the
diff --git a/var/spack/repos/builtin/packages/open-iscsi/package.py b/var/spack/repos/builtin/packages/open-iscsi/package.py
index 7ed4963540e..da20bcffbed 100644
--- a/var/spack/repos/builtin/packages/open-iscsi/package.py
+++ b/var/spack/repos/builtin/packages/open-iscsi/package.py
@@ -32,10 +32,10 @@ class OpenIscsi(MakefilePackage):
depends_on("automake", type="build")
depends_on("libtool", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CFLAGS", "-DNO_SYSTEMD")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/openblas/openblas-0.3.29-darwin-aarch64.patch b/var/spack/repos/builtin/packages/openblas/openblas-0.3.29-darwin-aarch64.patch
new file mode 100644
index 00000000000..02b7b75508e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/openblas-0.3.29-darwin-aarch64.patch
@@ -0,0 +1,84 @@
+diff --git a/Makefile.system b/Makefile.system
+index ac278bab1..a1059c224 100644
+--- a/Makefile.system
++++ b/Makefile.system
+@@ -434,6 +434,11 @@ ifeq (x$(XCVER), x 15)
+ CCOMMON_OPT += -Wl,-ld_classic
+ FCOMMON_OPT += -Wl,-ld_classic
+ endif
++ifeq (x$(XCVER), x 16)
++ifeq ($(F_COMPILER), GFORTRAN)
++override CEXTRALIB := $(filter-out(-lto_library, $(CEXTRALIB)))
++endif
++endif
+ endif
+
+ ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
+diff --git a/ctest/Makefile b/ctest/Makefile
+index 877a190c1..e6f683bd8 100644
+--- a/ctest/Makefile
++++ b/ctest/Makefile
+@@ -235,18 +235,18 @@ FLDFLAGS = $(FFLAGS:-fPIC=) $(LDFLAGS)
+ ifeq ($(USE_OPENMP), 1)
+ ifeq ($(F_COMPILER), GFORTRAN)
+ ifeq ($(C_COMPILER), CLANG)
+-CEXTRALIB += -lomp
++EXTRALIB += -lomp
+ endif
+ endif
+ ifeq ($(F_COMPILER), NAG)
+-CEXTRALIB = -lgomp
++EXTRALIB = -lgomp
+ endif
+ ifeq ($(F_COMPILER), IBM)
+ ifeq ($(C_COMPILER), GCC)
+-CEXTRALIB += -lgomp
++EXTRALIB += -lgomp
+ endif
+ ifeq ($(C_COMPILER), CLANG)
+-CEXTRALIB += -lomp
++EXTRALIB += -lomp
+ endif
+ endif
+ endif
+diff --git a/test/Makefile b/test/Makefile
+index 65576d3dd..9ba88988b 100644
+--- a/test/Makefile
++++ b/test/Makefile
+@@ -299,18 +299,18 @@ CLDFLAGS = $(CFLAGS) $(LDFLAGS)
+ ifeq ($(USE_OPENMP), 1)
+ ifeq ($(F_COMPILER), GFORTRAN)
+ ifeq ($(C_COMPILER), CLANG)
+-CEXTRALIB += -lomp
++EXTRALIB += -lomp
+ endif
+ endif
+ ifeq ($(F_COMPILER), NAG)
+-CEXTRALIB = -lgomp
++EXTRALIB = -lgomp
+ endif
+ ifeq ($(F_COMPILER), IBM)
+ ifeq ($(C_COMPILER), GCC)
+-CEXTRALIB += -lgomp
++EXTRALIB += -lgomp
+ endif
+ ifeq ($(C_COMPILER), CLANG)
+-CEXTRALIB += -lomp
++EXTRALIB += -lomp
+ endif
+ endif
+ endif
+diff --git a/utest/test_potrs.c b/utest/test_potrs.c
+index 642ce1e37..bcb1f753b 100644
+--- a/utest/test_potrs.c
++++ b/utest/test_potrs.c
+@@ -32,7 +32,9 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **********************************************************************************/
+
+ #include "openblas_utest.h"
++#if defined(ARCH_LOONGARCH64)
+ #pragma GCC optimize("no-gcse")
++#endif
+ /*
+ void BLASFUNC(cpotrf)(char*, BLASINT*, complex float*, BLASINT*, BLASINT*);
+ void BLASFUNC(zpotrs_(char*, BLASINT*, BLASINT*, complex double*,
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index d1b39d976eb..0521b7dff58 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -114,6 +114,9 @@ class Openblas(CMakePackage, MakefilePackage):
# https://github.com/OpenMathLib/OpenBLAS/pull/4328
patch("xcode15-fortran.patch", when="@0.3.25 %apple-clang@15:")
+ # https://github.com/OpenMathLib/OpenBLAS/issues/5202
+ patch("openblas-0.3.29-darwin-aarch64.patch", when="@0.3.29 platform=darwin")
+
# https://github.com/xianyi/OpenBLAS/pull/2519/files
patch("ifort-msvc.patch", when="%msvc")
@@ -294,20 +297,6 @@ def parallel(self):
# unclear whether setting `-j N` externally was supported before 0.3
return self.spec.version >= Version("0.3.0")
- @run_before("edit")
- def check_compilers(self):
- # As of 06/2016 there is no mechanism to specify that packages which
- # depends on Blas/Lapack need C or/and Fortran symbols. For now
- # require both.
- # As of 08/2022 (0.3.21), we can build purely with a C compiler using
- # a f2c translated LAPACK version
- # https://github.com/xianyi/OpenBLAS/releases/tag/v0.3.21
- if self.compiler.fc is None and "~fortran" not in self.spec:
- raise InstallError(
- self.compiler.cc
- + " has no Fortran compiler added in spack. Add it or use openblas~fortran!"
- )
-
@property
def headers(self):
# The only public headers for cblas and lapacke in
@@ -452,7 +441,7 @@ def _microarch_target_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# When building OpenBLAS with threads=openmp, `make all`
# runs tests, so we set the max number of threads at runtime
# accordingly
diff --git a/var/spack/repos/builtin/packages/opencv/package.py b/var/spack/repos/builtin/packages/opencv/package.py
index 396dabcbb67..3a50992e1b4 100644
--- a/var/spack/repos/builtin/packages/opencv/package.py
+++ b/var/spack/repos/builtin/packages/opencv/package.py
@@ -18,6 +18,8 @@ class Opencv(CMakePackage, CudaPackage):
maintainers("bvanessen", "adamjstewart")
+ tags = ["e4s"]
+
license("BSD-3-Clause")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/opendatadetector/package.py b/var/spack/repos/builtin/packages/opendatadetector/package.py
index f2c03e60ecf..102ffd5e919 100644
--- a/var/spack/repos/builtin/packages/opendatadetector/package.py
+++ b/var/spack/repos/builtin/packages/opendatadetector/package.py
@@ -34,7 +34,7 @@ def cmake_args(self):
args = [self.define("CMAKE_CXX_STANDARD", self.spec["root"].variants["cxxstd"].value)]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("OPENDATADETECTOR_DATA", join_path(self.prefix.share, "OpenDataDetector"))
for lib_path in [self.prefix.lib, self.prefix.lib64]:
env.prepend_path("LD_LIBRARY_PATH", lib_path)
diff --git a/var/spack/repos/builtin/packages/openfast/package.py b/var/spack/repos/builtin/packages/openfast/package.py
index 809f35cf43b..4b601cbcd20 100644
--- a/var/spack/repos/builtin/packages/openfast/package.py
+++ b/var/spack/repos/builtin/packages/openfast/package.py
@@ -17,7 +17,7 @@ class Openfast(CMakePackage):
version("develop", branch="dev")
version("master", branch="main")
- version("4.0.2", tag="v4.0.2", commit="fc1110183bcc87b16d93129edabdce6d30e3a497")
+ version("4.0.4", tag="v4.0.4", commit="d28a823169e75029d73362b07a2942d0a454f03b")
version("3.5.5", tag="v3.5.5", commit="b48e032303c12df6949c67ebffb7050b888db000")
version("3.5.4", tag="v3.5.4", commit="6a63db76978b0f703165391291963beb517d5a9e")
version("3.5.3", tag="v3.5.3", commit="6a7a543790f3cad4a65b87242a619ac5b34b4c0f")
@@ -38,6 +38,8 @@ class Openfast(CMakePackage):
version("1.0.0", tag="v1.0.0", commit="e788b9b18bd5ed96ea59d4bc0812d461bc430cfe")
with default_args(deprecated=True):
+ version("4.0.3", tag="v4.0.3", commit="20632d7728da024478956b545876eb24a48dadbe")
+ version("4.0.2", tag="v4.0.2", commit="fc1110183bcc87b16d93129edabdce6d30e3a497")
version("4.0.1", tag="v4.0.1", commit="89358f1843b62071ee1a8ca943c1b5277bcbd45a")
version("4.0.0", tag="v4.0.0", commit="da685d4997fd17ea845812c785325efa72edcf47")
diff --git a/var/spack/repos/builtin/packages/openfdtd/package.py b/var/spack/repos/builtin/packages/openfdtd/package.py
index 4c77ea3762d..63a698ae786 100644
--- a/var/spack/repos/builtin/packages/openfdtd/package.py
+++ b/var/spack/repos/builtin/packages/openfdtd/package.py
@@ -23,6 +23,8 @@ class Openfdtd(MakefilePackage):
variant("mpi", default=False, description="Build with MPI Support")
+ depends_on("c", type="build")
+
depends_on("mpi", when="+mpi")
def url_for_version(self, version):
diff --git a/var/spack/repos/builtin/packages/openfoam-org/package.py b/var/spack/repos/builtin/packages/openfoam-org/package.py
index c3711338e1e..a4fc9ff0f94 100644
--- a/var/spack/repos/builtin/packages/openfoam-org/package.py
+++ b/var/spack/repos/builtin/packages/openfoam-org/package.py
@@ -185,7 +185,7 @@ def config(self):
settings["label-size"] = False
return settings
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
bashrc = self.prefix.etc.bashrc
try:
env.extend(EnvironmentModifications.from_sourcing_file(bashrc, clean=True))
@@ -193,7 +193,9 @@ def setup_run_environment(self, env):
msg = "unexpected error when sourcing OpenFOAM bashrc [{0}]"
tty.warn(msg.format(str(e)))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Location of the OpenFOAM project directory.
This is identical to the WM_PROJECT_DIR value, but we avoid that
variable since it would mask the normal OpenFOAM cleanup of
@@ -201,7 +203,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
"""
env.set("FOAM_PROJECT_DIR", self.projectdir)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Location of the OpenFOAM project directory.
This is identical to the WM_PROJECT_DIR value, but we avoid that
variable since it would mask the normal OpenFOAM cleanup of
diff --git a/var/spack/repos/builtin/packages/openfoam/package.py b/var/spack/repos/builtin/packages/openfoam/package.py
index 51b0e952766..53af2e6a785 100644
--- a/var/spack/repos/builtin/packages/openfoam/package.py
+++ b/var/spack/repos/builtin/packages/openfoam/package.py
@@ -466,7 +466,7 @@ def url_for_version(self, version):
fmt = "v{0}/OpenFOAM-v{1}.tgz"
return self.list_url + fmt.format(version.up_to(1), version)
- def setup_minimal_environment(self, env):
+ def setup_minimal_environment(self, env: EnvironmentModifications):
"""Sets a minimal openfoam environment."""
tty.info("OpenFOAM minimal env {0}".format(self.prefix))
env.set("FOAM_PROJECT_DIR", self.projectdir)
@@ -474,11 +474,11 @@ def setup_minimal_environment(self, env):
for d in ["wmake", self.archbin]: # bin added automatically
env.prepend_path("PATH", join_path(self.projectdir, d))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Sets the build environment (prior to unpacking the sources)."""
pass
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Sets the run environment (post-installation).
The environment comes from running:
@@ -516,9 +516,9 @@ def setup_run_environment(self, env):
"FOAM_RUN",
"(FOAM|WM)_.*USER_.*",
],
- whitelist=[ # Whitelist these
- "MPI_ARCH_PATH" # Can be required for compilation
- ],
+ whitelist=[
+ "MPI_ARCH_PATH"
+ ], # Whitelist these # Can be required for compilation
)
env.extend(mods)
@@ -531,7 +531,9 @@ def setup_run_environment(self, env):
# pre-build or minimal environment
self.setup_minimal_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Use full OpenFOAM environment when building.
Mirror WM_PROJECT_DIR value as FOAM_PROJECT_DIR to avoid
masking the normal OpenFOAM cleanup of previous versions.
@@ -539,7 +541,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
self.setup_run_environment(env)
env.set("FOAM_PROJECT_DIR", self.projectdir)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Use full OpenFOAM environment when running.
Mirror WM_PROJECT_DIR value as FOAM_PROJECT_DIR to avoid
masking the normal OpenFOAM cleanup of previous versions.
diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py
index bc07e1e2341..aeaa9e2597d 100644
--- a/var/spack/repos/builtin/packages/openjdk/package.py
+++ b/var/spack/repos/builtin/packages/openjdk/package.py
@@ -516,12 +516,14 @@ def link_system_certs(self):
os.remove(pkg_conf)
os.symlink(sys_certs, pkg_conf)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set JAVA_HOME."""
env.set("JAVA_HOME", self.home)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set JAVA_HOME and CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
@@ -537,7 +539,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
classpath = os.pathsep.join(class_paths)
env.set("CLASSPATH", classpath)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set CLASSPATH.
CLASSPATH contains the installation prefix for the extension and any
diff --git a/var/spack/repos/builtin/packages/openloops/package.py b/var/spack/repos/builtin/packages/openloops/package.py
index da83a4e056c..bed9de65605 100644
--- a/var/spack/repos/builtin/packages/openloops/package.py
+++ b/var/spack/repos/builtin/packages/openloops/package.py
@@ -277,8 +277,6 @@ def configure(self, spec, prefix):
f.write("process_lib_dir = {0}\n".format(self.spec.prefix.proclib))
f.write("cc = {0}\n".format(env["SPACK_CC"]))
f.write("cxx = {0}\n".format(env["SPACK_CXX"]))
- if not self.compiler.fc:
- raise InstallError(f"{self.spec.compiler} has no Fortran compiler in spack!")
f.write("fortran_compiler = {0}\n".format(env["SPACK_FC"]))
if self.spec.satisfies("@1.3.1") and not is_intel:
f.write("gfortran_f_flags = -ffree-line-length-none\n")
@@ -300,12 +298,12 @@ def configure(self, spec, prefix):
elif self.spec.satisfies("@2.1.2:2 processes=lcg.coll"):
copy(join_path(os.path.dirname(__file__), "sft3.coll"), "lcg.coll")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Make sure that calling openloops picks up the scons that is shipped
# instead of falling back to a potentially unsuitable system version
env.set("OLPYTHON", self.spec["python"].prefix.bin.python)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Make sure that calling openloops picks up the scons that is shipped
# instead of falling back to a potentially unsuitable system version
env.set("OLPYTHON", self.spec["python"].prefix.bin.python)
diff --git a/var/spack/repos/builtin/packages/openmm/package.py b/var/spack/repos/builtin/packages/openmm/package.py
index 8d7fca088b2..bf3a8433f08 100644
--- a/var/spack/repos/builtin/packages/openmm/package.py
+++ b/var/spack/repos/builtin/packages/openmm/package.py
@@ -61,25 +61,29 @@ def patch(self):
"wrappers/python/CMakeLists.txt",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+cuda" in spec:
env.set("OPENMM_CUDA_COMPILER", self.spec["cuda"].prefix.bin.nvcc)
env.set("CUDA_HOST_COMPILER", self.compiler.cxx)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+cuda" in spec:
env.set("OPENMM_CUDA_COMPILER", self.spec["cuda"].prefix.bin.nvcc)
env.set("CUDA_HOST_COMPILER", self.compiler.cxx)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
if "+cuda" in spec:
env.set("OPENMM_CUDA_COMPILER", self.spec["cuda"].prefix.bin.nvcc)
env.set("CUDA_HOST_COMPILER", self.compiler.cxx)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
if "+cuda" in spec:
env.set("OPENMM_CUDA_COMPILER", self.spec["cuda"].prefix.bin.nvcc)
diff --git a/var/spack/repos/builtin/packages/openmolcas/package.py b/var/spack/repos/builtin/packages/openmolcas/package.py
index 132aabc3099..3a8ffc486ff 100644
--- a/var/spack/repos/builtin/packages/openmolcas/package.py
+++ b/var/spack/repos/builtin/packages/openmolcas/package.py
@@ -37,10 +37,10 @@ class Openmolcas(CMakePackage):
patch("CMakeLists.txt.patch", when="target=aarch64:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MOLCAS", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("MOLCAS", self.prefix)
if self.spec.version >= Version("21.02"):
env.append_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py
index aa01dde228f..bb3a9571d25 100644
--- a/var/spack/repos/builtin/packages/openmpi/package.py
+++ b/var/spack/repos/builtin/packages/openmpi/package.py
@@ -457,6 +457,12 @@ 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")
+ # OpenMPI 5.0.7 specific patch - see https://github.com/open-mpi/ompi/pull/13106
+ patch(
+ "https://github.com/open-mpi/ompi/commit/d10e9765bdd28e62621395aef6bbb7710bae2e82.patch?full_index=1",
+ sha256="38529b557df029d6a987fa7e337db40b0ac1c1bb921776b95aacaa40e945cd21",
+ when="@5.0.7",
+ )
FABRICS = (
"psm",
"psm2",
@@ -474,9 +480,9 @@ class Openmpi(AutotoolsPackage, CudaPackage):
variant(
"fabrics",
- values=disjoint_sets(
- ("auto",), FABRICS # shared memory transports
- ).with_non_feature_values("auto", "none"),
+ values=disjoint_sets(("auto",), FABRICS).with_non_feature_values(
+ "auto", "none"
+ ), # shared memory transports
description="List of fabrics that are enabled; " "'auto' lets openmpi determine",
)
@@ -887,7 +893,7 @@ def libs(self):
return find_libraries(libraries, root=self.prefix, shared=True, recursive=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Because MPI is both a runtime and a compiler, we have to setup the
# compiler components as part of the run environment.
env.set("MPICC", join_path(self.prefix.bin, "mpicc"))
@@ -901,7 +907,9 @@ def setup_run_environment(self, env):
if self.spec.satisfies("@1.7:"):
env.set("MPIFC", join_path(self.prefix.bin, "mpifort"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Use the spack compiler wrappers under MPI
dependent_module = dependent_spec.package.module
for var_name, attr_name in (
@@ -1013,14 +1021,6 @@ def with_or_without_tm(self, activated):
return "--without-tm"
return f"--with-tm={self.spec['pbs'].prefix}"
- @run_before("autoreconf")
- def die_without_fortran(self):
- # Until we can pass variants such as +fortran through virtual
- # dependencies depends_on('mpi'), require Fortran compiler to
- # avoid delayed build errors in dependents.
- if (self.compiler.f77 is None) and (self.compiler.fc is None):
- raise InstallError("OpenMPI requires both C and Fortran compilers!")
-
@when("@main")
def autoreconf(self, spec, prefix):
perl = which("perl")
diff --git a/var/spack/repos/builtin/packages/openpmd-api/package.py b/var/spack/repos/builtin/packages/openpmd-api/package.py
index c8f8f6902d7..4fd80ad446b 100644
--- a/var/spack/repos/builtin/packages/openpmd-api/package.py
+++ b/var/spack/repos/builtin/packages/openpmd-api/package.py
@@ -151,7 +151,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# pre-load dependent CMake-PUBLIC header-only libs
if spec.satisfies("@:0.14"): # pre C++17 releases
@@ -169,7 +169,9 @@ def setup_run_environment(self, env):
if spec.satisfies("+hdf5"):
env.prepend_path("CMAKE_PREFIX_PATH", spec["hdf5"].prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
# pre-load dependent CMake-PUBLIC header-only libs
if spec.satisfies("@:0.14"): # pre C++17 releases
diff --git a/var/spack/repos/builtin/packages/openradioss-engine/package.py b/var/spack/repos/builtin/packages/openradioss-engine/package.py
index 9fa49d741d2..c245c5087f9 100644
--- a/var/spack/repos/builtin/packages/openradioss-engine/package.py
+++ b/var/spack/repos/builtin/packages/openradioss-engine/package.py
@@ -119,7 +119,7 @@ def install(self, spec, prefix):
join_path(prefix, "extlib", "hm_reader"),
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("OPENRADIOSS_PATH", self.prefix)
env.set("RAD_CFG_PATH", join_path(self.prefix, "hm_cfg_files"))
env.set("RAD_H3D_PATH", join_path(self.prefix, "extlib", "h3d", "lib", "linux64"))
diff --git a/var/spack/repos/builtin/packages/openradioss-starter/package.py b/var/spack/repos/builtin/packages/openradioss-starter/package.py
index 61f02dabd69..adb3b99d2fe 100644
--- a/var/spack/repos/builtin/packages/openradioss-starter/package.py
+++ b/var/spack/repos/builtin/packages/openradioss-starter/package.py
@@ -105,7 +105,7 @@ def install(self, spec, prefix):
join_path(prefix, "extlib", "hm_reader"),
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("OPENRADIOSS_PATH", self.prefix)
env.set("RAD_CFG_PATH", join_path(self.prefix, "hm_cfg_files"))
env.set("RAD_H3D_PATH", join_path(self.prefix, "extlib", "h3d", "lib", "linux64"))
diff --git a/var/spack/repos/builtin/packages/openrasmol/package.py b/var/spack/repos/builtin/packages/openrasmol/package.py
index ad9f22a374f..8063451097b 100644
--- a/var/spack/repos/builtin/packages/openrasmol/package.py
+++ b/var/spack/repos/builtin/packages/openrasmol/package.py
@@ -42,7 +42,7 @@ def edit(self, spec, prefix):
f.write("#define CcCmd {0}\n".format(spack_cc))
f.write("#endif\n")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("XFORMSLIB_DIR", self.spec["xforms"].prefix)
env.set("CBFLIB_DIR", self.spec["cbflib"].prefix)
env.set("CQRLIB_DIR", self.spec["cqrlib"].prefix)
diff --git a/var/spack/repos/builtin/packages/openspeedshop-utils/package.py b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py
index 352e92d683d..24da06ba016 100644
--- a/var/spack/repos/builtin/packages/openspeedshop-utils/package.py
+++ b/var/spack/repos/builtin/packages/openspeedshop-utils/package.py
@@ -275,7 +275,7 @@ def set_mpi_cmake_options(self, spec, cmake_options):
cmake_options.extend(mpi_options)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
# Find Dyninst library path, this is needed to
diff --git a/var/spack/repos/builtin/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py
index 5789d89a362..7bf8f20d7bf 100644
--- a/var/spack/repos/builtin/packages/openspeedshop/package.py
+++ b/var/spack/repos/builtin/packages/openspeedshop/package.py
@@ -293,7 +293,7 @@ def set_mpi_cmake_options(self, spec, cmake_options):
cmake_options.extend(mpi_options)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
# Find Dyninst library path, this is needed to
diff --git a/var/spack/repos/builtin/packages/openssh/package.py b/var/spack/repos/builtin/packages/openssh/package.py
index 74e9efc1e79..d2794efa787 100755
--- a/var/spack/repos/builtin/packages/openssh/package.py
+++ b/var/spack/repos/builtin/packages/openssh/package.py
@@ -145,7 +145,7 @@ def install(self, spec, prefix):
"""Install generates etc/sshd_config, but it fails in parallel mode"""
make("install", parallel=False)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Until spack supports a real implementation of setup_test_environment()"""
if self.run_tests:
self.setup_test_environment(env)
@@ -158,7 +158,7 @@ def setup_build_environment(self, env):
if self.spec.satisfies("@:7 %gcc@10:") or self.spec.satisfies("@:7 %clang@11:"):
env.append_flags("CFLAGS", "-fcommon")
- def setup_test_environment(self, env):
+ def setup_test_environment(self, env: EnvironmentModifications):
"""Configure the regression test suite like Debian's openssh-tests package"""
p = self.prefix
j = join_path
diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py
index 0a3f21236b2..2904338f198 100644
--- a/var/spack/repos/builtin/packages/openssl/package.py
+++ b/var/spack/repos/builtin/packages/openssl/package.py
@@ -82,6 +82,7 @@ class Openssl(Package): # Uses Fake Autotools, should subclass Package
variant("dynamic", default=False, description="Link with MSVC's dynamic runtime library")
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
depends_on("zlib-api")
depends_on("perl@5.14.0:", type=("build", "test"))
@@ -188,18 +189,20 @@ def install(self, spec, prefix):
if spec.satisfies("platform=windows"):
host_make = nmake
+ make_args = {}
else:
host_make = make
+ make_args = {"parallel": False}
host_make()
if self.run_tests:
- host_make("test", parallel=False) # 'VERBOSE=1'
+ host_make("test", **make_args) # 'VERBOSE=1'
install_tgt = "install" if self.spec.satisfies("+docs") else "install_sw"
# See https://github.com/openssl/openssl/issues/7466#issuecomment-432148137
- host_make(install_tgt, parallel=False)
+ host_make(install_tgt, **make_args)
@run_after("install")
def link_system_certs(self):
@@ -261,5 +264,5 @@ def patch(self):
filter_file("-MF ", "", "Configurations/unix-Makefile.tmpl", string=True)
filter_file(r"-MT \$\@ ", "", "Configurations/unix-Makefile.tmpl", string=True)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PERL", self.spec["perl"].prefix.bin.perl)
diff --git a/var/spack/repos/builtin/packages/openstf/package.py b/var/spack/repos/builtin/packages/openstf/package.py
index edfa498261f..22b07914261 100644
--- a/var/spack/repos/builtin/packages/openstf/package.py
+++ b/var/spack/repos/builtin/packages/openstf/package.py
@@ -22,6 +22,8 @@ class Openstf(MakefilePackage):
variant("mpi", default=False, description="Build with MPI Support")
+ depends_on("c", type="build")
+
depends_on("mpi", when="+mpi")
def edit(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/oras/package.py b/var/spack/repos/builtin/packages/oras/package.py
index f52f889b24b..58181fa3a84 100644
--- a/var/spack/repos/builtin/packages/oras/package.py
+++ b/var/spack/repos/builtin/packages/oras/package.py
@@ -23,7 +23,7 @@ class Oras(Package):
depends_on("go", type="build")
depends_on("gmake", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Point GOPATH at the top of the staging dir for the build step.
env.prepend_path("GOPATH", self.stage.path)
diff --git a/var/spack/repos/builtin/packages/orc/package.py b/var/spack/repos/builtin/packages/orc/package.py
index 68a501dcfe6..1aeb36bea89 100644
--- a/var/spack/repos/builtin/packages/orc/package.py
+++ b/var/spack/repos/builtin/packages/orc/package.py
@@ -15,6 +15,7 @@ class Orc(CMakePackage):
version("1.6.5", sha256="df5885db8fa2e4435db8d486c6c7fc4e2c565d6197eee27729cf9cbdf36353c0")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("maven")
diff --git a/var/spack/repos/builtin/packages/orca-faccts/package.py b/var/spack/repos/builtin/packages/orca-faccts/package.py
index a8110dee5fb..e9976de9355 100644
--- a/var/spack/repos/builtin/packages/orca-faccts/package.py
+++ b/var/spack/repos/builtin/packages/orca-faccts/package.py
@@ -52,7 +52,7 @@ def install(self, spec, prefix):
install_tree("bin", prefix.bin)
install_tree("lib", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["libevent"].prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.spec["libpciaccess"].prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.spec["openmpi"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/orca/package.py b/var/spack/repos/builtin/packages/orca/package.py
index 3db74ba1714..5c971381b75 100644
--- a/var/spack/repos/builtin/packages/orca/package.py
+++ b/var/spack/repos/builtin/packages/orca/package.py
@@ -83,7 +83,7 @@ def install(self, spec, prefix):
mpirun_srun = join_path(os.path.dirname(__file__), "mpirun_srun.sh")
install(mpirun_srun, prefix.bin.mpirun)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.bin)
env.prepend_path("LD_LIBRARY_PATH", self.spec["libevent"].prefix.lib)
env.prepend_path("LD_LIBRARY_PATH", self.spec["libpciaccess"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/orthofinder/package.py b/var/spack/repos/builtin/packages/orthofinder/package.py
index 02d6d841081..6fbbaad6954 100644
--- a/var/spack/repos/builtin/packages/orthofinder/package.py
+++ b/var/spack/repos/builtin/packages/orthofinder/package.py
@@ -73,6 +73,6 @@ def install(self, spec, prefix):
shutil.rmtree(prefix.bin.scripts_of.bin)
os.rename("%s/orthofinder.py" % prefix.bin, "%s/orthofinder" % prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix.bin)
env.prepend_path("PATH", prefix.bin.tools)
diff --git a/var/spack/repos/builtin/packages/orthomcl/package.py b/var/spack/repos/builtin/packages/orthomcl/package.py
index 15d12672820..80c538a8ad4 100644
--- a/var/spack/repos/builtin/packages/orthomcl/package.py
+++ b/var/spack/repos/builtin/packages/orthomcl/package.py
@@ -25,5 +25,5 @@ def install(self, spec, prefix):
install_tree("doc", prefix.doc)
install_tree("lib", prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/osg-ca-certs/package.py b/var/spack/repos/builtin/packages/osg-ca-certs/package.py
index d7236e15613..eb0b199aa42 100644
--- a/var/spack/repos/builtin/packages/osg-ca-certs/package.py
+++ b/var/spack/repos/builtin/packages/osg-ca-certs/package.py
@@ -47,14 +47,14 @@ class OsgCaCerts(Package):
depends_on("openssl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("OSG_CERTS_VERSION", self.version[:2])
env.set("OUR_CERTS_VERSION", str(self.version[:2]) + "NEW")
env.set("IGTF_CERTS_VERSION", self.version[3:])
env.set("CADIST", join_path(self.stage.source_path, "certificates"))
env.set("PKG_NAME", self.spec.name)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("X509_CERT_DIR", join_path(self.prefix, "certificates"))
def install(self, spec, prefix):
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 80b09205d52..2be26da38f9 100644
--- a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
+++ b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
@@ -85,7 +85,7 @@ def configure_args(self):
config_args.append("LDFLAGS=-lrt")
return config_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
mpidir = join_path(self.prefix.libexec, "osu-micro-benchmarks", "mpi")
env.prepend_path("PATH", join_path(mpidir, "startup"))
env.prepend_path("PATH", join_path(mpidir, "pt2pt"))
diff --git a/var/spack/repos/builtin/packages/p4est/package.py b/var/spack/repos/builtin/packages/p4est/package.py
index 6af937d015a..163efe3d3c8 100644
--- a/var/spack/repos/builtin/packages/p4est/package.py
+++ b/var/spack/repos/builtin/packages/p4est/package.py
@@ -20,6 +20,7 @@ class P4est(AutotoolsPackage):
license("GPL-2.0-only")
+ version("2.8.7", sha256="0a1e912f3529999ca6d62fee335d51f24b5650b586e95a03ef39ebf73936d7f4")
version("2.8", sha256="6a0586e3abac06c20e31b1018f3a82a564a6a0d9ff6b7f6c772a9e6b0f0cc5e4")
version("2.3.2", sha256="076df9e5578e0e7fcfbe12e1a0b080104001f8c986ab1d5a69ec2220050df8e6")
version("2.3.1", sha256="be66893b039fb3f27aca3d5d00acff42c67bfad5aa09cea9253cdd628b2bdc9a")
diff --git a/var/spack/repos/builtin/packages/pacparser/package.py b/var/spack/repos/builtin/packages/pacparser/package.py
index 0666d4cc59f..a685bb67129 100644
--- a/var/spack/repos/builtin/packages/pacparser/package.py
+++ b/var/spack/repos/builtin/packages/pacparser/package.py
@@ -25,6 +25,7 @@ class Pacparser(MakefilePackage):
)
depends_on("c", type="build") # generated
+ depends_on("cxx", type="build")
depends_on("python", when="+python")
depends_on("py-setuptools", when="+python", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/pagit/package.py b/var/spack/repos/builtin/packages/pagit/package.py
index e2d75f95bd5..b51dcd543e2 100644
--- a/var/spack/repos/builtin/packages/pagit/package.py
+++ b/var/spack/repos/builtin/packages/pagit/package.py
@@ -28,7 +28,7 @@ def install(self, spec, prefix):
install_tree("lib", prefix.lib)
install_tree("RATT", prefix.RATT)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PAGIT_HOME", self.prefix)
env.set("PILEUP_HOME", join_path(self.prefix.bin, "pileup_v0.5"))
env.set("ICORN_HOME", self.prefix.icorn)
diff --git a/var/spack/repos/builtin/packages/pandorapfa/package.py b/var/spack/repos/builtin/packages/pandorapfa/package.py
index 56001713d4f..69f0022f3c0 100644
--- a/var/spack/repos/builtin/packages/pandorapfa/package.py
+++ b/var/spack/repos/builtin/packages/pandorapfa/package.py
@@ -55,8 +55,10 @@ def url_for_version(self, version):
url = base_url + "/v%s-%s-%s.tar.gz" % (major, minor, patch)
return url
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("PANDORAPFA", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PANDORAPFA", self.prefix)
diff --git a/var/spack/repos/builtin/packages/pango/package.py b/var/spack/repos/builtin/packages/pango/package.py
index d5607d09e1e..3e3457cff4a 100644
--- a/var/spack/repos/builtin/packages/pango/package.py
+++ b/var/spack/repos/builtin/packages/pango/package.py
@@ -131,14 +131,18 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
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_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
diff --git a/var/spack/repos/builtin/packages/papi/package.py b/var/spack/repos/builtin/packages/papi/package.py
index 10f4c206788..708a75e2270 100644
--- a/var/spack/repos/builtin/packages/papi/package.py
+++ b/var/spack/repos/builtin/packages/papi/package.py
@@ -106,7 +106,7 @@ class Papi(AutotoolsPackage, ROCmPackage):
configure_directory = "src"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+lmsensors" in spec and self.version >= Version("6"):
env.set("PAPI_LMSENSORS_ROOT", spec["lm-sensors"].prefix)
@@ -177,12 +177,6 @@ def configure_args(self):
return options
- @run_before("configure")
- def fortran_check(self):
- if not self.compiler.fc:
- msg = "PAPI requires a Fortran compiler to build"
- raise RuntimeError(msg)
-
@run_before("configure")
def component_configure(self):
configure_script = Executable("./configure")
diff --git a/var/spack/repos/builtin/packages/papyrus/package.py b/var/spack/repos/builtin/packages/papyrus/package.py
index ee443617ca6..bf7bc103012 100644
--- a/var/spack/repos/builtin/packages/papyrus/package.py
+++ b/var/spack/repos/builtin/packages/papyrus/package.py
@@ -30,7 +30,7 @@ class Papyrus(CMakePackage):
test_requires_compiler = True
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
else:
diff --git a/var/spack/repos/builtin/packages/paraconf/package.py b/var/spack/repos/builtin/packages/paraconf/package.py
index 5ba73e9a319..3cab4c098e4 100644
--- a/var/spack/repos/builtin/packages/paraconf/package.py
+++ b/var/spack/repos/builtin/packages/paraconf/package.py
@@ -31,6 +31,10 @@ class Paraconf(CMakePackage):
variant("fortran", default=True, description="Enable Fortran support")
variant("tests", default=False, description="Build tests")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build", when="+fortran")
+
depends_on("cmake@3.5:", type=("build"))
depends_on("pkgconfig", type=("build"))
depends_on("libyaml@0.1.7:", type=("link", "run"))
diff --git a/var/spack/repos/builtin/packages/paradiseo/package.py b/var/spack/repos/builtin/packages/paradiseo/package.py
index a80e784452d..4563e5d0758 100644
--- a/var/spack/repos/builtin/packages/paradiseo/package.py
+++ b/var/spack/repos/builtin/packages/paradiseo/package.py
@@ -36,6 +36,8 @@ class Paradiseo(CMakePackage):
# Required dependencies
depends_on("cmake@2.8:", type="build")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
# Optional dependencies
depends_on("mpi", when="+mpi")
diff --git a/var/spack/repos/builtin/packages/parallelio/package.py b/var/spack/repos/builtin/packages/parallelio/package.py
index e8a255c81a9..b660e5fa0d4 100644
--- a/var/spack/repos/builtin/packages/parallelio/package.py
+++ b/var/spack/repos/builtin/packages/parallelio/package.py
@@ -124,7 +124,7 @@ def url_for_version(self, version):
version.underscored
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PIO_VERSION_MAJOR", "2")
valid_values = "netcdf"
if self.spec.satisfies("+mpi"):
diff --git a/var/spack/repos/builtin/packages/parallelmergetree/package.py b/var/spack/repos/builtin/packages/parallelmergetree/package.py
index a62d41c1636..501633ffb10 100644
--- a/var/spack/repos/builtin/packages/parallelmergetree/package.py
+++ b/var/spack/repos/builtin/packages/parallelmergetree/package.py
@@ -68,7 +68,7 @@ class Parallelmergetree(CMakePackage):
# The C++ headers of gcc-11 don't provide as side effect of others
@when("%gcc@11:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", "-include algorithm")
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py
index fa2b6d2b057..9d48ade9ae7 100644
--- a/var/spack/repos/builtin/packages/paraview/package.py
+++ b/var/spack/repos/builtin/packages/paraview/package.py
@@ -414,7 +414,9 @@ def paraview_subdir(self):
else:
return "paraview-{0}".format(self.spec.version.up_to(2))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
else:
@@ -451,7 +453,7 @@ def flag_handler(self, name, flags):
return flags, None, None
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# paraview 5.5 and later
# - cmake under lib/cmake/paraview-5.5
# - libs under lib
diff --git a/var/spack/repos/builtin/packages/parflow/package.py b/var/spack/repos/builtin/packages/parflow/package.py
index 4fec869b735..0af29194d02 100644
--- a/var/spack/repos/builtin/packages/parflow/package.py
+++ b/var/spack/repos/builtin/packages/parflow/package.py
@@ -59,7 +59,7 @@ def cmake_args(self):
return cmake_args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Setup the run environment for ParFlow package."""
# ParFlow requires a PARFLOW_DIR env variable for correct execution
env.set("PARFLOW_DIR", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/parquet-cpp/package.py b/var/spack/repos/builtin/packages/parquet-cpp/package.py
index afebbd97c65..2f0cd29c01c 100644
--- a/var/spack/repos/builtin/packages/parquet-cpp/package.py
+++ b/var/spack/repos/builtin/packages/parquet-cpp/package.py
@@ -14,10 +14,15 @@ class ParquetCpp(CMakePackage):
license("Apache-2.0")
- version("1.4.0", sha256="52899be6c9dc49a14976d4ad84597243696c3fa2882e5c802b56e912bfbcc7ce")
+ version(
+ "1.4.0",
+ sha256="52899be6c9dc49a14976d4ad84597243696c3fa2882e5c802b56e912bfbcc7ce",
+ deprecated=True,
+ )
depends_on("arrow")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
# TODO: replace this with an explicit list of components of Boost,
@@ -26,7 +31,7 @@ class ParquetCpp(CMakePackage):
depends_on(Boost.with_default_variants)
depends_on("cmake@3.2.0:", type="build")
depends_on("pkgconfig", type="build")
- depends_on("thrift+pic")
+ depends_on("thrift")
variant("pic", default=True, description="Build position independent code")
variant(
diff --git a/var/spack/repos/builtin/packages/parquet-format/package.py b/var/spack/repos/builtin/packages/parquet-format/package.py
index 38ede4e76dc..be8776b6ed3 100644
--- a/var/spack/repos/builtin/packages/parquet-format/package.py
+++ b/var/spack/repos/builtin/packages/parquet-format/package.py
@@ -13,8 +13,11 @@ class ParquetFormat(MavenPackage):
license("Apache-2.0")
+ version("2.11.0", sha256="ed7f5a91db0567a221bc5b61624589b8b7f816588ee4b15a34d7a99b9bec7e7c")
version("2.8.0", sha256="345c044cea73997162e0c38ae830509ee424faf49c90974e4f244079a3df01b0")
version("2.7.0", sha256="e821ffc67f61b49afce017ce2d1d402b4df352ca49dbeae167b06c4d3264b6ba")
- depends_on("thrift@0.12.0", when="@2.7.0:")
+ # pom.xml
+ depends_on("thrift@0.21.0", when="@2.11")
+ depends_on("thrift@0.12.0", when="@2.7:2.8")
depends_on("java@8", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/pass/package.py b/var/spack/repos/builtin/packages/pass/package.py
index 01957f08ccb..0bc3e6683f5 100644
--- a/var/spack/repos/builtin/packages/pass/package.py
+++ b/var/spack/repos/builtin/packages/pass/package.py
@@ -42,7 +42,7 @@ class Pass(MakefilePackage):
# Optional dependencies
depends_on("xclip", when="+xclip")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set required environment variables for build."""
env.set("PREFIX", self.prefix)
env.set("WITH_ALLCOMP", "yes")
diff --git a/var/spack/repos/builtin/packages/pasta/package.py b/var/spack/repos/builtin/packages/pasta/package.py
index 7eec70d45c6..257d3ee8b72 100644
--- a/var/spack/repos/builtin/packages/pasta/package.py
+++ b/var/spack/repos/builtin/packages/pasta/package.py
@@ -30,12 +30,12 @@ class Pasta(PythonPackage):
destination=".",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
tools = join_path(self.prefix, "sate-tools-linux")
env.set("PASTA_TOOLS_DEVDIR", tools)
env.set("PASTA_TOOLS_RUNDIR", self.prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PASTA_TOOLS_RUNDIR", self.prefix.bin)
@run_before("install")
diff --git a/var/spack/repos/builtin/packages/pbbam/package.py b/var/spack/repos/builtin/packages/pbbam/package.py
index b8f1fad0693..df6adbdc432 100644
--- a/var/spack/repos/builtin/packages/pbbam/package.py
+++ b/var/spack/repos/builtin/packages/pbbam/package.py
@@ -40,9 +40,11 @@ def meson_args(self):
return options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BOOST_ROOT", self.spec["boost"].prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("PacBioBAM_LIBRARIES", self.prefix.lib)
env.set("PacBioBAM_INCLUDE_DIRS", self.prefix.include)
diff --git a/var/spack/repos/builtin/packages/pciutils/package.py b/var/spack/repos/builtin/packages/pciutils/package.py
index e099bb98f08..e4ee95a0754 100644
--- a/var/spack/repos/builtin/packages/pciutils/package.py
+++ b/var/spack/repos/builtin/packages/pciutils/package.py
@@ -30,5 +30,5 @@ def install(self, spec, prefix):
else:
make("install", "PREFIX={0}".format(prefix))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/pdftk/package.py b/var/spack/repos/builtin/packages/pdftk/package.py
index c82fa33a33e..ade389d5e04 100644
--- a/var/spack/repos/builtin/packages/pdftk/package.py
+++ b/var/spack/repos/builtin/packages/pdftk/package.py
@@ -22,6 +22,8 @@ class Pdftk(MakefilePackage):
version("2.02", sha256="118f6a25fd3acaafb58824dce6f97cdc07e56050e666b90e4c4ef426ea37b8c1")
+ depends_on("cxx", type="build")
+
depends_on("eclipse-gcj-parser", type="build")
# Only takes effect in phases not overridden here
diff --git a/var/spack/repos/builtin/packages/pdi/package.py b/var/spack/repos/builtin/packages/pdi/package.py
index b699f3fcdd2..06bf5a06b42 100644
--- a/var/spack/repos/builtin/packages/pdi/package.py
+++ b/var/spack/repos/builtin/packages/pdi/package.py
@@ -17,14 +17,25 @@ class Pdi(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ version("1.8.3", sha256="df7200289a2a368ec874140039b417abdfe681b57fb1b9f4c52f924952226020")
+ version("1.8.2", sha256="bb4d1654c97f7ff379067adbff339f8b4117c0cf9432f41f1a5cb20a747cac1a")
+ version(
+ "1.8.1",
+ sha256="43f0c0b2bda5515ecf99da7be1600af2c1f669d6c73e3f309275b14940c7e35c",
+ deprecated=True,
+ )
+ version(
+ "1.8.0",
+ sha256="5d353bfa64f45ee4715b88bd30330030f79f2020cd6bede0ad9b8f9beddadea9",
+ deprecated=True,
+ )
variant("benchs", default=False, description="Build benchmarks")
variant("docs", default=False, description="Build documentation")
@@ -32,15 +43,23 @@ class Pdi(CMakePackage):
variant("fortran", default=True, description="Enable Fortran support")
variant("python", default=True, description="Enable Python support")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("doxygen@1.8.17:", type=("build"), when="@1.8: +docs")
- depends_on("paraconf@1:", type=("link", "run"), when="@1.6:")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build", when="+fortran")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ depends_on("doxygen@1.8.17:", type=("build"), when="+docs")
+ depends_on("paraconf@1: +shared", type=("link", "run"))
depends_on("paraconf +fortran", type=("link", "run"), when="+fortran")
- depends_on("paraconf@0.4.14: +shared", type=("link", "run"))
depends_on("pkgconfig", type=("build"))
- depends_on("python@3.8.2:3.11.9", type=("build", "link", "run"), when="@1.8: +python")
- depends_on("py-pybind11@2.3:2", type=("link"), when="+python")
- depends_on("py-pybind11@2.4.3:", type=("link"), when="@1.8: +python")
+ depends_on("python@3.8.2:3", type=("build", "link", "run"), when="+python")
+ depends_on(
+ "python@3:3.11.9", type=("build", "link", "run"), when="@:1.8.2 +python"
+ ) # Needs distutils.
+ depends_on("py-pybind11@2.4.3:2", type=("link"), when="+python")
+ depends_on(
+ "py-setuptools", type=("build", "link"), when="@1.8.3: +python^python@3.12:"
+ ) # Needs distutils.
depends_on("spdlog@1.5:", type=("link"), when="@1.5:")
root_cmakelists_dir = "pdi"
@@ -58,12 +77,18 @@ def patch(self):
"vendor/zpp-1.0.16/bin/zpp.in",
)
+ @staticmethod
+ def version_url(version):
+ return f"https://github.com/pdidev/pdi/archive/refs/tags/{version}.tar.gz"
+
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
+
def cmake_args(self):
- args = [
+ return [
self.define_from_variant("BUILD_BENCHMARKING", "benchs"),
self.define_from_variant("BUILD_DOCUMENTATION", "docs"),
self.define_from_variant("BUILD_FORTRAN", "fortran"),
self.define_from_variant("BUILD_PYTHON", "python"),
self.define_from_variant("BUILD_TESTING", "tests"),
]
- return args
diff --git a/var/spack/repos/builtin/packages/pdiplugin-decl-hdf5/package.py b/var/spack/repos/builtin/packages/pdiplugin-decl-hdf5/package.py
index 0229bd25912..9764c98c662 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-decl-hdf5/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-decl-hdf5/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginDeclHdf5(CMakePackage):
@@ -14,40 +15,43 @@ class PdipluginDeclHdf5(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("benchs", default=False, description="Build benchmarks")
variant("fortran", default=True, description="Enable Fortran (for tests only)")
variant("tests", default=False, description="Build tests")
variant("mpi", default=True, description="Enable parallel HDF5")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("hdf5@1.10.4:1 +shared", type=("build", "link", "run"), when="@1.8:")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build", when="+fortran")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ depends_on("hdf5@1.10.4:1 +shared", type=("build", "link", "run"))
depends_on("hdf5 +mpi", type=("build", "link", "run"), when="+mpi")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/decl_hdf5"
- def cmake_args(self):
- args = [
- "-DBUILD_BENCHMARKING:BOOL={:s}".format("ON" if "+benchs" in self.spec else "OFF"),
- "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_FORTRAN:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_HDF5_PARALLEL:BOOL={:s}".format("ON" if "+mpi" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
- ]
- return args
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
- def setup_run_environment(self, env):
+ def cmake_args(self):
+ return [
+ "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
+ self.define_from_variant("BUILD_BENCHMARKING", "benchs"),
+ self.define_from_variant("BUILD_HDF5_PARALLEL", "mpi"),
+ self.define_from_variant("BUILD_TESTING", "tests"),
+ ]
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-decl-netcdf/package.py b/var/spack/repos/builtin/packages/pdiplugin-decl-netcdf/package.py
index bc7b7435a04..9c74ff56b1c 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-decl-netcdf/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-decl-netcdf/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginDeclNetcdf(CMakePackage):
@@ -12,36 +13,40 @@ class PdipluginDeclNetcdf(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
variant("mpi", default=True, description="Enable parallel NetCDF")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("netcdf-c@4.7.3:4", type=("link"), when="@1.8:")
- depends_on("netcdf-c@4.6.2:4+mpi", type=("link"), when="+mpi")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ depends_on("netcdf-c@4.7.3:4", type=("link"))
+ depends_on("netcdf-c+mpi", type=("link"), when="+mpi")
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/decl_netcdf"
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
+
def cmake_args(self):
return [
"-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_HDF5_PARALLEL:BOOL={:s}".format("ON" if "+mpi" in self.spec else "OFF"),
- "-DBUILD_NETCDF_PARALLEL:BOOL={:s}".format("ON" if "+mpi" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
+ self.define_from_variant("BUILD_HDF5_PARALLEL", "mpi"),
+ self.define_from_variant("BUILD_NETCDF_PARALLEL", "mpi"),
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-mpi/package.py b/var/spack/repos/builtin/packages/pdiplugin-mpi/package.py
index eb0956b3803..0d60c8ccd9b 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-mpi/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-mpi/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginMpi(CMakePackage):
@@ -11,33 +12,36 @@ class PdipluginMpi(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
depends_on("mpi", type=("build", "link", "run"))
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/mpi"
- def cmake_args(self):
- args = [
- "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
- ]
- return args
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
- def setup_run_environment(self, env):
+ def cmake_args(self):
+ return [
+ "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
+ self.define_from_variant("BUILD_TESTING", "tests"),
+ ]
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-pycall/package.py b/var/spack/repos/builtin/packages/pdiplugin-pycall/package.py
index 3cd08606414..e24d7421831 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-pycall/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-pycall/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginPycall(CMakePackage):
@@ -11,31 +12,36 @@ class PdipluginPycall(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("pdi+python@develop", type=("link", "run"), when="@develop")
- depends_on("pdi+python@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi+python@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ for v in Pdi.versions:
+ depends_on("pdi+python@" + str(v), type=("link", "run"), when="@" + str(v))
+ depends_on("py-setuptools", type=("build"), when="@1.8.3: ^python@3.12:")
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/pycall"
- def cmake_args(self):
- args = [
- "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- ]
- return args
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
- def setup_run_environment(self, env):
+ def cmake_args(self):
+ return [
+ "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
+ self.define_from_variant("BUILD_TESTING", "tests"),
+ ]
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-serialize/package.py b/var/spack/repos/builtin/packages/pdiplugin-serialize/package.py
index b6bd43dc565..14d7e16979c 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-serialize/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-serialize/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginSerialize(CMakePackage):
@@ -12,32 +13,35 @@ class PdipluginSerialize(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/serialize"
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
+
def cmake_args(self):
return [
"-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_FORTRAN:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-set-value/package.py b/var/spack/repos/builtin/packages/pdiplugin-set-value/package.py
index 21c192c6dec..8bf89242ef7 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-set-value/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-set-value/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginSetValue(CMakePackage):
@@ -12,32 +13,36 @@ class PdipluginSetValue(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
- depends_on("spdlog@1.5:", type=("link"), when="@1.5:")
+ depends_on("spdlog@1.5:", type=("link"))
root_cmakelists_dir = "plugins/set_value"
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
+
def cmake_args(self):
return [
"-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-trace/package.py b/var/spack/repos/builtin/packages/pdiplugin-trace/package.py
index af620c39869..58cea58b297 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-trace/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-trace/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginTrace(CMakePackage):
@@ -12,31 +13,35 @@ class PdipluginTrace(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/trace"
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
+
def cmake_args(self):
return [
"-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
+ self.define_from_variant("BUILD_TESTING", "tests"),
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pdiplugin-user-code/package.py b/var/spack/repos/builtin/packages/pdiplugin-user-code/package.py
index 0a41eeb95cc..abaeeb136d0 100644
--- a/var/spack/repos/builtin/packages/pdiplugin-user-code/package.py
+++ b/var/spack/repos/builtin/packages/pdiplugin-user-code/package.py
@@ -4,6 +4,7 @@
from spack import *
from spack.package import *
+from spack.pkg.builtin.pdi import Pdi
class PdipluginUserCode(CMakePackage):
@@ -13,32 +14,35 @@ class PdipluginUserCode(CMakePackage):
homepage = "https://pdi.dev"
git = "https://github.com/pdidev/pdi.git"
+ url = "https://github.com/pdidev/pdi/archive/refs/tags/1.8.0.tar.gz"
license("BSD-3-Clause")
maintainers("jbigot")
- version("develop", branch="main", no_cache=True)
- version("1.8.1", commit="105161d5c93431d674c73ef365dce3eb724b4fcb")
- version("1.8.0", commit="edce72fc198475bab1541cc0b77a30ad02da91c5")
+ for v in Pdi.versions:
+ version(str(v), **Pdi.versions[v])
variant("tests", default=False, description="Build tests")
- depends_on("cmake@3.16.3:", type=("build"), when="@1.8:")
- depends_on("pdi@develop", type=("link", "run"), when="@develop")
- depends_on("pdi@1.8.1", type=("link", "run"), when="@1.8.1")
- depends_on("pdi@1.8.0", type=("link", "run"), when="@1.8.0")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.16.3:", type=("build"))
+ for v in Pdi.versions:
+ depends_on("pdi@" + str(v), type=("link", "run"), when="@" + str(v))
depends_on("pkgconfig", type=("build"))
root_cmakelists_dir = "plugins/user_code"
- def cmake_args(self):
- args = [
- "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
- "-DBUILD_TESTING:BOOL={:s}".format("ON" if "+tests" in self.spec else "OFF"),
- "-DBUILD_CFG_VALIDATOR:BOOL=OFF",
- ]
- return args
+ def url_for_version(self, version):
+ return Pdi.version_url(version)
- def setup_run_environment(self, env):
+ def cmake_args(self):
+ return [
+ "-DINSTALL_PDIPLUGINDIR:PATH={:s}".format(self.prefix.lib),
+ self.define_from_variant("BUILD_TESTING", "tests"),
+ ]
+
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PDI_PLUGIN_PATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pegtl/package.py b/var/spack/repos/builtin/packages/pegtl/package.py
index e7829b97764..77239fdac1e 100644
--- a/var/spack/repos/builtin/packages/pegtl/package.py
+++ b/var/spack/repos/builtin/packages/pegtl/package.py
@@ -49,4 +49,4 @@ def cmake_args(self):
@on_package_attributes(run_tests=True)
def check(self):
with working_dir(self.build_directory):
- make("test", parallel=False)
+ ctest()
diff --git a/var/spack/repos/builtin/packages/perl-alien-svn/package.py b/var/spack/repos/builtin/packages/perl-alien-svn/package.py
index eae99f9fe5d..1e6819b67a7 100644
--- a/var/spack/repos/builtin/packages/perl-alien-svn/package.py
+++ b/var/spack/repos/builtin/packages/perl-alien-svn/package.py
@@ -31,11 +31,11 @@ class PerlAlienSvn(PerlPackage):
depends_on("zlib-api")
depends_on("libbsd")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# non-interactive build, use defaults
env.set("PERL_MM_USE_DEFAULT", "1")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# SVN libs are not RPATHed correctly...
# TODO: extend to other plaforms
if sys.platform.startswith("linux"):
diff --git a/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py b/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py
index 671841689bb..0a6f102df30 100644
--- a/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py
+++ b/var/spack/repos/builtin/packages/perl-bio-bigfile/package.py
@@ -64,7 +64,7 @@ def build_pl_args(self):
f"--extra_linker_flags={' '.join(libs)}",
]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# These variables are exected by by the Build.PL file
# even though we override the results via PERL_MB_OPT
kent_pkg = self["kentutils"]
diff --git a/var/spack/repos/builtin/packages/perl-bio-ensembl-variation/package.py b/var/spack/repos/builtin/packages/perl-bio-ensembl-variation/package.py
index 37742f73570..824d2b39a11 100644
--- a/var/spack/repos/builtin/packages/perl-bio-ensembl-variation/package.py
+++ b/var/spack/repos/builtin/packages/perl-bio-ensembl-variation/package.py
@@ -50,7 +50,7 @@ class PerlBioEnsemblVariation(Package):
phases = ("build", "install")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+ld"):
env.set("HTSLIB_DIR", self.spec["htslib"].prefix.include)
diff --git a/var/spack/repos/builtin/packages/perl-compress-bzip2/package.py b/var/spack/repos/builtin/packages/perl-compress-bzip2/package.py
index 9c367a642fb..059706d4bc7 100644
--- a/var/spack/repos/builtin/packages/perl-compress-bzip2/package.py
+++ b/var/spack/repos/builtin/packages/perl-compress-bzip2/package.py
@@ -20,7 +20,7 @@ class PerlCompressBzip2(PerlPackage):
depends_on("c", type="build")
depends_on("bzip2", type=("build", "test", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BZLIB_INCLUDE", self.spec["bzip2"].prefix.include)
env.set("BZLIB_LIB", self.spec["bzip2"].prefix.lib)
env.set("BZLIB_BIN", self.spec["bzip2"].prefix.bin)
diff --git a/var/spack/repos/builtin/packages/perl-dbd-oracle/package.py b/var/spack/repos/builtin/packages/perl-dbd-oracle/package.py
index 3bfabaaabe8..eebe75a722a 100644
--- a/var/spack/repos/builtin/packages/perl-dbd-oracle/package.py
+++ b/var/spack/repos/builtin/packages/perl-dbd-oracle/package.py
@@ -22,5 +22,5 @@ class PerlDbdOracle(PerlPackage):
depends_on("perl-test-nowarnings", type=("build", "link"))
depends_on("oracle-instant-client", type=("build", "link", "run", "test"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("ORACLE_HOME", self.spec["oracle-instant-client"].prefix)
diff --git a/var/spack/repos/builtin/packages/perl-forks/package.py b/var/spack/repos/builtin/packages/perl-forks/package.py
index 85bea5738cd..8e47a9f6c7c 100644
--- a/var/spack/repos/builtin/packages/perl-forks/package.py
+++ b/var/spack/repos/builtin/packages/perl-forks/package.py
@@ -19,6 +19,6 @@ class PerlForks(PerlPackage):
depends_on("perl-list-moreutils", type=("build", "run"))
depends_on("perl-sys-sigaction", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "perl~threads" in self.spec:
env.set("FORKS_SIMULATE_USEITHREADS", "1")
diff --git a/var/spack/repos/builtin/packages/perl-fth/package.py b/var/spack/repos/builtin/packages/perl-fth/package.py
index fb6e1cf50ac..6d4ca255b66 100644
--- a/var/spack/repos/builtin/packages/perl-fth/package.py
+++ b/var/spack/repos/builtin/packages/perl-fth/package.py
@@ -87,12 +87,14 @@ def setup_dependent_package(self, module, dependent_spec):
for name in checks:
setattr(module, name, self._make_executable(name))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("JAVATEX_DIR", self.prefix)
env.set("FTAGSHTML_DIR", self.prefix)
env.set("FTAGSHTML_DOC", join_path(self.prefix, "doc"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# https://github.com/spack/spack/discussions/13926
# Let us set the adequate environment when loading perl-fth
env.set("JAVATEX_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/perl-json-xs/package.py b/var/spack/repos/builtin/packages/perl-json-xs/package.py
index 45093ce0ae4..b1c54bc02b1 100644
--- a/var/spack/repos/builtin/packages/perl-json-xs/package.py
+++ b/var/spack/repos/builtin/packages/perl-json-xs/package.py
@@ -19,5 +19,5 @@ class PerlJsonXs(PerlPackage):
depends_on("perl-common-sense", type=("build", "run", "test"))
depends_on("perl-types-serialiser", type=("build", "run", "test"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PERL_CANARY_STABILITY_NOPROMPT", "1")
diff --git a/var/spack/repos/builtin/packages/perl-sereal-decoder/package.py b/var/spack/repos/builtin/packages/perl-sereal-decoder/package.py
index 359f0dc89f9..cf9acb541fc 100644
--- a/var/spack/repos/builtin/packages/perl-sereal-decoder/package.py
+++ b/var/spack/repos/builtin/packages/perl-sereal-decoder/package.py
@@ -27,7 +27,7 @@ class PerlSerealDecoder(PerlPackage):
depends_on("perl-test-warn", type=("build", "link", "test"))
depends_on("zstd", type=("build", "link", "run", "test"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# These are not currently available in Spack
env.set("SEREAL_USE_BUNDLED_CSNAPPY", "1")
env.set("SEREAL_USE_BUNDLED_MINIZ", "1")
diff --git a/var/spack/repos/builtin/packages/perl-sereal-encoder/package.py b/var/spack/repos/builtin/packages/perl-sereal-encoder/package.py
index 47e4cc57fc9..13fbb548e73 100644
--- a/var/spack/repos/builtin/packages/perl-sereal-encoder/package.py
+++ b/var/spack/repos/builtin/packages/perl-sereal-encoder/package.py
@@ -28,7 +28,7 @@ class PerlSerealEncoder(PerlPackage):
depends_on("perl-test-warn", type=("build", "link", "test"))
depends_on("zstd", type=("build", "link", "run", "test"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# These are not currently available in Spack
env.set("SEREAL_USE_BUNDLED_CSNAPPY", "1")
env.set("SEREAL_USE_BUNDLED_MINIZ", "1")
diff --git a/var/spack/repos/builtin/packages/perl/package.py b/var/spack/repos/builtin/packages/perl/package.py
index f0dd6e9799b..6b5af2e8f54 100644
--- a/var/spack/repos/builtin/packages/perl/package.py
+++ b/var/spack/repos/builtin/packages/perl/package.py
@@ -470,7 +470,7 @@ def install_cpanm(self):
maker()
maker("install")
- def _setup_dependent_env(self, env, dependent_spec):
+ def _setup_dependent_env(self, env: EnvironmentModifications, dependent_spec: Spec):
"""Set PATH and PERL5LIB to include the extension and
any other perl extensions it depends on,
assuming they were installed with INSTALL_BASE defined."""
@@ -483,10 +483,14 @@ def _setup_dependent_env(self, env, dependent_spec):
if sys.platform == "win32":
env.append_path("PATH", self.prefix.bin)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self._setup_dependent_env(env, dependent_spec)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self._setup_dependent_env(env, dependent_spec)
def setup_dependent_package(self, module, dependent_spec):
@@ -505,7 +509,7 @@ def setup_dependent_package(self, module, dependent_spec):
# Add variables for library directory
module.perl_lib_dir = dependent_spec.prefix.lib.perl5
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if sys.platform == "win32":
env.append_path("PATH", self.prefix.bin)
return
@@ -519,10 +523,10 @@ def setup_build_environment(self, env):
env.set("MACOSX_DEPLOYMENT_TARGET", "10.16")
# This is how we tell perl the locations of bzip and zlib.
- env.set("BUILD_BZIP2", 0)
+ env.set("BUILD_BZIP2", "0")
env.set("BZIP2_INCLUDE", spec["bzip2"].prefix.include)
env.set("BZIP2_LIB", spec["bzip2"].libs.directories[0])
- env.set("BUILD_ZLIB", 0)
+ env.set("BUILD_ZLIB", "0")
env.set("ZLIB_INCLUDE", spec["zlib-api"].prefix.include)
env.set("ZLIB_LIB", spec["zlib-api"].libs.directories[0])
diff --git a/var/spack/repos/builtin/packages/petaca/package.py b/var/spack/repos/builtin/packages/petaca/package.py
index 3eb5fbd27e5..26cae762062 100644
--- a/var/spack/repos/builtin/packages/petaca/package.py
+++ b/var/spack/repos/builtin/packages/petaca/package.py
@@ -52,12 +52,6 @@ class Petaca(CMakePackage):
variant("std_name", default=False, description="enables std_mod_proc_name with intel")
- # copied from openmpi/package.py to ensure fortran support
- @run_before("cmake")
- def die_without_fortran(self):
- if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError("petaca requires both C and Fortran compilers!")
-
def cmake_args(self):
return [
self.define("ENABLE_TESTS", self.run_tests),
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index 50c25999661..510dac5fa7c 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -314,12 +314,6 @@ class Petsc(Package, CudaPackage, ROCmPackage):
filter_compiler_wrappers("petscvariables", "reconfigure*.py", relative_root="lib/petsc/conf")
filter_compiler_wrappers("petsc.pc", "PETSc.pc", relative_root="lib/pkgconfig")
- @run_before("configure")
- def check_fortran_compiler(self):
- # Raise error if +fortran and there isn't a fortran compiler!
- if "+fortran" in self.spec and self.compiler.fc is None:
- raise InstallError("+fortran requires a fortran compiler!")
-
# temporary workaround Clang 8.1.0 with XCode 8.3 on macOS, see
# https://bitbucket.org/petsc/petsc/commits/4f290403fdd060d09d5cb07345cbfd52670e3cbc
# the patch is an adaptation of the original commit to 3.7.5
@@ -776,17 +770,19 @@ def install(self, spec, prefix):
if self.run_tests:
make('check PETSC_ARCH="" PETSC_DIR={0}'.format(prefix), parallel=False)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# configure fails if these env vars are set outside of Spack
env.unset("PETSC_DIR")
env.unset("PETSC_ARCH")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Set PETSC_DIR in the module file
env.set("PETSC_DIR", self.prefix)
env.unset("PETSC_ARCH")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Set up PETSC_DIR for everyone using PETSc package
env.set("PETSC_DIR", self.prefix)
env.unset("PETSC_ARCH")
diff --git a/var/spack/repos/builtin/packages/pfind/package.py b/var/spack/repos/builtin/packages/pfind/package.py
index 370c8330165..db750152353 100644
--- a/var/spack/repos/builtin/packages/pfind/package.py
+++ b/var/spack/repos/builtin/packages/pfind/package.py
@@ -19,7 +19,7 @@ class Pfind(Package):
depends_on("mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CC", self.spec["mpi"].mpicc, force=True)
env.set("CXX", self.spec["mpi"].mpicxx, force=True)
diff --git a/var/spack/repos/builtin/packages/pfunit/package.py b/var/spack/repos/builtin/packages/pfunit/package.py
index 6424ceb5cc3..f5831c2425d 100644
--- a/var/spack/repos/builtin/packages/pfunit/package.py
+++ b/var/spack/repos/builtin/packages/pfunit/package.py
@@ -233,6 +233,6 @@ def compiler_vendor(self):
return value
raise InstallError("Unsupported compiler.")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:3"):
env.set("F90_VENDOR", self.compiler_vendor())
diff --git a/var/spack/repos/builtin/packages/pgplot/package.py b/var/spack/repos/builtin/packages/pgplot/package.py
index d6b6c7ef449..07bc4f00221 100644
--- a/var/spack/repos/builtin/packages/pgplot/package.py
+++ b/var/spack/repos/builtin/packages/pgplot/package.py
@@ -119,7 +119,7 @@ def edit(self, spec, prefix):
for key, value in sub.items():
filter_file(key, value, conf)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+X" in self.spec:
env.append_flags("LIBS", self.spec["libx11"].libs.ld_flags)
if "+png" in self.spec:
@@ -174,10 +174,12 @@ def libs(self):
libnames = ["libcpgplot", "libpgplot"]
return find_libraries(libnames, root=self.prefix, shared=shared, recursive=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PGPLOT_FONT", self.prefix.include + "/grfont.dat")
env.set("PGPLOT_DIR", self.prefix.lib + "/pgplot5")
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("PGPLOT_FONT", self.prefix.include + "/grfont.dat")
env.set("PGPLOT_DIR", self.prefix.lib + "/pgplot5")
diff --git a/var/spack/repos/builtin/packages/ph5concat/package.py b/var/spack/repos/builtin/packages/ph5concat/package.py
index 04e02e6b00b..97f5ceb3b97 100644
--- a/var/spack/repos/builtin/packages/ph5concat/package.py
+++ b/var/spack/repos/builtin/packages/ph5concat/package.py
@@ -25,7 +25,7 @@ class Ph5concat(AutotoolsPackage):
variant("profiling", default=False, description="Enable profiling support")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LIBS", "-ldl -lz")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/phist/package.py b/var/spack/repos/builtin/packages/phist/package.py
index dbc92168dd6..07df9476e68 100644
--- a/var/spack/repos/builtin/packages/phist/package.py
+++ b/var/spack/repos/builtin/packages/phist/package.py
@@ -253,7 +253,7 @@ def patch(self):
"drivers/matfuncs/matpde3d.F90",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SPACK_SBANG", sbang.sbang_install_path())
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/picard/package.py b/var/spack/repos/builtin/packages/picard/package.py
index f5da7fd82a3..25f23eef034 100644
--- a/var/spack/repos/builtin/packages/picard/package.py
+++ b/var/spack/repos/builtin/packages/picard/package.py
@@ -194,7 +194,7 @@ def install(self, spec, prefix):
filter_file("^java", java, script, **kwargs)
filter_file("picard.jar", join_path(prefix.bin, "picard.jar"), script, **kwargs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""The Picard docs suggest setting this as a convenience."""
env.prepend_path("PICARD", join_path(self.prefix.bin, "picard.jar"))
diff --git a/var/spack/repos/builtin/packages/pika/package.py b/var/spack/repos/builtin/packages/pika/package.py
index e6f9769c7a8..9e9716610b3 100644
--- a/var/spack/repos/builtin/packages/pika/package.py
+++ b/var/spack/repos/builtin/packages/pika/package.py
@@ -129,6 +129,8 @@ class Pika(CMakePackage, CudaPackage, ROCmPackage):
# Other dependencies
depends_on("boost@1.71:")
+ # https://github.com/pika-org/pika/pull/1428
+ conflicts("^boost@1.88:", when="@:0.33")
depends_on("fmt@9:", when="@0.11:")
# https://github.com/pika-org/pika/issues/686
conflicts("^fmt@10:", when="@:0.15 +cuda")
diff --git a/var/spack/repos/builtin/packages/pkg-config/package.py b/var/spack/repos/builtin/packages/pkg-config/package.py
index 4a37663884a..45a1da60321 100644
--- a/var/spack/repos/builtin/packages/pkg-config/package.py
+++ b/var/spack/repos/builtin/packages/pkg-config/package.py
@@ -46,7 +46,9 @@ def determine_version(cls, exe):
return version
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Adds the ACLOCAL path for autotools."""
env.append_path("ACLOCAL_PATH", self.prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/pkgconf/package.py b/var/spack/repos/builtin/packages/pkgconf/package.py
index 9070bd976da..e6303291dcd 100644
--- a/var/spack/repos/builtin/packages/pkgconf/package.py
+++ b/var/spack/repos/builtin/packages/pkgconf/package.py
@@ -56,7 +56,9 @@ def determine_version(cls, exe):
return version
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Adds the ACLOCAL path for autotools."""
env.append_path("ACLOCAL_PATH", self.prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/package.py b/var/spack/repos/builtin/packages/planck-likelihood/package.py
index 7228923e47a..509691955de 100644
--- a/var/spack/repos/builtin/packages/planck-likelihood/package.py
+++ b/var/spack/repos/builtin/packages/planck-likelihood/package.py
@@ -116,12 +116,14 @@ def install(self, spec, prefix):
for dir in dirs:
install_tree(dir, join_path(prefix, "share", "clik", dir))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("CLIK_PATH", self.prefix)
env.set("CLIK_DATA", self.prefix.share.clik)
env.set("CLIK_PLUGIN", "rel2015")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CLIK_PATH", self.prefix)
env.set("CLIK_DATA", self.prefix.share.clik)
env.set("CLIK_PLUGIN", "rel2015")
diff --git a/var/spack/repos/builtin/packages/plantuml/package.py b/var/spack/repos/builtin/packages/plantuml/package.py
index 16c5c197307..2ed3ea69fb4 100644
--- a/var/spack/repos/builtin/packages/plantuml/package.py
+++ b/var/spack/repos/builtin/packages/plantuml/package.py
@@ -35,5 +35,5 @@ def install(self, spec, prefix):
plantuml_wrapper = join_path(os.path.dirname(__file__), "plantuml")
install(plantuml_wrapper, prefix.bin.plantuml)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PLANTUML_JAR_LOCATION", join_path(self.prefix.bin, "plantuml.jar"))
diff --git a/var/spack/repos/builtin/packages/plink-ng/package.py b/var/spack/repos/builtin/packages/plink-ng/package.py
index 794d6516f19..0ea290f4e79 100644
--- a/var/spack/repos/builtin/packages/plink-ng/package.py
+++ b/var/spack/repos/builtin/packages/plink-ng/package.py
@@ -25,7 +25,7 @@ def url_for_version(self, ver):
template = "https://www.cog-genomics.org/static/bin/plink2_src_{0}.zip"
return template.format(ver)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
zlib = join_path(self.spec["zlib-api"].prefix.lib, "libz.a")
env.set("ZLIB", zlib)
diff --git a/var/spack/repos/builtin/packages/plink/package.py b/var/spack/repos/builtin/packages/plink/package.py
index 25b62046370..f587d719c3a 100644
--- a/var/spack/repos/builtin/packages/plink/package.py
+++ b/var/spack/repos/builtin/packages/plink/package.py
@@ -59,7 +59,7 @@ def install(self, spec, prefix):
install("plink", prefix.bin)
@when("@1.9-beta6.27:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BLASFLAGS", self.spec["blas"].libs.ld_flags)
env.set("ZLIB", self.spec["zlib-api"].libs.ld_flags)
diff --git a/var/spack/repos/builtin/packages/ploticus/package.py b/var/spack/repos/builtin/packages/ploticus/package.py
index 6afdbe504e5..80d1cbf4252 100644
--- a/var/spack/repos/builtin/packages/ploticus/package.py
+++ b/var/spack/repos/builtin/packages/ploticus/package.py
@@ -28,7 +28,7 @@ def url_for_version(self, version):
"https://sourceforge.net/projects/ploticus/files/ploticus/2.42/ploticus242_src.tar.gz"
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PLOTICUS_PREFABS", self.prefix.prefabs)
def edit(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/plumed/package.py b/var/spack/repos/builtin/packages/plumed/package.py
index 5cf71dc6a00..e58e98b83b2 100644
--- a/var/spack/repos/builtin/packages/plumed/package.py
+++ b/var/spack/repos/builtin/packages/plumed/package.py
@@ -27,6 +27,8 @@ class Plumed(AutotoolsPackage):
git = "https://github.com/plumed/plumed2.git"
maintainers("marcodelapierre")
+ tags = ["e4s"]
+
license("LGPL-3.0-or-later")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/pnmpi/package.py b/var/spack/repos/builtin/packages/pnmpi/package.py
index 9052b9a69f5..0f8d8a82360 100644
--- a/var/spack/repos/builtin/packages/pnmpi/package.py
+++ b/var/spack/repos/builtin/packages/pnmpi/package.py
@@ -32,15 +32,6 @@ class Pnmpi(CMakePackage):
depends_on("doxygen")
depends_on("mpi")
- @run_before("cmake")
- def check_fortran(self):
- is_no_fortran_compiler = not self.compiler.f77 and not self.compiler.fc
- if self.spec.satisfies("+fortran"):
- if is_no_fortran_compiler:
- raise InstallError(
- "pnmpi+fortran requires Fortran compiler " "but no Fortran compiler found!"
- )
-
def cmake_args(self):
args = []
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/podio/package.py b/var/spack/repos/builtin/packages/podio/package.py
index 8dc4d07ab03..581a53f0bb8 100644
--- a/var/spack/repos/builtin/packages/podio/package.py
+++ b/var/spack/repos/builtin/packages/podio/package.py
@@ -111,6 +111,7 @@ class Podio(CMakePackage):
depends_on("py-pyyaml", type=("build", "run"))
depends_on("py-jinja2@2.10.1:", type=("build", "run"))
depends_on("sio", type=("build", "link"), when="+sio")
+ depends_on("fmt@9:", type=("build", "link"), when="@1.3:")
depends_on("catch2@3.0.1:", type=("test"), when="@:0.16.5")
depends_on("catch2@3.1:", type=("test"), when="@0.16.6:")
depends_on("catch2@3.4:", type=("test"), when="@0.17.1: cxxstd=20")
@@ -137,12 +138,13 @@ def cmake_args(self):
self.define_from_variant("ENABLE_SIO", "sio"),
self.define_from_variant("ENABLE_RNTUPLE", "rntuple"),
self.define_from_variant("ENABLE_DATASOURCE", "datasource"),
+ self.define("PODIO_SET_RPATH", True),
self.define("CMAKE_CXX_STANDARD", self.spec.variants["cxxstd"].value),
self.define("BUILD_TESTING", self.run_tests),
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:0.99"):
# After 0.99 podio installs its python bindings into a more standard place
env.prepend_path("PYTHONPATH", self.prefix.python)
@@ -156,7 +158,9 @@ def setup_run_environment(self, env):
# Frame header needs to be available for python bindings
env.prepend_path("ROOT_INCLUDE_PATH", self.prefix.include)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.satisfies("@:0.99"):
env.prepend_path("PYTHONPATH", self.prefix.python)
diff --git a/var/spack/repos/builtin/packages/postgis/package.py b/var/spack/repos/builtin/packages/postgis/package.py
index 7e6c69d6c1b..1c894f513d4 100644
--- a/var/spack/repos/builtin/packages/postgis/package.py
+++ b/var/spack/repos/builtin/packages/postgis/package.py
@@ -51,10 +51,10 @@ class Postgis(AutotoolsPackage):
depends_on("gtkplus@:2.24.32", when="+gui")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("POSTGIS_GDAL_ENABLED_DRIVERS", "ENABLE_ALL")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("POSTGIS_GDAL_ENABLED_DRIVERS", "ENABLE_ALL")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/postgresql/package.py b/var/spack/repos/builtin/packages/postgresql/package.py
index 3219184075b..69a44dd26fb 100644
--- a/var/spack/repos/builtin/packages/postgresql/package.py
+++ b/var/spack/repos/builtin/packages/postgresql/package.py
@@ -123,7 +123,7 @@ def install(self, spec, prefix):
else:
super().install(spec, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("+perl"):
@@ -133,7 +133,9 @@ def setup_run_environment(self, env):
if spec.satisfies("+python"):
env.prepend_path("PYTHONPATH", self.prefix.lib)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
if spec.satisfies("+perl"):
@@ -143,7 +145,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
if spec.satisfies("+python"):
env.prepend_path("PYTHONPATH", self.prefix.lib)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
spec = self.spec
if spec.satisfies("+perl"):
diff --git a/var/spack/repos/builtin/packages/powertop/package.py b/var/spack/repos/builtin/packages/powertop/package.py
index fea594931c6..97c0eed1e8d 100644
--- a/var/spack/repos/builtin/packages/powertop/package.py
+++ b/var/spack/repos/builtin/packages/powertop/package.py
@@ -19,5 +19,5 @@ class Powertop(AutotoolsPackage):
depends_on("libnl")
depends_on("ncurses", type="link")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/prank/package.py b/var/spack/repos/builtin/packages/prank/package.py
index a3c419e9a18..111f5a96bf4 100644
--- a/var/spack/repos/builtin/packages/prank/package.py
+++ b/var/spack/repos/builtin/packages/prank/package.py
@@ -13,6 +13,7 @@ class Prank(Package):
version("170427", sha256="623eb5e9b5cb0be1f49c3bf715e5fabceb1059b21168437264bdcd5c587a8859")
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
depends_on("mafft")
diff --git a/var/spack/repos/builtin/packages/preseq/package.py b/var/spack/repos/builtin/packages/preseq/package.py
index 5bb181be2a7..c5b50dc00a9 100644
--- a/var/spack/repos/builtin/packages/preseq/package.py
+++ b/var/spack/repos/builtin/packages/preseq/package.py
@@ -26,5 +26,5 @@ class Preseq(MakefilePackage):
depends_on("samtools")
depends_on("gsl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
diff --git a/var/spack/repos/builtin/packages/pressio-log/package.py b/var/spack/repos/builtin/packages/pressio-log/package.py
new file mode 100644
index 00000000000..a2e3f233c64
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pressio-log/package.py
@@ -0,0 +1,25 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PressioLog(Package):
+ """
+ pressio-log is a header-only logging library designed
+ for use with Pressio repositories.
+ """
+
+ homepage = "https://github.com/Pressio/pressio-log/blob/main/README.md"
+ git = "https://github.com/pressio/pressio-log.git"
+
+ license("BSD-3-Clause")
+
+ maintainers("fnrizzi", "cwschilly")
+
+ version("main", branch="main")
+ version("0.15.0", branch="0.15.0")
+
+ def install(self, spec, prefix):
+ install_tree("include", prefix.include)
diff --git a/var/spack/repos/builtin/packages/pressio-ops/package.py b/var/spack/repos/builtin/packages/pressio-ops/package.py
new file mode 100644
index 00000000000..e662ffd1817
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pressio-ops/package.py
@@ -0,0 +1,25 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PressioOps(Package):
+ """
+ pressio-ops is a header-only library containing
+ essential operations for the Pressio ecosystem.
+ """
+
+ homepage = "https://pressio.github.io/pressio-ops"
+ git = "https://github.com/pressio/pressio-ops.git"
+
+ license("BSD-3-Clause")
+
+ maintainers("fnrizzi", "cwschilly")
+
+ version("main", branch="main")
+ version("0.15.0", branch="0.15.0")
+
+ def install(self, spec, prefix):
+ install_tree("include", prefix.include)
diff --git a/var/spack/repos/builtin/packages/pressio-rom/package.py b/var/spack/repos/builtin/packages/pressio-rom/package.py
new file mode 100644
index 00000000000..de0ce0c739f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pressio-rom/package.py
@@ -0,0 +1,49 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+import os
+from os.path import join as pjoin
+
+from spack.package import *
+
+
+class PressioRom(Package):
+ """
+ Pressio is an ecosystem for developing, applying and
+ using projection-based model reduction (pROM) methods.
+ A key goal is to mitigate the intrusive nature of pROMs
+ for large-scale codes, and providing a framework to
+ foster research of new ideas as well as incentivize broader
+ adoption and usability.
+ """
+
+ homepage = "https://pressio.github.io/pressio-rom/"
+ git = "https://github.com/pressio/pressio-rom.git"
+
+ license("BSD-3-Clause")
+ maintainers("fnrizzi", "cwschilly")
+
+ supported_versions = ["main", "0.15.0"]
+
+ # For now, assume each repo is compatible only with the same version of the other repos
+ for supported_version in supported_versions:
+ version(supported_version, branch=supported_version)
+ depends_on(f"pressio-ops@{supported_version}", type="build", when=f"@{supported_version}")
+ depends_on(f"pressio-log@{supported_version}", type="build", when=f"@{supported_version}")
+
+ def install(self, spec, prefix):
+ include_dir = prefix.include
+ install_tree("include", include_dir)
+
+ # Add symlinks to pressio-ops headers inside main include/pressio directory
+ pressio_includes = pjoin(include_dir, "pressio")
+ ops_include = pjoin(self.spec["pressio-ops"].prefix.include, "pressio")
+ for item in os.listdir(ops_include):
+ src_item = pjoin(ops_include, item)
+ dest_item = pjoin(pressio_includes, item)
+ symlink(src_item, dest_item, target_is_directory=os.path.isdir(src_item))
+
+ # Add symlink to pressio-log headers in include/pressio-log
+ log_include = pjoin(self.spec["pressio-log"].prefix.include, "pressio-log")
+ symlink(log_include, pjoin(include_dir, "pressio-log"), target_is_directory=True)
diff --git a/var/spack/repos/builtin/packages/prism/package.py b/var/spack/repos/builtin/packages/prism/package.py
index 89885202805..4005a22bb8d 100644
--- a/var/spack/repos/builtin/packages/prism/package.py
+++ b/var/spack/repos/builtin/packages/prism/package.py
@@ -29,7 +29,7 @@ class Prism(MakefilePackage):
patch("Makefile.patch", when="target=aarch64:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PRISM_DIR", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/procps-ng/package.py b/var/spack/repos/builtin/packages/procps-ng/package.py
index 5166c7f4692..ff17d938cb0 100644
--- a/var/spack/repos/builtin/packages/procps-ng/package.py
+++ b/var/spack/repos/builtin/packages/procps-ng/package.py
@@ -17,5 +17,5 @@ class ProcpsNg(AutotoolsPackage):
depends_on("c", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/prodigal/package.py b/var/spack/repos/builtin/packages/prodigal/package.py
index 1fcca6bb970..75a97b36c2f 100644
--- a/var/spack/repos/builtin/packages/prodigal/package.py
+++ b/var/spack/repos/builtin/packages/prodigal/package.py
@@ -21,5 +21,5 @@ class Prodigal(MakefilePackage):
def install(self, spec, prefix):
make("INSTALLDIR={0}".format(self.prefix), "install")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/professor/package.py b/var/spack/repos/builtin/packages/professor/package.py
index 66301ee5703..7a48f7214e8 100644
--- a/var/spack/repos/builtin/packages/professor/package.py
+++ b/var/spack/repos/builtin/packages/professor/package.py
@@ -35,7 +35,7 @@ class Professor(Package):
extends("python")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PROF_VERSION", self.spec.version)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/proj/package.py b/var/spack/repos/builtin/packages/proj/package.py
index 8a39abbbb33..4d91f366c10 100644
--- a/var/spack/repos/builtin/packages/proj/package.py
+++ b/var/spack/repos/builtin/packages/proj/package.py
@@ -134,7 +134,7 @@ class Proj(CMakePackage, AutotoolsPackage):
conditional("autotools", when="@:8"), conditional("cmake", when="@5:"), default="cmake"
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# PROJ_LIB doesn't need to be set. However, it may be set by conda.
# If an incompatible version of PROJ is found in PROJ_LIB, it can
# cause the package to fail at run-time. See the following for details:
@@ -144,7 +144,7 @@ def setup_run_environment(self, env):
class AnyBuilder(BaseBuilder):
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PROJ_LIB", join_path(self.pkg.stage.source_path, "nad"))
@run_after("install")
diff --git a/var/spack/repos/builtin/packages/pruners-ninja/package.py b/var/spack/repos/builtin/packages/pruners-ninja/package.py
index d52a9dd02fb..bff2e12aa28 100644
--- a/var/spack/repos/builtin/packages/pruners-ninja/package.py
+++ b/var/spack/repos/builtin/packages/pruners-ninja/package.py
@@ -13,6 +13,8 @@ class PrunersNinja(AutotoolsPackage):
url = "https://github.com/PRUNERS/NINJA/releases/download/v1.0.0/NINJA-1.0.0.tar.gz"
git = "https://github.com/PRUNERS/NINJA.git"
+ tags = ["e4s"]
+
license("GPL-3.0-or-later")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/pscmc/package.py b/var/spack/repos/builtin/packages/pscmc/package.py
index 8808f562198..ff974d90fee 100644
--- a/var/spack/repos/builtin/packages/pscmc/package.py
+++ b/var/spack/repos/builtin/packages/pscmc/package.py
@@ -24,7 +24,7 @@ class Pscmc(MakefilePackage):
depends_on("c", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SCMC_COMPILE_ROOT", self.prefix.source)
env.set("SCMC_ROOT", join_path(self.prefix.source, "runtime_passes"))
env.set("STDLIB", join_path(self.prefix.source, "stdlib.scm"))
diff --git a/var/spack/repos/builtin/packages/psi4/package.py b/var/spack/repos/builtin/packages/psi4/package.py
index 1110cb4caf4..3b91c4dffe4 100644
--- a/var/spack/repos/builtin/packages/psi4/package.py
+++ b/var/spack/repos/builtin/packages/psi4/package.py
@@ -26,6 +26,7 @@ class Psi4(CMakePackage):
values=("Debug", "Release"),
)
+ depends_on("c", type="build")
depends_on("cxx", type="build") # generated
# Required dependencies
diff --git a/var/spack/repos/builtin/packages/psmc/package.py b/var/spack/repos/builtin/packages/psmc/package.py
index 13509ae8049..c57a9d18a1f 100644
--- a/var/spack/repos/builtin/packages/psmc/package.py
+++ b/var/spack/repos/builtin/packages/psmc/package.py
@@ -20,7 +20,7 @@ class Psmc(MakefilePackage):
depends_on("zlib-api", type="link")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.bin.utils)
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/pumi/package.py b/var/spack/repos/builtin/packages/pumi/package.py
index 432200c8d39..83ef667b74d 100644
--- a/var/spack/repos/builtin/packages/pumi/package.py
+++ b/var/spack/repos/builtin/packages/pumi/package.py
@@ -67,10 +67,6 @@ class Pumi(CMakePackage):
"Disable the check for testing new versions.",
)
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
- depends_on("fortran", type="build") # generated
-
depends_on("cxx", type="build")
depends_on("c", type="build")
depends_on("fortran", type="build", when="+fortran")
diff --git a/var/spack/repos/builtin/packages/purify/package.py b/var/spack/repos/builtin/packages/purify/package.py
index bbb01fefe94..17f349dadc8 100644
--- a/var/spack/repos/builtin/packages/purify/package.py
+++ b/var/spack/repos/builtin/packages/purify/package.py
@@ -19,7 +19,10 @@ class Purify(CMakePackage):
maintainers("tkoskela", "mmcleod89", "20DM")
license("GPL-2.0")
+ version("5.0.1", sha256="a5f4b1bac1e46d858b5dbb1237ef3babd9c1f23f5b9f081cca3992da61bbc124")
+ version("5.0.0", sha256="64e150427c94f6edfcc5a630f14c8939db73349ff7b32f43504ce8211b5fd6fa")
version("4.2.0", sha256="4d674007efc727628839fb6c8864e74f22adb39ee6405d3dab273f65b31b37e6")
+ version("dev", branch="development")
variant("tests", default=True, description="Build tests")
variant("openmp", default=True, description="Enable multithreading with OpenMP")
@@ -27,6 +30,13 @@ class Purify(CMakePackage):
variant("benchmarks", default=False, description="Build benchmarks")
variant("docs", default=False, description="Enable multithreading with OpenMP")
variant("coverage", default=False, description="Enable code coverage")
+ variant("hdf5", default=False, description="Enable hdf5 I/O")
+ variant(
+ "onnxrt",
+ when="@5.0.0:",
+ default=False,
+ description="Build with Tensorflow support using onnx in SOPT",
+ )
depends_on("cmake@3")
depends_on("eigen@3.4:3")
@@ -40,10 +50,17 @@ class Purify(CMakePackage):
depends_on("sopt+mpi", when="+mpi")
depends_on("sopt~openmp", when="~openmp")
depends_on("sopt+openmp", when="+openmp")
+ depends_on("sopt~onnxrt", when="~onnxrt")
+ depends_on("sopt+onnxrt", when="+onnxrt")
depends_on("catch2@3.4:3", when="+tests")
depends_on("mpi", when="+mpi")
depends_on("benchmark@1.8~performance_counters", when="+benchmarks")
depends_on("doxygen@1.9:1.12+graphviz", when="+docs")
+ depends_on("py-onnxruntime@1.17.1:", when="+onnxrt")
+ depends_on("hdf5+cxx", when="+hdf5")
+ depends_on("highfive", when="+hdf5")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
def cmake_args(self):
args = [
@@ -53,10 +70,12 @@ def cmake_args(self):
self.define_from_variant("openmp", "openmp"),
self.define_from_variant("dompi", "mpi"),
self.define_from_variant("coverage", "coverage"),
+ self.define_from_variant("onnxrt", "onnxrt"),
+ self.define_from_variant("hdf5", "hdf5"),
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+tests" in self.spec:
env.prepend_path("PATH", self.spec.prefix.tests)
if "+benchmarks" in self.spec:
diff --git a/var/spack/repos/builtin/packages/pvm/package.py b/var/spack/repos/builtin/packages/pvm/package.py
index fc39322afee..784a039c4d9 100644
--- a/var/spack/repos/builtin/packages/pvm/package.py
+++ b/var/spack/repos/builtin/packages/pvm/package.py
@@ -48,7 +48,7 @@ def patch(self):
"^SHAREDCFLAGS =", "SHAREDCFLAGS = -fPIC", join_path("conf", pvm_arch + ".def")
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
tirpc = self.spec["libtirpc"].prefix
env.prepend_path("SPACK_INCLUDE_DIRS", tirpc.include.tirpc)
env.set("SPACK_LDLIBS", "-ltirpc")
@@ -59,7 +59,7 @@ def install(self, spec, prefix):
install_tree("lib", prefix.lib)
install_tree("man", prefix.man)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Before running PVM, you must set the environment
# variable "PVM_ROOT" to the path where PVM resides
pvm_arch = self.pvm_arch(self.prefix)
diff --git a/var/spack/repos/builtin/packages/py-amici/package.py b/var/spack/repos/builtin/packages/py-amici/package.py
index ae9dcc869c6..f128f311bd1 100644
--- a/var/spack/repos/builtin/packages/py-amici/package.py
+++ b/var/spack/repos/builtin/packages/py-amici/package.py
@@ -40,8 +40,8 @@ class PyAmici(PythonPackage):
depends_on("py-toposort", type=("build", "run"))
depends_on("py-mpmath", when="@0.16.0:", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("BLAS_LIBS", " ".join(self.spec["blas"].libs))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BLAS_LIBS", " ".join(self.spec["blas"].libs))
diff --git a/var/spack/repos/builtin/packages/py-amqp/package.py b/var/spack/repos/builtin/packages/py-amqp/package.py
index efdfd3de88e..463fe093750 100644
--- a/var/spack/repos/builtin/packages/py-amqp/package.py
+++ b/var/spack/repos/builtin/packages/py-amqp/package.py
@@ -36,5 +36,5 @@ class PyAmqp(PythonPackage):
depends_on("py-vine@1.1.3:4", when="@2", type=("build", "run"))
depends_on("py-vine@5.0.0", when="@5.0.0:5", type=("build", "run"))
- def setup_build_environment(self, env):
- env.set("CELERY_ENABLE_SPEEDUPS", True)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("CELERY_ENABLE_SPEEDUPS", "True")
diff --git a/var/spack/repos/builtin/packages/py-amrex/package.py b/var/spack/repos/builtin/packages/py-amrex/package.py
index 72f7f5306fe..e7156f8e985 100644
--- a/var/spack/repos/builtin/packages/py-amrex/package.py
+++ b/var/spack/repos/builtin/packages/py-amrex/package.py
@@ -10,21 +10,22 @@ class PyAmrex(CMakePackage, PythonExtension, CudaPackage, ROCmPackage):
"""AMReX Python Bindings with pybind11"""
homepage = "https://amrex-codes.github.io/amrex/"
- url = "https://github.com/AMReX-Codes/pyamrex/archive/refs/tags/25.03.tar.gz"
+ url = "https://github.com/AMReX-Codes/pyamrex/archive/refs/tags/25.04.tar.gz"
git = "https://github.com/AMReX-Codes/pyamrex.git"
- maintainers("ax3l", "EZoni", "RTSandberg", "sayerhs", "WeiqunZhang")
+ maintainers("ax3l", "EZoni", "atmyers", "sayerhs", "WeiqunZhang")
tags = ["e4s", "hpsf"]
license("BSD-3-Clause-LBNL")
version("develop", branch="development")
- version("25.03", sha256="5a65545d46b49dd3f2bca2647a174c3ee0384e49791dc3e335a3a39d9a045350")
+ version("25.04", sha256="2c765d581f21170ea26a5eb50bdd2c9151d2dbed9f1002dc25e62f38ed6220c0")
with default_args(deprecated=True):
+ version("25.03", sha256="5a65545d46b49dd3f2bca2647a174c3ee0384e49791dc3e335a3a39d9a045350")
version("25.02", sha256="c743086b317f9fa90639d825db32a92376cde8dc5e1eab47a4c6a82af36d5b5c")
- for v in ["25.03", "25.02", "develop"]:
+ for v in ["25.04", "25.03", "25.02", "develop"]:
depends_on("amrex@{0}".format(v), when="@{0}".format(v), type=("build", "link"))
variant(
diff --git a/var/spack/repos/builtin/packages/py-antspyx/package.py b/var/spack/repos/builtin/packages/py-antspyx/package.py
index 13da3e02158..28a9b29306e 100644
--- a/var/spack/repos/builtin/packages/py-antspyx/package.py
+++ b/var/spack/repos/builtin/packages/py-antspyx/package.py
@@ -55,5 +55,5 @@ class PyAntspyx(PythonPackage):
when="@0.3.7", # ANTs dependency needs updating for every version
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("ITK_DIR", self.spec["itk"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-anuga/package.py b/var/spack/repos/builtin/packages/py-anuga/package.py
index c349905ba36..8fae81f8f82 100644
--- a/var/spack/repos/builtin/packages/py-anuga/package.py
+++ b/var/spack/repos/builtin/packages/py-anuga/package.py
@@ -45,7 +45,7 @@ class PyAnuga(PythonPackage):
# https://github.com/GeoscienceAustralia/anuga_core/issues/247
conflicts("%apple-clang@12:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.run_tests:
env.prepend_path("PATH", self.spec["mpi"].prefix.bin)
diff --git a/var/spack/repos/builtin/packages/py-archspec/package.py b/var/spack/repos/builtin/packages/py-archspec/package.py
index 21ca8db5aa1..954291d97f8 100644
--- a/var/spack/repos/builtin/packages/py-archspec/package.py
+++ b/var/spack/repos/builtin/packages/py-archspec/package.py
@@ -14,7 +14,7 @@ class PyArchspec(PythonPackage):
maintainers("alalazo")
- license("Apache-2.0")
+ license("Apache-2.0 AND MIT", checked_by="wdconinc")
version("0.2.4", sha256="eabbae22f315d24cc2ce786a092478ec8e245208c9877fb213c2172a6ecb9302")
version("0.2.3", sha256="d07deb5b6e2ab3b74861e217523d02e69be8522f6e6565f4cc5d2062eb1a5d2c")
diff --git a/var/spack/repos/builtin/packages/py-arm-pyart/package.py b/var/spack/repos/builtin/packages/py-arm-pyart/package.py
index 137f540368b..d405fbe4126 100644
--- a/var/spack/repos/builtin/packages/py-arm-pyart/package.py
+++ b/var/spack/repos/builtin/packages/py-arm-pyart/package.py
@@ -65,7 +65,7 @@ class PyArmPyart(PythonPackage):
patch("StringIO.patch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+rsl" in self.spec:
env.set("RSL_PATH", self.spec["rsl"].prefix)
else:
diff --git a/var/spack/repos/builtin/packages/py-awkward/package.py b/var/spack/repos/builtin/packages/py-awkward/package.py
index f5db8ec1cb8..66f34e7fac3 100644
--- a/var/spack/repos/builtin/packages/py-awkward/package.py
+++ b/var/spack/repos/builtin/packages/py-awkward/package.py
@@ -92,5 +92,5 @@ class PyAwkward(PythonPackage):
depends_on("py-fsspec@2022.11.0:", when="@2.6.0:", type=("build", "run"))
@when("@1.9.0:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CMAKE_ARGS", "-DAWKWARD_EXTERNAL_PYBIND11=TRUE")
diff --git a/var/spack/repos/builtin/packages/py-awscrt/package.py b/var/spack/repos/builtin/packages/py-awscrt/package.py
index 21890f5047e..2aeb2754f09 100644
--- a/var/spack/repos/builtin/packages/py-awscrt/package.py
+++ b/var/spack/repos/builtin/packages/py-awscrt/package.py
@@ -28,6 +28,6 @@ class PyAwscrt(PythonPackage):
depends_on("py-setuptools", type=("build"))
# On Linux, tell aws-crt-python to use libcrypto from spack (openssl)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
with when("platform=linux"):
- env.set("AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO", 1)
+ env.set("AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO", "1")
diff --git a/var/spack/repos/builtin/packages/py-ax-platform/package.py b/var/spack/repos/builtin/packages/py-ax-platform/package.py
index 206eb20e580..d091f781814 100644
--- a/var/spack/repos/builtin/packages/py-ax-platform/package.py
+++ b/var/spack/repos/builtin/packages/py-ax-platform/package.py
@@ -34,5 +34,5 @@ class PyAxPlatform(PythonPackage):
depends_on("py-typeguard@2.13.3", type=("build", "run"))
depends_on("py-plotly@5.12.0:", type=("build", "run"))
- def setup_build_environment(self, env):
- env.set("ALLOW_BOTORCH_LATEST", True)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("ALLOW_BOTORCH_LATEST", "True")
diff --git a/var/spack/repos/builtin/packages/py-basemap/package.py b/var/spack/repos/builtin/packages/py-basemap/package.py
index 338f5161e4e..65b484cd9a7 100644
--- a/var/spack/repos/builtin/packages/py-basemap/package.py
+++ b/var/spack/repos/builtin/packages/py-basemap/package.py
@@ -35,7 +35,7 @@ class PyBasemap(PythonPackage):
# directories (i.e., matplotlib and basemap)
depends_on("py-setuptools", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GEOS_DIR", self.spec["geos"].prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-bitshuffle/package.py b/var/spack/repos/builtin/packages/py-bitshuffle/package.py
index e3eba7167d0..e3fce25d494 100644
--- a/var/spack/repos/builtin/packages/py-bitshuffle/package.py
+++ b/var/spack/repos/builtin/packages/py-bitshuffle/package.py
@@ -25,5 +25,5 @@ class PyBitshuffle(PythonPackage):
# setup.py:220
depends_on("hdf5@1.8.11:~mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5_DIR", self.spec["hdf5"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-blis/package.py b/var/spack/repos/builtin/packages/py-blis/package.py
index e14b46e0136..6845196fa18 100644
--- a/var/spack/repos/builtin/packages/py-blis/package.py
+++ b/var/spack/repos/builtin/packages/py-blis/package.py
@@ -25,6 +25,6 @@ class PyBlis(PythonPackage):
depends_on("py-cython@0.25:", when="@0.7.9:", type="build")
depends_on("py-numpy@1.15:", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BLIS_COMPILER", spack_cc)
env.set("BLIS_ARCH", "generic")
diff --git a/var/spack/repos/builtin/packages/py-blosc/package.py b/var/spack/repos/builtin/packages/py-blosc/package.py
index 4e8f4650310..0abab1cf7f8 100644
--- a/var/spack/repos/builtin/packages/py-blosc/package.py
+++ b/var/spack/repos/builtin/packages/py-blosc/package.py
@@ -40,6 +40,6 @@ class PyBlosc(PythonPackage):
# https://github.com/Blosc/python-blosc/releases/tag/v1.11.2
depends_on("c-blosc@1.21.6", type=("build", "run"), when="@1.11.2 ^python@3.12:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("^c-blosc"):
- env.set("USE_SYSTEM_BLOSC", 1)
+ env.set("USE_SYSTEM_BLOSC", "1")
diff --git a/var/spack/repos/builtin/packages/py-blosc2/package.py b/var/spack/repos/builtin/packages/py-blosc2/package.py
index 130bf95601e..e67ff7216db 100644
--- a/var/spack/repos/builtin/packages/py-blosc2/package.py
+++ b/var/spack/repos/builtin/packages/py-blosc2/package.py
@@ -39,7 +39,7 @@ class PyBlosc2(PythonPackage):
depends_on("ninja")
depends_on("pkgconfig")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
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]
diff --git a/var/spack/repos/builtin/packages/py-bluepyopt/package.py b/var/spack/repos/builtin/packages/py-bluepyopt/package.py
index 855ae57a669..b32ef0c493e 100644
--- a/var/spack/repos/builtin/packages/py-bluepyopt/package.py
+++ b/var/spack/repos/builtin/packages/py-bluepyopt/package.py
@@ -35,6 +35,6 @@ class PyBluepyopt(PythonPackage):
depends_on("neuron@7.4:", type=("build", "run"), when="@:1.14.4")
depends_on("neuron@7.8:", type=("build", "run"), when="@1.14.11:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.unset("PMI_RANK")
env.set("NEURON_INIT_MPI", "0")
diff --git a/var/spack/repos/builtin/packages/py-botorch/package.py b/var/spack/repos/builtin/packages/py-botorch/package.py
index ae6fbe94a97..d9050955b76 100644
--- a/var/spack/repos/builtin/packages/py-botorch/package.py
+++ b/var/spack/repos/builtin/packages/py-botorch/package.py
@@ -17,26 +17,38 @@ class PyBotorch(PythonPackage):
version("0.8.4", sha256="e2c17efa8fcda3c9353bbd14ba283ddf237d66151097c0af483bbaaaac61288b")
version("0.8.3", sha256="e529f7adbb2b54f46125ae904682fc0f0d02ab8bdb9067ede521c379b355bf73")
- version("0.6.4", sha256="3fd28417f55749501a45378f72cd5ca7614e2e05b7b65c6b4eb9b72378bc665a")
- depends_on("python@3.7:", type=("build", "run"))
- depends_on("python@3.8:", when="@0.8.3:", type=("build", "run"))
- depends_on("py-setuptools", type="build")
- depends_on("py-setuptools@:47", when="@:0.6.4", type="build")
- depends_on("py-setuptools-scm", type="build")
- depends_on("py-setuptools-scm+toml", when="@0.8.3:", type="build")
- depends_on("py-torch@1.12:", when="@0.8.3:", type=("build", "run"))
- depends_on("py-torch@1.9:", type=("build", "run"))
- depends_on("py-gpytorch@1.10:", when="@0.8.4:", type=("build", "run"))
- depends_on("py-gpytorch@1.9.1:", when="@0.8.3:", type=("build", "run"))
- depends_on("py-gpytorch@1.6:", type=("build", "run"))
- depends_on("py-scipy", type=("build", "run"))
- depends_on("py-multipledispatch", type=("build", "run"))
- depends_on("py-pyro-ppl@1.8.4:", when="@0.8.3:", type=("build", "run"))
- depends_on("py-pyro-ppl@1.8.0", when="@:0.6.4", type=("build", "run"))
- depends_on("py-linear-operator@0.4.0:", when="@0.8.4:", type=("build", "run"))
- depends_on("py-linear-operator@0.3.0:", when="@0.8.3:", type=("build", "run"))
+ with default_args(deprecated=True):
+ version("0.6.4", sha256="3fd28417f55749501a45378f72cd5ca7614e2e05b7b65c6b4eb9b72378bc665a")
- def setup_build_environment(self, env):
+ with default_args(type="build"):
+ depends_on("py-setuptools")
+ depends_on("py-setuptools@:47", when="@:0.6.4")
+
+ depends_on("py-setuptools-scm")
+ depends_on("py-setuptools-scm+toml", when="@0.8.3:")
+
+ with default_args(type=("build", "run")):
+ depends_on("python@3.8:", when="@0.8.3:")
+ depends_on("python@3.7:")
+
+ depends_on("py-torch@1.12:", when="@0.8.3:")
+ depends_on("py-torch@1.9:")
+
+ depends_on("py-gpytorch@1.10:", when="@0.8.4:")
+ depends_on("py-gpytorch@1.9.1:", when="@0.8.3:")
+ depends_on("py-gpytorch@1.6:")
+
+ depends_on("py-scipy")
+
+ depends_on("py-multipledispatch")
+
+ depends_on("py-pyro-ppl@1.8.4:", when="@0.8.3:")
+ depends_on("py-pyro-ppl@1.8.0", when="@:0.6.4")
+
+ depends_on("py-linear-operator@0.4.0:", when="@0.8.4:")
+ depends_on("py-linear-operator@0.3.0:", when="@0.8.3:")
+
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@0.8.3:"):
- env.set("ALLOW_LATEST_GPYTORCH_LINOP", True)
+ env.set("ALLOW_LATEST_GPYTORCH_LINOP", "True")
diff --git a/var/spack/repos/builtin/packages/py-build/package.py b/var/spack/repos/builtin/packages/py-build/package.py
index ae08eb49254..7d77fadbbb0 100644
--- a/var/spack/repos/builtin/packages/py-build/package.py
+++ b/var/spack/repos/builtin/packages/py-build/package.py
@@ -13,6 +13,7 @@ class PyBuild(PythonPackage):
license("MIT")
+ version("1.2.2", sha256="119b2fb462adef986483438377a13b2f42064a2a3a4161f24a0cca698a07ac8c")
version("1.2.1", sha256="526263f4870c26f26c433545579475377b2b7588b6f1eac76a001e873ae3e19d")
version("1.1.1", sha256="8eea65bb45b1aac2e734ba2cc8dad3a6d97d97901a395bd0ed3e7b46953d2a31")
version("1.1.0", sha256="f8da3eebb19668bb338b6eb256b1896ef4e87a5398bbdda97ee29ec474569f16")
@@ -25,21 +26,35 @@ class PyBuild(PythonPackage):
variant("virtualenv", default=False, description="Install optional virtualenv dependency")
- depends_on("py-flit-core@3.8:", when="@1:", type="build")
- depends_on("py-flit-core@3.4:", when="@0.10:", type="build")
- depends_on("py-packaging@19:", type=("build", "run"))
- depends_on("py-pyproject-hooks", when="@0.10.0:", type=("build", "run"))
- depends_on("py-colorama", when="platform=windows", type=("build", "run"))
- depends_on("py-importlib-metadata@4.6:", when="@1: ^python@:3.9", type=("build", "run"))
- depends_on("py-importlib-metadata@0.22:", when="@0 ^python@:3.7", type=("build", "run"))
- depends_on("py-tomli@1.1:", when="@1: ^python@:3.10", type=("build", "run"))
- depends_on("py-tomli@1.1:", when="@0.10", type=("build", "run"))
- depends_on("py-tomli@1:", when="@:0.9", type=("build", "run"))
+ with default_args(type="build"):
+ depends_on("py-flit-core@3.8:", when="@1:")
+ depends_on("py-flit-core@3.4:", when="@0.10:")
- # Historical dependencies
- depends_on("py-setuptools", when="@:0.9", type="build")
- depends_on("py-pep517@0.9.1:", when="@:0.9", type=("build", "run"))
- depends_on("py-virtualenv@20.0.35:", when="+virtualenv", type=("build", "run"))
+ # Historical dependencies
+ depends_on("py-setuptools", when="@:0.9")
+
+ with default_args(type=("build", "run")):
+ depends_on("python@3.8:", when="@1.2:")
+ depends_on("python@3.7:", when="@0.10:")
+ depends_on("python@3.6:", when="@0.6:")
+
+ depends_on("py-packaging@19.1:", when="@1.2:")
+ depends_on("py-packaging@19:")
+
+ depends_on("py-pyproject-hooks", when="@0.10.0:")
+
+ depends_on("py-colorama", when="platform=windows")
+
+ depends_on("py-importlib-metadata@4.6:", when="@1.1.0: ^python@:3.10.1")
+ depends_on("py-importlib-metadata@4.6:", when="@1: ^python@:3.9")
+ depends_on("py-importlib-metadata@0.22:", when="@0 ^python@:3.7")
+
+ depends_on("py-tomli@1.1:", when="@0.10: ^python@:3.10")
+ depends_on("py-tomli@1:", when="@:0.9")
+
+ # Historical dependencies
+ depends_on("py-pep517@0.9.1:", when="@:0.9")
+ depends_on("py-virtualenv@20.0.35:", when="+virtualenv")
# https://github.com/pypa/build/issues/266
# https://github.com/pypa/build/issues/406
diff --git a/var/spack/repos/builtin/packages/py-cartopy/package.py b/var/spack/repos/builtin/packages/py-cartopy/package.py
index eb78b2406da..df2da49259c 100644
--- a/var/spack/repos/builtin/packages/py-cartopy/package.py
+++ b/var/spack/repos/builtin/packages/py-cartopy/package.py
@@ -144,7 +144,7 @@ def url_for_version(self, version):
name = "Cartopy"
return url.format(name, version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Needed for `spack install --test=root py-cartopy`
library_dirs = []
for dep in self.spec.dependencies(deptype="link"):
@@ -163,5 +163,7 @@ def setup_build_environment(self, env):
setup_run_environment = setup_build_environment
# Needed for `spack test run py-foo` where `py-foo` depends on `py-cartopy`
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/py-cdo/package.py b/var/spack/repos/builtin/packages/py-cdo/package.py
index db281238bbd..1a495ce1f36 100644
--- a/var/spack/repos/builtin/packages/py-cdo/package.py
+++ b/var/spack/repos/builtin/packages/py-cdo/package.py
@@ -23,5 +23,5 @@ class PyCdo(PythonPackage):
depends_on("py-xarray", type=("build", "run"))
depends_on("py-six", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CDO", self.spec["cdo"].prefix.bin.cdo)
diff --git a/var/spack/repos/builtin/packages/py-cffi/package.py b/var/spack/repos/builtin/packages/py-cffi/package.py
index 049dfcf38c7..d29eda02d39 100644
--- a/var/spack/repos/builtin/packages/py-cffi/package.py
+++ b/var/spack/repos/builtin/packages/py-cffi/package.py
@@ -75,7 +75,7 @@ def flag_handler(self, name, flags):
return (flags, None, None)
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# This sets the compiler (and flags) that distutils will use
# to create the final shared library. It will use the
# compiler specified by the environment variable 'CC' for all
diff --git a/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py b/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py
index 09a055f10cc..01d3c661c2e 100644
--- a/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py
+++ b/var/spack/repos/builtin/packages/py-chainforgecodegen/package.py
@@ -24,6 +24,6 @@ class PyChainforgecodegen(PythonPackage):
depends_on("py-pyyaml", type=("build", "run"))
depends_on("py-setuptools", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix)
env.prepend_path("PYTHONPATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/py-charm4py/package.py b/var/spack/repos/builtin/packages/py-charm4py/package.py
index d9383b86d01..2d011b02e8e 100644
--- a/var/spack/repos/builtin/packages/py-charm4py/package.py
+++ b/var/spack/repos/builtin/packages/py-charm4py/package.py
@@ -63,7 +63,7 @@ class PyCharm4py(PythonPackage):
# This sets the SPACK_CHARM4PY_EXTRALIBS env var which the
# py-charm4py.makefile.patch adds to the build/link command for
# libcharm.so.
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SPACK_CHARM4PY_EXTRALIBS", self.spec["cuda"].libs.ld_flags)
def install_options(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-cinema-lib/package.py b/var/spack/repos/builtin/packages/py-cinema-lib/package.py
index e2e8486f239..4ef94b02a63 100644
--- a/var/spack/repos/builtin/packages/py-cinema-lib/package.py
+++ b/var/spack/repos/builtin/packages/py-cinema-lib/package.py
@@ -14,6 +14,8 @@ class PyCinemaLib(PythonPackage):
url = "https://github.com/cinemascience/cinema_lib/archive/1.2.1.tar.gz"
git = "https://github.com/cinemascience/cinema_lib.git"
+ tags = ["e4s"]
+
maintainers("EthanS94")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/py-cppy/package.py b/var/spack/repos/builtin/packages/py-cppy/package.py
index 5199ac5d410..99bbee58e29 100644
--- a/var/spack/repos/builtin/packages/py-cppy/package.py
+++ b/var/spack/repos/builtin/packages/py-cppy/package.py
@@ -13,6 +13,8 @@ class PyCppy(PythonPackage):
license("BSD-3-Clause")
+ version("1.3.1", sha256="55b5307c11874f242ea135396f398cb67a5bbde4fab3e3c3294ea5fce43a6d68")
+ version("1.3.0", sha256="da7413a286d5d31626ba35ed2c70ddfb033520cc81310088ba5a57d34039f604")
version("1.2.1", sha256="83b43bf17b1085ac15c5debdb42154f138b928234b21447358981f69d0d6fe1b")
version("1.1.0", sha256="4eda6f1952054a270f32dc11df7c5e24b259a09fddf7bfaa5f33df9fb4a29642")
diff --git a/var/spack/repos/builtin/packages/py-cryptography/package.py b/var/spack/repos/builtin/packages/py-cryptography/package.py
index 1e9387d692c..2872a3c3df2 100644
--- a/var/spack/repos/builtin/packages/py-cryptography/package.py
+++ b/var/spack/repos/builtin/packages/py-cryptography/package.py
@@ -81,6 +81,6 @@ class PyCryptography(PythonPackage):
# See reference: https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
depends_on("git", type="build", when="@35:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@35:"):
env.set("CARGO_NET_GIT_FETCH_WITH_CLI", "true")
diff --git a/var/spack/repos/builtin/packages/py-cupy/package.py b/var/spack/repos/builtin/packages/py-cupy/package.py
index 2211419d3f5..0d9f3c1b724 100644
--- a/var/spack/repos/builtin/packages/py-cupy/package.py
+++ b/var/spack/repos/builtin/packages/py-cupy/package.py
@@ -17,6 +17,9 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):
homepage = "https://cupy.dev/"
pypi = "cupy/cupy-8.0.0.tar.gz"
+ version("13.4.0", sha256="d4b60e5a1d3b89be40fad0845bb9fc467a653abe8660f752416fd38d24ab7fdb")
+ version("13.3.0", sha256="9a2a17af2b99cce91dd1366939c3805e3f51f9de5046df64f29ccbad3bdf78ed")
+ version("13.2.0", sha256="e4dbd2b2ed4159a5cc0c0f98a710a014950eb2c16eeb455e956128f3b3bd0d51")
version("13.1.0", sha256="5caf62288481a27713384523623045380ff42e618be4245f478238ed1786f32d")
version("12.1.0", sha256="f6d31989cdb2d96581da12822e28b102f29e254427195c2017eac327869b7320")
version("12.0.0", sha256="61ddbbef73d50d606bd5087570645f3c91ec9176c2566784c1d486d6a3404545")
@@ -28,12 +31,16 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):
variant("all", default=False, description="Enable optional py-scipy, optuna, and cython")
- depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("python@3.7:", when="@:11", type=("build", "run"))
depends_on("python@3.8:", when="@12:", type=("build", "run"))
depends_on("py-setuptools", type="build")
- depends_on("py-cython@0.29.22:2", type="build")
+ depends_on("py-cython@0.29.22:2", type="build", when="@:13.3")
+ depends_on(
+ "py-cython@3:3.0.10,3.0.12:", type="build", when="@13.4:"
+ ) # 3.0.11 broken likely because of cython#6335, fixed in 3.0.12
depends_on("py-fastrlock@0.5:", type=("build", "run"))
depends_on("py-numpy@1.20:1.25", when="@:11", type=("build", "run"))
depends_on("py-numpy@1.20:1.26", when="@12:", type=("build", "run"))
@@ -47,7 +54,10 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):
# Based on https://github.com/cupy/cupy/releases
depends_on("cuda@:11.9", when="@:11 +cuda")
depends_on("cuda@:12.1", when="@12:12.1.0 +cuda")
- depends_on("cuda@:12.4", when="@13: +cuda")
+ depends_on("cuda@:12.1", when="@13.0 +cuda")
+ depends_on("cuda@:12.4", when="@13.1:13.2 +cuda")
+ depends_on("cuda@:12.6", when="@13.3 +cuda")
+ depends_on("cuda@:12.8", when="@13.4: +cuda")
for a in CudaPackage.cuda_arch_values:
depends_on("nccl +cuda cuda_arch={0}".format(a), when="+cuda cuda_arch={0}".format(a))
@@ -78,8 +88,8 @@ class PyCupy(PythonPackage, CudaPackage, ROCmPackage):
conflicts("+cuda +rocm")
conflicts("+cuda cuda_arch=none")
- def setup_build_environment(self, env):
- env.set("CUPY_NUM_BUILD_JOBS", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("CUPY_NUM_BUILD_JOBS", str(make_jobs))
if self.spec.satisfies("+cuda"):
cuda_arch = self.spec.variants["cuda_arch"].value
arch_str = ";".join("arch=compute_{0},code=sm_{0}".format(i) for i in cuda_arch)
@@ -107,4 +117,4 @@ def setup_build_environment(self, env):
env.set("HIPCC", self.spec["hip"].hipcc)
env.set("ROCM_HOME", self.spec["hipcub"].prefix)
- env.set("CUPY_INSTALL_USE_HIP", 1)
+ env.set("CUPY_INSTALL_USE_HIP", "1")
diff --git a/var/spack/repos/builtin/packages/py-cvxopt/package.py b/var/spack/repos/builtin/packages/py-cvxopt/package.py
index d575f054ad1..48faa489501 100644
--- a/var/spack/repos/builtin/packages/py-cvxopt/package.py
+++ b/var/spack/repos/builtin/packages/py-cvxopt/package.py
@@ -55,7 +55,7 @@ class PyCvxopt(PythonPackage):
# depends_on('mosek@8:', when='+mosek')
depends_on("dsdp@5.8:", when="+dsdp")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# BLAS/LAPACK Libraries
@@ -78,7 +78,7 @@ def setup_build_environment(self, env):
# GSL Libraries
if "+gsl" in spec:
- env.set("CVXOPT_BUILD_GSL", 1)
+ env.set("CVXOPT_BUILD_GSL", "1")
# Directory containing libgsl
env.set("CVXOPT_GSL_LIB_DIR", spec["gsl"].libs.directories[0])
@@ -86,12 +86,12 @@ def setup_build_environment(self, env):
# Directory containing the GSL header files
env.set("CVXOPT_GSL_INC_DIR", spec["gsl"].headers.directories[0])
else:
- env.set("CVXOPT_BUILD_GSL", 0)
+ env.set("CVXOPT_BUILD_GSL", "0")
# FFTW Libraries
if "+fftw" in spec:
- env.set("CVXOPT_BUILD_FFTW", 1)
+ env.set("CVXOPT_BUILD_FFTW", "1")
# Directory containing libfftw3
env.set("CVXOPT_FFTW_LIB_DIR", spec["fftw"].libs.directories[0])
@@ -99,12 +99,12 @@ def setup_build_environment(self, env):
# Directory containing fftw.h
env.set("CVXOPT_FFTW_INC_DIR", spec["fftw"].headers.directories[0])
else:
- env.set("CVXOPT_BUILD_FFTW", 0)
+ env.set("CVXOPT_BUILD_FFTW", "0")
# GLPK Libraries
if "+glpk" in spec:
- env.set("CVXOPT_BUILD_GLPK", 1)
+ env.set("CVXOPT_BUILD_GLPK", "1")
# Directory containing libglpk
env.set("CVXOPT_GLPK_LIB_DIR", spec["glpk"].libs.directories[0])
@@ -112,12 +112,12 @@ def setup_build_environment(self, env):
# Directory containing glpk.h
env.set("CVXOPT_GLPK_INC_DIR", spec["glpk"].headers.directories[0])
else:
- env.set("CVXOPT_BUILD_GLPK", 0)
+ env.set("CVXOPT_BUILD_GLPK", "0")
# DSDP Libraries
if "+dsdp" in spec:
- env.set("CVXOPT_BUILD_DSDP", 1)
+ env.set("CVXOPT_BUILD_DSDP", "1")
# Directory containing libdsdp
env.set("CVXOPT_DSDP_LIB_DIR", spec["dsdp"].libs.directories[0])
diff --git a/var/spack/repos/builtin/packages/py-cython/package.py b/var/spack/repos/builtin/packages/py-cython/package.py
index 8f1bb659d48..74749519d89 100644
--- a/var/spack/repos/builtin/packages/py-cython/package.py
+++ b/var/spack/repos/builtin/packages/py-cython/package.py
@@ -114,7 +114,9 @@ def command(self):
"""Returns the Cython command"""
return Executable(self.prefix.bin.cython)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# If cython is used as a dep, ensure it's used even when pre-generated
# C files are distributed in the tarball. Cython is a small build dep, and
# the time generating C-files is typically less than compiling them. So it's
diff --git a/var/spack/repos/builtin/packages/py-darshan/package.py b/var/spack/repos/builtin/packages/py-darshan/package.py
index c81d47c2672..436dc32b5a6 100644
--- a/var/spack/repos/builtin/packages/py-darshan/package.py
+++ b/var/spack/repos/builtin/packages/py-darshan/package.py
@@ -13,6 +13,8 @@ class PyDarshan(PythonPackage):
maintainers("jeanbez", "shanedsnyder")
+ tags = ["e4s"]
+
# 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")
diff --git a/var/spack/repos/builtin/packages/py-deephyper/package.py b/var/spack/repos/builtin/packages/py-deephyper/package.py
index e6f9c5c0d0e..995730788f6 100644
--- a/var/spack/repos/builtin/packages/py-deephyper/package.py
+++ b/var/spack/repos/builtin/packages/py-deephyper/package.py
@@ -7,44 +7,116 @@
class PyDeephyper(PythonPackage):
- """Scalable asynchronous neural architecture and hyperparameter
- search for deep neural networks."""
+ """Scalable asynchronous hyperparameter optimization, neural architecture search,
+ and parallel ensemble of predictive models."""
homepage = "https://deephyper.readthedocs.io/"
- pypi = "deephyper/deephyper-0.4.2.tar.gz"
+ pypi = "deephyper/deephyper-0.9.3.tar.gz"
git = "https://github.com/deephyper/deephyper.git"
- maintainers("mdorier", "Deathn0t")
+ maintainers("mdorier", "Deathn0t", "bretteiffert")
+
+ tags = ["e4s"]
license("BSD-3-Clause")
+ # Versions
version("master", branch="master")
- version("0.6.0", sha256="cda2dd7c74bdca4203d9cd637c4f441595f77bae6d77ef8e4a056b005357de34")
- version("0.4.2", sha256="ee1811a22b08eff3c9098f63fbbb37f7c8703e2f878f2bdf2ec35a978512867f")
+ version("develop", branch="develop")
+ version("0.9.3", sha256="e28f9f6ca596edee7fa73f7377ca17ddab99ac4b3c7f15db27cb6e786f770f23")
+ version("0.8.1", sha256="ac27edd62ff81fcfb9b0b49f44963dadd8338be687f8f616d4cbdd6f5c68e511")
- depends_on("python@3.7:3.9", type=("build", "run"))
- depends_on("python@3.7:3.11", type=("build", "run"), when="@0.6.0")
+ # Variants for machine learning features
+ # exists upstream, disabled in Spack due to missing dependencies, contributions welcome
+ # variant("jax-cpu", default=False, description="Build with JAX dependencies")
+ variant("torch", default=False, description="Build with PyTorch dependencies")
- depends_on("py-setuptools@42:", type="build", when="@0.6.0")
- depends_on("py-setuptools@40:49.1", type="build")
- depends_on("py-wheel@0.36.2", type="build")
- depends_on("py-cython@0.29.24:", type="build", when="@0.6.0")
- depends_on("py-cython@0.29.24:2", type="build", when="@0.4.2")
+ # Variants for storage/parallel backends
+ variant("mpi", default=False, description="Build with MPI dependencies")
+ variant("ray", default=False, description="Build with Ray dependencies")
+ # exists upstream, disabled in Spack due to missing dependencies, contributions welcome
+ # variant("redis", default=False, description="Build with Redis dependencies")
- depends_on("py-configspace@0.4.20:", type=("build", "run"))
- depends_on("py-dm-tree", type=("build", "run"))
- depends_on("py-jinja2@:3.1", type=("build", "run"), when="@0.6.0")
- depends_on("py-jinja2@:3.0", type=("build", "run"), when="@0.4.2")
- depends_on("py-numpy@1.20:", type=("build", "run"), when="@0.6.0")
- depends_on("py-numpy", type=("build", "run"))
- depends_on("py-pandas@0.24.2:", type=("build", "run"))
- depends_on("py-packaging", type=("build", "run"))
- depends_on(
- "py-packaging@20.5:", type=("build", "run"), when="@0.6.0 target=aarch64: platform=darwin"
- )
- depends_on("py-scikit-learn@0.23.1:", type=("build", "run"))
- depends_on("py-scipy@1.7:", type=("build", "run"), when="@0.6.0")
- depends_on("py-scipy@0.19.1:", type=("build", "run"))
- depends_on("py-tqdm@4.64.0:", type=("build", "run"))
- depends_on("py-pyyaml", type=("build", "run"))
- depends_on("py-tinydb", type=("build", "run"), when="@0.4.2")
+ # Variants for developers
+ variant("dev", default=False, description="Build with dev dependencies")
+
+ with default_args(deprecated=True):
+ version("0.6.0", sha256="cda2dd7c74bdca4203d9cd637c4f441595f77bae6d77ef8e4a056b005357de34")
+ version("0.4.2", sha256="ee1811a22b08eff3c9098f63fbbb37f7c8703e2f878f2bdf2ec35a978512867f")
+
+ # Build backend
+ with default_args(type="build"):
+ depends_on("py-hatchling@1.25:", when="@master")
+ depends_on("py-hatchling@1.25:", when="@develop")
+ depends_on("py-hatchling@1.25:", when="@0.9:")
+
+ depends_on("py-setuptools@42:", when="@0.8:")
+ depends_on("py-setuptools@42:", when="@0.6.0")
+ depends_on("py-setuptools@40:49.1", when="@:0.6")
+
+ depends_on("py-cython@0.29.24:", when="@0.8:")
+ depends_on("py-cython@0.29.24:", when="@0.6.0")
+ depends_on("py-cython@0.29.24:2", when="@0.4.2")
+
+ depends_on("py-wheel@0.36.2", when="@:0.6")
+
+ # Python versions
+ with default_args(type=("build", "run")):
+ depends_on("python@3.10:", when="@0.9:")
+ depends_on("python@3.9:", when="@0.8:")
+ depends_on("python@3.7:3.11", when="@0.6.0")
+ depends_on("python@3.7:3.9", when="@0.4.2")
+
+ # Dependencies from setup/toml files
+ with default_args(type=("build", "run")):
+ depends_on("py-alive-progress@3.2.0:", when="@0.8:")
+ depends_on("py-configspace@1.1.1:", when="@0.8:")
+ depends_on("py-configspace@0.4.20:")
+ depends_on("py-cloudpickle", when="@0.9.3:")
+ depends_on("py-dm-tree")
+ depends_on("py-jinja2@3.1.4:", when="@0.8:")
+ depends_on("py-jinja2@:3.1", when="@0.6.0")
+ depends_on("py-jinja2@:3.0", when="@0.4.2")
+ depends_on("py-loky@3.4:", when="@0.9.3:")
+ depends_on("py-matplotlib")
+ depends_on("py-numpy@1.26.0:", when="@0.8:")
+ depends_on("py-numpy@1.20:", when="@0.6.0")
+ depends_on("py-numpy")
+ depends_on("openssl@3.4.0:", when="@0.8:")
+ depends_on("py-pandas@0.24.2:")
+ depends_on("py-packaging@20.5:", when="@0.6.0 target=aarch64: platform=darwin")
+ depends_on("py-packaging")
+ depends_on("py-parse", when="@0.8:")
+ depends_on("py-psutil", when="@0.8:")
+ depends_on("py-pymoo@0.6:", when="@0.8:")
+ depends_on("py-pyyaml", when="@0.8:")
+ depends_on("py-scikit-learn@0.23.1:")
+ depends_on("py-scipy@1.10:", when="@0.8:")
+ depends_on("py-scipy@1.7:", when="@0.6.0")
+ depends_on("py-scipy@0.19.1:")
+ depends_on("py-tqdm@4.64.0:")
+ depends_on("py-psutil", when="@0.8:")
+ depends_on("py-pymoo@0.6:", when="@0.8:")
+ depends_on("py-pyyaml")
+ depends_on("py-tinydb", when="@0.4.2")
+
+ with when("+dev"), default_args(type=("build", "run")):
+ depends_on("py-pytest")
+
+ # # Jax for GPU is not currently available on Spack
+ # with when("+jax-cpu"), default_args(type=("build", "run")):
+ # depends_on("py-jax@0.4.3:", when="@0.8:")
+ # depends_on("py-numpyro@0.15.3:", when="@0.8:")
+
+ with when("+torch"), default_args(type=("build", "run")):
+ depends_on("py-torch@2:", when="@0.8:")
+
+ with when("+mpi"), default_args(type=("build", "run")):
+ depends_on("py-mpi4py@3:", when="@0.8:")
+
+ with when("+ray"), default_args(type=("build", "run")):
+ depends_on("py-ray", when="@0.8:")
+
+ # with when("+redis"), default_args(type=("build", "run")):
+ # depends_on("py-redis")
+ # depends_on("redisjson")
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 d6c77f7dd0a..6aef560caa1 100644
--- a/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py
+++ b/var/spack/repos/builtin/packages/py-deepsig-biocomp/package.py
@@ -33,5 +33,5 @@ def create_share_folder(self):
for d in ("models", "tools"):
mv(d, share_dir)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("DEEPSIG_ROOT", self.prefix.share.deepsig)
diff --git a/var/spack/repos/builtin/packages/py-deepsig/package.py b/var/spack/repos/builtin/packages/py-deepsig/package.py
index 7127e64d94c..ce8ce76deea 100644
--- a/var/spack/repos/builtin/packages/py-deepsig/package.py
+++ b/var/spack/repos/builtin/packages/py-deepsig/package.py
@@ -12,16 +12,20 @@ class PyDeepsig(PythonPackage):
homepage = "https://github.com/Kaleidophon/deep-significance"
pypi = "deepsig/deepsig-1.2.1.tar.gz"
- version("1.2.1", sha256="8543630c00264898116a065f6461c131d026ef75d8703bc631a4fd2bafb31f89")
+ with default_args(deprecated=True):
+ version("1.2.1", sha256="8543630c00264898116a065f6461c131d026ef75d8703bc631a4fd2bafb31f89")
- depends_on("python@3.5.3:", type=("build", "run"))
- depends_on("py-setuptools", type="build")
- depends_on("py-numpy@1.19.5", type=("build", "run"))
- depends_on("py-scipy@1.6.0", type=("build", "run"))
- depends_on("py-tqdm@4.59.0", type=("build", "run"))
- depends_on("py-joblib@1.0.1", type=("build", "run"))
- depends_on("py-pandas@1.3.3", type=("build", "run"))
- depends_on("py-dill@0.3.4", type=("build", "run"))
+ with default_args(type="build"):
+ depends_on("py-setuptools", type="build")
+
+ with default_args(type=("build", "run")):
+ depends_on("python@3.5.3:")
+ depends_on("py-numpy@1.19.5")
+ depends_on("py-scipy@1.6.0")
+ depends_on("py-tqdm@4.59.0")
+ depends_on("py-joblib@1.0.1")
+ depends_on("py-pandas@1.3.3")
+ depends_on("py-dill@0.3.4")
def patch(self):
filter_file("README_RAW.md", "README.md", "setup.py", string=True)
diff --git a/var/spack/repos/builtin/packages/py-devito/package.py b/var/spack/repos/builtin/packages/py-devito/package.py
index 0c46c04225a..4265f46ea13 100644
--- a/var/spack/repos/builtin/packages/py-devito/package.py
+++ b/var/spack/repos/builtin/packages/py-devito/package.py
@@ -65,6 +65,6 @@ def add_examples_dir(self):
# Add file `__init__py` to examples/ so it is picked up by setuptools
touch("examples/__init__.py")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Make benchmark.py available
env.prepend_path("DEVITO_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/py-dgl/package.py b/var/spack/repos/builtin/packages/py-dgl/package.py
index 596c7e1b359..a8f5f39ccc5 100644
--- a/var/spack/repos/builtin/packages/py-dgl/package.py
+++ b/var/spack/repos/builtin/packages/py-dgl/package.py
@@ -139,7 +139,7 @@ def install(self, spec, prefix):
# Work around installation bug: https://github.com/dmlc/dgl/issues/1379
install_tree(prefix.dgl, prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# https://docs.dgl.ai/install/backend.html
backend = self.spec.variants["backend"].value
env.set("DGLBACKEND", backend)
diff --git a/var/spack/repos/builtin/packages/py-dill/package.py b/var/spack/repos/builtin/packages/py-dill/package.py
index aab44c04104..a21389a9478 100644
--- a/var/spack/repos/builtin/packages/py-dill/package.py
+++ b/var/spack/repos/builtin/packages/py-dill/package.py
@@ -13,6 +13,9 @@ class PyDill(PythonPackage):
license("BSD-3-Clause")
+ version("0.3.9", sha256="81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c")
+ version("0.3.8", sha256="3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca")
+ version("0.3.7", sha256="cc1c8b182eb3013e24bd475ff2e9295af86c1a38eb1aff128dac8962a9ce3c03")
version("0.3.6", sha256="e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373")
version("0.3.5.1", sha256="d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86")
version("0.3.4", sha256="9f9734205146b2b353ab3fec9af0070237b6ddae78452af83d2fca84d739e675")
@@ -28,6 +31,8 @@ class PyDill(PythonPackage):
version("0.2.1", sha256="a54401bdfae419cfe1c9e0b48e9b290afccaa413d2319d9bb0fdb85c130a7923")
version("0.2", sha256="aba8d4c81c4136310e6ce333bd6f4f3ea2d53bd367e2f69c864428f260c0308c")
+ depends_on("python@3.7:", when="@0.3.6:", type=("build", "run"))
+ depends_on("python@3.8:", when="@0.3.8:", type=("build", "run"))
depends_on("py-setuptools@42:", when="@0.3.5.1:", type="build")
depends_on("py-setuptools@0.6:", type="build")
@@ -37,7 +42,7 @@ class PyDill(PythonPackage):
# [this issue]: https://github.com/uqfoundation/dill/issues/566
# [fixing PR]: https://github.com/uqfoundation/dill/pull/567
# [this commit]: https://github.com/uqfoundation/dill/commit/23c47455da62d4cb8582d8f98f1de9fc6e0971ad
- patch("fix-is-builtin-module.patch", when="@0.3.5:")
+ patch("fix-is-builtin-module.patch", when="@0.3.5:0.3.6")
def url_for_version(self, version):
url = "https://pypi.io/packages/source/d/dill/"
diff --git a/var/spack/repos/builtin/packages/py-dlio-profiler-py/package.py b/var/spack/repos/builtin/packages/py-dlio-profiler-py/package.py
index 204e0bbe7b0..4fdebcd7664 100644
--- a/var/spack/repos/builtin/packages/py-dlio-profiler-py/package.py
+++ b/var/spack/repos/builtin/packages/py-dlio-profiler-py/package.py
@@ -53,7 +53,7 @@ class PyDlioProfilerPy(PythonPackage):
depends_on("ninja", type="build")
depends_on("cmake@3.12:", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@0.0.6:"):
env.set("DLIO_PROFILER_INSTALL_DIR", self.prefix)
env.set("DLIO_PROFILER_PYTHON_SITE", python_purelib)
diff --git a/var/spack/repos/builtin/packages/py-eccodes/package.py b/var/spack/repos/builtin/packages/py-eccodes/package.py
index fa86ae6f600..f987b1bf237 100644
--- a/var/spack/repos/builtin/packages/py-eccodes/package.py
+++ b/var/spack/repos/builtin/packages/py-eccodes/package.py
@@ -24,20 +24,24 @@ class PyEccodes(PythonPackage):
depends_on("py-findlibs", type=("build", "run"))
depends_on("eccodes@2.21.0:+shared", type="run")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
eccodes_spec = self.spec["eccodes:c,shared"]
# ECCODES_HOME has the highest precedence when searching for the library with py-findlibs:
env.set("ECCODES_HOME", eccodes_spec.prefix)
# but not if ecmwflibs (https://pypi.org/project/ecmwflibs/) is in the PYTHONPATH:
env.set("ECMWFLIBS_ECCODES", eccodes_spec.libs.files[0])
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_build_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_build_environment(env)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_build_environment(env)
def test_selfcheck(self):
diff --git a/var/spack/repos/builtin/packages/py-espresso/package.py b/var/spack/repos/builtin/packages/py-espresso/package.py
index 1f99ec6f45c..51bd3cbc610 100644
--- a/var/spack/repos/builtin/packages/py-espresso/package.py
+++ b/var/spack/repos/builtin/packages/py-espresso/package.py
@@ -48,6 +48,9 @@ class PyEspresso(CMakePackage):
variant("hdf5", default=True, description="Enable HDF5 backend")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("cmake@3.0:", type="build")
depends_on("mpi")
depends_on("boost+serialization+filesystem+system+python+mpi")
diff --git a/var/spack/repos/builtin/packages/py-fastavro/package.py b/var/spack/repos/builtin/packages/py-fastavro/package.py
index 26b0c1736d5..0bd6ef1f052 100644
--- a/var/spack/repos/builtin/packages/py-fastavro/package.py
+++ b/var/spack/repos/builtin/packages/py-fastavro/package.py
@@ -26,9 +26,9 @@ class PyFastavro(PythonPackage):
version("0.23.3", sha256="4e4bebe7b43b5cdad030bdbeb7f7f0ccb537ea025a9e28c7a4826876872fc84b")
version("0.23.2", sha256="3b31707d6eaa1e98fc60536d0b3483bafb78be39bf9f0a1affe1b353e70bd5b2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Use cython for building as *.c files are missing from repo
- env.set("FASTAVRO_USE_CYTHON", 1)
+ env.set("FASTAVRO_USE_CYTHON", "1")
depends_on("python@3.5:", type=("build", "run"))
depends_on("py-setuptools", type="build")
diff --git a/var/spack/repos/builtin/packages/py-flash-attn/package.py b/var/spack/repos/builtin/packages/py-flash-attn/package.py
index 61fe469b629..acf3256b07e 100644
--- a/var/spack/repos/builtin/packages/py-flash-attn/package.py
+++ b/var/spack/repos/builtin/packages/py-flash-attn/package.py
@@ -49,6 +49,6 @@ class PyFlashAttn(PythonPackage):
depends_on("python@3.7:", type=("build", "run"), when="@:2.5")
depends_on("python@3.8:", type=("build", "run"), when="@2.6:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# If oom error, try lowering the number of jobs with `spack install -j`
- env.set("MAX_JOBS", make_jobs)
+ env.set("MAX_JOBS", str(make_jobs))
diff --git a/var/spack/repos/builtin/packages/py-flatbuffers/package.py b/var/spack/repos/builtin/packages/py-flatbuffers/package.py
index 4f667ed7dd0..b17ece10bf5 100644
--- a/var/spack/repos/builtin/packages/py-flatbuffers/package.py
+++ b/var/spack/repos/builtin/packages/py-flatbuffers/package.py
@@ -25,4 +25,6 @@ class PyFlatbuffers(PythonPackage):
version("2.0", sha256="12158ab0272375eab8db2d663ae97370c33f152b27801fa6024e1d6105fd4dd2")
version("1.12", sha256="63bb9a722d5e373701913e226135b28a6f6ac200d5cc7b4d919fa38d73b44610")
+ # https://setuptools.pypa.io/en/latest/history.html#v77-0-0
+ depends_on("py-setuptools@:76", type="build", when="@:24.3.25")
depends_on("py-setuptools", type="build")
diff --git a/var/spack/repos/builtin/packages/py-flit-core/package.py b/var/spack/repos/builtin/packages/py-flit-core/package.py
index f77761a91f2..56e228b6388 100644
--- a/var/spack/repos/builtin/packages/py-flit-core/package.py
+++ b/var/spack/repos/builtin/packages/py-flit-core/package.py
@@ -19,6 +19,8 @@ class PyFlitCore(PythonPackage):
license("BSD-3-Clause")
+ version("3.12.0", sha256="18f63100d6f94385c6ed57a72073443e1a71a4acb4339491615d0f16d6ff01b2")
+ version("3.11.0", sha256="6ceeee3219e9d2ea282041f3e027c441597b450b33007cb81168e887b6113a8f")
version("3.10.1", sha256="66e5b87874a0d6e39691f0e22f09306736b633548670ad3c09ec9db03c5662f7")
version("3.9.0", sha256="72ad266176c4a3fcfab5f2930d76896059851240570ce9a98733b658cb786eba")
version("3.8.0", sha256="b305b30c99526df5e63d6022dd2310a0a941a187bd3884f4c8ef0418df6c39f3")
@@ -33,6 +35,11 @@ class PyFlitCore(PythonPackage):
version("3.0.0", sha256="a465052057e2d6d957e6850e9915245adedfc4fd0dd5737d0791bf3132417c2d")
version("2.3.0", sha256="a50bcd8bf5785e3a7d95434244f30ba693e794c5204ac1ee908fc07c4acdbf80")
+ with default_args(type=("build", "run")):
+ depends_on("python@3.6:", when="@3.4:")
+ depends_on("python@3.4:", when="@3.0:")
+ depends_on("python@2.7,3.4:", when="@2.3:")
+
# flit_core/build_thyself.py
depends_on("py-tomli", when="@3.4:3.5", type="run")
depends_on("py-toml", when="@3.1:3.3", type="run")
diff --git a/var/spack/repos/builtin/packages/py-flit/package.py b/var/spack/repos/builtin/packages/py-flit/package.py
index f30b409be0c..5200596053d 100644
--- a/var/spack/repos/builtin/packages/py-flit/package.py
+++ b/var/spack/repos/builtin/packages/py-flit/package.py
@@ -14,20 +14,37 @@ class PyFlit(PythonPackage):
license("BSD-3-Clause")
+ version("3.12.0", sha256="1c80f34dd96992e7758b40423d2809f48f640ca285d0b7821825e50745ec3740")
+ version("3.11.0", sha256="58d0a07f684c315700c9c54a661a1130995798c3e495db0db53ce6e7d0121825")
+ version("3.10.1", sha256="9c6258ae76d218ce60f9e39a43ca42006a3abcc5c44ea6bb2a1daa13857a8f1a")
+ version("3.10.0", sha256="dadca58d5097db62884d25d70b572f104954927daadc8cee449739215b7237fd")
version("3.9.0", sha256="d75edf5eb324da20d53570a6a6f87f51e606eee8384925cd66a90611140844c7")
version("3.8.0", sha256="d0f2a8f4bd45dc794befbf5839ecc0fd3830d65a57bd52b5997542fac5d5e937")
version("3.7.1", sha256="3c9bd9c140515bfe62dd938c6610d10d6efb9e35cc647fc614fe5fb3a5036682")
version("3.6.0", sha256="b1464e006df4df4c8eeb37671c0e0ce66e1d04e4a36d91b702f180a25fde3c11")
version("3.3.0", sha256="65fbe22aaa7f880b776b20814bd80b0afbf91d1f95b17235b608aa256325ce57")
- depends_on("python@3.6:", type=("build", "run"))
- depends_on("py-flit-core@3.9.0:3", when="@3.9.0:3", type=("build", "run"))
- depends_on("py-flit-core@3.8.0:3", when="@3.8.0:3.8", type=("build", "run"))
- depends_on("py-flit-core@3.7.1:3", when="@3.7.1:3.7", type=("build", "run"))
- depends_on("py-flit-core@3.6.0:3", when="@3.6.0:3.6", type=("build", "run"))
- depends_on("py-flit-core@3.3.0:3", when="@3.3.0:3.3", type=("build", "run"))
- depends_on("py-requests", type=("build", "run"))
- depends_on("py-docutils", type=("build", "run"))
- depends_on("py-tomli", when="@3.4:3.7", type=("build", "run"))
- depends_on("py-tomli-w", when="@3.4:", type=("build", "run"))
- depends_on("py-toml", when="@3.3.0:3.3", type=("build", "run"))
+ with default_args(type=("build", "run")):
+ depends_on("python@3.8:", when="@3.10:")
+ depends_on("python@3.6:")
+
+ depends_on("py-flit-core@3.12.0:3", when="@3.12.0:3")
+ depends_on("py-flit-core@3.11.0:3", when="@3.11.0:3")
+ depends_on("py-flit-core@3.10.1:3", when="@3.10.1:3")
+ depends_on("py-flit-core@3.10.0:3", when="@3.10.0:3")
+ depends_on("py-flit-core@3.9.0:3", when="@3.9.0:3")
+ depends_on("py-flit-core@3.8.0:3", when="@3.8.0:3.8")
+ depends_on("py-flit-core@3.7.1:3", when="@3.7.1:3.7")
+ depends_on("py-flit-core@3.6.0:3", when="@3.6.0:3.6")
+ depends_on("py-flit-core@3.3.0:3", when="@3.3.0:3.3")
+
+ with default_args(type=("run")):
+ depends_on("py-pip", when="@3.10:")
+
+ depends_on("py-requests")
+
+ depends_on("py-docutils")
+
+ depends_on("py-tomli", when="@3.4:3.7")
+ depends_on("py-tomli-w", when="@3.4:")
+ depends_on("py-toml", when="@3.3.0:3.3")
diff --git a/var/spack/repos/builtin/packages/py-flye/package.py b/var/spack/repos/builtin/packages/py-flye/package.py
index 842549d27b0..cc117ba03fe 100644
--- a/var/spack/repos/builtin/packages/py-flye/package.py
+++ b/var/spack/repos/builtin/packages/py-flye/package.py
@@ -36,7 +36,7 @@ class PyFlye(PythonPackage):
conflicts("%clang@:3.2", msg=msg)
conflicts("%apple-clang@:4.9", msg=msg)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.target.family == "aarch64":
env.set("arm_neon", "1")
env.set("aarch64", "1")
diff --git a/var/spack/repos/builtin/packages/py-frozendict/package.py b/var/spack/repos/builtin/packages/py-frozendict/package.py
index 797a439b6c6..3446cf0a3c9 100644
--- a/var/spack/repos/builtin/packages/py-frozendict/package.py
+++ b/var/spack/repos/builtin/packages/py-frozendict/package.py
@@ -22,7 +22,7 @@ class PyFrozendict(PythonPackage):
depends_on("python@3.6:", type=("build", "run"))
depends_on("py-setuptools", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# C extension is not supported for 3.11+. See also
# https://github.com/Marco-Sulla/python-frozendict/issues/68
if self.spec.satisfies("^python@3.11:"):
diff --git a/var/spack/repos/builtin/packages/py-gemmforge/package.py b/var/spack/repos/builtin/packages/py-gemmforge/package.py
index 90be279274c..725440e8509 100644
--- a/var/spack/repos/builtin/packages/py-gemmforge/package.py
+++ b/var/spack/repos/builtin/packages/py-gemmforge/package.py
@@ -21,6 +21,6 @@ class PyGemmforge(PythonPackage):
depends_on("py-pyyaml", type=("build", "run"))
depends_on("py-setuptools", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix)
env.prepend_path("PYTHONPATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/py-gensim/package.py b/var/spack/repos/builtin/packages/py-gensim/package.py
index bca76235649..273508a281c 100644
--- a/var/spack/repos/builtin/packages/py-gensim/package.py
+++ b/var/spack/repos/builtin/packages/py-gensim/package.py
@@ -42,5 +42,5 @@ class PyGensim(PythonPackage):
depends_on("py-smart-open@1.7.0:", when="@3.8.0", type=("build", "run"))
depends_on("py-smart-open@1.8.1:", when="@3.8.1:", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GENSIM_CYTHON_REQUIRES", "Cython=={0}".format(self.spec["py-cython"].version))
diff --git a/var/spack/repos/builtin/packages/py-geopmdpy/package.py b/var/spack/repos/builtin/packages/py-geopmdpy/package.py
index 458fe13232a..5fa38ad8e34 100644
--- a/var/spack/repos/builtin/packages/py-geopmdpy/package.py
+++ b/var/spack/repos/builtin/packages/py-geopmdpy/package.py
@@ -41,7 +41,7 @@ def build_directory(self):
else:
return "geopmdpy"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if not self.spec.version.isdevelop():
env.set("SETUPTOOLS_SCM_PRETEND_VERSION", self.version)
diff --git a/var/spack/repos/builtin/packages/py-geopmpy/package.py b/var/spack/repos/builtin/packages/py-geopmpy/package.py
index 9504ceb88b2..3c64581e55e 100644
--- a/var/spack/repos/builtin/packages/py-geopmpy/package.py
+++ b/var/spack/repos/builtin/packages/py-geopmpy/package.py
@@ -35,6 +35,6 @@ class PyGeopmpy(PythonPackage):
build_directory = "geopmpy"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if not self.spec.version.isdevelop():
env.set("SETUPTOOLS_SCM_PRETEND_VERSION", self.version)
diff --git a/var/spack/repos/builtin/packages/py-gidgetlab/package.py b/var/spack/repos/builtin/packages/py-gidgetlab/package.py
index 35e3c8e47cd..a3f862ff815 100644
--- a/var/spack/repos/builtin/packages/py-gidgetlab/package.py
+++ b/var/spack/repos/builtin/packages/py-gidgetlab/package.py
@@ -18,13 +18,19 @@ class PyGidgetlab(PythonPackage):
license("Apache-2.0")
version("main", branch="main")
+ version("2.1.0", sha256="60c39516261b788e7643ae12fae106a79329450d908e821c9a591ab6c52ffe95")
+ version("2.0.1", sha256="bce8f8553c41823bff330eb9e1f0951f19feb7fc76a9effe3038f780377d984e")
+ version("2.0.0", sha256="f109c12a47c4b2cadd5485c6574d003807a07796585d75a21bd9e0d4ecd63c14")
version("1.1.0", sha256="314ec2cddc898317ec45d99068665dbf33c0fee1f52df6671f28ad35bb51f902")
variant(
"aiohttp", default=False, description="Enable aiohttp functionality through dependency."
)
+ depends_on("python@:3.12", type=("build", "run"), when="@:1")
+ depends_on("py-setuptools@60:", type=("build", "run"), when="@2.0.0:")
depends_on("py-setuptools@45:", type=("build", "run"))
+ depends_on("py-setuptools-scm@8.0:", type="build", when="@2.0.0:")
depends_on("py-setuptools-scm@6.2:", type="build")
depends_on("py-aiohttp", type=("build", "run"), when="+aiohttp")
diff --git a/var/spack/repos/builtin/packages/py-git-review/package.py b/var/spack/repos/builtin/packages/py-git-review/package.py
index 15f044c96ee..d9648c797c4 100644
--- a/var/spack/repos/builtin/packages/py-git-review/package.py
+++ b/var/spack/repos/builtin/packages/py-git-review/package.py
@@ -28,5 +28,5 @@ class PyGitReview(PythonPackage):
depends_on("py-requests@1.1:", type=("build", "run"))
depends_on("git", type=("run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PBR_VERSION", str(self.spec.version))
diff --git a/var/spack/repos/builtin/packages/py-gmxapi/package.py b/var/spack/repos/builtin/packages/py-gmxapi/package.py
index eab4263e070..f205a9b5de7 100644
--- a/var/spack/repos/builtin/packages/py-gmxapi/package.py
+++ b/var/spack/repos/builtin/packages/py-gmxapi/package.py
@@ -40,7 +40,7 @@ class PyGmxapi(PythonPackage):
depends_on("py-pybind11@2.6:", when="@:0.4", type=("build", "run"))
depends_on("py-pytest@4.6:", type="test")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GROMACS_DIR", self.spec["gromacs"].prefix)
env.set("gmxapi_ROOT", self.spec["gromacs"].prefix)
env.set("Python3_ROOT", self.spec["python"].home)
diff --git a/var/spack/repos/builtin/packages/py-google-crc32c/package.py b/var/spack/repos/builtin/packages/py-google-crc32c/package.py
index 3f1409fd231..08bd08e37ed 100644
--- a/var/spack/repos/builtin/packages/py-google-crc32c/package.py
+++ b/var/spack/repos/builtin/packages/py-google-crc32c/package.py
@@ -23,5 +23,5 @@ class PyGoogleCrc32c(PythonPackage):
depends_on("py-setuptools", type="build")
depends_on("google-crc32c", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CRC32C_INSTALL_PREFIX", self.spec["google-crc32c"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-gosam/package.py b/var/spack/repos/builtin/packages/py-gosam/package.py
index 463b8ae57aa..df8a484a208 100644
--- a/var/spack/repos/builtin/packages/py-gosam/package.py
+++ b/var/spack/repos/builtin/packages/py-gosam/package.py
@@ -39,7 +39,7 @@ class PyGosam(Package):
depends_on("gosam-contrib", type="link")
depends_on("python@3:", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
gosam_contrib_lib_dir = self.spec["gosam-contrib"].prefix.lib
env.prepend_path("LD_LIBRARY_PATH", gosam_contrib_lib_dir)
diff --git a/var/spack/repos/builtin/packages/py-grpcio-tools/package.py b/var/spack/repos/builtin/packages/py-grpcio-tools/package.py
index fd0ffd119ef..1dee6510326 100644
--- a/var/spack/repos/builtin/packages/py-grpcio-tools/package.py
+++ b/var/spack/repos/builtin/packages/py-grpcio-tools/package.py
@@ -37,12 +37,12 @@ class PyGrpcioTools(PythonPackage):
depends_on("c-ares")
depends_on("re2+shared")
- def setup_build_environment(self, env):
- env.set("GRPC_PYTHON_BUILD_WITH_CYTHON", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_OPENSSL", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_ZLIB", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_CARES", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_RE2", True)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("GRPC_PYTHON_BUILD_WITH_CYTHON", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_OPENSSL", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_ZLIB", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_CARES", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_RE2", "True")
# https://github.com/grpc/grpc/pull/24449
env.set("GRPC_BUILD_WITH_BORING_SSL_ASM", "")
env.set("GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS", str(make_jobs))
diff --git a/var/spack/repos/builtin/packages/py-grpcio/package.py b/var/spack/repos/builtin/packages/py-grpcio/package.py
index a43760c8fc4..d55796c8b81 100644
--- a/var/spack/repos/builtin/packages/py-grpcio/package.py
+++ b/var/spack/repos/builtin/packages/py-grpcio/package.py
@@ -13,6 +13,7 @@ class PyGrpcio(PythonPackage):
license("Apache-2.0")
+ version("1.71.0", sha256="2b85f7820475ad3edec209d3d89a7909ada16caab05d3f2e08a7e8ae3200a55c")
version("1.64.0", sha256="257baf07f53a571c215eebe9679c3058a313fd1d1f7c4eede5a8660108c52d9c")
version("1.63.0", sha256="f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1")
version("1.62.2", sha256="c77618071d96b7a8be2c10701a98537823b9c65ba256c0b9067e0594cdbd954d")
@@ -83,12 +84,12 @@ class PyGrpcio(PythonPackage):
patch("30522.diff", when="@1.48") # https://github.com/grpc/grpc/issues/30372
- def setup_build_environment(self, env):
- env.set("GRPC_PYTHON_BUILD_WITH_CYTHON", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_OPENSSL", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_ZLIB", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_CARES", True)
- env.set("GRPC_PYTHON_BUILD_SYSTEM_RE2", True)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("GRPC_PYTHON_BUILD_WITH_CYTHON", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_OPENSSL", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_ZLIB", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_CARES", "True")
+ env.set("GRPC_PYTHON_BUILD_SYSTEM_RE2", "True")
# https://github.com/grpc/grpc/pull/24449
env.set("GRPC_BUILD_WITH_BORING_SSL_ASM", "")
env.set("GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS", str(make_jobs))
diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py
index 265e3f12aab..ecc98ab5ce1 100644
--- a/var/spack/repos/builtin/packages/py-h5py/package.py
+++ b/var/spack/repos/builtin/packages/py-h5py/package.py
@@ -96,7 +96,7 @@ def flag_handler(self, name, flags):
flags.append("-Wno-error=incompatible-pointer-types-discards-qualifiers")
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5_DIR", self.spec["hdf5"].prefix)
if "+mpi" in self.spec:
env.set("CC", self.spec["mpi"].mpicc)
diff --git a/var/spack/repos/builtin/packages/py-hatch/package.py b/var/spack/repos/builtin/packages/py-hatch/package.py
index f653f593942..31464d689ba 100644
--- a/var/spack/repos/builtin/packages/py-hatch/package.py
+++ b/var/spack/repos/builtin/packages/py-hatch/package.py
@@ -13,6 +13,7 @@ class PyHatch(PythonPackage):
license("MIT")
+ version("1.13.0", sha256="5e1a75770cfe8f3ebae3abfded3a976238b0acefd19cdabc5245597525b8066f")
version("1.12.0", sha256="ae80478d10312df2b44d659c93bc2ed4d33aecddce4b76378231bdf81c8bf6ad")
depends_on("python@3.8:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/py-hatchling/package.py b/var/spack/repos/builtin/packages/py-hatchling/package.py
index 6d24eff76cd..27d8a1b5f50 100644
--- a/var/spack/repos/builtin/packages/py-hatchling/package.py
+++ b/var/spack/repos/builtin/packages/py-hatchling/package.py
@@ -14,6 +14,7 @@ class PyHatchling(PythonPackage):
license("MIT", checked_by="tgamblin")
+ version("1.27.0", sha256="971c296d9819abb3811112fc52c7a9751c8d381898f36533bb16f9791e941fd6")
version("1.25.0", sha256="7064631a512610b52250a4d3ff1bd81551d6d1431c4eb7b72e734df6c74f4262")
version("1.24.2", sha256="41ddc27cdb25db9ef7b68bef075f829c84cb349aa1bff8240797d012510547b0")
version("1.21.0", sha256="5c086772357a50723b825fd5da5278ac7e3697cdf7797d07541a6c90b6ff754c")
@@ -25,11 +26,23 @@ class PyHatchling(PythonPackage):
version("1.8.1", sha256="448b04b23faed669b2b565b998ac955af4feea66c5deed3a1212ac9399d2e1cd")
version("1.4.1", sha256="13461b42876ade4f75ee5d2a2c656b288ca0aab7f048ef66657ef166996b2118")
- depends_on("py-editables@0.3:", type=("build", "run"))
- depends_on("py-packaging@21.3:", type=("build", "run"))
- depends_on("py-packaging@23.2:", when="@1.24.2:", type=("build", "run"))
- depends_on("py-pathspec@0.10.1:", when="@1.9:", type=("build", "run"))
- depends_on("py-pathspec@0.9:", type=("build", "run"))
- depends_on("py-pluggy@1:", type=("build", "run"))
- depends_on("py-tomli@1.2.2:", when="^python@:3.10", type=("build", "run"))
- depends_on("py-trove-classifiers", when="@1.14:", type=("build", "run"))
+ with default_args(type=("build", "run")):
+ depends_on("python@3.8:", when="@1.18:")
+ depends_on("python@3.7:", when="@1.12:")
+
+ depends_on("py-editables@0.3:", when="@:1.21")
+
+ depends_on("py-importlib-metadata", when="@1.12:1.17 ^python@:3.7")
+
+ depends_on("py-packaging@24.2:", when="@1.26:")
+ depends_on("py-packaging@23.2:", when="@1.23:")
+ depends_on("py-packaging@21.3:")
+
+ depends_on("py-pathspec@0.10.1:", when="@1.9:")
+ depends_on("py-pathspec@0.9:")
+
+ depends_on("py-pluggy@1:")
+
+ depends_on("py-tomli@1.2.2:", when="^python@:3.10")
+
+ depends_on("py-trove-classifiers", when="@1.14:")
diff --git a/var/spack/repos/builtin/packages/py-horovod/package.py b/var/spack/repos/builtin/packages/py-horovod/package.py
index 2d91b08e58b..f28516eb970 100644
--- a/var/spack/repos/builtin/packages/py-horovod/package.py
+++ b/var/spack/repos/builtin/packages/py-horovod/package.py
@@ -17,6 +17,8 @@ class PyHorovod(PythonPackage, CudaPackage):
license("Apache-2.0")
maintainers("adamjstewart", "aweits", "tgaddair", "thomas-bouvier")
+ tags = ["e4s"]
+
version("master", branch="master")
version("0.28.1", tag="v0.28.1", commit="1d217b59949986d025f6db93c49943fb6b6cc78f")
version("0.28.0", tag="v0.28.0", commit="587d72004736209a93ebda8cec0acdb7870db583")
@@ -236,7 +238,7 @@ def import_modules(self):
return modules
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://github.com/horovod/horovod/blob/master/docs/install.rst#environment-variables
# Build system
@@ -247,29 +249,29 @@ def setup_build_environment(self, env):
# Frameworks
if "frameworks=tensorflow" in self.spec:
- env.set("HOROVOD_WITH_TENSORFLOW", 1)
+ env.set("HOROVOD_WITH_TENSORFLOW", "1")
else:
- env.set("HOROVOD_WITHOUT_TENSORFLOW", 1)
+ env.set("HOROVOD_WITHOUT_TENSORFLOW", "1")
if "frameworks=pytorch" in self.spec:
- env.set("HOROVOD_WITH_PYTORCH", 1)
+ env.set("HOROVOD_WITH_PYTORCH", "1")
else:
- env.set("HOROVOD_WITHOUT_PYTORCH", 1)
+ env.set("HOROVOD_WITHOUT_PYTORCH", "1")
if "frameworks=mxnet" in self.spec:
- env.set("HOROVOD_WITH_MXNET", 1)
+ env.set("HOROVOD_WITH_MXNET", "1")
env.set("MXNET_INCLUDE_PATH", self.spec["mxnet"].prefix.include)
env.set("MXNET_LIBRARY_PATH", join_path(self.spec["mxnet"].libs[0]))
else:
- env.set("HOROVOD_WITHOUT_MXNET", 1)
+ env.set("HOROVOD_WITHOUT_MXNET", "1")
# Controllers
if "controllers=mpi" in self.spec or "tensor_ops=mpi" in self.spec:
- env.set("HOROVOD_WITH_MPI", 1)
+ env.set("HOROVOD_WITH_MPI", "1")
else:
- env.set("HOROVOD_WITHOUT_MPI", 1)
+ env.set("HOROVOD_WITHOUT_MPI", "1")
if "controllers=gloo" in self.spec or "tensor_ops=gloo" in self.spec:
- env.set("HOROVOD_WITH_GLOO", 1)
+ env.set("HOROVOD_WITH_GLOO", "1")
else:
- env.set("HOROVOD_WITHOUT_GLOO", 1)
+ env.set("HOROVOD_WITHOUT_GLOO", "1")
# Tensor Operations
if "tensor_ops=nccl" in self.spec:
diff --git a/var/spack/repos/builtin/packages/py-htgettoken/package.py b/var/spack/repos/builtin/packages/py-htgettoken/package.py
index 33b13bdb901..9162ed20879 100644
--- a/var/spack/repos/builtin/packages/py-htgettoken/package.py
+++ b/var/spack/repos/builtin/packages/py-htgettoken/package.py
@@ -35,7 +35,7 @@ class PyHtgettoken(PythonPackage):
depends_on("py-paramiko", type=("build", "run"))
depends_on("py-urllib3", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
dir = os.environ.get("XDG_RUNTIME_DIR", "/tmp")
uid = os.environ.get("UID", str(os.geteuid()))
file = join_path(dir, "bt_u" + uid)
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 ec41d4909b1..038197728b5 100644
--- a/var/spack/repos/builtin/packages/py-huggingface-hub/package.py
+++ b/var/spack/repos/builtin/packages/py-huggingface-hub/package.py
@@ -58,6 +58,6 @@ class PyHuggingfaceHub(PythonPackage):
with when("+hf_transfer"):
depends_on("py-hf-transfer@0.1.4:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+hf_transfer" in self.spec:
- env.set("HF_HUB_ENABLE_HF_TRANSFER", 1)
+ env.set("HF_HUB_ENABLE_HF_TRANSFER", "1")
diff --git a/var/spack/repos/builtin/packages/py-id/package.py b/var/spack/repos/builtin/packages/py-id/package.py
new file mode 100644
index 00000000000..ab505dabbc2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-id/package.py
@@ -0,0 +1,20 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PyId(PythonPackage):
+ """id is a Python tool for generating OIDC identities."""
+
+ homepage = "https://pypi.org/project/id/"
+ pypi = "id/id-1.5.0.tar.gz"
+
+ license("Apache-2.0", checked_by="RobertMaaskant")
+
+ version("1.5.0", sha256="292cb8a49eacbbdbce97244f47a97b4c62540169c976552e497fd57df0734c1d")
+
+ depends_on("py-flit-core@3.2:3", type="build")
+ depends_on("python@3.8:", type=("build", "run"))
+ depends_on("py-requests", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/py-igraph/package.py b/var/spack/repos/builtin/packages/py-igraph/package.py
index 37c10b0099d..7f050686575 100644
--- a/var/spack/repos/builtin/packages/py-igraph/package.py
+++ b/var/spack/repos/builtin/packages/py-igraph/package.py
@@ -31,5 +31,5 @@ class PyIgraph(PythonPackage):
depends_on("py-texttable@1.6.2:", type=("build", "run"))
depends_on("py-matplotlib@3.5:", type="run", when="+matplotlib")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("IGRAPH_USE_PKG_CONFIG", "1")
diff --git a/var/spack/repos/builtin/packages/py-isal/package.py b/var/spack/repos/builtin/packages/py-isal/package.py
index 6e4a9037d40..e0c402202cd 100644
--- a/var/spack/repos/builtin/packages/py-isal/package.py
+++ b/var/spack/repos/builtin/packages/py-isal/package.py
@@ -24,5 +24,5 @@ class PyIsal(PythonPackage):
depends_on("py-setuptools@51:", type="build")
depends_on("libisal")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PYTHON_ISAL_LINK_DYNAMIC", "true")
diff --git a/var/spack/repos/builtin/packages/py-jax/package.py b/var/spack/repos/builtin/packages/py-jax/package.py
index a09afc11792..97993201699 100644
--- a/var/spack/repos/builtin/packages/py-jax/package.py
+++ b/var/spack/repos/builtin/packages/py-jax/package.py
@@ -19,6 +19,8 @@ class PyJax(PythonPackage):
license("Apache-2.0")
maintainers("adamjstewart", "jonas-eschle")
+ tags = ["e4s"]
+
# version("0.5.0", sha256="49df70bf293a345a7fb519f71193506d37a024c4f850b358042eb32d502c81c8")
version("0.4.38", sha256="43bae65881628319e0a2148e8f81a202fbc2b8d048e35c7cb1df2416672fa4a8")
version("0.4.37", sha256="7774f3d9e23fe199c65589c680c5a5be87a183b89598421a632d8245222b637b")
diff --git a/var/spack/repos/builtin/packages/py-jaxlib/package.py b/var/spack/repos/builtin/packages/py-jaxlib/package.py
index a43ce8a1dec..d13048dd60d 100644
--- a/var/spack/repos/builtin/packages/py-jaxlib/package.py
+++ b/var/spack/repos/builtin/packages/py-jaxlib/package.py
@@ -206,7 +206,7 @@ def url_for_version(self, version):
name = "jaxlib"
return url.format(name, version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("@0.4.38: +rocm") and not spec["hip"].external:
if spec.satisfies("^hip@6.2:"):
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 402ba37676d..ac42e5bc606 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-core/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-core/package.py
@@ -47,7 +47,9 @@ 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):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# 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)
diff --git a/var/spack/repos/builtin/packages/py-jupyterlab/package.py b/var/spack/repos/builtin/packages/py-jupyterlab/package.py
index dee04a29a6b..014c9a3c025 100644
--- a/var/spack/repos/builtin/packages/py-jupyterlab/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyterlab/package.py
@@ -82,5 +82,5 @@ class PyJupyterlab(PythonPackage):
depends_on("py-tornado@:5,6.0.3:", type=("build", "run"))
depends_on("py-jupyterlab-server@1.1.5:1", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("JUPYTERLAB_DIR", self.prefix.share.jupyter.lab)
diff --git a/var/spack/repos/builtin/packages/py-keras/package.py b/var/spack/repos/builtin/packages/py-keras/package.py
index 5d45b52dbe4..a2395076631 100644
--- a/var/spack/repos/builtin/packages/py-keras/package.py
+++ b/var/spack/repos/builtin/packages/py-keras/package.py
@@ -20,6 +20,7 @@ class PyKeras(PythonPackage):
pypi = "keras/keras-3.0.0.tar.gz"
maintainers("adamjstewart")
+ tags = ["e4s"]
license("Apache-2.0")
version("3.9.2", sha256="322aab6418ee3de1e2bd0871b60a07f0e444e744a7e8cba79af8b42408879ecf")
@@ -159,7 +160,7 @@ def url_for_version(self, version):
url = "https://files.pythonhosted.org/packages/source/k/keras/Keras-{}.tar.gz"
return url.format(version)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@3:"):
env.set("KERAS_BACKEND", self.spec.variants["backend"].value)
diff --git a/var/spack/repos/builtin/packages/py-kiwisolver/package.py b/var/spack/repos/builtin/packages/py-kiwisolver/package.py
index d814ee3d26b..f6b9b0b0c1f 100644
--- a/var/spack/repos/builtin/packages/py-kiwisolver/package.py
+++ b/var/spack/repos/builtin/packages/py-kiwisolver/package.py
@@ -11,6 +11,9 @@ class PyKiwisolver(PythonPackage):
homepage = "https://github.com/nucleic/kiwi"
pypi = "kiwisolver/kiwisolver-1.1.0.tar.gz"
+ version("1.4.8", sha256="23d5f023bdc8c7e54eb65f03ca5d5bb25b601eac4d7f1a042888a1f45237987e")
+ version("1.4.7", sha256="9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60")
+ version("1.4.6", sha256="3cda29d601445e6aa11f80d90a9b8c2ae501650c55d7ad29829bd44499c9e7e0")
version("1.4.5", sha256="e57e563a57fb22a142da34f38acc2fc1a5c864bc29ca1517a88abc963e60d6ec")
version("1.4.4", sha256="d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955")
version("1.3.2", sha256="fc4453705b81d03568d5b808ad8f09c77c47534f6ac2e72e733f9ca4714aa75c")
@@ -25,10 +28,13 @@ class PyKiwisolver(PythonPackage):
depends_on("python@2.7:2.8,3.4:", type=("build", "run"))
depends_on("python@3.6:", type=("build", "run"), when="@1.2.0:")
depends_on("python@3.7:", type=("build", "run"), when="@1.3.2:")
+ depends_on("python@3.8:", type=("build", "run"), when="@1.4.6:")
+ depends_on("python@3.10:", type=("build", "run"), when="@1.4.8:")
depends_on("py-setuptools", type="build")
depends_on("py-setuptools@61.2:", when="@1.4.4:", type="build")
depends_on("py-setuptools-scm@3.4.3:+toml", when="@1.4.4:", type="build")
depends_on("py-cppy@1.1.0:", type="build", when="@1.2.0:")
depends_on("py-cppy@1.2.0:", type="build", when="@1.4.4:")
+ depends_on("py-cppy@1.3.0:", type="build", when="@1.4.8:")
depends_on("py-typing-extensions", when="@1.4.4: ^python@:3.7", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/py-libensemble/package.py b/var/spack/repos/builtin/packages/py-libensemble/package.py
index 71c864646ab..b4972d3400d 100644
--- a/var/spack/repos/builtin/packages/py-libensemble/package.py
+++ b/var/spack/repos/builtin/packages/py-libensemble/package.py
@@ -11,7 +11,7 @@ class PyLibensemble(PythonPackage):
"""Library for managing ensemble-like collections of computations."""
homepage = "https://libensemble.readthedocs.io"
- pypi = "libensemble/libensemble-1.4.3.tar.gz"
+ pypi = "libensemble/libensemble-1.5.0.tar.gz"
git = "https://github.com/Libensemble/libensemble.git"
maintainers("shuds13", "jlnav")
@@ -20,6 +20,7 @@ class PyLibensemble(PythonPackage):
license("BSD-3-Clause")
version("develop", branch="develop")
+ version("1.5.0", sha256="7541829ac412d64152eaea204ba6e3e94640a206f3605a8357b519e932e86065")
version("1.4.3", sha256="d30fd5ec93ae78a8e931765fd773b0693fde8b43130aca547c931230225c0f63")
version("1.4.2", sha256="d283935594333793112f65cec1070137e0a87e31cd2bf1baec4a1261ac06ab63")
version("1.4.1", sha256="fd39d5c4010f9cb1728af1666d0f10d0da7dd43c12e411badcbc53aab42ab183")
diff --git a/var/spack/repos/builtin/packages/py-liblas/package.py b/var/spack/repos/builtin/packages/py-liblas/package.py
index d1bbf7ebf1e..f014aa503df 100644
--- a/var/spack/repos/builtin/packages/py-liblas/package.py
+++ b/var/spack/repos/builtin/packages/py-liblas/package.py
@@ -18,7 +18,7 @@ class PyLiblas(PythonPackage):
depends_on("py-setuptools", type="build")
depends_on("liblas")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env_var = "LD_LIBRARY_PATH"
if self.spec.satisfies("platform=darwin"):
env_var = "DYLD_FALLBACK_LIBRARY_PATH"
diff --git a/var/spack/repos/builtin/packages/py-litdata/package.py b/var/spack/repos/builtin/packages/py-litdata/package.py
new file mode 100644
index 00000000000..77dbdece4ef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-litdata/package.py
@@ -0,0 +1,28 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PyLitdata(PythonPackage):
+ """The Deep Learning framework to train, deploy, and ship AI products Lightning fast."""
+
+ homepage = "https://github.com/Lightning-AI/litdata"
+ pypi = "litdata/litdata-0.2.44.tar.gz"
+
+ maintainers("adamjstewart")
+
+ license("Apache-2.0")
+
+ version("0.2.44", sha256="0c2ad485d4692702d97a396bfe6017f9ac2af2832bb39fae99fd49c26e207a0e")
+
+ depends_on("py-setuptools", type="build")
+
+ with default_args(type=("build", "run")):
+ depends_on("py-torch")
+ depends_on("py-filelock")
+ depends_on("py-numpy")
+ depends_on("py-boto3")
+ depends_on("py-requests")
+ depends_on("py-tifffile")
diff --git a/var/spack/repos/builtin/packages/py-llvmlite/package.py b/var/spack/repos/builtin/packages/py-llvmlite/package.py
index a4389d9c6c9..79b44e2af22 100644
--- a/var/spack/repos/builtin/packages/py-llvmlite/package.py
+++ b/var/spack/repos/builtin/packages/py-llvmlite/package.py
@@ -77,7 +77,7 @@ class PyLlvmlite(PythonPackage):
# TODO: investigate
conflicts("%apple-clang@15:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%fj"):
env.set("CXX_FLTO_FLAGS", "{0}".format(self.compiler.cxx_pic_flag))
env.set("LD_FLTO_FLAGS", "-Wl,--exclude-libs=ALL")
diff --git a/var/spack/repos/builtin/packages/py-lmdb/package.py b/var/spack/repos/builtin/packages/py-lmdb/package.py
index dce0b1cbe72..741ce95383b 100644
--- a/var/spack/repos/builtin/packages/py-lmdb/package.py
+++ b/var/spack/repos/builtin/packages/py-lmdb/package.py
@@ -23,5 +23,5 @@ class PyLmdb(PythonPackage):
depends_on("py-setuptools", type="build")
depends_on("lmdb")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LMDB_FORCE_SYSTEM", "1")
diff --git a/var/spack/repos/builtin/packages/py-lws/package.py b/var/spack/repos/builtin/packages/py-lws/package.py
index d61ec97febc..6cd3f7336c2 100644
--- a/var/spack/repos/builtin/packages/py-lws/package.py
+++ b/var/spack/repos/builtin/packages/py-lws/package.py
@@ -24,5 +24,5 @@ class PyLws(PythonPackage):
depends_on("py-numpy", type=("build", "run"))
depends_on("py-scipy", type=("build", "run"))
- def setup_build_environment(self, env):
- env.set("LWS_USE_CYTHON", 1)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("LWS_USE_CYTHON", "1")
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index 72762d7a5f1..211c8bc23ad 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -330,7 +330,7 @@ def install_test(self):
python("-m", "pytest", "--pyargs", "mpl_toolkits.tests")
@when("@:3.8")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
include = []
library = []
for dep in self.spec.dependencies(deptype="link"):
diff --git a/var/spack/repos/builtin/packages/py-maturin/package.py b/var/spack/repos/builtin/packages/py-maturin/package.py
index 12a23478f4f..80a777ada3e 100644
--- a/var/spack/repos/builtin/packages/py-maturin/package.py
+++ b/var/spack/repos/builtin/packages/py-maturin/package.py
@@ -17,6 +17,7 @@ class PyMaturin(PythonPackage):
license("Apache-2.0")
+ version("1.8.3", sha256="304762f86fd53a8031b1bf006d12572a2aa0a5235485031113195cc0152e1e12")
version("1.8.2", sha256="e31abc70f6f93285d6e63d2f4459c079c94c259dd757370482d2d4ceb9ec1fa0")
version("1.6.0", sha256="b955025c24c8babc808db49e0ff90db8b4b1320dcc16b14eb26132841737230d")
version("1.5.1", sha256="3dd834ece80edb866af18cbd4635e0ecac40139c726428d5f1849ae154b26dca")
diff --git a/var/spack/repos/builtin/packages/py-meldmd/package.py b/var/spack/repos/builtin/packages/py-meldmd/package.py
index 95d09526a63..92e713aef25 100644
--- a/var/spack/repos/builtin/packages/py-meldmd/package.py
+++ b/var/spack/repos/builtin/packages/py-meldmd/package.py
@@ -80,7 +80,7 @@ def patch(self):
if self.spec.satisfies("^openmm@7.6.0:"):
filter_file("simtk.openmm", "openmm", "plugin/python/meldplugin.i", string=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("OPENMM_PLUGIN_DIR", self.prefix.lib.plugins)
@run_after("install")
diff --git a/var/spack/repos/builtin/packages/py-mo-pack/package.py b/var/spack/repos/builtin/packages/py-mo-pack/package.py
index 1662963d4ae..7737a687cd5 100644
--- a/var/spack/repos/builtin/packages/py-mo-pack/package.py
+++ b/var/spack/repos/builtin/packages/py-mo-pack/package.py
@@ -21,5 +21,5 @@ class PyMoPack(PythonPackage):
depends_on("py-numpy", type=("build", "run"))
depends_on("py-cython", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("LDFLAGS", self.spec["libmo-unpack"].libs.search_flags)
diff --git a/var/spack/repos/builtin/packages/py-modin/package.py b/var/spack/repos/builtin/packages/py-modin/package.py
index 0b35bf76d59..a28080b5813 100644
--- a/var/spack/repos/builtin/packages/py-modin/package.py
+++ b/var/spack/repos/builtin/packages/py-modin/package.py
@@ -44,6 +44,6 @@ class PyModin(PythonPackage):
depends_on("py-distributed@2.22:", type=("build", "run"))
depends_on("py-pickle5", when="^python@:3.7", type=("build", "run"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# modin/config/envvars.py
env.set("MODIN_ENGINE", self.spec.variants["engine"].value)
diff --git a/var/spack/repos/builtin/packages/py-mpi4jax/package.py b/var/spack/repos/builtin/packages/py-mpi4jax/package.py
index 1f79ee1e70c..39dbe77fad9 100644
--- a/var/spack/repos/builtin/packages/py-mpi4jax/package.py
+++ b/var/spack/repos/builtin/packages/py-mpi4jax/package.py
@@ -27,6 +27,6 @@ class PyMpi4jax(PythonPackage, CudaPackage):
depends_on("py-numpy", type=("build", "run"))
depends_on("py-jax@0.3.25:", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+cuda" in self.spec:
env.set("CUDA_PATH", self.spec["cuda"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-mpi4py/package.py b/var/spack/repos/builtin/packages/py-mpi4py/package.py
index 3e50afe71c0..0d564de6b0b 100644
--- a/var/spack/repos/builtin/packages/py-mpi4py/package.py
+++ b/var/spack/repos/builtin/packages/py-mpi4py/package.py
@@ -43,7 +43,7 @@ class PyMpi4py(PythonPackage):
depends_on("py-cython@0.27:3", when="@master", type="build")
depends_on("mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MPICC", self.spec["mpi"].mpicc)
@run_before("install")
diff --git a/var/spack/repos/builtin/packages/py-mplhep/package.py b/var/spack/repos/builtin/packages/py-mplhep/package.py
index af2b4139d31..9b41a686d38 100644
--- a/var/spack/repos/builtin/packages/py-mplhep/package.py
+++ b/var/spack/repos/builtin/packages/py-mplhep/package.py
@@ -13,6 +13,10 @@ class PyMplhep(PythonPackage):
license("MIT", checked_by="wdconinc")
+ version("0.3.59", sha256="06f4b3a799e92fe6982ed3939dd648d0f972781aca3dc814a83e5bbd970649fe")
+ version("0.3.58", sha256="fed8b5d5fee92c7aa40cfe70e5b8d2b2bb8ed7aeb7a2c272d73b241279e1adba")
+ version("0.3.57", sha256="3b04a91f75889e31c0d7a5e520dd092f2fd29fb6000418c26cf4e497cc977541")
+ version("0.3.56", sha256="2e773a65a233d186071b81d5faeadd340b768e9bd8825b40bd20c81a419d25f2")
version("0.3.55", sha256="0fb87cd4b025225ba8fd5d82d58324cfb094fbcdd7929e5a9ea1ea7e22108814")
version("0.3.26", sha256="d707a95ce59b0bac2fe4fe1c57fede14e15da639f3a7c732e7513a753fd9e9ac")
version("0.3.15", sha256="595f796ea65930094e86a805214e0d44537ead267a7487ae16eda02d1670653e")
diff --git a/var/spack/repos/builtin/packages/py-multiprocess/package.py b/var/spack/repos/builtin/packages/py-multiprocess/package.py
index 9bf7e5e9d52..7bc32661f2a 100644
--- a/var/spack/repos/builtin/packages/py-multiprocess/package.py
+++ b/var/spack/repos/builtin/packages/py-multiprocess/package.py
@@ -9,31 +9,42 @@ class PyMultiprocess(PythonPackage):
"""Better multiprocessing and multithreading in Python"""
homepage = "https://github.com/uqfoundation/multiprocess"
- pypi = "multiprocess/multiprocess-0.70.5.zip"
+ pypi = "multiprocess/multiprocess-0.70.17.tar.gz"
license("BSD-3-Clause")
+ version("0.70.17", sha256="4ae2f11a3416809ebc9a48abfc8b14ecce0652a0944731a1493a3c1ba44ff57a")
+ version("0.70.16", sha256="161af703d4652a0e1410be6abccecde4a7ddffd19341be0a7011b94aeb171ac1")
+ version("0.70.15", sha256="f20eed3036c0ef477b07a4177cf7c1ba520d9a2677870a4f47fe026f0cd6787e")
+ version("0.70.14", sha256="3eddafc12f2260d27ae03fe6069b12570ab4764ab59a75e81624fac453fbf46a")
+ version("0.70.13", sha256="2e096dd618a84d15aa369a9cf6695815e5539f853dc8fa4f4b9153b11b1d0b32")
version("0.70.12.2", sha256="206bb9b97b73f87fec1ed15a19f8762950256aa84225450abc7150d02855a083")
version("0.70.9", sha256="9fd5bd990132da77e73dec6e9613408602a4612e1d73caf2e2b813d2b61508e5")
- version("0.70.7", sha256="3394f1fbd0d87112690a877e49eb7917d851ee8d822294d522dd4deae12febdb")
- version("0.70.5", sha256="c4c196f3c4561dc1d78139c3e73709906a222d2fc166ef3eef895d8623df7267")
- version("0.70.4", sha256="a692c6dc8392c25b29391abb58a9fbdc1ac38bca73c6f27d787774201e68e12c")
+ version("0.70.7", sha256="46479a327388df8e77ad268892f2e73eac06d6271189b868ce9d4f95474e58e3")
+ version(
+ "0.70.5",
+ sha256="c4c196f3c4561dc1d78139c3e73709906a222d2fc166ef3eef895d8623df7267",
+ url="https://files.pythonhosted.org/packages/multiprocess/multiprocess-0.70.5.zip",
+ )
+ version(
+ "0.70.4",
+ sha256="a692c6dc8392c25b29391abb58a9fbdc1ac38bca73c6f27d787774201e68e12c",
+ url="https://files.pythonhosted.org/packages/multiprocess/multiprocess-0.70.4.zip",
+ )
depends_on("python@2.5:2.8,3.1:", type=("build", "run"))
depends_on("python@2.7:2.8,3.6:", when="@0.70.12.2:", type=("build", "run"))
+ depends_on("python@2.7:2.8,3.7:", when="@0.70.13:", type=("build", "run"))
+ depends_on("python@3.7:", when="@0.70.14:", type=("build", "run"))
+ depends_on("python@3.8:", when="@0.70.16:", type=("build", "run"))
depends_on("py-setuptools@0.6:", type="build")
depends_on("py-dill@0.2.6:", type=("build", "run"))
depends_on("py-dill@0.2.9:", type=("build", "run"), when="@0.70.7:")
depends_on("py-dill@0.3.1:", type=("build", "run"), when="@0.70.9:")
depends_on("py-dill@0.3.4:", type=("build", "run"), when="@0.70.12.2:")
-
- def url_for_version(self, version):
- url = self.url.rsplit("/", 1)[0]
- if Version("0.70.12.2") > version >= Version("0.70.7"):
- url += "/multiprocess-{0}.tar.gz"
- else:
- url += "/multiprocess-{0}.zip"
-
- url = url.format(version)
- return url
+ depends_on("py-dill@0.3.5.1:", type=("build", "run"), when="@0.70.13:")
+ depends_on("py-dill@0.3.6:", type=("build", "run"), when="@0.70.14:")
+ depends_on("py-dill@0.3.7:", type=("build", "run"), when="@0.70.15:")
+ depends_on("py-dill@0.3.8:", type=("build", "run"), when="@0.70.16:")
+ depends_on("py-dill@0.3.9:", type=("build", "run"), when="@0.70.17:")
diff --git a/var/spack/repos/builtin/packages/py-nanobind/package.py b/var/spack/repos/builtin/packages/py-nanobind/package.py
index 0845225a146..a3c77adcef7 100644
--- a/var/spack/repos/builtin/packages/py-nanobind/package.py
+++ b/var/spack/repos/builtin/packages/py-nanobind/package.py
@@ -22,6 +22,12 @@ class PyNanobind(PythonPackage):
license("BSD-3-Clause")
version("master", branch="master", submodules=True)
+ version(
+ "2.7.0", tag="v2.7.0", commit="44ad9a9e5729abda24ef8dc9d76233d801e651e9", submodules=True
+ )
+ version(
+ "2.6.1", tag="v2.6.1", commit="9b3afa9dbdc23641daf26fadef7743e7127ff92f", submodules=True
+ )
version(
"2.5.0", tag="v2.5.0", commit="4ccbe6e005fc017652312305f280742da49d3dd5", submodules=True
)
diff --git a/var/spack/repos/builtin/packages/py-nbconvert/package.py b/var/spack/repos/builtin/packages/py-nbconvert/package.py
index 2aa2eec2bc3..3ef54a564ed 100644
--- a/var/spack/repos/builtin/packages/py-nbconvert/package.py
+++ b/var/spack/repos/builtin/packages/py-nbconvert/package.py
@@ -165,11 +165,15 @@ def patch(self):
# Avoid install-time downloads of css files.
filter_file("css = urlopen(url).read()", "assert False", "hatch_build.py", string=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("JUPYTER_PATH", self.prefix.share.jupyter)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("JUPYTER_PATH", self.prefix.share.jupyter)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("JUPYTER_PATH", self.prefix.share.jupyter)
diff --git a/var/spack/repos/builtin/packages/py-nbstripout/package.py b/var/spack/repos/builtin/packages/py-nbstripout/package.py
index 5ba6f3cfa29..d461eb6d2f7 100644
--- a/var/spack/repos/builtin/packages/py-nbstripout/package.py
+++ b/var/spack/repos/builtin/packages/py-nbstripout/package.py
@@ -13,6 +13,7 @@ class PyNbstripout(PythonPackage):
license("MIT")
+ version("0.8.1", sha256="eaac8b6b4e729e8dfe1e5df2c0f8ba44abc5a17a65448f0480141f80be230bb1")
version("0.6.1", sha256="9065bcdd1488b386e4f3c081ffc1d48f4513a2f8d8bf4d0d9a28208c5dafe9d3")
depends_on("py-setuptools", type="build")
diff --git a/var/spack/repos/builtin/packages/py-netcdf4/disable_parallel_support.patch b/var/spack/repos/builtin/packages/py-netcdf4/disable_parallel_support.patch
new file mode 100644
index 00000000000..6c547dd3716
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-netcdf4/disable_parallel_support.patch
@@ -0,0 +1,11 @@
+--- a/setup.py
++++ b/setup.py
+@@ -392,7 +392,7 @@
+ (netcdf_lib_version > "4.4" and netcdf_lib_version < "4.5"):
+ has_cdf5_format = True
+
+- has_parallel_support = check_has_parallel_support(inc_dirs)
++ has_parallel_support = False
+ has_has_not = "has" if has_parallel_support else "does not have"
+ print(f"netcdf lib {has_has_not} parallel functions")
+
diff --git a/var/spack/repos/builtin/packages/py-netcdf4/package.py b/var/spack/repos/builtin/packages/py-netcdf4/package.py
index 5c82e8bc02a..94eb5e1f083 100644
--- a/var/spack/repos/builtin/packages/py-netcdf4/package.py
+++ b/var/spack/repos/builtin/packages/py-netcdf4/package.py
@@ -27,6 +27,7 @@ class PyNetcdf4(PythonPackage):
variant("mpi", default=True, description="Parallel IO support")
+ depends_on("c", type="build")
depends_on("python", type=("build", "link", "run"))
depends_on("python@3.8:", when="@1.7.1:", type=("build", "link", "run"))
depends_on("py-cython@0.29:", when="@1.6.5:", type="build")
@@ -43,12 +44,19 @@ class PyNetcdf4(PythonPackage):
# https://github.com/Unidata/netcdf4-python/pull/1317
depends_on("py-numpy@:1", when="@:1.6", type=("build", "link", "run"))
depends_on("py-mpi4py", when="+mpi", type=("build", "run"))
- # These forced variant requests are due to py-netcdf4 build scripts
- # https://github.com/spack/spack/pull/47824#discussion_r1882473998
- depends_on("netcdf-c~mpi", when="~mpi")
- depends_on("netcdf-c+mpi", when="+mpi")
- depends_on("hdf5@1.8.0:+hl~mpi", when="~mpi")
- depends_on("hdf5@1.8.0:+hl+mpi", when="+mpi")
+
+ depends_on("netcdf-c")
+ depends_on("hdf5")
+ with when("@:1.6~mpi"):
+ # These forced variant requests are due to py-netcdf4 build scripts
+ # https://github.com/spack/spack/pull/47824#discussion_r1882473998
+ depends_on("netcdf-c~mpi")
+ depends_on("hdf5~mpi")
+ with when("+mpi"):
+ depends_on("netcdf-c+mpi")
+ depends_on("hdf5+mpi")
+ # We cannot build py-netcdf4~mpi ^netcdf-c~mpi ^hdf5+mpi
+ conflicts("hdf5+mpi", when="~mpi ^netcdf-c~mpi")
# The installation script tries to find hdf5 using pkg-config. However, the
# version of hdf5 installed with Spack does not have pkg-config files.
@@ -57,6 +65,14 @@ class PyNetcdf4(PythonPackage):
# following patch disables the usage of pkg-config at all.
patch("disable_pkgconf.patch")
+ # Allow building py-netcdf4 ~mpi when netCDF was build with +mpi. This patch
+ # overrides the auto-decect feature (has_parallel_support) in setup.py. The
+ # logic in setup.py changed between 1.6 and 1.7, therefore this patch only
+ # works for versions 1.7.0 and later.
+ # See also: https://github.com/Unidata/netcdf4-python/issues/1389
+ with when("@1.7:~mpi"):
+ patch("disable_parallel_support.patch", when="^netcdf-c+mpi")
+
# https://github.com/Unidata/netcdf4-python/pull/1322
patch(
"https://github.com/Unidata/netcdf4-python/commit/49dcd0b5bd25824c254770c0d41445133fc13a46.patch?full_index=1",
@@ -79,7 +95,7 @@ def flag_handler(self, name, flags):
return flags, None, None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Ensure installed netcdf and hdf5 libraries are used"""
# Explicitly set these variables so setup.py won't erroneously pick up
# system versions
diff --git a/var/spack/repos/builtin/packages/py-nltk/package.py b/var/spack/repos/builtin/packages/py-nltk/package.py
index 4bb1bb0cba3..569dcfbb66f 100644
--- a/var/spack/repos/builtin/packages/py-nltk/package.py
+++ b/var/spack/repos/builtin/packages/py-nltk/package.py
@@ -1066,7 +1066,7 @@ def url_for_version(self, version):
placement="tagsets",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+data" in self.spec:
env.prepend_path("NLTK_DATA", self.prefix.nltk_data)
diff --git a/var/spack/repos/builtin/packages/py-numba/package.py b/var/spack/repos/builtin/packages/py-numba/package.py
index 9006d2e874f..afa9553bdec 100644
--- a/var/spack/repos/builtin/packages/py-numba/package.py
+++ b/var/spack/repos/builtin/packages/py-numba/package.py
@@ -86,6 +86,6 @@ class PyNumba(PythonPackage):
# See https://reviews.llvm.org/D44140
conflicts("^llvm@6.0.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("~tbb"):
env.set("NUMBA_DISABLE_TBB", "yes")
diff --git a/var/spack/repos/builtin/packages/py-numcodecs/package.py b/var/spack/repos/builtin/packages/py-numcodecs/package.py
index c2161a9e08c..864e059660c 100644
--- a/var/spack/repos/builtin/packages/py-numcodecs/package.py
+++ b/var/spack/repos/builtin/packages/py-numcodecs/package.py
@@ -60,7 +60,7 @@ class PyNumcodecs(PythonPackage):
# those libraries without any way to use the system versions.
# https://github.com/zarr-developers/numcodecs/issues/464
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# This package likes to compile natively by checking cpu features and then setting flags
# -msse2 and -mavx2, which we want to avoid in Spack. This could go away if the package
# supports external libraries.
diff --git a/var/spack/repos/builtin/packages/py-numpy/package.py b/var/spack/repos/builtin/packages/py-numpy/package.py
index ed3de80b894..0e4a06ba76c 100644
--- a/var/spack/repos/builtin/packages/py-numpy/package.py
+++ b/var/spack/repos/builtin/packages/py-numpy/package.py
@@ -21,6 +21,7 @@ class PyNumpy(PythonPackage):
license("BSD-3-Clause")
version("main", branch="main")
+ version("2.2.5", sha256="a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291")
version("2.2.4", sha256="9ba03692a45d3eef66559efe1d1096c4b9b75c0986b5dff5530c378fb8331d4f")
version("2.2.3", sha256="dbdc15f0c81611925f382dfa97b3bd0bc2c1ce19d4fe50482cb0ddc12ba30020")
version("2.2.2", sha256="ed6906f61834d687738d25988ae117683705636936cc605be0bb208b23df4d8f")
@@ -183,6 +184,13 @@ class PyNumpy(PythonPackage):
depends_on("py-setuptools@:63", when="@:1.25")
depends_on("py-setuptools@:59", when="@:1.22.1")
+ # https://github.com/spack/spack/issues/49983
+ patch(
+ "https://github.com/numpy/numpy/pull/28713.patch?full_index=1",
+ sha256="e80ed84d31a03ecdebcaa4acd9f725298633b8f2c254beb30e0d44c039921783",
+ when="@2.0:2.2",
+ )
+
# Add Fujitsu Fortran compiler
patch("add_fj_compiler.patch", when="@1.19.3:1.19.5%fj")
patch("add_fj_compiler2.patch", when="@1.19.0:1.19.2%fj")
@@ -479,7 +487,7 @@ def set_blas_lapack(self):
self.blas_lapack_site_cfg()
@when("@1.26:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%msvc"):
# For meson build system, compiler paths must be in quotes
# to prevent paths from being split by spaces.
@@ -487,7 +495,7 @@ def setup_build_environment(self, env):
env.set("CXX", f'"{self.compiler.cxx}"')
@when("@:1.25")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Tell numpy which BLAS/LAPACK libraries we want to use.
spec = self.spec
# https://github.com/numpy/numpy/pull/13132
diff --git a/var/spack/repos/builtin/packages/py-onnx/package.py b/var/spack/repos/builtin/packages/py-onnx/package.py
index 986b94e4a03..7f907888ad5 100644
--- a/var/spack/repos/builtin/packages/py-onnx/package.py
+++ b/var/spack/repos/builtin/packages/py-onnx/package.py
@@ -95,7 +95,7 @@ def patch(self):
"setup.py",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Build in a similar directory as the CMake packages
env.set(
"CMAKE_BUILD_DIR", join_path(self.stage.path, f"spack-build-{self.spec.dag_hash(7)}")
diff --git a/var/spack/repos/builtin/packages/py-onnxruntime/package.py b/var/spack/repos/builtin/packages/py-onnxruntime/package.py
index 5bca596721b..f55e4614eed 100644
--- a/var/spack/repos/builtin/packages/py-onnxruntime/package.py
+++ b/var/spack/repos/builtin/packages/py-onnxruntime/package.py
@@ -157,14 +157,14 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
value = self.spec.variants["dynamic_cpu_arch"].value
value = self.dynamic_cpu_arch_values.index(value)
env.set("MLAS_DYNAMIC_CPU_ARCH", str(value))
if self.spec.satisfies("+rocm"):
env.set("MIOPEN_PATH", self.spec["miopen-hip"].prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
value = self.spec.variants["dynamic_cpu_arch"].value
value = self.dynamic_cpu_arch_values.index(value)
env.set("MLAS_DYNAMIC_CPU_ARCH", str(value))
diff --git a/var/spack/repos/builtin/packages/py-openai/package.py b/var/spack/repos/builtin/packages/py-openai/package.py
index 4e55b93e8bf..1dae93dd82e 100644
--- a/var/spack/repos/builtin/packages/py-openai/package.py
+++ b/var/spack/repos/builtin/packages/py-openai/package.py
@@ -15,6 +15,8 @@ class PyOpenai(PythonPackage):
homepage = "https://github.com/openai/openai-python"
pypi = "openai/openai-0.27.8.tar.gz"
+ tags = ["e4s"]
+
license("MIT")
version("0.27.8", sha256="2483095c7db1eee274cebac79e315a986c4e55207bb4fa7b82d185b3a2ed9536")
diff --git a/var/spack/repos/builtin/packages/py-openslide-python/package.py b/var/spack/repos/builtin/packages/py-openslide-python/package.py
index 304f7ec226b..ef3557add5d 100644
--- a/var/spack/repos/builtin/packages/py-openslide-python/package.py
+++ b/var/spack/repos/builtin/packages/py-openslide-python/package.py
@@ -14,7 +14,9 @@ class PyOpenslidePython(PythonPackage):
license("LGPL-2.1-or-later")
version("1.1.2", sha256="83e064ab4a29658e7ddf86bf1d3e54d2508cc19ece35d55b55519c826e45d83f")
- version("1.1.1", sha256="33c390fe43e3d7d443fafdd66969392d3e9efd2ecd5d4af73c3dbac374485ed5")
+
+ with default_args(deprecated=True):
+ version("1.1.1", sha256="33c390fe43e3d7d443fafdd66969392d3e9efd2ecd5d4af73c3dbac374485ed5")
depends_on("c", type="build") # generated
diff --git a/var/spack/repos/builtin/packages/py-packaging/package.py b/var/spack/repos/builtin/packages/py-packaging/package.py
index eb03c4415e5..31a409f5237 100644
--- a/var/spack/repos/builtin/packages/py-packaging/package.py
+++ b/var/spack/repos/builtin/packages/py-packaging/package.py
@@ -12,6 +12,8 @@ class PyPackaging(PythonPackage):
pypi = "packaging/packaging-19.2.tar.gz"
license("BSD-2-Clause")
+
+ version("25.0", sha256="d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f")
version("24.2", sha256="c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f")
version("24.1", sha256="026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002")
version("23.2", sha256="048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5")
diff --git a/var/spack/repos/builtin/packages/py-pandas/package.py b/var/spack/repos/builtin/packages/py-pandas/package.py
index 9b9b2bc7317..07b5492d304 100644
--- a/var/spack/repos/builtin/packages/py-pandas/package.py
+++ b/var/spack/repos/builtin/packages/py-pandas/package.py
@@ -19,6 +19,8 @@ class PyPandas(PythonPackage):
license("Apache-2.0")
maintainers("adamjstewart", "rgommers")
+ tags = ["e4s"]
+
version("2.2.3", sha256="4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667")
version("2.2.2", sha256="9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54")
version("2.2.1", sha256="0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572")
@@ -114,6 +116,7 @@ class PyPandas(PythonPackage):
variant("performance", default=True, description="Build recommended performance dependencies")
variant("excel", when="@1.4:", default=False, description="Build with support for Excel")
+ variant("parquet", when="@2:", default=False, description="Build with support for Parquet")
depends_on("c", type="build")
depends_on("cxx", type="build")
@@ -205,3 +208,7 @@ class PyPandas(PythonPackage):
depends_on("py-xlsxwriter@3.0.3:", when="@2.1:")
depends_on("py-xlsxwriter@1.4.3:", when="@1.5:")
depends_on("py-xlsxwriter@1.2.2:", when="@1.4:")
+
+ with when("+parquet"):
+ depends_on("py-pyarrow@10.0.1:")
+ depends_on("arrow+parquet")
diff --git a/var/spack/repos/builtin/packages/py-paramiko/package.py b/var/spack/repos/builtin/packages/py-paramiko/package.py
index 7a3474127ea..a6743de82a5 100644
--- a/var/spack/repos/builtin/packages/py-paramiko/package.py
+++ b/var/spack/repos/builtin/packages/py-paramiko/package.py
@@ -13,6 +13,7 @@ class PyParamiko(PythonPackage):
license("LGPL-2.1-or-later")
+ version("3.5.1", sha256="b2c665bc45b2b215bd7d7f039901b14b067da00f3a11e6640995fd58f2664822")
version("3.5.0", sha256="ad11e540da4f55cedda52931f1a3f812a8238a7af7f62a60de538cd80bb28124")
version("3.4.1", sha256="8b15302870af7f6652f2e038975c1d2973f06046cb5d7d65355668b3ecbece0c")
version("3.4.0", sha256="aac08f26a31dc4dffd92821527d1682d99d52f9ef6851968114a8728f3c274d3")
diff --git a/var/spack/repos/builtin/packages/py-particle/package.py b/var/spack/repos/builtin/packages/py-particle/package.py
index b4b73d7e784..7bf5a2b7491 100644
--- a/var/spack/repos/builtin/packages/py-particle/package.py
+++ b/var/spack/repos/builtin/packages/py-particle/package.py
@@ -21,6 +21,7 @@ class PyParticle(PythonPackage):
license("BSD-3-Clause")
version("master", branch="master")
+ version("0.25.3", sha256="78cf7e56e9e2118385fbfb8908d8395e7a267ab5f0596aaafebadb08cb04452b")
version("0.25.2", sha256="1fa4bbee38bfeaef08a40b2779b4c30c5ce4fa2865a10c02acfe90679b4e61e9")
version("0.25.1", sha256="9706748e95a706dffd49426db393298197fe1af819721c5d2c6e515764a1fb01")
version("0.25.0", sha256="8e2d5fa36555e6af218b66e97b9585b1d4f52085785d96c067736f0b2e57f5ad")
diff --git a/var/spack/repos/builtin/packages/py-pathos/package.py b/var/spack/repos/builtin/packages/py-pathos/package.py
index 32d3a6bbf1e..5bbfd2ed890 100644
--- a/var/spack/repos/builtin/packages/py-pathos/package.py
+++ b/var/spack/repos/builtin/packages/py-pathos/package.py
@@ -13,22 +13,47 @@ class PyPathos(PythonPackage):
license("BSD-3-Clause")
+ version("0.3.3", sha256="dcb2a5f321aa34ca541c1c1861011ea49df357bb908379c21dd5741f666e0a58")
+ version("0.3.2", sha256="4f2a42bc1e10ccf0fe71961e7145fc1437018b6b21bd93b2446abc3983e49a7a")
+ version("0.3.1", sha256="c9a088021493c5cb627d4459bba6c0533c684199e271a5dc297d62be23d74019")
+ version("0.3.0", sha256="24fa8db51fbd9284da8e191794097c4bb2aa3fce411090e57af6385e61b97e09")
+ version("0.2.9", sha256="a8dbddcd3d9af32ada7c6dc088d845588c513a29a0ba19ab9f64c5cd83692934")
version("0.2.8", sha256="1f0f27a90f7ab66c423ba796529000fde9360d17b2d8e50097641ff405fc6f15")
version("0.2.3", sha256="954c5b0a8b257c375e35d311c65fa62a210a3d65269195557de38418ac9f61f9")
version("0.2.0", sha256="2f4e67e7914c95fb0cce766bab173eb2c5860ee420108fa183099557ac2e50e9")
- depends_on("python@2.6:2.8,3.1:", type=("build", "run"))
depends_on("python@2.7:2.8,3.6:", when="@0.2.8:", type=("build", "run"))
+ depends_on("python@2.6:2.8,3.1:", type=("build", "run"))
depends_on("py-setuptools@0.6:", type="build")
- depends_on("py-multiprocess@0.70.7:", type=("build", "run"))
- depends_on("py-pox@0.2.5:", type=("build", "run"))
- depends_on("py-pox@0.3.0:", type=("build", "run"), when="@0.2.8:")
- depends_on("py-ppft@1.6.4.9:", type=("build", "run"))
- depends_on("py-ppft@1.6.6.4:", type=("build", "run"), when="@0.2.8:")
- depends_on("py-dill@0.2.9:", type=("build", "run"))
- depends_on("py-dill@0.3.4:", type=("build", "run"), when="@0.2.8:")
+ depends_on("py-multiprocess@0.70.17:", type=("build", "run"), when="@0.3.3:")
+ depends_on("py-multiprocess@0.70.16:", type=("build", "run"), when="@0.3.2:")
+ depends_on("py-multiprocess@0.70.15:", type=("build", "run"), when="@0.3.1:")
+ depends_on("py-multiprocess@0.70.14:", type=("build", "run"), when="@0.3.0:")
+ depends_on("py-multiprocess@0.70.13:", type=("build", "run"), when="@0.2.9:")
depends_on("py-multiprocess@0.70.12:", type=("build", "run"), when="@0.2.8:")
+ depends_on("py-multiprocess@0.70.7:", type=("build", "run"))
+ depends_on("py-pox@0.3.5:", type=("build", "run"), when="@0.3.3:")
+ depends_on("py-pox@0.3.4:", type=("build", "run"), when="@0.3.2:")
+ depends_on("py-pox@0.3.3:", type=("build", "run"), when="@0.3.1:")
+ depends_on("py-pox@0.3.2:", type=("build", "run"), when="@0.3.0:")
+ depends_on("py-pox@0.3.1:", type=("build", "run"), when="@0.2.9:")
+ depends_on("py-pox@0.3.0:", type=("build", "run"), when="@0.2.8:")
+ depends_on("py-pox@0.2.5:", type=("build", "run"))
+ depends_on("py-ppft@1.7.6.9:", type=("build", "run"), when="@0.3.3:")
+ depends_on("py-ppft@1.7.6.8:", type=("build", "run"), when="@0.3.2:")
+ depends_on("py-ppft@1.7.6.7:", type=("build", "run"), when="@0.3.1:")
+ depends_on("py-ppft@1.7.6.6:", type=("build", "run"), when="@0.3.0:")
+ depends_on("py-ppft@1.7.6.5:", type=("build", "run"), when="@0.2.9:")
+ depends_on("py-ppft@1.6.6.4:", type=("build", "run"), when="@0.2.8:")
+ depends_on("py-ppft@1.6.4.9:", type=("build", "run"))
+ depends_on("py-dill@0.3.9:", type=("build", "run"), when="@0.3.3:")
+ depends_on("py-dill@0.3.8:", type=("build", "run"), when="@0.3.2:")
+ depends_on("py-dill@0.3.7:", type=("build", "run"), when="@0.3.1:")
+ depends_on("py-dill@0.3.6:", type=("build", "run"), when="@0.3.0:")
+ depends_on("py-dill@0.3.5.1:", type=("build", "run"), when="@0.2.9:")
+ depends_on("py-dill@0.3.4:", type=("build", "run"), when="@0.2.8:")
+ depends_on("py-dill@0.2.9:", type=("build", "run"))
def url_for_version(self, version):
url = self.url.rsplit("/", 1)[0]
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 29d19978fd8..ad89eafc71f 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
@@ -110,7 +110,7 @@ def url_for_version(self, version):
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
build_directory = "build"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PL_BACKEND", "lightning_kokkos")
cm_args = " ".join([s[2:] for s in self.cmake_args()])
env.set("CMAKE_ARGS", f"{cm_args}")
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 88ea6ebb777..54fa1a5c64a 100644
--- a/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py
+++ b/var/spack/repos/builtin/packages/py-pennylane-lightning/package.py
@@ -74,7 +74,7 @@ class PyPennylaneLightning(CMakePackage, PythonExtension):
class CMakeBuilder(spack.build_systems.cmake.CMakeBuilder):
build_directory = "build"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PL_BACKEND", "lightning_qubit")
cm_args = " ".join([s[2:] for s in self.cmake_args()])
env.set("CMAKE_ARGS", f"{cm_args}")
diff --git a/var/spack/repos/builtin/packages/py-petsc4py/ldshared_3190.patch b/var/spack/repos/builtin/packages/py-petsc4py/ldshared_3190.patch
new file mode 100644
index 00000000000..7a62595aad4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-petsc4py/ldshared_3190.patch
@@ -0,0 +1,11 @@
+--- a/conf/confpetsc.py 2023-10-31 00:35:21.000000000 -0500
++++ b/conf/confpetsc.py 2025-04-22 23:56:40.015502466 -0500
+@@ -334,7 +334,7 @@
+ ldshared = getenv('LDSHARED', ldshared)
+ ldflags = getenv('LDFLAGS', cflags + ' ' + (ldflags or ''))
+ ldcmd = split_quoted(ld) + split_quoted(ldflags)
+- ldshared = [flg for flg in split_quoted(ldshared) if flg not in ldcmd and (flg.find('/lib/spack/env')<0)]
++ ldshared = [flg for flg in split_quoted(ldshared) if flg not in ldcmd and (flg.find('/lib/spack/env')<0) and (flg.find('/libexec/spack')<0)]
+ ldshared = str.join(' ', ldshared)
+ #
+ def get_flags(cmd):
diff --git a/var/spack/repos/builtin/packages/py-petsc4py/ldshared_319.patch b/var/spack/repos/builtin/packages/py-petsc4py/ldshared_3211.patch
similarity index 100%
rename from var/spack/repos/builtin/packages/py-petsc4py/ldshared_319.patch
rename to var/spack/repos/builtin/packages/py-petsc4py/ldshared_3211.patch
diff --git a/var/spack/repos/builtin/packages/py-petsc4py/package.py b/var/spack/repos/builtin/packages/py-petsc4py/package.py
index 1946e7b34f6..988ba7b73db 100644
--- a/var/spack/repos/builtin/packages/py-petsc4py/package.py
+++ b/var/spack/repos/builtin/packages/py-petsc4py/package.py
@@ -95,7 +95,8 @@ class PyPetsc4py(PythonPackage):
# Hack to fix https://github.com/spack/spack/issues/21451, where Petsc4Py expects LDSHARED
# to start with the same executable as get_config_var("CC")
- patch("ldshared_319.patch", when="@3.19:")
+ patch("ldshared_3211.patch", when="@3.21.1:3.23.0")
+ patch("ldshared_3190.patch", when="@3.19:3.21.0")
patch("ldshared.patch", when="@:3.18")
depends_on("c", type="build") # generated
diff --git a/var/spack/repos/builtin/packages/py-pillow/package.py b/var/spack/repos/builtin/packages/py-pillow/package.py
index a965f6545a0..f2f9e1eeab4 100644
--- a/var/spack/repos/builtin/packages/py-pillow/package.py
+++ b/var/spack/repos/builtin/packages/py-pillow/package.py
@@ -26,6 +26,7 @@ class PyPillowBase(PythonPackage):
"jpeg2000",
"imagequant",
"xcb",
+ "avif",
)
variant("zlib", default=True, description="Compressed PNG functionality")
variant("jpeg", default=True, description="JPEG functionality")
@@ -38,6 +39,7 @@ class PyPillowBase(PythonPackage):
variant("jpeg2000", default=False, description="JPEG 2000 functionality")
variant("imagequant", when="@3.3:", default=False, description="Improved color quantization")
variant("xcb", when="@7.1:", default=False, description="X11 screengrab support")
+ variant("avif", when="@11.2:", default=False, description="Support for the AVIF format")
# Required dependencies
# https://pillow.readthedocs.io/en/stable/installation/python-support.html
@@ -56,6 +58,7 @@ class PyPillowBase(PythonPackage):
# pyproject.toml
with default_args(type="build"):
depends_on("py-pip@22.1:", when="@10:")
+ depends_on("py-setuptools@77:", when="@11.2:")
depends_on("py-setuptools@67.8:", when="@10:")
depends_on("py-setuptools")
@@ -72,6 +75,7 @@ class PyPillowBase(PythonPackage):
depends_on("openjpeg", when="+jpeg2000")
depends_on("libimagequant", when="+imagequant")
depends_on("libxcb", when="+xcb")
+ depends_on("libavif", when="+avif")
patch(
"https://github.com/python-pillow/Pillow/commit/1c11d4581c5705dfa21bc5a4f3b6980c556978bf.patch?full_index=1",
@@ -104,12 +108,12 @@ def patch(self):
if self.version >= Version("11"):
setup.filter(
"library_dirs: list[str] = []",
- "library_dirs = {0}".format(library_dirs),
+ "library_dirs: list[str] = {0}".format(library_dirs),
string=True,
)
setup.filter(
"include_dirs: list[str] = []",
- "include_dirs = {0}".format(include_dirs),
+ "include_dirs: list[str] = {0}".format(include_dirs),
string=True,
)
else:
@@ -121,22 +125,21 @@ def patch(self):
)
if self.spec.satisfies("@:9"):
-
- def variant_to_cfg(variant):
- able = "enable" if "+" + variant in self.spec else "disable"
- return "{0}_{1}=1\n".format(able, variant)
-
with open("setup.cfg", "a") as setup:
- setup.write("[build_ext]\n")
- for variant in self.VARIANTS:
- setup.write(variant_to_cfg(variant))
+ print("[build_ext]", file=setup)
- setup.write("rpath={0}\n".format(":".join(self.rpath)))
- setup.write("[install]\n")
+ for variant in self.VARIANTS:
+ if self.spec.satisfies(f"+{variant}"):
+ print(f"enable_{variant}=1", file=setup)
+ elif self.spec.satisfies(f"~{variant}"):
+ print(f"disable_{variant}=1", file=setup)
+
+ print("rpath={0}".format(":".join(self.rpath)), file=setup)
+ print("[install]", file=setup)
@when("@:9")
- def setup_build_environment(self, env):
- env.set("MAX_CONCURRENCY", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("MAX_CONCURRENCY", str(make_jobs))
class PyPillow(PyPillowBase):
@@ -148,6 +151,7 @@ class PyPillow(PyPillowBase):
homepage = "https://python-pillow.org/"
pypi = "pillow/pillow-10.2.0.tar.gz"
+ version("11.2.1", sha256="a64dd61998416367b7ef979b73d3a85853ba9bec4c2925f74e588879a58716b6")
version("11.1.0", sha256="368da70808b36d73b4b390a8ffac11069f8a5c85f29eff1f1b01bcf3ef5b2a20")
version("11.0.0", sha256="72bacbaf24ac003fea9bff9837d1eedb6088758d41e100c1552930151f677739")
version("10.4.0", sha256="166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06")
@@ -190,6 +194,7 @@ class PyPillow(PyPillowBase):
depends_on("c", type="build")
for ver in [
+ "11.2.1",
"11.1.0",
"11.0.0",
"10.4.0",
diff --git a/var/spack/repos/builtin/packages/py-pip/package.py b/var/spack/repos/builtin/packages/py-pip/package.py
index f674ae41e12..58273a7c9a6 100644
--- a/var/spack/repos/builtin/packages/py-pip/package.py
+++ b/var/spack/repos/builtin/packages/py-pip/package.py
@@ -24,6 +24,8 @@ class PyPip(Package, PythonExtension):
license("MIT")
+ version("25.0.1", sha256="c46efd13b6aa8279f33f2864459c8ce587ea6a1a59ee20de055868d8f7688f7f")
+ version("25.0", sha256="b6eb97a803356a52b2dd4bb73ba9e65b2ba16caa6bcb25a7497350a4e5859b65")
version("24.3.1", sha256="3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed")
version("24.2", sha256="2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2")
version("24.1.2", sha256="7cd207eed4c60b0f411b444cd1464198fe186671c323b6cd6d433ed80fc9d247")
diff --git a/var/spack/repos/builtin/packages/py-pipits/package.py b/var/spack/repos/builtin/packages/py-pipits/package.py
index c89e9863875..476a6da6d65 100644
--- a/var/spack/repos/builtin/packages/py-pipits/package.py
+++ b/var/spack/repos/builtin/packages/py-pipits/package.py
@@ -51,7 +51,7 @@ class PyPipits(PythonPackage):
def install_db(self):
install_tree(join_path(self.stage.source_path, "refdb"), self.prefix.refdb)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set(
"PIPITS_UNITE_REFERENCE_DATA_CHIMERA",
join_path(
diff --git a/var/spack/repos/builtin/packages/py-poetry-core/package.py b/var/spack/repos/builtin/packages/py-poetry-core/package.py
index 0e0eabc767f..a00b5c41ed5 100644
--- a/var/spack/repos/builtin/packages/py-poetry-core/package.py
+++ b/var/spack/repos/builtin/packages/py-poetry-core/package.py
@@ -40,8 +40,10 @@ def url_for_version(self, version):
return url.format(letter, version)
# https://github.com/python-poetry/poetry/issues/5547
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GIT_DIR", join_path(self.stage.source_path, ".git"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("GIT_DIR", join_path(dependent_spec.package.stage.source_path, ".git"))
diff --git a/var/spack/repos/builtin/packages/py-pox/package.py b/var/spack/repos/builtin/packages/py-pox/package.py
index 1f76d8529b9..48c48a64560 100644
--- a/var/spack/repos/builtin/packages/py-pox/package.py
+++ b/var/spack/repos/builtin/packages/py-pox/package.py
@@ -13,6 +13,11 @@ class PyPox(PythonPackage):
license("BSD-3-Clause")
+ version("0.3.5", sha256="8120ee4c94e950e6e0483e050a4f0e56076e590ba0a9add19524c254bd23c2d1")
+ version("0.3.4", sha256="16e6eca84f1bec3828210b06b052adf04cf2ab20c22fd6fbef5f78320c9a6fed")
+ version("0.3.3", sha256="e1ced66f2a0c92a58cf3646bc7ccb8b4773d40884b76f85eeda0670474871667")
+ version("0.3.2", sha256="e825225297638d6e3d49415f8cfb65407a5d15e56f2fb7fe9d9b9e3050c65ee1")
+ version("0.3.1", sha256="cbb0c0acd650c0ffb620999da611e93aae5105c46a084c4ceaf2f704ed708c1e")
version("0.3.0", sha256="cb968350b186466bb4905a21084587ec3aa6fd7aa0ef55d416ee0d523e2abe31")
version("0.2.5", sha256="2b53fbdf02596240483dc2cb94f94cc21252ad1b1858c7b1c151afeec9022cc8")
version("0.2.3", sha256="d3e8167a1ebe08ae56262a0b9359118d90bc4648cd284b5d10ae240343100a75")
diff --git a/var/spack/repos/builtin/packages/py-ppft/package.py b/var/spack/repos/builtin/packages/py-ppft/package.py
index b998d2585c8..3d85d074424 100644
--- a/var/spack/repos/builtin/packages/py-ppft/package.py
+++ b/var/spack/repos/builtin/packages/py-ppft/package.py
@@ -13,6 +13,11 @@ class PyPpft(PythonPackage):
license("BSD-3-Clause")
+ version("1.7.6.9", sha256="73161c67474ea9d81d04bcdad166d399cff3f084d5d2dc21ebdd46c075bbc265")
+ version("1.7.6.8", sha256="76a429a7d7b74c4d743f6dba8351e58d62b6432ed65df9fe204790160dab996d")
+ version("1.7.6.7", sha256="ab34436814e2f18238f35688fd869b2641b2d2d8dca22b8d246f6701dfc954c8")
+ version("1.7.6.6", sha256="f933f0404f3e808bc860745acb3b79cd4fe31ea19a20889a645f900415be60f1")
+ version("1.7.6.5", sha256="47e0dab87a516c0b9992cd5b0c908348e4c7d964304d106b227fad28ae03219e")
version("1.6.6.4", sha256="473442cc6731856990bd25bd6b454bb98720007de4523a73c560bdd0060463d2")
version("1.6.4.9", sha256="5537b00afb7b247da0f59cc57ee5680178be61c8b2e21b5a0672b70a3d247791")
version("1.6.4.7.1", sha256="f94b26491b4a36adc975fc51dba7568089a24756007a3a4ef3414a98d7337651")
@@ -23,13 +28,18 @@ class PyPpft(PythonPackage):
depends_on("python@2.7:2.8,3.6:", when="@1.6.6.4:", type=("build", "run"))
depends_on("py-setuptools@0.6:", type="build")
- depends_on("py-six@1.7.3:", type=("build", "run"))
+ depends_on("py-six@1.7.3:", type=("build", "run"), when="@:1.7.6.5")
depends_on("py-dill@0.2.6:", type=("build", "run"))
depends_on("py-dill@0.3.4:", type=("build", "run"), when="@1.6.6.4:")
+ depends_on("py-dill@0.3.5:", type=("build", "run"), when="@1.7.6.5")
+ depends_on("py-dill@0.3.6:", type=("build", "run"), when="@1.7.6.6")
+ depends_on("py-dill@0.3.7:", type=("build", "run"), when="@1.7.6.7")
+ depends_on("py-dill@0.3.8:", type=("build", "run"), when="@1.7.6.8")
+ depends_on("py-dill@0.3.9:", type=("build", "run"), when="@1.7.6.9")
def url_for_version(self, version):
url = "https://pypi.io/packages/source/p/ppft/"
- if Version("1.6.6.4") > version >= Version("1.6.4.8"):
+ if version >= Version("1.6.4.8"):
url += "ppft-{0}.tar.gz"
else:
url += "ppft-{0}.zip"
diff --git a/var/spack/repos/builtin/packages/py-psana/package.py b/var/spack/repos/builtin/packages/py-psana/package.py
index d3615c6434d..acb29cf817d 100644
--- a/var/spack/repos/builtin/packages/py-psana/package.py
+++ b/var/spack/repos/builtin/packages/py-psana/package.py
@@ -46,7 +46,7 @@ class PyPsana(PythonPackage):
build_directory = "psana"
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("INSTDIR", "{0}".format(self.prefix))
env.set("XTCDATADIR", "{0}".format(self.spec["xtcdata"].prefix))
env.set("PSALGDIR", "{0}".format(self.spec["psalg"].prefix))
diff --git a/var/spack/repos/builtin/packages/py-pspamm/package.py b/var/spack/repos/builtin/packages/py-pspamm/package.py
index 31e81ac24bd..22ec272ef85 100644
--- a/var/spack/repos/builtin/packages/py-pspamm/package.py
+++ b/var/spack/repos/builtin/packages/py-pspamm/package.py
@@ -27,6 +27,6 @@ class PyPspamm(PythonPackage):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix)
env.prepend_path("PYTHONPATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/py-psyclone/package.py b/var/spack/repos/builtin/packages/py-psyclone/package.py
index ad6da950775..b47abacdda0 100644
--- a/var/spack/repos/builtin/packages/py-psyclone/package.py
+++ b/var/spack/repos/builtin/packages/py-psyclone/package.py
@@ -84,6 +84,6 @@ def check_build(self):
with working_dir("src"):
pytest()
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Allow testing with installed executables
env.prepend_path("PATH", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/py-pyarrow/package.py b/var/spack/repos/builtin/packages/py-pyarrow/package.py
index cd48541f232..d7451c7ced4 100644
--- a/var/spack/repos/builtin/packages/py-pyarrow/package.py
+++ b/var/spack/repos/builtin/packages/py-pyarrow/package.py
@@ -37,6 +37,7 @@ class PyPyarrow(PythonPackage):
version("0.11.0", sha256="07a6fd71c5d7440f2c42383dd2c5daa12d7f0a012f1e88288ed08a247032aead")
version("0.9.0", sha256="7db8ce2f0eff5a00d6da918ce9f9cfec265e13f8a119b4adb1595e5b19fd6242")
+ depends_on("c", type="build")
depends_on("cxx", type="build")
with default_args(type="build"):
@@ -100,11 +101,11 @@ class PyPyarrow(PythonPackage):
# Starting with pyarrow 17+, backend support is built if arrow was built with it
@when("@:16")
- def setup_build_environment(self, env):
- env.set("PYARROW_WITH_PARQUET", self.spec.satisfies("^arrow+parquet"))
- env.set("PYARROW_WITH_CUDA", self.spec.satisfies("^arrow+cuda"))
- env.set("PYARROW_WITH_ORC", self.spec.satisfies("^arrow+orc"))
- env.set("PYARROW_WITH_DATASET", self.spec.satisfies("^arrow+dataset"))
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("PYARROW_WITH_PARQUET", str(self.spec.satisfies("^arrow+parquet")))
+ env.set("PYARROW_WITH_CUDA", str(self.spec.satisfies("^arrow+cuda")))
+ env.set("PYARROW_WITH_ORC", str(self.spec.satisfies("^arrow+orc")))
+ env.set("PYARROW_WITH_DATASET", str(self.spec.satisfies("^arrow+dataset")))
@when("@:16")
def install_options(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-pybind11/package.py b/var/spack/repos/builtin/packages/py-pybind11/package.py
index 204886ce9c2..9b8922ea768 100644
--- a/var/spack/repos/builtin/packages/py-pybind11/package.py
+++ b/var/spack/repos/builtin/packages/py-pybind11/package.py
@@ -110,8 +110,8 @@ def install(self, pkg, spec, prefix):
python_builder = spack.build_systems.python.PythonPipBuilder(pkg)
python_builder.install(pkg, spec, prefix)
- def setup_build_environment(self, env):
- env.set("PYBIND11_USE_CMAKE", 1)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("PYBIND11_USE_CMAKE", "1")
@run_after("install")
def install_test(self):
diff --git a/var/spack/repos/builtin/packages/py-pydftracer/package.py b/var/spack/repos/builtin/packages/py-pydftracer/package.py
index 58b24b60823..321dc82e444 100644
--- a/var/spack/repos/builtin/packages/py-pydftracer/package.py
+++ b/var/spack/repos/builtin/packages/py-pydftracer/package.py
@@ -34,7 +34,7 @@ class PyPydftracer(PythonPackage):
depends_on("ninja", type="build")
depends_on("cmake@3.12:", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DFTRACER_INSTALL_DIR", self.prefix)
env.set("DFTRACER_PYTHON_SITE", python_purelib)
env.set("DFTRACER_BUILD_DEPENDENCIES", "0")
diff --git a/var/spack/repos/builtin/packages/py-pyfftw/package.py b/var/spack/repos/builtin/packages/py-pyfftw/package.py
index 2e18737ac08..09c762c01fd 100644
--- a/var/spack/repos/builtin/packages/py-pyfftw/package.py
+++ b/var/spack/repos/builtin/packages/py-pyfftw/package.py
@@ -48,5 +48,5 @@ def url_for_version(self, version):
name = "pyFFTW"
return url.format(name, version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("LDFLAGS", self.spec["fftw"].libs.search_flags)
diff --git a/var/spack/repos/builtin/packages/py-pyfr/package.py b/var/spack/repos/builtin/packages/py-pyfr/package.py
index 46d72eb2bed..59d20a9d3fd 100644
--- a/var/spack/repos/builtin/packages/py-pyfr/package.py
+++ b/var/spack/repos/builtin/packages/py-pyfr/package.py
@@ -65,7 +65,7 @@ class PyPyfr(PythonPackage, CudaPackage, ROCmPackage):
depends_on("libxsmm@1.18:+shared blas=0", when="+libxsmm", type=("run"))
# Explicitly add dependencies to environment variables
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
deps = ["metis", "scotch", "libxsmm", "hip", "rocblas"]
pyfr_library_path = []
for dep in deps:
diff --git a/var/spack/repos/builtin/packages/py-pygit2/package.py b/var/spack/repos/builtin/packages/py-pygit2/package.py
index 0faf298bfb9..a745afc22b8 100644
--- a/var/spack/repos/builtin/packages/py-pygit2/package.py
+++ b/var/spack/repos/builtin/packages/py-pygit2/package.py
@@ -43,7 +43,7 @@ class PyPygit2(PythonPackage):
depends_on("py-cached-property", when="@1.1:1.5", type=("build", "run"))
depends_on("py-cached-property", when="@1.6: ^python@:3.7", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# https://www.pygit2.org/install.html
env.set("LIBGIT2", spec["libgit2"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-pyhdf/package.py b/var/spack/repos/builtin/packages/py-pyhdf/package.py
index 6eba7244b34..e8dbcfa468d 100644
--- a/var/spack/repos/builtin/packages/py-pyhdf/package.py
+++ b/var/spack/repos/builtin/packages/py-pyhdf/package.py
@@ -35,7 +35,7 @@ class PyPyhdf(PythonPackage):
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):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
inc_dirs = []
lib_dirs = []
# Strip -I and -L from spec include_flags / search_flags
diff --git a/var/spack/repos/builtin/packages/py-pykwalify/package.py b/var/spack/repos/builtin/packages/py-pykwalify/package.py
index eedc502fcc5..049ad6835c0 100644
--- a/var/spack/repos/builtin/packages/py-pykwalify/package.py
+++ b/var/spack/repos/builtin/packages/py-pykwalify/package.py
@@ -15,13 +15,20 @@ class PyPykwalify(PythonPackage):
license("MIT")
+ version("1.8.0", sha256="796b2ad3ed4cb99b88308b533fb2f559c30fa6efb4fa9fda11347f483d245884")
version("1.7.0", sha256="7e8b39c5a3a10bc176682b3bd9a7422c39ca247482df198b402e8015defcceb2")
version("1.6.1", sha256="191fd3f457f23c0aa8538c3a5c0249f70eeb1046e88d0eaaef928e09c44dff8d")
depends_on("py-setuptools", type="build")
- depends_on("py-docopt@0.6.2:", type=("build", "run"))
- depends_on("py-ruamel-yaml@0.11.0:", type=("build", "run"))
- depends_on("py-python-dateutil@2.4.2:", type=("build", "run"))
- depends_on("py-pyyaml@3.11:", type=("build", "run"), when="@1.6.1")
+
+ with default_args(type=("build", "run")):
+ # Uses deprecated imp module
+ depends_on("python@:3.11", when="@:1.7")
+ depends_on("py-docopt@0.6.2:")
+ depends_on("py-ruamel-yaml@0.16:", when="@1.8:")
+ depends_on("py-ruamel-yaml@0.11:")
+ depends_on("py-python-dateutil@2.8:", when="@1.8:")
+ depends_on("py-python-dateutil@2.4.2:")
+ depends_on("py-pyyaml@3.11:", when="@1.6.1")
conflicts("^py-ruamel-yaml@0.16.0:", when="@1.6.1")
diff --git a/var/spack/repos/builtin/packages/py-pylikwid/package.py b/var/spack/repos/builtin/packages/py-pylikwid/package.py
index 79bde09e888..fabe0c9ef86 100644
--- a/var/spack/repos/builtin/packages/py-pylikwid/package.py
+++ b/var/spack/repos/builtin/packages/py-pylikwid/package.py
@@ -30,5 +30,5 @@ class PyPylikwid(PythonPackage):
depends_on("likwid", when="~cuda")
depends_on("likwid+cuda", when="+cuda")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LIKWID_PREFIX", self.spec["likwid"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-pylint-gitlab/package.py b/var/spack/repos/builtin/packages/py-pylint-gitlab/package.py
index 02578496f83..5d57b46565b 100644
--- a/var/spack/repos/builtin/packages/py-pylint-gitlab/package.py
+++ b/var/spack/repos/builtin/packages/py-pylint-gitlab/package.py
@@ -29,5 +29,5 @@ class PyPylintGitlab(PythonPackage):
depends_on("py-tomli", type=("build", "run"))
depends_on("py-dill", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CI_COMMIT_TAG", self.spec.version.string)
diff --git a/var/spack/repos/builtin/packages/py-pynio/package.py b/var/spack/repos/builtin/packages/py-pynio/package.py
index 78ee01117c1..8462c3ac542 100644
--- a/var/spack/repos/builtin/packages/py-pynio/package.py
+++ b/var/spack/repos/builtin/packages/py-pynio/package.py
@@ -56,7 +56,7 @@ class PyPynio(PythonPackage):
depends_on("py-setuptools", type="build")
depends_on("py-numpy", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""
These environment variables are how the setup.py knows which options
to turn on, and how to find them.
diff --git a/var/spack/repos/builtin/packages/py-pynucleus/package.py b/var/spack/repos/builtin/packages/py-pynucleus/package.py
index 97387177e65..e5e38a0dcca 100644
--- a/var/spack/repos/builtin/packages/py-pynucleus/package.py
+++ b/var/spack/repos/builtin/packages/py-pynucleus/package.py
@@ -54,8 +54,8 @@ class PyPynucleus(PythonPackage):
"PyNucleus-nl",
]
- def setup_build_environment(self, env):
- env.set("PYNUCLEUS_BUILD_PARALLELISM", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("PYNUCLEUS_BUILD_PARALLELISM", str(make_jobs))
@run_before("install")
def install_python(self):
diff --git a/var/spack/repos/builtin/packages/py-pyomo/package.py b/var/spack/repos/builtin/packages/py-pyomo/package.py
index e6edc21112e..16cce620492 100644
--- a/var/spack/repos/builtin/packages/py-pyomo/package.py
+++ b/var/spack/repos/builtin/packages/py-pyomo/package.py
@@ -14,9 +14,12 @@ class PyPyomo(PythonPackage):
pypi = "Pyomo/Pyomo-5.6.6.tar.gz"
git = "https://github.com/Pyomo/pyomo.git"
- # Maintainer accurate as of 2024-12-17
+ # Maintainer accurate as of 2025-04-16
maintainers("mrmundt")
+ version("6.9.2", sha256="81b2b14ea619244824e1c547cc12602fe9a6e19309cbf0742868c5b1ef37cb35")
+ version("6.9.1", sha256="ccb85fa4b03450c32614a939c6830d073a7ce79461b12b0f1e7809db96ae86de")
+ version("6.9.0", sha256="622323c9d24de09db9fb491847a9c371be24efa1cc2f38da4782e11850ec1e7d")
version("6.8.2", sha256="40d8f7b216ad1602bb254f4296591608dd94fe2c961dc1e63ca6b84fb397bed6")
version("6.8.1", sha256="dc3369193a915d6fa9a59382f1c02c17f6bf540584f641b9bd20d1f1a7f8ba8c")
version("6.8.0", sha256="a204a78d8ed5fa7ad8fa94d3c8ed4f6da38b5c02a68b8fe446bc694f16c8d1ea")
@@ -80,8 +83,7 @@ class PyPyomo(PythonPackage):
############################
# python_requires
- # Preemptively tagging 3.8:3.13 for 6.8.1 and 6.8.2; 3.8 support will
- # be removed in 6.9.0(MRM - Dec 2024)
+ depends_on("python@3.9:3.13", when="@6.9", type=("build", "run"))
depends_on("python@3.8:3.13", when="@6.8.1:6.8.2", type=("build", "run"))
depends_on("python@3.8:3.12", when="@6.7:6.8.0", type=("build", "run"))
depends_on("python@3.7:3.11", when="@6.4:6.6", type=("build", "run"))
@@ -112,7 +114,7 @@ class PyPyomo(PythonPackage):
# when docs is requested
depends_on("py-sphinx@3:", when="@:6.6+docs", type=("run"))
- depends_on("py-sphinx@5:", when="@6.7:+docs", type=("run"))
+ depends_on("py-sphinx@5:8.1,8.2.1:", when="@6.7:+docs", type=("run"))
depends_on("py-sphinx-copybutton", when="@6.1:+docs", type=("run"))
depends_on("py-sphinx-rtd-theme@0.6:", when="@6.1:+docs", type=("run"))
depends_on("py-sphinxcontrib-jsmath", when="@6.1:+docs", type=("run"))
diff --git a/var/spack/repos/builtin/packages/py-pyopengl/package.py b/var/spack/repos/builtin/packages/py-pyopengl/package.py
index 71e6b8a3243..5d4e33648c5 100644
--- a/var/spack/repos/builtin/packages/py-pyopengl/package.py
+++ b/var/spack/repos/builtin/packages/py-pyopengl/package.py
@@ -27,7 +27,7 @@ class PyPyopengl(PythonPackage):
depends_on("glu", when="+glu", type="link")
depends_on("freeglut+shared", when="+glut", type="link")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# PyOpenGL uses ctypes.cdll (or similar), which searches LD_LIBRARY_PATH
lib_dirs = self.spec["gl"].libs.directories
if "^glx" in self.spec:
@@ -46,7 +46,9 @@ def setup_run_environment(self, env):
else:
env.prepend_path("LD_LIBRARY_PATH", libs)
- def setup_dependent_build_environment_(self, env, dependent_spec):
+ def setup_dependent_build_environment_(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ):
self.setup_run_environment(env)
# only test import available module
diff --git a/var/spack/repos/builtin/packages/py-pyproj/package.py b/var/spack/repos/builtin/packages/py-pyproj/package.py
index 0f8d772c74c..eae451e6cec 100644
--- a/var/spack/repos/builtin/packages/py-pyproj/package.py
+++ b/var/spack/repos/builtin/packages/py-pyproj/package.py
@@ -63,7 +63,7 @@ class PyPyproj(PythonPackage):
depends_on("proj@6.0:7", when="@2.0:2.1")
depends_on("proj")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://pyproj4.github.io/pyproj/stable/installation.html#pyproj-build-environment-variables
env.set("PROJ_VERSION", self.spec["proj"].version)
env.set("PROJ_DIR", self.spec["proj"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-pyproject-metadata/package.py b/var/spack/repos/builtin/packages/py-pyproject-metadata/package.py
index 0b29c4916a9..19ed7878b52 100644
--- a/var/spack/repos/builtin/packages/py-pyproject-metadata/package.py
+++ b/var/spack/repos/builtin/packages/py-pyproject-metadata/package.py
@@ -13,8 +13,21 @@ class PyPyprojectMetadata(PythonPackage):
license("MIT")
+ version("0.9.1", sha256="b8b2253dd1b7062b78cf949a115f02ba7fa4114aabe63fa10528e9e1a954a816")
version("0.7.1", sha256="0a94f18b108b9b21f3a26a3d541f056c34edcb17dc872a144a15618fed7aef67")
version("0.6.1", sha256="b5fb09543a64a91165dfe85796759f9e415edc296beb4db33d1ecf7866a862bd")
- depends_on("py-setuptools@42:", type="build")
- depends_on("py-packaging@19:", type=("build", "run"))
+ with default_args(type="build"):
+ depends_on("py-typing-extensions", when="@0.9: ^python@:3.7")
+ depends_on("py-flit-core", when="@0.8:")
+ depends_on("py-setuptools@42:", when="@:0.7.1")
+
+ with default_args(type=("build", "run")):
+ depends_on("python@3.7:")
+ depends_on("py-packaging@19:")
+
+ def url_for_version(self, version):
+ if version >= Version("0.8.0"):
+ return f"https://files.pythonhosted.org/packages/source/p/pyproject_metadata/pyproject_metadata-{version}.tar.gz"
+ else:
+ return f"https://files.pythonhosted.org/packages/source/p/pyproject-metadata/pyproject-metadata-{version}.tar.gz"
diff --git a/var/spack/repos/builtin/packages/py-pyqt5/package.py b/var/spack/repos/builtin/packages/py-pyqt5/package.py
index 68ee50bd154..070ac2d233d 100644
--- a/var/spack/repos/builtin/packages/py-pyqt5/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt5/package.py
@@ -19,6 +19,7 @@ class PyPyqt5(SIPPackage):
version("5.15.9", sha256="dc41e8401a90dc3e2b692b411bd5492ab559ae27a27424eed4bd3915564ec4c0")
depends_on("cxx", type="build") # generated
+ depends_on("c", type="build")
# pyproject.toml
depends_on("py-sip@6.6.2:6", type="build")
diff --git a/var/spack/repos/builtin/packages/py-pyqt6/package.py b/var/spack/repos/builtin/packages/py-pyqt6/package.py
index 6f9f0e26e0b..be9dd8b52af 100644
--- a/var/spack/repos/builtin/packages/py-pyqt6/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt6/package.py
@@ -34,7 +34,7 @@ class PyPyqt6(SIPPackage):
# README
depends_on("qt-base@6")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Detected system locale encoding (US-ASCII, locale "C") is not UTF-8.
# Qt shall use a UTF-8 locale ("UTF-8") instead. If this causes problems,
# reconfigure your locale. See the locale(1) manual for more information.
diff --git a/var/spack/repos/builtin/packages/py-pysam/package.py b/var/spack/repos/builtin/packages/py-pysam/package.py
index b86f697fa08..f7568b4a2f4 100644
--- a/var/spack/repos/builtin/packages/py-pysam/package.py
+++ b/var/spack/repos/builtin/packages/py-pysam/package.py
@@ -37,7 +37,7 @@ class PyPysam(PythonPackage):
depends_on("htslib@:1.6", when="@:0.13")
depends_on("htslib")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LDFLAGS", self.spec["curl"].libs.search_flags)
# this flag is supposed to be removed by cy_build.py, but for some reason isn't
if self.spec.platform == "darwin":
diff --git a/var/spack/repos/builtin/packages/py-pyscf/package.py b/var/spack/repos/builtin/packages/py-pyscf/package.py
index a37a9629a9e..dd245c0591e 100644
--- a/var/spack/repos/builtin/packages/py-pyscf/package.py
+++ b/var/spack/repos/builtin/packages/py-pyscf/package.py
@@ -58,7 +58,7 @@ class PyPyscf(PythonPackage):
depends_on("libxc")
depends_on("xcfun")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Tell PSCF where supporting libraries are located."
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/py-pyside2/package.py b/var/spack/repos/builtin/packages/py-pyside2/package.py
index 40eba12022c..cd3e72bda9a 100644
--- a/var/spack/repos/builtin/packages/py-pyside2/package.py
+++ b/var/spack/repos/builtin/packages/py-pyside2/package.py
@@ -112,7 +112,7 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("LLVM_INSTALL_DIR", self.spec["llvm"].prefix)
def install_options(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-pyspark/package.py b/var/spack/repos/builtin/packages/py-pyspark/package.py
index e754d8e9f17..f45473ccbaa 100644
--- a/var/spack/repos/builtin/packages/py-pyspark/package.py
+++ b/var/spack/repos/builtin/packages/py-pyspark/package.py
@@ -55,7 +55,7 @@ class PyPyspark(PythonPackage):
]:
depends_on(f"py-py4j@{py4j_version}:", when=f"@{pyspark_version}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PYSPARK_PYTHON", python.path)
env.set("PYSPARK_DRIVER_PYTHON", python.path)
if self.spec.satisfies("+pandas ^java@11:"):
diff --git a/var/spack/repos/builtin/packages/py-python-dateutil/package.py b/var/spack/repos/builtin/packages/py-python-dateutil/package.py
index 2cdf34e81da..e72c41a6954 100644
--- a/var/spack/repos/builtin/packages/py-python-dateutil/package.py
+++ b/var/spack/repos/builtin/packages/py-python-dateutil/package.py
@@ -13,6 +13,9 @@ class PyPythonDateutil(PythonPackage):
license("Apache-2.0")
+ version(
+ "2.9.0.post0", sha256="37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"
+ )
version("2.8.2", sha256="0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86")
version("2.8.1", sha256="73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c")
version("2.8.0", sha256="c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e")
@@ -21,9 +24,22 @@ class PyPythonDateutil(PythonPackage):
version("2.4.2", sha256="3e95445c1db500a344079a47b171c45ef18f57d188dffdb0e4165c71bea8eb3d")
version("2.4.0", sha256="439df33ce47ef1478a4f4765f3390eab0ed3ec4ae10be32f2930000c8d19f417")
version("2.2", sha256="eec865307ebe7f329a6a9945c15453265a449cdaaf3710340828a1934d53e468")
- version("1.5", sha256="6f197348b46fb8cdf9f3fcfc2a7d5a97da95db3e2e8667cf657216274fe1b009")
- depends_on("python@2.7:2.8,3.3:", when="@2.7.5:", type=("build", "run"))
- depends_on("py-setuptools@24.3:", type="build")
- depends_on("py-setuptools-scm", type="build", when="@2.7.0:")
- depends_on("py-six@1.5:", when="@2:", type=("build", "run"))
+ with default_args(deprecated=True):
+ version("1.5", sha256="6f197348b46fb8cdf9f3fcfc2a7d5a97da95db3e2e8667cf657216274fe1b009")
+
+ with default_args(type="build"):
+ depends_on("py-setuptools@:39", when="@2.8.0: ^python@3.3")
+ depends_on("py-setuptools@24.3:")
+
+ depends_on("py-setuptools-scm@:7", when="@2.9.0.post0:")
+
+ depends_on("py-wheel", when="@2.8.0:")
+
+ with default_args(type=("build", "run")):
+ depends_on("python@2.7:2,3.3:", when="@2.7.0:")
+ depends_on("python@2.6:2,3.2:", when="@2.1:")
+ depends_on("python@3:", when="@2.0")
+ depends_on("python", when="@:1")
+
+ depends_on("py-six@1.5:", when="@2:")
diff --git a/var/spack/repos/builtin/packages/py-python-mapnik/package.py b/var/spack/repos/builtin/packages/py-python-mapnik/package.py
index 90b70bbfa9a..d150947ba4f 100644
--- a/var/spack/repos/builtin/packages/py-python-mapnik/package.py
+++ b/var/spack/repos/builtin/packages/py-python-mapnik/package.py
@@ -33,7 +33,7 @@ class PyPythonMapnik(PythonPackage):
depends_on("py-pycairo", type=("build", "run"))
# Package can't find boost_python without the following
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Inform the package that boost python library is of form
# 'libboost_python27.so' as opposed to 'libboost_python.so'
py_ver = str(self.spec["python"].version.up_to(2).joined)
diff --git a/var/spack/repos/builtin/packages/py-pythran/package.py b/var/spack/repos/builtin/packages/py-pythran/package.py
index b259907ca14..b1de2d3753e 100644
--- a/var/spack/repos/builtin/packages/py-pythran/package.py
+++ b/var/spack/repos/builtin/packages/py-pythran/package.py
@@ -93,21 +93,25 @@ def patch(self):
cfg_file = join_path("pythran", "pythran-{0}.cfg".format(sys.platform))
filter_file("CXX=", "CXX=" + self.compiler.cxx, cfg_file)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Needed for `spack install --test=root py-pythran`
if self.spec.satisfies("%apple-clang"):
env.prepend_path(
"DYLD_FALLBACK_LIBRARY_PATH", self.spec["llvm-openmp"].libs.directories[0]
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Needed for `spack test run py-pythran`
self.setup_build_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Needed for `spack install py-scipy`
self.setup_build_environment(env)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Probably needed for something?
self.setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/py-qiskit-aer/package.py b/var/spack/repos/builtin/packages/py-qiskit-aer/package.py
index 9284d50b91e..7b6eeb56884 100644
--- a/var/spack/repos/builtin/packages/py-qiskit-aer/package.py
+++ b/var/spack/repos/builtin/packages/py-qiskit-aer/package.py
@@ -42,7 +42,7 @@ class PyQiskitAer(PythonPackage, CudaPackage):
variant("mpi", default=True, description="Enable MPI support")
variant("gdr", default=True, description="Enable GDR support")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("DISABLE_CONAN", "ON")
env.set("DISABLE_DEPENDENCY_INSTALL", "1")
env.set("CUDAHOSTCXX", spack_cxx)
diff --git a/var/spack/repos/builtin/packages/py-qtpy/package.py b/var/spack/repos/builtin/packages/py-qtpy/package.py
index ab71b3ff5dc..ff8e5912898 100644
--- a/var/spack/repos/builtin/packages/py-qtpy/package.py
+++ b/var/spack/repos/builtin/packages/py-qtpy/package.py
@@ -26,5 +26,5 @@ class PyQtpy(PythonPackage):
for api in apis:
depends_on("py-" + api, when="api=" + api, type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("QT_API", self.spec.variants["api"].value)
diff --git a/var/spack/repos/builtin/packages/py-ray/package.py b/var/spack/repos/builtin/packages/py-ray/package.py
index f07ae308d43..0af1ecc74fc 100644
--- a/var/spack/repos/builtin/packages/py-ray/package.py
+++ b/var/spack/repos/builtin/packages/py-ray/package.py
@@ -94,7 +94,7 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SKIP_THIRDPARTY_INSTALL", "1")
# Compile the dashboard npm modules included in the project
diff --git a/var/spack/repos/builtin/packages/py-repligit/package.py b/var/spack/repos/builtin/packages/py-repligit/package.py
new file mode 100644
index 00000000000..acb63ba738a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-repligit/package.py
@@ -0,0 +1,30 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class PyRepligit(PythonPackage):
+ """A Git client for mirroring multiple remotes without storing state."""
+
+ homepage = "https://github.com/LLNL/repligit"
+ pypi = "repligit/repligit-0.1.0.tar.gz"
+ git = "https://github.com/LLNL/repligit.git"
+
+ maintainers("alecbcs", "cmelone")
+
+ license("Apache-2.0 WITH LLVM-exception")
+
+ version("main", branch="main")
+ version("0.1.1", sha256="e1fec2b080dd657502b967148fbb7dd5d33eb02fc47a2e91ed7bbfebf082410e")
+ version("0.1.0", sha256="9beac1a14542704f2e5af6a2f3d391d8adf2112ae3c70e98339db251a9e1079e")
+
+ variant("aiohttp", default="False", description="Enable aiohttp support")
+
+ conflicts("python@:3.12", when="@0.1.0")
+
+ depends_on("python@3.10:", type=("build", "run"))
+ depends_on("py-hatchling", type="build")
+
+ depends_on("py-aiohttp", type=("build", "run"), when="+aiohttp")
diff --git a/var/spack/repos/builtin/packages/py-requests-unixsocket/package.py b/var/spack/repos/builtin/packages/py-requests-unixsocket/package.py
index 7dc2d74341f..26391c33d3a 100644
--- a/var/spack/repos/builtin/packages/py-requests-unixsocket/package.py
+++ b/var/spack/repos/builtin/packages/py-requests-unixsocket/package.py
@@ -13,10 +13,21 @@ class PyRequestsUnixsocket(PythonPackage):
license("Apache-2.0")
+ version("0.4.1", sha256="b2596158c356ecee68d27ba469a52211230ac6fb0cde8b66afb19f0ed47a1995")
version("0.3.0", sha256="28304283ea9357d45fff58ad5b11e47708cfbf5806817aa59b2a363228ee971e")
version("0.2.0", sha256="9e5c1a20afc3cf786197ae59c79bcdb0e7565f218f27df5f891307ee8817c1ea")
- depends_on("py-setuptools", type="build")
- depends_on("py-pbr", type="build")
+ depends_on("py-setuptools", when="@:0.3.0", type="build")
+ depends_on("py-setuptools@64:", when="@0.4:", type="build")
+ depends_on("py-setuptools-scm@8:", when="@0.4:", type="build")
+ depends_on("python@3.9:", when="@0.4:", type=("build", "run"))
depends_on("py-requests@1.1:", type=("build", "run"))
depends_on("py-urllib3@1.8:", when="@:0.2.0", type=("build", "run"))
+
+ def url_for_version(self, version):
+ url = "https://files.pythonhosted.org/packages/source/r/requests-unixsocket/requests{}unixsocket-{}.tar.gz"
+ if version >= Version("0.3.1"):
+ sep = "_"
+ else:
+ sep = "-"
+ return url.format(sep, version)
diff --git a/var/spack/repos/builtin/packages/py-rpy2/package.py b/var/spack/repos/builtin/packages/py-rpy2/package.py
index 30dcb9f20ae..f7aac121bf3 100644
--- a/var/spack/repos/builtin/packages/py-rpy2/package.py
+++ b/var/spack/repos/builtin/packages/py-rpy2/package.py
@@ -31,6 +31,9 @@ class PyRpy2(PythonPackage):
variant("pandas", default=True, description="Pandas", when="@3.5.17:")
variant("ipython", default=True, description="iPython", when="@3.5.17:")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
# many of the previous minor and patch versions change dependency versions so future updates
# should be careful of that
depends_on("python@3.8:", type=("build", "run"), when="@3.5.17:")
@@ -61,7 +64,7 @@ class PyRpy2(PythonPackage):
depends_on("py-backports-zoneinfo", type=("build", "run"), when="@3.5.17: ^python@:3.8")
- depends_on("iconv", type=("link"))
+ depends_on("iconv")
# These are from 2019 and predate the pyproject.toml config that currently exists
with when("@3.0.0:3.0.4"):
diff --git a/var/spack/repos/builtin/packages/py-rtree/package.py b/var/spack/repos/builtin/packages/py-rtree/package.py
index 670d5e69ba9..734b6a6205c 100644
--- a/var/spack/repos/builtin/packages/py-rtree/package.py
+++ b/var/spack/repos/builtin/packages/py-rtree/package.py
@@ -36,8 +36,8 @@ def url_for_version(self, version):
name = name.lower()
return url.format(name, version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SPATIALINDEX_C_LIBRARY", self.spec["libspatialindex"].libs[0])
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/py-salib/package.py b/var/spack/repos/builtin/packages/py-salib/package.py
index dfe04cb4189..257ea5b5d67 100644
--- a/var/spack/repos/builtin/packages/py-salib/package.py
+++ b/var/spack/repos/builtin/packages/py-salib/package.py
@@ -9,21 +9,50 @@ class PySalib(PythonPackage):
"""Python implementations of commonly used sensitivity analysis methods."""
homepage = "https://salib.readthedocs.org"
- pypi = "SALib/SALib-1.4.0.1.tar.gz"
+ pypi = "salib/salib-1.4.6.tar.gz"
maintainers("schmitts")
license("MIT")
- version("1.4.4", sha256="50a6459088700f55261a683752818530d14ede30cece2c324ac94d4b9e288b6d")
- version("1.4.0.1", sha256="dbf6e865af9f3be82a79cf64889ed66d6d3b6803f0c22a242a112876789d49e7")
+ version("1.5.1", sha256="e4a9c319b8dd02995a8dc983f57c452cb7e5b6dbd43e7b7856c90cb6a332bb5f")
+ version("1.5.0", sha256="04367cbe7f63c5206ec0d793b80477bb4d61d50c0b8c76db1844fe8709f7a39c")
+ version("1.4.8", sha256="86e7cca79f73f3c52825101cacfb2d51d95adfb7771e7e0ebcd632bffa2cab82")
+ version("1.4.7", sha256="2e6cb19ec772d6cb7368feceae0f61e51f2d6afdbc4f8986a780b87d657b38cc")
+ version("1.4.6.1", sha256="dbb14bfc25debf24192feac98cd34c167fbed42743afbcd614cbeb625f310d69")
+ version("1.4.6", sha256="14337239f1e92960e8f53774c27b1d072253790b57edbbebd290057a5eeb3858")
+ version(
+ "1.4.4",
+ sha256="50a6459088700f55261a683752818530d14ede30cece2c324ac94d4b9e288b6d",
+ url="https://files.pythonhosted.org/packages/SALib/SALib-1.4.4.tar.gz",
+ )
+ version(
+ "1.4.0.1",
+ sha256="dbf6e865af9f3be82a79cf64889ed66d6d3b6803f0c22a242a112876789d49e7",
+ url="https://files.pythonhosted.org/packages/source/s/SALib/SALib-1.4.0.1.tar.gz",
+ )
- depends_on("py-setuptools@38.3:", type=("build", "run"))
+ variant("distributed", default=False, description="Build with experimental distributed mode")
+
+ depends_on("py-importlib-metadata", type="build", when="@1.4.4:1.4.5 ^python@:3.7")
+ depends_on("py-setuptools@38.3:", type="build", when="@:1.4.5")
+ depends_on("py-setuptools-scm", type="build", when="@1.4.4:1.4.5")
+ depends_on("py-wheel", type="build", when="@:1.4.5")
+ depends_on("py-hatchling@1.8.1:", type="build", when="@1.4.6:")
+ depends_on("py-hatch-vcs", type="build", when="@1.5.0:")
+
+ depends_on("python@3.9:", type=("build", "run"), when="@1.5.0:")
+ depends_on("python@3.8:", type=("build", "run"), when="@1.4.6:")
+ depends_on("py-numpy@1.20.3:", type=("build", "run"), when="@1.4.6:")
depends_on("py-numpy@1.16.5:", type=("build", "run"))
+ depends_on("py-scipy@1.9.3:", type=("build", "run"), when="@1.5.0:")
+ depends_on("py-scipy@1.7.3:", type=("build", "run"), when="@1.4.6:")
depends_on("py-scipy@1.5.2:", type=("build", "run"))
- depends_on("py-matplotlib@3.2.2:", type=("build", "run"))
+ depends_on("py-matplotlib@3.5:", type=("build", "run"), when="@1.5.0:")
+ depends_on("py-matplotlib@3.2.2:", type=("build", "run"), when="@:1.4.8")
+ depends_on("py-pandas@2.0:", type=("build", "run"), when="@1.5.0:")
+ depends_on("py-pandas@1.2:", type=("build", "run"), when="@1.4.8:")
depends_on("py-pandas@1.1.2:", type=("build", "run"))
- depends_on("py-pathos@0.2.5:", type=("build", "run"))
- depends_on("py-importlib-metadata", type=("build", "run"), when="@1.4.4: ^python@:3.7")
- depends_on("py-setuptools-scm", type=("build", "run"), when="@1.4.4:")
- depends_on("py-wheel", type=("build", "run"), when="@1.4.4:")
+ depends_on("py-pathos@0.3.2:", type=("build", "run"), when="@1.5.0: +distributed")
+ depends_on("py-pathos@0.2.5:", type=("build", "run"), when="@1.4.6: +distributed")
+ depends_on("py-pathos@0.2.5:", type=("build", "run"), when="@:1.4.5")
diff --git a/var/spack/repos/builtin/packages/py-scikit-build-core/package.py b/var/spack/repos/builtin/packages/py-scikit-build-core/package.py
index 61417047859..b1ce8fe23b2 100644
--- a/var/spack/repos/builtin/packages/py-scikit-build-core/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-build-core/package.py
@@ -18,6 +18,7 @@ class PyScikitBuildCore(PythonPackage):
license("Apache-2.0")
+ version("0.11.1", sha256="4e5988df5cd33f0bdb9967b72663ca99f50383c9bc21d8b24fa40c0661ae72b7")
version("0.10.7", sha256="04cbb59fe795202a7eeede1849112ee9dcbf3469feebd9b8b36aa541336ac4f8")
version("0.9.5", sha256="2a4cb119cc968fe87ae05582979657cc0e7be45655798446eabbe490e61ce072")
version("0.8.2", sha256="50ec24b9568c9aa6e27233deeb2978932bc79856212b30575cbfa4049655c436")
@@ -44,7 +45,8 @@ class PyScikitBuildCore(PythonPackage):
depends_on("py-importlib-metadata@1:", when="@0.9: ^python@:3.7")
depends_on("py-importlib-metadata", when="@0.3.0: ^python@:3.7")
depends_on("py-importlib-resources@1.3:", when="^python@:3.8", type=("build", "run"))
- depends_on("py-packaging@21.3:", type=("build", "run"), when="@0.9:")
+ depends_on("py-packaging@23.2:", type=("build", "run"), when="@0.10:")
+ depends_on("py-packaging@21.3:", type=("build", "run"), when="@0.9")
depends_on("py-packaging@20.9:", type=("build", "run"))
depends_on("py-pathspec@0.10.1:", type=("build", "run"), when="@0.9:")
depends_on("py-tomli@1.2.2:", when="@0.9: ^python@:3.10", type=("build", "run"))
@@ -73,8 +75,8 @@ class PyScikitBuildCore(PythonPackage):
depends_on("py-setuptools@45:", when="@0.9: ^python@3.9", type="test")
depends_on("py-setuptools@49:", when="@0.9: ^python@3.10:3.11", type="test")
depends_on("py-setuptools@66.1:", when="@0.9: ^python@3.12:", type="test")
- depends_on("py-virtualenv@20.0.28:", when="@0.9:", type="test")
depends_on("py-setuptools", type="test")
+ depends_on("py-virtualenv@20.0.28:", when="@0.9:", type="test")
depends_on("py-virtualenv", when="@0.6:", type="test")
depends_on("py-wheel@0.40:", when="@0.9:", type="test")
depends_on("py-wheel", type="test")
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 bcb040d2340..44d6fc90140 100644
--- a/var/spack/repos/builtin/packages/py-scikit-learn/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-learn/package.py
@@ -16,6 +16,8 @@ class PyScikitLearn(PythonPackage):
license("BSD-3-Clause")
maintainers("adamjstewart", "rgommers")
+ tags = ["e4s"]
+
version("main", branch="main")
version("master", branch="main", deprecated=True)
version("1.6.1", sha256="b4fc2525eca2c69a59260f583c56a7557c6ccdf8deafdba6e060f94c1c59738e")
@@ -134,7 +136,7 @@ def url_for_version(self, version):
name = "scikit-learn"
return url.format(name, version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Enable parallel builds of the sklearn backend
env.append_flags("SKLEARN_BUILD_PARALLEL", str(make_jobs))
diff --git a/var/spack/repos/builtin/packages/py-scikits-odes/package.py b/var/spack/repos/builtin/packages/py-scikits-odes/package.py
index 43c80feca54..9f0b7a0c8bb 100644
--- a/var/spack/repos/builtin/packages/py-scikits-odes/package.py
+++ b/var/spack/repos/builtin/packages/py-scikits-odes/package.py
@@ -43,7 +43,7 @@ class PyScikitsOdes(PythonPackage):
sha256="8d05d7bcc3582b7c482a4393bf5a8c0460a58eb62d1e3c86339c95a0d4ce30ac",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SUNDIALS_INST", self.spec["sundials"].prefix)
@run_after("install")
diff --git a/var/spack/repos/builtin/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py
index 2209dc499c1..2dcba681608 100644
--- a/var/spack/repos/builtin/packages/py-scipy/package.py
+++ b/var/spack/repos/builtin/packages/py-scipy/package.py
@@ -42,51 +42,20 @@ class PyScipy(PythonPackage):
version("1.7.2", sha256="fa2dbabaaecdb502641b0b3c00dec05fb475ae48655c66da16c9ed24eda1e711")
version("1.7.1", sha256="6b47d5fa7ea651054362561a28b1ccc8da9368a39514c1bbf6c0977a1c376764")
version("1.7.0", sha256="998c5e6ea649489302de2c0bc026ed34284f531df89d2bdc8df3a0d44d165739")
- version("1.6.3", sha256="a75b014d3294fce26852a9d04ea27b5671d86736beb34acdfc05859246260707")
- version("1.6.2", sha256="e9da33e21c9bc1b92c20b5328adb13e5f193b924c9b969cd700c8908f315aa59")
- version("1.6.1", sha256="c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11")
- version("1.6.0", sha256="cb6dc9f82dfd95f6b9032a8d7ea70efeeb15d5b5fd6ed4e8537bb3c673580566")
- version("1.5.4", sha256="4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b")
- version(
- "1.5.3",
- sha256="ddae76784574cc4c172f3d5edd7308be16078dd3b977e8746860c76c195fa707",
- deprecated=True,
- )
- version(
- "1.5.2",
- sha256="066c513d90eb3fd7567a9e150828d39111ebd88d3e924cdfc9f8ce19ab6f90c9",
- deprecated=True,
- )
- version(
- "1.5.1",
- sha256="039572f0ca9578a466683558c5bf1e65d442860ec6e13307d528749cfe6d07b8",
- deprecated=True,
- )
- version(
- "1.5.0",
- sha256="4ff72877d19b295ee7f7727615ea8238f2d59159df0bdd98f91754be4a2767f0",
- deprecated=True,
- )
- version(
- "1.4.1",
- sha256="dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59",
- deprecated=True,
- )
- version(
- "1.4.0",
- sha256="31f7cfa93b01507c935c12b535e24812594002a02a56803d7cd063e9920d25e8",
- deprecated=True,
- )
- version(
- "1.3.3",
- sha256="64bf4e8ae0db2d42b58477817f648d81e77f0b381d0ea4427385bba3f959380a",
- deprecated=True,
- )
- version(
- "1.3.2",
- sha256="a03939b431994289f39373c57bbe452974a7da724ae7f9620a1beee575434da4",
- deprecated=True,
- )
+ with default_args(deprecated=True):
+ version("1.6.3", sha256="a75b014d3294fce26852a9d04ea27b5671d86736beb34acdfc05859246260707")
+ version("1.6.2", sha256="e9da33e21c9bc1b92c20b5328adb13e5f193b924c9b969cd700c8908f315aa59")
+ version("1.6.1", sha256="c4fceb864890b6168e79b0e714c585dbe2fd4222768ee90bc1aa0f8218691b11")
+ version("1.6.0", sha256="cb6dc9f82dfd95f6b9032a8d7ea70efeeb15d5b5fd6ed4e8537bb3c673580566")
+ version("1.5.4", sha256="4a453d5e5689de62e5d38edf40af3f17560bfd63c9c5bd228c18c1f99afa155b")
+ version("1.5.3", sha256="ddae76784574cc4c172f3d5edd7308be16078dd3b977e8746860c76c195fa707")
+ version("1.5.2", sha256="066c513d90eb3fd7567a9e150828d39111ebd88d3e924cdfc9f8ce19ab6f90c9")
+ version("1.5.1", sha256="039572f0ca9578a466683558c5bf1e65d442860ec6e13307d528749cfe6d07b8")
+ version("1.5.0", sha256="4ff72877d19b295ee7f7727615ea8238f2d59159df0bdd98f91754be4a2767f0")
+ version("1.4.1", sha256="dee1bbf3a6c8f73b6b218cb28eed8dd13347ea2f87d572ce19b289d6fd3fbc59")
+ version("1.4.0", sha256="31f7cfa93b01507c935c12b535e24812594002a02a56803d7cd063e9920d25e8")
+ version("1.3.3", sha256="64bf4e8ae0db2d42b58477817f648d81e77f0b381d0ea4427385bba3f959380a")
+ version("1.3.2", sha256="a03939b431994289f39373c57bbe452974a7da724ae7f9620a1beee575434da4")
depends_on("c", type="build")
depends_on("cxx", type="build")
@@ -230,11 +199,6 @@ def archive_files(self):
@run_before("install")
def set_fortran_compiler(self):
- if self.compiler.f77 is None or self.compiler.fc is None:
- raise InstallError(
- "py-scipy requires Fortran compilers. Configure Fortran compiler to proceed."
- )
-
if self.spec.satisfies("%fj"):
with open("setup.cfg", "w") as f:
f.write("[config_fc]\n")
@@ -249,7 +213,7 @@ def set_fortran_compiler(self):
f.write("[config_fc]\n")
f.write("fcompiler = intelem\n")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://github.com/scipy/scipy/issues/9080
env.set("F90", spack_fc)
diff --git a/var/spack/repos/builtin/packages/py-segmentation-models-pytorch/package.py b/var/spack/repos/builtin/packages/py-segmentation-models-pytorch/package.py
index bb0ee82d5d1..c2832e452ca 100644
--- a/var/spack/repos/builtin/packages/py-segmentation-models-pytorch/package.py
+++ b/var/spack/repos/builtin/packages/py-segmentation-models-pytorch/package.py
@@ -14,6 +14,7 @@ class PySegmentationModelsPytorch(PythonPackage):
license("MIT")
maintainers("adamjstewart")
+ version("0.5.0", sha256="cabba8aced6ef7bdcd6288dd9e1dc2840848aa819d539c455bd07aeceb2fdf96")
version("0.4.0", sha256="8833e63f0846090667be6fce05a2bbebbd1537776d3dea72916aa3db9e22e55b")
with default_args(deprecated=True):
version("0.3.4", sha256="f4aee7f6add479bd3c3953e855b7055fc657dc6800bf7fc8ab733fd7f8acb163")
@@ -29,18 +30,12 @@ class PySegmentationModelsPytorch(PythonPackage):
depends_on("py-setuptools")
with default_args(type=("build", "run")):
- depends_on("py-efficientnet-pytorch@0.6.1:", when="@0.4:")
- depends_on("py-efficientnet-pytorch@0.7.1", when="@0.3")
- depends_on("py-efficientnet-pytorch@0.6.3", when="@:0.2")
depends_on("py-huggingface-hub@0.24:", when="@0.4:")
depends_on("py-huggingface-hub@0.24.6:", when="@0.3.4:0.3")
depends_on("py-numpy@1.19.3:", when="@0.4:")
depends_on("pil@8:", when="@0.4:")
depends_on("pil", when="@0.3:")
- depends_on("py-pretrainedmodels@0.7.1:", when="@0.4:")
- depends_on("py-pretrainedmodels@0.7.4", when="@:0.3")
- depends_on("py-six@1.5:", when="@0.4:")
- depends_on("py-six", when="@0.3.4:")
+ depends_on("py-safetensors@0.3.1:", when="@0.5:")
depends_on("py-timm@0.9:", when="@0.4:")
depends_on("py-timm@0.9.7", when="@0.3.4")
depends_on("py-timm@0.9.2", when="@0.3.3")
@@ -51,3 +46,12 @@ class PySegmentationModelsPytorch(PythonPackage):
depends_on("py-torchvision@0.5:")
depends_on("py-tqdm@4.42.1:", when="@0.4:")
depends_on("py-tqdm", when="@0.3:")
+
+ # Historical dependencies
+ depends_on("py-efficientnet-pytorch@0.6.1:", when="@0.4")
+ depends_on("py-efficientnet-pytorch@0.7.1", when="@0.3")
+ depends_on("py-efficientnet-pytorch@0.6.3", when="@0.2")
+ depends_on("py-pretrainedmodels@0.7.1:", when="@0.4")
+ depends_on("py-pretrainedmodels@0.7.4", when="@:0.3")
+ depends_on("py-six@1.5:", when="@0.4")
+ depends_on("py-six", when="@0.3.4")
diff --git a/var/spack/repos/builtin/packages/py-setuptools-scm/package.py b/var/spack/repos/builtin/packages/py-setuptools-scm/package.py
index 585db295a9c..ad508f64899 100644
--- a/var/spack/repos/builtin/packages/py-setuptools-scm/package.py
+++ b/var/spack/repos/builtin/packages/py-setuptools-scm/package.py
@@ -16,6 +16,7 @@ class PySetuptoolsScm(PythonPackage):
license("MIT")
+ version("8.2.1", sha256="51cfdd1deefc9b8c08d1a61e940a59c4dec39eb6c285d33fa2f1b4be26c7874d")
version("8.2.0", sha256="a18396a1bc0219c974d1a74612b11f9dce0d5bd8b1dc55c65f6ac7fd609e8c28")
version("8.1.0", sha256="42dea1b65771cba93b7a515d65a65d8246e560768a66b9106a592c8e7f26c8a7")
version("8.0.4", sha256="b5f43ff6800669595193fd09891564ee9d1d7dcb196cab4b2506d53a2e1c95c7")
diff --git a/var/spack/repos/builtin/packages/py-setuptools/package.py b/var/spack/repos/builtin/packages/py-setuptools/package.py
index 8d4510adc50..7e249a5ece4 100644
--- a/var/spack/repos/builtin/packages/py-setuptools/package.py
+++ b/var/spack/repos/builtin/packages/py-setuptools/package.py
@@ -14,21 +14,34 @@ class PySetuptools(Package, PythonExtension):
url = "https://files.pythonhosted.org/packages/py3/s/setuptools/setuptools-62.3.2-py3-none-any.whl"
list_url = "https://pypi.org/simple/setuptools/"
+ maintainers("RobertMaaskant")
+
tags = ["build-tools"]
# Requires railroad
skip_modules = ["setuptools._vendor", "pkg_resources._vendor"]
+ version("78.1.1", sha256="c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561")
+ version("78.1.0", sha256="3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8")
+ version("78.0.2", sha256="4a612c80e1f1d71b80e4906ce730152e8dec23df439f82731d9d0b608d7b700d")
+ version("78.0.1", sha256="1cc9b32ee94f93224d6c80193cbb768004667aa2f2732a473d6949b0236c1d4e")
+ version("77.0.3", sha256="67122e78221da5cf550ddd04cf8742c8fe12094483749a792d56cd669d6cf58c")
+ version("77.0.1", sha256="81a234dff81a82bb52e522c8aef145d0dd4de1fd6de4d3b196d0f77dc2fded26")
+ version("76.1.0", sha256="34750dcb17d046929f545dec9b8349fe42bf4ba13ddffee78428aec422dbfb73")
version("76.0.0", sha256="199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6")
version("75.9.1", sha256="0a6f876d62f4d978ca1a11ab4daf728d1357731f978543ff18ecdbf9fd071f73")
version("75.8.2", sha256="558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f")
version("75.8.1", sha256="3bc32c0b84c643299ca94e77f834730f126efd621de0cc1de64119e0e17dab1f")
version("75.8.0", sha256="e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3")
+ # Last version supporting Python 3.8
+ version("75.3.2", sha256="90ab613b6583fc02d5369cbca13ea26ea0e182d1df2d943ee9cbe81d4c61add9")
+ version("75.3.1", sha256="ccd77cda9d3bc3d3e99036d221b91d15f86e53195139d643b5b5299d42463cd3")
version("75.3.0", sha256="f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd")
version("69.2.0", sha256="c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c")
version("69.1.1", sha256="02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56")
version("69.0.3", sha256="385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05")
version("68.2.2", sha256="b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a")
+ # Last version supporting Python 3.7
version("68.0.0", sha256="11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f")
version("67.6.0", sha256="b78aaa36f6b90a074c1fa651168723acbf45d14cb1196b6f02c0fd07f17623b2")
version("65.5.0", sha256="f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356")
@@ -39,21 +52,42 @@ class PySetuptools(Package, PythonExtension):
version("62.6.0", sha256="c1848f654aea2e3526d17fc3ce6aeaa5e7e24e66e645b5be2171f3f6b4e5a178")
version("62.4.0", sha256="5a844ad6e190dccc67d6d7411d119c5152ce01f7c76be4d8a1eaa314501bba77")
version("62.3.2", sha256="68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36")
+ # Last version supporting Python 3.6
version("59.4.0", sha256="feb5ff19b354cde9efd2344ef6d5e79880ce4be643037641b49508bbb850d060")
version("58.2.0", sha256="2551203ae6955b9876741a26ab3e767bb3242dafe86a32a749ea0d78b6792f11")
version("57.4.0", sha256="a49230977aa6cfb9d933614d2f7b79036e9945c4cdd7583163f4e920b83418d6")
- version("57.1.0", sha256="ddae4c1b9220daf1e32ba9d4e3714df6019c5b583755559be84ff8199f7e1fe3")
- version("51.0.0", sha256="8c177936215945c9a37ef809ada0fab365191952f7a123618432bbfac353c529")
- version("50.3.2", sha256="2c242a0856fbad7efbe560df4a7add9324f340cf48df43651e9604924466794a")
- version("50.1.0", sha256="4537c77e6e7dc170081f8547564551d4ff4e4999717434e1257600bbd3a23296")
- version("49.6.0", sha256="4dd5bb0a0a0cff77b46ca5dd3a84857ee48c83e8223886b556613c724994073f")
- version("49.2.0", sha256="272c7f48f5cddc5af5901f4265274c421c7eede5c8bc454ac2903d3f8fc365e9")
- version("46.1.3", sha256="4fe404eec2738c20ab5841fa2d791902d2a645f32318a7850ef26f8d7215a8ee")
- version("44.1.1", sha256="27a714c09253134e60a6fa68130f78c7037e5562c4f21f8f318f2ae900d152d5")
- version("44.1.0", sha256="992728077ca19db6598072414fb83e0a284aca1253aaf2e24bb1e55ee6db1a30")
- version("43.0.0", sha256="a67faa51519ef28cd8261aff0e221b6e4c370f8fb8bada8aa3e7ad8945199963")
with default_args(deprecated=True):
+ version(
+ "57.1.0", sha256="ddae4c1b9220daf1e32ba9d4e3714df6019c5b583755559be84ff8199f7e1fe3"
+ )
+ version(
+ "51.0.0", sha256="8c177936215945c9a37ef809ada0fab365191952f7a123618432bbfac353c529"
+ )
+ version(
+ "50.3.2", sha256="2c242a0856fbad7efbe560df4a7add9324f340cf48df43651e9604924466794a"
+ )
+ version(
+ "50.1.0", sha256="4537c77e6e7dc170081f8547564551d4ff4e4999717434e1257600bbd3a23296"
+ )
+ version(
+ "49.6.0", sha256="4dd5bb0a0a0cff77b46ca5dd3a84857ee48c83e8223886b556613c724994073f"
+ )
+ version(
+ "49.2.0", sha256="272c7f48f5cddc5af5901f4265274c421c7eede5c8bc454ac2903d3f8fc365e9"
+ )
+ version(
+ "46.1.3", sha256="4fe404eec2738c20ab5841fa2d791902d2a645f32318a7850ef26f8d7215a8ee"
+ )
+ version(
+ "44.1.1", sha256="27a714c09253134e60a6fa68130f78c7037e5562c4f21f8f318f2ae900d152d5"
+ )
+ version(
+ "44.1.0", sha256="992728077ca19db6598072414fb83e0a284aca1253aaf2e24bb1e55ee6db1a30"
+ )
+ version(
+ "43.0.0", sha256="a67faa51519ef28cd8261aff0e221b6e4c370f8fb8bada8aa3e7ad8945199963"
+ )
version(
"41.4.0", sha256="8d01f7ee4191d9fdcd9cc5796f75199deccb25b154eba82d44d6a042cf873670"
)
@@ -98,6 +132,9 @@ class PySetuptools(Package, PythonExtension):
depends_on("python@3.8:", when="@68.1:")
depends_on("python@3.7:", when="@59.7:")
depends_on("python@3.6:", when="@51:")
+ depends_on("python@3.5:", when="@44:")
+ depends_on("python@3.4:", when="@40:")
+ depends_on("python@3.3:", when="@30:")
# Uses HTMLParser.unescape
depends_on("python@:3.8", when="@:41.0")
@@ -110,6 +147,14 @@ class PySetuptools(Package, PythonExtension):
depends_on("py-pip", type="build")
+ conflicts(
+ "^python@:3.9 ^py-pip@25:",
+ when="@:75.1.0",
+ msg="py-pip@25: vendors pyproject-hooks@1.2. "
+ "The combination pyproject-hooks@1.2, python@:3.9, and py-setuptools@:75.1.0 is broken. "
+ "See https://github.com/pypa/pyproject-hooks/issues/206 for details.",
+ )
+
def url_for_version(self, version):
url = "https://files.pythonhosted.org/packages/{0}/s/setuptools/setuptools-{1}-{0}-none-any.whl"
diff --git a/var/spack/repos/builtin/packages/py-shapely/package.py b/var/spack/repos/builtin/packages/py-shapely/package.py
index fb3f21742dd..b376bffbdd8 100644
--- a/var/spack/repos/builtin/packages/py-shapely/package.py
+++ b/var/spack/repos/builtin/packages/py-shapely/package.py
@@ -91,7 +91,7 @@ def patch(self):
if os.path.exists("shapely/vectorized/_vectorized.c"):
os.remove("shapely/vectorized/_vectorized.c")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GEOS_CONFIG", join_path(self.spec["geos"].prefix.bin, "geos-config"))
# Shapely uses ctypes.util.find_library, which searches LD_LIBRARY_PATH
@@ -103,8 +103,10 @@ def setup_build_environment(self, env):
else:
env.prepend_path("LD_LIBRARY_PATH", libs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.setup_build_environment(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_build_environment(env)
diff --git a/var/spack/repos/builtin/packages/py-smartredis/package.py b/var/spack/repos/builtin/packages/py-smartredis/package.py
index 6ae8a231b0a..67bbe3abf0d 100644
--- a/var/spack/repos/builtin/packages/py-smartredis/package.py
+++ b/var/spack/repos/builtin/packages/py-smartredis/package.py
@@ -47,7 +47,7 @@ class PySmartredis(PythonPackage):
patch("sr_0_4_1_no_deps.patch", when="@0.4.1")
patch("sr_0_4_0_no_deps.patch", when="@0.4.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("REDISPP_LIB_DIR", spec["redis-plus-plus"].libs.directories[0])
env.set("REDISPP_INC_DIR", spec["redis-plus-plus"].headers.directories[0])
diff --git a/var/spack/repos/builtin/packages/py-smartsim/package.py b/var/spack/repos/builtin/packages/py-smartsim/package.py
index 6ce9e1fd97c..5b4f6e47386 100644
--- a/var/spack/repos/builtin/packages/py-smartsim/package.py
+++ b/var/spack/repos/builtin/packages/py-smartsim/package.py
@@ -67,8 +67,8 @@ class PySmartsim(PythonPackage):
# dependencies fetched though Spack
patch("ss-0-5-0-remove-cli-build-fns.patch")
- def setup_build_environment(self, env):
- env.set("BUILD_JOBS", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("BUILD_JOBS", str(make_jobs))
@run_after("install")
def symlink_bin_deps(self):
diff --git a/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py b/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
index 14ba952a829..09635f391f3 100644
--- a/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
+++ b/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
@@ -41,7 +41,7 @@ class PySphinxRtdTheme(PythonPackage):
depends_on("py-sphinxcontrib-jquery@2:", when="@1.2:1.2.1", type=("build", "run"))
conflicts("^py-sphinxcontrib-jquery@3.0.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Hack to prevent usage of npm in 0.5+
# https://github.com/readthedocs/sphinx_rtd_theme/issues/1014
- env.set("CI", True)
+ env.set("CI", "True")
diff --git a/var/spack/repos/builtin/packages/py-sympy/package.py b/var/spack/repos/builtin/packages/py-sympy/package.py
index ce35f267fbf..c06bf001b13 100644
--- a/var/spack/repos/builtin/packages/py-sympy/package.py
+++ b/var/spack/repos/builtin/packages/py-sympy/package.py
@@ -12,6 +12,7 @@ class PySympy(PythonPackage):
license("BSD-3-Clause")
+ version("1.13.3", sha256="b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9")
version("1.13.1", sha256="9cebf7e04ff162015ce31c9c6c9144daa34a93bd082f54fd8f12deca4f47515f")
version("1.13.0", sha256="3b6af8f4d008b9a1a6a4268b335b984b23835f26d1d60b0526ebc71d48a25f57")
version("1.12", sha256="ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8")
diff --git a/var/spack/repos/builtin/packages/py-tables/package.py b/var/spack/repos/builtin/packages/py-tables/package.py
index 2b2710f5731..8aa8fa20add 100644
--- a/var/spack/repos/builtin/packages/py-tables/package.py
+++ b/var/spack/repos/builtin/packages/py-tables/package.py
@@ -76,7 +76,7 @@ class PyTables(PythonPackage):
# Historical dependencies
depends_on("py-six@1.9:", when="@:3.5", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("HDF5_DIR", self.spec["hdf5"].prefix)
if "+bzip2" in self.spec:
env.set("BZIP2_DIR", self.spec["bzip2"].prefix)
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 3fa96fa977b..0bf628b6e17 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
@@ -34,7 +34,7 @@ class PyTensorboardDataServer(PythonPackage):
when="@0.6.1",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CARGO_HOME", self.stage.source_path)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/py-tensorflow-metadata/package.py b/var/spack/repos/builtin/packages/py-tensorflow-metadata/package.py
index f255e0c7128..4971bbd4c78 100644
--- a/var/spack/repos/builtin/packages/py-tensorflow-metadata/package.py
+++ b/var/spack/repos/builtin/packages/py-tensorflow-metadata/package.py
@@ -53,6 +53,6 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
tmp_path = tempfile.mkdtemp(prefix="spack")
env.set("TEST_TMPDIR", 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 0669974488f..71ddb3ba41c 100644
--- a/var/spack/repos/builtin/packages/py-tensorflow/package.py
+++ b/var/spack/repos/builtin/packages/py-tensorflow/package.py
@@ -44,6 +44,7 @@ class PyTensorflow(Package, CudaPackage, ROCmPackage, PythonExtension):
license("Apache-2.0")
maintainers("adamjstewart", "aweits")
+ tags = ["e4s"]
version(
"2.18.0-rocm-enhanced",
@@ -575,7 +576,7 @@ def flag_handler(self, name, flags):
return (flags, None, None)
# https://www.tensorflow.org/install/source
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# Please specify the location of python
diff --git a/var/spack/repos/builtin/packages/py-tfdlpack/package.py b/var/spack/repos/builtin/packages/py-tfdlpack/package.py
index 4871ca822dc..cbeff48598e 100644
--- a/var/spack/repos/builtin/packages/py-tfdlpack/package.py
+++ b/var/spack/repos/builtin/packages/py-tfdlpack/package.py
@@ -42,6 +42,6 @@ def install(self, spec, prefix):
with working_dir("python"):
pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Prevent TensorFlow from taking over the whole GPU
env.set("TF_FORCE_GPU_ALLOW_GROWTH", "true")
diff --git a/var/spack/repos/builtin/packages/py-torch-cluster/package.py b/var/spack/repos/builtin/packages/py-torch-cluster/package.py
index d0d04a2d951..09e8274b0cf 100644
--- a/var/spack/repos/builtin/packages/py-torch-cluster/package.py
+++ b/var/spack/repos/builtin/packages/py-torch-cluster/package.py
@@ -21,18 +21,20 @@ class PyTorchCluster(PythonPackage):
depends_on("cxx", type="build")
depends_on("python", type=("build", "link", "run"))
+ # https://setuptools.pypa.io/en/latest/history.html#v77-0-0
+ depends_on("py-setuptools@:76", type="build", when="@:1.6.3")
depends_on("py-setuptools", type="build")
depends_on("py-scipy", type=("build", "run"))
# Undocumented dependencies
depends_on("py-torch", type=("build", "link", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+cuda" in self.spec["py-torch"]:
- env.set("FORCE_CUDA", 1)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 0)
+ env.set("FORCE_CUDA", "1")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "0")
else:
- env.set("FORCE_CUDA", 0)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 1)
+ env.set("FORCE_CUDA", "0")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "1")
diff --git a/var/spack/repos/builtin/packages/py-torch-nvidia-apex/package.py b/var/spack/repos/builtin/packages/py-torch-nvidia-apex/package.py
index 2a68cdd76c5..afcefbc8ea8 100644
--- a/var/spack/repos/builtin/packages/py-torch-nvidia-apex/package.py
+++ b/var/spack/repos/builtin/packages/py-torch-nvidia-apex/package.py
@@ -105,14 +105,14 @@ def torch_cuda_arch_list(self, env):
)
env.set("TORCH_CUDA_ARCH_LIST", torch_cuda_arch)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda"):
env.set("CUDA_HOME", self.spec["cuda"].prefix)
self.torch_cuda_arch_list(env)
else:
env.unset("CUDA_HOME")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.torch_cuda_arch_list(env)
@when("^py-pip@:23.0")
diff --git a/var/spack/repos/builtin/packages/py-torch-scatter/package.py b/var/spack/repos/builtin/packages/py-torch-scatter/package.py
index 7d9a5d4e0e8..7b3b588e545 100644
--- a/var/spack/repos/builtin/packages/py-torch-scatter/package.py
+++ b/var/spack/repos/builtin/packages/py-torch-scatter/package.py
@@ -21,17 +21,19 @@ class PyTorchScatter(PythonPackage):
depends_on("cxx", type="build")
depends_on("python", type=("build", "link", "run"))
+ # https://setuptools.pypa.io/en/latest/history.html#v77-0-0
+ depends_on("py-setuptools@:76", type="build", when="@:2.1.2")
depends_on("py-setuptools", type="build")
# Undocumented dependencies
depends_on("py-torch", type=("build", "link", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+cuda" in self.spec["py-torch"]:
- env.set("FORCE_CUDA", 1)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 0)
+ env.set("FORCE_CUDA", "1")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "0")
else:
- env.set("FORCE_CUDA", 0)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 1)
+ env.set("FORCE_CUDA", "0")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "1")
diff --git a/var/spack/repos/builtin/packages/py-torch-sparse/package.py b/var/spack/repos/builtin/packages/py-torch-sparse/package.py
index 34f60f06d50..793d5c17964 100644
--- a/var/spack/repos/builtin/packages/py-torch-sparse/package.py
+++ b/var/spack/repos/builtin/packages/py-torch-sparse/package.py
@@ -43,20 +43,20 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@0.6.9:"):
if "+cuda" in self.spec["py-torch"]:
- env.set("FORCE_CUDA", 1)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 0)
+ env.set("FORCE_CUDA", "1")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "0")
else:
- env.set("FORCE_CUDA", 0)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 1)
+ env.set("FORCE_CUDA", "0")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "1")
else:
if "+cuda" in self.spec["py-torch"]:
- env.set("FORCE_CUDA", 1)
- env.set("FORCE_CPU", 0)
+ env.set("FORCE_CUDA", "1")
+ env.set("FORCE_CPU", "0")
else:
- env.set("FORCE_CUDA", 0)
- env.set("FORCE_CPU", 1)
+ env.set("FORCE_CUDA", "0")
+ env.set("FORCE_CPU", "1")
diff --git a/var/spack/repos/builtin/packages/py-torch-spline-conv/package.py b/var/spack/repos/builtin/packages/py-torch-spline-conv/package.py
index 39bd4e3c383..933198f878a 100644
--- a/var/spack/repos/builtin/packages/py-torch-spline-conv/package.py
+++ b/var/spack/repos/builtin/packages/py-torch-spline-conv/package.py
@@ -21,17 +21,19 @@ class PyTorchSplineConv(PythonPackage):
depends_on("cxx", type="build")
depends_on("python", type=("build", "link", "run"))
+ # https://setuptools.pypa.io/en/latest/history.html#v77-0-0
+ depends_on("py-setuptools@:76", type="build", when="@:1.2.2")
depends_on("py-setuptools", type="build")
# Undocumented dependencies
depends_on("py-torch", type=("build", "link", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+cuda" in self.spec["py-torch"]:
- env.set("FORCE_CUDA", 1)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 0)
+ env.set("FORCE_CUDA", "1")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "0")
else:
- env.set("FORCE_CUDA", 0)
- env.set("FORCE_ONLY_CUDA", 0)
- env.set("FORCE_ONLY_CPU", 1)
+ env.set("FORCE_CUDA", "0")
+ env.set("FORCE_ONLY_CUDA", "0")
+ env.set("FORCE_ONLY_CPU", "1")
diff --git a/var/spack/repos/builtin/packages/py-torch/apple_clang_17.patch b/var/spack/repos/builtin/packages/py-torch/apple_clang_17.patch
new file mode 100644
index 00000000000..6983c57f7f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-torch/apple_clang_17.patch
@@ -0,0 +1,14 @@
+diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake
+index 1813f4418a2..77211646f34 100644
+--- a/cmake/Dependencies.cmake
++++ b/cmake/Dependencies.cmake
+@@ -1151,6 +1151,9 @@ if(USE_DISTRIBUTED AND USE_TENSORPIPE)
+ # Tensorpipe uses cuda_add_library
+ torch_update_find_cuda_flags()
+ add_subdirectory(${PROJECT_SOURCE_DIR}/third_party/tensorpipe)
++ # Suppress warning to unblock libnop comiplation by clang-17
++ # See https://github.com/pytorch/pytorch/issues/151316
++ target_compile_options_if_supported(tensorpipe -Wno-missing-template-arg-list-after-template-kw)
+
+ list(APPEND Caffe2_DEPENDENCY_LIBS tensorpipe)
+ list(APPEND Caffe2_DEPENDENCY_LIBS nlohmann)
diff --git a/var/spack/repos/builtin/packages/py-torch/macos_rpath.patch b/var/spack/repos/builtin/packages/py-torch/macos_rpath.patch
new file mode 100644
index 00000000000..b20057f528c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-torch/macos_rpath.patch
@@ -0,0 +1,14 @@
+diff --git a/setup.py b/setup.py
+index 61ee9363fc2..db476913d31 100644
+--- a/setup.py
++++ b/setup.py
+@@ -720,9 +720,6 @@ class build_ext(setuptools.command.build_ext.build_ext):
+ # It's an old-style class in Python 2.7...
+ setuptools.command.build_ext.build_ext.run(self)
+
+- if IS_DARWIN:
+- self._embed_libomp()
+-
+ # Copy the essential export library to compile C++ extensions.
+ if IS_WINDOWS:
+ build_temp = self.build_temp
diff --git a/var/spack/repos/builtin/packages/py-torch/package.py b/var/spack/repos/builtin/packages/py-torch/package.py
index 65a13d23628..699de840732 100644
--- a/var/spack/repos/builtin/packages/py-torch/package.py
+++ b/var/spack/repos/builtin/packages/py-torch/package.py
@@ -23,7 +23,10 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
license("BSD-3-Clause")
maintainers("adamjstewart")
+ tags = ["e4s"]
+
version("main", branch="main")
+ version("2.7.0", tag="v2.7.0", commit="134179474539648ba7dee1317959529fbd0e7f89")
version("2.6.0", tag="v2.6.0", commit="1eba9b3aa3c43f86f4a2c807ac8e12c4a7767340")
version("2.5.1", tag="v2.5.1", commit="a8d6afb511a69687bbb2b7e88a3cf67917e1697e")
version("2.5.0", tag="v2.5.0", commit="32f585d9346e316e554c8d9bf7548af9f62141fc")
@@ -175,7 +178,8 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
depends_on("py-typing-extensions@4.8:", when="@2.2:")
depends_on("py-typing-extensions@3.6.2.1:", when="@1.7:")
depends_on("py-setuptools")
- depends_on("py-sympy@1.13.1", when="@2.5:")
+ depends_on("py-sympy@1.13.3:", when="@2.7:")
+ depends_on("py-sympy@1.13.1", when="@2.5:2.6")
depends_on("py-sympy", when="@2:")
depends_on("py-networkx", when="@2:")
depends_on("py-jinja2", when="@2:")
@@ -194,7 +198,7 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
depends_on("blas")
depends_on("lapack")
- # Third party dependencies
+ # third_party
depends_on("fp16@2020-05-14", when="@1.6:")
depends_on("fxdiv@2020-04-17", when="@1.6:")
depends_on("nvtx@3.1.0", when="@2.6:")
@@ -263,7 +267,8 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
depends_on("py-pybind11@2.10.0:", when="@1.13:1")
depends_on("py-pybind11@2.6.2:", when="@1.8:1.12")
depends_on("py-pybind11@2.3.0:", when="@:1.7")
- depends_on("sleef@3.6.0_2024-03-20", when="@2.4:")
+ depends_on("sleef@3.7.0_2024-12-06", when="@2.7:")
+ depends_on("sleef@3.6.0_2024-03-20", when="@2.4:2.6")
depends_on("sleef@3.5.1_2020-12-22", when="@1.8:2.3")
depends_on("sleef@3.4.0_2019-07-30", when="@1.6:1.7")
@@ -323,12 +328,29 @@ class PyTorch(PythonPackage, CudaPackage, ROCmPackage):
conflicts("%gcc@:9.3", when="@2.2:", msg="C++17 support required")
+ # https://github.com/pytorch/pytorch/issues/151592
+ patch("macos_rpath.patch", when="@2.7:")
+
+ # https://github.com/pytorch/pytorch/issues/151316
+ patch(
+ "https://github.com/pytorch/pytorch/pull/151344.patch?full_index=1",
+ sha256="edaadfd5f8acee67fee1c77b34145640a1239c9546d77420f3887af24889799e",
+ when="@2.7.0",
+ )
+ patch("apple_clang_17.patch", when="@1.12:2.6")
+
# https://github.com/pytorch/pytorch/issues/146239
patch(
- "https://github.com/pytorch/pytorch/pull/140275.patch?full_index=1",
- sha256="65f56305a27d47d7065711d1131c6ac1611fabcb55b129c27ed6beabe4b94fe0",
+ "https://github.com/pytorch/pytorch/pull/146637.patch?full_index=1",
+ sha256="f93aa66e2cf9c0febdbcf72f44213a213e570e5f860186e81c92c8d2af0857c0",
when="@2.6:",
- reverse=True,
+ )
+
+ # Fixes 'FindBLAS.cmake' error: unknown command check_function_exists
+ patch(
+ "https://github.com/pytorch/pytorch/pull/145849.patch?full_index=1",
+ sha256="5675ab543b786b8f360de451b27b3eb5d3ce8499d6c1a207f4a854f0c473ab03",
+ when="@:2.6",
)
# https://github.com/pytorch/pytorch/issues/90448
@@ -524,7 +546,7 @@ def torch_cuda_arch_list(self, env):
)
env.set("TORCH_CUDA_ARCH_LIST", ";".join(torch_cuda_arch))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set environment variables used to control the build.
PyTorch's ``setup.py`` is a thin wrapper around ``cmake``.
@@ -553,8 +575,12 @@ def enable_or_disable(variant, keyword="USE", var=None):
elif "~" + variant in self.spec:
env.set(keyword + "_" + var, "OFF")
+ # https://github.com/pytorch/pytorch/issues/151592
+ if self.spec.satisfies("@:2.6"):
+ env.set("PACKAGE_TYPE", "conda")
+
# Build in parallel to speed up build times
- env.set("MAX_JOBS", make_jobs)
+ env.set("MAX_JOBS", str(make_jobs))
# Spack logs have trouble handling colored output
env.set("COLORIZE_OUTPUT", "OFF")
@@ -644,8 +670,8 @@ def enable_or_disable(variant, keyword="USE", var=None):
env.set("DEBUG", "OFF")
if not self.spec.satisfies("@main"):
- env.set("PYTORCH_BUILD_VERSION", self.version)
- env.set("PYTORCH_BUILD_NUMBER", 0)
+ env.set("PYTORCH_BUILD_VERSION", str(self.version))
+ env.set("PYTORCH_BUILD_NUMBER", str(0))
# BLAS to be used by Caffe2
# Options defined in cmake/Dependencies.cmake and cmake/Modules/FindBLAS.cmake
@@ -705,7 +731,7 @@ def enable_or_disable(variant, keyword="USE", var=None):
else:
env.set("BUILD_CUSTOM_PROTOBUF", "OFF")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.torch_cuda_arch_list(env)
@run_before("install")
diff --git a/var/spack/repos/builtin/packages/py-torchaudio/package.py b/var/spack/repos/builtin/packages/py-torchaudio/package.py
index 6249d470700..d901b0df759 100644
--- a/var/spack/repos/builtin/packages/py-torchaudio/package.py
+++ b/var/spack/repos/builtin/packages/py-torchaudio/package.py
@@ -17,6 +17,7 @@ class PyTorchaudio(PythonPackage):
maintainers("adamjstewart")
version("main", branch="main")
+ version("2.7.0", tag="v2.7.0", commit="654fee8fd17784271be1637eac1293fd834b4e9a")
version("2.6.0", tag="v2.6.0", commit="d8831425203385077a03c1d92cfbbe3bf2106008")
version("2.5.1", tag="v2.5.1", commit="1661daf10599ca8889f092ec37814fabbe202bb0")
version("2.5.0", tag="v2.5.0", commit="56bc006d56a0d4960de6a1e0b6340cba4eda05cd")
@@ -76,6 +77,7 @@ class PyTorchaudio(PythonPackage):
depends_on("python@:3.8", when="@:0.7.0")
depends_on("py-torch@main", when="@main")
+ depends_on("py-torch@2.7.0", when="@2.7.0")
depends_on("py-torch@2.6.0", when="@2.6.0")
depends_on("py-torch@2.5.1", when="@2.5.1")
depends_on("py-torch@2.5.0", when="@2.5.0")
@@ -149,16 +151,9 @@ def patch(self):
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):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# tools/setup_helpers/extension.py
- env.set("BUILD_SOX", 0)
+ env.set("BUILD_SOX", "0")
if self.spec.satisfies("@2.1:"):
env.set("FFMPEG_ROOT", self.spec["ffmpeg"].prefix)
@@ -167,11 +162,11 @@ def setup_build_environment(self, env):
env.set("USE_FFMPEG", "0")
if "+cuda" in self.spec["py-torch"]:
- env.set("USE_CUDA", 1)
+ env.set("USE_CUDA", "1")
else:
- env.set("USE_CUDA", 0)
+ env.set("USE_CUDA", "0")
if "+rocm" in self.spec["py-torch"]:
- env.set("USE_ROCM", 1)
+ env.set("USE_ROCM", "1")
else:
- env.set("USE_ROCM", 0)
+ env.set("USE_ROCM", "0")
diff --git a/var/spack/repos/builtin/packages/py-torchdata/package.py b/var/spack/repos/builtin/packages/py-torchdata/package.py
index 26bb498ed2e..c2cbba96797 100644
--- a/var/spack/repos/builtin/packages/py-torchdata/package.py
+++ b/var/spack/repos/builtin/packages/py-torchdata/package.py
@@ -70,5 +70,5 @@ class PyTorchdata(PythonPackage):
depends_on("py-pybind11", when="@0.4:0.9")
depends_on("aws-sdk-cpp", when="@0.4:0.9")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("USE_SYSTEM_LIBS", "ON")
diff --git a/var/spack/repos/builtin/packages/py-torchgeo/package.py b/var/spack/repos/builtin/packages/py-torchgeo/package.py
index c4f9ad71900..0cc44c76820 100644
--- a/var/spack/repos/builtin/packages/py-torchgeo/package.py
+++ b/var/spack/repos/builtin/packages/py-torchgeo/package.py
@@ -16,6 +16,7 @@ class PyTorchgeo(PythonPackage):
maintainers("adamjstewart", "calebrob6")
version("main", branch="main")
+ version("0.7.0", sha256="4ba0e96ea826080f393b1bb719a3f8c364637112710b1ac38c56b9590a638e29")
version("0.6.2", sha256="82f49f0d18d2c22cc70fc0690641e8dd60e4904a9c50d32c79ebd5020ac10fa7")
version("0.6.1", sha256="38c930917ea341d05a7a611ff74c017f29482df7455d50e287ea79dec7d0a14b")
version("0.6.0", sha256="c5b073b3c9ac06cd68e45620bab3a78fb7637fa3563aae4f75f4781ba57aee5a")
@@ -45,13 +46,16 @@ class PyTorchgeo(PythonPackage):
depends_on("py-setuptools@42:")
with default_args(type=("build", "run")):
+ depends_on("python@3.11:", when="@0.7:")
depends_on("python@3.10:", when="@0.6:")
depends_on("python@3.9:", when="@0.5:")
depends_on("py-einops@0.3:")
+ depends_on("py-fiona@1.8.22:", when="@0.7:")
depends_on("py-fiona@1.8.21:", when="@0.6:")
depends_on("py-fiona@1.8.19:", when="@0.5:")
depends_on("py-fiona@1.8:", when="@0.3:")
depends_on("py-fiona@1.5:")
+ depends_on("py-kornia@0.7.4:", when="@0.7:")
depends_on("py-kornia@0.7.3:", when="@0.6:")
depends_on("py-kornia@0.6.9:", when="@0.5:")
depends_on("py-kornia@0.6.5:", when="@0.4:")
@@ -62,42 +66,58 @@ class PyTorchgeo(PythonPackage):
depends_on("py-lightly@1.4.4:", when="@0.5:")
depends_on("py-lightning@2:", when="@0.5:")
depends_on("py-lightning@1.8:", when="@0.4.1:")
+ depends_on("py-matplotlib@3.6:", when="@0.7:")
depends_on("py-matplotlib@3.5:", when="@0.6:")
depends_on("py-matplotlib@3.3.3:", when="@0.5:")
depends_on("py-matplotlib@3.3:")
+ depends_on("py-numpy@1.23.2:", when="@0.7:")
depends_on("py-numpy@1.21.2:", when="@0.6:")
depends_on("py-numpy@1.19.3:", when="@0.5:")
depends_on("py-numpy@1.17.2:")
+ depends_on("py-pandas@1.5:", when="@0.7:")
depends_on("py-pandas@1.3.3:", when="@0.6:")
depends_on("py-pandas@1.1.3:", when="@0.5:")
+ depends_on("pil@9.2:", when="@0.7:")
depends_on("pil@8.4:", when="@0.6:")
depends_on("pil@8:", when="@0.5:")
depends_on("pil@6.2:")
+ depends_on("py-pyproj@3.4:", when="@0.7:")
depends_on("py-pyproj@3.3:", when="@0.6:")
depends_on("py-pyproj@3:", when="@0.5:")
depends_on("py-pyproj@2.2:")
+ depends_on("py-rasterio@1.3.3:", when="@0.7:")
depends_on("py-rasterio@1.3:", when="@0.6:")
depends_on("py-rasterio@1.2:", when="@0.5:")
depends_on("py-rasterio@1.0.20:", when="@0.3:")
depends_on("py-rasterio@1.0.16:")
+ depends_on("py-rtree@1.0.1:", when="@0.7:")
depends_on("py-rtree@1:", when="@0.3:")
depends_on("py-rtree@0.9.4:", when="@0.2.1:")
depends_on("py-rtree@0.5:")
- depends_on("py-segmentation-models-pytorch@0.2:")
+ depends_on("py-segmentation-models-pytorch@0.5:", when="@0.7.1:")
+ # https://github.com/microsoft/torchgeo/pull/2740
+ depends_on("py-segmentation-models-pytorch@0.3.3:0.4", when="@0.7.0")
+ depends_on("py-segmentation-models-pytorch@0.2:0.4")
+ depends_on("py-shapely@1.8.5:", when="@0.7:")
depends_on("py-shapely@1.8:", when="@0.6:")
depends_on("py-shapely@1.7.1:", when="@0.5:")
depends_on("py-shapely@1.3:")
+ depends_on("py-timm@0.9.2:", when="@0.7:")
depends_on("py-timm@0.4.12:")
+ depends_on("py-torch@2:", when="@0.7:")
depends_on("py-torch@1.13:", when="@0.6:")
depends_on("py-torch@1.12:", when="@0.4:")
depends_on("py-torch@1.9:", when="@0.2:")
depends_on("py-torch@1.7:")
+ depends_on("py-torchmetrics@1.2:", when="@0.7:")
depends_on("py-torchmetrics@0.10:", when="@0.4:")
depends_on("py-torchmetrics@0.7:")
+ depends_on("py-torchvision@0.15.1:", when="@0.7:")
depends_on("py-torchvision@0.14:", when="@0.6:")
depends_on("py-torchvision@0.13:", when="@0.4:")
depends_on("py-torchvision@0.10:", when="@0.2:")
depends_on("py-torchvision@0.3:")
+ depends_on("py-typing-extensions@4.5:", when="@0.7:")
# Only part of lightning[pytorch-extra] we actually require.
depends_on("py-jsonargparse@4.26.1:+signatures", when="@0.5:")
@@ -114,24 +134,30 @@ class PyTorchgeo(PythonPackage):
# Optional dependencies
with when("+datasets"), default_args(type="run"):
+ depends_on("py-h5py@3.8:", when="@0.7:")
depends_on("py-h5py@3.6:", when="@0.6:")
depends_on("py-h5py@3:", when="@0.5:")
depends_on("py-h5py@2.6:")
depends_on("py-laspy@2:", when="@0.2:")
+ depends_on("py-netcdf4@1.6.1:", when="@0.7:")
+ depends_on("opencv@4.5.5:", when="@0.7:")
depends_on("opencv@4.5.4:", when="@0.6:")
depends_on("opencv@4.4.0.46:", when="@0.5:")
depends_on("opencv@3.4.2.17:")
+ depends_on("py-pandas@2:+parquet", when="@0.7:")
depends_on("py-pycocotools@2.0.7:", when="@0.6:")
depends_on("py-pycocotools@2.0.5:", when="@0.5:")
depends_on("py-pycocotools@2:")
- depends_on("py-pyvista@0.34.2:", when="@0.5:0.6")
- depends_on("py-pyvista@0.20:", when="@0.4")
+ depends_on("py-scikit-image@0.20:", when="@0.7:")
depends_on("py-scikit-image@0.19:", when="@0.6:")
depends_on("py-scikit-image@0.18:", when="@0.4:")
+ depends_on("py-scipy@1.9.2:", when="@0.7:")
depends_on("py-scipy@1.7.2:", when="@0.6:")
depends_on("py-scipy@1.6.2:", when="@0.4:")
depends_on("py-scipy@1.2:", when="@0.3:")
depends_on("py-scipy@0.9:")
+ depends_on("py-webdataset@0.2.4:", when="@0.7:")
+ depends_on("py-xarray@0.12.3:", when="@0.7:")
# Required to download SpaceNet datasets.
depends_on("awscli-v2", when="@0.6:")
@@ -159,6 +185,8 @@ class PyTorchgeo(PythonPackage):
# https://github.com/microsoft/torchgeo/pull/1537
depends_on("py-pandas@0.23.2:2.0", when="@0.3:0.4")
depends_on("py-pandas@0.19.1:2.0", when="@0.2")
+ depends_on("py-pyvista@0.34.2:", when="@0.5:0.6")
+ depends_on("py-pyvista@0.20:", when="@0.4")
depends_on("py-radiant-mlhub@0.3:", when="@0.4.1:0.5")
depends_on("py-radiant-mlhub@0.2.1:0.4", when="@:0.4.0")
depends_on("py-rarfile@4:", when="@0.5")
@@ -174,6 +202,7 @@ class PyTorchgeo(PythonPackage):
with when("+style"), default_args(type="run"):
depends_on("prettier@3:", when="@0.6:")
depends_on("py-mypy@0.900:")
+ depends_on("py-ruff@0.9:", when="@0.7:")
depends_on("py-ruff@0.2:", when="@0.6:")
# Historical dependencies
diff --git a/var/spack/repos/builtin/packages/py-torchmetrics/package.py b/var/spack/repos/builtin/packages/py-torchmetrics/package.py
index 9d642dea8eb..cd0706d33a1 100644
--- a/var/spack/repos/builtin/packages/py-torchmetrics/package.py
+++ b/var/spack/repos/builtin/packages/py-torchmetrics/package.py
@@ -14,6 +14,7 @@ class PyTorchmetrics(PythonPackage):
license("Apache-2.0")
maintainers("adamjstewart")
+ version("1.7.1", sha256="0ac1a0e90d2375866ceb5d3868720c6df7d7d0c5729b7ad36e92c897c6af70c2")
version("1.7.0", sha256="7a26d5cb73a6ae51ab5cb514aa4dc0543af7287a507719986a06e15df12ea68b")
version("1.6.3", sha256="be59ffe9e9abf12ac12c3ac4383b2fc7731ad2bf3748ae1b06e8dea34e9f8a65")
version("1.6.2", sha256="a3fa6372dbf01183d0f6fda2159e9526fb62818aa3630660909c290425f67df6")
diff --git a/var/spack/repos/builtin/packages/py-torchvision/package.py b/var/spack/repos/builtin/packages/py-torchvision/package.py
index 0d96754d6fb..60d28bdd857 100644
--- a/var/spack/repos/builtin/packages/py-torchvision/package.py
+++ b/var/spack/repos/builtin/packages/py-torchvision/package.py
@@ -18,6 +18,7 @@ class PyTorchvision(PythonPackage):
license("BSD-3-Clause")
version("main", branch="main")
+ version("0.22.0", sha256="83ed8855cdfb138aba6f116f8fd8da8b83463170dad67a70f60327915ed12014")
version("0.21.0", sha256="0a4a967bbb7f9810f792cd0289a07fb98c8fb5d1303fae8b63e3a6b05d720058")
version("0.20.1", sha256="7e08c7f56e2c89859310e53d898f72bccc4987cd83e08cfd6303513da15a9e71")
version("0.20.0", sha256="b59d9896c5c957c6db0018754bbd17d079c5102b82b9be0b438553b40a7b6029")
@@ -48,36 +49,13 @@ class PyTorchvision(PythonPackage):
version("0.9.1", sha256="79964773729880e0eee0e6af13f336041121d4cc8491a3e2c0e5f184cac8a718")
version("0.9.0", sha256="9351ed92aded632f8c7f59dfadac13c191a834babe682f5785ea47e6fcf6b472")
version("0.8.2", sha256="9a866c3c8feb23b3221ce261e6153fc65a98ce9ceaa71ccad017016945c178bf")
- version(
- "0.8.1",
- sha256="c46734c679c99f93e5c06654f4295a05a6afe6c00a35ebd26a2cce507ae1ccbd",
- deprecated=True,
- )
- version(
- "0.8.0",
- sha256="b5f040faffbfc7bac8d4687d8665bd1196937334589b3fb5fcf15bb69ca25391",
- deprecated=True,
- )
- version(
- "0.7.0",
- sha256="fa0a6f44a50451115d1499b3f2aa597e0092a07afce1068750260fa7dd2c85cb",
- deprecated=True,
- )
- version(
- "0.6.1",
- sha256="8173680a976c833640ecbd0d7e6f0a11047bf8833433e2147180efc905e48656",
- deprecated=True,
- )
- version(
- "0.6.0",
- sha256="02de11b3abe6882de4032ce86dab9c7794cbc84369b44d04e667486580f0f1f7",
- deprecated=True,
- )
- version(
- "0.5.0",
- sha256="eb9afc93df3d174d975ee0914057a9522f5272310b4d56c150b955c287a4d74d",
- deprecated=True,
- )
+ with default_args(deprecated=True):
+ version("0.8.1", sha256="c46734c679c99f93e5c06654f4295a05a6afe6c00a35ebd26a2cce507ae1ccbd")
+ version("0.8.0", sha256="b5f040faffbfc7bac8d4687d8665bd1196937334589b3fb5fcf15bb69ca25391")
+ version("0.7.0", sha256="fa0a6f44a50451115d1499b3f2aa597e0092a07afce1068750260fa7dd2c85cb")
+ version("0.6.1", sha256="8173680a976c833640ecbd0d7e6f0a11047bf8833433e2147180efc905e48656")
+ version("0.6.0", sha256="02de11b3abe6882de4032ce86dab9c7794cbc84369b44d04e667486580f0f1f7")
+ version("0.5.0", sha256="eb9afc93df3d174d975ee0914057a9522f5272310b4d56c150b955c287a4d74d")
desc = "Enable support for native encoding/decoding of {} formats in torchvision.io"
variant("png", default=True, description=desc.format("PNG"))
@@ -105,6 +83,7 @@ class PyTorchvision(PythonPackage):
# https://github.com/pytorch/vision#installation
depends_on("py-torch@main", when="@main")
+ depends_on("py-torch@2.7.0", when="@0.22.0")
depends_on("py-torch@2.6.0", when="@0.21.0")
depends_on("py-torch@2.5.1", when="@0.20.1")
depends_on("py-torch@2.5.0", when="@0.20.0")
@@ -145,6 +124,8 @@ class PyTorchvision(PythonPackage):
depends_on("ninja", type="build")
# setup.py
+ # https://setuptools.pypa.io/en/latest/history.html#v77-0-0
+ depends_on("py-setuptools@:76", type="build", when="@:0.21.0")
depends_on("py-setuptools", type="build")
depends_on("py-numpy", type=("build", "run"))
# https://github.com/pytorch/vision/issues/8460
@@ -187,34 +168,27 @@ class PyTorchvision(PythonPackage):
# Many of the datasets require additional dependencies to use.
# These can be installed after the fact.
- 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):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# The only documentation on building is what is found in setup.py and:
# https://github.com/pytorch/vision/blob/main/CONTRIBUTING.md#development-installation
# By default, version is read from `version.txt`, but this includes an `a0`
# suffix used for alpha builds. Override the version for stable releases.
if not self.spec.satisfies("@main"):
- env.set("BUILD_VERSION", self.version)
+ env.set("BUILD_VERSION", str(self.version))
# Used by ninja
- env.set("MAX_JOBS", make_jobs)
+ env.set("MAX_JOBS", str(make_jobs))
if "^cuda" in self.spec:
env.set("CUDA_HOME", self.spec["cuda"].prefix)
for gpu in ["cuda", "mps"]:
- env.set(f"FORCE_{gpu.upper()}", int(f"+{gpu}" in self.spec["py-torch"]))
+ env.set(f"FORCE_{gpu.upper()}", str(f"+{gpu}" in self.spec["py-torch"]))
extensions = ["png", "jpeg", "webp", "nvjpeg", "video_codec", "ffmpeg"]
for extension in extensions:
- env.set(f"TORCHVISION_USE_{extension.upper()}", int(f"+{extension}" in self.spec))
+ env.set(f"TORCHVISION_USE_{extension.upper()}", str(f"+{extension}" in self.spec))
include = []
library = []
diff --git a/var/spack/repos/builtin/packages/py-transformer-engine/package.py b/var/spack/repos/builtin/packages/py-transformer-engine/package.py
index 90aaaf936e3..b624736c4e5 100644
--- a/var/spack/repos/builtin/packages/py-transformer-engine/package.py
+++ b/var/spack/repos/builtin/packages/py-transformer-engine/package.py
@@ -42,7 +42,7 @@ class PyTransformerEngine(PythonPackage):
with default_args(type=("build", "link", "run")):
depends_on("py-torch+cuda+cudnn")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("NVTE_FRAMEWORK", "pytorch")
if self.spec.satisfies("+userbuffers"):
env.set("NVTE_WITH_USERBUFFERS", "1")
diff --git a/var/spack/repos/builtin/packages/py-triton/package.py b/var/spack/repos/builtin/packages/py-triton/package.py
index 78068e590fc..3263cdc4052 100644
--- a/var/spack/repos/builtin/packages/py-triton/package.py
+++ b/var/spack/repos/builtin/packages/py-triton/package.py
@@ -26,7 +26,7 @@ class PyTriton(PythonPackage):
depends_on("zlib-api", type="link")
conflicts("^openssl@3.3.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
"""Set environment variables used to control the build"""
if self.spec.satisfies("%clang"):
env.set("TRITON_BUILD_WITH_CLANG_LLD", "True")
diff --git a/var/spack/repos/builtin/packages/py-trove-classifiers/package.py b/var/spack/repos/builtin/packages/py-trove-classifiers/package.py
index 6657af84ae6..28991949aea 100644
--- a/var/spack/repos/builtin/packages/py-trove-classifiers/package.py
+++ b/var/spack/repos/builtin/packages/py-trove-classifiers/package.py
@@ -10,12 +10,23 @@ class PyTroveClassifiers(PythonPackage):
on PyPI. Classifiers categorize projects per PEP 301."""
homepage = "https://github.com/pypa/trove-classifiers"
- pypi = "trove-classifiers/trove-classifiers-2023.3.9.tar.gz"
+ pypi = "trove_classifiers/trove_classifiers-2024.5.17.tar.gz"
license("Apache-2.0")
+ version(
+ "2025.4.11.15", sha256="634728aa6698dc1ae3db161da94d9e4c7597a9a5da2c4410211b36f15fed60fc"
+ )
version("2023.8.7", sha256="c9f2a0a85d545e5362e967e4f069f56fddfd91215e22ffa48c66fb283521319a")
version("2023.3.9", sha256="ee42f2f8c1d4bcfe35f746e472f07633570d485fab45407effc0379270a3bb03")
depends_on("py-setuptools", type="build")
depends_on("py-calver", type="build")
+
+ def url_for_version(self, version):
+ if version >= Version("2024.5.17"):
+ sep = "_"
+ else:
+ sep = "-"
+
+ return f"https://files.pythonhosted.org/packages/source/t/trove{sep}classifiers/trove{sep}classifiers-{version}.tar.gz"
diff --git a/var/spack/repos/builtin/packages/py-typing-extensions/package.py b/var/spack/repos/builtin/packages/py-typing-extensions/package.py
index a4b785a1a2a..789ec735444 100644
--- a/var/spack/repos/builtin/packages/py-typing-extensions/package.py
+++ b/var/spack/repos/builtin/packages/py-typing-extensions/package.py
@@ -14,8 +14,9 @@ class PyTypingExtensions(PythonPackage):
homepage = "https://github.com/python/typing_extensions"
pypi = "typing_extensions/typing_extensions-3.7.4.tar.gz"
- license("0BSD")
+ license("0BSD AND PSF-2.0")
+ version("4.13.2", sha256="e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef")
version("4.12.2", sha256="1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8")
version("4.8.0", sha256="df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef")
version("4.6.3", sha256="d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5")
@@ -33,6 +34,8 @@ class PyTypingExtensions(PythonPackage):
depends_on("python@3.8:", when="@4.8:", type=("build", "run"))
# Needed to ensure that Spack can bootstrap with Python 3.6
depends_on("python@3.7:", when="@4.2:", type=("build", "run"))
+
+ depends_on("py-flit-core@3.11:3", when="@4.13.2:", type="build")
depends_on("py-flit-core@3.4:3", when="@4:", type="build")
# Historical dependencies
diff --git a/var/spack/repos/builtin/packages/py-tzdata/package.py b/var/spack/repos/builtin/packages/py-tzdata/package.py
index 651eced6078..cae9a7bb3fd 100644
--- a/var/spack/repos/builtin/packages/py-tzdata/package.py
+++ b/var/spack/repos/builtin/packages/py-tzdata/package.py
@@ -13,6 +13,7 @@ class PyTzdata(PythonPackage):
license("Apache-2.0")
+ version("2025.2", sha256="b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9")
version("2023.3", sha256="11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a")
depends_on("py-setuptools@40.8:", type="build")
diff --git a/var/spack/repos/builtin/packages/py-uv/package.py b/var/spack/repos/builtin/packages/py-uv/package.py
index 2b01a44f4bf..724afc29374 100644
--- a/var/spack/repos/builtin/packages/py-uv/package.py
+++ b/var/spack/repos/builtin/packages/py-uv/package.py
@@ -25,7 +25,7 @@ class PyUv(PythonPackage):
depends_on("cmake", type="build", when="@:0.6.3")
@when("@:0.6.3")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CMAKE", self.spec["cmake"].prefix.bin.cmake)
executables = ["^uv$"]
diff --git a/var/spack/repos/builtin/packages/py-wand/package.py b/var/spack/repos/builtin/packages/py-wand/package.py
index 814526d0f37..fbf8910684e 100644
--- a/var/spack/repos/builtin/packages/py-wand/package.py
+++ b/var/spack/repos/builtin/packages/py-wand/package.py
@@ -23,5 +23,5 @@ class PyWand(PythonPackage):
# provides libmagickwand
depends_on("imagemagick")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MAGICK_HOME", self.spec["imagemagick"].prefix)
diff --git a/var/spack/repos/builtin/packages/py-waves/package.py b/var/spack/repos/builtin/packages/py-waves/package.py
index 035bf23ef01..7617e15f38d 100644
--- a/var/spack/repos/builtin/packages/py-waves/package.py
+++ b/var/spack/repos/builtin/packages/py-waves/package.py
@@ -74,7 +74,7 @@ class PyWaves(PythonPackage):
"waves.scons_extensions",
]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
env.set("PKG_NAME", "waves"),
if not self.spec.version.isdevelop():
diff --git a/var/spack/repos/builtin/packages/py-wxpython/package.py b/var/spack/repos/builtin/packages/py-wxpython/package.py
index fe9c44db3bb..26586be98d7 100644
--- a/var/spack/repos/builtin/packages/py-wxpython/package.py
+++ b/var/spack/repos/builtin/packages/py-wxpython/package.py
@@ -33,7 +33,7 @@ class PyWxpython(PythonPackage):
depends_on("pil", type=("build", "run"))
depends_on("py-six", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# By default wxWdigets is built as well instead of using spack provided version,
# this tells it to just build the python extensions
env.set("WXPYTHON_BUILD_ARGS", "build_py --use_syswx")
diff --git a/var/spack/repos/builtin/packages/py-xdot/package.py b/var/spack/repos/builtin/packages/py-xdot/package.py
index 2dbb841097e..4bc0ad29a00 100644
--- a/var/spack/repos/builtin/packages/py-xdot/package.py
+++ b/var/spack/repos/builtin/packages/py-xdot/package.py
@@ -51,7 +51,7 @@ def post_install(self):
# regenerate the byte-compiled __init__.py
python("-m", "compileall", dst)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.prepend_path(
"GI_TYPELIB_PATH", join_path(spec["harfbuzz"].prefix.lib, "girepository-1.0")
diff --git a/var/spack/repos/builtin/packages/py-xxhash/package.py b/var/spack/repos/builtin/packages/py-xxhash/package.py
index 148127fd7c6..734bf400726 100644
--- a/var/spack/repos/builtin/packages/py-xxhash/package.py
+++ b/var/spack/repos/builtin/packages/py-xxhash/package.py
@@ -25,5 +25,5 @@ class PyXxhash(PythonPackage):
depends_on("py-setuptools-scm@6.2:", type="build", when="@3.2.0:")
depends_on("xxhash@0.8:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("XXHASH_LINK_SO", "1")
diff --git a/var/spack/repos/builtin/packages/py-yt/package.py b/var/spack/repos/builtin/packages/py-yt/package.py
index 29e02cca2e8..f31d6874488 100644
--- a/var/spack/repos/builtin/packages/py-yt/package.py
+++ b/var/spack/repos/builtin/packages/py-yt/package.py
@@ -210,5 +210,5 @@ def check_install(self):
# yt("--help")
python(join_path(self.prefix.bin, "yt"), "--help")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MAX_BUILD_CORES", str(make_jobs))
diff --git a/var/spack/repos/builtin/packages/py-zfit-physics/package.py b/var/spack/repos/builtin/packages/py-zfit-physics/package.py
new file mode 100644
index 00000000000..f4b82e1ea3b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-zfit-physics/package.py
@@ -0,0 +1,29 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+
+from spack.package import *
+
+
+class PyZfitPhysics(PythonPackage):
+ """Tools and models to extend zfit with physics specific content."""
+
+ homepage = "https://github.com/zfit/zfit-physics"
+ pypi = "zfit-physics/zfit_physics-0.7.0.tar.gz"
+
+ maintainers("jonas-eschle", "ikrommyd")
+ license("BSD-3-Clause", checked_by="jonas-eschle")
+
+ tags = ["likelihood", "statistics", "inference", "fitting", "hep"]
+
+ version("0.7.0", sha256="5d65becff7265a12d9b62a8476c5359e75ec10d6ac0fd84dfa39eb82b6693cda")
+
+ depends_on("py-setuptools@42:", type="build")
+ depends_on("py-setuptools-scm@3.4:+toml", type="build")
+ depends_on("py-setuptools-scm-git-archive", type="build")
+
+ # TODO: remove "build" once fixed in spack that tests need "run", not "build"
+ with default_args(type=("build", "run")):
+ depends_on("python@3.9:", when="@0.7:")
+ depends_on("py-zfit@0.20:", when="@0.7:")
diff --git a/var/spack/repos/builtin/packages/py-zfit/package.py b/var/spack/repos/builtin/packages/py-zfit/package.py
index a977544bd53..46d96f1c8c3 100644
--- a/var/spack/repos/builtin/packages/py-zfit/package.py
+++ b/var/spack/repos/builtin/packages/py-zfit/package.py
@@ -19,6 +19,19 @@ class PyZfit(PythonPackage):
tags = ["likelihood", "statistics", "inference", "fitting", "hep"]
+ version("0.25.0", sha256="ac5a92bc284094eae55dd9afe1fe2c8f3f67a402dfc7a8ad6087a9ea29ff2b41")
+ version("0.24.3", sha256="0efe47a5c597f7c730ac25495625f8bb4460f2fa4a0f4c387f503339ac8e91b5")
+ version("0.24.2", sha256="6b83315e16e07d8472d92b142b377d8d7314411d27fe8033168037fd4583f5f6")
+ version("0.24.1", sha256="9a0423302ac5647e910feadce634b8b0a1806c1866f4f55795db64918cbdd2d8")
+ version("0.24.0", sha256="d2d30886c154a6583c615b68cd43bd156cb7f7576c584c48fb72f5ab89c9d94b")
+ version("0.23.0", sha256="19ec469e1703bd38f8b8957871851ee22fa2e68f0a57b7867cc40ea77df98cc5")
+ version("0.22.0", sha256="b88fe03ab91d1327fd1f23ba27d602fa8a4a82d74bd8ed5d7c08f167a6b223df")
+ version("0.21.1", sha256="7636c42c93d299bcc4346afe46df1ba615acedbc2380711e68a3e47a5445d4fa")
+ version("0.21.0", sha256="9d57f8210c5177df615de7f27d937cf0fc9237fb83360e291e2361604d7fe947")
+ version("0.20.3", sha256="c300ce5d4dd75d351184c4e10c1b1afb7969f99be1f803e8dd50b09ecc951406")
+ version("0.20.2", sha256="f822ff857346fe5b244e0a13f6fa2f2216c60d8c93f512405890289e2fbfac97")
+ version("0.20.1", sha256="c834953548be6e1a69ce48eb561b63a6ca8c6cee3bad2d33b98fa5c16001fc27")
+ version("0.20", sha256="ec39f0118fe8f918a488dacc633279321a06bb88fc0dc09207830516177ca4ff")
version("0.18.2", sha256="099b111e135937966b4c6342c7738731f112aea33e1b9f4a9785d2eac9e530f1")
version("0.18.1", sha256="fbc6b3a636d8dc74fb2e69dfec5855f534c4583ec18efac9e9107ad45b18eb43")
version("0.18.0", sha256="21d9479480f74945c67707b715780693bd4e94062c551bf41fe04a2eddb47fab")
@@ -27,7 +40,10 @@ class PyZfit(PythonPackage):
version("0.15.5", sha256="00a1138429e8a7f830c9e229b9c0bcd6071b95dadd8c87eb81191079fb679225")
version("0.14.1", sha256="66d1e349403f1d6c6350138d0f2b422046bcbdfb34fd95453dadae29a8b0c98a")
- depends_on("python@3.9:3.11", type=("build", "run"))
+ depends_on("python@3.9:", type=("build", "run"))
+ depends_on("python@:3.11", type=("build", "run"), when="@:0.18")
+ depends_on("python@:3.12", type=("build", "run"), when="@0.20:")
+
depends_on("py-setuptools@42:", type="build")
depends_on("py-setuptools-scm-git-archive", type="build")
depends_on("py-setuptools-scm@3.4:+toml", type="build")
@@ -37,9 +53,21 @@ class PyZfit(PythonPackage):
# TODO: remove "build" once fixed in spack that tests need "run", not "build"
with default_args(type=("build", "run")):
+ depends_on("py-tensorflow")
+ depends_on("py-tensorflow-probability")
- depends_on("py-tensorflow@2.15", type=("run"), when="@0.18")
- depends_on("py-tensorflow-probability@0.23", type=("run"), when="@0.18")
+ depends_on("py-tensorflow@2.16.2:2.19", when="@0.25.0:")
+ depends_on("py-tensorflow-probability@0.25:0.26", when="@0.25.0:")
+
+ depends_on("py-tensorflow@2.16.2:2.18", when="@0.24.3:")
+ depends_on("py-tensorflow@2.18", when="@0.24:0.24.2")
+ depends_on("py-tensorflow-probability@0.25", when="@0.24:")
+
+ depends_on("py-tensorflow@2.16", when="@0.20:")
+ depends_on("py-tensorflow-probability@0.24", when="@0.20:")
+
+ depends_on("py-tensorflow@2.15", when="@0.18")
+ depends_on("py-tensorflow-probability@0.23", when="@0.18")
depends_on("py-tensorflow@2.13", when="@0.15:0.17")
depends_on("py-tensorflow-probability@0.21", when="@0.16:0.17")
@@ -52,10 +80,10 @@ class PyZfit(PythonPackage):
depends_on("nlopt@2.7.1: +python")
with when("+hs3"):
- depends_on("py-asdf")
+ depends_on("py-asdf@:3")
depends_on("py-attrs", when="@0.15:")
- depends_on("py-typing-extensions", when="^python@:3.8")
+ depends_on("py-typing-extensions", when="@:0.17 ^python@:3.8")
depends_on("py-boost-histogram")
depends_on("py-colorama")
depends_on("py-colored")
@@ -71,7 +99,8 @@ class PyZfit(PythonPackage):
depends_on("py-numpy@1.16:")
depends_on("py-ordered-set")
depends_on("py-pandas")
- depends_on("py-pydantic@:1")
+ depends_on("py-pydantic@:1", when="@:0.21")
+ depends_on("py-pydantic@2:", when="@0.22:")
depends_on("py-pyyaml")
depends_on("py-scipy@1.2:")
depends_on("py-tabulate")
diff --git a/var/spack/repos/builtin/packages/py-zope-interface/package.py b/var/spack/repos/builtin/packages/py-zope-interface/package.py
index 2705bbd94ce..c17b83e0378 100644
--- a/var/spack/repos/builtin/packages/py-zope-interface/package.py
+++ b/var/spack/repos/builtin/packages/py-zope-interface/package.py
@@ -16,6 +16,8 @@ class PyZopeInterface(PythonPackage):
license("ZPL-2.1", checked_by="wdconinc")
+ version("7.2", sha256="8b49f1a3d1ee4cdaf5b32d2e738362c7f5e40ac8b46dd7d1a65e82a4872728fe")
+ version("7.1.1", sha256="4284d664ef0ff7b709836d4de7b13d80873dc5faeffc073abdb280058bfac5e3")
version("7.0.3", sha256="cd2690d4b08ec9eaf47a85914fe513062b20da78d10d6d789a792c0b20307fb1")
version("7.0.2", sha256="f1146bb27a411d0d40cc0e88182a6b0e979d68ab526c8e5ae9e27c06506ed017")
version("7.0.1", sha256="f0f5fda7cbf890371a59ab1d06512da4f2c89a6ea194e595808123c863c38eff")
@@ -29,12 +31,16 @@ class PyZopeInterface(PythonPackage):
version("5.5.0", sha256="700ebf9662cf8df70e2f0cb4988e078c53f65ee3eefd5c9d80cf988c4175c8e3")
version("5.4.0", sha256="5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e")
version("5.1.0", sha256="40e4c42bd27ed3c11b2c983fecfb03356fae1209de10686d03c02c8696a1d90e")
- version("4.5.0", sha256="57c38470d9f57e37afb460c399eb254e7193ac7fb8042bd09bdc001981a9c74c")
- depends_on("python@2.7:2.8,3.4:", type=("build", "run"), when="@4.5.0")
- depends_on("python@2.7:2.8,3.5:", type=("build", "run"), when="@5.1.0:")
- depends_on("python@3.7:", type=("build", "run"), when="@6:")
- depends_on("python@3.8:", type=("build", "run"), when="@7:")
+ with default_args(deprecated=True):
+ version("4.5.0", sha256="57c38470d9f57e37afb460c399eb254e7193ac7fb8042bd09bdc001981a9c74c")
- depends_on("py-setuptools", type=("build", "run"))
- depends_on("py-setuptools@:45", type=("build", "run"), when="@4.5.0")
+ with default_args(type=("build", "run")):
+ depends_on("python@3.8:", when="@7:")
+ depends_on("python@3.7:", when="@6:")
+ depends_on("python@2.7:2.8,3.5:", when="@5.1.0:")
+ depends_on("python@2.7:2.8,3.4:", when="@4.5.0")
+
+ depends_on("py-setuptools@:73", when="@7.1:")
+ depends_on("py-setuptools@:45", when="@4.5.0")
+ depends_on("py-setuptools")
diff --git a/var/spack/repos/builtin/packages/pypy/package.py b/var/spack/repos/builtin/packages/pypy/package.py
index 8e19207cde6..533b2a79467 100644
--- a/var/spack/repos/builtin/packages/pypy/package.py
+++ b/var/spack/repos/builtin/packages/pypy/package.py
@@ -75,7 +75,7 @@ def patch(self):
tklib_build.filter("linklibs = .*", f"linklibs = {libs.names}")
tklib_build.filter("libdirs = .*", f"libdirs = {libs.directories}")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://doc.pypy.org/en/latest/build.html#set-environment-variables-that-will-affect-translation
env.set("PYPY_USESSION_DIR", self.stage.source_path)
env.prepend_path("PYTHONPATH", self.stage.source_path)
diff --git a/var/spack/repos/builtin/packages/pythia6/package.py b/var/spack/repos/builtin/packages/pythia6/package.py
index 472000b759b..97472baf8d3 100644
--- a/var/spack/repos/builtin/packages/pythia6/package.py
+++ b/var/spack/repos/builtin/packages/pythia6/package.py
@@ -146,7 +146,7 @@ def patch(self):
"pyhepc.f",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%gcc@10:"):
env.append_flags("CFLAGS", "-fcommon")
env.append_flags("FFLAGS", "-fcommon")
diff --git a/var/spack/repos/builtin/packages/pythia8/package.py b/var/spack/repos/builtin/packages/pythia8/package.py
index 045a60b37da..021924c88db 100644
--- a/var/spack/repos/builtin/packages/pythia8/package.py
+++ b/var/spack/repos/builtin/packages/pythia8/package.py
@@ -217,8 +217,12 @@ def setup_common_env(self, env):
env.set("PYTHIA8", self.prefix)
env.set("PYTHIA8DATA", self.prefix.share.Pythia8.xmldoc)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_common_env(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.setup_common_env(env)
diff --git a/var/spack/repos/builtin/packages/python-venv/package.py b/var/spack/repos/builtin/packages/python-venv/package.py
index 583c3fafbd5..a3c259cf35a 100644
--- a/var/spack/repos/builtin/packages/python-venv/package.py
+++ b/var/spack/repos/builtin/packages/python-venv/package.py
@@ -83,7 +83,9 @@ def headers(self):
def libs(self):
return LibraryList([])
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set PYTHONPATH to include the site-packages directory for the
extension and any other python extensions it depends on."""
# Packages may be installed in platform-specific or platform-independent site-packages
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index 456c47e6f2c..f1df01cdad6 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -515,7 +515,7 @@ def patch(self):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
# TODO: Python has incomplete support for Python modules with mixed
@@ -1264,7 +1264,9 @@ def include(self):
return path.replace(prefix, "")
return os.path.join("include", "python{}".format(self.version.up_to(2)))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set PYTHONPATH to include the site-packages directory for the
extension and any other python extensions it depends on.
"""
@@ -1335,7 +1337,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
if config_link != new_link and sys.platform != "win32":
env.set(link_var, new_link)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set PYTHONPATH to include the site-packages directory for the
extension and any other python extensions it depends on.
"""
diff --git a/var/spack/repos/builtin/packages/qbank/package.py b/var/spack/repos/builtin/packages/qbank/package.py
index 8638530510c..382b748a6a6 100644
--- a/var/spack/repos/builtin/packages/qbank/package.py
+++ b/var/spack/repos/builtin/packages/qbank/package.py
@@ -52,6 +52,6 @@ def install(self, spec, prefix):
if "+doc" in spec:
install_tree("doc", prefix.doc)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+doc" in self.spec:
env.prepend_path("MANPATH", self.prefix.doc)
diff --git a/var/spack/repos/builtin/packages/qd/package.py b/var/spack/repos/builtin/packages/qd/package.py
index dfd89b64142..942c0bfbd82 100644
--- a/var/spack/repos/builtin/packages/qd/package.py
+++ b/var/spack/repos/builtin/packages/qd/package.py
@@ -31,7 +31,7 @@ class Qd(AutotoolsPackage):
depends_on("libtool", type="build")
depends_on("m4", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%nvhpc"):
env.append_flags("FCFLAGS", "-fPIC")
diff --git a/var/spack/repos/builtin/packages/qgis/package.py b/var/spack/repos/builtin/packages/qgis/package.py
index a34a746bccf..b2de2802f89 100644
--- a/var/spack/repos/builtin/packages/qgis/package.py
+++ b/var/spack/repos/builtin/packages/qgis/package.py
@@ -301,7 +301,7 @@ def cmake_args(self):
args.append("-DWITH_GRASS7=OFF")
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+bindings" in self.spec:
# python module isn't located at the standard path
env.prepend_path("PYTHONPATH", self.prefix.share.qgis.python)
diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py
index 1cca1a0c846..a17edc0768b 100644
--- a/var/spack/repos/builtin/packages/qmcpack/package.py
+++ b/var/spack/repos/builtin/packages/qmcpack/package.py
@@ -23,6 +23,7 @@ class Qmcpack(CMakePackage, CudaPackage):
# can occasionally change.
# NOTE: 12/19/2017 QMCPACK 3.0.0 does not build properly with Spack.
version("develop")
+ version("4.1.0", tag="v4.1.0", commit="c32123a5233186b177d75b800b86f1ad3b1a1413")
version("4.0.0", tag="v4.0.0", commit="0199944fb644b4798446fdfc0549c81666a4a943")
version("3.17.1", tag="v3.17.1", commit="9d0d968139fc33f71dbf9159f526dd7b47f10a3b")
version("3.17.0", tag="v3.17.0", commit="9049a90626d1fe3c431f55c56a7197f8a13d5fc6")
@@ -234,7 +235,7 @@ def build_targets(self):
return targets
# QMCPACK prefers taking MPI compiler wrappers as CMake compilers.
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+mpi" in spec:
env.set("CC", spec["mpi"].mpicc)
@@ -403,7 +404,7 @@ def install(self, spec, prefix):
with working_dir(self.build_directory):
install_tree("bin", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set-up runtime environment for QMCPACK.
Set PATH and PYTHONPATH for basic analysis scripts for Nexus."""
diff --git a/var/spack/repos/builtin/packages/qscintilla/package.py b/var/spack/repos/builtin/packages/qscintilla/package.py
index a199bdd1cf8..f9896de217b 100644
--- a/var/spack/repos/builtin/packages/qscintilla/package.py
+++ b/var/spack/repos/builtin/packages/qscintilla/package.py
@@ -59,10 +59,10 @@ def qmake_args(self):
# When INSTALL_ROOT is unset, qscintilla is installed under qt_prefix
# giving 'Nothing Installed Error'
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("INSTALL_ROOT", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("QT_PLUGIN_PATH", self.prefix.plugins)
# Fix install prefix
diff --git a/var/spack/repos/builtin/packages/qt-base/package.py b/var/spack/repos/builtin/packages/qt-base/package.py
index 67c7d4faa76..9645dbdc77d 100644
--- a/var/spack/repos/builtin/packages/qt-base/package.py
+++ b/var/spack/repos/builtin/packages/qt-base/package.py
@@ -117,14 +117,16 @@ def add_qt_module_files(self):
with open(qt_module_pri, "w") as file:
file.write("\n".join(defs))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("QMAKEPATH", self.prefix)
if os.path.exists(self.prefix.mkspecs.modules):
env.prepend_path("QMAKE_MODULE_PATH", self.prefix.mkspecs.modules)
if os.path.exists(self.prefix.plugins):
env.prepend_path("QT_PLUGIN_PATH", self.prefix.plugins)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Qt components typically install cmake config files in a single prefix,
# so we have to point dependencies to the cmake config files.
env.prepend_path("QT_ADDITIONAL_PACKAGES_PREFIX_PATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/qt-creator/package.py b/var/spack/repos/builtin/packages/qt-creator/package.py
index efc0fad4c5e..65b7832aa91 100644
--- a/var/spack/repos/builtin/packages/qt-creator/package.py
+++ b/var/spack/repos/builtin/packages/qt-creator/package.py
@@ -33,7 +33,7 @@ def url_for_version(self, version):
url = "https://download.qt.io/official_releases/qtcreator/{0}/{1}/qt-creator-opensource-src-{1}.tar.gz"
return url.format(version.up_to(2), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("INSTALL_ROOT", self.prefix)
def qmake_args(self):
diff --git a/var/spack/repos/builtin/packages/qt/package.py b/var/spack/repos/builtin/packages/qt/package.py
index 0e8b4f781da..aa800901bb7 100644
--- a/var/spack/repos/builtin/packages/qt/package.py
+++ b/var/spack/repos/builtin/packages/qt/package.py
@@ -375,7 +375,7 @@ def url_for_version(self, version):
return url
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if not IS_WINDOWS:
env.set("MAKEFLAGS", "-j{0}".format(make_jobs))
if self.version >= Version("5.11"):
@@ -388,13 +388,15 @@ def setup_build_environment(self, env):
llvm_path = "/spack-disable-llvm"
env.set("LLVM_INSTALL_DIR", llvm_path)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("QTDIR", self.prefix)
env.set("QTINC", self.prefix.inc)
env.set("QTLIB", self.prefix.lib)
env.prepend_path("QT_PLUGIN_PATH", self.prefix.plugins)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("QTDIR", self.prefix)
env.set("QTINC", self.prefix.inc)
env.set("QTLIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/qtgraph/package.py b/var/spack/repos/builtin/packages/qtgraph/package.py
index 8b1c100f14f..6fd0f9d9658 100644
--- a/var/spack/repos/builtin/packages/qtgraph/package.py
+++ b/var/spack/repos/builtin/packages/qtgraph/package.py
@@ -27,11 +27,11 @@ class Qtgraph(QMakePackage):
depends_on("graphviz@2.40.1:", when="@develop")
depends_on("graphviz@2.40.1", when="@1.0.0.0:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("GRAPHVIZ_ROOT", self.spec["graphviz"].prefix)
env.set("INSTALL_ROOT", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# What library suffix should be used based on library existence
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
diff --git a/var/spack/repos/builtin/packages/qualimap/package.py b/var/spack/repos/builtin/packages/qualimap/package.py
index a11121ec3d2..0cc7c36f751 100644
--- a/var/spack/repos/builtin/packages/qualimap/package.py
+++ b/var/spack/repos/builtin/packages/qualimap/package.py
@@ -21,7 +21,7 @@ class Qualimap(Package):
depends_on("java", type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/quota/package.py b/var/spack/repos/builtin/packages/quota/package.py
index c87779fa6f8..d0fdd230a30 100644
--- a/var/spack/repos/builtin/packages/quota/package.py
+++ b/var/spack/repos/builtin/packages/quota/package.py
@@ -17,5 +17,5 @@ class Quota(AutotoolsPackage):
depends_on("c", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/r-askpass/package.py b/var/spack/repos/builtin/packages/r-askpass/package.py
index 3ebd090978b..9fdb91e2ff3 100644
--- a/var/spack/repos/builtin/packages/r-askpass/package.py
+++ b/var/spack/repos/builtin/packages/r-askpass/package.py
@@ -24,4 +24,7 @@ class RAskpass(RPackage):
version("1.2.0", sha256="b922369781934d0ffc8d0c0177e8ace56796c2e6a726f65e460c16f792592cef")
version("1.1", sha256="db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r-sys@2.1:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-asreml/package.py b/var/spack/repos/builtin/packages/r-asreml/package.py
index b50eaf656e2..23683266bd9 100644
--- a/var/spack/repos/builtin/packages/r-asreml/package.py
+++ b/var/spack/repos/builtin/packages/r-asreml/package.py
@@ -38,5 +38,5 @@ class RAsreml(RPackage):
def url_for_version(self, version):
return f"file://{os.getcwd()}//asreml_{version}_x86_64-pc-linux-gnu.tar.gz"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("vsni_LICENSE", join_path(self.prefix, "vsni.lic"))
diff --git a/var/spack/repos/builtin/packages/r-backports/package.py b/var/spack/repos/builtin/packages/r-backports/package.py
index 44e439673b2..a34feac243b 100644
--- a/var/spack/repos/builtin/packages/r-backports/package.py
+++ b/var/spack/repos/builtin/packages/r-backports/package.py
@@ -28,4 +28,6 @@ class RBackports(RPackage):
version("1.1.1", sha256="494e81a4829339c8f1cc3e015daa807e9138b8e21b929965fc7c00b1abbe8897")
version("1.1.0", sha256="c5536966ed6ca93f20c9a21d4f569cc1c6865d3352445ea66448f82590349fcd")
+ depends_on("c", type="build")
+
depends_on("r@3.0.0:", 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 7bc10ac1b64..44e42ebd8b5 100644
--- a/var/spack/repos/builtin/packages/r-cachem/package.py
+++ b/var/spack/repos/builtin/packages/r-cachem/package.py
@@ -20,6 +20,9 @@ class RCachem(RPackage):
version("1.0.7", sha256="234fad2a947d1e1fb87d3fa92abf9197877772e31bc81ae5991ae69689b6320a")
version("1.0.6", sha256="9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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-cli/package.py b/var/spack/repos/builtin/packages/r-cli/package.py
index 127c87778b6..e0b7143edd3 100644
--- a/var/spack/repos/builtin/packages/r-cli/package.py
+++ b/var/spack/repos/builtin/packages/r-cli/package.py
@@ -33,6 +33,8 @@ class RCli(RPackage):
version("1.0.1", sha256="ef80fbcde15760fd55abbf9413b306e3971b2a7034ab8c415fb52dc0088c5ee4")
version("1.0.0", sha256="8fa3dbfc954ca61b8510f767ede9e8a365dac2ef95fe87c715a0f37d721b5a1d")
+ depends_on("c", type="build")
+
depends_on("r@2.10:", type=("build", "run"))
depends_on("r@3.4:", type=("build", "run"), when="@3.3.0:")
diff --git a/var/spack/repos/builtin/packages/r-curl/package.py b/var/spack/repos/builtin/packages/r-curl/package.py
index 5ef3167c7ff..c6992d61166 100644
--- a/var/spack/repos/builtin/packages/r-curl/package.py
+++ b/var/spack/repos/builtin/packages/r-curl/package.py
@@ -61,6 +61,9 @@ class RCurl(RPackage):
deprecated=True,
)
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.0.0:", type=("build", "run"))
depends_on("curl", when="@4.3:")
depends_on("curl@:7.63", when="@:4.0")
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 b55842231be..501db749f38 100644
--- a/var/spack/repos/builtin/packages/r-data-table/package.py
+++ b/var/spack/repos/builtin/packages/r-data-table/package.py
@@ -39,6 +39,9 @@ class RDataTable(RPackage):
version("1.9.8", sha256="dadb21a14a7f4d60955cdd8fb9779136833498be97b1625914e9a6b580646f4d")
version("1.9.6", sha256="6f74c349c1731823aef6899edcf18418454167d04eba983e3a6fe17ee9fd236e")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.1.0:", type=("build", "run"))
depends_on("zlib-api")
depends_on("llvm-openmp", when="platform=darwin %apple-clang", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-digest/package.py b/var/spack/repos/builtin/packages/r-digest/package.py
index 803c82cb32c..ff99f006e95 100644
--- a/var/spack/repos/builtin/packages/r-digest/package.py
+++ b/var/spack/repos/builtin/packages/r-digest/package.py
@@ -42,6 +42,9 @@ class RDigest(RPackage):
version("0.6.11", sha256="edab2ca2a38bd7ee19482c9d2531cd169d5123cde4aa2a3dd65c0bcf3d1d5209")
version("0.6.9", sha256="95fdc36011869fcfe21b40c3b822b931bc01f8a531e2c9260582ba79560dbe47")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@2.4.1:", type=("build", "run"))
depends_on("r@3.1.0:", type=("build", "run"), when="@0.6.16:")
depends_on("r@3.3.0:", type=("build", "run"), when="@0.6.27:")
diff --git a/var/spack/repos/builtin/packages/r-dplyr/package.py b/var/spack/repos/builtin/packages/r-dplyr/package.py
index 70504cbaa44..217cb2b4dbc 100644
--- a/var/spack/repos/builtin/packages/r-dplyr/package.py
+++ b/var/spack/repos/builtin/packages/r-dplyr/package.py
@@ -33,6 +33,9 @@ class RDplyr(RPackage):
version("0.7.0", sha256="27b3593c09da5e99c0c4fb19ea826edd2cab619f8aaefd0cfd2a4140a0bd9410")
version("0.5.0", sha256="93d3b829f1c2d38e14a4f2fa7d6398fc6c1a9e4189b3e78bc38a0eb0e864454f")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.1.2:", type=("build", "run"))
depends_on("r@3.2.0:", type=("build", "run"), when="@0.8.1:")
depends_on("r@3.3.0:", type=("build", "run"), when="@1.0.3:")
diff --git a/var/spack/repos/builtin/packages/r-fansi/package.py b/var/spack/repos/builtin/packages/r-fansi/package.py
index 2d039abdceb..bccc1f4ee70 100644
--- a/var/spack/repos/builtin/packages/r-fansi/package.py
+++ b/var/spack/repos/builtin/packages/r-fansi/package.py
@@ -27,4 +27,6 @@ class RFansi(RPackage):
version("0.2.2", sha256="71dfdda467985a4d630ecf93d4bc60446a8a78d69dbd7ac24cc45822329d4bce")
version("0.2.1", sha256="abe709d69ddd6610aaa24e049c7a97c16a2c2dbe0873d4e3b8af57e486ef05c5")
+ depends_on("c", type="build")
+
depends_on("r@3.1.0:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-farver/package.py b/var/spack/repos/builtin/packages/r-farver/package.py
index 48e4e3fcc9a..df190b29b60 100644
--- a/var/spack/repos/builtin/packages/r-farver/package.py
+++ b/var/spack/repos/builtin/packages/r-farver/package.py
@@ -25,3 +25,6 @@ class RFarver(RPackage):
version("2.1.0", sha256="e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4")
version("2.0.3", sha256="0e1590df79ec6078f10426411b96216b70568a4eaf3ffd84ca723add0ed8e5cc")
version("2.0.1", sha256="71473e21727357084c6aec4bb9bb258a6797a0f676b4b27504a03f16aa2f4e54")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
diff --git a/var/spack/repos/builtin/packages/r-fastmap/package.py b/var/spack/repos/builtin/packages/r-fastmap/package.py
index 423d4c26b13..b4b75e18f25 100644
--- a/var/spack/repos/builtin/packages/r-fastmap/package.py
+++ b/var/spack/repos/builtin/packages/r-fastmap/package.py
@@ -23,3 +23,6 @@ class RFastmap(RPackage):
version("1.1.1", sha256="3623809dd016ae8abd235200ba7834effc4b916915a059deb76044137c5c7173")
version("1.1.0", sha256="9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b")
version("1.0.1", sha256="4778b05dfebd356f8df980dfeff3b973a72bca14898f870e5c40c1d84db9faec")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
diff --git a/var/spack/repos/builtin/packages/r-fs/package.py b/var/spack/repos/builtin/packages/r-fs/package.py
index e65caa10b7c..9ce59067545 100644
--- a/var/spack/repos/builtin/packages/r-fs/package.py
+++ b/var/spack/repos/builtin/packages/r-fs/package.py
@@ -21,6 +21,9 @@ class RFs(RPackage):
version("1.5.0", sha256="36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897")
version("1.3.1", sha256="d6934dca8f835d8173e3fb9fd4d5e2740c8c04348dd2bcc57df1b711facb46bc")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-glue/package.py b/var/spack/repos/builtin/packages/r-glue/package.py
index 7ab199a14b5..82e98093972 100644
--- a/var/spack/repos/builtin/packages/r-glue/package.py
+++ b/var/spack/repos/builtin/packages/r-glue/package.py
@@ -29,6 +29,9 @@ class RGlue(RPackage):
version("1.3.0", sha256="789e5a44c3635c3d3db26666e635e88adcf61cd02b75465125d95d7a12291cee")
version("1.2.0", sha256="19275b34ee6a1bcad05360b7eb996cebaa1402f189a5dfb084e695d423f2296e")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-htmltools/package.py b/var/spack/repos/builtin/packages/r-htmltools/package.py
index 06f017a3ca1..baf7c5e51d7 100644
--- a/var/spack/repos/builtin/packages/r-htmltools/package.py
+++ b/var/spack/repos/builtin/packages/r-htmltools/package.py
@@ -23,6 +23,9 @@ class RHtmltools(RPackage):
version("0.3.6", sha256="44affb82f9c2fd76c9e2b58f9229adb003217932b68c3fdbf1327c8d74c868a2")
version("0.3.5", sha256="29fb7e075744bbffdff8ba4fce3860076de66f39a59a100ee4cfb4fc00722b49")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-lattice/package.py b/var/spack/repos/builtin/packages/r-lattice/package.py
index c241b2979d4..41f6471555f 100644
--- a/var/spack/repos/builtin/packages/r-lattice/package.py
+++ b/var/spack/repos/builtin/packages/r-lattice/package.py
@@ -26,5 +26,8 @@ class RLattice(RPackage):
version("0.20-35", sha256="0829ab0f4dec55aac6a73bc3411af68441ddb1b5b078d680a7c2643abeaa965d")
version("0.20-34", sha256="4a1a1cafa9c6660fb9a433b3a51898b8ec8e83abf143c80f99e3e4cf92812518")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.0.0:", type=("build", "run"))
depends_on("r@4.0.0:", type=("build", "run"), when="@0.21-8:")
diff --git a/var/spack/repos/builtin/packages/r-lubridate/package.py b/var/spack/repos/builtin/packages/r-lubridate/package.py
index 8a7d432f085..84c3061adde 100644
--- a/var/spack/repos/builtin/packages/r-lubridate/package.py
+++ b/var/spack/repos/builtin/packages/r-lubridate/package.py
@@ -29,6 +29,8 @@ class RLubridate(RPackage):
version("1.7.1", sha256="898c3f482ab8f5e5b415eecd13d1238769c88faed19b63fcb074ffe5ff57fb5f")
version("1.5.6", sha256="9b1627ba3212e132ce2b9a29d7513e250cc682ab9b4069f6788a22e84bf8d2c4")
+ depends_on("c", type="build")
+
depends_on("r@3.0.0:", type=("build", "run"))
depends_on("r@3.2:", type=("build", "run"), when="@1.7.9.2:")
depends_on("r-generics", type=("build", "run"), when="@1.7.9.2:")
diff --git a/var/spack/repos/builtin/packages/r-mass/package.py b/var/spack/repos/builtin/packages/r-mass/package.py
index 52c18fe07ce..9e317b1aba2 100644
--- a/var/spack/repos/builtin/packages/r-mass/package.py
+++ b/var/spack/repos/builtin/packages/r-mass/package.py
@@ -25,6 +25,9 @@ class RMass(RPackage):
version("7.3-51.3", sha256="5b0e0e7704d43a94b08dcc4b3fe600b9723d1b3e446dd393e82d39ddf66608b6")
version("7.3-47", sha256="ed44cdabe84fff3553122267ade61d5cc68071c435f7645d36c8f2e4e9f9c6bf")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-matrix/package.py b/var/spack/repos/builtin/packages/r-matrix/package.py
index 7eeddaa2539..ef81cab6428 100644
--- a/var/spack/repos/builtin/packages/r-matrix/package.py
+++ b/var/spack/repos/builtin/packages/r-matrix/package.py
@@ -31,6 +31,9 @@ class RMatrix(RPackage):
version("1.2-8", sha256="3cd2a187c45fc18a0766dc148b7f83dbf6f2163c256e887c41cbaa7c9a20dbb7")
version("1.2-6", sha256="4b49b639b7bf612fa3d1c1b1c68125ec7859c8cdadae0c13f499f24099fd5f20")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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.6.0:", type=("build", "run"), when="@1.3-2:")
diff --git a/var/spack/repos/builtin/packages/r-mgcv/package.py b/var/spack/repos/builtin/packages/r-mgcv/package.py
index 68d4602d22e..2a17e77067c 100644
--- a/var/spack/repos/builtin/packages/r-mgcv/package.py
+++ b/var/spack/repos/builtin/packages/r-mgcv/package.py
@@ -37,6 +37,8 @@ class RMgcv(RPackage):
version("1.8-16", sha256="9266a0cbd783717fc6130db4e0034e69465d177397687f35daf6a8ccdb0b435e")
version("1.8-13", sha256="74bc819708ef59da94b777a446ef00d7f14b428eec843533e824017c29cc524b")
+ depends_on("c", type="build")
+
depends_on("r@2.14.0:", type=("build", "run"))
depends_on("r@3.6.0:", type=("build", "run"), when="@1.8.34:")
depends_on("r-nlme@3.1-64:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-nlme/package.py b/var/spack/repos/builtin/packages/r-nlme/package.py
index 38c269dd336..44416594113 100644
--- a/var/spack/repos/builtin/packages/r-nlme/package.py
+++ b/var/spack/repos/builtin/packages/r-nlme/package.py
@@ -28,6 +28,10 @@ class RNlme(RPackage):
version("3.1-131", sha256="79daa167eb9bc7d8dba506da4b24b5250665b051d4e0a51dfccbb0087fdb564c")
version("3.1-130", sha256="ec576bd906ef2e1c79b6a4382743d425846f63be2a43de1cce6aa397b40e290e")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("r@3.0.2:", type=("build", "run"))
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")
diff --git a/var/spack/repos/builtin/packages/r-openssl/package.py b/var/spack/repos/builtin/packages/r-openssl/package.py
index d4eddab92d2..3ac143c36ab 100644
--- a/var/spack/repos/builtin/packages/r-openssl/package.py
+++ b/var/spack/repos/builtin/packages/r-openssl/package.py
@@ -37,6 +37,8 @@ class ROpenssl(RPackage):
version("0.9.6", sha256="6dd6d1cade4004962d516ad761fff0812beec0232318b385d286761423a5dc39")
version("0.9.4", sha256="cb7349defa5428acc0907629a4f53f82d2519af219e5d6a41f852cf55b1feb66")
+ depends_on("c", type="build")
+
depends_on("r-askpass", type=("build", "run"), when="@1.2:")
depends_on("openssl@1.0.1:")
depends_on("openssl@1.0.2:", when="@2.0.2:")
diff --git a/var/spack/repos/builtin/packages/r-pbdzmq/package.py b/var/spack/repos/builtin/packages/r-pbdzmq/package.py
index 97dcf4c2ecd..96b1c2362d0 100644
--- a/var/spack/repos/builtin/packages/r-pbdzmq/package.py
+++ b/var/spack/repos/builtin/packages/r-pbdzmq/package.py
@@ -31,6 +31,9 @@ class RPbdzmq(RPackage):
version("0.3-2", sha256="ece2a2881c662f77126e4801ba4e01c991331842b0d636ce5a2b591b9de3fc37")
version("0.2-4", sha256="bfacac88b0d4156c70cf63fc4cb9969a950693996901a4fa3dcd59949ec065f6")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.0.0:", type=("build", "run"))
depends_on("r@3.2.0:", type=("build", "run"), when="@0.2-6:")
depends_on("r@3.5.0:", type=("build", "run"), when="@0.3-4:")
diff --git a/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py b/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
index 578450acea0..26520324f72 100644
--- a/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
+++ b/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
@@ -34,5 +34,5 @@ class RPhantompeakqualtools(RPackage):
conflicts("%gcc@6:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BOOST_ROOT", self.spec["boost"].prefix)
diff --git a/var/spack/repos/builtin/packages/r-processx/package.py b/var/spack/repos/builtin/packages/r-processx/package.py
index 3267d0d221d..98126cad9f8 100644
--- a/var/spack/repos/builtin/packages/r-processx/package.py
+++ b/var/spack/repos/builtin/packages/r-processx/package.py
@@ -34,6 +34,9 @@ class RProcessx(RPackage):
version("2.0.0.1", sha256="8f61b2952d0f2d13c74465bfba174ce11eee559475c2f7b9be6bcb9e2e1d827b")
version("2.0.0", sha256="8325b56a60a276909228756281523cda9256bc754c5f3ca03b41c5c17cc398ad")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.4.0:", type=("build", "run"), when="@3.5.3:")
depends_on("r-ps@1.2.0:", type=("build", "run"), when="@3.2.0:")
depends_on("r-r6", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-proj/package.py b/var/spack/repos/builtin/packages/r-proj/package.py
index 2385bdd96b3..54fd720d019 100644
--- a/var/spack/repos/builtin/packages/r-proj/package.py
+++ b/var/spack/repos/builtin/packages/r-proj/package.py
@@ -32,5 +32,5 @@ class RProj(RPackage):
depends_on("libtiff@4", type=("build", "run"))
depends_on("curl", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.spec["proj"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/r-ps/package.py b/var/spack/repos/builtin/packages/r-ps/package.py
index 860bd0838e6..1a63364426f 100644
--- a/var/spack/repos/builtin/packages/r-ps/package.py
+++ b/var/spack/repos/builtin/packages/r-ps/package.py
@@ -27,5 +27,7 @@ class RPs(RPackage):
version("1.1.0", sha256="5d5240d5bf1d48c721b3fdf47cfc9dbf878e388ea1f057b764db05bffdc4a9fe")
version("1.0.0", sha256="9bdaf64aaa44ae11866868402eb75bf56c2e3022100476d9b9dcd16ca784ffd8")
+ depends_on("c", type="build")
+
depends_on("r@3.1:", type=("build", "run"))
depends_on("r@3.4:", type=("build", "run"), when="@1.7.0:")
diff --git a/var/spack/repos/builtin/packages/r-purrr/package.py b/var/spack/repos/builtin/packages/r-purrr/package.py
index 09b68219419..1a69da33f54 100644
--- a/var/spack/repos/builtin/packages/r-purrr/package.py
+++ b/var/spack/repos/builtin/packages/r-purrr/package.py
@@ -22,6 +22,9 @@ class RPurrr(RPackage):
version("0.3.1", sha256="c2a3c9901192efd8a04976676f84885a005db88deb1432e4750900c7b3b7883b")
version("0.2.4", sha256="ed8d0f69d29b95c2289ae52be08a0e65f8171abb6d2587de7b57328bf3b2eb71")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-ragg/package.py b/var/spack/repos/builtin/packages/r-ragg/package.py
index 674096b9fe2..45ff8f89808 100644
--- a/var/spack/repos/builtin/packages/r-ragg/package.py
+++ b/var/spack/repos/builtin/packages/r-ragg/package.py
@@ -22,6 +22,9 @@ class RRagg(RPackage):
version("1.2.4", sha256="c547e5636a2eefaa0021a0d50fad1e813c2ce976ec0c9c3f796d38a110680dcd")
version("1.2.3", sha256="976da0007ef0d4dbadda4734727b539671b65c1eff4ff392d734f4e2c846f2b2")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r-systemfonts@1.0.3:", type=("build", "run"))
depends_on("r-textshaping@0.3.0:", type=("build", "run"))
depends_on("freetype")
diff --git a/var/spack/repos/builtin/packages/r-readr/package.py b/var/spack/repos/builtin/packages/r-readr/package.py
index 3cc2c8767e3..b80f9dbd697 100644
--- a/var/spack/repos/builtin/packages/r-readr/package.py
+++ b/var/spack/repos/builtin/packages/r-readr/package.py
@@ -27,6 +27,9 @@ class RReadr(RPackage):
version("1.3.1", sha256="33f94de39bb7f2a342fbb2bd4e5afcfec08798eac39672ee18042ac0b349e4f3")
version("1.1.1", sha256="1a29b99009a06f2cee18d08bc6201fd4985b6d45c76cefca65084dcc1a2f7cb3")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.0.2:", type=("build", "run"))
depends_on("r@3.1:", type=("build", "run"), when="@1.3.0:")
depends_on("r@3.4:", 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 646220cd7b1..3d1d1a2f2d2 100644
--- a/var/spack/repos/builtin/packages/r-readxl/package.py
+++ b/var/spack/repos/builtin/packages/r-readxl/package.py
@@ -26,6 +26,9 @@ class RReadxl(RPackage):
version("1.1.0", sha256="b63d21fc6510acb373e96deaec45e966a523ec75cbec75a089529297ed443116")
version("1.0.0", sha256="fbd62f07fed7946363698a57be88f4ef3fa254ecf456ef292535849c787fc7ad")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-rhtslib/package.py b/var/spack/repos/builtin/packages/r-rhtslib/package.py
index 2a0b4df2aa9..ed45f6d99d5 100644
--- a/var/spack/repos/builtin/packages/r-rhtslib/package.py
+++ b/var/spack/repos/builtin/packages/r-rhtslib/package.py
@@ -55,7 +55,7 @@ class RRhtslib(RPackage):
patch("find_deps-1.16.patch", when="@1.16:1.28.0")
@when("@1.12:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("BZIP2_INCLUDE", self.spec["bzip2"].headers.include_flags)
env.set("XZ_INCLUDE", self.spec["xz"].headers.include_flags)
env.set("BZIP2_LIB", self.spec["bzip2"].libs.search_flags)
diff --git a/var/spack/repos/builtin/packages/r-rjava/package.py b/var/spack/repos/builtin/packages/r-rjava/package.py
index 131949c6e18..f64c47a12bb 100644
--- a/var/spack/repos/builtin/packages/r-rjava/package.py
+++ b/var/spack/repos/builtin/packages/r-rjava/package.py
@@ -32,6 +32,6 @@ class RRjava(RPackage):
depends_on("xz")
depends_on("zlib-api")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.append_flags("JAVAH", "{0}/javah".format(join_path(spec["java"].prefix.bin)))
diff --git a/var/spack/repos/builtin/packages/r-rlang/package.py b/var/spack/repos/builtin/packages/r-rlang/package.py
index 24ac232dbf9..8c91599bac7 100644
--- a/var/spack/repos/builtin/packages/r-rlang/package.py
+++ b/var/spack/repos/builtin/packages/r-rlang/package.py
@@ -36,6 +36,8 @@ class RRlang(RPackage):
version("0.1.2", sha256="90cfcd88cae6fff044fca64b24a8e6bdc09fc276163b518ff2d90268b0c785f9")
version("0.1.1", sha256="5901f95d68728a7d9bb1c2373a20ce6e4ad222f66e397e7735e9eff987c73c3f")
+ depends_on("c", type="build")
+
depends_on("r@3.1.0:", type=("build", "run"))
depends_on("r@3.2.0:", type=("build", "run"), when="@0.4.0:")
depends_on("r@3.3.0:", type=("build", "run"), when="@0.4.10:")
diff --git a/var/spack/repos/builtin/packages/r-rlas/package.py b/var/spack/repos/builtin/packages/r-rlas/package.py
index 4d704005c98..356bda0d3f7 100644
--- a/var/spack/repos/builtin/packages/r-rlas/package.py
+++ b/var/spack/repos/builtin/packages/r-rlas/package.py
@@ -24,3 +24,4 @@ class RRlas(RPackage):
depends_on("r-rcpp", type=("build", "run"))
depends_on("r-data-table", type=("build", "run"))
depends_on("boost@:1.84+filesystem+program_options+numpy+python+regex+serialization+thread")
+ depends_on("cxx", type="build")
diff --git a/var/spack/repos/builtin/packages/r-sass/package.py b/var/spack/repos/builtin/packages/r-sass/package.py
index d91a8c945b2..63cd1b96e3a 100644
--- a/var/spack/repos/builtin/packages/r-sass/package.py
+++ b/var/spack/repos/builtin/packages/r-sass/package.py
@@ -23,6 +23,9 @@ class RSass(RPackage):
version("0.4.1", sha256="850fcb6bd49085d5afd25ac18da0744234385baf1f13d8c0a320f4da2de608bb")
version("0.4.0", sha256="7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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"))
diff --git a/var/spack/repos/builtin/packages/r-stringi/package.py b/var/spack/repos/builtin/packages/r-stringi/package.py
index c3e9a4e9328..91c520af7b2 100644
--- a/var/spack/repos/builtin/packages/r-stringi/package.py
+++ b/var/spack/repos/builtin/packages/r-stringi/package.py
@@ -34,6 +34,9 @@ class RStringi(RPackage):
version("1.1.2", sha256="e50b7162ceb7ebae403475f6f8a76a39532a2abc82112db88661f48aa4b9218e")
version("1.1.1", sha256="243178a138fe68c86384feb85ead8eb605e8230113d638da5650bca01e24e165")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-sys/package.py b/var/spack/repos/builtin/packages/r-sys/package.py
index a74608f5bed..0a195ba651a 100644
--- a/var/spack/repos/builtin/packages/r-sys/package.py
+++ b/var/spack/repos/builtin/packages/r-sys/package.py
@@ -23,6 +23,8 @@ class RSys(RPackage):
version("3.4", sha256="17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487")
version("3.2", sha256="2819498461fe2ce83d319d1a47844e86bcea6d01d10861818dba289e7099bbcc")
+ depends_on("c", type="build")
+
def flag_handler(self, name, flags):
if name == "cflags":
flags.append(self.compiler.c99_flag)
diff --git a/var/spack/repos/builtin/packages/r-systemfonts/package.py b/var/spack/repos/builtin/packages/r-systemfonts/package.py
index 6a53250844b..bb282598ec2 100644
--- a/var/spack/repos/builtin/packages/r-systemfonts/package.py
+++ b/var/spack/repos/builtin/packages/r-systemfonts/package.py
@@ -25,6 +25,9 @@ class RSystemfonts(RPackage):
version("1.0.3", sha256="647c99d5ea6f90a49768ea7b10b39816af6be85168475273369fd973a20dbbba")
version("1.0.1", sha256="401db4d9e78e3a5e00b7a0b4fbad7fbb1c584734469b65fe5b7ebe1851c7a797")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-textshaping/package.py b/var/spack/repos/builtin/packages/r-textshaping/package.py
index 5e6ba1b28ca..410fcc6e0b4 100644
--- a/var/spack/repos/builtin/packages/r-textshaping/package.py
+++ b/var/spack/repos/builtin/packages/r-textshaping/package.py
@@ -20,6 +20,9 @@ class RTextshaping(RPackage):
version("0.4.0", sha256="35e940786bb278560de61bb55d4f46f8c86c878d0461613ceb8c98ba9b239d7a")
version("0.3.6", sha256="80e2c087962f55ce2811fbc798b09f5638c06c6b28c10cd3cb3827005b902ada")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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="@0.4.0:")
diff --git a/var/spack/repos/builtin/packages/r-tidyr/package.py b/var/spack/repos/builtin/packages/r-tidyr/package.py
index 0815a944805..e046b8932b0 100644
--- a/var/spack/repos/builtin/packages/r-tidyr/package.py
+++ b/var/spack/repos/builtin/packages/r-tidyr/package.py
@@ -31,6 +31,9 @@ class RTidyr(RPackage):
version("0.7.2", sha256="062cea2e2b57fffd500e4ce31cba6d593e65684fc0897ea49ea38d257c76009c")
version("0.5.1", sha256="dbab642ac7231cbfe3e2a0d4553fb4ffb3699c6d6b432be2bb5812dfbbdbdace")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-timechange/package.py b/var/spack/repos/builtin/packages/r-timechange/package.py
index 8c143f61304..681befbaa7f 100644
--- a/var/spack/repos/builtin/packages/r-timechange/package.py
+++ b/var/spack/repos/builtin/packages/r-timechange/package.py
@@ -24,5 +24,8 @@ class RTimechange(RPackage):
version("0.2.0", sha256="3d602008052123daef94a5c3f5154c5461b4ec0432ab70c37273d7ddd252f7f1")
version("0.1.1", sha256="8503919d233d7d7b81fe47692f0f2d6742ff4cae7320a5522bf98f077f5d7f70")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("r@3.3:", type=("build", "run"))
depends_on("r-cpp11@0.2.7:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-tzdb/package.py b/var/spack/repos/builtin/packages/r-tzdb/package.py
index 079f21f7870..c42e3097035 100644
--- a/var/spack/repos/builtin/packages/r-tzdb/package.py
+++ b/var/spack/repos/builtin/packages/r-tzdb/package.py
@@ -26,6 +26,9 @@ class RTzdb(RPackage):
version("0.3.0", sha256="6099f0ec1fba692b51b4360aa776902a39f10dae815933c31994b8e4d4277038")
version("0.2.0", sha256="c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-utf8/package.py b/var/spack/repos/builtin/packages/r-utf8/package.py
index b617a7e18c9..200ef3568c6 100644
--- a/var/spack/repos/builtin/packages/r-utf8/package.py
+++ b/var/spack/repos/builtin/packages/r-utf8/package.py
@@ -25,4 +25,6 @@ class RUtf8(RPackage):
version("1.1.0", sha256="6a8ae2c452859800c3ef12993a55892588fc35df8fa1360f3d182ed97244dc4f")
version("1.0.0", sha256="7562a80262cbc2017eee76c0d3c9575f240fab291f868a11724fa04a116efb80")
+ depends_on("c", type="build")
+
depends_on("r@2.10:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-uuid/package.py b/var/spack/repos/builtin/packages/r-uuid/package.py
index 263afbce9e2..d74c0bb18f2 100644
--- a/var/spack/repos/builtin/packages/r-uuid/package.py
+++ b/var/spack/repos/builtin/packages/r-uuid/package.py
@@ -22,4 +22,5 @@ class RUuid(RPackage):
version("0.1-4", sha256="98e0249dda17434bfa209c2058e9911e576963d4599be9f7ea946e664f8ca93e")
version("0.1-2", sha256="dd71704dc336b0857981b92a75ed9877d4ca47780b1682def28839304cd3b1be")
+ depends_on("c", type="build")
depends_on("r@2.9.0:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-v8/package.py b/var/spack/repos/builtin/packages/r-v8/package.py
index 3d2885d2312..750f0144698 100644
--- a/var/spack/repos/builtin/packages/r-v8/package.py
+++ b/var/spack/repos/builtin/packages/r-v8/package.py
@@ -34,7 +34,7 @@ class RV8(RPackage):
conflicts("@3.4.0", when="target=aarch64:")
conflicts("@3.4.0", when="%gcc@5:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if (spec.platform == "darwin") or (
spec.platform == "linux" and spec.target.family == "x86_64"
diff --git a/var/spack/repos/builtin/packages/r-vroom/package.py b/var/spack/repos/builtin/packages/r-vroom/package.py
index e7e07684b05..f4fb7ea5007 100644
--- a/var/spack/repos/builtin/packages/r-vroom/package.py
+++ b/var/spack/repos/builtin/packages/r-vroom/package.py
@@ -24,6 +24,9 @@ class RVroom(RPackage):
version("1.5.7", sha256="d087cb148f71c222fc89199d03df2502689149873414a6d89c2f006d3a109fde")
version("1.5.5", sha256="1d45688c08f162a3300eda532d9e87d144f4bc686769a521bf9a12e3d3b465fe")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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:")
diff --git a/var/spack/repos/builtin/packages/r-xfun/package.py b/var/spack/repos/builtin/packages/r-xfun/package.py
index 4801152a82a..0f7c96da0e2 100644
--- a/var/spack/repos/builtin/packages/r-xfun/package.py
+++ b/var/spack/repos/builtin/packages/r-xfun/package.py
@@ -25,4 +25,6 @@ class RXfun(RPackage):
version("0.20", sha256="284239d12a3d5ea7d1ef8b1382fb0a7a4661af54c85510501279681871da7c10")
version("0.8", sha256="c2f8ecf8b57ddec02f9be7f417d9e22fc1ae2c7db8d70aa703fc62bf4a5c5416")
+ depends_on("c", type="build")
+
depends_on("r@3.2.0:", when="@0.47:", type=("build", "run"))
diff --git a/var/spack/repos/builtin/packages/r-xml2/package.py b/var/spack/repos/builtin/packages/r-xml2/package.py
index de086f3db20..11341b3abe9 100644
--- a/var/spack/repos/builtin/packages/r-xml2/package.py
+++ b/var/spack/repos/builtin/packages/r-xml2/package.py
@@ -22,6 +22,9 @@ class RXml2(RPackage):
version("1.2.1", sha256="5615bbc94607efc3bc192551992b349091df802ae34b855cfa817733f2690605")
version("1.1.1", sha256="00f3e3b66b76760c19da5f6dddc98e6f30de36a96b211e59e1a3f4ff58763116")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
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")
diff --git a/var/spack/repos/builtin/packages/r-yaml/package.py b/var/spack/repos/builtin/packages/r-yaml/package.py
index 88e32c257f5..6259f6f5ce7 100644
--- a/var/spack/repos/builtin/packages/r-yaml/package.py
+++ b/var/spack/repos/builtin/packages/r-yaml/package.py
@@ -25,3 +25,5 @@ class RYaml(RPackage):
version("2.1.19", sha256="e5db035693ac765e4b5fe1fc2e9711f8ca73e398e3f2bf27cc60def59ccd7f11")
version("2.1.14", sha256="41a559846f6d44cc2dbcb3fc0becbc50d2766d3dc2aad7cfb97c1f9759ec0875")
version("2.1.13", sha256="26f69aa2008bcacf3b2f95ef82a4667eaec2f2da8487646f71f1e2635d2d7fa2")
+
+ depends_on("c", type="build")
diff --git a/var/spack/repos/builtin/packages/r/package.py b/var/spack/repos/builtin/packages/r/package.py
index db36006942d..f6bfd4b2291 100644
--- a/var/spack/repos/builtin/packages/r/package.py
+++ b/var/spack/repos/builtin/packages/r/package.py
@@ -23,6 +23,7 @@ class R(AutotoolsPackage):
license("GPL-2.0-or-later")
+ version("4.4.3", sha256="0d93d224442dea253c2b086f088db6d0d3cfd9b592cd5496e8cb2143e90fc9e8")
version("4.4.2", sha256="1578cd603e8d866b58743e49d8bf99c569e81079b6a60cf33cdf7bdffeb817ec")
version("4.4.1", sha256="b4cb675deaaeb7299d3b265d218cde43f192951ce5b89b7bb1a5148a36b2d94d")
version("4.4.0", sha256="ace4125f9b976d2c53bcc5fca30c75e30d4edc401584859cbadb080e72b5f030")
@@ -268,7 +269,9 @@ def copy_makeconf(self):
def r_lib_dir(self):
return join_path("rlib", "R", "library")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Set R_LIBS to include the library dir for the
# extension and any other R extensions it depends on.
r_libs_path = []
@@ -290,14 +293,16 @@ def setup_dependent_build_environment(self, env, dependent_spec):
env.set("MAKEFLAGS", "-j{0}".format(make_jobs))
env.set("R_HOME", join_path(self.prefix, "rlib", "R"))
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# For run time environment set only the path for dependent_spec and
# prepend it to R_LIBS
env.set("R_HOME", join_path(self.prefix, "rlib", "R"))
if dependent_spec.package.extends(self.spec):
env.prepend_path("R_LIBS", join_path(dependent_spec.prefix, self.r_lib_dir))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", join_path(self.prefix, "rlib", "R", "lib"))
env.prepend_path("PKG_CONFIG_PATH", join_path(self.prefix, "rlib", "pkgconfig"))
env.set("R_HOME", join_path(self.prefix, "rlib", "R"))
diff --git a/var/spack/repos/builtin/packages/r3d/package.py b/var/spack/repos/builtin/packages/r3d/package.py
index f6a1e08b2b2..a41551aa7c5 100644
--- a/var/spack/repos/builtin/packages/r3d/package.py
+++ b/var/spack/repos/builtin/packages/r3d/package.py
@@ -35,6 +35,8 @@ class R3d(CMakePackage):
description="Build R3D regression tests (versions 2019-04-24 or earlier)",
)
+ variant("shared", default=False, description="Build shared libraries")
+
variant(
"pic", default=False, description="Produce position-independent code (for shared libs)"
)
@@ -42,6 +44,8 @@ class R3d(CMakePackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
+ conflicts("+shared ~pic")
+
@when("@:2019-04-24")
def cmake(self, spec, prefix):
pass
@@ -81,11 +85,12 @@ def cmake_args(self):
if r3d_max_verts != "0":
options.append("-DR3D_MAX_VERTS=" + r3d_max_verts)
+ options.append(self.define_from_variant("BUILD_SHARED_LIBS", "shared"))
+ options.append(self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"))
+
if self.run_tests:
options.append("-DENABLE_UNIT_TESTS=ON")
else:
options.append("-DENABLE_UNIT_TESTS=OFF")
- options.append(self.define_from_variant("CMAKE_POSITION_INDEPENDENT_CODE", "pic"))
-
return options
diff --git a/var/spack/repos/builtin/packages/raja-perf/package.py b/var/spack/repos/builtin/packages/raja-perf/package.py
index e2362f65e44..a4e47c92681 100644
--- a/var/spack/repos/builtin/packages/raja-perf/package.py
+++ b/var/spack/repos/builtin/packages/raja-perf/package.py
@@ -97,6 +97,11 @@ class RajaPerf(CachedCMakePackage, CudaPackage, ROCmPackage):
description="Tests to run",
)
variant("caliper", default=False, description="Build with support for Caliper based profiling")
+ variant(
+ "lowopttest",
+ default=False,
+ description="For developers, lowers optimization level to pass tests with some compilers",
+ )
depends_on("cxx", type="build") # generated
@@ -176,6 +181,9 @@ def initconfig_compiler_entries(self):
# Default entries are already defined in CachedCMakePackage, inherit them:
entries = super().initconfig_compiler_entries()
+ if spec.satisfies("+lowopttest"):
+ entries.append(cmake_cache_string("CMAKE_CXX_FLAGS_RELEASE", "-O1"))
+
if spec.satisfies("+rocm ^blt@:0.6"):
entries.insert(0, cmake_cache_path("CMAKE_CXX_COMPILER", spec["hip"].hipcc))
@@ -249,7 +257,7 @@ def initconfig_hardware_entries(self):
else:
entries.append(cmake_cache_option("ENABLE_HIP", False))
- entries.append(cmake_cache_option("ENABLE_OPENMP_TARGET", "+omptarget" in spec))
+ entries.append(cmake_cache_option("RAJA_ENABLE_TARGET_OPENMP", "+omptarget" in spec))
if "+omptarget" in spec:
if "%xl" in spec:
entries.append(
@@ -320,7 +328,7 @@ def initconfig_package_entries(self):
entries.append(cmake_cache_option("BUILD_SHARED_LIBS", "+shared" in spec))
entries.append(cmake_cache_option("ENABLE_OPENMP", "+openmp" in spec))
entries.append(cmake_cache_option("RAJA_ENABLE_OPENMP_TASK", "+omptask" in spec))
- entries.append(cmake_cache_option("ENABLE_SYCL", spec.satisfies("+sycl")))
+ entries.append(cmake_cache_option("RAJA_ENABLE_SYCL", spec.satisfies("+sycl")))
# C++17
if spec.satisfies("@2024.07.0:") and spec.satisfies("+sycl"):
diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py
index 7eb1e0be491..ce756a48afa 100644
--- a/var/spack/repos/builtin/packages/raja/package.py
+++ b/var/spack/repos/builtin/packages/raja/package.py
@@ -25,12 +25,18 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage):
git = "https://github.com/LLNL/RAJA.git"
tags = ["radiuss", "e4s"]
- maintainers("davidbeckingsale", "adrienbernede")
+ maintainers("adrienbernede", "davidbeckingsale", "kab163")
license("BSD-3-Clause")
version("develop", branch="develop", submodules=submodules)
version("main", branch="main", submodules=submodules)
+ version(
+ "2025.03.0",
+ tag="v2025.03.0",
+ commit="1d70abf171474d331f1409908bdf1b1c3fe19222",
+ submodules=submodules,
+ )
version(
"2024.07.0",
tag="v2024.07.0",
@@ -206,6 +212,12 @@ class Raja(CachedCMakePackage, CudaPackage, ROCmPackage):
description="Run all the tests, including those known to fail.",
)
+ variant(
+ "lowopttest",
+ default=False,
+ description="For developers, lowers optimization level to pass tests with some compilers",
+ )
+
depends_on("cxx", type="build") # generated
depends_on("blt", type="build")
@@ -365,6 +377,9 @@ def initconfig_package_entries(self):
entries.append(cmake_cache_option("RAJA_ENABLE_SYCL", spec.satisfies("+sycl")))
+ if spec.satisfies("+lowopttest"):
+ entries.append(cmake_cache_string("CMAKE_CXX_FLAGS_RELEASE", "-O1"))
+
# C++17
if spec.satisfies("@2024.07.0:") and spec.satisfies("+sycl"):
entries.append(cmake_cache_string("BLT_CXX_STD", "c++17"))
diff --git a/var/spack/repos/builtin/packages/rasdaemon/package.py b/var/spack/repos/builtin/packages/rasdaemon/package.py
index 0c02ba20fb8..c0e8a83bae6 100644
--- a/var/spack/repos/builtin/packages/rasdaemon/package.py
+++ b/var/spack/repos/builtin/packages/rasdaemon/package.py
@@ -29,5 +29,5 @@ class Rasdaemon(AutotoolsPackage):
depends_on("libtool", type="build")
depends_on("m4", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/rayleigh/package.py b/var/spack/repos/builtin/packages/rayleigh/package.py
index 1efba0cfefd..64eeecb552c 100644
--- a/var/spack/repos/builtin/packages/rayleigh/package.py
+++ b/var/spack/repos/builtin/packages/rayleigh/package.py
@@ -32,7 +32,7 @@ class Rayleigh(MakefilePackage):
depends_on("fftw-api@3")
depends_on("lapack")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if spec.satisfies("^cray-mpich"):
# The Cray wrapper takes care of linking MPI correctly for all compilers.
diff --git a/var/spack/repos/builtin/packages/rccl/package.py b/var/spack/repos/builtin/packages/rccl/package.py
index a53737ff4b4..e18efc72e66 100644
--- a/var/spack/repos/builtin/packages/rccl/package.py
+++ b/var/spack/repos/builtin/packages/rccl/package.py
@@ -149,7 +149,7 @@ def determine_version(cls, lib):
ver = None
return ver
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
env.set("ROCMCORE_PATH", self.spec["rocm-core"].prefix)
if self.spec.satisfies("+asan"):
diff --git a/var/spack/repos/builtin/packages/redis-ai/package.py b/var/spack/repos/builtin/packages/redis-ai/package.py
index 97ea78d62cd..cb1b906a84b 100644
--- a/var/spack/repos/builtin/packages/redis-ai/package.py
+++ b/var/spack/repos/builtin/packages/redis-ai/package.py
@@ -124,5 +124,5 @@ def copy_libtorch(self):
torch_lib_dir = join_path(torch_site_dir, "lib")
install_tree(torch_lib_dir, self.prefix.backends.redisai_torch.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("REDIS_AI", self.prefix.join("redisai.so"))
diff --git a/var/spack/repos/builtin/packages/reframe/package.py b/var/spack/repos/builtin/packages/reframe/package.py
index 1fa946bdc7b..a552fa6a560 100644
--- a/var/spack/repos/builtin/packages/reframe/package.py
+++ b/var/spack/repos/builtin/packages/reframe/package.py
@@ -181,7 +181,7 @@ def install(self, spec, prefix):
shutil.move("reframe.settings.8", "man8")
install_tree(self.stage.source_path, self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix)
if self.spec.satisfies("@3.0:"):
if "+docs" in self.spec:
diff --git a/var/spack/repos/builtin/packages/regcm/package.py b/var/spack/repos/builtin/packages/regcm/package.py
index c24533b8600..fc278837207 100644
--- a/var/spack/repos/builtin/packages/regcm/package.py
+++ b/var/spack/repos/builtin/packages/regcm/package.py
@@ -55,6 +55,8 @@ class Regcm(AutotoolsPackage):
description="Build NetCDF using the high performance parallel " "NetCDF implementation.",
)
+ depends_on("fortran", type="build")
+
depends_on("netcdf-c")
depends_on("netcdf-fortran")
depends_on("hdf5")
diff --git a/var/spack/repos/builtin/packages/rempi/package.py b/var/spack/repos/builtin/packages/rempi/package.py
index a2afcedda85..b39f751d18b 100644
--- a/var/spack/repos/builtin/packages/rempi/package.py
+++ b/var/spack/repos/builtin/packages/rempi/package.py
@@ -36,7 +36,7 @@ def flag_handler(self, name, flags):
flags.append("-Wno-error=implicit-function-declaration")
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%cce"):
env.set("MPICC", "mpicc")
env.set("MPICXX", "mpicxx")
diff --git a/var/spack/repos/builtin/packages/reprimand/package.py b/var/spack/repos/builtin/packages/reprimand/package.py
index 191ee1a1db6..afe1e314b96 100644
--- a/var/spack/repos/builtin/packages/reprimand/package.py
+++ b/var/spack/repos/builtin/packages/reprimand/package.py
@@ -44,7 +44,7 @@ class Reprimand(MesonPackage):
extends("python", when="+python")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXXFLAGS", self.compiler.cxx11_flag)
env.set("BOOST_ROOT", self.spec["boost"].prefix)
diff --git a/var/spack/repos/builtin/packages/revocap-refiner/package.py b/var/spack/repos/builtin/packages/revocap-refiner/package.py
index 5bebdaf2649..6f8529af774 100644
--- a/var/spack/repos/builtin/packages/revocap-refiner/package.py
+++ b/var/spack/repos/builtin/packages/revocap-refiner/package.py
@@ -19,6 +19,10 @@ class RevocapRefiner(MakefilePackage):
parallel = False
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
# add space between literal and identifier.
patch("add_space.patch")
# remove unused function getIndices.
diff --git a/var/spack/repos/builtin/packages/rinetd/package.py b/var/spack/repos/builtin/packages/rinetd/package.py
index 8896fc8ec75..3ef0c4b2239 100644
--- a/var/spack/repos/builtin/packages/rinetd/package.py
+++ b/var/spack/repos/builtin/packages/rinetd/package.py
@@ -23,7 +23,7 @@ class Rinetd(AutotoolsPackage):
depends_on("autoconf", type="build")
depends_on("automake", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def autoreconf(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/rivet/package.py b/var/spack/repos/builtin/packages/rivet/package.py
index 978d936e0d4..34bbdfc41f3 100644
--- a/var/spack/repos/builtin/packages/rivet/package.py
+++ b/var/spack/repos/builtin/packages/rivet/package.py
@@ -134,7 +134,7 @@ def copy_gsl_m4(self):
def force_autoreconf(self):
return True
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# this avoids an "import site" error in the build
env.unset("PYTHONHOME")
diff --git a/var/spack/repos/builtin/packages/rnaquast/package.py b/var/spack/repos/builtin/packages/rnaquast/package.py
index 2fd2a7b76e3..ec60e7729f9 100644
--- a/var/spack/repos/builtin/packages/rnaquast/package.py
+++ b/var/spack/repos/builtin/packages/rnaquast/package.py
@@ -33,5 +33,5 @@ def install(self, spec, prefix):
install_tree(".", prefix.bin)
os.rename("%s/rnaQUAST.py" % prefix.bin, "%s/rnaQUAST" % prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", prefix.bin)
diff --git a/var/spack/repos/builtin/packages/roary/package.py b/var/spack/repos/builtin/packages/roary/package.py
index f992cf8f26b..330bbc1a3f6 100644
--- a/var/spack/repos/builtin/packages/roary/package.py
+++ b/var/spack/repos/builtin/packages/roary/package.py
@@ -61,7 +61,7 @@ class Roary(Package):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(prefix, "contrib", "roary2svg"))
env.prepend_path("PATH", join_path(prefix, "contrib", "roary_plots"))
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/rocalution/package.py b/var/spack/repos/builtin/packages/rocalution/package.py
index b01390bc2db..c26c70a479d 100644
--- a/var/spack/repos/builtin/packages/rocalution/package.py
+++ b/var/spack/repos/builtin/packages/rocalution/package.py
@@ -106,7 +106,7 @@ class Rocalution(CMakePackage):
# Fix build for most Radeon 5000 and Radeon 6000 series GPUs.
patch("0004-fix-navi-1x.patch", when="@5.2.0:5.3")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocblas/package.py b/var/spack/repos/builtin/packages/rocblas/package.py
index 364449bbf1a..a73f35e6e5c 100644
--- a/var/spack/repos/builtin/packages/rocblas/package.py
+++ b/var/spack/repos/builtin/packages/rocblas/package.py
@@ -20,8 +20,8 @@ class Rocblas(CMakePackage):
license("MIT")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="73e91bd50c920b818742fa5bf9990c0676be5bfbafe321d5781607dc2ce27060")
version("6.3.2", sha256="455cad760d926c21101594197c4456f617e5873a8f17bb3e14bd762018545a9e")
version("6.3.1", sha256="88d2de6ce6b23a157eea8be63408350848935e4dfc3e27e5f2add78834c6d6ba")
@@ -189,7 +189,7 @@ class Rocblas(CMakePackage):
patch("0006-Guard-use-of-OpenMP-to-make-it-optional-5.4.patch", when="@5.4")
patch("0007-add-rocm-openmp-extras-include-dir.patch", when="@5.6:5.7")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocfft/package.py b/var/spack/repos/builtin/packages/rocfft/package.py
index 5b5a5efea3e..d680f581bc4 100644
--- a/var/spack/repos/builtin/packages/rocfft/package.py
+++ b/var/spack/repos/builtin/packages/rocfft/package.py
@@ -19,7 +19,7 @@ class Rocfft(CMakePackage):
libraries = ["librocfft"]
license("MIT")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="b2edb5c39215b98e0abc485d2b277a0b8c6f87f06e9b0770a60f5568ef52e62e")
version("6.3.2", sha256="0511d04d2367dcac6b35bc6b449337ba37bb623b8382fb11178fc608b5435437")
version("6.3.1", sha256="f8aa0e68d8e303725d0be8ae1d7c0113b6ca019a3b9f08572abf8a02db690662")
@@ -125,7 +125,7 @@ class Rocfft(CMakePackage):
when="@6.0.0",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocm-bandwidth-test/package.py b/var/spack/repos/builtin/packages/rocm-bandwidth-test/package.py
index 328cda61df8..d560685d627 100644
--- a/var/spack/repos/builtin/packages/rocm-bandwidth-test/package.py
+++ b/var/spack/repos/builtin/packages/rocm-bandwidth-test/package.py
@@ -16,7 +16,7 @@ class RocmBandwidthTest(CMakePackage):
maintainers("srekolam", "renjithravindrankannath", "afzpatel")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="d33f656eb6ba7db78b41c4bcf6d830b511dc97c6d645760e6d05edd07fcaefba")
version("6.3.2", sha256="3754831244d7c4f6314fc25b3e929adf9abe44c9cb60621dd8ae5d1aa930ae55")
version("6.3.1", sha256="98002e4104929a62a308114ed82fba530880359a17f90ebd62a2ca49c2baac78")
diff --git a/var/spack/repos/builtin/packages/rocm-clang-ocl/package.py b/var/spack/repos/builtin/packages/rocm-clang-ocl/package.py
index 5e41a98168a..954138b5347 100644
--- a/var/spack/repos/builtin/packages/rocm-clang-ocl/package.py
+++ b/var/spack/repos/builtin/packages/rocm-clang-ocl/package.py
@@ -18,7 +18,7 @@ class RocmClangOcl(CMakePackage):
license("MIT")
maintainers("srekolam", "renjithravindrankannath")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.1.2", sha256="cc9942539b5e50b97fa0d2425ba93aae7223635fecba869d8f43b2c26f9482ae")
version("6.1.1", sha256="21b8a6d521a8e584e18851d27b5ef328a63ea7ee9eb3cc52508b9bfcf975e119")
version("6.1.0", sha256="c983adad49ab5850307db1282f8bc957b9870d4ce37db8fbb43c52db6c90d0ed")
diff --git a/var/spack/repos/builtin/packages/rocm-cmake/package.py b/var/spack/repos/builtin/packages/rocm-cmake/package.py
index c4dfd6947ff..1eba292de90 100644
--- a/var/spack/repos/builtin/packages/rocm-cmake/package.py
+++ b/var/spack/repos/builtin/packages/rocm-cmake/package.py
@@ -19,7 +19,7 @@ class RocmCmake(CMakePackage):
license("MIT")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="4238cccc22226ba9487185fc2faa66b11c0cb8e7982240332e1b919cec8d909e")
version("6.3.2", sha256="f5104c2289da99a70d8c4c1befbca4f8efa7c89711eaac7b6b63592cd4bd99a8")
version("6.3.1", sha256="6994a5bdeea55cd41ec01ab4142785ea02bbdcb83e70f6911095c7cea766ebe8")
diff --git a/var/spack/repos/builtin/packages/rocm-core/package.py b/var/spack/repos/builtin/packages/rocm-core/package.py
index 6e2e5f68d6f..ab1b017a9b1 100644
--- a/var/spack/repos/builtin/packages/rocm-core/package.py
+++ b/var/spack/repos/builtin/packages/rocm-core/package.py
@@ -60,7 +60,7 @@ class RocmCore(CMakePackage):
]:
depends_on("llvm-amdgpu", when=f"@{ver}+asan")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", self.spec["llvm-amdgpu"].prefix + "/bin/clang")
env.set("CXX", self.spec["llvm-amdgpu"].prefix + "/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/rocm-dbgapi/package.py b/var/spack/repos/builtin/packages/rocm-dbgapi/package.py
index f575654328e..0966d9f90d6 100644
--- a/var/spack/repos/builtin/packages/rocm-dbgapi/package.py
+++ b/var/spack/repos/builtin/packages/rocm-dbgapi/package.py
@@ -23,7 +23,7 @@ class RocmDbgapi(CMakePackage):
license("MIT")
- version("master", branch="amd-master")
+ version("master", branch="amd-master", deprecated=True)
version("6.3.3", sha256="25c8e9f4a22f23004f2fc1998c284095b193591eb6143b47380455754948ab98")
version("6.3.2", sha256="0e7cea6ae2eb737ad378787d2ef5f6cbaf9dfb483bb5e61e716601a145677adf")
version("6.3.1", sha256="1843423c91a22cf83bef5f14cb50f55ba333047e03e75296b9f9522facde5822")
@@ -125,7 +125,7 @@ def patch(self):
"CMakeLists.txt",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/rocm-debug-agent/package.py b/var/spack/repos/builtin/packages/rocm-debug-agent/package.py
index bdd415b09f6..bf78726283e 100644
--- a/var/spack/repos/builtin/packages/rocm-debug-agent/package.py
+++ b/var/spack/repos/builtin/packages/rocm-debug-agent/package.py
@@ -136,7 +136,7 @@ def determine_version(cls, lib):
)
return None
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/rocm-device-libs/package.py b/var/spack/repos/builtin/packages/rocm-device-libs/package.py
index 4705d09ae22..2dc1eb7827e 100644
--- a/var/spack/repos/builtin/packages/rocm-device-libs/package.py
+++ b/var/spack/repos/builtin/packages/rocm-device-libs/package.py
@@ -23,7 +23,7 @@ def url_for_version(self, version):
maintainers("srekolam", "renjithravindrankannath", "haampie", "afzpatel")
- version("master", branch="amd-stg-open")
+ version("master", branch="amd-stg-open", deprecated=True)
version("6.3.3", sha256="4df9aba24e574edf23844c0d2d9dda112811db5c2b08c9428604a21b819eb23d")
version("6.3.2", sha256="1f52e45660ea508d3fe717a9903fe27020cee96de95a3541434838e0193a4827")
version("6.3.1", sha256="e9c2481cccacdea72c1f8d3970956c447cec47e18dfb9712cbbba76a2820552c")
diff --git a/var/spack/repos/builtin/packages/rocm-opencl/package.py b/var/spack/repos/builtin/packages/rocm-opencl/package.py
index 27fcbea6de7..bc6146b87f2 100644
--- a/var/spack/repos/builtin/packages/rocm-opencl/package.py
+++ b/var/spack/repos/builtin/packages/rocm-opencl/package.py
@@ -34,9 +34,9 @@ def url_for_version(self, version):
license("MIT")
- version("master", branch="main")
- version("6.3.3", sha256="8e5adca8f8c2d99d4a4e49605dd6b56b7881b762ee8ce15b4a7000e3cd982fec"),
- version("6.3.2", sha256="ec13dc4ffe212beee22171cb2825d2b16cdce103c835adddb482b9238cf4f050"),
+ version("master", branch="main", deprecated=True)
+ version("6.3.3", sha256="8e5adca8f8c2d99d4a4e49605dd6b56b7881b762ee8ce15b4a7000e3cd982fec")
+ version("6.3.2", sha256="ec13dc4ffe212beee22171cb2825d2b16cdce103c835adddb482b9238cf4f050")
version("6.3.1", sha256="bfb8a4a59e7bd958e2cd4bf6f14c6cdea601d9827ebf6dc7af053a90e963770f")
version("6.3.0", sha256="829e61a5c54d0c8325d02b0191c0c8254b5740e63b8bfdb05eec9e03d48f7d2c")
version("6.2.4", sha256="0a3164af7f997a4111ade634152957378861b95ee72d7060eb01c86c87208c54")
@@ -208,7 +208,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
@@ -217,7 +217,7 @@ def setup_build_environment(self, env):
env.set("CXXFLAGS", "-fsanitize=address -shared-libasan")
env.set("LDFLAGS", "-fuse-ld=lld")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
env.set("OCL_ICD_VENDORS", self.prefix.vendors + "/")
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 f40c37ca6f4..b211e954581 100644
--- a/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py
+++ b/var/spack/repos/builtin/packages/rocm-openmp-extras/package.py
@@ -362,7 +362,7 @@ class RocmOpenmpExtras(Package):
patch("0001-Avoid-duplicate-registration-on-cuda-env.patch", when="@6.1")
patch("0001-Avoid-duplicate-registration-on-cuda-env-6.2.patch", when="@6.2:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
devlibs_prefix = self.spec["llvm-amdgpu"].prefix
llvm_prefix = self.spec["llvm-amdgpu"].prefix
hsa_prefix = self.spec["hsa-rocr-dev"].prefix
@@ -375,7 +375,7 @@ def setup_run_environment(self, env):
env.prepend_path("LD_LIBRARY_PATH", f"{hsa_prefix}/lib")
env.set("AOMP_GPU", f"`{self.prefix}/bin/mygpu`")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
llvm_prefix = self.spec["llvm-amdgpu"].prefix
env.set("AOMP", f"{llvm_prefix}")
env.set("FC", f"{self.prefix}/bin/flang")
diff --git a/var/spack/repos/builtin/packages/rocm-smi-lib/package.py b/var/spack/repos/builtin/packages/rocm-smi-lib/package.py
index 70a478898aa..7850ee20f41 100644
--- a/var/spack/repos/builtin/packages/rocm-smi-lib/package.py
+++ b/var/spack/repos/builtin/packages/rocm-smi-lib/package.py
@@ -22,7 +22,7 @@ class RocmSmiLib(CMakePackage):
maintainers("srekolam", "renjithravindrankannath")
libraries = ["librocm_smi64"]
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="679dfd0cbd213d27660e546584ab013afea286eff95928d748d168503305c9c4")
version("6.3.2", sha256="29a9190143dfcbafeac93d8064b00c9320dbca57a3344adb009ec17d9b09d036")
version("6.3.1", sha256="0f45e4823e361a1c6ac560eabf6000c3b59e08bcd96e87150149149e861c6a63")
@@ -110,7 +110,7 @@ def cmake_args(self):
args.append(self.define_from_variant("ADDRESS_SANITIZER", "asan"))
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@6.1: +asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/rocm-tensile/package.py b/var/spack/repos/builtin/packages/rocm-tensile/package.py
index 0fccf686ec7..c75c2e5631f 100644
--- a/var/spack/repos/builtin/packages/rocm-tensile/package.py
+++ b/var/spack/repos/builtin/packages/rocm-tensile/package.py
@@ -104,7 +104,7 @@ class RocmTensile(CMakePackage):
patch("0003-require-openmp-extras-when-tensile-use-openmp.patch", when="@5.1.0:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
env.append_flags("LDFLAGS", "-pthread")
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 e6e346a1c5f..c68885430ef 100644
--- a/var/spack/repos/builtin/packages/rocm-validation-suite/package.py
+++ b/var/spack/repos/builtin/packages/rocm-validation-suite/package.py
@@ -75,9 +75,9 @@ class RocmValidationSuite(CMakePackage):
depends_on("googletest")
depends_on("doxygen", type="build")
- def setup_build_environment(self, build_env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
- build_env.set("HIPCC_PATH", spec["hip"].prefix)
+ env.set("HIPCC_PATH", spec["hip"].prefix)
for ver in [
"5.3.0",
diff --git a/var/spack/repos/builtin/packages/rocminfo/package.py b/var/spack/repos/builtin/packages/rocminfo/package.py
index 0893f916f99..e773fc7fa70 100644
--- a/var/spack/repos/builtin/packages/rocminfo/package.py
+++ b/var/spack/repos/builtin/packages/rocminfo/package.py
@@ -16,7 +16,7 @@ class Rocminfo(CMakePackage):
maintainers("srekolam", "renjithravindrankannath", "haampie")
- version("master", branch="master")
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="08390b2babe6dc832887098c5d3a5253d655430a18751f3446a56c7422b26dd2")
version("6.3.2", sha256="a98a32bae0e118397b5559b4a584c9363191bb2d1f45fe13b09f502016745e8f")
version("6.3.1", sha256="30cf7ed537c066e325a8731d0fbe62be2f0f66c8700a06f334e787e9f0f87437")
diff --git a/var/spack/repos/builtin/packages/rocprim/package.py b/var/spack/repos/builtin/packages/rocprim/package.py
index d3505a73339..e510a210070 100644
--- a/var/spack/repos/builtin/packages/rocprim/package.py
+++ b/var/spack/repos/builtin/packages/rocprim/package.py
@@ -93,7 +93,7 @@ class Rocprim(CMakePackage):
# the patch is meant for 5.3.0 only.this is already in the 5.3.3+ releases
patch("fix-device-merge-mismatched-param-5.3.0.patch", when="@5.3.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang++")
diff --git a/var/spack/repos/builtin/packages/rocprofiler-systems/package.py b/var/spack/repos/builtin/packages/rocprofiler-systems/package.py
index 39d9479478e..66cb0c1d6ac 100644
--- a/var/spack/repos/builtin/packages/rocprofiler-systems/package.py
+++ b/var/spack/repos/builtin/packages/rocprofiler-systems/package.py
@@ -16,8 +16,8 @@ class RocprofilerSystems(CMakePackage):
license("MIT")
- version("amd-mainline", branch="amd-mainline", submodules=True)
- version("amd-staging", branch="amd-staging", submodules=True)
+ version("amd-mainline", branch="amd-mainline", submodules=True, deprecated=True)
+ version("amd-staging", branch="amd-staging", submodules=True, deprecated=True)
version(
"6.3.3",
git="https://github.com/ROCm/rocprofiler-systems",
@@ -178,7 +178,7 @@ def flag_handler(self, name, flags):
flags.append("-lintl")
return (flags, None, None)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+tau" in self.spec:
import glob
diff --git a/var/spack/repos/builtin/packages/rocrand/package.py b/var/spack/repos/builtin/packages/rocrand/package.py
index a8f6dd69e75..a3dcb9472a6 100644
--- a/var/spack/repos/builtin/packages/rocrand/package.py
+++ b/var/spack/repos/builtin/packages/rocrand/package.py
@@ -22,8 +22,8 @@ class Rocrand(CMakePackage):
license("MIT")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="d55be9d367af28d87d983d649329b7ef04641e74d39064b98aeee4b9980af4eb")
version("6.3.2", sha256="57f364806369ddb80761ce44187920075cf446de527dd1fbc6adbb4b4b3e9bb8")
version("6.3.1", sha256="80d86c31ec9cb40f5c5532281b42cf99fbc8a81e3ffd3bc8b3bbe4a7e509bf5f")
@@ -142,7 +142,7 @@ def patch(self):
os.rmdir("hipRAND")
os.rename("hiprand", "hipRAND")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocsolver/package.py b/var/spack/repos/builtin/packages/rocsolver/package.py
index ff4ee0d9aff..7354653f1b9 100644
--- a/var/spack/repos/builtin/packages/rocsolver/package.py
+++ b/var/spack/repos/builtin/packages/rocsolver/package.py
@@ -43,8 +43,8 @@ class Rocsolver(CMakePackage):
license("BSD-2-Clause")
- version("develop", branch="develop")
- version("master", branch="master")
+ version("develop", branch="develop", deprecated=True)
+ version("master", branch="master", deprecated=True)
version("6.3.3", sha256="0e8bb906513555d349b6a20cb17976402f5ea6702668efcdda595a2e2d516b46")
version("6.3.2", sha256="834f532c54bdf0e4900e73ffb0544068071976175559c8bf3c50d7a3b7230a3a")
version("6.3.1", sha256="ffa70c4dedeb20a33cf79d4ae3e95ade2ae5202f819459b19a0ebf62c380bba0")
@@ -154,7 +154,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocsparse/package.py b/var/spack/repos/builtin/packages/rocsparse/package.py
index 1fab2fe8014..33644f323f6 100644
--- a/var/spack/repos/builtin/packages/rocsparse/package.py
+++ b/var/spack/repos/builtin/packages/rocsparse/package.py
@@ -260,7 +260,7 @@ def check_build(self):
)
exe("--gtest_filter=*quick*:*pre_checkin*-*known_bug*")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rocthrust/package.py b/var/spack/repos/builtin/packages/rocthrust/package.py
index 66f5e0e5e65..5a94a9c69fe 100644
--- a/var/spack/repos/builtin/packages/rocthrust/package.py
+++ b/var/spack/repos/builtin/packages/rocthrust/package.py
@@ -91,7 +91,7 @@ def check(self):
with working_dir(self.build_directory):
make("test")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/roctracer-dev/package.py b/var/spack/repos/builtin/packages/roctracer-dev/package.py
index 6254a70e58b..4e6dbd0bd80 100644
--- a/var/spack/repos/builtin/packages/roctracer-dev/package.py
+++ b/var/spack/repos/builtin/packages/roctracer-dev/package.py
@@ -156,7 +156,7 @@ def patch(self):
"hsaap.py",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
self.asan_on(env)
diff --git a/var/spack/repos/builtin/packages/rocwmma/package.py b/var/spack/repos/builtin/packages/rocwmma/package.py
index 0b679b24281..1fe7aed19d2 100644
--- a/var/spack/repos/builtin/packages/rocwmma/package.py
+++ b/var/spack/repos/builtin/packages/rocwmma/package.py
@@ -130,7 +130,7 @@ class Rocwmma(CMakePackage):
patch("0001-add-rocm-smi-lib-path-for-building-tests.patch", when="@5.6:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["hip"].hipcc)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/roms/package.py b/var/spack/repos/builtin/packages/roms/package.py
index 0ca26133647..bf28f0e24b0 100644
--- a/var/spack/repos/builtin/packages/roms/package.py
+++ b/var/spack/repos/builtin/packages/roms/package.py
@@ -128,16 +128,16 @@ def edit(self, spec, prefix):
if "+debug" in self.spec:
makefile.filter(r"\sUSE_DEBUG\s[?]=.*", "USE_DEBUG = on")
- def setup_build_environment(self, spack_env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
netcdf_include = spec["netcdf-fortran"].prefix.include
nf_config = join_path(spec["netcdf-fortran"].prefix.bin, "nf-config")
- spack_env.set("NF_CONFIG", nf_config)
- spack_env.set("NETCDF_INCDIR", netcdf_include)
- spack_env.set("HDF5_INCDIR", spec["hdf5"].prefix.include)
- spack_env.set("HDF5_LIBDIR", spec["hdf5"].prefix.libs)
+ env.set("NF_CONFIG", nf_config)
+ env.set("NETCDF_INCDIR", netcdf_include)
+ env.set("HDF5_INCDIR", spec["hdf5"].prefix.include)
+ env.set("HDF5_LIBDIR", spec["hdf5"].prefix.libs)
def build(self, spec, prefix):
make(parallel=False)
diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py
index e6812b89341..4c04686c8d8 100644
--- a/var/spack/repos/builtin/packages/root/package.py
+++ b/var/spack/repos/builtin/packages/root/package.py
@@ -179,7 +179,7 @@ class Root(CMakePackage):
patch(
"https://github.com/root-project/root/pull/15925.diff?full_index=1",
sha256="1937290a4d54cd2e3e8a8d23d93b8dedaca9ed8dcfdcfa2f0d16629ff53fb3b7",
- when="@6.28: +python",
+ when="@6.28:6.32 +python",
)
# ###################### Variants ##########################
@@ -190,6 +190,9 @@ class Root(CMakePackage):
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")
+ variant(
+ "daos", default=False, description="Enable RNTuple support for DAOS storage", when="@6.26:"
+ )
variant("davix", default=True, description="Compile with external Davix")
variant("dcache", default=False, description="Enable support for dCache")
variant("emacs", default=False, description="Enable Emacs support")
@@ -389,6 +392,7 @@ class Root(CMakePackage):
depends_on("cuda", when="+cuda")
depends_on("cuda", when="+cudnn")
depends_on("cudnn", when="+cudnn")
+ depends_on("daos", when="+daos")
depends_on("davix @0.7.1:", when="+davix")
depends_on("dcap", when="+dcache")
depends_on("cfitsio", when="+fits")
@@ -501,6 +505,7 @@ class Root(CMakePackage):
# See https://github.com/root-project/root/issues/11135
conflicts("+ipo", msg="LTO is not a supported configuration for building ROOT")
+ @when("+root7 +geom +webgui")
def patch(self):
filter_file(
r"#include ",
@@ -560,6 +565,7 @@ def _add_variant(variants, features, featurename, variantname):
variants.append("~%s" % variantname[1:])
_add_variant(v, f, "cocoa", "+aqua")
+ _add_variant(v, f, "daos", "+daos")
_add_variant(v, f, "davix", "+davix")
_add_variant(v, f, "dcache", "+dcache")
_add_variant(v, f, "fftw3", "+fftw")
@@ -706,6 +712,7 @@ def cmake_args(self):
define_from_variant("cocoa", "aqua"),
define("dataframe", True),
define_from_variant("davix"),
+ define_from_variant("daos"),
define_from_variant("dcache"),
define_from_variant("fftw3", "fftw"),
define_from_variant("fitsio", "fits"),
@@ -822,7 +829,7 @@ def cmake_args(self):
return options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "lz4" in spec:
@@ -871,7 +878,7 @@ def root_library_path(self):
return "LD_LIBRARY_PATH"
return "ROOT_LIBRARY_PATH"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ROOTSYS", self.prefix)
env.set("ROOT_VERSION", "v{0}".format(self.version.up_to(1)))
env.prepend_path("PYTHONPATH", self.prefix.lib.root)
diff --git a/var/spack/repos/builtin/packages/rosco/package.py b/var/spack/repos/builtin/packages/rosco/package.py
index a119dd45cd7..627d6b8f135 100644
--- a/var/spack/repos/builtin/packages/rosco/package.py
+++ b/var/spack/repos/builtin/packages/rosco/package.py
@@ -54,7 +54,7 @@ def cmake_args(self):
return options
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ROSCO_DISCON", self.prefix.lib + "/libdiscon.so")
env.set("ROSCO_DISCON_DIR", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/rose/package.py b/var/spack/repos/builtin/packages/rose/package.py
index 9357a2cb5fa..ffcd9622cdc 100644
--- a/var/spack/repos/builtin/packages/rose/package.py
+++ b/var/spack/repos/builtin/packages/rose/package.py
@@ -69,6 +69,9 @@ class Rose(AutotoolsPackage):
# --------------------------------------------------------------------------
# Dependencies
# --------------------------------------------------------------------------
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("autoconf@2.69:", type="build")
depends_on("automake@1.14:", type="build")
depends_on("libtool@2.4:", type="build")
@@ -205,7 +208,7 @@ def configure_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+codethorn" in self.spec:
env.set("CXXFLAGS", "-std=c++11")
diff --git a/var/spack/repos/builtin/packages/rpp/package.py b/var/spack/repos/builtin/packages/rpp/package.py
index 8eaa7ae14d1..1913a1d2380 100644
--- a/var/spack/repos/builtin/packages/rpp/package.py
+++ b/var/spack/repos/builtin/packages/rpp/package.py
@@ -181,13 +181,13 @@ def patch(self):
with when("~hip"):
depends_on("rocm-opencl@5:")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+add_tests"):
env.set("TURBO_JPEG_PATH", self.spec["libjpeg-turbo"].prefix)
if self.spec.satisfies("@6.1:"):
env.prepend_path("LD_LIBRARY_PATH", self.spec["hsa-rocr-dev"].prefix.lib)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+asan"):
env.set("CC", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
env.set("CXX", f"{self.spec['llvm-amdgpu'].prefix}/bin/clang")
diff --git a/var/spack/repos/builtin/packages/rsem/package.py b/var/spack/repos/builtin/packages/rsem/package.py
index c8a615e0c94..cda8706c462 100644
--- a/var/spack/repos/builtin/packages/rsem/package.py
+++ b/var/spack/repos/builtin/packages/rsem/package.py
@@ -18,15 +18,17 @@ class Rsem(MakefilePackage):
version("1.3.1", sha256="93c749a03ac16e94b1aab94d032d4fd5687d3261316ce943ecb89d3ae3ec2e11")
version("1.3.0", sha256="ecfbb79c23973e1c4134f05201f4bd89b0caf0ce4ae1ffd7c4ddc329ed4e05d2")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
-
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
depends_on("r", type=("build", "run"))
depends_on("perl", type=("build", "run"))
depends_on("python", type=("build", "run"))
depends_on("bowtie")
depends_on("bowtie2")
depends_on("star")
+ # The bundled samtools-1.3/htslib-1.3 is not compatible with zlib-ng
+ # https://github.com/samtools/htslib/issues/1257
+ depends_on("zlib")
def install(self, spec, prefix):
make("install", "DESTDIR=%s" % prefix, "prefix=")
diff --git a/var/spack/repos/builtin/packages/rstudio/package.py b/var/spack/repos/builtin/packages/rstudio/package.py
index ecaf2c14bc1..bdfe5895a2e 100644
--- a/var/spack/repos/builtin/packages/rstudio/package.py
+++ b/var/spack/repos/builtin/packages/rstudio/package.py
@@ -72,7 +72,7 @@ def cmake_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("RSTUDIO_TOOLS_ROOT", self.prefix.tools)
def patch(self):
diff --git a/var/spack/repos/builtin/packages/rsyslog/package.py b/var/spack/repos/builtin/packages/rsyslog/package.py
index bbc2bd00571..d2e44e1146b 100644
--- a/var/spack/repos/builtin/packages/rsyslog/package.py
+++ b/var/spack/repos/builtin/packages/rsyslog/package.py
@@ -42,7 +42,7 @@ class Rsyslog(AutotoolsPackage):
depends_on("byacc", type="build")
depends_on("flex", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
def autoreconf(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py
index 0da239928b6..6eee25913fd 100644
--- a/var/spack/repos/builtin/packages/ruby/package.py
+++ b/var/spack/repos/builtin/packages/ruby/package.py
@@ -95,7 +95,9 @@ def url_for_version(self, version):
url = "https://cache.ruby-lang.org/pub/ruby/{0}/ruby-{1}.tar.gz"
return url.format(version.up_to(2), version)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if dependent_spec.package.extends(self.spec):
env.prepend_path("GEM_PATH", dependent_spec.prefix)
@@ -114,7 +116,9 @@ def setup_dependent_package(self, module, dependent_spec):
class SetupEnvironment:
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# TODO: do this only for actual extensions.
# Set GEM_PATH to include dependent gem directories
for d in dependent_spec.traverse(deptype=("build", "run", "test"), root=True):
diff --git a/var/spack/repos/builtin/packages/rust/detection_test.yaml b/var/spack/repos/builtin/packages/rust/detection_test.yaml
new file mode 100644
index 00000000000..e0729e89752
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rust/detection_test.yaml
@@ -0,0 +1,55 @@
+paths:
+- layout:
+ - executables:
+ - "bin/rustc"
+ script: |
+ echo "rustc 1.75.0 (82e1608df 2023-12-21) (built from a source tarball)"
+ - executables:
+ - "bin/cargo"
+ script: |
+ echo "cargo 1.75.0"
+ platforms: ["darwin", "linux"]
+ results:
+ - spec: 'rust@1.75.0'
+ extra_attributes:
+ compilers:
+ rust: ".*/bin/rustc"
+ cargo: ".*/bin/cargo"
+# If rustc is missing, then we don't detect specs
+- layout:
+ - executables:
+ - "bin/cargo"
+ script: |
+ echo "cargo 1.75.0"
+ platforms: ["darwin", "linux"]
+ results: []
+# Check we can detect 2 different versions in the same folder
+- layout:
+ - executables:
+ - "bin/rustc"
+ script: |
+ echo "rustc 1.75.0 (82e1608df 2023-12-21) (built from a source tarball)"
+ - executables:
+ - "bin/rustc-1.80"
+ script: |
+ echo "rustc 1.80.1 (3f5fd8dd4 2024-08-06) (built from a source tarball)"
+ - executables:
+ - "bin/cargo"
+ script: |
+ echo "cargo 1.75.0"
+ - executables:
+ - "bin/cargo-1.80"
+ script: |
+ echo "cargo 1.80.1 (376290515 2024-07-16)"
+ platforms: ["darwin", "linux"]
+ results:
+ - spec: 'rust@1.75.0'
+ extra_attributes:
+ compilers:
+ rust: ".*/bin/rustc"
+ cargo: ".*/bin/cargo"
+ - spec: 'rust@1.80.1'
+ extra_attributes:
+ compilers:
+ rust: ".*/bin/rustc-1.80"
+ cargo: ".*/bin/cargo-1.80"
diff --git a/var/spack/repos/builtin/packages/rust/package.py b/var/spack/repos/builtin/packages/rust/package.py
index 0710a3b929c..d25dafeccc3 100644
--- a/var/spack/repos/builtin/packages/rust/package.py
+++ b/var/spack/repos/builtin/packages/rust/package.py
@@ -102,27 +102,41 @@ class Rust(Package):
conflicts("%oneapi", msg="Rust not compatible with Intel oneAPI compilers")
extendable = True
- executables = ["^rustc$", "^cargo$"]
+ executables = [r"^rustc(-[\d.]*)?$", r"^cargo(-[\d.]*)?$"]
phases = ["configure", "build", "install"]
@classmethod
- def determine_spec_details(cls, prefix, exes_in_prefix):
- rustc_candidates = [x for x in exes_in_prefix if os.path.basename(x) == "rustc"]
- cargo_candidates = [x for x in exes_in_prefix if os.path.basename(x) == "cargo"]
- # Both rustc and cargo must be present
- if not (rustc_candidates and cargo_candidates):
- return
- output = Executable(rustc_candidates[0])("--version", output=str, error=str)
- match = re.match(r"rustc (\S+)", output)
- if match:
- version_str = match.group(1)
- return Spec.from_detection(f"rust@{version_str}", external_path=prefix)
+ def determine_version(csl, exe):
+ output = Executable(exe)("--version", output=str, error=str)
+ match = re.match(r"(rustc|cargo) (\S+)", output)
+ return match.group(2) if match else None
+
+ @classmethod
+ def determine_variants(cls, exes, version_str):
+ rustc_candidates = [x for x in exes if "rustc" in os.path.basename(x)]
+ cargo_candidates = [x for x in exes if "cargo" in os.path.basename(x)]
+ extra_attributes = {}
+ if rustc_candidates:
+ extra_attributes.setdefault("compilers", {})["rust"] = rustc_candidates[0]
+
+ if cargo_candidates:
+ extra_attributes["cargo"] = cargo_candidates[0]
+
+ return "", extra_attributes
+
+ @classmethod
+ def validate_detected_spec(cls, spec, extra_attributes):
+ if "cargo" not in extra_attributes:
+ raise RuntimeError(f"discarding {spec} since 'cargo' is missing")
+
+ if not extra_attributes.get("compilers", {}).get("rust"):
+ raise RuntimeError(f"discarding {spec} since 'rustc' is missing")
def setup_dependent_package(self, module, dependent_spec):
module.cargo = Executable(os.path.join(self.spec.prefix.bin, "cargo"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Manually instruct Cargo dependency libssh2-sys to build with
# the Spack installed libssh2 package. For more info see
# https://github.com/alexcrichton/ssh2-rs/issues/173
diff --git a/var/spack/repos/builtin/packages/saga-gis/package.py b/var/spack/repos/builtin/packages/saga-gis/package.py
index e387db4572e..3ac72670cc3 100644
--- a/var/spack/repos/builtin/packages/saga-gis/package.py
+++ b/var/spack/repos/builtin/packages/saga-gis/package.py
@@ -120,7 +120,7 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Point saga to its tool set, will be loaded during runtime
env.set("SAGA_MLB", self.prefix.lib.saga)
env.set("SAGA_TLB", self.prefix.lib.saga)
diff --git a/var/spack/repos/builtin/packages/salome-configuration/package.py b/var/spack/repos/builtin/packages/salome-configuration/package.py
index 7d6a66cbb8e..f80b63bc9c6 100644
--- a/var/spack/repos/builtin/packages/salome-configuration/package.py
+++ b/var/spack/repos/builtin/packages/salome-configuration/package.py
@@ -32,7 +32,9 @@ class SalomeConfiguration(Package):
patch("SalomeMacros.patch", working_dir="./cmake")
patch("FindSalomeHDF5.patch", working_dir="./cmake", when="@:9.7.0")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("CONFIGURATION_ROOT_DIR", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/salome-med/package.py b/var/spack/repos/builtin/packages/salome-med/package.py
index 55249ad89ea..9fda7020e5d 100644
--- a/var/spack/repos/builtin/packages/salome-med/package.py
+++ b/var/spack/repos/builtin/packages/salome-med/package.py
@@ -62,7 +62,9 @@ def patch(self):
string=True,
)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("HDF5_ROOT_DIR", self.spec["hdf5"].prefix)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/salome-medcoupling/package.py b/var/spack/repos/builtin/packages/salome-medcoupling/package.py
index b2058d249ca..d5633e3f1ba 100644
--- a/var/spack/repos/builtin/packages/salome-medcoupling/package.py
+++ b/var/spack/repos/builtin/packages/salome-medcoupling/package.py
@@ -77,14 +77,14 @@ class SalomeMedcoupling(CMakePackage):
def check(self):
pass
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+metis" in self.spec:
env.set("METIS_ROOT_DIR", self.spec["metis"].prefix)
if "+scotch" in self.spec:
env.set("SCOTCH_ROOT_DIR", self.spec["scotch"].prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
python_ver = self.spec["python"].version.up_to(2)
env.prepend_path(
"PYTHONPATH", join_path(self.prefix.lib, f"python{python_ver}", "site-packages")
diff --git a/var/spack/repos/builtin/packages/samrai/package.py b/var/spack/repos/builtin/packages/samrai/package.py
index 60986d5fb44..179ea1aca30 100644
--- a/var/spack/repos/builtin/packages/samrai/package.py
+++ b/var/spack/repos/builtin/packages/samrai/package.py
@@ -122,6 +122,8 @@ def configure_args(self):
return options
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.satisfies("@3.12:"):
env.append_flags("CXXFLAGS", self.compiler.cxx11_flag)
diff --git a/var/spack/repos/builtin/packages/samurai/package.py b/var/spack/repos/builtin/packages/samurai/package.py
index 21683c85e7d..e3073838f83 100644
--- a/var/spack/repos/builtin/packages/samurai/package.py
+++ b/var/spack/repos/builtin/packages/samurai/package.py
@@ -46,11 +46,13 @@ class Samurai(CMakePackage):
depends_on("petsc+mpi", when="+mpi")
depends_on("boost+serialization+mpi", when="+mpi")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
include_path = self.spec.prefix.include
env.append_path("CXXFLAGS", f"-I{include_path}")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec.prefix.include)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/scale/package.py b/var/spack/repos/builtin/packages/scale/package.py
index 6c860bf1888..db5bc2da43c 100644
--- a/var/spack/repos/builtin/packages/scale/package.py
+++ b/var/spack/repos/builtin/packages/scale/package.py
@@ -41,8 +41,8 @@ class Scale(MakefilePackage):
parallel = False
- def setup_build_environment(self, build_env):
- build_env.set("PREFIX", self.prefix)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("PREFIX", self.prefix)
def build(self, spec, prefix):
scale_sys_str = ""
diff --git a/var/spack/repos/builtin/packages/scitokens-cpp/package.py b/var/spack/repos/builtin/packages/scitokens-cpp/package.py
index 32b37c04d82..f53a29fba9d 100644
--- a/var/spack/repos/builtin/packages/scitokens-cpp/package.py
+++ b/var/spack/repos/builtin/packages/scitokens-cpp/package.py
@@ -16,6 +16,7 @@ class ScitokensCpp(CMakePackage):
license("Apache-2.0")
+ version("1.1.3", sha256="eeaeb06da74cae92bd03d6be4c407e4855db023f409c59540b3143069407be1f")
version("1.1.2", sha256="07d33cb51a3ccd8460f2acebb15b35393aeccfc70e3554a73c9e5cffed6edb39")
version("1.1.1", sha256="a9091b888fc778282caf2a6808c86f685d2411557673152d58fe53932a6c7212")
version("1.1.0", sha256="9c4afd6638e94855ede52ecfc3d4f05082f2bdf151a9ab8dafcc2bb7cd4d9039")
@@ -64,5 +65,5 @@ def cmake_args(self):
]
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("JWC_CPP_DIR", self.spec["jwt-cpp"].prefix)
diff --git a/var/spack/repos/builtin/packages/scons/package.py b/var/spack/repos/builtin/packages/scons/package.py
index 9333bfcb46e..8ba363def5b 100644
--- a/var/spack/repos/builtin/packages/scons/package.py
+++ b/var/spack/repos/builtin/packages/scons/package.py
@@ -10,12 +10,16 @@ class Scons(PythonPackage):
"""SCons is a software construction tool"""
homepage = "https://scons.org"
- pypi = "SCons/SCons-4.5.1.tar.gz"
+ pypi = "scons/scons-4.9.1.tar.gz"
tags = ["build-tools", "windows"]
license("MIT")
+ version("4.9.1", sha256="bacac880ba2e86d6a156c116e2f8f2bfa82b257046f3ac2666c85c53c615c338")
+ version("4.9.0", sha256="f1a5e161bf3d1411d780d65d7919654b9405555994621d3d68e42d62114b592a")
+ version("4.8.1", sha256="5b641357904d2f56f7bfdbb37e165ab996b6143c948b9df0efc7305f54949daa")
+ version("4.8.0", sha256="2c7377ff6a22ca136c795ae3dc3d0824696e5478d1e4940f2af75659b0d45454")
version("4.7.0", sha256="d8b617f6610a73e46509de70dcf82f76861b79762ff602d546f4e80918ec81f3")
version("4.5.2", sha256="813360b2bce476bc9cc12a0f3a22d46ce520796b352557202cb07d3e402f5458")
version("4.5.1", sha256="9daeabe4d87ba2bd4ea15410765fc1ed2d931b723e4dc730a487a3911b9a1738")
@@ -26,7 +30,11 @@ class Scons(PythonPackage):
"4.1.0.post1", sha256="ecb062482b9d80319b56758c0341eb717735437f86a575bac3552804428bd73e"
)
version("4.0.1", sha256="722ed104b5c624ecdc89bd4e02b094d2b14d99d47b5d0501961e47f579a2007c")
- version("4.0.0", sha256="de8599189ee87bb84234e3d6e30bef0298d6364713979856927576b252c411f3")
+ version(
+ "4.0.0",
+ sha256="de8599189ee87bb84234e3d6e30bef0298d6364713979856927576b252c411f3",
+ url="https://files.pythonhosted.org/packages/source/S/SCons/SCons-4.0.0.tar.gz",
+ )
version("3.1.2", sha256="8aaa483c303efeb678e6f7c776c8444a482f8ddc3ad891f8b6cdd35264da9a1f")
version("3.1.1", sha256="fd44f8f2a4562e7e5bc8c63c82b01e469e8115805a3e9c2923ee54cdcd6678b3")
version("3.1.0", sha256="94e0d0684772d3e6d9368785296716e0ed6ce757270b3ed814e5aa72d3163890")
@@ -47,13 +55,17 @@ def url_for_version(self, version):
name = "scons"
return url.format(name[0], name, version)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib.scons)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib.scons)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib.scons)
def setup_dependent_package(self, module, dspec):
diff --git a/var/spack/repos/builtin/packages/scorec-core/package.py b/var/spack/repos/builtin/packages/scorec-core/package.py
index 07cdda03b74..70e616718cb 100644
--- a/var/spack/repos/builtin/packages/scorec-core/package.py
+++ b/var/spack/repos/builtin/packages/scorec-core/package.py
@@ -13,6 +13,8 @@ class ScorecCore(CMakePackage):
homepage = "https://www.scorec.rpi.edu/"
git = "https://github.com/SCOREC/core.git"
+ tags = ["e4s"]
+
license("BSD-3-Clause")
version("develop")
diff --git a/var/spack/repos/builtin/packages/scotch/package.py b/var/spack/repos/builtin/packages/scotch/package.py
index 6bb6d0c3896..7015bab41d0 100644
--- a/var/spack/repos/builtin/packages/scotch/package.py
+++ b/var/spack/repos/builtin/packages/scotch/package.py
@@ -140,11 +140,19 @@ def cmake_args(self):
if "+int64" in self.spec:
args.append("-DINTSIZE=64")
+ elif self.is_64bit():
+ c_flags = []
+ c_flags.append("-DIDXSIZE64")
+ c_flags.append("-DINTSIZE32")
+ args.append(self.define("CMAKE_C_FLAGS", " ".join(c_flags)))
return args
+ def is_64bit(self):
+ return "64" in str(self.pkg.spec.target.family)
+
@when("+noarch")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("SPACK_TARGET_ARGS")
@@ -155,13 +163,17 @@ def edit(self, pkg, spec, prefix):
makefile_inc = []
cflags = ["-O3", "-DCOMMON_RANDOM_FIXED_SEED", "-DSCOTCH_DETERMINISTIC", "-DSCOTCH_RENAME"]
+ # SCOTCH_Num typedef: size of integers in arguments
+ # SCOTCH_Idx typedef: indices for addressing
if "+int64" in self.spec:
- # SCOTCH_Num typedef: size of integers in arguments
cflags.append("-DINTSIZE64")
- cflags.append("-DIDXSIZE64") # SCOTCH_Idx typedef: indices for addressing
+ cflags.append("-DIDXSIZE64")
+ elif self.is_64bit():
+ cflags.append("-DINTSIZE32")
+ cflags.append("-DIDXSIZE64")
else:
cflags.append("-DINTSIZE32")
- cflags.append("-DIDXSIZE64") # SCOTCH_Idx typedef: indices for addressing
+ cflags.append("-DIDXSIZE32")
if self.spec.satisfies("platform=darwin"):
cflags.extend(["-Drestrict=__restrict"])
@@ -283,6 +295,9 @@ def edit(self, pkg, spec, prefix):
with open("Makefile.inc", "w") as fh:
fh.write("\n".join(makefile_inc))
+ def is_64bit(self):
+ return "64" in str(self.pkg.spec.target.family)
+
@property
def build_targets(self):
targets = ["scotch"]
diff --git a/var/spack/repos/builtin/packages/seacas/package.py b/var/spack/repos/builtin/packages/seacas/package.py
index ac2059ea29c..8cb6287724d 100644
--- a/var/spack/repos/builtin/packages/seacas/package.py
+++ b/var/spack/repos/builtin/packages/seacas/package.py
@@ -34,6 +34,12 @@ class Seacas(CMakePackage):
# ###################### Versions ##########################
version("master", branch="master")
+ version(
+ "2025-04-29", sha256="2a3a1533a1fbff8e8b78814a3a45f6fadfb3f05b5d9d10a4f0452c7bb4d1aa2f"
+ )
+ version(
+ "2025-04-14", sha256="7704fc27e4f0d283fd9272ea769dbeffd971315a982e265c0d7c99fc77186476"
+ )
version(
"2025-03-13", sha256="406aff5b8908d6a3bf6687d825905990101caa9cf8c1213a508938eed2134d6d"
)
@@ -315,7 +321,7 @@ class Seacas(CMakePackage):
# Based on install-tpl.sh script, cereal seems to only be used when faodel enabled
depends_on("cereal", when="@2021-04-02: +faodel")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/seissol/package.py b/var/spack/repos/builtin/packages/seissol/package.py
index f900ddffa2b..700cca006e0 100644
--- a/var/spack/repos/builtin/packages/seissol/package.py
+++ b/var/spack/repos/builtin/packages/seissol/package.py
@@ -13,8 +13,12 @@ class Seissol(CMakePackage, CudaPackage, ROCmPackage):
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.1", tag="v1.3.1", commit="9d35b989749d031132c8820b45b003ecc00e985a", submodules=True
+ )
version(
"1.3.0", tag="v1.3.0", commit="91377508af4412914d707b04481f8b678b1c4044", submodules=True
)
@@ -153,8 +157,11 @@ class Seissol(CMakePackage, CudaPackage, ROCmPackage):
conflicts(
"%intel",
- when="@1.3:",
- msg="The Intel compiler is unsupported from v1.3 onward. Please use e.g.gcc or oneapi",
+ when="@1.3.0",
+ msg=(
+ "The Intel compiler is not supported in v1.3.0. "
+ "Please use e.g. gcc, oneapi, or a newer SeisSol."
+ ),
)
variant(
@@ -195,7 +202,7 @@ class Seissol(CMakePackage, CudaPackage, ROCmPackage):
depends_on("hdf5 +shared +threadsafe +hl +mpi")
- depends_on("netcdf-c@4.6: +shared +mpi", when="+netcdf")
+ depends_on("netcdf-c@4.6:4.8.1 +shared +mpi", when="+netcdf")
depends_on("asagi +mpi +mpi3", when="+asagi")
@@ -358,6 +365,6 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# for seissol-launch
env.prepend_path("PATH", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/selalib/package.py b/var/spack/repos/builtin/packages/selalib/package.py
index 7443ccf1ed0..c663149fef7 100644
--- a/var/spack/repos/builtin/packages/selalib/package.py
+++ b/var/spack/repos/builtin/packages/selalib/package.py
@@ -61,7 +61,7 @@ def cmake_args(self):
]
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("FFTW_INCLUDE", self.spec["fftw"].prefix.include)
env.set("FFTW_ROOT", self.spec["fftw"].prefix)
diff --git a/var/spack/repos/builtin/packages/sentieon-genomics/package.py b/var/spack/repos/builtin/packages/sentieon-genomics/package.py
index d11d87d9aca..1ac6bb12897 100644
--- a/var/spack/repos/builtin/packages/sentieon-genomics/package.py
+++ b/var/spack/repos/builtin/packages/sentieon-genomics/package.py
@@ -25,6 +25,7 @@ class SentieonGenomics(Package):
url = "https://s3.amazonaws.com/sentieon-release/software/sentieon-genomics-201808.01.tar.gz"
maintainers("snehring")
+ version("202503", sha256="da8fd40e8fe86e0d52ac7023b2ee561d5eb4a89f15afe79ef2ff1d3a13cea73d")
version("202308.02", sha256="adb553c72d5180f551aea77fb6626dea36f33f1968f3d0ab0bb00dc7af4f5b55")
version("202308", sha256="13dc8d50577fe4767142c50f1a95772db95cd4b173c2b281cdcdd68a5af47cb0")
version("202112.07", sha256="ea770483d3e70e9d157fe938096d5ea06e47166d57e0037cf66b6449c7fce2ab")
@@ -42,7 +43,8 @@ class SentieonGenomics(Package):
def install(self, spec, prefix):
install_tree("bin", prefix.bin)
install_tree("doc", prefix.doc)
- install_tree("etc", prefix.etc)
+ if spec.satisfies("@:202308.02"):
+ install_tree("etc", prefix.etc)
install_tree("lib", prefix.lib)
install_tree("libexec", prefix.libexec)
install_tree("share", prefix.share)
diff --git a/var/spack/repos/builtin/packages/seqfu/package.py b/var/spack/repos/builtin/packages/seqfu/package.py
index 07e40135643..848c914c832 100644
--- a/var/spack/repos/builtin/packages/seqfu/package.py
+++ b/var/spack/repos/builtin/packages/seqfu/package.py
@@ -26,7 +26,7 @@ class Seqfu(Package):
patch("wno_incompatible_pointer_types.patch", when="@:1.21%gcc@14:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("NIMBLE_DIR", ".nimble")
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/serenity/package.py b/var/spack/repos/builtin/packages/serenity/package.py
index b3dbdaaae4c..77c15bdf02f 100644
--- a/var/spack/repos/builtin/packages/serenity/package.py
+++ b/var/spack/repos/builtin/packages/serenity/package.py
@@ -175,7 +175,7 @@ def cmake_args(self):
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# set up environment like if we sourced dev/templates/serenity.sh
env.set("SERENITY_HOME", self.prefix)
env.set("SERENITY_BIN", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/serialbox/package.py b/var/spack/repos/builtin/packages/serialbox/package.py
index 84ae8fa085a..9c463624b1b 100644
--- a/var/spack/repos/builtin/packages/serialbox/package.py
+++ b/var/spack/repos/builtin/packages/serialbox/package.py
@@ -149,7 +149,7 @@ def flag_handler(self, name, flags):
return flags, None, (cmake_flags or None)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Allow for running the preprocessor directly:
env.prepend_path("PATH", self.prefix.python.pp_ser)
# Allow for running the preprocessor as a Python module, as well as
diff --git a/var/spack/repos/builtin/packages/sfcio/package.py b/var/spack/repos/builtin/packages/sfcio/package.py
index 78b4c998e5f..5cd688a0d2a 100644
--- a/var/spack/repos/builtin/packages/sfcio/package.py
+++ b/var/spack/repos/builtin/packages/sfcio/package.py
@@ -31,7 +31,7 @@ def cmake_args(self):
args = [self.define("ENABLE_TESTS", self.run_tests)]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
lib = find_libraries("libsfcio", root=self.prefix, shared=False, recursive=True)
# Only one library version, but still need to set _4 to make NCO happy
for suffix in ("4", ""):
diff --git a/var/spack/repos/builtin/packages/sgpp/package.py b/var/spack/repos/builtin/packages/sgpp/package.py
index 5d9fc6f941a..d829f49153e 100644
--- a/var/spack/repos/builtin/packages/sgpp/package.py
+++ b/var/spack/repos/builtin/packages/sgpp/package.py
@@ -2,6 +2,8 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import sys
+
from spack.build_systems.python import PythonPipBuilder
from spack.package import *
from spack.pkg.builtin.boost import Boost
@@ -51,10 +53,22 @@ class Sgpp(SConsPackage):
# to complain about missing headers (due to a path check not working anymore)
# See issue https://github.com/SGpp/SGpp/issues/263 and https://github.com/SGpp/SGpp/pull/266
patch("disable_disutils_deprecation_warning.patch", when="@:3.4.0 ^python@3.10:3.11")
- # SGpp does not contain aarch64 support as of yet. To make it work still, this patch adds
+ # SGpp does not contain aarch64 support as of 3.4.0. To make it work still, this patch adds
# simple build system support for it.
- patch("for_aarch64.patch", when="target=aarch64:")
+ patch("for_aarch64.patch", when="@:3.4.0 target=aarch64:")
+ # SGpp will default to the system paths when linking boost without the patch
+ # This may work (depending on the boost versions in question) but we should use the boost
+ # from spack. This patch allows to correctly pass the spack's boost path to SGpp
+ # Fixed in SGpp PR https://github.com/SGpp/SGpp/pull/273
+ patch("set_boost_lib_path_internally.patch", when="@3.3.0:3.4.0")
+ variant("debug", default=False, description="Build debug version instead of release version")
+ variant(
+ "doc",
+ default=False,
+ description="Build sgpp documentation (doxygen / pydoc)",
+ when="@3.4.0:",
+ )
variant("python", default=True, description="Provide Python bindings for SGpp")
variant("optimization", default=True, description="Builds the optimization module of SGpp")
variant("pde", default=True, description="Builds the datadriven module of SGpp")
@@ -67,24 +81,37 @@ class Sgpp(SConsPackage):
"opencl", default=False, description="Enables support for OpenCL accelerated operations"
)
variant("mpi", default=False, description="Enables support for MPI-distributed operations")
+ variant(
+ "eigen", default=False, description="Enables Eigen support", when="@3.4.0: +optimization"
+ )
+ variant(
+ "dakota", default=False, description="Enables Dakota support", when="@3.4.0: +combigrid"
+ )
+ variant(
+ "visualization",
+ default=False,
+ description="Build with visualization support",
+ when="+python",
+ )
# Mandatory dependencies
depends_on("cxx", type="build") # generated
depends_on("scons@3:", type="build")
depends_on("zlib-api", type="link")
+ depends_on("doxygen+graphviz", when="+doc", type="build")
+ depends_on("eigen", when="+eigen", type=("build", "run"))
+ depends_on("dakota", when="+dakota", type=("build", "run"))
# Python dependencies
extends("python", when="+python")
depends_on("py-pip", when="+python", type="build")
depends_on("py-wheel", when="+python", type="build")
depends_on("py-setuptools", type="build")
- # Older SGpp releases (:3.4.0) do not support python 3.12 due to them using distutils
- depends_on("python@3.7:3.11", type=("build", "run"), when="@:3.4.0")
- # SGpp@master works with newer python versions (3.12:) as well
depends_on("python@3.7:", type=("build", "run"))
- # Newest swig version 4.1 seems to cause problem -> limit to 3:4.0 for now
- depends_on("swig@3:4.0", when="+python", type="build")
+ depends_on("swig@3:", when="+python", type="build")
depends_on("py-numpy@1.17:", when="+python", type=("build", "run"))
- depends_on("py-scipy@1.3:", when="+python", type=("build", "run"))
+ depends_on("py-pandas@1.1:", when="+python+visualization", type=("build", "run"))
+ depends_on("py-matplotlib@3:", when="+python+visualization", type=("build", "run"))
+ depends_on("py-scipy@1.5:", when="+python", type=("build", "run"))
# OpenCL dependency
depends_on("opencl@1.1:", when="+opencl", type=("build", "run"))
# MPI dependency
@@ -93,7 +120,7 @@ class Sgpp(SConsPackage):
# 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, type="test")
+ depends_on(Boost.with_default_variants, type=("build", "run", "test"))
# Compiler with C++11 support is required
conflicts("%gcc@:4.8.4", msg="Compiler with c++11 support is required!")
@@ -119,24 +146,50 @@ class Sgpp(SConsPackage):
conflicts("+combigrid", when="@1.0.0:3.2.0~pde")
conflicts("+combigrid", when="@1.0.0:3.2.0~solver")
conflicts("+combigrid", when="@1.0.0:3.2.0~quadrature")
+ # Conflicts due the changes in the respective frameworks
+ # Fixed in newer SGpp versions, but 3.4.0 or older versions do not work
+ conflicts("^python@3.12:", when="@:3.4.0+python")
+ conflicts("^py-numpy@2:", when="@:3.4.0+python")
+ conflicts("^py-pandas@1.4:", when="@:3.4.0+python")
+ conflicts("^py-matplotlib@3.6:", when="@:3.4.0+python")
+ conflicts("^swig@4.1:", when="@:3.4.0+python")
def build_args(self, spec, prefix):
# Testing parameters
if self.run_tests:
- self.args = ["COMPILE_BOOST_TESTS=1", "RUN_BOOST_TESTS=1"]
+ self.args = [
+ "COMPILE_BOOST_TESTS=1",
+ "RUN_BOOST_TESTS=1",
+ "COMPILE_BOOST_PERFORMANCE_TESTS=1",
+ "RUN_BOOST_PERFORMANCE_TESTS=1",
+ ]
if "+python" in spec:
self.args.append("RUN_PYTHON_TESTS=1")
- if spec.satisfies("@1.0.0:3.2.0"):
+ if spec.satisfies("@3.3.0:"):
+ self.args.append("RUN_PYTHON_EXAMPLES=1")
+ if spec.satisfies("@1.0.0:3.2.0"): # argument was renamed after 3.2.0
self.args.append("RUN_CPPLINT=1")
- else: # argument was renamed after 3.2.0
+ else:
+ self.args.append("RUN_CPP_EXAMPLES=1")
self.args.append("CHECK_STYLE=1")
else:
- self.args = ["COMPILE_BOOST_TESTS=0", "RUN_BOOST_TESTS=0", "RUN_PYTHON_TESTS=0"]
- if spec.satisfies("@1.0.0:3.2.0"):
+ self.args = [
+ "COMPILE_BOOST_TESTS=0",
+ "RUN_BOOST_TESTS=0",
+ "COMPILE_BOOST_PERFORMANCE_TESTS=0",
+ "RUN_BOOST_PERFORMANCE_TESTS=0",
+ "RUN_PYTHON_TESTS=0",
+ ]
+ if spec.satisfies("@1.0.0:3.2.0"): # argument was renamed after 3.2.0
self.args.append("RUN_CPPLINT=0")
- else: # argument was renamed after 3.2.0
+ else:
+ self.args.append("RUN_PYTHON_EXAMPLES=0")
+ self.args.append("RUN_CPP_EXAMPLES=0")
self.args.append("CHECK_STYLE=0")
+ # Debug build or not
+ self.args.append("OPT={0}".format("0" if "+debug" in spec else "1"))
+
# Install direction
self.args.append("PREFIX={0}".format(prefix))
@@ -168,6 +221,8 @@ def build_args(self, spec, prefix):
self.args.append("ARCH=sse42")
elif "sse3" in self.spec.target:
self.args.append("ARCH=sse3")
+ elif "target=aarch64:" in spec:
+ self.args.append("ARCH=aarch64")
# OpenCL Flags
self.args.append("USE_OCL={0}".format("1" if "+opencl" in spec else "0"))
@@ -179,10 +234,54 @@ def build_args(self, spec, prefix):
else:
self.args.append("CXX={0}".format(self.compiler.cxx))
+ # Include PYDOC when building the documentation
+ self.args.append("PYDOC={0}".format("1" if "+doc +python" in spec else "0"))
+
+ # For some libraries, SGpp expects the path to be explicitly passed to scons (either using
+ # CPPPATH and LIBPATH or using depency-specific variables (BOOST_LIBRARY_PATH).
+ # Here, we set those paths and associated flags the dependencies where SGpp expects them
+ # to be passed manually via CPPPATH/LIBPATH (Eigen, Dakota, ...):
+ custom_cpppath = ""
+ custom_libpath = ""
+ path_separator = ";" if sys.platform == "win32" else ":"
+ if "+eigen" in spec:
+ self.args.append("USE_EIGEN=1")
+ custom_cpppath += "{0}{1}".format(self.spec["eigen"].prefix.include, path_separator)
+ if "+dakota" in spec:
+ self.args.append("USE_DAKOTA=1")
+ custom_cpppath += "{0}{1}".format(self.spec["dakota"].prefix.include, path_separator)
+ # Simply using spec["dakota"].libs.directories[0] does not work because spack will look
+ # for a libdakota library file which does not exist. However, we can use find_libraries
+ # and manually specify an existing library
+ # name within dakota to find the correct lib directory:
+ custom_libpath += "{0}{1}".format(
+ find_libraries(
+ "libdakota_src", root=self.spec["dakota"].prefix, shared=True, recursive=True
+ ).directories[0],
+ path_separator,
+ )
+ # Add combined paths to CPPPATH/LIBPATH
+ if custom_cpppath:
+ self.args.append("CPPPATH={0}".format(custom_cpppath))
+ if custom_libpath:
+ self.args.append("LIBPATH={0}".format(custom_libpath))
+ # Manually set Boost location to the spack one (otherwise SGpp will try to look for
+ # Boost within the System install directory first)
+ self.args.append("BOOST_INCLUDE_PATH={0}".format(self.spec["boost"].prefix.include))
+ self.args.append("BOOST_LIBRARY_PATH={0}".format(self.spec["boost"].libs.directories[0]))
+
# Parallel builds do not seem to work without this:
self.args.append("-j{0}".format(make_jobs))
+
return self.args
+ @run_after("build")
+ def build_docs(self):
+ # Run Doxygen Step after build but before install
+ if "+doc" in self.spec:
+ args = self.args
+ scons("doxygen", *args)
+
def install_args(self, spec, prefix):
# SGpp expects the same args for the install and build commands
return self.args
@@ -191,3 +290,6 @@ def install_args(self, spec, prefix):
def python_install(self):
if "+python" in self.spec:
pip(*PythonPipBuilder.std_args(self), f"--prefix={self.prefix}", ".")
+ # Install docs
+ if "+doc" in self.spec:
+ install_tree("doc", self.prefix.doc)
diff --git a/var/spack/repos/builtin/packages/sgpp/set_boost_lib_path_internally.patch b/var/spack/repos/builtin/packages/sgpp/set_boost_lib_path_internally.patch
new file mode 100644
index 00000000000..9b871fc7740
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sgpp/set_boost_lib_path_internally.patch
@@ -0,0 +1,33 @@
+diff --git a/SConstruct b/SConstruct
+index d7c85bd72..9d9fd494d 100644
+--- a/SConstruct
++++ b/SConstruct
+@@ -443,6 +443,10 @@ if env["RUN_PYTHON_TESTS"]:
+ Helper.printWarning("Python tests disabled because SG_PYTHON is disabled.")
+
+ if env["COMPILE_BOOST_TESTS"]:
++ # also add the Boost library path to the PATH
++ # so that the Boost test lib can be found when running the tests
++ env["ENV"]["LD_LIBRARY_PATH"] = os.pathsep.join([env["BOOST_LIBRARY_PATH"],
++ env["ENV"].get("LD_LIBRARY_PATH", "")])
+ builder = Builder(action="./$SOURCE --log_level=test_suite")
+ env.Append(BUILDERS={"BoostTest" : builder})
+
+diff --git a/datadriven/SConscript b/datadriven/SConscript
+index 031f641cd..6380cd43f 100755
+--- a/datadriven/SConscript
++++ b/datadriven/SConscript
+@@ -83,7 +83,11 @@ if env["USE_HPX"]:
+ module.runPythonTests()
+ module.buildBoostTests()
+ module.runBoostTests()
++# Build performance tests...
+ module.buildBoostTests("performanceTests", compileFlag=performanceTestFlag)
+-module.runBoostTests("performanceTests", compileFlag=performanceTestFlag,
+- runFlag=performanceTestRunFlag)
++# ... however, without OCL they are empty (via ifdefs) and boost would does
++# throw an error. Only run them when OCL is used
++if env["USE_OCL"]:
++ module.runBoostTests("performanceTests", compileFlag=performanceTestFlag,
++ runFlag=performanceTestRunFlag)
+ module.checkStyle()
diff --git a/var/spack/repos/builtin/packages/shapemapper/package.py b/var/spack/repos/builtin/packages/shapemapper/package.py
index 17613117fe0..220834923d1 100644
--- a/var/spack/repos/builtin/packages/shapemapper/package.py
+++ b/var/spack/repos/builtin/packages/shapemapper/package.py
@@ -61,5 +61,5 @@ def install(self, spec, prefix):
for f in ["shapemapper", "README.md"]:
install(f, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/shared-mime-info/package.py b/var/spack/repos/builtin/packages/shared-mime-info/package.py
index 8ac491b8180..bbf6dc0d175 100644
--- a/var/spack/repos/builtin/packages/shared-mime-info/package.py
+++ b/var/spack/repos/builtin/packages/shared-mime-info/package.py
@@ -27,8 +27,12 @@ class SharedMimeInfo(AutotoolsPackage):
depends_on("gettext", type="build")
depends_on("pkgconfig", type="build")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/sherpa/package.py b/var/spack/repos/builtin/packages/sherpa/package.py
index a9b536ee87d..4ee3155f4a9 100644
--- a/var/spack/repos/builtin/packages/sherpa/package.py
+++ b/var/spack/repos/builtin/packages/sherpa/package.py
@@ -55,6 +55,7 @@ class Sherpa(CMakePackage, AutotoolsPackage):
description="Enable HepMC (version 3.1+) ROOT support",
when="+root",
)
+ variant("internal_pdfs", default=True, description="Enables internal PDFs", when="@3:")
variant("rivet", default=False, description="Enable Rivet support")
variant("fastjet", default=True, when="@:2", description="Enable FASTJET")
variant("openloops", default=False, description="Enable OpenLoops")
@@ -81,9 +82,10 @@ class Sherpa(CMakePackage, AutotoolsPackage):
# Note that the delphes integration seems utterly broken: https://sherpa.hepforge.org/trac/ticket/305
- 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="@:2")
+ depends_on("fortran", type="build", when="@3: +internal_pdfs")
# autotools dependencies are needed at runtime to compile processes
depends_on("autoconf", when="@:2")
@@ -158,6 +160,7 @@ def cmake_args(self):
self.define_from_variant("SHERPA_ENABLE_GZIP", "gzip"),
self.define_from_variant("SHERPA_ENABLE_HEPMC3", "hepmc3"),
self.define_from_variant("SHERPA_ENABLE_HEPMC3_ROOT", "hepmc3root"),
+ self.define_from_variant("SHERPA_ENABLE_INTERNAL_PDFS", "internal_pdfs"),
self.define_from_variant("SHERPA_ENABLE_LHAPDF", "lhapdf"),
self.define_from_variant("SHERPA_ENABLE_LHOLE", "lhole"),
self.define_from_variant("SHERPA_ENABLE_MPI", "mpi"),
diff --git a/var/spack/repos/builtin/packages/shortbred/package.py b/var/spack/repos/builtin/packages/shortbred/package.py
index 0c816cf4f34..c0d4402ca01 100644
--- a/var/spack/repos/builtin/packages/shortbred/package.py
+++ b/var/spack/repos/builtin/packages/shortbred/package.py
@@ -31,5 +31,5 @@ def install(self, spec, prefix):
install("shortbred_quantify.py", prefix.bin)
install_tree("src", prefix.src)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/sicm/package.py b/var/spack/repos/builtin/packages/sicm/package.py
index b77c1217ada..e1aa971605f 100644
--- a/var/spack/repos/builtin/packages/sicm/package.py
+++ b/var/spack/repos/builtin/packages/sicm/package.py
@@ -11,6 +11,8 @@ class Sicm(CMakePackage):
homepage = "https://github.com/lanl/SICM/"
git = "https://github.com/lanl/SICM.git"
+ tags = ["e4s"]
+
license("BSD-2-Clause")
version("master")
diff --git a/var/spack/repos/builtin/packages/sigio/package.py b/var/spack/repos/builtin/packages/sigio/package.py
index d84e753d53d..4aebf9813c1 100644
--- a/var/spack/repos/builtin/packages/sigio/package.py
+++ b/var/spack/repos/builtin/packages/sigio/package.py
@@ -29,7 +29,7 @@ def cmake_args(self):
args = [self.define("ENABLE_TESTS", self.run_tests)]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
lib = find_libraries("libsigio", root=self.prefix, shared=False, recursive=True)
# Only one library version, but still need to set _4 to make NCO happy
for suffix in ("4", ""):
diff --git a/var/spack/repos/builtin/packages/signalp/package.py b/var/spack/repos/builtin/packages/signalp/package.py
index 670c5ca114b..7acf6e70a57 100644
--- a/var/spack/repos/builtin/packages/signalp/package.py
+++ b/var/spack/repos/builtin/packages/signalp/package.py
@@ -38,5 +38,5 @@ def install(self, spec, prefix):
install_tree("lib", prefix.lib)
install_tree("syn", prefix.syn)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/signify/package.py b/var/spack/repos/builtin/packages/signify/package.py
index 760dbed38da..31b9e98d76a 100644
--- a/var/spack/repos/builtin/packages/signify/package.py
+++ b/var/spack/repos/builtin/packages/signify/package.py
@@ -21,5 +21,5 @@ class Signify(MakefilePackage):
depends_on("libbsd@0.8:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
diff --git a/var/spack/repos/builtin/packages/simdjson/package.py b/var/spack/repos/builtin/packages/simdjson/package.py
new file mode 100644
index 00000000000..31ad9f5695a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/simdjson/package.py
@@ -0,0 +1,84 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class Simdjson(CMakePackage):
+ """simdjson is a SIMD-accelerated JSON parsing library for C++ that can parse gigabytes of JSON
+ text per second."""
+
+ homepage = "https://simdjson.org"
+ url = "https://github.com/simdjson/simdjson/archive/v3.12.2.tar.gz"
+
+ maintainers("ta7mid")
+
+ license("Apache-2.0 OR MIT")
+
+ version("3.12.2", sha256="8ac7c97073d5079f54ad66d04381ec75e1169c2e20bfe9b6500bc81304da3faf")
+ version("3.12.1", sha256="b73e21f78eabdaf89bf026d8ef0d65d2f1a9bfdc1cb26659c4ec88959989bf70")
+ version("3.12.0", sha256="1e5e82f0a34c331c1b0d0c21609791bfe6d6849edfc24983fc241626b433e1c3")
+ version("3.11.6", sha256="7176a2feb98e1b36b6b9fa56d64151068865f505a0ce24203f3ddbb3f985103b")
+ version("3.11.5", sha256="509bf4880978666f5a6db1eb3d747681e0cc6e0b5bddd94ab0f14a4199d93e18")
+ version("3.11.4", sha256="1029aff6bcca7811fb7b6d5421c5c9024b8e74e84cd268680265723f42e23cf2")
+ version("3.11.3", sha256="eeb10661047e476aa3b535d14a32af95690691778d7afe0630a344654ff9759a")
+ version("3.11.2", sha256="47a6d78a70c25764386a01b55819af386b98fc421da79ae8de3ae0242cf66d93")
+ version("3.11.1", sha256="18f7dfd267b90d177851623747598e45fbe4d91fc485f2b57ff0e3ae1b0fdde3")
+ version("3.11.0", sha256="f3469e776ca704cfda47f0a43331690c882f82c9c0c6f185452387c1e222a63e")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ # variants by library linkage type
+ variant("shared", default=False, description="Build a dynamically linked library")
+ variant(
+ "simdjson_static",
+ default=False,
+ description="Build the simdjson_static library along with the dynamically linked simdjson",
+ when="+shared",
+ )
+
+ # feature variants
+ variant("exceptions", default=True, description="Enable exception throwing")
+ variant("threads", default=True, description="Enable multithreading")
+ variant("deprecated", default=True, description="Enable deprecated APIs")
+ variant("utf8-validation", default=True, description="Enable UTF-8 validation")
+
+ # variants for enabling sanitizers
+ variant("ubsan", default=False, description="Enable UndefinedBehaviorSanitizer")
+ variant("tsan", default=False, description="Enable ThreadSanitizer", when="+ubsan")
+ variant("asan", default=False, description="Enable AddressSanitizer")
+ variant("msan", default=False, description="Enable MemorySanitizer")
+
+ conflicts("+asan+msan", msg="AddressSanitizer and MemorySanitizer cannot be combined")
+ conflicts("+asan+tsan", msg="AddressSanitizer and ThreadSanitizer cannot be combined")
+ conflicts("+msan+tsan", msg="MemorySanitizer and ThreadSanitizer cannot be combined")
+
+ # https://clang.llvm.org/docs/MemorySanitizer.html#supported-platforms
+ requires(
+ "platform=linux %clang",
+ "platform=freebsd %clang",
+ when="+msan",
+ msg="MemorySanitizer is supported only by Clang and on Linux, FreeBSD, and NetBSD",
+ )
+
+ def cmake_args(self):
+ build_type = self.spec.variants["build_type"]
+ enable_dev_checks = "Debug" in build_type or "RelWithDebInfo" in build_type
+
+ return [
+ "-DSIMDJSON_DEVELOPER_MODE:BOOL=OFF",
+ "-DSIMDJSON_VERBOSE_LOGGING:BOOL=OFF",
+ self.define("SIMDJSON_DEVELOPMENT_CHECKS", enable_dev_checks),
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define_from_variant("SIMDJSON_BUILD_STATIC_LIB", "simdjson_static"),
+ self.define_from_variant("SIMDJSON_ENABLE_THREADS", "threads"),
+ self.define_from_variant("SIMDJSON_EXCEPTIONS", "exceptions"),
+ self.define("SIMDJSON_DISABLE_DEPRECATED_API", self.spec.satisfies("~deprecated")),
+ self.define("SIMDJSON_SKIPUTF8VALIDATION", self.spec.satisfies("~utf8-validation")),
+ self.define_from_variant("SIMDJSON_SANITIZE_UNDEFINED", "ubsan"),
+ self.define_from_variant("SIMDJSON_SANITIZE_THREADS", "tsan"),
+ self.define_from_variant("SIMDJSON_SANITIZE", "asan"),
+ self.define_from_variant("SIMDJSON_SANITIZE_MEMORY", "msan"),
+ ]
diff --git a/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py b/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py
index 72e690397fd..41a32a07bc7 100644
--- a/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py
+++ b/var/spack/repos/builtin/packages/simmetrix-simmodsuite/package.py
@@ -540,6 +540,8 @@ class SimmetrixSimmodsuite(Package):
variant("parallelmesh", default=False, description="enable parallel meshing")
variant("paralleladapt", default=False, description="enable parallel adaptation")
+ depends_on("c", type="build")
+
depends_on("mpi")
depends_on("libtirpc", type="link")
depends_on("gmake", type="build")
@@ -571,12 +573,14 @@ class SimmetrixSimmodsuite(Package):
condition = "@{0}+{1}".format(sim_version, feature)
simmetrix_resource(_name, url, sha256, condition)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
archlib = join_path(self.prefix.lib, self.oslib)
env.append_path("CMAKE_PREFIX_PATH", archlib)
simmetrix_setkernelcmakeprefixpath(self.spec, archlib, env)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
archlib = join_path(self.prefix.lib, self.oslib)
env.append_path("CMAKE_PREFIX_PATH", archlib)
simmetrix_setkernelcmakeprefixpath(self.spec, archlib, env)
diff --git a/var/spack/repos/builtin/packages/singularity-eos/package.py b/var/spack/repos/builtin/packages/singularity-eos/package.py
index e2f61804665..ffd264c3254 100644
--- a/var/spack/repos/builtin/packages/singularity-eos/package.py
+++ b/var/spack/repos/builtin/packages/singularity-eos/package.py
@@ -188,7 +188,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if os.path.isdir(self.prefix.lib64):
lib_dir = self.prefix.lib64
else:
diff --git a/var/spack/repos/builtin/packages/singularityce/package.py b/var/spack/repos/builtin/packages/singularityce/package.py
index a5c4a4b50ec..58ab5925528 100644
--- a/var/spack/repos/builtin/packages/singularityce/package.py
+++ b/var/spack/repos/builtin/packages/singularityce/package.py
@@ -94,7 +94,7 @@ def edit(self, spec, prefix):
build_targets = ["-C", "builddir", "parallel=False"]
install_targets = ["install", "-C", "builddir", "parallel=False"]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Point GOPATH at the top of the staging dir for the build step.
env.prepend_path("GOPATH", self.gopath)
diff --git a/var/spack/repos/builtin/packages/sirius/package.py b/var/spack/repos/builtin/packages/sirius/package.py
index b613a580e59..6d2497285a8 100644
--- a/var/spack/repos/builtin/packages/sirius/package.py
+++ b/var/spack/repos/builtin/packages/sirius/package.py
@@ -22,6 +22,7 @@ class Sirius(CMakePackage, CudaPackage, ROCmPackage):
version("develop", branch="develop")
version("master", branch="master")
+ version("7.7.0", sha256="be0bdc76db9eb8afdcb950f0ccaf7535b8e85d72a4232dc92246f54fa68d9d7b")
version("7.6.2", sha256="1ba92942aa39b49771677cc8bf1c94a0b4350eb45bf3009318a6c2350b46a276")
version("7.6.1", sha256="16a114dc17e28697750585820e69718a96e6929f88406d266c75cf9a7cdbdaaa")
version("7.6.0", sha256="e424206fecb35bb2082b5c87f0865a9536040e984b88b041e6f7d531f8a65b20")
diff --git a/var/spack/repos/builtin/packages/sleef/package.py b/var/spack/repos/builtin/packages/sleef/package.py
index ac271ad91e3..f76ee96eac9 100644
--- a/var/spack/repos/builtin/packages/sleef/package.py
+++ b/var/spack/repos/builtin/packages/sleef/package.py
@@ -17,9 +17,12 @@ class Sleef(CMakePackage):
license("BSL-1.0")
version("master", branch="master")
+ version("3.7.0_2024-12-06", commit="56e1f79cb140fb9326d612d0be06b5250565cade") # py-torch@2.7:
version("3.7.0", commit="c5494730bf601599a55f4e77f357b51ba590585e", preferred=True)
version("3.6.1", commit="6ee14bcae5fe92c2ff8b000d5a01102dab08d774")
- version("3.6.0_2024-03-20", commit="60e76d2bce17d278b439d9da17177c8f957a9e9b") # py-torch@2.4:
+ version(
+ "3.6.0_2024-03-20", commit="60e76d2bce17d278b439d9da17177c8f957a9e9b"
+ ) # py-torch@2.4:2.6
version("3.6.0", commit="a99491afee2bae0b11e9ffbf3211349f43a5fd10")
version(
"3.5.1_2020-12-22", commit="e0a003ee838b75d11763aa9c3ef17bf71a725bff"
diff --git a/var/spack/repos/builtin/packages/slepc/package.py b/var/spack/repos/builtin/packages/slepc/package.py
index 1209bc23b2b..90410a43fe7 100644
--- a/var/spack/repos/builtin/packages/slepc/package.py
+++ b/var/spack/repos/builtin/packages/slepc/package.py
@@ -233,12 +233,14 @@ def install(self, spec, prefix):
make("install", parallel=False)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# set SLEPC_DIR & PETSC_DIR in the module file
env.set("SLEPC_DIR", self.prefix)
env.set("PETSC_DIR", self.spec["petsc"].prefix)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Set up SLEPC_DIR for dependent packages built with SLEPc
env.set("SLEPC_DIR", self.prefix)
diff --git a/var/spack/repos/builtin/packages/smartmontools/package.py b/var/spack/repos/builtin/packages/smartmontools/package.py
index 9ca183a08a1..47da9a58d1f 100644
--- a/var/spack/repos/builtin/packages/smartmontools/package.py
+++ b/var/spack/repos/builtin/packages/smartmontools/package.py
@@ -18,6 +18,6 @@ class Smartmontools(AutotoolsPackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
env.prepend_path("LD_LIBRARY_PATH", self.prefix.usr.lib)
diff --git a/var/spack/repos/builtin/packages/snap-korf/package.py b/var/spack/repos/builtin/packages/snap-korf/package.py
index 83eefe314d1..27163c432c0 100644
--- a/var/spack/repos/builtin/packages/snap-korf/package.py
+++ b/var/spack/repos/builtin/packages/snap-korf/package.py
@@ -50,6 +50,6 @@ def install(self, spec, prefix):
install_tree("HMM", prefix.HMM)
install_tree("DNA", prefix.DNA)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ZOE", self.prefix)
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/snphylo/package.py b/var/spack/repos/builtin/packages/snphylo/package.py
index 5e99b8e598e..f9f605d38a2 100644
--- a/var/spack/repos/builtin/packages/snphylo/package.py
+++ b/var/spack/repos/builtin/packages/snphylo/package.py
@@ -39,5 +39,5 @@ def install(self, spec, prefix):
bash("./setup.sh", input=f)
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/sollve/package.py b/var/spack/repos/builtin/packages/sollve/package.py
index 241211fc95f..578704e60ad 100644
--- a/var/spack/repos/builtin/packages/sollve/package.py
+++ b/var/spack/repos/builtin/packages/sollve/package.py
@@ -15,6 +15,8 @@ class Sollve(CMakePackage):
homepage = "https://www.bnl.gov/compsci/projects/SOLLVE/"
git = "https://github.com/SOLLVE/llvm.git"
+ tags = ["e4s"]
+
# NOTE: The debug version of LLVM is an order of magnitude larger than
# the release version, and may take up 20-30 GB of space. If you want
# to save space, build with `build_type=Release`.
@@ -55,6 +57,9 @@ class Sollve(CMakePackage):
variant("argobots", default=True, description="Use Argobots in BOLT")
extends("python", when="+python")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
# Build dependency
depends_on("cmake@3.4.3:", type="build")
depends_on("python", type="build")
@@ -241,10 +246,10 @@ def check_darwin_lldb_codesign_requirement(self):
)
raise RuntimeError(explanation)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", self.compiler.cxx11_flag)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+clang" in self.spec:
env.set("CC", join_path(self.spec.prefix.bin, "clang"))
env.set("CXX", join_path(self.spec.prefix.bin, "clang++"))
diff --git a/var/spack/repos/builtin/packages/sonlib/package.py b/var/spack/repos/builtin/packages/sonlib/package.py
index b15e2126989..e42befa9419 100644
--- a/var/spack/repos/builtin/packages/sonlib/package.py
+++ b/var/spack/repos/builtin/packages/sonlib/package.py
@@ -28,7 +28,7 @@ class Sonlib(MakefilePackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
binpath = os.path.join(self.stage.source_path, "bin")
libpath = os.path.join(self.stage.source_path, "lib")
diff --git a/var/spack/repos/builtin/packages/sopt/package.py b/var/spack/repos/builtin/packages/sopt/package.py
index 69884872847..098a1f74e1d 100644
--- a/var/spack/repos/builtin/packages/sopt/package.py
+++ b/var/spack/repos/builtin/packages/sopt/package.py
@@ -19,7 +19,10 @@ class Sopt(CMakePackage):
maintainers("tkoskela", "mmcleod89", "20DM")
license("GPL-2.0")
+ version("5.0.1", sha256="915000cf4d636b6830d6d37eb67e92a100001604ed30d34210232e3b583ba2a0")
+ version("5.0.0", sha256="ccc0eba228877f56af7712ad49c13abf7e432d364298f2bc86b577a199a2e9c4")
version("4.2.0", sha256="25e579722f8e049d37c9155affa57ec2f38a2f8414c9cf430da2b7bafc86907b")
+ version("dev", branch="development")
variant("tests", default=False, description="Build tests")
variant("examples", default=False, description="Build examples")
@@ -36,7 +39,6 @@ class Sopt(CMakePackage):
depends_on("mpi", when="+mpi")
depends_on("catch2@3.4:3", when="+tests")
depends_on("benchmark@1.8~performance_counters", when="+benchmarks")
- depends_on("onnx@1.16:", when="+onnxrt")
depends_on("py-onnxruntime@1.17.1:", when="+onnxrt")
depends_on("doxygen@1.8:1.12+graphviz", when="+docs")
@@ -59,7 +61,7 @@ def cmake_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+tests" in self.spec:
env.prepend_path("PATH", self.spec.prefix.tests)
if "+examples" in self.spec:
diff --git a/var/spack/repos/builtin/packages/soqt/package.py b/var/spack/repos/builtin/packages/soqt/package.py
index dfd0b580053..dfaccc077a1 100644
--- a/var/spack/repos/builtin/packages/soqt/package.py
+++ b/var/spack/repos/builtin/packages/soqt/package.py
@@ -18,11 +18,13 @@ class Soqt(CMakePackage):
version("1.6.2", sha256="fb483b20015ab827ba46eb090bd7be5bc2f3d0349c2f947c3089af2b7003869c")
version("1.6.1", sha256="80289d9bd49ffe709ab85778c952573f43f1c725ea958c6d5969b2e9c77bb3ba")
+ depends_on("c", type="build")
depends_on("cxx", type="build")
depends_on("cmake@3:", type="build")
depends_on("coin3d")
- depends_on("opengl")
+ depends_on("gl")
+ depends_on("glu")
variant(
"static_defaults",
diff --git a/var/spack/repos/builtin/packages/sos/package.py b/var/spack/repos/builtin/packages/sos/package.py
index f0d9c62fe50..1090524f732 100644
--- a/var/spack/repos/builtin/packages/sos/package.py
+++ b/var/spack/repos/builtin/packages/sos/package.py
@@ -65,6 +65,10 @@ class Sos(AutotoolsPackage):
variant("hard-polling", default=False, description="Enable hard polling of wait calls")
variant("fortran", default=False, description="Enable fortran API")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("autoconf", type="build")
depends_on("automake", type="build")
depends_on("libtool", type="build")
@@ -78,7 +82,9 @@ class Sos(AutotoolsPackage):
# them from using the spack wrappers
filter_compiler_wrappers("oshcc", "oshc++", "oshcc", "oshfort", relative_root="bin")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# Enable the osh wrappers to use spack wrappers when inside spack
# with env variables
env.set("SHMEM_CC", spack_cc)
diff --git a/var/spack/repos/builtin/packages/sosflow/package.py b/var/spack/repos/builtin/packages/sosflow/package.py
index d33b7cbc117..8f7edffa6c2 100644
--- a/var/spack/repos/builtin/packages/sosflow/package.py
+++ b/var/spack/repos/builtin/packages/sosflow/package.py
@@ -2,6 +2,7 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+import os
from spack.package import *
@@ -23,15 +24,15 @@ class Sosflow(CMakePackage):
depends_on("pkgconfig")
depends_on("mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SOS_HOST_KNOWN_AS", "SPACK-SOS-BUILD")
env.set("SOS_HOST_NODE_NAME", "SPACK-SOS-NODE")
env.set("SOS_HOST_DETAILED", "SPACK-SOS-DETAILED")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SOS_ROOT", self.spec.prefix)
env.set("SOS_BUILD_DIR", self.spec.prefix)
env.set("SOS_CMD_PORT", "22500")
- env.set("SOS_WORK", env["HOME"])
- env.set("SOS_EVPATH_MEETUP", env["HOME"])
+ env.set("SOS_WORK", os.environ["HOME"])
+ env.set("SOS_EVPATH_MEETUP", os.environ["HOME"])
env.set("SOS_ENV_SET", "true")
diff --git a/var/spack/repos/builtin/packages/sp/package.py b/var/spack/repos/builtin/packages/sp/package.py
index b8bb65ec176..32e77c322ab 100644
--- a/var/spack/repos/builtin/packages/sp/package.py
+++ b/var/spack/repos/builtin/packages/sp/package.py
@@ -35,7 +35,7 @@ class Sp(CMakePackage):
depends_on("fortran", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@2.4:"):
suffixes = self.spec.variants["precision"].value
else:
diff --git a/var/spack/repos/builtin/packages/spack/package.py b/var/spack/repos/builtin/packages/spack/package.py
index b0487f81c2a..6993bceeec7 100644
--- a/var/spack/repos/builtin/packages/spack/package.py
+++ b/var/spack/repos/builtin/packages/spack/package.py
@@ -20,6 +20,8 @@ class Spack(Package):
url = "https://github.com/spack/spack/releases/download/v0.16.2/spack-0.16.2.tar.gz"
maintainers("haampie")
+ tags = ["e4s"]
+
license("Apache-2.0 OR MIT")
version("develop", branch="develop")
@@ -143,7 +145,7 @@ class Spack(Package):
depends_on("py-sphinx-rtd-theme", type="run")
depends_on("graphviz", type="run")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SPACK_PYTHON", self.spec["python"].command.path)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/spark/package.py b/var/spack/repos/builtin/packages/spark/package.py
index 36335dbfa48..a8ca52ef198 100644
--- a/var/spack/repos/builtin/packages/spark/package.py
+++ b/var/spack/repos/builtin/packages/spark/package.py
@@ -56,7 +56,7 @@ def install_dir(dirname):
install("RELEASE", prefix)
@when("+hadoop")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
hadoop = self.spec["hadoop"].command
hadoop.add_default_env("JAVA_HOME", self.spec["java"].home)
hadoop_classpath = hadoop("classpath", output=str)
diff --git a/var/spack/repos/builtin/packages/spdk/package.py b/var/spack/repos/builtin/packages/spdk/package.py
index a20e4767f0d..b370c1fa376 100644
--- a/var/spack/repos/builtin/packages/spdk/package.py
+++ b/var/spack/repos/builtin/packages/spdk/package.py
@@ -61,6 +61,8 @@ class Spdk(AutotoolsPackage):
depends_on("c", type="build") # generated
depends_on("cxx", type="build") # generated
+ depends_on("libtool", type="build")
+ depends_on("pkgconfig", type="build")
depends_on("dpdk@22.11:", when="+dpdk")
depends_on("fio@3.33", when="+fio")
@@ -70,6 +72,7 @@ class Spdk(AutotoolsPackage):
depends_on("numactl")
depends_on("py-pyelftools")
depends_on("rdma-core", when="+rdma")
+ depends_on("uuid")
def configure_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/spdlog/package.py b/var/spack/repos/builtin/packages/spdlog/package.py
index 9a7f459baed..66bdf4dfb94 100644
--- a/var/spack/repos/builtin/packages/spdlog/package.py
+++ b/var/spack/repos/builtin/packages/spdlog/package.py
@@ -13,6 +13,7 @@ class Spdlog(CMakePackage):
license("MIT")
+ version("1.15.2", sha256="7a80896357f3e8e920e85e92633b14ba0f229c506e6f978578bdc35ba09e9a5d")
version("1.15.1", sha256="25c843860f039a1600f232c6eb9e01e6627f7d030a2ae5e232bdd3c9205d26cc")
version("1.15.0", sha256="9962648c9b4f1a7bbc76fd8d9172555bad1871fdb14ff4f842ef87949682caa5")
version("1.14.1", sha256="1586508029a7d0670dfcb2d97575dcdc242d3868a259742b69f100801ab4e16b")
diff --git a/var/spack/repos/builtin/packages/spectre/package.py b/var/spack/repos/builtin/packages/spectre/package.py
index 9ecc18b771b..03c3d33be8d 100644
--- a/var/spack/repos/builtin/packages/spectre/package.py
+++ b/var/spack/repos/builtin/packages/spectre/package.py
@@ -30,6 +30,9 @@ class Spectre(CMakePackage):
license("MIT")
version("develop", branch="develop")
+ version(
+ "2025.04.21", sha256="09b8412abdbd3853b256b34669c27b0f0e69bf6fc5c48e9bb450a46221e62abd"
+ )
version(
"2025.03.17", sha256="3b3187a6d0e0f0386ae9bf06b77485771b841886a6e71abb12516c2aa874ae65"
)
diff --git a/var/spack/repos/builtin/packages/spectrum-mpi/package.py b/var/spack/repos/builtin/packages/spectrum-mpi/package.py
index 0ef32d9d713..32f01a06365 100644
--- a/var/spack/repos/builtin/packages/spectrum-mpi/package.py
+++ b/var/spack/repos/builtin/packages/spectrum-mpi/package.py
@@ -22,6 +22,8 @@ class SpectrumMpi(BundlePackage):
requires("platform=linux")
+ depends_on("c", type="build")
+
executables = ["^ompi_info$"]
@classmethod
@@ -115,7 +117,9 @@ def setup_dependent_package(self, module, dependent_spec):
self.spec.mpif77 = os.path.join(self.prefix.bin, "mpif77")
self.spec.mpifc = os.path.join(self.prefix.bin, "mpif90")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if "%xl" in dependent_spec or "%xl_r" in dependent_spec:
env.set("MPICC", os.path.join(self.prefix.bin, "mpixlc"))
env.set("MPICXX", os.path.join(self.prefix.bin, "mpixlC"))
@@ -137,7 +141,7 @@ def setup_dependent_build_environment(self, env, dependent_spec):
env.set("OMPI_F77", dependent_module.spack_f77)
env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Because MPI functions as a compiler we need to setup the compilers
# in the run environment, like any compiler
if "%xl" in self.spec or "%xl_r" in self.spec:
diff --git a/var/spack/repos/builtin/packages/spherepack/package.py b/var/spack/repos/builtin/packages/spherepack/package.py
index 236b2710eda..215db4ab89b 100644
--- a/var/spack/repos/builtin/packages/spherepack/package.py
+++ b/var/spack/repos/builtin/packages/spherepack/package.py
@@ -18,8 +18,6 @@ class Spherepack(Package):
depends_on("gmake", type="build")
def install(self, spec, prefix):
- if self.compiler.fc is None:
- raise InstallError("SPHEREPACK requires a Fortran 90 compiler")
make("MAKE=make", "F90=f90 -O2 -fallow-argument-mismatch", "AR=ar", "libspherepack")
make("MAKE=make", "F90=f90 -O2 -fallow-argument-mismatch", "AR=ar", "testspherepack")
install_tree("lib", prefix.lib)
diff --git a/var/spack/repos/builtin/packages/spindle/package.py b/var/spack/repos/builtin/packages/spindle/package.py
index efb5c377017..ba99c529de3 100644
--- a/var/spack/repos/builtin/packages/spindle/package.py
+++ b/var/spack/repos/builtin/packages/spindle/package.py
@@ -32,5 +32,5 @@ class Spindle(AutotoolsPackage):
# spindle_logd.cc:65:76: error: narrowing conversion of '223' from 'int' to 'char'
# spindle_logd.cc:65:76: error: narrowing conversion of '191' from 'int' to 'char'
@when("@0.8.1 %gcc")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CPPFLAGS", "-Wno-narrowing")
diff --git a/var/spack/repos/builtin/packages/spiral-software/package.py b/var/spack/repos/builtin/packages/spiral-software/package.py
index 459b858feb9..0221b5a68b8 100644
--- a/var/spack/repos/builtin/packages/spiral-software/package.py
+++ b/var/spack/repos/builtin/packages/spiral-software/package.py
@@ -110,11 +110,15 @@ def install(self, spec, prefix):
if f"+{pkg}" in spec:
self.spiral_package_install(spec, prefix, pkg)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("SPIRAL_HOME", self.prefix)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("SPIRAL_HOME", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SPIRAL_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/srilm/package.py b/var/spack/repos/builtin/packages/srilm/package.py
index a94347d8a8b..b1dd9ee44ed 100644
--- a/var/spack/repos/builtin/packages/srilm/package.py
+++ b/var/spack/repos/builtin/packages/srilm/package.py
@@ -26,6 +26,9 @@ class Srilm(MakefilePackage):
variant("pic", default=False, description="Build position independent code")
variant("liblbfgs", default=False, description="Enable libLBFGS")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
depends_on("iconv")
depends_on("liblbfgs", when="+liblbfgs")
depends_on("gawk", type=("build", "run"))
@@ -87,7 +90,7 @@ def install(self, spec, prefix):
install_tree("include", prefix.include)
install_tree("man", prefix.man)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Most executable files are in a subfolder named based on
# the detected machine type. Unfortunately we cannot use
# `machine_type` at this point but we can just guess as
diff --git a/var/spack/repos/builtin/packages/ssmtp/package.py b/var/spack/repos/builtin/packages/ssmtp/package.py
index 58e228b9b3f..ba6ec46cf65 100644
--- a/var/spack/repos/builtin/packages/ssmtp/package.py
+++ b/var/spack/repos/builtin/packages/ssmtp/package.py
@@ -28,7 +28,7 @@ class Ssmtp(AutotoolsPackage):
patch("install.patch")
@when("+ssl")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# The configure script is generated with a very old version of
# autoconf, which cannot accept LIBS as a command-line argument
env.set("LIBS", self.spec["openssl"].libs.link_flags)
diff --git a/var/spack/repos/builtin/packages/sspace-standard/package.py b/var/spack/repos/builtin/packages/sspace-standard/package.py
index 002a89922fb..f3c2e3fc5ab 100644
--- a/var/spack/repos/builtin/packages/sspace-standard/package.py
+++ b/var/spack/repos/builtin/packages/sspace-standard/package.py
@@ -46,6 +46,6 @@ def install(self, spec, prefix):
install_tree("tools", prefix.tools)
install(rootscript, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SSPACE_HOME", self.prefix)
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/sst-elements/package.py b/var/spack/repos/builtin/packages/sst-elements/package.py
index 553bf7e0543..36dda9a532d 100644
--- a/var/spack/repos/builtin/packages/sst-elements/package.py
+++ b/var/spack/repos/builtin/packages/sst-elements/package.py
@@ -169,7 +169,7 @@ def configure_args(self):
args.append("--with-sst-core=%s" % spec["sst-core"].prefix)
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Setup runtime environment for SST Elements."""
if "+pin" in self.spec:
diff --git a/var/spack/repos/builtin/packages/star-ccm-plus/package.py b/var/spack/repos/builtin/packages/star-ccm-plus/package.py
index 2c1273c893a..bf9f8315071 100644
--- a/var/spack/repos/builtin/packages/star-ccm-plus/package.py
+++ b/var/spack/repos/builtin/packages/star-ccm-plus/package.py
@@ -75,7 +75,7 @@ def install(self, spec, prefix):
"-DNODOC={0}".format("false" if "+docs" in spec else "true"),
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# using Version.up_to strips out the 0 padding
version = re.sub("_.*$", "", format(self.spec.version))
env.prepend_path(
diff --git a/var/spack/repos/builtin/packages/stat/package.py b/var/spack/repos/builtin/packages/stat/package.py
index 2898b72834d..248ad34a395 100644
--- a/var/spack/repos/builtin/packages/stat/package.py
+++ b/var/spack/repos/builtin/packages/stat/package.py
@@ -14,6 +14,8 @@ class Stat(AutotoolsPackage):
git = "https://github.com/llnl/stat.git"
maintainers("lee218llnl")
+ tags = ["e4s"]
+
version("develop", branch="develop")
version(
"4.2.1",
diff --git a/var/spack/repos/builtin/packages/stata/package.py b/var/spack/repos/builtin/packages/stata/package.py
index 5ba670b0c4d..c9ff1a94ce1 100644
--- a/var/spack/repos/builtin/packages/stata/package.py
+++ b/var/spack/repos/builtin/packages/stata/package.py
@@ -39,7 +39,7 @@ def url_for_version(self, version):
return "file://{0}/Stata{1}Linux64.tar.gz".format(os.getcwd(), version)
# STATA is simple and needs really just the PATH set.
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
env.prepend_path("LD_LIBRARY_PATH", self.spec["libpng"].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/steps/package.py b/var/spack/repos/builtin/packages/steps/package.py
index 6ffb7384e77..f922a45a5cc 100644
--- a/var/spack/repos/builtin/packages/steps/package.py
+++ b/var/spack/repos/builtin/packages/steps/package.py
@@ -141,7 +141,7 @@ def build_targets(self):
]
return targets
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# This recipe exposes a Python package from a C++ CMake project.
# This hook is required to reproduce what Spack PythonPackage does.
env.prepend_path("PYTHONPATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/stripack/package.py b/var/spack/repos/builtin/packages/stripack/package.py
index a819797c2cd..d50dcea5238 100644
--- a/var/spack/repos/builtin/packages/stripack/package.py
+++ b/var/spack/repos/builtin/packages/stripack/package.py
@@ -29,6 +29,8 @@ class Stripack(MakefilePackage):
url="https://people.sc.fsu.edu/~jburkardt/f_src/stripack/stripack.f90",
)
+ depends_on("fortran", type="build")
+
@run_before("build")
def run_mkmake(self):
config = [
@@ -49,7 +51,7 @@ def run_mkmake(self):
fh.write("\n".join(config))
mkdirp(join_path(self.build_directory, "build"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# This is smartly used by VisIt
env.set(
"VISIT_FFP_STRIPACK_PATH", join_path(self.spec.prefix.lib, "libstripack." + dso_suffix)
diff --git a/var/spack/repos/builtin/packages/su2/package.py b/var/spack/repos/builtin/packages/su2/package.py
index 80793800f86..11c36cfeb51 100644
--- a/var/spack/repos/builtin/packages/su2/package.py
+++ b/var/spack/repos/builtin/packages/su2/package.py
@@ -156,7 +156,7 @@ def install_mpp(self):
join_path(self.build_directory, "subprojects", "Mutationpp"), self.prefix.lib
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("su2_run", self.prefix.bin)
env.set("su2_home", self.prefix)
env.prepend_path("path", self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sumaclust/package.py b/var/spack/repos/builtin/packages/sumaclust/package.py
index b5d0fcaf6c2..b0330d52057 100644
--- a/var/spack/repos/builtin/packages/sumaclust/package.py
+++ b/var/spack/repos/builtin/packages/sumaclust/package.py
@@ -19,6 +19,8 @@ class Sumaclust(MakefilePackage):
url="https://git.metabarcoding.org/obitools/sumaclust/uploads/69f757c42f2cd45212c587e87c75a00f/sumaclust_v1.0.20.tar.gz",
)
+ depends_on("c", type="build")
+
def build(self, spec, prefix):
make("CC={0}".format(spack_cc))
diff --git a/var/spack/repos/builtin/packages/sumo/package.py b/var/spack/repos/builtin/packages/sumo/package.py
index 4d284f0d5bb..1db5ecc4a07 100644
--- a/var/spack/repos/builtin/packages/sumo/package.py
+++ b/var/spack/repos/builtin/packages/sumo/package.py
@@ -48,5 +48,5 @@ def url_for_version(self, version):
url = "https://github.com/eclipse/sumo/archive/v{0}.tar.gz"
return url.format(version.underscored)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SUMO_HOME", self.prefix)
diff --git a/var/spack/repos/builtin/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py
index d4d0705b9ef..a33534a0b83 100644
--- a/var/spack/repos/builtin/packages/sundials/package.py
+++ b/var/spack/repos/builtin/packages/sundials/package.py
@@ -25,6 +25,7 @@ class Sundials(CMakePackage, CudaPackage, ROCmPackage):
# Versions
# ==========================================================================
version("develop", branch="develop")
+ version("7.3.0", tag="v7.3.0", commit="e941546af1a5b5e492dcac0a1872540e9961c556")
version("7.2.1", tag="v7.2.1", commit="5c53be85c88f63c5201c130b8cb2c686615cfb03")
version("7.2.0", tag="v7.2.0", commit="0eff39663606f2ff280c4059a947ed62ae38180a")
version("7.1.1", tag="v7.1.1", commit="c28eaa3764a03705d61decb6025b409360e9d53f")
diff --git a/var/spack/repos/builtin/packages/supernova/package.py b/var/spack/repos/builtin/packages/supernova/package.py
index c7c5ed50295..a9802f04bea 100644
--- a/var/spack/repos/builtin/packages/supernova/package.py
+++ b/var/spack/repos/builtin/packages/supernova/package.py
@@ -36,7 +36,7 @@ class Supernova(Package):
def url_for_version(self, version):
return "file://{0}/supernova-{1}.tar.gz".format(os.getcwd(), version)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/survey/package.py b/var/spack/repos/builtin/packages/survey/package.py
index 76147b5c0d2..f4a4fd1f4d6 100644
--- a/var/spack/repos/builtin/packages/survey/package.py
+++ b/var/spack/repos/builtin/packages/survey/package.py
@@ -149,7 +149,7 @@ def python_lib_dir(self):
def site_packages_dir(self):
return join_path(self.python_lib_dir, "site-packages")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set up the compile and runtime environments for a package."""
# Set SURVEY_MPI_IMPLEMENTATON to the appropriate mpi implementation
diff --git a/var/spack/repos/builtin/packages/sw4/package.py b/var/spack/repos/builtin/packages/sw4/package.py
index 8feb7845baa..49265b5c561 100644
--- a/var/spack/repos/builtin/packages/sw4/package.py
+++ b/var/spack/repos/builtin/packages/sw4/package.py
@@ -42,7 +42,7 @@ class Sw4(MakefilePackage):
depends_on("fftw@3: +mpi", when="+fftw")
depends_on("llvm-openmp", when="+openmp %apple-clang")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CXX", self.spec["mpi"].mpicxx)
env.set("FC", self.spec["mpi"].mpifc)
# openmp is enabled by default
diff --git a/var/spack/repos/builtin/packages/sw4lite/package.py b/var/spack/repos/builtin/packages/sw4lite/package.py
index 209c7eae62f..9390c8f9431 100644
--- a/var/spack/repos/builtin/packages/sw4lite/package.py
+++ b/var/spack/repos/builtin/packages/sw4lite/package.py
@@ -30,6 +30,8 @@ class Sw4lite(MakefilePackage, CudaPackage):
)
variant("ckernel", default=False, description="C or Fortran kernel")
+ depends_on("cxx", type="build")
+
depends_on("blas")
depends_on("lapack")
depends_on("mpi")
diff --git a/var/spack/repos/builtin/packages/swiftsim/package.py b/var/spack/repos/builtin/packages/swiftsim/package.py
index 0181504cf1d..80ccbb3d031 100644
--- a/var/spack/repos/builtin/packages/swiftsim/package.py
+++ b/var/spack/repos/builtin/packages/swiftsim/package.py
@@ -37,11 +37,11 @@ class Swiftsim(AutotoolsPackage):
depends_on("hdf5~mpi", when="~mpi")
depends_on("hdf5+mpi", when="+mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# Needed to be able to download from the Durham gitlab repository
tty.warn('Setting "GIT_SSL_NO_VERIFY=1"')
tty.warn("This is needed to clone SWIFT repository")
- env.set("GIT_SSL_NO_VERIFY", 1)
+ env.set("GIT_SSL_NO_VERIFY", "1")
def configure_args(self):
return [
diff --git a/var/spack/repos/builtin/packages/sympack/package.py b/var/spack/repos/builtin/packages/sympack/package.py
index 1429eb5c8a1..87ec9020f1b 100644
--- a/var/spack/repos/builtin/packages/sympack/package.py
+++ b/var/spack/repos/builtin/packages/sympack/package.py
@@ -80,7 +80,7 @@ def cmake_args(self):
]
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "network=auto" not in spec:
env.set("UPCXX_NETWORK", spec.variants["network"].value)
diff --git a/var/spack/repos/builtin/packages/sysstat/package.py b/var/spack/repos/builtin/packages/sysstat/package.py
index 9e83cf439d8..785d7942350 100644
--- a/var/spack/repos/builtin/packages/sysstat/package.py
+++ b/var/spack/repos/builtin/packages/sysstat/package.py
@@ -33,7 +33,7 @@ class Sysstat(AutotoolsPackage):
depends_on("gettext")
depends_on("lm-sensors")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("rcdir", self.spec.prefix.etc)
env.append_flags("sa_dir", self.spec.prefix.log.sa)
env.append_flags("conf_dir", self.spec.prefix.etc.sysconfig)
diff --git a/var/spack/repos/builtin/packages/sz/package.py b/var/spack/repos/builtin/packages/sz/package.py
index d8c0cdd9503..df86a04fb96 100644
--- a/var/spack/repos/builtin/packages/sz/package.py
+++ b/var/spack/repos/builtin/packages/sz/package.py
@@ -96,7 +96,7 @@ def flag_handler(self, name, flags):
flags.append("-Wno-error=implicit-function-declaration")
return (flags, None, None)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+hdf5" in self.spec:
env.prepend_path("HDF5_PLUGIN_PATH", self.prefix.lib64)
diff --git a/var/spack/repos/builtin/packages/sz3/package.py b/var/spack/repos/builtin/packages/sz3/package.py
index 10cd5a86501..d9e79614001 100644
--- a/var/spack/repos/builtin/packages/sz3/package.py
+++ b/var/spack/repos/builtin/packages/sz3/package.py
@@ -34,7 +34,7 @@ class Sz3(CMakePackage):
depends_on("pkgconfig")
depends_on("hdf5", when="+hdf5")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+hdf5" in self.spec:
env.prepend_path("HDF5_PLUGIN_PATH", self.prefix.lib64)
diff --git a/var/spack/repos/builtin/packages/tandem/package.py b/var/spack/repos/builtin/packages/tandem/package.py
index ad6947ec803..c651be4a219 100644
--- a/var/spack/repos/builtin/packages/tandem/package.py
+++ b/var/spack/repos/builtin/packages/tandem/package.py
@@ -119,5 +119,5 @@ def install(self, spec, prefix):
self.build(spec, prefix)
install_tree(self.build_directory, prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.app)
diff --git a/var/spack/repos/builtin/packages/targetp/package.py b/var/spack/repos/builtin/packages/targetp/package.py
index 20bc5cbc67b..9b255b75a6e 100644
--- a/var/spack/repos/builtin/packages/targetp/package.py
+++ b/var/spack/repos/builtin/packages/targetp/package.py
@@ -42,6 +42,6 @@ def install(self, spec, prefix):
install_tree("tmp", prefix.tmp)
install("targetp", prefix.targetp)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("TARGETP", self.prefix)
env.prepend_path("PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/tasmanian/package.py b/var/spack/repos/builtin/packages/tasmanian/package.py
index 03911f8a827..ba22c8ec97b 100644
--- a/var/spack/repos/builtin/packages/tasmanian/package.py
+++ b/var/spack/repos/builtin/packages/tasmanian/package.py
@@ -93,7 +93,7 @@ class Tasmanian(CMakePackage, CudaPackage, ROCmPackage):
# patching a bug in the interpretation of the C++ standard
patch("tas80_clang17.patch", when="@8.0")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# needed for the hipcc compiler
if "+rocm" in self.spec:
env.set("CXX", self.spec["hip"].hipcc)
diff --git a/var/spack/repos/builtin/packages/tassel/package.py b/var/spack/repos/builtin/packages/tassel/package.py
index 4bf7e5b66b5..32445c0c593 100644
--- a/var/spack/repos/builtin/packages/tassel/package.py
+++ b/var/spack/repos/builtin/packages/tassel/package.py
@@ -27,5 +27,5 @@ class Tassel(Package):
def install(self, spec, prefix):
install_tree(".", prefix.bin)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CLASSPATH", self.prefix.bin.lib)
diff --git a/var/spack/repos/builtin/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py
index 126eb2b2359..2bbe8374dd2 100644
--- a/var/spack/repos/builtin/packages/tau/package.py
+++ b/var/spack/repos/builtin/packages/tau/package.py
@@ -251,7 +251,7 @@ def set_compiler_options(self, spec):
compiler_options.append(useropt)
return compiler_options
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LIBRARY_PATH", self.spec["zlib-api"].prefix.lib)
env.prepend_path("LIBRARY_PATH", self.spec["hwloc"].prefix.lib)
@@ -450,7 +450,7 @@ def link_tau_arch_dirs(self):
if os.path.isdir(src) and not os.path.exists(dest):
os.symlink(join_path(subdir, d), dest)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
pattern = join_path(self.prefix.lib, "Makefile.*")
files = glob.glob(pattern)
diff --git a/var/spack/repos/builtin/packages/tb-lmto/package.py b/var/spack/repos/builtin/packages/tb-lmto/package.py
index 39a9464f746..5023b3b5266 100644
--- a/var/spack/repos/builtin/packages/tb-lmto/package.py
+++ b/var/spack/repos/builtin/packages/tb-lmto/package.py
@@ -61,5 +61,5 @@ def install(self, spec, prefix):
mkdirp(prefix)
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
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 08c592a68a5..21f19aa6b9d 100644
--- a/var/spack/repos/builtin/packages/tcl/package.py
+++ b/var/spack/repos/builtin/packages/tcl/package.py
@@ -93,7 +93,7 @@ def command(self):
exe = ".exe" if is_windows else ""
return Executable(os.path.realpath(self.prefix.bin.join(f"tclsh{self._tcl_name}{exe}")))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set TCL_LIBRARY to the directory containing init.tcl.
For further info see:
@@ -104,7 +104,9 @@ def setup_run_environment(self, env):
# python will not be able to find Tcl unless TCL_LIBRARY is set.
env.set("TCL_LIBRARY", find_script_dir(self.spec))
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set TCLLIBPATH to include the tcl-shipped directory for
extensions and any other tcl extension it depends on.
@@ -138,7 +140,9 @@ def symlink_tclsh(self):
with working_dir(self.prefix.bin):
symlink(f"tclsh{ver_suffix}{win_suffix}", "tclsh")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set TCL_LIBRARY to the directory containing init.tcl.
Set TCLLIBPATH to include the tcl-shipped directory for
extensions and any other tcl extension it depends on.
@@ -185,7 +189,7 @@ class AutotoolsBuilder(AnyBuilder, spack.build_systems.autotools.AutotoolsBuilde
# if TCL is present on the system this may be set to the system's
# existing TCL so ensure it is unset
# https://wiki.tcl-lang.org/page/TCL%5FLIBRARY
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("TCL_LIBRARY", "")
def install(self, pkg, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/tecio/package.py b/var/spack/repos/builtin/packages/tecio/package.py
index 8ef2d172fa4..99d9ceef91f 100644
--- a/var/spack/repos/builtin/packages/tecio/package.py
+++ b/var/spack/repos/builtin/packages/tecio/package.py
@@ -27,6 +27,9 @@ class Tecio(CMakePackage):
depends_on("boost@1.69.0:+system", type="build")
depends_on("mpi", when="+mpi")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
@property
def root_cmakelists_dir(self):
if self.spec.satisfies("+mpi"):
diff --git a/var/spack/repos/builtin/packages/tecplot/package.py b/var/spack/repos/builtin/packages/tecplot/package.py
index 05de2b27282..d702f52c2e9 100644
--- a/var/spack/repos/builtin/packages/tecplot/package.py
+++ b/var/spack/repos/builtin/packages/tecplot/package.py
@@ -55,7 +55,7 @@ def install(self, spec, prefix):
force_symlink("../tecplotlm.lic", join_path(self.prefix, lic360))
force_symlink("../tecplotlm.lic", join_path(self.prefix, licChorus))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# Add Chorus bin
binChorus = "chorus_{0}/bin".format(self.version)
env.prepend_path("PATH", join_path(self.prefix, binChorus))
diff --git a/var/spack/repos/builtin/packages/templight/package.py b/var/spack/repos/builtin/packages/templight/package.py
index a4e00e77f6f..b7195a0834d 100644
--- a/var/spack/repos/builtin/packages/templight/package.py
+++ b/var/spack/repos/builtin/packages/templight/package.py
@@ -107,10 +107,10 @@ def patch(self):
with open("tools/clang/tools/CMakeLists.txt", "a") as cmake_lists:
cmake_lists.write("add_clang_subdirectory(templight)")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", self.compiler.cxx11_flag)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("CC", join_path(self.spec.prefix.bin, "templight"))
env.set("CXX", join_path(self.spec.prefix.bin, "templight++"))
diff --git a/var/spack/repos/builtin/packages/tempo/package.py b/var/spack/repos/builtin/packages/tempo/package.py
index 5b9941a3214..dd09ddf0655 100644
--- a/var/spack/repos/builtin/packages/tempo/package.py
+++ b/var/spack/repos/builtin/packages/tempo/package.py
@@ -57,14 +57,18 @@ def post_install_packages(self):
cp("-r", "ephem", join_path(self.prefix, "ephem"))
cp("-r", "tzpar", join_path(self.prefix, "tzpar"))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("TEMPO", self.prefix)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.set("TEMPO", self.prefix)
# For LWA-10-17-2020 version
env.set("TEMPO_DIR", self.prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("TEMPO", self.prefix)
diff --git a/var/spack/repos/builtin/packages/tengine/package.py b/var/spack/repos/builtin/packages/tengine/package.py
index 01172ed34f6..4ae7f3f7abb 100644
--- a/var/spack/repos/builtin/packages/tengine/package.py
+++ b/var/spack/repos/builtin/packages/tengine/package.py
@@ -21,5 +21,5 @@ class Tengine(AutotoolsPackage):
depends_on("pcre")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/termcap/package.py b/var/spack/repos/builtin/packages/termcap/package.py
index 5e4f36d4909..4b63d94df40 100644
--- a/var/spack/repos/builtin/packages/termcap/package.py
+++ b/var/spack/repos/builtin/packages/termcap/package.py
@@ -5,13 +5,13 @@
from spack.package import *
-class Termcap(AutotoolsPackage):
+class Termcap(AutotoolsPackage, GNUMirrorPackage):
"""This is the GNU termcap library, a library of C functions that
enable programs to send control strings to terminals in a way
independent of the terminal type."""
homepage = "https://www.gnu.org/software/termutils/manual/termcap-1.3/html_mono/termcap.html"
- url = "https://ftp.gnu.org/gnu/termcap/termcap-1.3.1.tar.gz"
+ gnu_mirror_path = "termcap/termcap-1.3.1.tar.gz"
license("GPL-2.0-or-later")
diff --git a/var/spack/repos/builtin/packages/tesseract/package.py b/var/spack/repos/builtin/packages/tesseract/package.py
index b0c7d97d01a..1dfb0a3a635 100644
--- a/var/spack/repos/builtin/packages/tesseract/package.py
+++ b/var/spack/repos/builtin/packages/tesseract/package.py
@@ -71,7 +71,7 @@ def autoreconf(self, spec, prefix):
def configure_args(self):
return self.enable_or_disable("doc")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("SCROLLVIEW_PATH", prefix.share.tessdata)
@when("@5.5.0:")
diff --git a/var/spack/repos/builtin/packages/tests-sos/package.py b/var/spack/repos/builtin/packages/tests-sos/package.py
index 01120113192..11210030a6f 100644
--- a/var/spack/repos/builtin/packages/tests-sos/package.py
+++ b/var/spack/repos/builtin/packages/tests-sos/package.py
@@ -32,7 +32,7 @@ def autoreconf(self, spec, prefix):
bash = which("bash")
bash("./autogen.sh")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("CC", "oshcc")
env.set("CXX", "oshc++")
env.set("FC", "oshfort")
diff --git a/var/spack/repos/builtin/packages/texinfo/package.py b/var/spack/repos/builtin/packages/texinfo/package.py
index 909777bcaac..e309a30d3b1 100644
--- a/var/spack/repos/builtin/packages/texinfo/package.py
+++ b/var/spack/repos/builtin/packages/texinfo/package.py
@@ -67,7 +67,7 @@ def build_targets(self):
targets.append(f"CFLAGS={self.compiler.c11_flag}")
return targets
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# texinfo builds Perl XS modules internally, and by default it overrides the
# CC that the top-level configure reports. This loses the Spack wrappers unless
# we set PERL_EXT_CC
diff --git a/var/spack/repos/builtin/packages/texlive/package.py b/var/spack/repos/builtin/packages/texlive/package.py
index 295602d468b..a503ff6c2e8 100644
--- a/var/spack/repos/builtin/packages/texlive/package.py
+++ b/var/spack/repos/builtin/packages/texlive/package.py
@@ -165,10 +165,10 @@ def setup_texlive(self):
mtxrun = Executable(mtxrun_lua)
mtxrun("--generate")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(self.prefix.bin, self.tex_arch()))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", join_path(self.prefix.bin, self.tex_arch()))
executables = [r"^tex$"]
diff --git a/var/spack/repos/builtin/packages/tfel/package.py b/var/spack/repos/builtin/packages/tfel/package.py
index 95d8f8180ca..7429461c96c 100644
--- a/var/spack/repos/builtin/packages/tfel/package.py
+++ b/var/spack/repos/builtin/packages/tfel/package.py
@@ -230,7 +230,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("LD_LIBRARY_PATH", self.prefix.lib)
def check(self):
diff --git a/var/spack/repos/builtin/packages/theia-ide/package.py b/var/spack/repos/builtin/packages/theia-ide/package.py
new file mode 100644
index 00000000000..25afeb2336a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/theia-ide/package.py
@@ -0,0 +1,59 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack.package import *
+
+
+class TheiaIde(Package):
+ """A modern and open IDE for cloud and desktop.
+ The Theia IDE is based on the Theia platform."""
+
+ homepage = "https://theia-ide.org/"
+ url = "https://github.com/eclipse-theia/theia-ide/archive/refs/tags/v1.59.1.tar.gz"
+
+ maintainers("RobertMaaskant")
+
+ license("MIT", checked_by="RobertMaaskant")
+
+ version("1.59.1", sha256="f3e4fdb76aa0d5a4f034d9fe8889e8c798425d8c0a452688277002b7f09ea7d0")
+
+ conflicts("platform=darwin", msg="Currently only packaged for Linux")
+ conflicts("platform=windows", msg="Currently only packaged for Linux")
+
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+
+ with default_args(type="build"):
+ depends_on("gmake")
+ depends_on("kbproto")
+ depends_on("libsecret")
+ depends_on("libx11")
+ depends_on("libxau")
+ depends_on("libxcb")
+ depends_on("libxdmcp")
+ depends_on("libxkbfile")
+ depends_on("pkg-config")
+ depends_on("xproto")
+
+ depends_on("npm@10.8.2:")
+ depends_on("yarn@1.7.0:1")
+
+ # required by node-gyp ^9.0.0: https://github.com/eclipse-theia/theia/blob/v1.59.0/package.json#L45
+ # https://github.com/nodejs/node-gyp/tree/v9.0.0?tab=readme-ov-file#on-unix
+ depends_on("python@3.7:3.10")
+
+ with default_args(type="run"):
+ depends_on("git@2.11.0:")
+ # https://github.com/microsoft/vscode/blob/1.98.2/.nvmrc
+ depends_on("node-js@20.18.2:20")
+
+ def install(self, spec, prefix):
+ yarn = which("yarn", required=True)
+ yarn()
+ yarn("build")
+ yarn("download:plugins")
+ yarn("package:applications")
+
+ mkdirp(prefix.bin)
+ install("applications/electron/dist/TheiaIDE.AppImage", prefix.bin.join("theia-ide"))
diff --git a/var/spack/repos/builtin/packages/thrift/package.py b/var/spack/repos/builtin/packages/thrift/package.py
index 5c0704bf26a..e6c418f9197 100644
--- a/var/spack/repos/builtin/packages/thrift/package.py
+++ b/var/spack/repos/builtin/packages/thrift/package.py
@@ -2,18 +2,18 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+from spack.build_systems.autotools import AutotoolsBuilder
+from spack.build_systems.cmake import CMakeBuilder
from spack.package import *
-from spack.pkg.builtin.boost import Boost
-class Thrift(Package):
+class Thrift(CMakePackage, AutotoolsPackage):
"""Software framework for scalable cross-language services development.
Thrift combines a software stack with a code generation engine to
build services that work efficiently and seamlessly between C++,
Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,
JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.
-
"""
homepage = "https://thrift.apache.org"
@@ -25,6 +25,7 @@ class Thrift(Package):
license("Apache-2.0")
+ version("0.21.0", sha256="9a24f3eba9a4ca493602226c16d8c228037db3b9291c6fc4019bfe3bd39fc67c")
version("0.18.1", sha256="04c6f10e5d788ca78e13ee2ef0d2152c7b070c0af55483d6b942e29cff296726")
version("0.17.0", sha256="b272c1788bb165d99521a2599b31b97fa69e5931d099015d91ae107a0b0cc58f")
version("0.16.0", sha256="f460b5c1ca30d8918ff95ea3eb6291b3951cf518553566088f3f2be8981f6209")
@@ -34,45 +35,58 @@ class Thrift(Package):
version("0.10.0", sha256="2289d02de6e8db04cbbabb921aeb62bfe3098c4c83f36eec6c31194301efa10b")
version("0.9.3", sha256="b0740a070ac09adde04d43e852ce4c320564a292f26521c46b78e0641564969e")
- variant("pic", default=True, description="Build position independent code")
- variant("c", default=True, description="Build support for C-family languages")
+ variant("openssl", default=False, description="Build with OpenSSL")
+ variant("cpp", default=True, description="Build C++ library")
+ with when("+cpp"):
+ variant("shared", default=True, description="Build shared libraries")
+ variant("libevent", default=False, description="Build with libevent support")
+ variant("qt5", default=False, description="Build with Qt5 support")
+ variant("zlib", default=False, description="Build with ZLIB support")
+ variant("c_glib", default=False, description="Build C (GLib) library")
variant("java", default=False, description="Build support for java")
+ variant("javascript", default=False, description="Build Javascript library")
+ variant("nodejs", default=False, description="Build NodeJS library")
variant("python", default=True, description="Build support for python")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
+ build_system("cmake", "autotools", default="autotools")
- depends_on("pkgconfig", type="build")
- depends_on("autoconf", type="build")
- depends_on("automake", type="build")
- depends_on("libtool", type="build")
- depends_on("boost@1.53:")
+ with default_args(type="build"):
+ depends_on("c")
+ depends_on("cxx")
- # 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("bison", type="build")
- depends_on("flex", type="build")
- depends_on("openssl")
+ depends_on("pkgconfig")
+ depends_on("bison")
+ depends_on("flex")
- # Variant dependencies
- depends_on("zlib-api", when="+c")
- depends_on("libevent", when="+c")
+ with when("build_system=cmake"):
+ depends_on("cmake@3.4:", when="@0.13:")
+ depends_on("cmake@3.1:", when="@0.11:")
+ depends_on("cmake@2.8.12:")
- depends_on("java@7:", when="+java")
- depends_on("ant", when="+java")
+ with when("build_system=autotools"):
+ depends_on("autoconf")
+ depends_on("automake")
+ depends_on("libtool")
- 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")
- depends_on("py-twisted", type=("build", "run"), when="+python")
- depends_on("py-zope-interface", type=("build", "run"), when="+python")
- depends_on("py-pure-sasl", type=("build", "run"), when="+python")
- depends_on("scons", type=("build", "run"), when="+python")
- depends_on("gmake", type="build")
+ depends_on("glib@2:", when="+c_glib")
+ depends_on("openssl", when="+openssl")
+ depends_on("libevent@2:", when="+libevent")
+ depends_on("qt@5", when="+qt5")
+ depends_on("zlib-api@1.2.3:", when="+zlib")
+
+ with when("+java"):
+ depends_on("ant@1.8:", type="build")
+ depends_on("gradle", type="build")
+ depends_on("java@7:")
+
+ depends_on("npm", when="+javascript", type="build")
+ depends_on("npm", when="+nodejs", type="build")
+
+ with when("+python"):
+ extends("python")
+ depends_on("py-pip", type="build")
+ depends_on("py-setuptools", type="build")
+ depends_on("py-six@1.7.2:", type=("build", "run"))
patch(
"https://github.com/apache/thrift/pull/2511.patch?full_index=1",
@@ -80,32 +94,64 @@ class Thrift(Package):
when="@0.16.0",
)
- def setup_build_environment(self, env):
- if "+pic" in self.spec:
- env.append_flags("CFLAGS", self.compiler.cc_pic_flag)
- env.append_flags("CXXFLAGS", self.compiler.cxx_pic_flag)
- def install(self, spec, prefix):
- env["PY_PREFIX"] = prefix
+class CMakeBuilder(CMakeBuilder):
+ def setup_build_environment(self, env: EnvironmentModifications):
+ # Don't install extensions to /usr
+ env.set("PY_PREFIX", self.prefix)
+ env.set("JAVA_PREFIX", self.prefix)
- # configure options
- options = ["--prefix=%s" % prefix]
+ def cmake_args(self):
+ return [
+ self.define_from_variant("BUILD_JAVASCRIPT", "javascript"),
+ self.define_from_variant("BUILD_NODEJS", "nodejs"),
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define("BUILD_TESTING", False),
+ self.define("WITH_AS3", False),
+ self.define_from_variant("WITH_CPP", "cpp"),
+ self.define_from_variant("WITH_C_GLIB", "c_glib"),
+ self.define_from_variant("WITH_JAVA", "java"),
+ self.define_from_variant("WITH_JAVASCRIPT", "javascript"),
+ self.define_from_variant("WITH_NODEJS", "nodejs"),
+ self.define_from_variant("WITH_PYTHON", "python"),
+ self.define_from_variant("WITH_ZLIB", "zlib"),
+ ]
- options.append("--with-boost=%s" % spec["boost"].prefix)
- options.append("--enable-tests=no")
- options.append("--with-nodejs=no")
- options.append("--with-c=%s" % ("yes" if "+c" in spec else "no"))
- options.append("--with-python=%s" % ("yes" if "+python" in spec else "no"))
- options.append("--with-java=%s" % ("yes" if "+java" in spec else "no"))
- options.append("--with-go=no")
- options.append("--with-lua=no")
- options.append("--with-php=no")
- options.append("--with-kotlin=no")
- options.append("--with-ruby=no")
- options.append("--with-qt4=no")
+class AutotoolsBuilder(AutotoolsBuilder):
+ def setup_build_environment(self, env: EnvironmentModifications):
+ # Don't install extensions to /usr
+ env.set("PY_PREFIX", self.prefix)
+ env.set("JAVA_PREFIX", self.prefix)
- configure(*options)
-
- make()
- make("install")
+ def configure_args(self):
+ return [
+ *self.enable_or_disable("shared"),
+ "--enable-tests=no",
+ *self.with_or_without("cpp"),
+ *self.with_or_without("libevent"),
+ *self.with_or_without("zlib"),
+ *self.with_or_without("qt5"),
+ *self.with_or_without("c_glib"),
+ *self.with_or_without("openssl", "prefix"),
+ *self.with_or_without("java"),
+ "--without-kotlin",
+ "--without-erlang",
+ *self.with_or_without("nodejs"),
+ "--without-nodets",
+ "--without-lua",
+ *self.with_or_without("python"),
+ "--without-py3",
+ "--without-perl",
+ "--without-php",
+ "--without-php_extension",
+ "--without-dart",
+ "--without-ruby",
+ "--without-go",
+ "--without-swift",
+ "--without-rs",
+ "--without-cl",
+ "--without-haxe",
+ "--without-netstd",
+ "--without-d",
+ ]
diff --git a/var/spack/repos/builtin/packages/thunar/package.py b/var/spack/repos/builtin/packages/thunar/package.py
index f290fa2e5a8..09f53d599d5 100644
--- a/var/spack/repos/builtin/packages/thunar/package.py
+++ b/var/spack/repos/builtin/packages/thunar/package.py
@@ -60,7 +60,7 @@ class Thunar(AutotoolsPackage):
depends_on("gtkplus@3.22:")
depends_on("gobject-introspection@1.60:", when="+introspection")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@4.18"):
# Fails to check in xcfe4 include subdirectory for the libxfce4kbd-private-3 tree
env.append_flags("CPPFLAGS", f"-I{self.spec['libxfce4ui'].home.include.xfce4}")
diff --git a/var/spack/repos/builtin/packages/tix/package.py b/var/spack/repos/builtin/packages/tix/package.py
index 5af70e84e2a..1462ea15c16 100644
--- a/var/spack/repos/builtin/packages/tix/package.py
+++ b/var/spack/repos/builtin/packages/tix/package.py
@@ -94,7 +94,7 @@ def test_tcl(self):
def libs(self):
return find_libraries(["libTix{0}".format(self.version)], root=self.prefix, recursive=True)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set TIX_LIBRARY to the directory containing Tix.tcl.
For further info, see:
@@ -105,7 +105,9 @@ def setup_run_environment(self, env):
# python will not be able to find Tix unless TIX_LIBRARY is set.
env.set("TIX_LIBRARY", os.path.dirname(find(self.prefix, "Tix.tcl")[0]))
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set TIX_LIBRARY to the directory containing Tix.tcl.
For further info, see:
diff --git a/var/spack/repos/builtin/packages/tixi/package.py b/var/spack/repos/builtin/packages/tixi/package.py
index f94ce1c0937..7fa8e9a9180 100644
--- a/var/spack/repos/builtin/packages/tixi/package.py
+++ b/var/spack/repos/builtin/packages/tixi/package.py
@@ -56,7 +56,7 @@ def cmake_args(self):
self.define_from_variant("TIXI_ENABLE_FORTRAN", "fortran"),
]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Allow to import tixi3wrapper in python"""
if "+python" in self.spec:
diff --git a/var/spack/repos/builtin/packages/tk/package.py b/var/spack/repos/builtin/packages/tk/package.py
index 4d026369b88..062fcaa23cf 100644
--- a/var/spack/repos/builtin/packages/tk/package.py
+++ b/var/spack/repos/builtin/packages/tk/package.py
@@ -127,7 +127,7 @@ def _find_script_dir(self):
return os.path.dirname(result)
raise RuntimeError("Cannot locate tk.tcl")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
"""Set TK_LIBRARY to the directory containing tk.tcl.
For further info, see:
@@ -138,7 +138,9 @@ def setup_run_environment(self, env):
# python will not be able to find Tk unless TK_LIBRARY is set.
env.set("TK_LIBRARY", self._find_script_dir())
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Set TK_LIBRARY to the directory containing tk.tcl.
For further info, see:
diff --git a/var/spack/repos/builtin/packages/tmalign/package.py b/var/spack/repos/builtin/packages/tmalign/package.py
index 1e5dc71a616..eb358dcf407 100644
--- a/var/spack/repos/builtin/packages/tmalign/package.py
+++ b/var/spack/repos/builtin/packages/tmalign/package.py
@@ -28,6 +28,8 @@ class Tmalign(Package):
variant("fast-math", default=False, description="Enable fast math", when="@20220412:")
+ depends_on("cxx", type="build")
+
with when("@20220412:"):
phases = ["build", "install"]
diff --git a/var/spack/repos/builtin/packages/tmscore/package.py b/var/spack/repos/builtin/packages/tmscore/package.py
index 2426616d202..dc137d9219a 100644
--- a/var/spack/repos/builtin/packages/tmscore/package.py
+++ b/var/spack/repos/builtin/packages/tmscore/package.py
@@ -22,6 +22,8 @@ class Tmscore(Package):
variant("fast-math", default=False, description="Enable fast math")
+ depends_on("cxx", type="build")
+
phases = ["build", "install"]
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/tophat/package.py b/var/spack/repos/builtin/packages/tophat/package.py
index f5117c273c3..ca2ec6a0685 100644
--- a/var/spack/repos/builtin/packages/tophat/package.py
+++ b/var/spack/repos/builtin/packages/tophat/package.py
@@ -37,7 +37,7 @@ def patch(self):
# Newer versions of autoconf hate calling AM_INIT_AUTOMAKE twice
filter_file(r"^AM_INIT_AUTOMAKE$", "", "configure.ac")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CFLAGS", self.compiler.cxx98_flag)
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/totalview/package.py b/var/spack/repos/builtin/packages/totalview/package.py
index 9d15517da48..b41bb38aef1 100644
--- a/var/spack/repos/builtin/packages/totalview/package.py
+++ b/var/spack/repos/builtin/packages/totalview/package.py
@@ -12,7 +12,7 @@ class Totalview(Package):
'."""
homepage = "https://totalview.io"
- maintainers("dshrader", "petertea", "suzannepaterno", "elliebinkley")
+ maintainers("dshrader", "suzannepaterno")
license_required = True
license_comment = "#"
license_files = ["tv_license/license.lic"]
@@ -22,6 +22,42 @@ class Totalview(Package):
# will be the documentation. The architecture-specific tarballs are added
# as resources dependent on the specific architecture used.
+ version(
+ "2025.1-x86-64",
+ sha256="d38952c87c155482ef9cdda08bfc648b127b72eedce085c86375e3cf6e2535ed",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2025.1/totalview_2025.1.13_linux_x86-64.tar",
+ )
+
+ version(
+ "2025.1-powerle",
+ sha256="934f95e9d792b146798ab7533c45518c4a1e6e93033ae6ec86867fd5c8315efa",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2025.1/totalview_2025.1.13_linux_powerle.tar",
+ )
+
+ version(
+ "2025.1-linux-arm64",
+ sha256="843ab88ba43d2078cea65b36a5316d5fef69f33c3a8c19fe8df66563ab72bfb7",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2025.1/totalview_2025.1.13_linux_arm64.tar",
+ )
+
+ version(
+ "2024.4-x86-64",
+ sha256="9735ab672c53397370f41212bc9f5d0e2a5cf63335d812406137b954ba3c4672",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2024.4/totalview_2024.4.2_linux_x86-64.tar",
+ )
+
+ version(
+ "2024.4-powerle",
+ sha256="02741b35a774331f007b590368d776bd76e5ecc2cdd693b8518975cfc0d1db57",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2024.4/totalview_2024.4.2_linux_powerle.tar",
+ )
+
+ version(
+ "2024.4-linux-arm64",
+ sha256="0eb74718d86923d9fefed006b21cecad678355554b3295e0899b7ed9aafd388d",
+ url="https://dslwuu69twiif.cloudfront.net/totalview/2024.4/totalview_2024.4.2_linux_arm64.tar",
+ )
+
version(
"2024.3-x86-64",
sha256="fb47c5a5abc6ad0e3e7cff1a346037387fa471c3a5cb46b6cdbe7f8a10aff2a7",
@@ -76,7 +112,7 @@ class Totalview(Package):
url="https://dslwuu69twiif.cloudfront.net/totalview/2024.1/totalview_2024.1.21_linux_arm64.tar",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path(
"PATH",
join_path(self.prefix, "toolworks", "totalview.{0}".format(self.version), "bin"),
diff --git a/var/spack/repos/builtin/packages/toybox/package.py b/var/spack/repos/builtin/packages/toybox/package.py
index 714f8420d6f..dbbdf2e3035 100644
--- a/var/spack/repos/builtin/packages/toybox/package.py
+++ b/var/spack/repos/builtin/packages/toybox/package.py
@@ -62,11 +62,11 @@ class Toybox(MakefilePackage):
when="@=0.7.4",
)
- def setup_build_environment(self, env):
- env.set("NOSTRIP", 1)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("NOSTRIP", "1")
if not self.spec.satisfies("@=0.8.9"):
- env.set("V", 1) # Verbose
+ env.set("V", "1") # Verbose
if self.spec.satisfies("+static"):
env.append_flags("LDFLAGS", "--static")
diff --git a/var/spack/repos/builtin/packages/tpm2-tss/package.py b/var/spack/repos/builtin/packages/tpm2-tss/package.py
index 198a550465a..0717aa607f5 100644
--- a/var/spack/repos/builtin/packages/tpm2-tss/package.py
+++ b/var/spack/repos/builtin/packages/tpm2-tss/package.py
@@ -31,12 +31,12 @@ class Tpm2Tss(AutotoolsPackage):
depends_on("libgcrypt", when="@:2.4.2")
@when("@:2.4.2")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("ACLOCAL_PATH", self.spec["libgcrypt"].prefix.share.aclocal)
env.prepend_path("ACLOCAL_PATH", self.spec["autoconf-archive"].prefix.share.aclocal)
@when("@3.0.0:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("ACLOCAL_PATH", self.spec["autoconf-archive"].prefix.share.aclocal)
def autoreconf(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/transdecoder/package.py b/var/spack/repos/builtin/packages/transdecoder/package.py
index 0d019a98f67..09731f8f0b4 100644
--- a/var/spack/repos/builtin/packages/transdecoder/package.py
+++ b/var/spack/repos/builtin/packages/transdecoder/package.py
@@ -35,6 +35,6 @@ def install(self, spec, prefix):
install_tree("PerlLib", prefix.PerlLib)
install_tree("util", prefix.util)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
env.prepend_path("PATH", self.prefix.util)
diff --git a/var/spack/repos/builtin/packages/tree-sitter/package.py b/var/spack/repos/builtin/packages/tree-sitter/package.py
index d4ae97486b3..4ffe6aadba0 100644
--- a/var/spack/repos/builtin/packages/tree-sitter/package.py
+++ b/var/spack/repos/builtin/packages/tree-sitter/package.py
@@ -18,6 +18,16 @@ class TreeSitter(MakefilePackage):
license("MIT")
+ version("0.25.3", sha256="862fac52653bc7bc9d2cd0630483e6bdf3d02bcd23da956ca32663c4798a93e3")
+ version("0.25.2", sha256="26791f69182192fef179cd58501c3226011158823557a86fe42682cb4a138523")
+ version("0.25.1", sha256="99a2446075c2edf60e82755c48415d5f6e40f2d9aacb3423c6ca56809b70fe59")
+ version("0.25.0", sha256="3729e98e54a41a4c03f4f6c0be580d14ed88c113d75acf15397b16e05cf91129")
+ version("0.24.7", sha256="7cbc13c974d6abe978cafc9da12d1e79e07e365c42af75e43ec1b5cdc03ed447")
+ version("0.24.6", sha256="03c7ee1e6f9f4f3821fd4af0ae06e1da60433b304a73ff92ee9694933009121a")
+ version("0.24.5", sha256="b5ac48acf5a04fd82ccd4246ad46354d9c434be26c9606233917549711e4252c")
+ version("0.24.4", sha256="d704832a6bfaac8b3cbca3b5d773cad613183ba8c04166638af2c6e5dfb9e2d2")
+ version("0.24.3", sha256="0a8d0cf8e09caba22ed0d8439f7fa1e3d8453800038e43ccad1f34ef29537da1")
+ version("0.24.2", sha256="199da041ac7ef62bccdda9b7bec28aafa073f7eea2677680aa7992d503c9cc64")
version("0.22.6", sha256="e2b687f74358ab6404730b7fb1a1ced7ddb3780202d37595ecd7b20a8f41861f")
version("0.22.5", sha256="6bc22ca7e0f81d77773462d922cf40b44bfd090d92abac75cb37dbae516c2417")
version("0.22.4", sha256="919b750da9af1260cd989498bc84c63391b72ee2aa2ec20fc84882544eb7a229")
@@ -40,3 +50,10 @@ class TreeSitter(MakefilePackage):
def edit(self, spec, prefix):
env["PREFIX"] = prefix
+
+ # Starting from 0.25.0 endianness is taken into account using system headers
+ # https://github.com/tree-sitter/tree-sitter/pull/3740
+ # but GLIBC provides them according to some defines that changed over time.
+ # https://www.sourceware.org/glibc/wiki/Release/2.20#Deprecation_of__BSD_SOURCE_and__SVID_SOURCE_feature_macros
+ if spec.satisfies("@0.25: ^glibc@:2.19"):
+ filter_file("-D_DEFAULT_SOURCE", "-D_BSD_SOURCE", "Makefile")
diff --git a/var/spack/repos/builtin/packages/trilinos-catalyst-ioss-adapter/package.py b/var/spack/repos/builtin/packages/trilinos-catalyst-ioss-adapter/package.py
index f11c2ef02c5..fa166094c62 100644
--- a/var/spack/repos/builtin/packages/trilinos-catalyst-ioss-adapter/package.py
+++ b/var/spack/repos/builtin/packages/trilinos-catalyst-ioss-adapter/package.py
@@ -39,7 +39,7 @@ class TrilinosCatalystIossAdapter(CMakePackage):
"ParaViewCatalystIossAdapter",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.python)
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-fpe-exceptions.patch b/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-fpe-exceptions.patch
new file mode 100644
index 00000000000..7470a720000
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-fpe-exceptions.patch
@@ -0,0 +1,122 @@
+diff --git a/packages/stk/stk_util/stk_util/util/FPExceptions.hpp b/packages/stk/stk_util/stk_util/util/FPExceptions.hpp
+index e2f94a533d0..b539aa8a7dd 100644
+--- a/packages/stk/stk_util/stk_util/util/FPExceptions.hpp
++++ b/packages/stk/stk_util/stk_util/util/FPExceptions.hpp
+@@ -14,7 +14,7 @@
+ namespace stk {
+ namespace util {
+
+-constexpr bool have_errno()
++inline bool have_errno()
+ {
+ #ifdef STK_HAVE_FP_ERRNO
+ return math_errhandling & MATH_ERRNO;
+@@ -23,7 +23,7 @@ constexpr bool have_errno()
+ #endif
+ }
+
+-constexpr bool have_errexcept()
++inline bool have_errexcept()
+ {
+ #ifdef STK_HAVE_FP_EXCEPT
+ return math_errhandling & MATH_ERREXCEPT;
+@@ -38,7 +38,7 @@ std::string get_fe_except_string(int fe_except_bitmask);
+
+ inline void clear_fp_errors()
+ {
+- if constexpr (have_errexcept())
++ if (have_errexcept())
+ {
+ // experimental results show calling std::feclearexcept is *very*
+ // expensive, so dont call it unless needed.
+@@ -46,7 +46,7 @@ inline void clear_fp_errors()
+ {
+ std::feclearexcept(FE_EXCEPT_CHECKS);
+ }
+- } else if constexpr (have_errno())
++ } else if (have_errno())
+ {
+ errno = 0;
+ }
+@@ -54,7 +54,7 @@ inline void clear_fp_errors()
+
+ inline void throw_or_warn_on_fp_error(const char* fname = nullptr, bool warn=false, std::ostream& os = std::cerr)
+ {
+- if constexpr (have_errexcept())
++ if (have_errexcept())
+ {
+ int fe_except_bitmask = std::fetestexcept(FE_EXCEPT_CHECKS);
+ if (fe_except_bitmask != 0)
+@@ -68,7 +68,7 @@ inline void throw_or_warn_on_fp_error(const char* fname = nullptr, bool warn=fal
+ STK_ThrowRequireMsg(fe_except_bitmask == 0, msg);
+ }
+ }
+- } else if constexpr (have_errno())
++ } else if (have_errno())
+ {
+ if (errno != 0)
+ {
+diff --git a/packages/stk/stk_util/stk_util/util/PairIter.hpp b/packages/stk/stk_util/stk_util/util/PairIter.hpp
+index e468dfff0af..edc9b62f1be 100644
+--- a/packages/stk/stk_util/stk_util/util/PairIter.hpp
++++ b/packages/stk/stk_util/stk_util/util/PairIter.hpp
+@@ -35,6 +35,7 @@
+ #ifndef stk_util_util_PairIter_hpp
+ #define stk_util_util_PairIter_hpp
+
++#include
+ #include
+ #include
+
+diff --git a/packages/stk/stk_util/stk_util/util/ReportHandler.hpp b/packages/stk/stk_util/stk_util/util/ReportHandler.hpp
+index e7ed6ca6b23..c632361a3a6 100644
+--- a/packages/stk/stk_util/stk_util/util/ReportHandler.hpp
++++ b/packages/stk/stk_util/stk_util/util/ReportHandler.hpp
+@@ -40,7 +40,6 @@
+ #include // for operator+, allocator, string, char_traits
+ #include
+
+-#include "stk_util/diag/String.hpp"
+ #include "stk_util/stk_kokkos_macros.h" // for STK_FUNCTION
+
+ #ifdef STK_ENABLE_GPU_BUT_NO_RDC
+@@ -266,7 +265,7 @@ class is_valid_throw_condition
+
+ public:
+ static constexpr bool value =
+- !is_same_as_any::value && !is_string_literal::value;
++ !is_same_as_any::value && !is_string_literal::value;
+ };
+ template
+ inline auto eval_test_condition(const T& val)
+diff --git a/packages/stk/stk_util/stk_util/util/concat_variable_name.cpp b/packages/stk/stk_util/stk_util/util/concat_variable_name.cpp
+index c322a06fd41..a6fecf922be 100644
+--- a/packages/stk/stk_util/stk_util/util/concat_variable_name.cpp
++++ b/packages/stk/stk_util/stk_util/util/concat_variable_name.cpp
+@@ -34,7 +34,6 @@
+
+ #include "stk_util/util/concat_variable_name.hpp"
+ #include // for size_t
+-#include "stk_util/util/ReportHandler.hpp"
+
+ namespace stk {
+ namespace util {
+@@ -60,6 +59,5 @@ namespace util {
+ return false;
+ }
+ }
+-
+ }
+ }
+diff --git a/packages/stk/stk_util/stk_util/util/concat_variable_name.hpp b/packages/stk/stk_util/stk_util/util/concat_variable_name.hpp
+index 997accb9943..73eb2ae9b36 100644
+--- a/packages/stk/stk_util/stk_util/util/concat_variable_name.hpp
++++ b/packages/stk/stk_util/stk_util/util/concat_variable_name.hpp
+@@ -36,7 +36,6 @@
+ #define STK_UTIL_UTIL_CONCAT_VARIABLE_NAME_H
+
+ #include // for string
+-#include
+ namespace stk {
+ namespace util {
+ /*!
diff --git a/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-size_t.patch b/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-size_t.patch
new file mode 100644
index 00000000000..9a1cc0dfddc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trilinos/16-1-0-stk-size_t.patch
@@ -0,0 +1,19 @@
+diff --git a/packages/stk/stk_util/stk_util/parallel/ReceiveCounter.hpp b/packages/stk/stk_util/stk_util/parallel/ReceiveCounter.hpp
+index ad1232b5bf7..daf3329969b 100644
+--- a/packages/stk/stk_util/stk_util/parallel/ReceiveCounter.hpp
++++ b/packages/stk/stk_util/stk_util/parallel/ReceiveCounter.hpp
+@@ -36,6 +36,7 @@
+ #define stk_util_parallel_ReceiveCounter_hpp
+
+ #include
++#include
+
+ #include "stk_util/parallel/Parallel.hpp" // for MPI
+
+@@ -92,4 +93,4 @@ std::vector get_send_counts(std::vector< std::vector > sendLists, size_
+ }
+
+ } // namespace
+-#endif
+\ No newline at end of file
++#endif
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 9a95a8df89b..fb0f91f0f7e 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -418,6 +418,8 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
# External Kokkos
with when("@14.4: +kokkos"):
+ depends_on("kokkos~cuda", when="~cuda")
+ depends_on("kokkos~rocm", when="~rocm")
depends_on("kokkos+wrapper", when="+wrapper")
depends_on("kokkos~wrapper", when="~wrapper")
depends_on("kokkos+cuda_relocatable_device_code~shared", when="+cuda_rdc")
@@ -425,12 +427,12 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
depends_on("kokkos-kernels~shared", when="+cuda_rdc")
depends_on("kokkos-kernels~shared", when="+rocm_rdc")
depends_on("kokkos~complex_align")
- depends_on("kokkos@=4.5.01", when="@master:")
+ depends_on("kokkos@=4.6.00", when="@master:")
depends_on("kokkos@=4.5.01", when="@16.1")
depends_on("kokkos@=4.3.01", when="@16.0")
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.5.01", when="@master:")
+ depends_on("kokkos-kernels@=4.6.00", when="@master:")
depends_on("kokkos-kernels@=4.5.01", when="@16.1")
depends_on("kokkos-kernels@=4.3.01", when="@16.0")
depends_on("kokkos-kernels@=4.2.01", when="@15.1:15")
@@ -554,6 +556,13 @@ class Trilinos(CMakePackage, CudaPackage, ROCmPackage):
# https://github.com/trilinos/Trilinos/pull/11600
patch("13.4.1-patch11600.patch", when="@13.4.1 %oneapi@2025:")
+ # https://github.com/trilinos/Trilinos/pull/13921
+ patch("16-1-0-stk-fpe-exceptions.patch", when="@=16.1.0 +stk platform=darwin")
+
+ # https://github.com/trilinos/Trilinos/issues/13916 and
+ # https://github.com/trilinos/Trilinos/pull/13921
+ patch("16-1-0-stk-size_t.patch", when="@=16.1.0 +stk")
+
def flag_handler(self, name, flags):
spec = self.spec
is_cce = spec.satisfies("%cce")
@@ -612,7 +621,9 @@ def url_for_version(self, version):
url = "https://github.com/trilinos/Trilinos/archive/refs/tags/trilinos-release-{0}.tar.gz"
return url.format(version.dashed)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
if self.spec.satisfies("@:13.1.0 +cuda"):
# older releases of Trilinos doesn't perform the memory fence so
# it relies on blocking CUDA kernel launch. This is needed
@@ -626,7 +637,7 @@ def kokkos_cxx(self) -> str:
# Assumes build-time globals have been set already
return spack_cxx
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
if "+cuda" in spec and "+wrapper" in spec:
if "+mpi" in spec:
@@ -1112,7 +1123,7 @@ def filter_python(self):
)
filter_file(r"-lpytrilinos", "", "%s/Makefile.export.Trilinos" % self.prefix.include)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+exodus" in self.spec:
env.prepend_path("PYTHONPATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/trinity/package.py b/var/spack/repos/builtin/packages/trinity/package.py
index a776a4dba3b..e4a5cdc694b 100644
--- a/var/spack/repos/builtin/packages/trinity/package.py
+++ b/var/spack/repos/builtin/packages/trinity/package.py
@@ -118,9 +118,9 @@ def install(self, spec, prefix):
force_remove(join_path(prefix.bin, "trinity-plugins", "seqtk-trinity-0.0.2", ".gitignore"))
force_remove(join_path(prefix.bin, "trinity-plugins", "slclust", "bin", ".hidden"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CXXFLAGS", self.compiler.openmp_flag)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("TRINITY_HOME", self.prefix.bin)
env.prepend_path("PATH", self.prefix.bin.util)
diff --git a/var/spack/repos/builtin/packages/trivy/package.py b/var/spack/repos/builtin/packages/trivy/package.py
index 9b33b023a14..2bf541a6095 100644
--- a/var/spack/repos/builtin/packages/trivy/package.py
+++ b/var/spack/repos/builtin/packages/trivy/package.py
@@ -15,6 +15,7 @@ class Trivy(GoPackage):
license("Apache-2.0", checked_by="RobertMaaskant")
+ version("0.61.1", sha256="f6ad43e008c008d67842c9e2b4af80c2e96854db8009fba48fc37b4f9b15f59b")
version("0.61.0", sha256="1e97b1b67a4c3aee9c567534e60355033a58ce43a3705bdf198d7449d53b6979")
depends_on("go@1.24:", type="build")
diff --git a/var/spack/repos/builtin/packages/turbine/package.py b/var/spack/repos/builtin/packages/turbine/package.py
index d0f21848a3c..40371edbbe6 100644
--- a/var/spack/repos/builtin/packages/turbine/package.py
+++ b/var/spack/repos/builtin/packages/turbine/package.py
@@ -40,7 +40,7 @@ class Turbine(AutotoolsPackage):
depends_on("libtool", type="build", when="@master")
depends_on("m4", type=("build", "run"))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("CC", spec["mpi"].mpicc)
diff --git a/var/spack/repos/builtin/packages/turbomole/package.py b/var/spack/repos/builtin/packages/turbomole/package.py
index 0e71184f366..66c50d0ea66 100644
--- a/var/spack/repos/builtin/packages/turbomole/package.py
+++ b/var/spack/repos/builtin/packages/turbomole/package.py
@@ -115,7 +115,7 @@ def install(self, spec, prefix):
install("mpirun_scripts/ricc2", join_path(dst, "mpirun_scripts"))
install("mpirun_scripts/ridft", join_path(dst, "mpirun_scripts"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
molecontrol_version = "MoleControl_2.5"
tm_arch = self.get_tm_arch()
diff --git a/var/spack/repos/builtin/packages/typhon/package.py b/var/spack/repos/builtin/packages/typhon/package.py
index 31eb959840b..08542b1e6b0 100644
--- a/var/spack/repos/builtin/packages/typhon/package.py
+++ b/var/spack/repos/builtin/packages/typhon/package.py
@@ -28,6 +28,6 @@ class Typhon(CMakePackage):
depends_on("mpi")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("%fj"):
env.set("LDFLAGS", "--linkfortran")
diff --git a/var/spack/repos/builtin/packages/ucsc-bedclip/package.py b/var/spack/repos/builtin/packages/ucsc-bedclip/package.py
index af4c2eb11e2..9bc4bab6a6c 100644
--- a/var/spack/repos/builtin/packages/ucsc-bedclip/package.py
+++ b/var/spack/repos/builtin/packages/ucsc-bedclip/package.py
@@ -25,7 +25,7 @@ class UcscBedclip(Package):
depends_on("openssl")
depends_on("zlib-api")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MYSQLLIBS", "-lmysqlclient")
env.set("L", "-lssl")
env.set("BINDIR", "bin")
diff --git a/var/spack/repos/builtin/packages/ucsc-bedgraphtobigwig/package.py b/var/spack/repos/builtin/packages/ucsc-bedgraphtobigwig/package.py
index 1906f41e235..fd63aae9d41 100644
--- a/var/spack/repos/builtin/packages/ucsc-bedgraphtobigwig/package.py
+++ b/var/spack/repos/builtin/packages/ucsc-bedgraphtobigwig/package.py
@@ -29,7 +29,7 @@ class UcscBedgraphtobigwig(Package):
depends_on("mysql-client")
conflicts("^mysql@8.0.0:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MYSQLLIBS", "-lmysqlclient")
env.set("L", "-lssl")
env.set("BINDIR", "bin")
diff --git a/var/spack/repos/builtin/packages/ufs-utils/package.py b/var/spack/repos/builtin/packages/ufs-utils/package.py
index 3dcd667eef0..224c925306f 100644
--- a/var/spack/repos/builtin/packages/ufs-utils/package.py
+++ b/var/spack/repos/builtin/packages/ufs-utils/package.py
@@ -75,5 +75,5 @@ def cmake_args(self):
"-DMPI_Fortran_COMPILER=%s" % self.spec["mpi"].mpifc,
]
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("ESMFMKFILE", join_path(self.spec["esmf"].prefix.lib, "esmf.mk"))
diff --git a/var/spack/repos/builtin/packages/ufs-weather-model/package.py b/var/spack/repos/builtin/packages/ufs-weather-model/package.py
index 644b529bf9d..44156bfb205 100644
--- a/var/spack/repos/builtin/packages/ufs-weather-model/package.py
+++ b/var/spack/repos/builtin/packages/ufs-weather-model/package.py
@@ -163,7 +163,7 @@ class UfsWeatherModel(CMakePackage):
conflicts("%gcc@:8", when="@develop")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
spec = self.spec
env.set("CC", spec["mpi"].mpicc)
env.set("CXX", spec["mpi"].mpicxx)
diff --git a/var/spack/repos/builtin/packages/umpire/package.py b/var/spack/repos/builtin/packages/umpire/package.py
index bd2d5073c0d..841d0027c84 100644
--- a/var/spack/repos/builtin/packages/umpire/package.py
+++ b/var/spack/repos/builtin/packages/umpire/package.py
@@ -18,11 +18,17 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
git = "https://github.com/LLNL/Umpire.git"
tags = ["radiuss", "e4s"]
- maintainers("davidbeckingsale", "adrienbernede")
+ maintainers("adrienbernede", "davidbeckingsale", "kab163")
license("MIT")
version("develop", branch="develop", submodules=False)
+ version(
+ "2025.03.0",
+ tag="v2025.03.0",
+ commit="1ed0669c57f041baa1f1070693991c3a7a43e7ee",
+ submodules=False,
+ )
version(
"2024.07.0",
tag="v2024.07.0",
@@ -189,6 +195,7 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
variant("c", default=True, description="Build C API")
variant("mpi", default=False, description="Enable MPI support")
variant("ipc_shmem", default=False, description="Enable POSIX shared memory")
+ variant("mpi3_shmem", default=False, description="Enable MPI3 shared memory")
variant(
"sqlite_experimental",
default=False,
@@ -229,6 +236,7 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
depends_on("cmake@3.8:", type="build")
depends_on("blt", type="build")
+ depends_on("blt@0.7.0:", type="build", when="@2025.03.0:")
depends_on("blt@0.6.2:", type="build", when="@2024.02.1:")
depends_on("blt@0.6.1", type="build", when="@2024.02.0")
depends_on("blt@0.5.3", type="build", when="@2023.06.0")
@@ -256,9 +264,9 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
depends_on("sqlite", when="+sqlite_experimental")
depends_on("mpi", when="+mpi")
- depends_on("fmt@9.1:", when="@2024.02.0:")
+ depends_on("fmt@9.1:11.0", when="@2024.02.0:")
# For some reason, we need c++ 17 explicitly only with intel
- depends_on("fmt@9.1: cxxstd=17", when="@2024.02.0: %intel@19.1")
+ depends_on("fmt@9.1:11.0 cxxstd=17", when="@2024.02.0: %intel@19.1")
with when("@5.0.0:"):
with when("+cuda"):
@@ -291,6 +299,9 @@ class Umpire(CachedCMakePackage, CudaPackage, ROCmPackage):
"+rocm", when="+omptarget", msg="Cant support both rocm and openmp device backends at once"
)
conflicts("+ipc_shmem", when="@:5.0.1")
+ conflicts("+mpi3_shmem", when="@:2024.07.0")
+ conflicts("+mpi3_shmem", when="~mpi")
+ conflicts("+ipc_shmem", when="+mpi3_shmem")
conflicts("+sqlite_experimental", when="@:6.0.0")
conflicts("+sanitizer_tests", when="~asan")
@@ -386,6 +397,9 @@ def initconfig_mpi_entries(self):
entries = super().initconfig_mpi_entries()
entries.append(cmake_cache_option("ENABLE_MPI", spec.satisfies("+mpi")))
+ entries.append(
+ cmake_cache_option("UMPIRE_ENABLE_MPI3_SHARED_MEMORY", spec.satisfies("+mpi3_shmem"))
+ )
return entries
@@ -486,7 +500,7 @@ def initconfig_package_entries(self):
def cmake_args(self):
return []
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
for library in ["lib", "lib64"]:
lib_path = join_path(self.prefix, library)
if os.path.exists(lib_path):
diff --git a/var/spack/repos/builtin/packages/unibilium/package.py b/var/spack/repos/builtin/packages/unibilium/package.py
index 27983984fac..6e9df57159f 100644
--- a/var/spack/repos/builtin/packages/unibilium/package.py
+++ b/var/spack/repos/builtin/packages/unibilium/package.py
@@ -5,24 +5,37 @@
from spack.package import *
-class Unibilium(Package):
+class Unibilium(MakefilePackage, AutotoolsPackage):
"""A terminfo parsing library"""
- homepage = "https://github.com/mauke/unibilium"
- url = "https://github.com/mauke/unibilium/archive/v2.0.0.tar.gz"
+ homepage = "https://github.com/neovim/unibilium/"
+ url = "https://github.com/neovim/unibilium/archive/v2.1.2.tar.gz"
license("LGPL-3.0-or-later")
+ version("2.1.2", sha256="370ecb07fbbc20d91d1b350c55f1c806b06bf86797e164081ccc977fc9b3af7a")
+ version("2.1.1", sha256="6f0ee21c8605340cfbb458cbd195b4d074e6d16dd0c0e12f2627ca773f3cabf1")
+ version("2.1.0", sha256="05bf97e357615e218126f7ac086e7056a23dc013cfac71643b50a18ad390c7d4")
version("2.0.0", sha256="78997d38d4c8177c60d3d0c1aa8c53fd0806eb21825b7b335b1768d7116bc1c1")
version("1.2.0", sha256="623af1099515e673abfd3cae5f2fa808a09ca55dda1c65a7b5c9424eb304ead8")
- depends_on("c", type="build") # generated
+ depends_on("c", type="build")
+
+ build_system(
+ conditional("makefile", when="@:2.1.1"),
+ conditional("autotools", when="@2.1.2:"),
+ default="autotools",
+ )
depends_on("gmake", type="build")
depends_on("libtool", type="build")
depends_on("perl", type="build")
depends_on("gzip", type="build")
+ with when("build_system=autotools"):
+ depends_on("autoconf", when="@2.1.2:", type="build")
+ depends_on("automake", when="@2.1.2:", type="build")
+
def install(self, spec, prefix):
make("PREFIX=" + prefix)
make("install", "PREFIX=" + prefix)
diff --git a/var/spack/repos/builtin/packages/unifyfs/package.py b/var/spack/repos/builtin/packages/unifyfs/package.py
index 791c2435d68..8e050ff8c9e 100644
--- a/var/spack/repos/builtin/packages/unifyfs/package.py
+++ b/var/spack/repos/builtin/packages/unifyfs/package.py
@@ -104,7 +104,7 @@ def flag_handler(self, name, flags):
flags.append("-std=gnu99")
return (None, None, flags)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# GCC11 generates a bogus array bounds error:
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98266
if "%gcc@11" in self.spec:
diff --git a/var/spack/repos/builtin/packages/unrar/package.py b/var/spack/repos/builtin/packages/unrar/package.py
index 52ed8e00d71..58d7baffd03 100644
--- a/var/spack/repos/builtin/packages/unrar/package.py
+++ b/var/spack/repos/builtin/packages/unrar/package.py
@@ -23,7 +23,7 @@ class Unrar(MakefilePackage):
def edit(self, spec, prefix):
makefile = FileFilter("makefile")
- makefile.filter("LIBFLAGS=-fPIC", "LIBFLAGS={0}".format(self.compiler.cc_pic_flag))
+ makefile.filter("LIBFLAGS=-fPIC", "LIBFLAGS={0}".format(self.compiler.cxx_pic_flag))
makefile.filter("DESTDIR=/usr", "DESTDIR={0}".format(self.prefix))
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/upcxx/package.py b/var/spack/repos/builtin/packages/upcxx/package.py
index fe5fee91e14..3e482ae4681 100644
--- a/var/spack/repos/builtin/packages/upcxx/package.py
+++ b/var/spack/repos/builtin/packages/upcxx/package.py
@@ -177,10 +177,12 @@ def set_variables(self, env):
env.set("UPCXX_NETWORK", "ofi")
env.set("GASNET_SPAWN_CONTROL", "pmi")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
self.set_variables(env)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.set_variables(env)
def setup_dependent_package(self, module, dep_spec):
diff --git a/var/spack/repos/builtin/packages/uqtk/package.py b/var/spack/repos/builtin/packages/uqtk/package.py
index 8d5455ae2d3..2ee8b38aa66 100644
--- a/var/spack/repos/builtin/packages/uqtk/package.py
+++ b/var/spack/repos/builtin/packages/uqtk/package.py
@@ -88,7 +88,7 @@ def cmake_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if "+python" in self.spec:
env.prepend_path("PYTHONPATH", self.prefix)
env.prepend_path("PYTHONPATH", "{0}/PyUQTk".format(self.prefix))
diff --git a/var/spack/repos/builtin/packages/usalign/package.py b/var/spack/repos/builtin/packages/usalign/package.py
index 2176c3766bb..846930adfe0 100644
--- a/var/spack/repos/builtin/packages/usalign/package.py
+++ b/var/spack/repos/builtin/packages/usalign/package.py
@@ -31,6 +31,8 @@ class Usalign(Package):
variant("fast-math", default=False, description="Enable fast math")
+ depends_on("cxx", type="build")
+
phases = ["build", "install"]
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/ut/package.py b/var/spack/repos/builtin/packages/ut/package.py
index a6907006ecb..546a1d5ddb7 100644
--- a/var/spack/repos/builtin/packages/ut/package.py
+++ b/var/spack/repos/builtin/packages/ut/package.py
@@ -17,6 +17,7 @@ class Ut(CMakePackage):
license("BSL-1.0")
version("master", branch="master")
+ version("2.3.1", sha256="e51bf1873705819730c3f9d2d397268d1c26128565478e2e65b7d0abb45ea9b1")
version("2.3.0", sha256="9c07a2b7947cc169fc1713ad462ccc43a704076447893a1fd25bdda5eec4aab6")
version("2.1.1", sha256="016ac5ece1808cd1100be72f90da4fa59ea41de487587a3283c6c981381cc216")
version("2.1.0", sha256="1c9c35c039ad3a9795a278447db6da0a4ec1a1d223bf7d64687ad28f673b7ae8")
diff --git a/var/spack/repos/builtin/packages/utf8proc/package.py b/var/spack/repos/builtin/packages/utf8proc/package.py
index c3600c9bc71..4e32e9c320f 100644
--- a/var/spack/repos/builtin/packages/utf8proc/package.py
+++ b/var/spack/repos/builtin/packages/utf8proc/package.py
@@ -12,6 +12,7 @@ class Utf8proc(CMakePackage):
homepage = "https://juliastrings.github.io/utf8proc/"
url = "https://github.com/JuliaStrings/utf8proc/archive/v2.4.0.tar.gz"
+ version("2.10.0", sha256="6f4f1b639daa6dca9f80bc5db1233e9cbaa31a67790887106160b33ef743f136")
version("2.9.0", sha256="18c1626e9fc5a2e192311e36b3010bfc698078f692888940f1fa150547abb0c1")
version("2.8.0", sha256="a0a60a79fe6f6d54e7d411facbfcc867a6e198608f2cd992490e46f04b1bcecc")
version("2.7.0", sha256="4bb121e297293c0fd55f08f83afab6d35d48f0af4ecc07523ad8ec99aa2b12a1")
diff --git a/var/spack/repos/builtin/packages/util-linux-uuid/package.py b/var/spack/repos/builtin/packages/util-linux-uuid/package.py
index 7287e649ac3..861e46c6c5a 100644
--- a/var/spack/repos/builtin/packages/util-linux-uuid/package.py
+++ b/var/spack/repos/builtin/packages/util-linux-uuid/package.py
@@ -17,6 +17,7 @@ class UtilLinuxUuid(AutotoolsPackage):
license("BSD-3-Clause", checked_by="wdconinc")
+ version("2.41", sha256="c014b5861695b603d0be2ad1e6f10d5838b9d7859e1dd72d01504556817d8a87")
version("2.40.4", sha256="5b3b1435c02ba201ebaa5066bb391965a614b61721155dfb7f7b6569e95b0627")
version("2.40.3", sha256="6d72589a24b7feccdf8db20336bb984f64c7cfc2ceb044ef01cac5dce480284e")
version("2.40.2", sha256="7bec316b713a14c6be1a5721aa0e56a3b6170277329e6e1f1a56013cc91eece0")
diff --git a/var/spack/repos/builtin/packages/util-macros/package.py b/var/spack/repos/builtin/packages/util-macros/package.py
index 7e8b4485a7f..c03e578ee7f 100644
--- a/var/spack/repos/builtin/packages/util-macros/package.py
+++ b/var/spack/repos/builtin/packages/util-macros/package.py
@@ -29,6 +29,8 @@ def url_for_version(self, version):
if self.spec.satisfies("@:1.19"):
return spack.url.substitute_version(self.urls[0].replace("xz", "bz2"), version)
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
"""Adds the ACLOCAL path for autotools."""
env.append_path("ACLOCAL_PATH", self.prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/valgrind/package.py b/var/spack/repos/builtin/packages/valgrind/package.py
index 486d6452be1..4ce8bcc2f03 100644
--- a/var/spack/repos/builtin/packages/valgrind/package.py
+++ b/var/spack/repos/builtin/packages/valgrind/package.py
@@ -26,6 +26,7 @@ class Valgrind(AutotoolsPackage, SourcewarePackage):
license("GPL-2.0-or-later")
version("develop", branch="master")
+ version("3.24.0", sha256="71aee202bdef1ae73898ccf7e9c315134fa7db6c246063afc503aef702ec03bd")
version("3.23.0", sha256="c5c34a3380457b9b75606df890102e7df2c702b9420c2ebef9540f8b5d56264d")
version("3.22.0", sha256="c811db5add2c5f729944caf47c4e7a65dcaabb9461e472b578765dd7bf6d2d4c")
version("3.21.0", sha256="10ce1618bb3e33fad16eb79552b0a3e1211762448a0d7fce11c8a6243b9ac971")
diff --git a/var/spack/repos/builtin/packages/variorum/package.py b/var/spack/repos/builtin/packages/variorum/package.py
index 7649bad47fb..744de69db66 100644
--- a/var/spack/repos/builtin/packages/variorum/package.py
+++ b/var/spack/repos/builtin/packages/variorum/package.py
@@ -16,6 +16,8 @@ class Variorum(CMakePackage):
maintainers("slabasan", "rountree")
+ tags = ["e4s"]
+
license("MIT")
version("dev", branch="dev")
diff --git a/var/spack/repos/builtin/packages/varscan/package.py b/var/spack/repos/builtin/packages/varscan/package.py
index a693e3df377..a52a173fb6f 100644
--- a/var/spack/repos/builtin/packages/varscan/package.py
+++ b/var/spack/repos/builtin/packages/varscan/package.py
@@ -38,6 +38,6 @@ def install(self, spec, prefix):
filter_file("^java", java, script, **kwargs)
filter_file("varscan.jar", join_path(prefix.jar, jar_file), script, **kwargs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("VARSCAN_HOME", self.prefix.jar)
env.set("CLASSPATH", self.prefix.jar)
diff --git a/var/spack/repos/builtin/packages/vasp/package.py b/var/spack/repos/builtin/packages/vasp/package.py
index fab016d467b..0c3afe5d7fd 100644
--- a/var/spack/repos/builtin/packages/vasp/package.py
+++ b/var/spack/repos/builtin/packages/vasp/package.py
@@ -68,6 +68,10 @@ class Vasp(MakefilePackage, CudaPackage):
variant("shmem", default=True, description="Enable use_shmem build flag")
variant("hdf5", default=False, when="@6.2:", description="Enabled HDF5 support")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
+
depends_on("rsync", type="build")
depends_on("blas")
depends_on("lapack")
@@ -322,9 +326,9 @@ def edit(self, spec, prefix):
os.rename(make_include, "makefile.include")
- def setup_build_environment(self, spack_env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+cuda %nvhpc"):
- spack_env.set("NVHPC_CUDA_HOME", self.spec["cuda"].prefix)
+ env.set("NVHPC_CUDA_HOME", self.spec["cuda"].prefix)
def build(self, spec, prefix):
if spec.satisfies("@:6.2"):
diff --git a/var/spack/repos/builtin/packages/vbfnlo/package.py b/var/spack/repos/builtin/packages/vbfnlo/package.py
index 679d7dc6660..25e3015900d 100644
--- a/var/spack/repos/builtin/packages/vbfnlo/package.py
+++ b/var/spack/repos/builtin/packages/vbfnlo/package.py
@@ -44,6 +44,7 @@ class Vbfnlo(AutotoolsPackage):
depends_on("cxx", type="build") # generated
depends_on("fortran", type="build") # generated
+ depends_on("c", type="build")
depends_on("hepmc")
depends_on("gsl")
@@ -57,7 +58,7 @@ class Vbfnlo(AutotoolsPackage):
depends_on("tcsh", type="build")
@when("@2.7.1")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.unset("F77")
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/vcftools/package.py b/var/spack/repos/builtin/packages/vcftools/package.py
index 7190e558091..dc24fd909b7 100644
--- a/var/spack/repos/builtin/packages/vcftools/package.py
+++ b/var/spack/repos/builtin/packages/vcftools/package.py
@@ -82,5 +82,5 @@ def filter_sbang(self):
kwargs = {"ignore_absent": True, "backup": False, "string": False}
filter_file(match, substitute, *files, **kwargs)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PERL5LIB", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/vdt/package.py b/var/spack/repos/builtin/packages/vdt/package.py
index 776f1a36a81..c8b67bb530c 100644
--- a/var/spack/repos/builtin/packages/vdt/package.py
+++ b/var/spack/repos/builtin/packages/vdt/package.py
@@ -14,6 +14,10 @@ class Vdt(CMakePackage):
homepage = "https://github.com/dpiparo/vdt"
url = "https://github.com/dpiparo/vdt/archive/v0.3.9.tar.gz"
+ maintainers("wdconinc")
+
+ version("0.4.6", sha256="1820feae446780763ec8bbb60a0dbcf3ae1ee548bdd01415b1fb905fd4f90c54")
+ version("0.4.5", sha256="3a8962d9200b164ee6802a2c00f988843e7dc0916b9704e4c90db6e0691e967b")
version("0.4.4", sha256="8b1664b45ec82042152f89d171dd962aea9bb35ac53c8eebb35df1cb9c34e498")
version("0.4.3", sha256="705674612ebb5c182b65a8f61f4d173eb7fe7cdeee2235b402541a492e08ace1")
version("0.3.9", sha256="1662d21037a29cae717ee50b73bd177bea79582f4138b7ad11404fc4be4e542e")
diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py
index a9f7a0a5f41..cc6375b0af9 100644
--- a/var/spack/repos/builtin/packages/vecgeom/package.py
+++ b/var/spack/repos/builtin/packages/vecgeom/package.py
@@ -123,6 +123,12 @@ class Vecgeom(CMakePackage, CudaPackage):
sha256="f172b0a9ee1de4931b106d8500d1a60d5688c9bce324cf12ca107ec866a16c56",
when="@1.2.7:1.2.10 +cuda ^cuda@:11",
)
+ # Fix -Wmissing-template-arg-list-after-template-kw
+ patch(
+ "https://gitlab.cern.ch/VecGeom/VecGeom/-/merge_requests/1251.diff",
+ sha256="b9419c6666389b69ee2c9125d10f25b423fce339495413ac4762ae6f32bdea63",
+ when="@:1.2.10 ^apple-clang@17:",
+ )
def std_when(values):
for v in values:
diff --git a/var/spack/repos/builtin/packages/vecmem/package.py b/var/spack/repos/builtin/packages/vecmem/package.py
index 559aeb9907d..ee09691c9bf 100644
--- a/var/spack/repos/builtin/packages/vecmem/package.py
+++ b/var/spack/repos/builtin/packages/vecmem/package.py
@@ -16,6 +16,7 @@ class Vecmem(CMakePackage, CudaPackage):
license("MPL-2.0-no-copyleft-exception")
+ version("1.15.0", sha256="53e03599efd5a22284b62e10338b69345d8188182a12fefe228005069d1ddd74")
version("1.14.0", sha256="3fac19e2766e5f997712b0799bd820f65c17ea9cddcb9e765cbdf214f41c4783")
version("1.13.0", sha256="fc21cea04140e1210c83a32579b0a7194601889b6c895404214ac55ce547342b")
version("1.12.0", sha256="59a5ef061fc9949c3159cb920a717dee7aa1e9a98b3672495200071d3d4b61cf")
@@ -77,7 +78,7 @@ class Vecmem(CMakePackage, CudaPackage):
# and we can choose between always depending on googletest, or using FetchContent
# depends_on("googletest", type="test")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+sycl"):
env.set("SYCLCXX", self.compiler.cxx)
if self.spec.satisfies("%oneapi"):
diff --git a/var/spack/repos/builtin/packages/vep-cache/package.py b/var/spack/repos/builtin/packages/vep-cache/package.py
index a56343969e6..505094af9e1 100644
--- a/var/spack/repos/builtin/packages/vep-cache/package.py
+++ b/var/spack/repos/builtin/packages/vep-cache/package.py
@@ -101,7 +101,7 @@ def vep_cache_config(self, base):
"full_path": join_path(root, cache_dir),
}
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("+env"):
cache = self.vep_cache_config(self.home)
env.set("VEP_OFFLINE", "1")
diff --git a/var/spack/repos/builtin/packages/vep/package.py b/var/spack/repos/builtin/packages/vep/package.py
index 1605bf0e87a..7b0ddbf4cd2 100644
--- a/var/spack/repos/builtin/packages/vep/package.py
+++ b/var/spack/repos/builtin/packages/vep/package.py
@@ -84,7 +84,7 @@ def vep_scripts_path(self):
def vep_installer_path(self):
return f"{self.vep_scripts_path.INSTALL}.pl"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("VEP_HOME", self.home)
if self.spec.satisfies("+bundled_htslib"):
env.prepend_path("PATH", self.vep_lib_path.htslib)
diff --git a/var/spack/repos/builtin/packages/verible/package.py b/var/spack/repos/builtin/packages/verible/package.py
index 21b8f8cbb51..ade08131246 100644
--- a/var/spack/repos/builtin/packages/verible/package.py
+++ b/var/spack/repos/builtin/packages/verible/package.py
@@ -29,10 +29,17 @@ class Verible(Package):
homepage = "https://chipsalliance.github.io/verible"
git = "https://github.com/chipsalliance/verible.git"
+ maintainers("davekeeshan")
+
license("BSD-3-Clause")
version("master", branch="master")
+ version(
+ "0.0.3967",
+ sha256="499cabd69b7c456518550c5c136908d4c3e4d4e75e99a5fab8c5ecba9d2481f9",
+ url="https://github.com/chipsalliance/verible/archive/refs/tags/v0.0-3967-gd0f83bfd.tar.gz",
+ )
version(
"0.0.3946",
sha256="1454b8df8a978c11139b800b229b498c02bb22f8f2b97a21022b2a6f099604af",
@@ -106,8 +113,6 @@ class Verible(Package):
depends_on("cxx", type="build") # generated
- maintainers("davekeeshan")
-
depends_on("flex", type="build")
depends_on("bison", type="build")
depends_on("bazel", type="build")
@@ -116,11 +121,13 @@ class Verible(Package):
@when("@:0.0.3841")
def install(self, spec, prefix):
+ """Install method for versions up to 0.0.3841."""
bazel("build", "-c", "opt", "//...")
bazel("run", "-c", "opt", ":install", "--", prefix.bin)
@when("@0.0.3841:")
def install(self, spec, prefix):
+ """Install method for versions 0.0.3841 and newer."""
mkdirp(prefix.bin)
bash = which("bash")
bazel("build", "-c", "opt", ":install-binaries")
diff --git a/var/spack/repos/builtin/packages/verilator/package.py b/var/spack/repos/builtin/packages/verilator/package.py
index 7226bec81dc..01f311ba970 100644
--- a/var/spack/repos/builtin/packages/verilator/package.py
+++ b/var/spack/repos/builtin/packages/verilator/package.py
@@ -41,6 +41,7 @@ class Verilator(AutotoolsPackage):
version("master", branch="master")
+ version("5.036", sha256="4199964882d56cf6a19ce80c6a297ebe3b0c35ea81106cd4f722342594337c47")
version("5.034", sha256="002da98e316ca6eee40407f5deb7d7c43a0788847d39c90d4d31ddbbc03020e8")
version("5.032", sha256="5a262564b10be8bdb31ff4fb67d77bcf5f52fc1b4e6c88d5ca3264fb481f1e41")
version("5.030", sha256="b9e7e97257ca3825fcc75acbed792b03c3ec411d6808ad209d20917705407eac")
@@ -97,7 +98,7 @@ class Verilator(AutotoolsPackage):
filter_compiler_wrappers("verilated.mk", relative_root="share/verilator/include")
@when("@:5.022")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("VERILATOR_ROOT", self.prefix)
def autoreconf(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/vesta/package.py b/var/spack/repos/builtin/packages/vesta/package.py
index 8f8f0763050..4d51517c784 100644
--- a/var/spack/repos/builtin/packages/vesta/package.py
+++ b/var/spack/repos/builtin/packages/vesta/package.py
@@ -20,7 +20,7 @@ class Vesta(Package):
conflicts("%gcc@:5.3")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix)
env.prepend_path("LD_LIBRARY_PATH", self.prefix)
diff --git a/var/spack/repos/builtin/packages/visit/package.py b/var/spack/repos/builtin/packages/visit/package.py
index c3a5592a963..c2b8535067e 100644
--- a/var/spack/repos/builtin/packages/visit/package.py
+++ b/var/spack/repos/builtin/packages/visit/package.py
@@ -49,7 +49,7 @@ class Visit(CMakePackage):
git = "https://github.com/visit-dav/visit.git"
url = "https://github.com/visit-dav/visit/releases/download/v3.2.1/visit3.2.1.tar.gz"
- tags = ["radiuss"]
+ tags = ["radiuss", "e4s"]
maintainers("cyrush")
license("BSD-3-Clause")
diff --git a/var/spack/repos/builtin/packages/viskores/package.py b/var/spack/repos/builtin/packages/viskores/package.py
new file mode 100644
index 00000000000..d0fdeed025b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/viskores/package.py
@@ -0,0 +1,215 @@
+# Copyright Spack Project Developers. See COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+
+import os
+import sys
+
+from spack.build_systems.cmake import CMakeBuilder
+from spack.package import *
+
+
+class Viskores(CMakePackage, CudaPackage, ROCmPackage):
+ """Viskores is a toolkit of scientific visualization algorithms for emerging
+ processor architectures. Viskores supports the fine-grained concurrency for
+ data analysis and visualization algorithms required to drive extreme scale
+ computing by providing abstract models for data and execution that can be
+ applied to a variety of algorithms across many different processor
+ architectures."""
+
+ homepage = "https://github.com/Viskores/viskores"
+ maintainers("kmorel", "vicentebolea")
+
+ url = "https://github.com/Viskores/Viskores/archive/refs/tags/v1.0.0.tar.gz"
+ git = "https://github.com/Viskores/Viskores.git"
+ tags = ["e4s"]
+
+ test_requires_compiler = True
+
+ version("master", branch="master")
+ version("release", branch="release")
+ version(
+ "1.0.0",
+ sha256="5bff5bbd747b7662bb4630889960371d06fcc5e5a962d974a898d1883f196eba",
+ preferred=True,
+ )
+
+ variant("shared", default=True, description="build shared libs")
+ variant("doubleprecision", default=True, description="enable double precision")
+ variant("logging", default=True, description="build logging support")
+ variant("mpi", default=True, description="build mpi support")
+ variant("rendering", default=True, description="build rendering support")
+ variant("64bitids", default=False, description="enable 64 bits ids")
+ variant("testlib", default=False, description="build test library")
+ variant("fpic", default=False, description="build fpic support")
+ variant("examples", default=False, description="Install builtin examples")
+
+ # Device variants
+ # CudaPackage provides cuda variant
+ # ROCmPackage provides rocm variant
+ variant("kokkos", default=False, description="build using Kokkos backend")
+ variant(
+ "cuda_native", default=True, description="build using native cuda backend", when="+cuda"
+ )
+ variant("openmp", default=(sys.platform != "darwin"), 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("c", type="build")
+ depends_on("cxx", type="build")
+
+ depends_on("cmake@3.12:", type="build") # CMake >= 3.12
+ depends_on("cmake@3.18:", when="+rocm", type="build") # CMake >= 3.18
+
+ conflicts("%gcc@:4.10", msg="viskores requires gcc >= 5. Please install a newer version")
+
+ depends_on("cuda@10.1.0:", when="+cuda_native")
+ depends_on("tbb", when="+tbb")
+ depends_on("mpi", when="+mpi")
+ depends_on("llvm-openmp", when="+openmp %apple-clang")
+
+ # Viskores uses the default Kokkos backend
+ depends_on("kokkos", when="+kokkos")
+ # Viskores native CUDA and Kokkos CUDA backends are not compatible
+ depends_on("kokkos ~cuda", when="+kokkos +cuda +cuda_native")
+ depends_on("kokkos +cuda", when="+kokkos +cuda ~cuda_native")
+ for cuda_arch in CudaPackage.cuda_arch_values:
+ depends_on(
+ "kokkos cuda_arch=%s" % cuda_arch,
+ when="+kokkos +cuda ~cuda_native cuda_arch=%s" % cuda_arch,
+ )
+ # Viskores uses the Kokkos HIP backend.
+ # If Kokkos provides multiple backends, the HIP backend may or
+ # may not be used for Viskores depending on the default selected by Kokkos
+ depends_on("kokkos +rocm", when="+kokkos +rocm")
+ # Propagate AMD GPU target to kokkos for +rocm
+ for amdgpu_value in ROCmPackage.amdgpu_targets:
+ depends_on(
+ "kokkos amdgpu_target=%s" % amdgpu_value,
+ when="+kokkos +rocm amdgpu_target=%s" % amdgpu_value,
+ )
+
+ depends_on("hip@3.7:", when="+rocm")
+ # CUDA thrust is already include in the CUDA pkg
+ depends_on("rocthrust", when="+kokkos+rocm ^cmake@3.24:")
+
+ # It would be better if this could be expressed as a when clause to disable the rocm variant,
+ # but that is not currently possible since when clauses are stacked, not overwritten.
+ conflicts("+rocm", when="+cuda")
+ conflicts("+rocm", when="~kokkos", msg="Viskores does not support HIP without Kokkos")
+
+ # Viskores uses the Kokkos SYCL backend.
+ # If Kokkos provides multiple backends, the SYCL backend may or
+ # may not be used for Viskores depending on the default selected by Kokkos
+ depends_on("kokkos +sycl", when="+kokkos +sycl")
+ conflicts("+sycl", when="~kokkos", msg="Viskores does not support SYCL without Kokkos")
+ conflicts("+cuda~cuda_native~kokkos", msg="Cannot have +cuda without a cuda device")
+ conflicts("+cuda", when="cuda_arch=none", msg="viskores +cuda requires that cuda_arch be set")
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+ gpu_name_table = {
+ "30": "kepler",
+ "32": "kepler",
+ "35": "kepler",
+ "50": "maxwell",
+ "52": "maxwell",
+ "53": "maxwell",
+ "60": "pascal",
+ "61": "pascal",
+ "62": "pascal",
+ "70": "volta",
+ "72": "turing",
+ "75": "turing",
+ "80": "ampere",
+ "86": "ampere",
+ }
+ with working_dir("spack-build", create=True):
+ is_release = spec.variants["build_type"].value == "Release"
+ options = [
+ self.define("Viskores_ENABLE_TESTING", False),
+ self.define("Viskores_NO_ASSERT", is_release),
+ self.define_from_variant("BUILD_SHARED_LIBS", "shared"),
+ self.define_from_variant("Viskores_ENABLE_KOKKOS", "kokkos"),
+ self.define_from_variant("Viskores_ENABLE_LOGGING", "logging"),
+ self.define_from_variant("Viskores_ENABLE_MPI", "mpi"),
+ self.define_from_variant("Viskores_ENABLE_OPENMP", "openmp"),
+ self.define_from_variant("Viskores_ENABLE_RENDERING", "rendering"),
+ self.define_from_variant("Viskores_ENABLE_TBB", "tbb"),
+ self.define_from_variant("Viskores_ENABLE_TESTING_LIBRARY", "testlib"),
+ self.define_from_variant("Viskores_INSTALL_EXAMPLES", "examples"),
+ self.define_from_variant("Viskores_USE_64BIT_IDS", "64bitids"),
+ self.define_from_variant("Viskores_USE_DOUBLE_PRECISION", "doubleprecision"),
+ self.define(
+ "Viskores_USE_DEFAULT_TYPES_FOR_ASCENT", "~64bitids +doubleprecision" in spec
+ ),
+ ]
+
+ if "+tbb" in spec:
+ # viskores detectes tbb via TBB_ROOT env var
+ os.environ["TBB_ROOT"] = spec["tbb"].prefix
+
+ if "+kokkos" in spec and "+rocm" in spec and spec.satisfies("^kokkos@4:"):
+ options.append(f"-DCMAKE_CXX_COMPILER:FILEPATH={spec['hip'].prefix.bin.hipcc}")
+
+ # Support for relocatable code
+ if "~shared" in spec and "+fpic" in spec:
+ options.append("-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON")
+
+ # cuda support
+ if "+cuda_native" in spec:
+ options.append("-DViskores_ENABLE_CUDA:BOOL=ON")
+ options.append("-DCMAKE_CUDA_HOST_COMPILER={0}".format(env["SPACK_CXX"]))
+
+ if spec.satisfies("^cmake@3.18:"):
+ options.append(CMakeBuilder.define_cuda_architectures(self))
+
+ else:
+ # Viskores_CUDA_Architecture only accepts a single CUDA arch
+ num_cuda_arch = spec.variants["cuda_arch"].value[0]
+ str_cuda_arch = str()
+
+ try:
+ str_cuda_arch = gpu_name_table[num_cuda_arch]
+ except KeyError:
+ raise InstallError(f"cuda_arch={num_cuda_arch} needs cmake>=3.18")
+ options.append(f"-DViskores_CUDA_Architecture={str_cuda_arch}")
+
+ else:
+ options.append("-DViskores_ENABLE_CUDA:BOOL=OFF")
+
+ # hip support
+ if "+rocm" in spec:
+ options.append(CMakeBuilder.define_hip_architectures(self))
+
+ return options
+
+ def test_smoke_test(self):
+ """Build and run ctests"""
+ if "+examples" not in self.spec:
+ raise SkipTest("Package must be installed with +examples")
+
+ testdir = "smoke_test_build"
+ with working_dir(testdir, create=True):
+ cmake = Executable(self.spec["cmake"].prefix.bin.cmake)
+ ctest = Executable(self.spec["cmake"].prefix.bin.ctest)
+
+ mpi_home = str()
+ if "+mpi" in self.spec:
+ mpi_home = self.spec["mpi"].prefix
+ cmake(
+ self.prefix.share.doc.Viskores.examples.smoke_test,
+ f"-DCMAKE_C_COMPILER={self.compiler.cc}",
+ f"-DCMAKE_CXX_COMPILER={self.compiler.cxx}",
+ f"-DMPI_HOME={mpi_home}",
+ f"-DViskores_ROOT={self.prefix}",
+ )
+ cmake("--build", ".")
+ ctest("--verbose")
+
+ @run_after("install")
+ @on_package_attributes(run_tests=True)
+ def build_test(self):
+ self.test_smoke_test()
diff --git a/var/spack/repos/builtin/packages/vmc/package.py b/var/spack/repos/builtin/packages/vmc/package.py
index 5a54fbe29ec..e456d3d4737 100644
--- a/var/spack/repos/builtin/packages/vmc/package.py
+++ b/var/spack/repos/builtin/packages/vmc/package.py
@@ -28,6 +28,6 @@ class Vmc(CMakePackage):
depends_on("root@6.18.04: ~vmc")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("platform=darwin"):
env.unset("MACOSX_DEPLOYMENT_TARGET")
diff --git a/var/spack/repos/builtin/packages/vmd/package.py b/var/spack/repos/builtin/packages/vmd/package.py
index eb8b13f26d5..2f802745e77 100644
--- a/var/spack/repos/builtin/packages/vmd/package.py
+++ b/var/spack/repos/builtin/packages/vmd/package.py
@@ -37,7 +37,7 @@ class Vmd(Package):
depends_on("patchelf", type="build")
depends_on("gmake", type="build")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("VMDINSTALLBINDIR", self.prefix.bin)
env.set("VMDINSTALLLIBRARYDIR", self.prefix.lib64)
@@ -58,5 +58,5 @@ def ensure_rpaths(self):
)
patchelf("--set-rpath", rpath, join_path(self.prefix, "lib64", "vmd_LINUXAMD64"))
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("PLUGINDIR", self.spec.prefix.lib64.plugins)
diff --git a/var/spack/repos/builtin/packages/voms/package.py b/var/spack/repos/builtin/packages/voms/package.py
index 536db34e039..b65f49d87b5 100644
--- a/var/spack/repos/builtin/packages/voms/package.py
+++ b/var/spack/repos/builtin/packages/voms/package.py
@@ -15,6 +15,7 @@ class Voms(AutotoolsPackage):
license("Apache-2.0", checked_by="wdconinc")
+ version("2.1.2", sha256="171cfa66b000422761b2a534a84ad88b646c675ff7910409b08b900775dbf035")
version("2.1.0", sha256="2fd2468620af531c02e9ac495aaaf2a8d5b8cfbe24d4904f2e8fa7f64cdeeeec")
depends_on("c", type="build")
@@ -33,12 +34,13 @@ class Voms(AutotoolsPackage):
force_autoreconf = True
+ @when("@:2.1.0")
def patch(self):
filter_file(
r"/usr/bin/soapcpp2", f"{self.spec['gsoap'].prefix.bin.soapcpp2}", "m4/wsdl2h.m4"
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=voms
pkgconfig = Executable(join_path(self.spec["pkgconfig"].prefix.bin, "pkg-config"))
env.set("GSOAP_SSL_PP_CFLAGS", pkgconfig("--cflags", "gsoapssl++", "zlib", output=str))
diff --git a/var/spack/repos/builtin/packages/vtk-m/package.py b/var/spack/repos/builtin/packages/vtk-m/package.py
index 4067d6889a6..f9e9f542521 100644
--- a/var/spack/repos/builtin/packages/vtk-m/package.py
+++ b/var/spack/repos/builtin/packages/vtk-m/package.py
@@ -30,10 +30,11 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage):
version("master", branch="master")
version("release", branch="release")
version(
- "2.2.0",
- sha256="f40d6b39ca1bcecd232571c92ce606627811909f4e21972d1823e605f686bcf5",
+ "2.3.0",
+ sha256="d105ee2de5cfa600f1b4b3d2061f97bebd581a0ae1c86c6174af4e8128f83c54",
preferred=True,
)
+ version("2.2.0", sha256="f40d6b39ca1bcecd232571c92ce606627811909f4e21972d1823e605f686bcf5")
version("2.1.0", sha256="7b224f1f91e5ef140e193338bf091133b1e9f40d323bccdc8bb80bfc2675e6ea")
version("2.0.0", sha256="21c8b2cb8f3d4116a4f90c1d08c9f5e27b25c7a0951f7b403eced94576f84880")
version("1.9.0", sha256="f9862d9d24deae32063ba1ea3d9a42900ac0cdd7f98412d960249a7cac35d47f")
@@ -165,7 +166,7 @@ class VtkM(CMakePackage, CudaPackage, ROCmPackage):
# VTK-M PR#3258
# https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/3258
- patch("mr3258-fix-typo-thrust-dependency-with-rocm.patch", when="@2.2:")
+ patch("mr3258-fix-typo-thrust-dependency-with-rocm.patch", when="@2.2.0")
# VTK-M PR#3259
# https://gitlab.kitware.com/vtk/vtk-m/-/merge_requests/3259
diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py
index e502540ac10..e86ccd3762d 100644
--- a/var/spack/repos/builtin/packages/vtk/package.py
+++ b/var/spack/repos/builtin/packages/vtk/package.py
@@ -93,13 +93,13 @@ class Vtk(CMakePackage):
# Based on PyPI wheel availability
with when("+python"), default_args(type=("build", "link", "run")):
- depends_on("python@:3.13")
- depends_on("python@:3.12", when="@:9.3")
- depends_on("python@:3.11", when="@:9.2")
- depends_on("python@:3.10", when="@:9.2.2")
- depends_on("python@:3.9", when="@:9.1")
- depends_on("python@:3.8", when="@:9.0.1")
- depends_on("python@:3.7", when="@:8.2.0")
+ extends("python@:3.13")
+ extends("python@:3.12", when="@:9.3")
+ extends("python@:3.11", when="@:9.2")
+ extends("python@:3.10", when="@:9.2.2")
+ extends("python@:3.9", when="@:9.1")
+ extends("python@:3.8", when="@:9.0.1")
+ extends("python@:3.7", when="@:8.2.0")
# We need mpi4py if buidling python wrappers and using MPI
depends_on("py-mpi4py", when="+python+mpi", type="run")
@@ -271,7 +271,7 @@ def url_for_version(self, version):
url = "http://www.vtk.org/files/release/{0}/VTK-{1}.tar.gz"
return url.format(version.up_to(2), version)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# VTK has some trouble finding freetype unless it is set in
# the environment
env.set("FREETYPE_DIR", self.spec["freetype"].prefix)
diff --git a/var/spack/repos/builtin/packages/w3emc/package.py b/var/spack/repos/builtin/packages/w3emc/package.py
index f7841835cce..499a40e1c48 100644
--- a/var/spack/repos/builtin/packages/w3emc/package.py
+++ b/var/spack/repos/builtin/packages/w3emc/package.py
@@ -64,7 +64,7 @@ class W3emc(CMakePackage):
depends_on("sigio", when="@2.7.3")
depends_on("netcdf-fortran", when="@2.7.3")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
if self.spec.satisfies("@:2.9"):
suffixes = ("4", "d", "8")
shared = False
diff --git a/var/spack/repos/builtin/packages/w3m/package.py b/var/spack/repos/builtin/packages/w3m/package.py
index 3072188f292..00bd59c2e3c 100644
--- a/var/spack/repos/builtin/packages/w3m/package.py
+++ b/var/spack/repos/builtin/packages/w3m/package.py
@@ -102,7 +102,7 @@ def configure_args(self):
return args
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.variants["termlib"].value == "ncurses":
env.append_flags("LDFLAGS", "-ltinfo")
env.append_flags("LDFLAGS", "-lncurses")
diff --git a/var/spack/repos/builtin/packages/wannier90/package.py b/var/spack/repos/builtin/packages/wannier90/package.py
index 47874c433a8..fb15741b9d3 100644
--- a/var/spack/repos/builtin/packages/wannier90/package.py
+++ b/var/spack/repos/builtin/packages/wannier90/package.py
@@ -19,6 +19,8 @@ class Wannier90(MakefilePackage):
license("GPL-2.0-or-later")
+ tags = ["e4s"]
+
version("develop", branch="develop")
version("3.1.0", sha256="40651a9832eb93dec20a8360dd535262c261c34e13c41b6755fa6915c936b254")
version("3.0.0", sha256="f196e441dcd7b67159a1d09d2d7de2893b011a9f03aab6b30c4703ecbf20fe5b")
@@ -145,7 +147,7 @@ def edit(self, spec, prefix):
string=True,
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("MPIFC", self.prefix.bin.mpifc)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/warpx/package.py b/var/spack/repos/builtin/packages/warpx/package.py
index 56ae7276cdb..8484beb8889 100644
--- a/var/spack/repos/builtin/packages/warpx/package.py
+++ b/var/spack/repos/builtin/packages/warpx/package.py
@@ -15,7 +15,7 @@ class Warpx(CMakePackage, PythonExtension):
"""
homepage = "https://ecp-warpx.github.io"
- url = "https://github.com/BLAST-WarpX/warpx/archive/refs/tags/25.03.tar.gz"
+ url = "https://github.com/BLAST-WarpX/warpx/archive/refs/tags/25.04.tar.gz"
git = "https://github.com/BLAST-WarpX/warpx.git"
maintainers("ax3l", "dpgrote", "EZoni", "RemiLehe")
@@ -24,13 +24,14 @@ class Warpx(CMakePackage, PythonExtension):
license("BSD-3-Clause-LBNL")
version("develop", branch="development")
- version("25.03", sha256="18155ff67b036a00db2a25303058316167192a81cfe6dc1dec65fdef0b6d9903")
+ version("25.04", sha256="374136fbf566d65307dfe95ae12686ccaf3e649d2f66a79cd856585986c94ac7")
with default_args(deprecated=True):
+ version("25.03", sha256="18155ff67b036a00db2a25303058316167192a81cfe6dc1dec65fdef0b6d9903")
version("25.02", sha256="7bdea9c1e94f82dbc3565f14f6b6ad7658a639217a10a6cf08c05a16aa26266f")
# 22.01+ requires C++17 or newer
# 20.01+ requires C++14 or newer
- for v in ["25.03", "25.02", "develop"]:
+ for v in ["25.04", "25.03", "25.02", "develop"]:
depends_on(
f"amrex@{v} build_system=cmake +linear_solvers +pic +particles +shared +tiny_profile",
when=f"@{v}",
diff --git a/var/spack/repos/builtin/packages/webbench/package.py b/var/spack/repos/builtin/packages/webbench/package.py
index dd143f21a6a..6c979a0ee24 100644
--- a/var/spack/repos/builtin/packages/webbench/package.py
+++ b/var/spack/repos/builtin/packages/webbench/package.py
@@ -19,7 +19,7 @@ class Webbench(MakefilePackage):
depends_on("ntirpc")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["ntirpc"].prefix.include.ntirpc)
def edit(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/wgrib2/package.py b/var/spack/repos/builtin/packages/wgrib2/package.py
index 5e122de4430..eaa4bc28be6 100644
--- a/var/spack/repos/builtin/packages/wgrib2/package.py
+++ b/var/spack/repos/builtin/packages/wgrib2/package.py
@@ -244,7 +244,7 @@ def edit(self, pkg, spec, prefix):
value = int(spec.variants[variant_name].value)
makefile.filter(r"^%s=.*" % makefile_option, "{}={}".format(makefile_option, value))
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if self.spec.compiler.name in ["oneapi", "intel"]:
comp_sys = "intel_linux"
elif self.spec.compiler.name in ["gcc", "clang", "apple-clang"]:
diff --git a/var/spack/repos/builtin/packages/which/package.py b/var/spack/repos/builtin/packages/which/package.py
index ffe807bbb36..b88178ca2d0 100644
--- a/var/spack/repos/builtin/packages/which/package.py
+++ b/var/spack/repos/builtin/packages/which/package.py
@@ -6,12 +6,12 @@
from spack.package import *
-class Which(AutotoolsPackage):
+class Which(AutotoolsPackage, GNUMirrorPackage):
"""GNU which - is a utility that is used to find which executable (or
alias or shell function) is executed when entered on the shell prompt."""
homepage = "https://savannah.gnu.org/projects/which/"
- url = "https://ftp.gnu.org/gnu/which/which-2.21.tar.gz"
+ gnu_mirror_path = "which/which-2.21.tar.gz"
license("GPL-3.0")
diff --git a/var/spack/repos/builtin/packages/whizard/package.py b/var/spack/repos/builtin/packages/whizard/package.py
index 10d885a1803..003ae099ee5 100644
--- a/var/spack/repos/builtin/packages/whizard/package.py
+++ b/var/spack/repos/builtin/packages/whizard/package.py
@@ -26,6 +26,7 @@ class Whizard(AutotoolsPackage):
license("GPL-2.0-or-later")
version("master", branch="master")
+ version("3.1.5", sha256="731d147b342e3b63307ea541f6f0bb4073195a78a75da60db10f284f282c3d19")
version("3.1.4", sha256="9da9805251d786adaf4ad5a112f9c4ee61d515778af0d2623d6460c3f1f900cd")
version("3.1.2", sha256="4f706f8ef02a580ae4dba867828691dfe0b3f9f9b8982b617af72eb8cd4c6fa3")
version("3.1.1", sha256="dd48e4e39b8a4990be47775ec6171f89d8147cb2e9e293afc7051a7dbc5a23ef")
@@ -116,7 +117,7 @@ class Whizard(AutotoolsPackage):
msg="The fortran compiler needs to support Fortran 2008. For more detailed information see https://whizard.hepforge.org/compilers.html",
)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# whizard uses some environment variables to detect dependencies at
# configure time if they are not installed to standard system prefixes
if self.spec.satisfies("+lcio"):
diff --git a/var/spack/repos/builtin/packages/wi4mpi/package.py b/var/spack/repos/builtin/packages/wi4mpi/package.py
index f65224a39e7..6c7353d7468 100644
--- a/var/spack/repos/builtin/packages/wi4mpi/package.py
+++ b/var/spack/repos/builtin/packages/wi4mpi/package.py
@@ -59,7 +59,7 @@ def cmake_args(self):
]
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("WI4MPI_ROOT", self.prefix)
env.set("WI4MPI_VERSION", str(self.version))
env.set("WI4MPI_CC", self.compiler.cc)
diff --git a/var/spack/repos/builtin/packages/win-wdk/package.py b/var/spack/repos/builtin/packages/win-wdk/package.py
index 312303dc390..ce28dac149a 100644
--- a/var/spack/repos/builtin/packages/win-wdk/package.py
+++ b/var/spack/repos/builtin/packages/win-wdk/package.py
@@ -105,10 +105,12 @@ def determine_variants(cls, libs, ver_str):
variants.append("plat=%s" % arch)
return variants
- def setup_dependent_environment(self):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# This points to all core build extensions needed to build
# drivers on Windows
- os.environ["WDKContentRoot"] = self.prefix
+ env.set("WDKContentRoot", self.prefix)
@run_before("install")
def rename_downloaded_executable(self):
diff --git a/var/spack/repos/builtin/packages/wordnet/package.py b/var/spack/repos/builtin/packages/wordnet/package.py
index 4d672000303..f90e4877c6f 100644
--- a/var/spack/repos/builtin/packages/wordnet/package.py
+++ b/var/spack/repos/builtin/packages/wordnet/package.py
@@ -29,6 +29,6 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("WNHOME", self.prefix)
env.set("WNSEARCHDIR", self.prefix.dict)
diff --git a/var/spack/repos/builtin/packages/wps/package.py b/var/spack/repos/builtin/packages/wps/package.py
index 61dfad0b415..566d69944bd 100644
--- a/var/spack/repos/builtin/packages/wps/package.py
+++ b/var/spack/repos/builtin/packages/wps/package.py
@@ -61,7 +61,7 @@ class Wps(Package):
patch("for_aarch64.patch", when="target=aarch64:")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("WRF_DIR", self.spec["wrf"].prefix)
env.set("NETCDF", self.spec["netcdf-c"].prefix)
# This gets used via the applied patch files
@@ -74,7 +74,7 @@ def setup_build_environment(self, env):
env.set("FCFLAGS", args)
env.set("FFLAGS", args)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.append_path("PATH", self.prefix)
env.append_path("PATH", self.prefix.util)
diff --git a/var/spack/repos/builtin/packages/wrf-io/package.py b/var/spack/repos/builtin/packages/wrf-io/package.py
index a9417a31293..8a76186f213 100644
--- a/var/spack/repos/builtin/packages/wrf-io/package.py
+++ b/var/spack/repos/builtin/packages/wrf-io/package.py
@@ -32,6 +32,3 @@ class WrfIo(CMakePackage):
def cmake_args(self):
args = [self.define_from_variant("OPENMP", "openmp")]
return args
-
- def check(self):
- make("test")
diff --git a/var/spack/repos/builtin/packages/wrf/package.py b/var/spack/repos/builtin/packages/wrf/package.py
index f76c45ecb19..dba27293031 100644
--- a/var/spack/repos/builtin/packages/wrf/package.py
+++ b/var/spack/repos/builtin/packages/wrf/package.py
@@ -281,12 +281,12 @@ class Wrf(Package):
)
phases = ["configure", "build", "install"]
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("WRF_HOME", self.prefix)
env.append_path("PATH", self.prefix.main)
env.append_path("PATH", self.prefix.tools)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# From 4.5.2 the split-netcdf patches are not needed,
# just tell the build system where netcdf and netcdf-c are:
if self.spec.satisfies("@4.5.2:"):
@@ -298,9 +298,9 @@ def setup_build_environment(self, env):
env.set("PNETCDF", self.spec["parallel-netcdf"].prefix)
# Add WRF-Chem module
if "+chem" in self.spec:
- env.set("WRF_CHEM", 1)
+ env.set("WRF_CHEM", "1")
if "+netcdf_classic" in self.spec:
- env.set("NETCDF_classic", 1)
+ env.set("NETCDF_classic", "1")
# This gets used via the applied patch files
env.set("NETCDFF", self.spec["netcdf-fortran"].prefix)
env.set("PHDF5", self.spec["hdf5"].prefix)
@@ -308,7 +308,7 @@ def setup_build_environment(self, env):
env.set("JASPERLIB", self.spec["jasper"].prefix.lib)
if self.spec.satisfies("%aocc"):
- env.set("WRFIO_NCD_LARGE_FILE_SUPPORT", 1)
+ env.set("WRFIO_NCD_LARGE_FILE_SUPPORT", "1")
env.set("HDF5", self.spec["hdf5"].prefix)
env.prepend_path("PATH", ancestor(self.compiler.cc))
@@ -424,12 +424,6 @@ def do_configure_fixup(self):
)
config.filter("^CC_TOOLS(.*?)=([^#\n\r]*)(.*)$", r"CC_TOOLS\1=\2 -fpermissive \3")
- @run_before("configure")
- def fortran_check(self):
- if not self.compiler.fc:
- msg = "cannot build WRF without a Fortran compiler"
- raise RuntimeError(msg)
-
def configure(self, spec, prefix):
# Remove broken default options...
self.do_configure_fixup()
diff --git a/var/spack/repos/builtin/packages/xabclib/package.py b/var/spack/repos/builtin/packages/xabclib/package.py
index a7aad79e2c3..5c700f5ca35 100644
--- a/var/spack/repos/builtin/packages/xabclib/package.py
+++ b/var/spack/repos/builtin/packages/xabclib/package.py
@@ -15,6 +15,9 @@ class Xabclib(MakefilePackage):
version("1.03", sha256="9d200f40f1db87abc26cfe75a22db3a6d972988a28fc0ce8421a0c88cc574d1a")
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
+
def edit(self, spec, prefix):
cc = [spack_cc, "-O3", self.compiler.openmp_flag]
fc = [spack_fc, "-O3", self.compiler.openmp_flag]
diff --git a/var/spack/repos/builtin/packages/xbraid/package.py b/var/spack/repos/builtin/packages/xbraid/package.py
index 73edaf2a95c..74528fac7ab 100644
--- a/var/spack/repos/builtin/packages/xbraid/package.py
+++ b/var/spack/repos/builtin/packages/xbraid/package.py
@@ -10,7 +10,7 @@ class Xbraid(MakefilePackage):
homepage = "https://computing.llnl.gov/projects/parallel-time-integration-multigrid/software"
url = "https://github.com/XBraid/xbraid/archive/v2.2.0.tar.gz"
- tags = ["radiuss"]
+ tags = ["radiuss", "e4s"]
version("3.1.0", sha256="3419b22918c65555e8c552b70a0837a251a74c471dac8e4a7b2272bf7d955c88")
version("3.0.0", sha256="06988c0599cd100d3b3f3ebb183c9ad34a4021922e0896815cbedc659aaadce6")
diff --git a/var/spack/repos/builtin/packages/xcdf/package.py b/var/spack/repos/builtin/packages/xcdf/package.py
index 4dc73fdd580..6214e3d37b7 100644
--- a/var/spack/repos/builtin/packages/xcdf/package.py
+++ b/var/spack/repos/builtin/packages/xcdf/package.py
@@ -23,5 +23,5 @@ class Xcdf(CMakePackage):
depends_on("python@3.7:", when="@3.01:")
depends_on("py-pybind11", when="@3.01:", type="build")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PYTHONPATH", self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/xfce4-session/package.py b/var/spack/repos/builtin/packages/xfce4-session/package.py
index e8a7c06043a..6b5232135aa 100644
--- a/var/spack/repos/builtin/packages/xfce4-session/package.py
+++ b/var/spack/repos/builtin/packages/xfce4-session/package.py
@@ -55,7 +55,9 @@ def configure_args(self):
def setup_run_enviornment(self, env):
self.add_xdg_dirs(env)
- def setup_dependent_run_environment(self, env, dep_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
self.add_xdg_dirs(env)
def add_xdg_dirs(self, env):
diff --git a/var/spack/repos/builtin/packages/xfsdump/package.py b/var/spack/repos/builtin/packages/xfsdump/package.py
index 6b5b6a52151..ad2e85d3aa9 100644
--- a/var/spack/repos/builtin/packages/xfsdump/package.py
+++ b/var/spack/repos/builtin/packages/xfsdump/package.py
@@ -48,5 +48,5 @@ def install(self, spec, prefix):
"install",
)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/xfsprogs/package.py b/var/spack/repos/builtin/packages/xfsprogs/package.py
index 24ec70feb45..0bbe6ed15c7 100644
--- a/var/spack/repos/builtin/packages/xfsprogs/package.py
+++ b/var/spack/repos/builtin/packages/xfsprogs/package.py
@@ -52,7 +52,7 @@ def flag_handler(self, name, flags):
flags.append("-lintl")
return build_system_flags(name, flags)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_path("C_INCLUDE_PATH", self.spec["util-linux"].prefix.include.blkid)
def configure_args(self):
@@ -65,5 +65,5 @@ def install(self, spec, prefix):
make("install")
make("install-dev")
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/xfwp/package.py b/var/spack/repos/builtin/packages/xfwp/package.py
index 9d81ae10fe3..d2a4500543c 100644
--- a/var/spack/repos/builtin/packages/xfwp/package.py
+++ b/var/spack/repos/builtin/packages/xfwp/package.py
@@ -24,5 +24,5 @@ class Xfwp(AutotoolsPackage, XorgPackage):
# Fixes this and a long list of other compilation errors:
# io.c:1039:7: error: implicit declaration of function 'swab'
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.append_flags("CPPFLAGS", "-D_GNU_SOURCE")
diff --git a/var/spack/repos/builtin/packages/xios/package.py b/var/spack/repos/builtin/packages/xios/package.py
index 1fb036e5d7b..7141ac4998a 100644
--- a/var/spack/repos/builtin/packages/xios/package.py
+++ b/var/spack/repos/builtin/packages/xios/package.py
@@ -57,6 +57,9 @@ class Xios(Package):
patch("earcut_missing_include_2.6.patch", when="@2.6:")
+ depends_on("c", type="build")
+ depends_on("fortran", type="build")
+
depends_on("netcdf-c+mpi")
depends_on("netcdf-fortran")
depends_on("hdf5+mpi")
diff --git a/var/spack/repos/builtin/packages/xkeyboard-config/package.py b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
index 65b08a4972e..767648e512e 100644
--- a/var/spack/repos/builtin/packages/xkeyboard-config/package.py
+++ b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
@@ -35,8 +35,12 @@ class XkeyboardConfig(AutotoolsPackage, XorgPackage):
# perl@5.8.1:
# perl XML::Parser
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XKB_CONFIG_ROOT", self.prefix.share.X11.xkb)
- def setup_dependent_run_environment(self, env, dependent_spec):
+ def setup_dependent_run_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
env.prepend_path("XKB_CONFIG_ROOT", self.prefix.share.X11.xkb)
diff --git a/var/spack/repos/builtin/packages/xl/package.py b/var/spack/repos/builtin/packages/xl/package.py
index 6528946e364..afbdc2cbbaf 100644
--- a/var/spack/repos/builtin/packages/xl/package.py
+++ b/var/spack/repos/builtin/packages/xl/package.py
@@ -14,6 +14,8 @@ class Xl(Package, CompilerPackage):
homepage = "https://www.ibm.com/support/knowledgecenter/SSXVZZ_16.1.1/com.ibm.compilers.linux.doc/welcome.html"
+ has_code = False
+
variant("r", default=True, description="The _r version of compilers")
provides("c", "cxx")
diff --git a/var/spack/repos/builtin/packages/xnedit/package.py b/var/spack/repos/builtin/packages/xnedit/package.py
index e66c68405f4..9a884b7660f 100644
--- a/var/spack/repos/builtin/packages/xnedit/package.py
+++ b/var/spack/repos/builtin/packages/xnedit/package.py
@@ -45,7 +45,7 @@ class Xnedit(MakefilePackage):
depends_on("motif")
depends_on("pcre")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("LDFLAGS", "-Wl,--copy-dt-needed-entries")
def build(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/xorg-server/package.py b/var/spack/repos/builtin/packages/xorg-server/package.py
index fc698436776..13a19c62766 100644
--- a/var/spack/repos/builtin/packages/xorg-server/package.py
+++ b/var/spack/repos/builtin/packages/xorg-server/package.py
@@ -85,7 +85,7 @@ def patch(self):
depends_on("libpciaccess")
@when("@:1.19")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
# https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/406
env.set("CPPFLAGS", "-fcommon")
diff --git a/var/spack/repos/builtin/packages/xrootd/package.py b/var/spack/repos/builtin/packages/xrootd/package.py
index 043c8021220..a5db43ad999 100644
--- a/var/spack/repos/builtin/packages/xrootd/package.py
+++ b/var/spack/repos/builtin/packages/xrootd/package.py
@@ -246,7 +246,7 @@ def cmake_args(self):
return options
@when("@:5.1.99")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
cxxstdflag = ""
if self.spec.variants["cxxstd"].value == "98":
cxxstdflag = self.compiler.cxx98_flag
diff --git a/var/spack/repos/builtin/packages/xsd/package.py b/var/spack/repos/builtin/packages/xsd/package.py
index 658ab0c5663..29067b5ae51 100644
--- a/var/spack/repos/builtin/packages/xsd/package.py
+++ b/var/spack/repos/builtin/packages/xsd/package.py
@@ -40,7 +40,7 @@ class Xsd(MakefilePackage):
def install(self, spec, prefix):
make("install", "install_prefix=" + prefix)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
xercesc_lib_flags = self.spec["xerces-c"].libs.search_flags
env.append_flags("LDFLAGS", xercesc_lib_flags)
cxxstdflag = "cxx{0}_flag".format(self.spec.variants["cxxstd"].value)
diff --git a/var/spack/repos/builtin/packages/xtrans/package.py b/var/spack/repos/builtin/packages/xtrans/package.py
index 68fc5ac6e93..9c687d7a3a4 100644
--- a/var/spack/repos/builtin/packages/xtrans/package.py
+++ b/var/spack/repos/builtin/packages/xtrans/package.py
@@ -18,6 +18,7 @@ class Xtrans(AutotoolsPackage, XorgPackage):
maintainers("wdconinc")
+ version("1.6.0", sha256="936b74c60b19c317c3f3cb1b114575032528dbdaf428740483200ea874c2ca0a")
version("1.5.2", sha256="23031301f10fef5eaa55b438610fbd29294a70d2fa189355343bf0186bff8374")
version("1.5.0", sha256="a806f8a92f879dcd0146f3f1153fdffe845f2fc0df9b1a26c19312b7b0a29c86")
version("1.4.0", sha256="48ed850ce772fef1b44ca23639b0a57e38884045ed2cbb18ab137ef33ec713f9")
diff --git a/var/spack/repos/builtin/packages/xyce/package.py b/var/spack/repos/builtin/packages/xyce/package.py
index 346b1df8ba5..1b6c783e791 100644
--- a/var/spack/repos/builtin/packages/xyce/package.py
+++ b/var/spack/repos/builtin/packages/xyce/package.py
@@ -28,6 +28,8 @@ class Xyce(CMakePackage):
url = "https://github.com/Xyce/Xyce/archive/Release-7.2.0.tar.gz"
maintainers("kuberry", "tbird2001")
+ tags = ["e4s"]
+
license("GPL-3.0-or-later")
version("master", branch="master")
diff --git a/var/spack/repos/builtin/packages/yarn/package.py b/var/spack/repos/builtin/packages/yarn/package.py
index c470eadb91f..09cf6e61222 100644
--- a/var/spack/repos/builtin/packages/yarn/package.py
+++ b/var/spack/repos/builtin/packages/yarn/package.py
@@ -19,6 +19,9 @@ class Yarn(Package):
license("BSD-2-Clause")
+ version("4.9.1", sha256="58df07bd582586c57d250a28817a0016382458d981c8d15e292b72a0ecfcd7a7")
+ version("4.9.0", sha256="933da2c124dd745404b996b3751481214e7cd34bd13978080111ded6ecdc5fb5")
+ version("4.8.1", sha256="26eee1ff317c4a1ba40cb3c5a85bb3ca35b7feb23d4339509ce2b0fd112567e8")
version("4.7.0", sha256="3e840034175d50254578c692f795cd79512869ad257f5b2269117b82c14fa0b1")
version("4.6.0", sha256="c3a318af0deb9d284d7c46bf97a28f9d70b156142dcab8ec985481d5818dc651")
version("1.22.22", sha256="88268464199d1611fcf73ce9c0a6c4d44c7d5363682720d8506f6508addf36a0")
diff --git a/var/spack/repos/builtin/packages/yorick/package.py b/var/spack/repos/builtin/packages/yorick/package.py
index b18b6796ec3..ac9a337f90d 100644
--- a/var/spack/repos/builtin/packages/yorick/package.py
+++ b/var/spack/repos/builtin/packages/yorick/package.py
@@ -38,7 +38,7 @@ def url_for_version(self, version):
url = "https://github.com/dhmunro/yorick/archive/y_{0}.tar.gz"
return url.format(version.underscored)
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("FORTRAN_LINKAGE", "-Df_linkage")
if self.spec.satisfies("arch=aarch64:"):
env.set("FPU_IGNORE", "1")
diff --git a/var/spack/repos/builtin/packages/yosys/package.py b/var/spack/repos/builtin/packages/yosys/package.py
index 5de1d4749dc..a17b8e59c01 100644
--- a/var/spack/repos/builtin/packages/yosys/package.py
+++ b/var/spack/repos/builtin/packages/yosys/package.py
@@ -28,6 +28,7 @@ class Yosys(MakefilePackage):
version("master", branch="master")
+ version("0.52", commit="fee39a3284c90249e1d9684cf6944ffbbcbb8f90", submodules=True)
version("0.51", commit="c4b5190229616f7ebf8197f43990b4429de3e420", submodules=True)
version("0.50", commit="b5170e1394f602c607e75bdbb1a2b637118f2086", submodules=True)
version("0.49", commit="427b5a251bfb511528a177bfa92567b4b3ada3dd", submodules=True)
@@ -84,7 +85,7 @@ def edit(self, spec, prefix):
makefile.filter(r"ENABLE_ABC :=", "ENABLE_ABC ?=")
makefile.filter(r"ENABLE_CCACHE :=", "ENABLE_CCACHE ?=")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("PREFIX", self.prefix)
env.set("CXXFLAGS", f'-I{self.spec["readline"].prefix.include}')
env.set(
diff --git a/var/spack/repos/builtin/packages/zabbix/package.py b/var/spack/repos/builtin/packages/zabbix/package.py
index 67d9e63f2d8..b5fe07757f8 100644
--- a/var/spack/repos/builtin/packages/zabbix/package.py
+++ b/var/spack/repos/builtin/packages/zabbix/package.py
@@ -67,5 +67,5 @@ def configure_args(self):
return args
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("PATH", self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/zfs/package.py b/var/spack/repos/builtin/packages/zfs/package.py
index 9b602426015..5600b314e76 100644
--- a/var/spack/repos/builtin/packages/zfs/package.py
+++ b/var/spack/repos/builtin/packages/zfs/package.py
@@ -27,5 +27,5 @@ class Zfs(AutotoolsPackage):
depends_on("libtirpc")
depends_on("util-linux")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.prepend_path("CPATH", self.spec["util-linux"].prefix.include)
diff --git a/var/spack/repos/builtin/packages/zlib-ng/package.py b/var/spack/repos/builtin/packages/zlib-ng/package.py
index b143fbbec06..ff9cc7b7d13 100644
--- a/var/spack/repos/builtin/packages/zlib-ng/package.py
+++ b/var/spack/repos/builtin/packages/zlib-ng/package.py
@@ -19,6 +19,7 @@ class ZlibNg(AutotoolsPackage, CMakePackage):
license("Zlib")
+ version("2.2.4", sha256="a73343c3093e5cdc50d9377997c3815b878fd110bf6511c2c7759f2afb90f5a3")
version("2.2.3", sha256="f2fb245c35082fe9ea7a22b332730f63cf1d42f04d84fe48294207d033cba4dd")
version("2.2.2", sha256="fcb41dd59a3f17002aeb1bb21f04696c9b721404890bb945c5ab39d2cb69654c")
version("2.2.1", sha256="ec6a76169d4214e2e8b737e0850ba4acb806c69eeace6240ed4481b9f5c57cdf")
diff --git a/var/spack/repos/builtin/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py
index 72e7ee7f385..b46d6c63cec 100644
--- a/var/spack/repos/builtin/packages/zlib/package.py
+++ b/var/spack/repos/builtin/packages/zlib/package.py
@@ -93,7 +93,7 @@ def libs(self):
class SetupEnvironment:
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
if "+pic" in self.spec:
env.append_flags("CFLAGS", self.pkg.compiler.cc_pic_flag)
if "+optimize" in self.spec:
diff --git a/var/spack/repos/builtin/packages/zoltan/package.py b/var/spack/repos/builtin/packages/zoltan/package.py
index 63a2491e82d..509fb63a5ca 100644
--- a/var/spack/repos/builtin/packages/zoltan/package.py
+++ b/var/spack/repos/builtin/packages/zoltan/package.py
@@ -2,7 +2,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
-
import re
from spack.package import *
@@ -10,13 +9,11 @@
class Zoltan(AutotoolsPackage):
"""The Zoltan library is a toolkit of parallel combinatorial algorithms
- for parallel, unstructured, and/or adaptive scientific
- applications. Zoltan's largest component is a suite of dynamic
- load-balancing and partitioning algorithms that increase
- applications' parallel performance by reducing idle time. Zoltan
- also has graph coloring and graph ordering algorithms, which are
- useful in task schedulers and parallel preconditioners.
-
+ for parallel, unstructured, and/or adaptive scientific applications.
+ Zoltan's largest component is a suite of dynamic load-balancing and
+ partitioning algorithms that increase applications' parallel performance
+ by reducing idle time. Zoltan also has graph coloring and graph ordering
+ algorithms, which are useful in task schedulers and parallel preconditioners.
"""
homepage = "https://sandialabs.github.io/Zoltan/"
@@ -24,37 +21,38 @@ class Zoltan(AutotoolsPackage):
license("Unlicense")
+ maintainers("tukss")
+
version("3.901", sha256="030c22d9f7532d3076e40cba1f03a63b2ee961d8cc9a35149af4a3684922a910")
version("3.83", sha256="17320a9f08e47f30f6f3846a74d15bfea6f3c1b937ca93c0ab759ca02c40e56c")
- patch("notparallel.patch", when="@3.8")
-
variant("debug", default=False, description="Builds a debug version of the library.")
variant("shared", default=True, description="Builds a shared version of the library.")
-
variant("fortran", default=True, description="Enable Fortran support.")
variant("mpi", default=True, description="Enable MPI support.")
variant("parmetis", default=False, description="Enable ParMETIS support.")
variant("int64", default=False, description="Enable 64bit indices.")
+ variant("scotch", default=False, description="Enable PT-Scotch support.")
- depends_on("c", type="build") # generated
- depends_on("cxx", type="build") # generated
- depends_on("fortran", type="build") # generated
-
- depends_on("mpi", when="+mpi")
-
- depends_on("parmetis@4: +int64", when="+parmetis+int64")
- depends_on("parmetis@4:", when="+parmetis")
- depends_on("metis+int64", when="+parmetis+int64")
- depends_on("metis", when="+parmetis")
-
- depends_on("perl@:5.21", type="build", when="@:3.6")
depends_on("autoconf", type="build")
depends_on("automake", type="build")
+ depends_on("c", type="build")
+ depends_on("cxx", type="build")
+ depends_on("fortran", type="build")
depends_on("m4", type="build")
+ depends_on("perl@:5.21", type="build", when="@:3.6")
+
+ depends_on("mpi", when="+mpi")
+ depends_on("metis", when="+parmetis")
+ depends_on("metis+int64", when="+parmetis+int64")
+ depends_on("parmetis@4:", when="+parmetis")
+ depends_on("parmetis@4: +int64", when="+parmetis+int64")
+ depends_on("scotch", when="+scotch")
conflicts("+parmetis", when="~mpi")
+ patch("notparallel.patch", when="@3.8")
+
build_directory = "spack-build"
@property
@@ -72,7 +70,7 @@ def configure_directory(self):
).format(self.version)
)
if spec.satisfies("@:3.6"):
- zoltan_path = "Zoltan_v{0}".format(self.version)
+ zoltan_path = f"Zoltan_v{self.version}"
return zoltan_path
return "."
@@ -99,17 +97,20 @@ def configure_args(self):
self.get_config_flag("f90interface", "fortran"),
self.get_config_flag("mpi", "mpi"),
]
- config_cflags = ["-O0" if "+debug" in spec else "-O3", "-g" if "+debug" in spec else ""]
+ config_cflags = [
+ "-O0" if spec.satisfies("+debug") else "-O3",
+ "-g" if spec.satisfies("+debug") else "",
+ ]
config_ldflags = []
config_libs = []
config_incdirs = []
- # PGI runtime libraries
# NVHPC runtime libraries
- if "%nvhpc" in spec:
+ if spec.satisfies("%nvhpc"):
config_ldflags.append("-fortranlibs")
- if "+shared" in spec:
+
+ if spec.satisfies("+shared"):
config_args.extend(["RANLIB=echo", "--with-ar=$(CXX) -shared $(LDFLAGS) -o"])
config_cflags.append(self.compiler.cc_pic_flag)
if spec.satisfies("%gcc"):
@@ -120,37 +121,49 @@ def configure_args(self):
if spec.satisfies("%intel") or spec.satisfies("%oneapi"):
config_libs.append("-lifcore")
- if "+int64" in spec:
+ if spec.satisfies("+int64"):
config_args.append("--with-id-type=ulong")
- if "+parmetis" in spec:
+ if spec.satisfies("+parmetis"):
parmetis_prefix = spec["parmetis"].prefix
config_args.extend(
[
"--with-parmetis",
- "--with-parmetis-libdir={0}".format(parmetis_prefix.lib),
- "--with-parmetis-incdir={0}".format(parmetis_prefix.include),
+ f"--with-parmetis-libdir={parmetis_prefix.lib}",
+ f"--with-parmetis-incdir={parmetis_prefix.include}",
]
)
- config_ldflags.append("-L{0}".format(spec["metis"].prefix.lib))
- config_incdirs.append("-I{0}".format(spec["metis"].prefix.include))
+ config_ldflags.append(f"-L{spec['metis'].prefix.lib}")
+ config_incdirs.append(f"-I{spec['metis'].prefix.include}")
config_libs.append("-lparmetis")
config_libs.append("-lmetis")
# Although appending to config_libs _should_ suffice, it does not
# Add them to ldflags as well
config_ldflags.append("-lparmetis")
config_ldflags.append("-lmetis")
- if "+int64" in spec["metis"]:
+ if spec["metis"].satisfies("+int64"):
config_args.append("--with-id-type=ulong")
else:
config_args.append("--with-id-type=uint")
- if "+mpi" in spec:
+ if spec.satisfies("+scotch"):
+ scotch_prefix = spec["scotch"].prefix
config_args.extend(
[
- "CC={0}".format(spec["mpi"].mpicc),
- "CXX={0}".format(spec["mpi"].mpicxx),
- "--with-mpi={0}".format(spec["mpi"].prefix),
+ "--with-scotch",
+ f"--with-scotch-incdir={scotch_prefix.include}",
+ f"--with-scotch-libdir={scotch_prefix.lib}",
+ ]
+ )
+ config_libs.append(spec["scotch"].libs.ld_flags)
+ config_ldflags.append(spec["scotch"].libs.ld_flags)
+
+ if spec.satisfies("+mpi"):
+ config_args.extend(
+ [
+ f"CC={spec['mpi'].mpicc}",
+ f"CXX={spec['mpi'].mpicxx}",
+ f"--with-mpi={spec['mpi'].prefix}",
# NOTE: Zoltan assumes that it's linking against an MPI library
# that can be found with '-lmpi' which isn't the case for many
# MPI packages. We rely on the MPI-wrappers to automatically
@@ -159,8 +172,8 @@ def configure_args(self):
"--with-mpi-libs= ",
]
)
- if "+fortran" in spec:
- config_args.extend(["FC={0}".format(spec["mpi"].mpifc)])
+ if spec.satisfies("+fortran"):
+ config_args.extend([f"FC={spec['mpi'].mpifc}"])
config_fcflags = config_cflags[:]
config_cxxflags = config_cflags[:]
@@ -172,29 +185,28 @@ def configure_args(self):
# library packages (e.g. ParMETIS, Scotch), which messes with Spack's
# ability to descend directly into the package's source directory.
if config_cflags:
- config_args.append("--with-cflags={0}".format(" ".join(config_cflags)))
+ config_args.append(f"--with-cflags={' '.join(config_cflags)}")
if config_cxxflags:
- config_args.append("--with-cxxflags={0}".format(" ".join(config_cxxflags)))
+ config_args.append(f"--with-cxxflags={' '.join(config_cxxflags)}")
if config_fcflags:
- config_args.append("--with-fcflags={0}".format(" ".join(config_fcflags)))
+ config_args.append(f"--with-fcflags={' '.join(config_fcflags)}")
if config_ldflags:
- config_args.append("--with-ldflags={0}".format(" ".join(config_ldflags)))
+ config_args.append(f"--with-ldflags={' '.join(config_ldflags)}")
if config_libs:
- config_args.append("--with-libs={0}".format(" ".join(config_libs)))
+ config_args.append(f"--with-libs={' '.join(config_libs)}")
if config_incdirs:
- config_args.append("--with-incdirs={0}".format(" ".join(config_incdirs)))
+ config_args.append(f"--with-incdirs={' '.join(config_incdirs)}")
return config_args
+ def get_config_flag(self, flag_name, flag_variant):
+ flag_pre = "en" if self.spec.satisfies(f"+{flag_variant}") else "dis"
+ return f"--{flag_pre}able-{flag_name}"
+
# NOTE: Unfortunately, Zoltan doesn't provide any configuration
# options for the extension of the output library files, so this
# script must change these extensions as a post-processing step.
- @run_after("install")
+ @run_after("install", when="+shared")
def solib_install(self):
- if "+shared" in self.spec:
- for lib_path in find(self.spec.prefix.lib, "lib*.a"):
- lib_shared_name = re.sub(r"\.a$", ".{0}".format(dso_suffix), lib_path)
- move(lib_path, lib_shared_name)
-
- def get_config_flag(self, flag_name, flag_variant):
- flag_pre = "en" if "+{0}".format(flag_variant) in self.spec else "dis"
- return "--{0}able-{1}".format(flag_pre, flag_name)
+ for lib_path in find(self.spec.prefix.lib, "lib*.a"):
+ lib_shared_name = re.sub(r"\.a$", f".{dso_suffix}", lib_path)
+ move(lib_path, lib_shared_name)
diff --git a/var/spack/repos/builtin/packages/zookeeper/package.py b/var/spack/repos/builtin/packages/zookeeper/package.py
index 35e2ae0416f..c28486134df 100644
--- a/var/spack/repos/builtin/packages/zookeeper/package.py
+++ b/var/spack/repos/builtin/packages/zookeeper/package.py
@@ -32,7 +32,7 @@ class Zookeeper(Package):
def install(self, spec, prefix):
install_tree(".", prefix)
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
env.set("ZOOBINDIR", self.prefix.bin)
env.set("ZOOCFGDIR", ".")
env.set("ZOO_LOG_DIR", ".")
diff --git a/var/spack/repos/builtin/packages/zpares/package.py b/var/spack/repos/builtin/packages/zpares/package.py
index 953a9cc390a..671163420c6 100644
--- a/var/spack/repos/builtin/packages/zpares/package.py
+++ b/var/spack/repos/builtin/packages/zpares/package.py
@@ -19,6 +19,8 @@ class Zpares(MakefilePackage):
variant("mpi", default=False, description="Activates MPI support")
variant("mumps", default=False, description="Activates MUMPS support")
+ depends_on("fortran", type="build")
+
depends_on("mumps+mpi", when="+mumps+mpi")
depends_on("mumps~mpi", when="+mumps~mpi")
depends_on("lapack")
diff --git a/var/spack/repos/builtin/packages/zstd/package.py b/var/spack/repos/builtin/packages/zstd/package.py
index 6835b0604ec..a5826d42987 100644
--- a/var/spack/repos/builtin/packages/zstd/package.py
+++ b/var/spack/repos/builtin/packages/zstd/package.py
@@ -23,6 +23,7 @@ class Zstd(CMakePackage, MakefilePackage):
license("BSD-3-Clause OR GPL-2.0-or-later")
version("develop", branch="dev")
+ version("1.5.7", sha256="37d7284556b20954e56e1ca85b80226768902e2edabd3b649e9e72c0c9012ee3")
version("1.5.6", sha256="30f35f71c1203369dc979ecde0400ffea93c27391bfd2ac5a9715d2173d92ff7")
version("1.5.5", sha256="98e9c3d949d1b924e28e01eccb7deed865eefebf25c2f21c702e5cd5b63b85e1")
version("1.5.4", sha256="35ad983197f8f8eb0c963877bf8be50490a0b3df54b4edeb8399ba8a8b2f60a4")
diff --git a/var/spack/repos/builtin/packages/zuo/package.py b/var/spack/repos/builtin/packages/zuo/package.py
index 7f99dcca197..1892cea1800 100644
--- a/var/spack/repos/builtin/packages/zuo/package.py
+++ b/var/spack/repos/builtin/packages/zuo/package.py
@@ -21,8 +21,8 @@ class Zuo(AutotoolsPackage):
depends_on("c", type="build")
- def setup_build_environment(self, env):
- env.set("ZUO_JOBS", make_jobs)
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
+ env.set("ZUO_JOBS", str(make_jobs))
def configure_args(self):
return [*self.enable_or_disable("big")]
diff --git a/var/spack/repos/tutorial/packages/elpa/package.py b/var/spack/repos/tutorial/packages/elpa/package.py
index e7068cff366..31755a63dc2 100644
--- a/var/spack/repos/tutorial/packages/elpa/package.py
+++ b/var/spack/repos/tutorial/packages/elpa/package.py
@@ -41,7 +41,7 @@ def libs(self):
build_directory = "spack-build"
- def setup_run_environment(self, env):
+ def setup_run_environment(self, env: EnvironmentModifications) -> None:
# TUTORIAL: set the following environment variables:
#
# CC=spec['mpi'].mpicc
diff --git a/var/spack/repos/tutorial/packages/hdf5/package.py b/var/spack/repos/tutorial/packages/hdf5/package.py
index 234e249a7ee..34ebfadf9fc 100644
--- a/var/spack/repos/tutorial/packages/hdf5/package.py
+++ b/var/spack/repos/tutorial/packages/hdf5/package.py
@@ -306,7 +306,7 @@ def libs(self):
return find_libraries(libraries, root=self.prefix, shared=shared, recursive=True)
@when("@:1.8.21,1.10.0:1.10.5+szip")
- def setup_build_environment(self, env):
+ def setup_build_environment(self, env: EnvironmentModifications) -> None:
env.set("SZIP_INSTALL", self.spec["szip"].prefix)
@run_before("cmake")
diff --git a/var/spack/repos/tutorial/packages/mpich/package.py b/var/spack/repos/tutorial/packages/mpich/package.py
index c6b55b9f47a..de60bb2487c 100644
--- a/var/spack/repos/tutorial/packages/mpich/package.py
+++ b/var/spack/repos/tutorial/packages/mpich/package.py
@@ -72,7 +72,9 @@ class Mpich(AutotoolsPackage):
conflicts("netmod=mxm", when="@:3.1.3")
conflicts("netmod=tcp", when="device=ch4")
- def setup_dependent_build_environment(self, env, dependent_spec):
+ def setup_dependent_build_environment(
+ self, env: EnvironmentModifications, dependent_spec: Spec
+ ) -> None:
# TUTORIAL: set the following variables for dependents:
#
# MPICC=join_path(self.prefix.bin, 'mpicc')