summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
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
2024-01-19oci: use pickleable errors (#42160)Harmen Stoppels3-39/+33
2024-01-19Bugfix: spack config change handle string requirements (#42176)Peter Scheibel2-1/+17
For a requirement like ``` packages: foo: require: - "+debug" ``` (not `one_of:`, `any_of:`, or `spec:`) `spack config change` would ignore the string. This was particularly evident if toggling a variant for a previously unmentioned package: ``` $ spack config change packages:foo:require:+debug $ spack config change packages:foo:require:~debug ``` This fixes that and adds a test for it.
2024-01-18Reduce the size on disk for logs (#42122)Harmen Stoppels8-84/+40
* Reduce the size on disk for logs This PR does two things: 1. Store a compressed `spack-build-out.txt.gz` 2. Get rid of phase logs, as they are duplicates of `spack-build-out.txt` The logs are not compressed in the stage dir, so on build failure the workflow for users is no different. It's just that on install the logs are rarely used, and if needed, users can easily `gzip -d` or `zgrep` them. In the case of GCC installs, the compressed logs are <5% of the original size, which is typically dozens of MBs. * get rid of "backwards compat" of file names in stage dirs
2024-01-18Skip sbang hook on Windows (#42156)John W. Parent1-0/+2
Sbangs don't exist on Native Windows, and the hook is causing errors due to the file comparison + behavior of os.rename on Windows. Skip the hook on Windows.
2024-01-18oci: only push in parallel when forking (#42143)Harmen Stoppels2-22/+30
2024-01-18spack graph: env aware (#42093)Massimiliano Culpo1-14/+22
2024-01-18New command: `spack config change` (#41147)Peter Scheibel3-1/+192
Like `spack change` for specs in environments, this can e.g. replace `examplespec+debug` with `examplespec~debug` in a `require:` section. Example behavior for a config like: ``` packages: foo: require: - spec: +debug ``` * `spack config change packages:foo:require:~debug` replaces `+debug` with `~debug` * `spack config change packages:foo:require:@1.1` adds a requirement to the list * `spack config change packages:bar:require:~debug` adds a requirement
2024-01-17Config path quote handling: keys with quotes (#40976)Peter Scheibel2-47/+163
As observed in #40944, when using `spack config add <path>`, the `path` might contain keys that are enclosed in quotes. This was broken in https://github.com/spack/spack/pull/39831, which assumed that only the value (if present, the final element of the path) would use quotes. This preserves the primary intended behavior of #39931 (allowing ":" in values when using `spack config add`) while also allowing quotes on keys. This has complicated the function `process_config_path`, but: * It is not used outside of `config.py` * The docstring has been updated to account for this * Created an object to formalize the DSL, added a test for that, and refactored parsing to make use of regular expressions as well. * Updated the parsing and also updated the `config_path_dsl` test with an explicit check. At a higher level, split the parsing to check if something is either a key or not: * in the first case, it is covered by a regex * in the second, it may be a YAML value, but in that case it would have to be the last entry of x:y:z, so in that case I attempt to use the YAML handling logic to parse it as such
2024-01-17Packages requiring manual downloads: improve error message (#42017)Tamara Dahlgren3-7/+36
Spack packages may not have a public download option, and can implement `download_instr` to inform users how to obtain the artifacts needed to build. `spack checksum` however did not account for this and would print out a confusing error message when invoked on such packages ("Could not find any remote versions"). This PR updates the error message to output the manual download instructions if `spack checksum` is invoked on a package with `manual_download = True`.
2024-01-17build_environment.py: clean LUA_PATH and LUA_CPATH (#42101)Matthieu Dorier1-0/+3
For better build isolation