summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-02-13PythonExtension.add_files_to_view: link non-executable/non-shebang regular ↵Harmen Stoppels1-0/+2
files (#42641)
2024-02-12audit: detect self-referential depends_on (#42456)Massimiliano Culpo1-2/+22
2024-02-12Fix multiple issues with Python in views (#42601)Harmen Stoppels2-31/+57
This fixes bugs, performance issues, and removes no longer necessary code. Short version: 1. Creating views from Python extensions would error if the Spack `opt` dir itself was in some symlinked directory. Use of `realpath` would expand those, and keying into `merge_map` would fail. 2. Creating views from Python extensions (and Python itself, potentially) could fail if the `bin/` dir contains symlinks pointing outside the package prefix -- Spack keyed into `merge_map[target_of_symlink]` incorrectly. 3. In the `python` package the `remove_files_from_view` function was broken after a breaking API change two years ago (#24355). However, the entire function body was redundant anyways, so solved it by removing it. 4. Notions of "global view" (i.e. python extensions being linked into Python's own prefix instead of into a view) are completely outdated, and removed. It used to be supported but was removed years ago. 5. Views for Python extension would _always_ copy non-symlinks in `./bin/*`, which is a big mistake, since all we care about is rewriting shebangs of scripts; we don't want to copy binaries. Now we first check if the file is executable, and then read two bytes to check if it has a shebang, and only if so, copy the entire file and patch up shebangs. The bug fixes for (1) and (2) basically consist of getting rid of `realpath` entirely, and instead simply keep track of file identifiers of files that are copied/modified in the view. Only after patching up regular files do we iterate over symlinks and check if they target one of those. If so, retarget it to the modified file in the view.
2024-02-11[oneapi]: make headers match oneapi vars.sh (#42614)Robert Cohn1-3/+11
* [oneapi]: make headers match oneapi vars.sh * update * update
2024-02-09hooks: remove 7 unused hooks (#42575)Harmen Stoppels4-120/+12
These 7 hooks were not used. - Six of them related to install phases were unused after `spack` `monitor` was removed, and the code seems to have bit rotten as there were reports they were not (always?) triggered when they should. - The post environment one was made redundant after spack install for environment started following the common code path for generating module files in #42147. It should not be a breaking change to remove, since users cannot define hooks in extensions, they would have to fork Spack. If we ever _were_ to make those hooks extendable outside of core Spack, it would also be better to start with fewer rather than more, cause everything you expose gets relied upon... Removing those also allows us to rethink what hooks we really need, and in particular it seems like we need a hook that runs post install also when the spec is inserted into the database.
2024-02-09ASP-based solver: fix issue with conditional requirements and trigger ↵Massimiliano Culpo2-0/+51
conditions (#42566) The lack of a rule to avoid enforcing requirements on multi-valued variants, when the condition activating the environment was not met, resulted in multiple optimal solutions. The fix is to prevent imposing a requirement if the when= rule activating it is not met.
2024-02-09Allow `+` in module file names (#41999)simonLeary421-1/+1
2024-02-09docs: overhaul module_file_support.rst (#42585)Harmen Stoppels1-184/+222
The section was highly outdated as it referred to old defaults, and failed to mention `hide_implicits: true`. This commit restructures it, moves some deeply nested sections a level up, and promotes `hide_implicits: true` + `autoload: direct` before talking about `exclude`.
2024-02-08spack help --spec: add @= notation (#42584)Adam J. Stewart1-0/+1
2024-02-07Windows registry: improve search efficiency & error reporting (#41720)John W. Parent2-70/+161
* Registry queries can fail due to simultaneous access from other processes. Wrap some of these accesses and retry when this may be the cause (the generated exceptions don't allow pinpointing this as the reason, but we add logic to identify cases which are definitely unrecoverable, and retry if it is not one of these). * Add make recursion optioal for most registry search functions; disable recursive search in case where it was originally always recursive.
2024-02-03Environment views: dependents before dependencies, resolve identical file ↵Harmen Stoppels6-28/+146
conflicts (#42350) Fix two separate problems: 1. We want to always visit parents before children while creating views (when it comes to ignoring conflicts, the first instance generated in the view is chosen, and we want the parent instance to have precedence). Our preorder traversal does not guarantee that, but our topological- order traversal does. 2. For copy style views with packages x depending on y, where <x-prefix>/foo is a symlink to <y-prefix>/foo, we want to guarantee that: * A conflict is not registered * <y-prefix>/foo is chosen (otherwise, the "foo" symlink would become self-referential if relocated relative to the view root) Note that * This is an exception to [1] (in this case the dependency instance overrides the dependent) * Prior to this change, if "foo" was ignored as a conflict, it was possible to create this self-referential symlink Add tests for each of these cases
2024-02-02build(deps): bump python-levenshtein in /lib/spack/docs (#42440)dependabot[bot]1-1/+1
Bumps [python-levenshtein](https://github.com/rapidfuzz/python-Levenshtein) from 0.23.0 to 0.24.0. - [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.23.0...v0.24.0) --- updated-dependencies: - dependency-name: python-levenshtein 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-02-02Extract low-level clingo wrappers from spack.solver.asp (#42429)Massimiliano Culpo2-218/+294
2024-02-02Update packages_yaml.rst (#42438)Matthew Whitlock1-4/+5
Fix an incorrect example.
2024-02-01docs: git version section title + highlight issues (#42398)Harmen Stoppels5-10/+14
* basic_usage: section title for git versions * improve highlighting by using a comment instead of invalid syntax
2024-02-01Lua: better specify providers in LuaPackage base class (#42392)Alberto Invernizzi1-9/+6
2024-02-01Environments: Add support for including views (#42250)Tamara Dahlgren28-281/+587
* Environments: Add support for including views (take 2) * schema type hint fixes
2024-01-31environment/view: small cleanup (#42395)Harmen Stoppels2-9/+6
2024-01-31spack reproduce-build: accept URLs from web interface (#42261)Harmen Stoppels2-7/+83
Sometimes the logs are too long and the copy & paste command is not shown. In that case I'd like to just copy the failing GitLab job URL in my browser to `spack reproduce-build <url>`.
2024-01-31ASP-based solver: decouple setup phase from `clingo.backend` (#41952)Massimiliano Culpo1-135/+133
Currently, the `SpackSolverSetup` and the `PyclingoDriver` are more coupled than necessary: 1. The driver object needs a setup object to be injected during a solve, 2. And the setup object will get a reference back to the driver This design is necessary because we use the low-level `clingo.backend` interface to setup our problem. This interface though is meant to bypass the grounder and add symbols directly in the grounded table, which is a feature we don't currently use. The PR simplifies the encoding by having the setup object returning the problem-specific facts / rules as a list of strings, and the driver ingesting them using the [clingo.Control.add](https://potassco.org/clingo/python-api/5.6/clingo/control.html#clingo.control.Control.add) method. This removes any use of the low level interface. Using this encoding makes it easy to hash the output of the setup phase, since it is returned as a string.
2024-01-31environments: `develop` paths were not getting expanded (#34986)Alberto Invernizzi2-2/+40
2024-01-31CI: Add OIDC capability for deprecated CI (#42371)kwryankrattiger1-1/+1
This "breaks" the deprecated schema by allowing unknown attributes to the attributes section of the job types. The breaking change here is that deprecated stacks will no longer ignore attributes that are unknown but rather assume the new CI schema behavior of injecting them into the generated CI configuration. This change is required to secure authentication in Spack CI.
2024-01-31build(deps): bump urllib3 from 2.1.0 to 2.2.0 in /lib/spack/docs (#42384)dependabot[bot]1-1/+1
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.1.0 to 2.2.0. - [Release notes](https://github.com/urllib3/urllib3/releases) - [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst) - [Commits](https://github.com/urllib3/urllib3/compare/2.1.0...2.2.0) --- updated-dependencies: - dependency-name: urllib3 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-01-31compression.py: refactor + bug fix (#42367)Harmen Stoppels4-385/+289
Improve naming, so it's clear file "extensions" are not taken in the `PurePath(path).suffix` sense as the original function name suggests, but rather that the files are opened and their magic bytes are classified. Add type hints. Fix a bug where `stream.read(num_bytes)` was run on the compressed stream instead of the uncompressed stream, which can potentially break detection of tar.bz2 files. Ensure that when peeking into streams for magic bytes, they are reset to their original position upon return. Use new API in `spack logs`.
2024-01-30elf: relocate PT_INTERP (#42318)Harmen Stoppels7-208/+306
Relocation of `PT_INTERP` in ELF files already happens to work from long to short path, thanks to generic binary relocation (i.e. find and replace). This PR improves it: 1. Adds logic to grow `PT_INTERP` strings through patchelf (which is only useful if the interpreter and rpath paths are the _only_ paths in the binary that need to be relocated) 2. Makes shrinking `PT_INTERP` cleaner. Before this PR when you would use Spack-built glibc as link dep, and relocate executables using its dynamic linker, you'd end up with ``` $ file exe exe: ELF 64-bit LSD pie executable, ..., interpreter /////////////////////////////////////////////////path/to/glibc/lib/ld-linux.so ``` With this PR you get something sensible: ``` $ file exe exe: ELF 64-bit LSD pie executable, ..., interpreter /path/to/glibc/lib/ld-linux.so ``` When Spack cannot modify the interpreter or rpath strings in-place, it errors out without modifying the file, and leaves both tasks to patchelf instead. Also add type hints to `elf.py`.
2024-01-30MSVC: Broken ifx needs new $TMP (#42155)John W. Parent1-1/+11
Certain versions of ifx (the majority of those available) have an issue where they are not compatible with TMP directories with dot chars This precludes their use with CMake. Remap TMP to point to the stage directory rather than whatever the TMP default is
2024-01-30build(deps): bump pytest from 7.4.4 to 8.0.0 in /lib/spack/docs (#42361)dependabot[bot]1-1/+1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 8.0.0. - [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/7.4.4...8.0.0) --- updated-dependencies: - dependency-name: pytest 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-01-30build(deps): bump black from 24.1.0 to 24.1.1 in /lib/spack/docs (#42360)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.1.0 to 24.1.1. - [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.1.0...24.1.1) --- updated-dependencies: - dependency-name: black 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-01-30"spack logs": print log files for packages (either partially built or ↵Peter Scheibel2-0/+197
installed) (#42202)
2024-01-29traverse: w/o deptype (#42345)Harmen Stoppels3-14/+25
Add the empty deptype `spack.deptypes.NONE`. Test the case `traverse_nodes(deptype=spack.deptypes.NONE)` to not traverse dependencies, only de-duplicate. Use the construct in environment views that otherwise would branch on whether deps are enabled or not.
2024-01-29filesystem: cleanup (#42342)Harmen Stoppels4-253/+116
Type hints and removal of unused code
2024-01-29containers: switch to quay.io/almalinuxorg images (#42193)Wouter Deconinck1-4/+4
2024-01-29build(deps): bump black from 23.12.1 to 24.1.0 in /lib/spack/docs (#42328)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 23.12.1 to 24.1.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/23.12.1...24.1.0) --- updated-dependencies: - dependency-name: black 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-01-27Apply black 2024 style to Spack (#42317)Adam J. Stewart15-77/+49
2024-01-26Run config audits in CI, add a new audit to detect wrongly named external ↵Massimiliano Culpo1-9/+33
specs (#42289)
2024-01-26Merge `virtuals=` from duplicate dependencies (#42281)Massimiliano Culpo2-8/+25
Previously, for abstract specs like: ``` foo ^[virtuals=a] bar ^[virtuals=b] bar ``` the second requirement was silently discarded on concretization. Now they're merged, and the abstract spec is equivalent to: ``` foo ^[virtuals=a,b] bar ```
2024-01-25CMake: disable Package Registry (#42149)Alberto Invernizzi2-11/+45
CMake may write and read from `~/.cmake` through `export(...)` and read `find_package(...)` respectively. We don't want this as it may influence the build in a non-deterministic way, so disable it for all versions of `cmake`.
2024-01-25Fix using sticky variants in externals (#42253)Greg Becker2-8/+29
2024-01-25spack find mpiexec for impi (#42284)Robert Cohn1-0/+2
2024-01-24generate modules of non-roots during spack install of env (#42147)Harmen Stoppels6-104/+91
Fixes a bug where Spack did not generate module files of non-roots during spack install with an active environment. The reason being that Environment.new_installs only contained roots. This PR: Drops special casing of automatic module generation in post-install hooks When `use_view`, compute environment variable modifications like always, and applies a view projection to them afterwards, like we do for spack env activate. This ensures we don't have to delay module generation until after the view is created. Fixes another bug in use_view where prefixes of dependencies would not be projected -- previously Spack would only temporarily set the current spec's prefix. Removes the one and only use of the post_env_write hook (but doesn't drop it to make this backportable w/o changes)
2024-01-24set_packge_py_globals: only set pure build related globals on the root in ↵Harmen Stoppels3-41/+66
build context (#42215) Previously `std_args` was called on non-roots in a build context, which is redundant, and also leads to issues when `std_args` expects build deps of the `pkg` to be installed.
2024-01-23Environments: Fix environment configuration (#42058)Tamara Dahlgren5-195/+220
* Environments: fix environment config * Don't change the lockfile manifest path * Update activate's comments to tie the manifest to the configuration * Add spec_list override method * Remove type checking from 'activate' since already have built-in check * Refactor global methods tied to the manifest to be in its class * Restore Environment's 'env_subdir_path' and pass its config_stage_dir to EnvironmentManifestFile * Restore global env_subdir_path for use by Environment and EnvironmentManifestFile
2024-01-22Add syntactic sugar for "strong preferences" and "conflicts" (#41832)Massimiliano Culpo4-112/+354
Currently requirements allow to express "strong preferences" and "conflicts" from configuration using a convoluted syntax: ```yaml packages: zlib-ng: require: # conflict on %clang - one_of: ["%clang", "@:"] # Strong preference for +shared - any_of: ["+shared", "@:"] ``` This PR adds syntactic sugar so that the same can be written as: ```yaml packages: zlib-ng: conflict: - "%clang" prefer: - "+shared" ``` Preferences written in this way are "stronger" that the ones documented at: - https://spack.readthedocs.io/en/latest/packages_yaml.html#package-preferences
2024-01-22environment.py: drop early exit in install (#42145)Harmen Stoppels2-57/+12
`spack install` early exit behavior was sometimes convenient, except that it had and has bugs: 1. prior bug: we didn't mark env roots of already installed specs as explicit in the db 2. current bug: `spack install --overwrite` is ignored So this PR simplifies by letting the installer do its thing even if everything is supposedly installed.
2024-01-22CMakePackage pass python hints automatically (#42201)kwryankrattiger1-5/+37
This commit ensures that CMake packages that also have Python as a build/link dep get a couple defines for the Python path so that CMake's builtin `FindPython3`, `FindPython`, `FindPythonInterp` modules can locate Python correctly. The main problem with those CMake modules is that they first search for Python versions known at the time of release, meaning that old CMake maybe find older system Python 3.8 even though Python 3.11 comes first in `CMAKE_PREFIX_PATH` and `PATH`. Package maintainers can opt out of this by overriding the `find_python_hints = False` attribute in the package class.
2024-01-22repo.py: pass package name not fully qualified package name (#42217)Harmen Stoppels1-1/+1
2024-01-19test/cmd/checksum.py: avoid networking (#42190)Harmen Stoppels2-10/+57
2024-01-19Revert "cc: work around -v split between ld and ccld" (#42196)Harmen Stoppels2-11/+2
2024-01-19environment.py: remove symlinking of logs (#42148)Harmen Stoppels1-24/+0
The piece of code that is removed in this PR predates environment views. Spack would symlink build logs in `<env>/.spack-env/logs/*`, but this is redundant because: 1. Views already add `<prefix>/.spack` (and there's logic there to avoid clashes) 2. The code was broken anyways: it would only symlink the logs of environment roots, not their deps, even if they were just built. If users disable views, I'm pretty sure they're not waiting for `.spack-env/logs` either. So, imo we can delete this code, and it was probably overlooked in the past.
2024-01-19Typing for spack checksum code paths (#42183)Harmen Stoppels4-85/+79