Compare commits

..

17 Commits

Author SHA1 Message Date
Satish Balay
f05cbfbf44 xsdk: dealii has changes to variant defaults, update xsdk accordingly (#47602) 2024-11-16 16:42:16 -06:00
Wouter Deconinck
448049ccfc qt-tools: new package (#45602)
* qt-tools: new pkg with +designer to build Qt Designer for QWT

* qt-tools: fix style

* qt-tools: fix unused variable

* qt-tools: rm setup_run_environments (now in qt-base)

* qt-tools: add myself as maintainer

* qt-tools: add variant assistant; use commits with submodule

* qt-base: define QtPackage.get_git
2024-11-16 09:09:41 -06:00
etiennemlb
e56057fd79 gobject-introspection: Do not write to user home (#47621) 2024-11-16 11:11:52 +01:00
Harmen Stoppels
26d80e7bc5 py-blosc2: use external libblosc2 (#47566) 2024-11-16 09:43:54 +01:00
Dom Heinzeller
60eb0e9c80 Bug fix in py-scipy for versions 1.8.0 to 1.14.0 that surfaces with latest Clang and Intel LLVM compilers (#47620) 2024-11-16 06:56:25 +01:00
Thomas Bouvier
7443a3b572 py-wandb: add v0.16.6 (#43891)
* py-wandb: add version v0.16.6

* fix: typo

* py-wandb: py-click when @0.15.5:, py-pathtools when @:0.15

---------

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
2024-11-15 21:17:51 -07:00
dependabot[bot]
a5ba4f8d91 build(deps): bump codecov/codecov-action from 4.6.0 to 5.0.2 (#47631)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 4.6.0 to 5.0.2.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)
- [Commits](b9fd7d16f6...5c47607acb)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 21:41:14 -06:00
Matthias Wolf
6ef0f495a9 py-libsonata: add v0.1.29 (#47466)
* py-libsonata: new version.

* Fix Python version dependency.

* py-libsonata: fix typo

---------

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
2024-11-15 20:27:41 -07:00
Matthias Wolf
e91b8c291a py-numpy-quaternion: add v2024.0.3 (#47469)
* py-numpy-quaterion: add new version.

* Update dependency version bounds

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>

* Fix build dependencies.

---------

Co-authored-by: Wouter Deconinck <wdconinc@gmail.com>
2024-11-15 21:16:16 -06:00
Wouter Deconinck
6662046aca armadillo: add v14.0.3 (#47634) 2024-11-15 19:57:48 -07:00
Matthieu Dorier
db83c62fb1 arrow: add v18.0.0 (#47494)
* arrow: added version 18.0.0

This PR adds version 18.0.0 to the arrow package.

* arrow: updated dependency on llvm
2024-11-15 20:54:43 -06:00
teddy
d4adfda385 costo: add v0.0.8 (#47625)
Co-authored-by: t. chantrait <teddy.chantrait@cea.fr>
2024-11-15 18:10:52 -08:00
Matt Thompson
e8a8e2d98b mapl: add 2.40.3.1 (#47627)
* mapl: add 2.40.3.1
* Relax ESMF requirement
2024-11-15 18:09:22 -08:00
Paolo
55c770c556 Add ACfL 24.10.1 (#47616) 2024-11-15 18:05:38 -08:00
Thomas Gruber
33a796801c Likwid: add version 5.4.0 (#47630) 2024-11-15 18:04:21 -08:00
Seth R. Johnson
b90ac6441c celeritas: remove ancient versions and add CUDA package dependency (#47629)
* celeritas: remove deprecated versions through 0.3

* celeritas: deprecate old versions

* celeritas: add c++20 option

* Propagate vecgeom CUDA requirements

* Remove outdated conflicts and format it
2024-11-15 17:27:22 -07:00
dependabot[bot]
68b69aa9e3 build(deps): bump sphinx-rtd-theme in /lib/spack/docs (#47588)
Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 3.0.1 to 3.0.2.
- [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst)
- [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/3.0.1...3.0.2)

---
updated-dependencies:
- dependency-name: sphinx-rtd-theme
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 17:21:42 -06:00
27 changed files with 332 additions and 265 deletions

View File

@@ -29,6 +29,6 @@ jobs:
- run: coverage xml
- name: "Upload coverage report to CodeCov"
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238
uses: codecov/codecov-action@5c47607acb93fed5485fdbf7232e8a31425f672a
with:
verbose: true

View File

@@ -1,7 +1,7 @@
sphinx==8.1.3
sphinxcontrib-programoutput==0.17
sphinx_design==0.6.1
sphinx-rtd-theme==3.0.1
sphinx-rtd-theme==3.0.2
python-levenshtein==0.26.1
docutils==0.21.2
pygments==2.18.0

View File

@@ -21,7 +21,7 @@
from multiprocessing.connection import Connection
from threading import Thread
from types import ModuleType
from typing import Callable, Optional, Union
from typing import Callable, Optional
import llnl.util.tty as tty
@@ -1022,22 +1022,3 @@ def wrapped(*args, **kwargs):
def _input_available(f):
return f in select.select([f], [], [], 0)[0]
LogType = Union[nixlog, winlog]
def print_message(logger: LogType, msg: str, verbose: bool = False):
"""Print the message to the log, optionally echoing.
Args:
logger: instance of the output logger (e.g. nixlog or winlog)
msg: message being output
verbose: ``True`` displays verbose output, ``False`` suppresses
it (``False`` is default)
"""
if verbose:
with logger.force_echo():
tty.info(msg, format="g")
else:
tty.info(msg, format="g")

View File

@@ -112,7 +112,7 @@ def execute_build_time_tests(builder: spack.builder.Builder):
if not builder.pkg.run_tests or not builder.build_time_test_callbacks:
return
builder.phase_tests("build", builder.build_time_test_callbacks)
builder.pkg.tester.phase_tests(builder, "build", builder.build_time_test_callbacks)
def execute_install_time_tests(builder: spack.builder.Builder):
@@ -125,7 +125,7 @@ def execute_install_time_tests(builder: spack.builder.Builder):
if not builder.pkg.run_tests or not builder.install_time_test_callbacks:
return
builder.phase_tests("install", builder.install_time_test_callbacks)
builder.pkg.tester.phase_tests(builder, "install", builder.install_time_test_callbacks)
class BuilderWithDefaults(spack.builder.Builder):

View File

@@ -8,12 +8,7 @@
import functools
from typing import Dict, List, Optional, Tuple, Type
import llnl.util.tty as tty
import llnl.util.tty.log as log
import spack.config
import spack.error
import spack.install_test
import spack.multimethod
import spack.package_base
import spack.phase_callbacks
@@ -127,16 +122,11 @@ def __init__(self, wrapped_pkg_object, root_builder):
new_cls_name,
bases,
{
# boolean to indicate whether install-time tests are run
"run_tests": property(lambda x: x.wrapped_package_object.run_tests),
# boolean to indicate whether the package's stand-alone tests
# require a compiler
"test_requires_compiler": property(
lambda x: x.wrapped_package_object.test_requires_compiler
),
# TestSuite instance the spec is a part of
"test_suite": property(lambda x: x.wrapped_package_object.test_suite),
# PackageTest instance to manage the spec's testing
"tester": property(lambda x: x.wrapped_package_object.tester),
},
)
@@ -491,7 +481,7 @@ def __str__(self):
class Builder(BaseBuilder, collections.abc.Sequence):
"""A builder is a class that, given a package object (i.e. associated with concrete spec),
knows how to install it and perform install-time checks.
knows how to install it.
The builder behaves like a sequence, and when iterated over return the "phases" of the
installation in the correct order.
@@ -528,52 +518,3 @@ def __getitem__(self, idx):
def __len__(self):
return len(self.phases)
def phase_tests(self, phase_name: str, method_names: List[str]):
"""Execute the package's phase-time tests.
This process uses the same test setup and logging used for
stand-alone tests for consistency.
Args:
phase_name: the name of the build-time phase (e.g., ``build``, ``install``)
method_names: phase-specific callback method names
"""
verbose = tty.is_verbose()
fail_fast = spack.config.get("config:fail_fast", False)
tester = self.pkg.tester
with tester.test_logger(verbose=verbose, externals=False) as logger:
# Report running each of the methods in the build log
log.print_message(logger, f"Running {phase_name}-time tests", verbose)
tester.set_current_specs(self.pkg.spec, self.pkg.spec)
have_tests = any(name.startswith("test_") for name in method_names)
if have_tests:
spack.install_test.copy_test_files(self.pkg, self.pkg.spec)
for name in method_names:
try:
# Prefer the method in the package over the builder's.
# We need this primarily to pick up arbitrarily named test
# methods but also some build-time checks.
fn = getattr(self.pkg, name, getattr(self, name))
msg = f"RUN-TESTS: {phase_name}-time tests [{name}]"
log.print_message(logger, msg, verbose)
fn()
except AttributeError as e:
msg = f"RUN-TESTS: method not implemented [{name}]"
log.print_message(logger, msg, verbose)
tester.add_failure(e, msg)
if fail_fast:
break
if have_tests:
log.print_message(logger, "Completed testing", verbose)
# Raise exception if any failures encountered
tester.handle_failures()

View File

@@ -17,13 +17,12 @@
import llnl.util.filesystem as fs
import llnl.util.tty as tty
import llnl.util.tty.log as log
import llnl.util.tty.log
from llnl.string import plural
from llnl.util.lang import nullcontext
from llnl.util.tty.color import colorize
import spack.build_environment
import spack.compilers
import spack.config
import spack.error
import spack.package_base
@@ -51,6 +50,7 @@
ListOrStringType = Union[str, List[str]]
LogType = Union[llnl.util.tty.log.nixlog, llnl.util.tty.log.winlog]
Pb = TypeVar("Pb", bound="spack.package_base.PackageBase")
PackageObjectOrClass = Union[Pb, Type[Pb]]
@@ -207,6 +207,22 @@ def install_test_root(pkg: Pb):
return os.path.join(pkg.metadata_dir, "test")
def print_message(logger: LogType, msg: str, verbose: bool = False):
"""Print the message to the log, optionally echoing.
Args:
logger: instance of the output logger (e.g. nixlog or winlog)
msg: message being output
verbose: ``True`` displays verbose output, ``False`` suppresses
it (``False`` is default)
"""
if verbose:
with logger.force_echo():
tty.info(msg, format="g")
else:
tty.info(msg, format="g")
def overall_status(current_status: "TestStatus", substatuses: List["TestStatus"]) -> "TestStatus":
"""Determine the overall status based on the current and associated sub status values.
@@ -253,16 +269,15 @@ def __init__(self, pkg: Pb):
self.test_log_file: str
self.pkg_id: str
if self.pkg.test_suite is not None:
if pkg.test_suite:
# Running stand-alone tests
suite = self.pkg.test_suite
self.test_log_file = suite.log_file_for_spec(pkg.spec) # type: ignore[union-attr]
self.tested_file = suite.tested_file_for_spec(pkg.spec) # type: ignore[union-attr]
self.pkg_id = suite.test_pkg_id(pkg.spec) # type: ignore[union-attr]
self.test_log_file = pkg.test_suite.log_file_for_spec(pkg.spec)
self.tested_file = pkg.test_suite.tested_file_for_spec(pkg.spec)
self.pkg_id = pkg.test_suite.test_pkg_id(pkg.spec)
else:
# Running phase-time tests for a single package whose results are
# retained in the package's stage directory.
self.pkg.test_suite = TestSuite([pkg.spec])
pkg.test_suite = TestSuite([pkg.spec])
self.test_log_file = fs.join_path(pkg.stage.path, spack_install_test_log)
self.pkg_id = pkg.spec.format("{name}-{version}-{hash:7}")
@@ -270,10 +285,10 @@ def __init__(self, pkg: Pb):
self._logger = None
@property
def logger(self) -> Optional[log.LogType]:
def logger(self) -> Optional[LogType]:
"""The current logger or, if none, sets to one."""
if not self._logger:
self._logger = log.log_output(self.test_log_file)
self._logger = llnl.util.tty.log.log_output(self.test_log_file)
return self._logger
@@ -290,7 +305,7 @@ def test_logger(self, verbose: bool = False, externals: bool = False):
fs.touch(self.test_log_file) # Otherwise log_parse complains
fs.set_install_permissions(self.test_log_file)
with log.log_output(self.test_log_file, verbose) as self._logger:
with llnl.util.tty.log.log_output(self.test_log_file, verbose) as self._logger:
with self.logger.force_echo(): # type: ignore[union-attr]
tty.msg("Testing package " + colorize(r"@*g{" + self.pkg_id + r"}"))
@@ -316,13 +331,6 @@ def add_failure(self, exception: Exception, msg: str):
"""Add the failure details to the current list."""
self.test_failures.append((exception, msg))
def set_current_specs(self, base_spec: spack.spec.Spec, test_spec: spack.spec.Spec):
# Ignore union-attr check for test_suite since the constructor of this
# class ensures it is always not None.
test_suite = self.pkg.test_suite
test_suite.current_base_spec = base_spec # type: ignore[union-attr]
test_suite.current_test_spec = test_spec # type: ignore[union-attr]
def status(self, name: str, status: "TestStatus", msg: Optional[str] = None):
"""Track and print the test status for the test part name."""
part_name = f"{self.pkg.__class__.__name__}::{name}"
@@ -344,54 +352,63 @@ def status(self, name: str, status: "TestStatus", msg: Optional[str] = None):
self.test_parts[part_name] = status
self.counts[status] += 1
def handle_failures(self):
"""Raise exception if any failures were collected during testing
def phase_tests(self, builder, phase_name: str, method_names: List[str]):
"""Execute the builder's package phase-time tests.
Raises:
TestFailure: test failures were collected
Args:
builder: builder for package being tested
phase_name: the name of the build-time phase (e.g., ``build``, ``install``)
method_names: phase-specific callback method names
"""
if self.test_failures:
raise TestFailure(self.test_failures)
verbose = tty.is_verbose()
fail_fast = spack.config.get("config:fail_fast", False)
def stand_alone_tests(self, dirty=False, externals=False):
with self.test_logger(verbose=verbose, externals=False) as logger:
# Report running each of the methods in the build log
print_message(logger, f"Running {phase_name}-time tests", verbose)
builder.pkg.test_suite.current_test_spec = builder.pkg.spec
builder.pkg.test_suite.current_base_spec = builder.pkg.spec
have_tests = any(name.startswith("test_") for name in method_names)
if have_tests:
copy_test_files(builder.pkg, builder.pkg.spec)
for name in method_names:
try:
# Prefer the method in the package over the builder's.
# We need this primarily to pick up arbitrarily named test
# methods but also some build-time checks.
fn = getattr(builder.pkg, name, getattr(builder, name))
msg = f"RUN-TESTS: {phase_name}-time tests [{name}]"
print_message(logger, msg, verbose)
fn()
except AttributeError as e:
msg = f"RUN-TESTS: method not implemented [{name}]"
print_message(logger, msg, verbose)
self.add_failure(e, msg)
if fail_fast:
break
if have_tests:
print_message(logger, "Completed testing", verbose)
# Raise any collected failures here
if self.test_failures:
raise TestFailure(self.test_failures)
def stand_alone_tests(self, kwargs):
"""Run the package's stand-alone tests.
Args:
kwargs (dict): arguments to be used by the test process
Raises:
AttributeError: required test_requires_compiler attribute is missing
"""
pkg = self.pkg
spec = pkg.spec
pkg_spec = spec.format("{name}-{version}-{hash:7}")
import spack.build_environment
if not hasattr(pkg, "test_requires_compiler"):
raise AttributeError(
f"Cannot run tests for {pkg_spec}: missing required "
"test_requires_compiler attribute"
)
if pkg.test_requires_compiler:
compilers = spack.compilers.compilers_for_spec(
spec.compiler, arch_spec=spec.architecture
)
if not compilers:
tty.error(
f"Skipping tests for package {pkg_spec}\n"
f"Package test requires missing compiler {spec.compiler}"
)
return
kwargs = {
"dirty": dirty,
"fake": False,
"context": "test",
"externals": externals,
"verbose": tty.is_verbose(),
}
spack.build_environment.start_build_process(pkg, test_process, kwargs)
spack.build_environment.start_build_process(self.pkg, test_process, kwargs)
def parts(self) -> int:
"""The total number of (checked) test parts."""
@@ -683,9 +700,10 @@ def process_test_parts(pkg: Pb, test_specs: List[spack.spec.Spec], verbose: bool
):
test_fn(pkg)
# If fail-fast was on, we errored out above
# If we collected errors, raise them in batch here
tester.handle_failures()
# If fail-fast was on, we error out above
# If we collect errors, raise them in batch here
if tester.test_failures:
raise TestFailure(tester.test_failures)
finally:
if tester.ran_tests():
@@ -711,12 +729,12 @@ def test_process(pkg: Pb, kwargs):
with pkg.tester.test_logger(verbose, externals) as logger:
if pkg.spec.external and not externals:
log.print_message(logger, "Skipped tests for external package", verbose)
print_message(logger, "Skipped tests for external package", verbose)
pkg.tester.status(pkg.spec.name, TestStatus.SKIPPED)
return
if not pkg.spec.installed:
log.print_message(logger, "Skipped not installed package", verbose)
print_message(logger, "Skipped not installed package", verbose)
pkg.tester.status(pkg.spec.name, TestStatus.SKIPPED)
return
@@ -841,7 +859,7 @@ def __init__(self, specs, alias=None):
# even if they contain the same spec
self.specs = [spec.copy() for spec in specs]
self.current_test_spec = None # spec currently tested, can be virtual
self.current_base_spec = None # spec currently running tests
self.current_base_spec = None # spec currently running do_test
self.alias = alias
self._hash = None
@@ -865,10 +883,6 @@ def content_hash(self):
self._hash = b32_hash
return self._hash
def set_current_specs(self, base_spec: spack.spec.Spec, test_spec: spack.spec.Spec):
self.current_base_spec = base_spec
self.current_test_spec = test_spec
def __call__(self, *args, **kwargs):
self.write_reproducibility_data()
@@ -878,16 +892,18 @@ def __call__(self, *args, **kwargs):
externals = kwargs.get("externals", False)
for spec in self.specs:
pkg = spec.package
try:
if pkg.test_suite:
if spec.package.test_suite:
raise TestSuiteSpecError(
f"Package {pkg.name} cannot be run in two test suites at once"
"Package {} cannot be run in two test suites at once".format(
spec.package.name
)
)
# Set up the test suite to know which test is running
pkg.test_suite = self
self.set_current_specs(spec, spec)
spec.package.test_suite = self
self.current_base_spec = spec
self.current_test_spec = spec
# setup per-test directory in the stage dir
test_dir = self.test_dir_for_spec(spec)
@@ -896,7 +912,7 @@ def __call__(self, *args, **kwargs):
fs.mkdirp(test_dir)
# run the package tests
pkg.tester.stand_alone_tests(dirty=dirty, externals=externals)
spec.package.do_test(dirty=dirty, externals=externals)
# Clean up on success
if remove_directory:
@@ -930,7 +946,8 @@ def __call__(self, *args, **kwargs):
finally:
spec.package.test_suite = None
self.set_current_specs(None, None)
self.current_test_spec = None
self.current_base_spec = None
write_test_summary(self.counts)

View File

@@ -712,7 +712,7 @@ class PackageBase(WindowsRPath, PackageViewMixin, metaclass=PackageMeta):
#: are available to build a custom test code.
test_requires_compiler: bool = False
#: The spec's TestSuite instance, which is used to manage its testing.
#: TestSuite instance used to manage stand-alone tests for 1+ specs.
test_suite: Optional[Any] = None
def __init__(self, spec):
@@ -1943,6 +1943,29 @@ def _resource_stage(self, resource):
resource_stage_folder = "-".join(pieces)
return resource_stage_folder
def do_test(self, dirty=False, externals=False):
if self.test_requires_compiler:
compilers = spack.compilers.compilers_for_spec(
self.spec.compiler, arch_spec=self.spec.architecture
)
if not compilers:
tty.error(
"Skipping tests for package %s\n"
% self.spec.format("{name}-{version}-{hash:7}")
+ "Package test requires missing compiler %s" % self.spec.compiler
)
return
kwargs = {
"dirty": dirty,
"fake": False,
"context": "test",
"externals": externals,
"verbose": tty.is_verbose(),
}
self.tester.stand_alone_tests(kwargs)
def unit_test_check(self):
"""Hook for unit tests to assert things about package internals.

View File

@@ -204,7 +204,7 @@ def extract_package_from_signature(self, instance, *args, **kwargs):
class TestInfoCollector(InfoCollector):
"""Collect information for the PackageTest.stand_alone_tests method.
"""Collect information for the PackageBase.do_test method.
Args:
specs: specs whose install information will be recorded
@@ -214,7 +214,7 @@ class TestInfoCollector(InfoCollector):
dir: str
def __init__(self, specs: List[spack.spec.Spec], record_directory: str):
super().__init__(spack.install_test.PackageTest, "stand_alone_tests", specs)
super().__init__(spack.package_base.PackageBase, "do_test", specs)
self.dir = record_directory
def on_success(self, pkg, kwargs, package_record):
@@ -233,7 +233,7 @@ def fetch_log(self, pkg: spack.package_base.PackageBase):
return f"Cannot open log for {pkg.spec.cshort_spec}"
def extract_package_from_signature(self, instance, *args, **kwargs):
return instance.pkg
return instance
@contextlib.contextmanager

View File

@@ -17,6 +17,7 @@
import llnl.util.filesystem as fs
import spack.compilers
import spack.deptypes as dt
import spack.error
import spack.install_test
@@ -261,7 +262,7 @@ def test_package_tester_fails():
s = spack.spec.Spec("pkg-a")
pkg = BaseTestPackage(s)
with pytest.raises(ValueError, match="without concrete version"):
pkg.tester
pkg.tester()
def test_package_fetcher_fails():
@@ -269,3 +270,18 @@ def test_package_fetcher_fails():
pkg = BaseTestPackage(s)
with pytest.raises(ValueError, match="without concrete version"):
pkg.fetcher
def test_package_test_no_compilers(mock_packages, monkeypatch, capfd):
def compilers(compiler, arch_spec):
return None
monkeypatch.setattr(spack.compilers, "compilers_for_spec", compilers)
s = spack.spec.Spec("pkg-a")
pkg = BaseTestPackage(s)
pkg.test_requires_compiler = True
pkg.do_test()
error = capfd.readouterr()[1]
assert "Skipping tests for package" in error
assert "test requires missing compiler" in error

View File

@@ -10,7 +10,6 @@
from llnl.util.filesystem import join_path, mkdirp, touch
import spack.compilers
import spack.config
import spack.install_test
import spack.spec
@@ -526,18 +525,3 @@ def test_packagetest_fails(mock_packages):
pkg = MyPackage(s)
with pytest.raises(ValueError, match="require a concrete package"):
spack.install_test.PackageTest(pkg)
def test_package_test_no_compilers(mock_packages, config, monkeypatch, capfd):
s = spack.spec.Spec("libdwarf").concretized()
def compilers(compiler, arch_spec):
return None
monkeypatch.setattr(spack.compilers, "compilers_for_spec", compilers)
s.package.test_requires_compiler = True
s.package.tester.stand_alone_tests()
error = capfd.readouterr()[1]
assert "Skipping tests for package" in error
assert "test requires missing compiler" in error

View File

@@ -35,6 +35,36 @@
}
_versions = {
"24.10.1": {
"RHEL-8": (
"0e894ce2a9d7af8fabe21368a44e9f71d25bda80413fb8dd22f389c3c5e36100",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_RHEL-8_aarch64.tar",
),
"RHEL-9": (
"5c2cd9c6f505050a39012f180a5c739065f140fe45b9c3039f3e6e6b7c911002",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_RHEL-9_aarch64.tar",
),
"SLES-15": (
"3b33b397b253a14994b6341f219ed6af5cf79ba8fc5acb99fa028deb4344fbaf",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_SLES-15_aarch64.tar",
),
"Ubuntu-20.04": (
"5a5e47cbb1a28f633961a418ff990f72bdd76c2854da80aa3dcf7619bb0fcc8c",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_Ubuntu-20.04_aarch64.tar",
),
"Ubuntu-22.04": (
"d1da0469a0c6df62911edd2bbe49525aa56fffe9a9f419aa19e9aaa9a8bd0295",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_Ubuntu-22.04_aarch64.tar",
),
"AmazonLinux-2": (
"bfcb0de00be5b65a37d41473a9f85ac49b29ccb83e0338e57910fa0a9ffef79d",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_AmazonLinux-2_aarch64.tar",
),
"AmazonLinux-2023": (
"56a292dd2283c842d5bcfbeaa9bdb81d28f30f7500a7fd113487ecc456652fe9",
"https://developer.arm.com/-/cdn-downloads/permalink/Arm-Compiler-for-Linux/Version_24.10.1/arm-compiler-for-linux_24.10.1_AmazonLinux-2023_aarch64.tar",
),
},
"24.10": {
"RHEL-8": (
"7c685c5393345baff573dc53ea3bb84e6293f9e51808e168ececcf51efb45813",
@@ -242,9 +272,7 @@ def get_os(ver):
return _os_map_before_23.get(spack_os, "")
if ver.startswith("23") or ver == "24.04":
return {**_os_map, "centos7": "RHEL-7", "rhel7": "RHEL-7"}.get(spack_os, "RHEL-7")
if ver == "24.10":
return _os_map.get(spack_os, "RHEL-8")
return "RHEL-8"
return _os_map.get(spack_os, "RHEL-8")
def get_armpl_version_to_3(spec):

View File

@@ -17,6 +17,7 @@ class Armadillo(CMakePackage):
license("Apache-2.0")
version("14.0.3", sha256="ebd6215eeb01ee412fed078c8a9f7f87d4e1f6187ebcdc1bc09f46095a4f4003")
version("14.0.2", sha256="248e2535fc092add6cb7dea94fc86ae1c463bda39e46fd82d2a7165c1c197dff")
version("12.8.4", sha256="558fe526b990a1663678eff3af6ec93f79ee128c81a4c8aef27ad328fae61138")
version("12.8.3", sha256="2922589f6387796504b340da6bb954bef3d87574c298515893289edd2d890151")

View File

@@ -54,7 +54,12 @@ class Arrow(CMakePackage, CudaPackage):
depends_on("llvm@:11 +clang", when="+gandiva @:3", type="build")
depends_on("llvm@:12 +clang", when="+gandiva @:4", type="build")
depends_on("llvm@:13 +clang", when="+gandiva @:7", type="build")
depends_on("llvm@:14 +clang", when="+gandiva @8:", type="build")
depends_on("llvm@:14 +clang", when="+gandiva @:9", type="build")
depends_on("llvm@:15 +clang", when="+gandiva @:11", type="build")
depends_on("llvm@:16 +clang", when="+gandiva @:13", type="build")
depends_on("llvm@:17 +clang", when="+gandiva @:15.0.1", type="build")
depends_on("llvm@:18.1 +clang", when="+gandiva @:16.0.1", type="build")
depends_on("llvm@:19.1 +clang", when="+gandiva", type="build")
depends_on("lz4", when="+lz4")
depends_on("ninja", type="build")
depends_on("openssl", when="+gandiva @6.0.0:")

View File

@@ -20,67 +20,35 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage):
license("Apache-2.0")
version("0.5.0", sha256="4a8834224d96fd01897e5872ac109f60d91ef0bd7b63fac05a73dcdb61a5530e")
version("0.4.4", sha256="8b5ae63aa2d50c2ecf48d752424e4a33c50c07d9f0f5ca5448246de3286fd836")
version("0.4.3", sha256="b4f603dce1dc9c4894ea4c86f6574026ea8536714982e7dc6dff7472c925c892")
version("0.4.2", sha256="eeca9705413f5e16e0fb81154e042600c8df125af7049912757feb01d43730e2")
version("0.4.1", sha256="24e5c15eb9eec45f52d94a6719ae3505388b49d409cb7e26c875c70ac409bd2c")
version(
"0.4.4",
sha256="8b5ae63aa2d50c2ecf48d752424e4a33c50c07d9f0f5ca5448246de3286fd836",
deprecated=True,
)
version(
"0.4.3",
sha256="b4f603dce1dc9c4894ea4c86f6574026ea8536714982e7dc6dff7472c925c892",
deprecated=True,
)
version(
"0.4.2",
sha256="eeca9705413f5e16e0fb81154e042600c8df125af7049912757feb01d43730e2",
deprecated=True,
)
version(
"0.4.1",
sha256="24e5c15eb9eec45f52d94a6719ae3505388b49d409cb7e26c875c70ac409bd2c",
deprecated=True,
)
version(
"0.4.0",
sha256="8b8eaef84641eeca0fc40321d358205fc9d51e3c6dc7bd1bf03218c1919c774e",
deprecated=True,
)
version("0.3.2", sha256="65a33de2518716638375df259d9dfc4d68b821ba1110f56b24c823ef5c5df249")
version(
"0.3.1",
sha256="0f1effab306856d66f5079e8cadcb63e8c1f8a79245b94bf44b89251b3fb0cf0",
deprecated=True,
)
version(
"0.3.0",
sha256="f9620b6bcd8c9b5324ef215f8e44461f915c3fff47bf85ae442c9dafacaa79ac",
deprecated=True,
)
version("0.2.2", sha256="ba5e341d636e00e3d7dbac13a2016b97014917489f46b8b387a2adf9d9563872")
version(
"0.2.1",
sha256="b3717b43f70dd0da848139da4171ca7a887bb6777908845b6d953d47b1f4db41",
deprecated=True,
)
version(
"0.2.0",
sha256="12af28fda0e482a9eba89781b4ead445cf6f170bc1b8d88cc814e49b1ec09e9f",
deprecated=True,
)
version("0.1.5", sha256="5e63b9ce7fcfe34a8938565b84453bce51fa6639d1ede13bb59d41de6431cef4")
version(
"0.1.4",
sha256="ea82a03fc750a2a805f87afd9ac944109dd7537edb5c0c370f93d332d4cd47db",
deprecated=True,
)
version(
"0.1.3",
sha256="992c49a48adba884fe3933c9624da5bf480ef0694809430ae98903f2c28cc881",
deprecated=True,
)
version(
"0.1.2",
sha256="d123ea2e34267adba387d46bae8c9a1146a2e047f87f2ea5f823878c1684678d",
deprecated=True,
)
version(
"0.1.1",
sha256="a1d58e29226e89a2330d69c40049d61e7c885cf991824e60ff8c9ccc95fc5ec6",
deprecated=True,
)
version(
"0.1.0",
sha256="46692977b9b31d73662252cc122d7f016f94139475788bca7fdcb97279b93af8",
deprecated=True,
)
depends_on("cxx", type="build")
_cxxstd_values = ("14", "17")
_cxxstd_values = ("17", "20")
# Note: cuda and rocm variants are defined by mixin classes
variant(
@@ -107,13 +75,10 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage):
depends_on("nlohmann-json")
depends_on("geant4@10.5:", when="@0.4.2: +geant4")
depends_on("geant4@10.5:11.1", when="@0.3.1:0.4.1 +geant4")
depends_on("geant4@10.6:11.1", when="@0.3.0 +geant4")
depends_on("geant4@10.6:11.0", when="@0.2.1:0.2 +geant4")
depends_on("geant4@10.7:11.0", when="@:0.2.0 +geant4")
depends_on("hepmc3", when="+hepmc3")
depends_on("root", when="+root")
depends_on("swig@4.1:", when="+swig")
depends_on("vecgeom", when="+vecgeom")
depends_on("vecgeom@1.2.5:", when="+vecgeom")
depends_on("python", type="build")
depends_on("doxygen", type="build", when="+doc")
@@ -125,20 +90,11 @@ class Celeritas(CMakePackage, CudaPackage, ROCmPackage):
depends_on("root cxxstd=" + _std, when="+root cxxstd=" + _std)
depends_on("vecgeom cxxstd=" + _std, when="+vecgeom cxxstd=" + _std)
depends_on("vecgeom@1.2.5:", when="+vecgeom @0.4:")
depends_on("vecgeom +gdml@1.1.17:1", when="+vecgeom @:0.3")
depends_on("vecgeom +cuda", when="+vecgeom +cuda")
for _arch in CudaPackage.cuda_arch_values:
depends_on("vecgeom+cuda cuda_arch=" + _arch, when="+vecgeom +cuda cuda_arch=" + _arch)
conflicts("cxxstd=14", when="@0.3:")
conflicts("+rocm", when="+cuda", msg="AMD and NVIDIA accelerators are incompatible")
conflicts("+rocm", when="+vecgeom", msg="HIP support is only available with ORANGE")
conflicts("^vecgeom+shared@1.2.0", when="+vecgeom +cuda")
patch(
"https://patch-diff.githubusercontent.com/raw/celeritas-project/celeritas/pull/830.patch?full_index=1",
sha256="9ac1929a95170b497aaac76f62146f313e4b31aea7271acac354270550d0d685",
when="@0.3.0 ^geant4@10",
)
def cmake_args(self):
define = self.define

View File

@@ -18,7 +18,8 @@ class Costo(CMakePackage):
license("LGPL-3.0-or-later")
version("0.0.5", tag="v0.0.5", preferred=True)
version("0.0.8", tag="v0.0.8", preferred=True)
version("0.0.5", tag="v0.0.5")
version("develop", branch="devel")
version("main", branch="main", deprecated=True)

View File

@@ -106,6 +106,7 @@ def setup_build_environment(self, env):
# Only needed for sbang.patch above
if self.spec.satisfies("@:1.60"):
env.set("SPACK_SBANG", sbang.sbang_install_path())
env.set("GI_SCANNER_DISABLE_CACHE", "1")
def setup_run_environment(self, env):
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
@@ -113,6 +114,7 @@ def setup_run_environment(self, env):
def setup_dependent_build_environment(self, env, dependent_spec):
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
env.prepend_path("GI_TYPELIB_PATH", join_path(self.prefix.lib, "girepository-1.0"))
env.set("GI_SCANNER_DISABLE_CACHE", "1")
def setup_dependent_run_environment(self, env, dependent_spec):
env.prepend_path("XDG_DATA_DIRS", self.prefix.share)

View File

@@ -26,6 +26,7 @@ class Likwid(Package):
license("GPL-3.0-only")
version("5.4.0", sha256="0f2b671c69caa993fedb48187b3bdcc94c22400ec84c926fd0898dbff68aa03e")
version("5.3.0", sha256="c290e554c4253124ac2ab8b056e14ee4d23966b8c9fbfa10ba81f75ae543ce4e")
version("5.2.2", sha256="7dda6af722e04a6c40536fc9f89766ce10f595a8569b29e80563767a6a8f940e")
version("5.2.1", sha256="1b8e668da117f24302a344596336eca2c69d2bc2f49fa228ca41ea0688f6cbc2")

View File

@@ -72,6 +72,7 @@ class Mapl(CMakePackage):
version("2.41.0", sha256="1142f9395e161174e3ec1654fba8bda1d0bd93edc7438b1927d8f5d7b42a0a86")
version("2.40.5", sha256="85b4a4ac0d843398452808b88d7a5c29435aa37b69b91a1f4bee664e9f367b7d")
version("2.40.4", sha256="fb843b118d6e56cd4fc4b114c4d6f91956d5c8b3d9389ada56da1dfdbc58904f")
version("2.40.3.1", sha256="1e5a9d6a84d23febe826b1adcd2c2b1681bcc2e61c2959a8bbf4756357e22187")
version("2.40.3", sha256="4b82a314c88a035fc2b91395750aa7950d6bee838786178ed16a3f39a1e45519")
version("2.40.2", sha256="7327f6f5bce6e09e7f7b930013fba86ee7cbfe8ed4c7c087fc9ab5acbf6640fd")
version("2.40.1", sha256="6f40f946fabea6ba73b0764092e495505d220455b191b4e454736a0a25ee058c")
@@ -269,6 +270,7 @@ class Mapl(CMakePackage):
# ESMF dependency
depends_on("esmf@8.6.1:", when="@2.45:")
depends_on("esmf@8.6.1:", when="@=2.40.3.1")
depends_on("esmf@8.6.0", when="@2.44")
depends_on("esmf@8.5:", when="@2.40:2.43")
depends_on("esmf@8.4", when="@2.34:2.39")

View File

@@ -3,6 +3,9 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import shlex
from spack.build_systems.cmake import CMakeBuilder
from spack.package import *
@@ -18,16 +21,26 @@ class PyBlosc2(PythonPackage):
version("2.2.8", sha256="59065aac5e9b01b0e9f3825d8e7f69f64b59bbfab148a47c54e4115f62a97474")
version("2.0.0", sha256="f19b0b3674f6c825b490f00d8264b0c540c2cdc11ec7e81178d38b83c57790a1")
depends_on("c", type="build") # generated
depends_on("c", type="build")
depends_on("python@3.9:3", when="@2.2:", type=("build", "link", "run"))
depends_on("python@3.8:3", when="@2.0", type=("build", "link", "run"))
depends_on("py-setuptools", type="build")
depends_on("py-scikit-build", type="build")
depends_on("py-cython", type="build")
depends_on("cmake@3.11:", type="build")
depends_on("ninja", type="build")
depends_on("py-numpy@1.20.3:", type=("build", "link", "run"))
depends_on("py-ndindex@1.4:", when="@2.2:", type=("build", "run"))
depends_on("py-msgpack", type=("build", "run"))
depends_on("py-py-cpuinfo", when="@2.2:", type=("build", "run"))
depends_on("c-blosc2", type="link")
with default_args(type="build"):
depends_on("py-setuptools")
depends_on("py-scikit-build")
depends_on("py-cython")
depends_on("cmake@3.11:")
depends_on("ninja")
depends_on("pkgconfig")
def setup_build_environment(self, env):
cmake_args = [*CMakeBuilder.std_args(self), CMakeBuilder.define("USE_SYSTEM_BLOSC2", True)]
# scikit-build does not want a CMAKE_INSTALL_PREFIX
cmake_args = [arg for arg in cmake_args if "CMAKE_INSTALL_PREFIX" not in arg]
env.set("SKBUILD_CONFIGURE_OPTIONS", " ".join(shlex.quote(arg) for arg in cmake_args))

View File

@@ -16,10 +16,13 @@ class PyLibsonata(PythonPackage):
maintainers("tristan0x")
version("master", branch="master")
version("0.1.29", sha256="321878f28c7d64a65683443f832dfa2f21ff8ed69e700d2dde62ccb5f87d4525")
version("0.1.25", sha256="b332efa718123ee265263e1583a5998eaa945a13b8a22903873764cf1d8173fa")
depends_on("cxx", type="build") # generated
depends_on("python@3.9:", type=("build", "run"), when="@0.1.29:")
depends_on("catch2@2.13:", type="test")
depends_on("cmake@3.16:", type="build")
depends_on("fmt@7.1:")

View File

@@ -17,13 +17,15 @@ class PyNumpyQuaternion(PythonPackage):
C for speed."""
homepage = "https://github.com/moble/quaternion"
pypi = "numpy-quaternion/numpy-quaternion-2021.11.4.15.26.3.tar.gz"
pypi = "numpy-quaternion/numpy_quaternion-2024.0.3.tar.gz"
license("MIT")
version("2024.0.3", sha256="cf39a8a4506eeda297ca07a508c10c08b3487df851a0e34f070a7bf8fab9f290")
version(
"2021.11.4.15.26.3",
sha256="b0dc670b2adc8ff2fb8d6105a48769873f68d6ccbe20af6a19e899b1e8d48aaf",
url="https://pypi.io/packages/source/n/numpy-quaternion/numpy-quaternion-2021.11.4.15.26.3.tar.gz",
)
depends_on("c", type="build") # generated
@@ -31,7 +33,16 @@ class PyNumpyQuaternion(PythonPackage):
variant("scipy", default=True, description="Build with scipy support")
variant("numba", default=True, description="Build with numba support")
depends_on("python@3.10:", when="@2024:")
depends_on("py-setuptools", type="build")
depends_on("py-setuptools@0.61:", type="build", when="@2024:")
depends_on("py-hatchling", type="build", when="@2024:")
depends_on("py-numpy@1.13:", type=("build", "run"))
depends_on("py-numpy@2", type=("build"), when="@2024:")
depends_on("py-numpy@1.25:2", type=("run"), when="@2024:")
depends_on("py-scipy", type=("build", "run"), when="+scipy")
depends_on("py-scipy@1.5:1", type=("build", "run"), when="@2024:+scipy")
depends_on("py-numba", type=("build", "run"), when="+numba")
depends_on("py-numba@0.55:", type=("build", "run"), when="@2024:+numba")

View File

@@ -178,6 +178,13 @@ class PyScipy(PythonPackage):
patch("scipy-clang.patch", when="@1.5.0:1.6.3 %clang")
# https://github.com/scipy/scipy/issues/21884
patch(
"https://github.com/scipy/scipy/commit/ab7d08c6148286059f6498ab5c3070268d13cbd9.patch?full_index=1",
sha256="37209324c6c2d9bf9284bf4726ec3ea7ecafabf736c7a72cf6789af97aebd30b",
when="@1.8.0:1.14.0",
)
@property
def archive_files(self):
return [join_path(self.stage.source_path, "build", "meson-logs", "meson-log.txt")]

View File

@@ -31,8 +31,8 @@ class PyTables(PythonPackage):
depends_on("cxx", type="build") # generated
variant("zlib", default=True, description="Support for zlib compression")
variant("bzip2", default=False, description="Support for bzip2 compression")
variant("lzo", default=False, description="Support for lzo compression")
variant("bzip2", default=True, description="Support for bzip2 compression")
variant("lzo", default=True, description="Support for lzo compression")
# pyproject.toml
depends_on("py-setuptools@61:", when="@3.9:", type="build")
@@ -65,6 +65,9 @@ class PyTables(PythonPackage):
depends_on("c-blosc@1.11.1:", when="@3.8:")
depends_on("c-blosc@1.4.1:", when="@3.3:")
# blosc2 headers are directly included
depends_on("c-blosc2")
depends_on("zlib-api", when="+zlib")
depends_on("bzip2", when="+bzip2")
depends_on("lzo", when="+lzo")

View File

@@ -17,11 +17,11 @@ class PyWandb(PythonPackage):
license("MIT")
version("0.16.6", sha256="86f491e3012d715e0d7d7421a4d6de41abef643b7403046261f962f3e512fe1c")
version("0.13.9", sha256="0a17365ce1f18306ce7a7f16b943094fac7284bb85f4e52c0685705602f9e307")
depends_on("py-setuptools", type=("build", "run"))
depends_on("py-pathtools", type=("build", "run"))
depends_on("py-setproctitle", type=("build", "run"))
depends_on("py-appdirs@1.4.3:", type=("build", "run"))
depends_on("py-protobuf@3.19:4", type=("build", "run"))
@@ -29,10 +29,15 @@ class PyWandb(PythonPackage):
depends_on("py-typing-extensions", type=("build", "run"), when="^python@:3.9")
depends_on("py-pyyaml", type=("build", "run"))
depends_on("py-click@7:", type=("build", "run"))
depends_on("py-click@7:", type=("build", "run"), when="@0.13")
depends_on("py-click@7.1:", type=("build", "run"), when="@0.15.5:")
conflicts("^py-click@8.0.0")
depends_on("py-gitpython@1:", type=("build", "run"))
conflicts("^py-gitpython@3.1.29")
depends_on("py-requests@2", type=("build", "run"))
depends_on("py-psutil@5:", type=("build", "run"))
depends_on("py-sentry-sdk@1.0.0:", type=("build", "run"))
depends_on("py-dockerpy-creds@0.4.0:", type=("build", "run"))
# Historical dependencies
depends_on("py-pathtools", type=("build", "run"), when="@:0.15")

View File

@@ -27,6 +27,11 @@ def get_url(qualname):
_url = "https://github.com/qt/{}/archive/refs/tags/v6.2.3.tar.gz"
return _url.format(qualname.lower())
@staticmethod
def get_git(qualname):
_git = "https://github.com/qt/{}.git"
return _git.format(qualname.lower())
@staticmethod
def get_list_url(qualname):
_list_url = "https://github.com/qt/{}/tags"

View File

@@ -0,0 +1,60 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
from spack.pkg.builtin.qt_base import QtBase, QtPackage
class QtTools(QtPackage):
"""Qt Tools contains tools like Qt Designer."""
url = QtPackage.get_url(__qualname__)
git = QtPackage.get_git(__qualname__)
list_url = QtPackage.get_list_url(__qualname__)
maintainers("wdconinc")
license("BSD-3-Clause")
# src/assistant/qlitehtml is a submodule that is not in the git archive
version("6.7.3", commit="ec4747e62a837a0262212a5f4fb03734660c7360", submodules=True)
version("6.7.2", commit="46ffaed90df8c14d67b4b16fdf5e0b87ab227c88", submodules=True)
variant(
"assistant",
default=False,
description="Qt Assistant for viewing on-line documentation in Qt help file format.",
)
variant(
"designer",
default=False,
description="Qt Widgets Designer for designing and building GUIs with Qt Widgets.",
)
depends_on("llvm +clang")
depends_on("qt-base +network")
depends_on("qt-base +widgets", when="+designer")
for _v in QtBase.versions:
v = str(_v)
depends_on("qt-base@" + v, when="@" + v)
def cmake_args(self):
spec = self.spec
args = super().cmake_args() + []
def define(cmake_var, value):
args.append(self.define(cmake_var, value))
if spec.satisfies("+assistant"):
define("FEATURE_assistant", True)
if spec.satisfies("+designer"):
define("FEATURE_designer", True)
return args

View File

@@ -170,12 +170,14 @@ class Xsdk(BundlePackage, CudaPackage, ROCmPackage):
xsdk_depends_on("dealii ~trilinos", when="~trilinos +dealii")
xsdk_depends_on(
"dealii@9.5.1~assimp~python~doc~gmsh+petsc+slepc+mpi~int64"
+ "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce",
+ "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce"
+ "~opencascade",
when="@1.0.0 +dealii",
)
xsdk_depends_on(
"dealii@9.4.0~assimp~python~doc~gmsh+petsc+slepc+mpi~int64"
+ "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal",
+ "~netcdf+metis+sundials~ginkgo~symengine~simplex~arborx~cgal~oce"
+ "~opencascade",
when="@0.8.0 +dealii",
)