summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
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
2024-01-17cc: work around -v split between ld and ccld (#42111)Tom Scogland2-2/+11
2024-01-16Create reproducible tarballs in VCSFetchStrategy.archive (#42042)Harmen Stoppels5-204/+423
Currently when you repeatedly create a bootstrap mirror that includes `clingo-bootstrap@spack` you get different tarballs every time. This is a general problem with mirroring checkouts from version control as tarballs. I think it's best to create tarballs ourselves, since that way we have more control over its contents. This PR ensures normalized tarballs like we do for build caches: - normalize file permissions (in fact that was already inspired by git, so should be good) - normalized file creation/modification time (timestamp 0) - uid / guid = 0, no usernames - normalized gzip header - dir entries are ordered by `(is_dir, name)` where strings are not locale aware ;) - POSIX says st_mode of symlinks is unspecified, so work around it and force mode to `0o755`
2024-01-16Fix a bug when a required provider is requested for multiple virtuals (#42088)Massimiliano Culpo3-3/+39
2024-01-16Fix using fully-qualified namespaces from root specs (#41957)Massimiliano Culpo4-25/+81
Explicitly requested namespaces are annotated during the setup phase, and used to retrieve the correct package class. An attribute for the namespace has been added for each node. Currently, a single namespace per package is allowed during concretization.
2024-01-11Add documentation on checked_by license parameter (#41959)Aiden Grossman3-3/+23
This patch adds documentation on the checked_by license direcitve parameter that was added in #40755 but was not documented at that time.
2024-01-10Add `--create` to `spack env activate` (#40896)psakievich3-107/+197
Add `--create` option to `env activate` to allow users to create and activate in one command. --------- Co-authored-by: Wouter Deconinck <wdconinc@gmail.com> Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com> Co-authored-by: psakievich <psakievich@users.noreply.github.com>
2024-01-10binary_distribution.py: list parent dirs in binary tarball (#41773)Harmen Stoppels2-46/+116
* Bump the build cache layout version from 1 to 2 * Version to lists parent directories of the prefix in the tarball too, which is required from some container runtimes
2024-01-09fix gpg version parsing for macos (#41995)Greg Becker1-1/+1
2024-01-09Move in vs. satisfies to a note and mention special cases of in (#41727)Tamara Dahlgren1-4/+10
* Move in vs. satisfies to a note and mention special cases of in * Address feedback: oveoverlap -> intersect * Re-word the satisfies versus in note. --------- Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-01-09installer.py: don't dereference stage before installing from binaries (#41986)Harmen Stoppels2-60/+72
This fixes an issue where pkg.stage throws because a patch cannot be found, but the patch is redundant because the spec is reused from a build cache and will be installed from existing binaries.
2024-01-09Improve "makefile" build system documentation (#41781)Loris Ercole1-5/+5
Shows how to modify environment variables using "setup_build_environment" instead of overriding "edit"
2024-01-09refactor: Index provided virtuals by `when` specTodd Gamblin7-51/+64
Part 4 of reworking all package metadata to key by `when` conditions. Changes conflict dictionary structure from this: { provided_spec: {when_spec, ...} } to this: { when_spec: {provided_spec, ...} }
2024-01-09refactor: make `_make_when_spec()` private to `directives.py`Todd Gamblin4-46/+81
`make_when_spec()` was being used in the solver, but it has semantics that are specific to parsing when specs from `package.py`. In particular, it returns `None` when the `when` spec is `False`, and directives are responsible for ignoring that case and not adding requirements, deps, etc. when there's an actual `False` passed in from `package.py`. In `asp.py`, we know that there won't ever be a raw boolean when spec or constraint, so we know we can parse them without any of the special boolean handling. However, we should report where in the file the error happened on error, so this adds some parsing logic to extract the `mark` from YAML and alert the user where the bad parse is. - [x] refactor `config.py` so that basic `spack_yaml` mark info is in its own method - [x] refactor `asp.py` so that it uses the smarter YAML parsing routine - [x] refactor `asp.py` so that YAML input validation for requirements is done up front
2024-01-09refactor: Index requirements by `when` specTodd Gamblin4-10/+14
Part 3 of reworking all package metadata to key by `when` conditions. Changes conflict dictionary structure from this: { (requirement_spec, ...): [(when_spec, policy, msg)] } to this: { when_spec: [((requirement_spec, ...), policy, msg), ...] }
2024-01-09refactor: Index conflicts by `when` specTodd Gamblin7-34/+33
Part 2 of reworking all package metadata to key by `when` conditions. Changes conflict dictionary structure from this: { conflict_spec: [(when_spec, msg), ...] } to this: { when_spec: [(conflict_spec, msg), ...] } Also attempts to consistently name the variables used to iterate over conflict dictionaries.
2024-01-09refactor: Index dependency metadata by `when` specTodd Gamblin13-150/+264
Part 1 of making all package metadata indexed by `when` condition. This will allow us to handle all the dictionaries on `PackageBase` consistently. Convert the current dependency dictionary structure from this: { name: { when_spec: [Dependency ...] } } to this: { when_spec: { name: [Dependency ...] } } On an M1 mac, this actually shaves 5% off the time it takes to load all packages, I think because we're able to trade off lookups by spec key for more lookups by name.
2024-01-08Do not add ^gcc-runtime to externals (#41994)Massimiliano Culpo2-2/+23
This commit ensures that gcc-runtime is only injected as a dependency to non-external packages
2024-01-08Minor tweak to a test docstring (#41985)Massimiliano Culpo1-6/+7
* Minor tweak to a test docstring Shorten the description of a fixture, extend the description of the test where it's used. * Fix typo
2024-01-08Dont expect __qualname__ to exist (#41989)Harmen Stoppels1-1/+1
2024-01-08installer.py: do not tty.die when cache only fails (#41990)Harmen Stoppels2-27/+20
2024-01-08bugfix: original concretizer is sensitive to dependency order (#41975)Todd Gamblin3-41/+59
Needed for #40326, which can changes the iteration order over package dependencies during concretization. While clingo doesn't have this problem, the original concretizer (which we still use for bootstrapping) can be sensitive to iteration order when evaluating dependency constraints in `when` conditions. This can cause it to ignore conditional dependencies unless the dependencies in the condition are listed first in the package. The issue was in the way the original concretizer would disconnect specs *every* time `normalize()` ran. When specs were disconnected, `^dependency` constraints wouldn't see the dependency in the dependency condition loop. We now only only disconnect *all* dependencies at the start of `concretize()` and `normalize()`, and we disconnect any leftover dependents from replaced externals at the *end* of `normalize()`. This trims stale connections while keeping the ones that are needed to trigger dependency conditions. - [x] refactor `flat_dependencies()` to not disconnect the spec by default. - [x] `flat_dependencies()` is never called with `copy=True` -- remove the `copy` kwarg. - [x] disconnect only once at the beginning of `normalize()` or `concretize()`. - [x] add a test that perturbs dependency iteration order to ensure this doesn't regress. - [x] disconnect unused dependents at end of `normalize()`
2024-01-06build(deps): bump flake8 from 6.1.0 to 7.0.0 in /lib/spack/docs (#41971)dependabot[bot]1-1/+1
Bumps [flake8](https://github.com/pycqa/flake8) from 6.1.0 to 7.0.0. - [Commits](https://github.com/pycqa/flake8/compare/6.1.0...7.0.0) --- updated-dependencies: - dependency-name: flake8 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-04`spack list`: add `--namesapce` / `--repo` option (#41948)Todd Gamblin2-1/+34
This adds options to `spack list` that allow you to list only packages from specific repositories/namespaces, e.g.: ```console spack list -r builtin ``` only lists packages from the `builtin` repo, while: ```console spack list -r myrepo -r myrepo2 ``` would list packages from `myrepo` and `myrepo2`, but not from `builtin`. Note that you can use the same argument multiple times. You can use either `-r` / `--repo` or `-N` / `--namespace`. `-N` is there to match the corresponding option on `spack find`. - [x] add `-r` / `--repo` / `-N` / `--namespace` argument - [x] add test
2024-01-04extensions: remove unused `extendee_args()` method (#41942)Todd Gamblin3-23/+6
This method is vestigial; the only arg we ever used was `ignore=`, and that was eliminated in #29317 and #35588. The `kwargs` field of the extensions dictionary is actually completely unused now. Add a note for future removal.
2024-01-04bugfix: make `test_requires_directive` work on more platforms (#41943)Todd Gamblin1-1/+2
Literal compiler config in `test_requires_directive` specifically lists `target: x86_64`, but it doesn't need to, and the unnecessary target makes the test fail on non-`x86_64` machines. - [x] Remove target from config yaml in `test_requires_directive`
2024-01-03Spec.format: error on old style format strings (#41934)Harmen Stoppels2-0/+20
2024-01-02build(deps): bump pytest from 7.4.3 to 7.4.4 in /lib/spack/docs (#41918)dependabot[bot]1-1/+1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.3 to 7.4.4. - [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.3...7.4.4) --- updated-dependencies: - dependency-name: pytest 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-02Update copyright year to 2024 (#41919)Todd Gamblin615-623/+632
It was time to run `spack license update-copyright-year` again.
2023-12-28shell: fix zsh color formatting for PS1 in environments (#39497)Todd Gamblin2-15/+37
* shell: fix zsh color formatting for PS1 in environments The `colorize` function in `llnl.util.tty.color` only applies proper formatting for Bash ANSI and for console output, but this is not what zsh expects for environment variables. In particular, when using `zsh`, `spack env activate -p` produces a `PS1` prompt that looks like this: ``` \[\033[0;92m\][ENVIRONMENT]\[\033[0m\] ``` For zsh the formatting should be: ``` \e[0;92m[ENVIRONMENT]\e0;m ``` - [x] Add a `zsh` option to `colorize()` to enable zsh color formatting - [x] Add conditional to choose the right `PS1` for `zsh`, `bash`, and `sh` - [x] Don't use color escapes for `sh`, as they don't print properly * convert lots of += lines to triple quotes
2023-12-28build(deps): bump black from 23.12.0 to 23.12.1 in /lib/spack/docs (#41852)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 23.12.0 to 23.12.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/23.12.0...23.12.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>
2023-12-28gc tests: replace `find()` with DB query (#41876)Todd Gamblin1-14/+13
Per https://github.com/spack/spack/pull/41731#discussion_r1434827924, This cleans up the tests for `spack gc` by replacing ```python assert <string> in find() ``` with the more precise ```python assert mutable_database.query_local(<string>) ```
2023-12-27directives: add `checked_by` field to `license()`, add some license checksTodd Gamblin1-3/+10
Add a "checked_by" field to the `license()` directive so that we can track who verified the license for a project. also check the license of 18 or so projects and mark them checked.
2023-12-26`spack gc`: add options for environments and build dependencies (#41731)Todd Gamblin8-76/+297
This adds a few options to `spack gc`. One to give you a little more control over dependencies: * `-b` / `--keep-build-dependencies`: By default, `spack gc` considers build dependencies to be "no longer needed" once their dependents are installed. With this option, we'll keep build dependencies of needed installations as well. And two more to make working with environments easier: * `-E` / `--except-any-environment`: Garbage collect anything NOT needed by an environment. `spack gc -E` and `spack gc -bE` are now easy ways to get rid of everytihng not used by some environment. * `-e` / `--except-environment` `ENV`: Instead of considering all environments, garbage collect everything not needed by a *specific* environment. Note that you can use this with `-E` to add directory environments to the list of considered envs, e.g.: spack gc -E -e /path/to/direnv1 -e /path/to/direnv2 #... - [x] rework `unused_specs()` method on DB to add options for roots and deptypes - [x] add `all_hashes()` method on DB - [x] rework `spack gc` command to add 3 more options - [x] tests
2023-12-24build(deps): bump mypy from 1.7.1 to 1.8.0 in /lib/spack/docs (#41821)dependabot[bot]1-1/+1
Bumps [mypy](https://github.com/python/mypy) from 1.7.1 to 1.8.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.7.1...v1.8.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>
2023-12-23CI: Disable downloading artifacts from upstream jobs (#41846)kwryankrattiger1-0/+3
2023-12-23Revert "CI: Disable downloading artifacts from upstream jobs (#41432)" (#41843)Harmen Stoppels1-3/+0
This reverts commit a43156a86131a0b138f356a2721709a2070665ca.
2023-12-22Fix a couple typos in the docs (#41822)Alec Scott3-7/+7