summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-03-27Enable ASAN in ROCm packages (#42704)afzpatel1-0/+28
* Initial commit to enable ASAN * fix styling * fix styling * add asan option for hip-tensor and roctracer-dev
2024-03-27Add config option and compiler support to reuse across OS's (#42693)psakievich4-1/+32
* Allow compilers to function across compatible OS's * Add documentation in the default yaml Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> Co-authored-by: Gregory Becker <becker33@llnl.gov>
2024-03-27Improve fixup macos rpath unit test (#43392)Massimiliano Culpo1-6/+17
Starting from XCode version 15 the linker ignores duplicate rpaths, so the libraries don't need fixing in those cases
2024-03-26Add macos-14 as a runner (Apple M1) (#42728)Massimiliano Culpo1-0/+3
* Add macos-14 as a runner (Apple M1) * Mark a test xfail We need to check later if this test needs modifications on Apple Silicon chips. --------- Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl> Co-authored-by: alalazo <alalazo@users.noreply.github.com>
2024-03-26buildcache sync: manifest-glob with arbitrary destination (#41284)kwryankrattiger2-9/+102
* buildcache sync: manifest-glob with arbitrary destination The current implementation of the --manifest-glob is a bit restrictive requiring the destination to be known by the generation stage of CI. This allows specifying an arbitrary destination mirror URL. * Add unit test for buildcache sync with manifest * Fix test and arguments for manifest-glob with override destination * Add testing path for unused mirror argument
2024-03-26Allow unit test to work on Apple M1/M2 (#43363)Massimiliano Culpo18-448/+278
* Remove a few compilers from static test data These compilers were used only in a bunch of tests, so they are added only there. * Remove clang@3.3 from unit test configuration * Parametrize compilers.yaml * Remove specially named gcc from static data The compilers are used in two tests * Remove apple-clang and macOS compilers from static data The compiler was used only in multimethod tests * Remove clang@3.5 (compiler seems to be unused) * Remove gcc@4.4.0 (compiler seems to be unused) * Exclude x86_64 tests on other architectures * Mark two tests as for clingo only * Update version syntax in compilers.yaml * Parametrize tcl tests on architectures * Parametrize lmod tests on architectures * Substitute gcc@4.5.0 with gcc@4.8.0 so it can be used on aarch64 * Fix a few issues with aarch64 and unit-tests
2024-03-25add command_line scope to help metavar (#42890)Danny McClanahan1-1/+1
It's now possible to add config on the command line with `spack -c <CONFIG_VARS> ...`, but the new `command_line` scope isn't reflected in the help output for `--scope`: ```bash > spack help config ... --scope {defaults,system,site,user}[/PLATFORM] or env:ENVIRONMENT configuration scope to read/modify ... ```
2024-03-25strip url: fix whl suffix, remove exe (#43344)Harmen Stoppels2-8/+7
2024-03-24Add `intel-oneapi-runtime`, allow injecting virtual dependencies (#42062)Massimiliano Culpo5-15/+93
This PR adds: - A new runtime for `%oneapi` compilers, called `intel-oneapi-runtime` - Information to both `gcc-runtime` and `intel-oneapi-runtime`, to ensure that we don't mix compilers using different soname for either `libgfortran` or `libifcore` To do so, the following internal mechanisms have been implemented: - Possibility to inject virtual dependencies from the `runtime_constraints` callback on packages Information has been added to `gcc-runtime` to provide the correct soname under different conditions on its `%gcc`. Rules injected into the solver looks like: ```prolog % Add a dependency on 'gfortran@5' for nodes compiled with gcc@=13.2.0 and using the 'fortran' language attr("dependency_holds", node(ID, Package), "gfortran", "link") :- attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). attr("virtual_node", node(RuntimeID, "gfortran")) :- attr("depends_on", node(ID, Package), ProviderNode, "link"), provider(ProviderNode, node(RuntimeID, "gfortran")), attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). attr("node_version_satisfies", node(RuntimeID, "gfortran"), "5") :- attr("depends_on", node(ID, Package), ProviderNode, "link"), provider(ProviderNode, node(RuntimeID, "gfortran")), attr("node", node(ID, Package)), attr("node_compiler", node(ID, Package), "gcc"), attr("node_compiler_version", node(ID, Package), "gcc", "13.2.0"), not external(node(ID, Package)), not runtime(Package), attr("language", node(ID, Package), "fortran"). ```
2024-03-22Support for prereleases (#43140)Harmen Stoppels10-113/+273
This adds support for prereleases. Alpha, beta and release candidate suffixes are ordered in the intuitive way: ``` 1.2.0-alpha < 1.2.0-alpha.1 < 1.2.0-beta.2 < 1.2.0-rc.3 < 1.2.0 < 1.2.0-xyz ``` Alpha, beta and rc prereleases are defined as follows: split the version string into components like before (on delimiters and string boundaries). If there's a string component `alpha`, `beta` or `rc` followed by an optional numeric component at the end, then the version is prerelease. So `1.2.0-alpha.1 == 1.2.0alpha1 == 1.2.0.alpha1` are all the same, as usual. The strings `alpha`, `beta` and `rc` are chosen because they match semver, they are sufficiently long to be unambiguous, and and all contain at least one non-hex character so distinguish them from shasum/digest type suffixes. The comparison key is now stored as `(release_tuple, prerelease_tuple)`, so in the above example: ``` ((1,2,0),(ALPHA,)) < ((1,2,0),(ALPHA,1)) < ((1,2,0),(BETA,2)) < ((1,2,0),(RC,3)) < ((1,2,0),(FINAL,)) < ((1,2,0,"xyz"), (FINAL,)) ``` The version ranges `@1.2.0:` and `@:1.1` do *not* include prereleases of `1.2.0`. So for packaging, if the `1.2.0alpha` and `1.2.0` versions have the same constraints on dependencies, it's best to write ```python depends_on("x@1:", when="@1.2.0alpha:") ``` However, `@1.2:` does include `1.2.0alpha`. This is because Spack considers `1.2 < 1.2.0` as distinct versions, with `1.2 < 1.2.0alpha < 1.2.0` as a consequence. Alternatively, the above `depends_on` statement can thus be written ```python depends_on("x@1:", when="@1.2:") ``` which can be useful too. A short-hand to include prereleases, but you can still be explicit to exclude the prerelease by specifying the patch version number. ### Concretization Concretization uses a different version order than `<`. Prereleases are ordered between final releases and develop versions. That way, users should not have to set `preferred=True` on every final release if they add just one prerelease to a package. The concretizer is unlikely to pick a prerelease when final releases are possible. ### Limitations 1. You can't express a range that includes all alpha release but excludes all beta releases. Only alternative is good old repeated nines: `@:1.2.0alpha99`. 2. The Python ecosystem defaults to `a`, `b`, `rc` strings, so translation of Python versions to Spack versions requires expansion to `alpha`, `beta`, `rc`. It's mildly annoying, because this means we may need to compute URLs differently (not done in this commit). ### Hash Care is taken not to break hashes of versions that do not have a prerelease suffix.
2024-03-22Spack CI: Refactor process_command for Cross Platform support (#39739)John W. Parent1-164/+192
Generate CI scripts as powershell on Windows. This is intended to output exactly the same bash scripts as before on Linux. Co-authored-by: Ryan Krattiger <ryan.krattiger@kitware.com>
2024-03-22python wheels: do not "expand" (#43317)Harmen Stoppels4-10/+22
2024-03-21Disable interactive editor when --batch if passed to checksum (#43102)Alec Scott1-3/+3
2024-03-21cmd/python: use runpy to allow multiprocessing in scripts (#41789)Tom Scogland2-29/+45
Running a `spack-python` script like this: ```python import spack import multiprocessing def echo(args): print(args) if __name__ == "__main__": pool = multiprocessing.Pool(2) pool.map(echo, range(10)) ``` will fail in `develop` with an error like this: ```console _pickle.PicklingError: Can't pickle <function echo at 0x104865820>: attribute lookup echo on __main__ failed ``` Python expects to be able to look up the method `echo` in `sys.path["__main__"]` in subprocesses spawned by `multiprocessing`, but because we use `InteractiveConsole` to run `spack python`, the executed file isn't considered to be the `__main__` module, and lookups in subprocesses fail. We tried to fake this by setting `__name__` to `__main__` in the `spack python` command, but that doesn't fix the fact that no `__main__` module exists. Another annoyance with `InteractiveConsole` is that `__file__` is not defined in the main script scope, so you can't use it in your scripts. We can use the [runpy.run_path()](https://docs.python.org/3/library/runpy.html#runpy.run_path) function, which has been around since Python 3.2, to fix this. - [x] Use `runpy` module to launch non-interactive `spack python` invocations - [x] Only use `InteractiveConsole` for interactive `spack python`
2024-03-20cray: return false more readily in detection logic (#43150)Greg Becker1-3/+8
Often in containers, the files we use to detect whether a cray system supports new features are not available. Given that the cray containers only support the newer versions, and that these versions have been around for a while at this point and few sites don't support them, this PR changes the logic for detecting cray systems so that: 1. Don't even consider whether something is the `cray` platform if `opt/cray` is not in `MODULEPATH` 2. Only use the `cray` platform if we can read files in /opt/cray/pe and positively detect an older version 3. Otherwise, assume we're *not* on a cray (includes newer Cray PE's, which we treat as Linux)
2024-03-20Target.optimization_flags converts non-numeric versions to numeric (#43179)Greg Becker2-5/+24
2024-03-20Remove optimization criterion on OS mismatches (#43282)Massimiliano Culpo1-20/+0
2024-03-18use directives in some packages (#43238)Harmen Stoppels1-3/+3
2024-03-18Fix CMake generator documentation (#43232)Pieter P1-1/+1
2024-03-18performance: avoid `jinja2` import at startup unless needed (#43237)Todd Gamblin1-2/+2
`jinja2` can be a costly import, and right now it happens at startup every time we run Spack. This slows down `spack --print-shell-vars` a bit, which is needed by `setup-env.*sh`.
2024-03-15build(deps): bump black from 24.2.0 to 24.3.0 in /lib/spack/docs (#43228)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.2.0 to 24.3.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/compare/24.2.0...24.3.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-15Allow compilers to be configured in packages.yaml (#42016)Greg Becker8-20/+270
Co-authored-by: becker33 <becker33@users.noreply.github.com>
2024-03-14Clingo bootstrapping: Remove msvc constraint (#43199)John W. Parent1-3/+0
Patch allowing Clingo to build with VS22 has landed both in Spack and Clingo upstream, update Spack's bootstrap constraints to handle this. Additionally, properly scope the patch application in the clingo package to handle upstream patch.
2024-03-14Improve error message when an unknown compiler is requested (#43143)Massimiliano Culpo3-6/+18
Fixes #43141
2024-03-14`spack develop`: stage build artifacts in same root as non-dev builds (#41373)Peter Scheibel8-119/+289
Currently (outside of this PR) when you `spack develop` a path, this path is treated as the staging directory (this means that for example all build artifacts are placed in the develop path). This PR creates a separate staging directory for all `spack develop`ed builds. It looks like ``` # the stage root /the-stage-root-for-all-spack-builds/ spack-stage-<hash> # Spack packages inheriting CMakePackage put their build artifacts here spack-build-<hash>/ ``` Unlike non-develop builds, there is no `spack-src` directory, `source_path` is the provided `dev_path`. Instead, separately, in the `dev_path`, we have: ``` /dev/path/for/foo/ build-{arch}-<hash> -> /the-stage-root-for-all-spack-builds/spack-stage-<hash>/ ``` The main benefit of this is that build artifacts for out-of-source builds that are relative to `Stage.path` are easily identified (and you can delete them with `spack clean`). Other behavior added here: - [x] A symlink is made from the `dev_path` to the stage directory. This symlink name incorporates spec details, so that multiple Spack environments that develop the same path will not conflict with one another - [x] `spack cd` and `spack location` have added a `-c` shorthand for `--source-dir` Spack builds can still change the develop path (in particular to keep track of applied patches), and for in-source builds, this doesn't change much (although logs would not be written into the develop path). Packages inheriting from `CMakePackage` should get this benefit automatically though.
2024-03-14move --deprecated arg to concretizer args (#43177)Greg Becker7-27/+16
2024-03-14compiler.py: simplify implicit link dir bits (#43078)Harmen Stoppels2-51/+36
2024-03-14build(deps): bump pytest from 8.0.2 to 8.1.1 in /lib/spack/docs (#43134)dependabot[bot]1-1/+1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.2 to 8.1.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.0.2...8.1.1) --- updated-dependencies: - dependency-name: pytest dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-13msvc: patch property ref bug (#43173)John W. Parent1-1/+1
2024-03-12spack.patch: support reversing patches (#43040)Adam J. Stewart3-10/+107
The `patch()` directive can now be invoked with `reverse=True` to apply a patch in reverse. This is useful for reverting commits that caused errors in projects, even if only the forward patch is available, e.g. via a GitHub commit patch URL. `patch(..., reverse=True)` runs `patch -R` behind the scenes. This is a POSIX option so we can expect it to be available on the `patch` command. --------- Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-03-12perl testing: refactor stand-alone testing into base class (#43044)Tamara Dahlgren3-2/+124
2024-03-12Update archspec to v0.2.3 (#42854)Massimiliano Culpo17-214/+1837
2024-03-11Fix callbacks accumulation when using mixins with builders (#43100)Massimiliano Culpo3-14/+33
fixes #43097 Before this PR the behavior of mixins used together with builders was to mask completely the callbacks defined from the class coming later in the MRO. Here we fix the behavior by accumulating all callbacks, and de-duplicating them later.
2024-03-11Remove dead code (#43114)Massimiliano Culpo6-238/+0
* Remove dead code in spack * Remove dead code in llnl
2024-03-10build(deps): bump mypy from 1.8.0 to 1.9.0 in /lib/spack/docs (#43103)dependabot[bot]1-1/+1
Bumps [mypy](https://github.com/python/mypy) from 1.8.0 to 1.9.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.8.0...1.9.0) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-08Retiring as PythonPackage maintainer (#43091)Adam J. Stewart4-19/+3
2024-03-07Drop optional dependencies of Spack (#43081)Tim Fuller2-48/+31
Remove dependency on `importlib_metadata` and `pkg_resources`, which can be problematic if the version in PYTHONPATH is incompatible with the interpreter Spack is running under.
2024-03-07autotools: fix a typo in comment (#43080)Juan Miguel Carceller1-1/+1
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2024-03-07Fix `spack find` bootstrapping docs (#43074)runiq1-3/+3
Closes #43052. Maybe moving the argument to the `find` subcommand is a good idea, but I just wanted to get the docs fix out. Co-authored-by: Patrice Peterson <patrice.peterson@itz.uni-halle.de>
2024-03-06Allow loading extensions through python entry-points (#42370)Tim Fuller6-1/+291
This PR adds the ability to load spack extensions through `importlib.metadata` entry points, in addition to the regular configuration variable. It requires Python 3.8 or greater to be properly supported.
2024-03-05spack.patch: fix type hint circular import (#43041)Adam J. Stewart1-5/+5
2024-03-05spack.patch: add type hints (#42811)Adam J. Stewart2-79/+224
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
2024-03-05container: don't map develop to latest (#42952)Wouter Deconinck4-45/+6
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-03-04ASP-based solver: improve reusing nodes with gcc-runtime (#42408)Massimiliano Culpo3-6/+90
* ASP-based solver: improve reusing nodes with gcc-runtime This PR skips emitting dependency constraints on "gcc-runtime", for concrete specs that are considered for reuse. Instead, an appropriate version of gcc-runtime is recomputed considering also the concrete nodes from reused specs. This ensures that root nodes in a DAG have always a runtime that is at a version greater or equal than their dependencies. * Add unit-test for view with multiple runtimes * Select latest version of runtimes in views * Construct result keeping track of latest * Keep ordering stable, just in case
2024-03-04repo.py: cleanup packages_with_tags (#42980)Harmen Stoppels5-26/+19
2024-03-04Document new environment variable expansion in projections (#42963)psakievich2-0/+30
Adding docs and test for #42917 Co-authored-by: Alec Scott <hi@alecbcs.com>
2024-03-04modules: allow autoload: run, like in environment views (#42743)Harmen Stoppels3-35/+30
2024-03-04versions: fix typing problems (#42903)Harmen Stoppels1-5/+9
Fix the type declaration of VersionList.versions. Fix further problems exposed by that fix.
2024-02-29Show extension commands with spack -h (#41726)Tim Fuller1-5/+7
* Execute `args.help` after setting main options so that extension commands will show with `spack -h` --------- Co-authored-by: psakievich <psakiev@sandia.gov>
2024-02-29Support environment variable expansion inside module projections (#42917)psakievich1-2/+4