summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-04-19environment.py: fix excessive re-reads (#43746)Harmen Stoppels3-28/+33
2024-04-19ruamel yaml: fix quadratic complexity bug (#43745)Harmen Stoppels2-1/+14
2024-04-18Windows: Update MSVC + oneAPI detection and integration (#43646)John W. Parent2-44/+58
* Later versions of oneAPI have moved, so update detection to find it in both old and new location * Remove reliance on ONEAPI_ROOT env variable when determining Fortran compiler version for %msvc * When finding a Fortran compiler for MSVC, there was logic enforcing a maximum MSVC version for a given oneAPI Fortran version. This mapping was out of date and excluding valid combinations, so has been removed (the logic now just picks the latest available oneAPI Fortran compiler for any given MSVC version).
2024-04-18Windows: add win-sdk/wgl externals during bootstrapping (#43459)John W. Parent2-0/+40
On Windows, bootstrapping logic now searches for and adds the win-sdk and wgl packages to the user's top scope as externals if they are not present. These packages are generally required to install most packages with Spack on Windows, and are only available as externals, so it is assumed that doing this automatically would be useful and avoid a mandatory manual step for each new Spack instance. Note this is the first case of bootstrapping logic modifying configuration other than the bootstrap configuration.
2024-04-18Twitter->X: Reflect the name (only) change (#43690)Tamara Dahlgren1-2/+2
2024-04-18Make sure variable is None if exception is raised. (#43707)Kyle Knoepfel1-0/+1
2024-04-18Associate condition sets from cli to root node (#43710)Massimiliano Culpo2-3/+42
This PR prevents a condition_set from having nodes that are not associated with the corresponding root node through some (transitive) dependencies.
2024-04-18asp.py: do not copyHarmen Stoppels1-21/+38
2024-04-18spec.py: early return in __str__Harmen Stoppels1-0/+5
2024-04-17Improve `spack find` output in environments (#42334)Todd Gamblin2-38/+64
This adds some improvements to `spack find` output when in environments based around some thoughts about what users want to know when they're in an env. If you're working in an enviroment, you mostly care about: * What are the roots * Which ones are installed / not installed * What's been added that still needs to be concretized So, this PR adds a couple tweaks to display that information more clearly: - [x] We now display install status next to every root. You can easily see which are installed and which aren't. - [x] When you run `spack find -l` in an env, the roots now show their concrete hash (if they've been concretized). They previously would show `-------` (b/c the root spec itself is abstract), but showing the concretized root's hash is a lot more useful. - [x] Newly added/unconcretized specs still show `-------`, which now makes more sense, b/c they are not concretized. - [x] There is a new option, `-r` / `--only-roots` to *only* show env roots if you don't want to look at all the installed specs. - [x] Roots in the installed spec list are now highlighted as bold. This is actually an old feature from the first env implementation , but various refactors had disabled it inadvertently.
2024-04-16Windows filesystem utilities (bugfix): improve SFN usage (#43645)John W. Parent2-3/+41
Reduce incidence of spurious errors by: * Ensuring we're passing the buffer by reference * Get the correct short string size from Windows API instead of computing ourselves * Ensure sufficient space for null terminator character Add test for `windows_sfn`
2024-04-16concretize.lp: fix issue with reuse of conditional variants (#43676)Harmen Stoppels2-6/+18
Currently if you request pkg +example where example is a conditional variant, and you have a pkg in the database for which the condition did not hold (so no +example nor ~example), the solver would reuse it regardless, not imposing +example. The change rules out exactly one thing: variant_set without variant_value, which in practice could only happen when not node_has_variant (i.e. when under the current package.py rules the variant's when condition did not trigger).
2024-04-15tests: Spec tests shouldn't fetch remote git repositories. (#43656)Todd Gamblin3-24/+46
Currently, some of the tests in `spec_format` and `spec_semantics` fetch the actual zlib repository when run, because they call `str()` on specs like `zlib@foo/bar`, which at least currently requires a remote git clone to resolve. This doesn't change the behavior of git versions, but it uses our mock git repo infrastructure and clones the `git-test` package instead of the *real* URL from the mock `zlib` package. This should speed up tests. We could probably refactor more so that the git tests *all* use such a fixture, but the `checks` field that unfortunately tightly couples the mock git repository and the `git_fetch` tests complicates this. We could also consider *not* making `str()` resolve git versions, but I did not dig into that here. - [x] add a mock_git_test_package fixture that sets up a mock git repo *and* monkeypatches the `git-test` package (like our git test packages do) - [x] use fixture in `test_spec_format_path` - [x] use fixture in `test_spec_format_path_posix` - [x] use fixture in `test_spec_format_path_windows` - [x] use fixture in `test_parse_single_spec`
2024-04-15build(deps): bump python-levenshtein in /lib/spack/docs (#43543)dependabot[bot]1-1/+1
Bumps [python-levenshtein](https://github.com/rapidfuzz/python-Levenshtein) from 0.25.0 to 0.25.1. - [Release notes](https://github.com/rapidfuzz/python-Levenshtein/releases) - [Changelog](https://github.com/rapidfuzz/python-Levenshtein/blob/main/HISTORY.md) - [Commits](https://github.com/rapidfuzz/python-Levenshtein/compare/v0.25.0...v0.25.1) --- updated-dependencies: - dependency-name: python-levenshtein 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-04-15Build systems: fix docstrings (#43618)Adam J. Stewart2-2/+2
2024-04-15build(deps): bump black from 24.3.0 to 24.4.0 in /lib/spack/docs (#43642)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.3.0 to 24.4.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.3.0...24.4.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-04-12remove hardcoded hipcc (#43644)Chris White1-5/+0
2024-04-12solver: add an integrity constraint for virtual nodes (#43582)Massimiliano Culpo1-0/+6
Upon close inspection of clingo answer sets, in some cases we have "equivalent" (i.e. same hash for the concrete spec) duplicates that differ only because of virtual nodes that are added to the answer set, without any edge using them.
2024-04-11Allow packages to be pushed to build cache after install from source (#42423)Radim JanalĂ­k7-16/+159
This commit adds a property `autopush` to mirrors. When true, every source build is immediately followed by a push to the build cache. This is useful in ephemeral environments such as CI / containers. To enable autopush on existing build caches, use `spack mirror set --autopush <name>`. The same flag can be used in `spack mirror add`.
2024-04-11invalid compiler: warn instead of error (#43491)Greg Becker1-4/+14
2024-04-11Reuse specs built with compilers not in config (#43539)Massimiliano Culpo13-146/+311
Allow reuse of specs that were built with compilers not in the current configuration. This means that specs from build caches don't need to have a matching compiler locally to be reused. Similarly when updating a distro. If a node needs to be built, only available compilers will be considered as candidates.
2024-04-08Windows bugfix: safe rename if renaming file onto itself (#43456)John W. Parent2-5/+113
* Generally use os.replace on Windows and Linux * Windows behavior for os.replace differs when the destination exists and is a symlink to a directory: on Linux the dst is replaced and on Windows this fails - this PR makes Windows behave like Linux (by deleting the dst before doing the rename unless src and dst are the same)
2024-04-06oneapi licenses (#43451)Robert Cohn1-1/+2
2024-04-05Use correct method "append" instead of extend (#43514)John W. Parent1-2/+2
2024-04-05Improve hit-rate on buildcaches (#43272)Massimiliano Culpo15-51/+134
* Relax compiler and target mismatches The mismatch occurs on an edge. Previously it was assigned the parent priority, now it is assigned the child priority. This should make reuse from buildcaches or store more likely, since most mismatches will be counted with "reused" priority. * Optimize version badness for runtimes at very low priority We don't want to e.g. switch other attributes because we cannot reuse an old installed runtime. * Optimize runtime attributes at very low priority This is such that the version of the runtime would not influence whether we should reuse a spec. Compiler mismatches are considered for runtimes, to avoid situations where compiling foo%gcc@9 brings in gcc-runtime%gcc@13 if gcc@13 is among the available compilers * Exclude specs without runtimes from reuse This should ensure that we do not reuse specs that could be broken, as they expect the compiler to be installed in a specific place.
2024-04-05Do not acquire a write lock on the env post install if no views (#43505)Harmen Stoppels1-4/+3
2024-04-04installer.py: compute package_id from spec (#43485)Harmen Stoppels2-39/+37
The installer runs `get_dependent_ids`, which follows edges outside the subdag that's being installed, so it returns a superset of the actual dependents. That's generally fine, except that it calls `s.package` on every dependent, which triggers a package class to be instantiated, which is a lot of work. Instead, compute the package id from the spec, since that's all that's used anyways and does not trigger *lots* of slow and redundant instantiations of package objects.
2024-04-04Msvc: Determine OneAPI_ROOT from fc compiler path (#43131)John W. Parent1-1/+1
If ONEAPI_ROOT is not set as an environment variable, the current approach will raise an error. Instead we can compute the OneAPI_ROOT from the compiler paths like we do with vcvarsall.
2024-04-03remove dpcpp compiler and package (#43418)Greg Becker3-42/+2
`dpcpp` is deprecated by intel and has been superseded by `oneapi` compilers for a very long time. --------- Co-authored-by: becker33 <becker33@users.noreply.github.com>
2024-04-03Convert curl env mod method to a side effect (#43474)psakievich1-3/+4
2024-04-02RADIUSS packages update (Starting over #39613) (#41375)Adrien Bernede1-15/+27
2024-04-01Add handling of custom ssl certs in urllib ops (#42953)psakievich6-4/+163
This PR allows the user to specify a path to a custom cert file (or directory) in Spack's config: ```yaml # This is where custom certs for proxy/firewall are stored. # It can be a path or environment variable. To match ssl env configuration # the default is the environment variable SSL_CERT_FILE ssl_certs: $SSL_CERT_FILE ``` `config:ssl_certs` can be a path to a file or a directory, or it can be and environment variable that resolves to one of those. When it posts to something valid, Spack will update the ssl context to include custom certs, and fetching via `urllib` and `curl` will trust the provided certs. This should resolve many issues with fetching behind corporate firewalls. --------- Co-authored-by: psakievich <psakievich@users.noreply.github.com> Co-authored-by: Alec Scott <alec@bcs.sh>
2024-03-31Concretize `when_possible`: add failure detection and explicit message (#43202)Peter Scheibel5-7/+27
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-03-29CI Reproducer on Metal (#43411)kwryankrattiger1-2/+8
* MacOS image remove requires override syntax * Metal reproducer auto start and cross-platform
2024-03-29Don't delete "spack develop" build artifacts after install (#43424)Peter Scheibel6-10/+60
After #41373, where we stopped considering the source directory to be the stage for develop builds, we resumed *deleting* the stage even after a successful build. We don't want this for develop builds because developers need to iterate; we should keep the artifacts unless they explicitly run `spack clean`. Now: - [x] Build artifacts for develop packages are not removed after a successful install - [x] They are also not removed before an install starts, i.e. develop packages always reuse prior artifacts, if available. - [x] They can be deleted in any other context, e.g. by running `spack clean --stage`
2024-03-29spack load: remove --only argument (#42120)Massimiliano Culpo1-17/+0
The argument was deprecated in v0.21 and slated for removal in v0.22.
2024-03-28Add ability to rename environments (#43296)Kyle Knoepfel2-2/+196
2024-03-28CI: fail the rebuild command if buildcache push failed (#40045)kwryankrattiger8-273/+279
2024-03-28spack find: add options for local/upstream only (#42999)Greg Becker4-7/+58
Users requested an option to filter between local/upstream results in `spack find` output. ``` # default behavior, same as without --install-tree argument $ spack find --install-tree all # show only local results $ spack find --install-tree local # show results from all upstreams $ spack find --install-tree upstream # show results from a particular upstream or the local install_tree $ spack find --install-tree /path/to/install/tree/root ``` --------- Co-authored-by: becker33 <becker33@users.noreply.github.com>
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>