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')