Compare commits
17 Commits
cleanup_do
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f05cbfbf44 | ||
|
|
448049ccfc | ||
|
|
e56057fd79 | ||
|
|
26d80e7bc5 | ||
|
|
60eb0e9c80 | ||
|
|
7443a3b572 | ||
|
|
a5ba4f8d91 | ||
|
|
6ef0f495a9 | ||
|
|
e91b8c291a | ||
|
|
6662046aca | ||
|
|
db83c62fb1 | ||
|
|
d4adfda385 | ||
|
|
e8a8e2d98b | ||
|
|
55c770c556 | ||
|
|
33a796801c | ||
|
|
b90ac6441c | ||
|
|
68b69aa9e3 |
2
.github/workflows/coverage.yml
vendored
2
.github/workflows/coverage.yml
vendored
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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:")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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:")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")]
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
60
var/spack/repos/builtin/packages/qt-tools/package.py
Normal file
60
var/spack/repos/builtin/packages/qt-tools/package.py
Normal 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
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user