summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-05-06build(deps): bump black from 24.4.0 to 24.4.2 in /lib/spack/docs (#43878)dependabot[bot]1-1/+1
Bumps [black](https://github.com/psf/black) from 24.4.0 to 24.4.2. - [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.4.0...24.4.2) --- 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-05-04build(deps): bump mypy from 1.9.0 to 1.10.0 in /lib/spack/docs (#43834)dependabot[bot]1-1/+1
Bumps [mypy](https://github.com/python/mypy) from 1.9.0 to 1.10.0. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/1.9.0...v1.10.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-05-03concretizer args: --fresh-roots == --reuse-deps (#43988)Harmen Stoppels2-2/+9
Since reuse is the default now, `--reuse-deps` can be confusing, as it technically does not imply roots are fresh. So add `--fresh-roots`, which is also easier to discover when running `spack concretize --fre<tab>`
2024-05-02Spec.satisfies: fix a bug with concrete spec from JSON (#43968)Massimiliano Culpo2-3/+25
Fix a bug triggered by missing a virtual on some transitive edge, in a subdag of a pure build dependency.
2024-05-02docs: re-enable google analytics (#43974)Todd Gamblin1-0/+12
We recently switched to using the new ReadTheDocs with "addons". That includes its own analytics, which is nice, but we also want to continue using our GA4 analytics. Adding GA4 is no longer supported by RTD, so we have to add it manually. - [x] re-add the gtag to all pages, manually Signed-off-by: Todd Gamblin <tgamblin@llnl.gov>
2024-05-02libc: detect ARM flavor (#43959)jdomke1-3/+3
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2024-05-02Ignore external packages when pushing to buildcache automatically ↵Adrien Bernede1-0/+4
(--autopush) (#43930)
2024-05-02Windows: auto-add WGL/SDK as externals (#43752)John W. Parent5-4/+77
Adds a pre-concretization check for the Windows SDK and WGL (Windows GL) packages as non-buildable externals. This is a redo of https://github.com/spack/spack/pull/43459, but makes sure to modify the configuration scope outside of the bootstrap scope: whichever is highest-precedence in the user's environment at the time the concretization runs, which should either be an env scope or the ~ scope. Adds pytest fixture mocking the check for WGL and WSDK as if they were present.
2024-05-01Allow more control over which specs are reused (#42782)Massimiliano Culpo4-54/+357
This PR gives users finer control over which specs are reused during concretization. The value of the `concretizer:reuse` config option now can take an object with the following properties: - `roots`: true if reusing roots, false if reusing just dependencies - `exclude`: list of constraints used to select reusable specs - `include`: list of constraints used to select reusable specs - `from`: allows to select the sources of reused specs ### Examples #### Reuse only specs compiled with GCC ```yaml concretizer: reuse: roots: true include: - "%gcc" ``` #### `openmpi` must be used from externals, and it must be the only external used ```yaml concretizer: reuse: roots: true from: - type: local exclude: - "openmpi" - type: buildcache exclude: - "openmpi" - type: external include: - "openmpi" ```
2024-05-01containers: add ubuntu 24.04 (#43881)Wouter Deconinck2-0/+10
* containers: add ubuntu 24.04 * containers: use python3-boto3 pkg instead of pip install
2024-05-01build(deps): bump pytest from 8.1.1 to 8.2.0 in /lib/spack/docs (#43908)dependabot[bot]1-1/+1
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.1.1 to 8.2.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/8.1.1...8.2.0) --- 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-04-30PackageStillNeededError: add pkg that needs spec to exception msg (#43845)Wouter Deconinck1-1/+6
* PackageStillNeededError: add pkg that needs spec to exception msg * PackageStillNeededError: f-string with short fmt and hash * PackageStillNeededError: split long string
2024-04-30hack: drop glibc and musl in old concretizer (#43914)Harmen Stoppels1-1/+9
The old concretizer creates a cyclic graph when expanding virtuals for `iconv`, which is a bug. This hack drops glibc and musl as possible providers for `iconv` in the old concretizer to work around it.
2024-04-29compiler.py: fix early return (#43898)Harmen Stoppels2-7/+18
2024-04-29Run audits on windowsGregory Becker2-5/+5
Add debug log for external detection tests. The debug log is used to print which test is being executed. Skip version audit on Windows where appropriate
2024-04-29Fix concretization when installing missing compilers (#43876)Massimiliano Culpo2-2/+29
Restore the previous behavior when config:install_missing_compilers is True. The libc of the missing compiler is inferred from the Python process.
2024-04-27gcc: generate spec file and fix external libc default paths after install ↵Harmen Stoppels6-32/+103
from cache (#43839) Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-04-26containers: Add Fedora 40, 39 (#43847)Jonathon Anderson2-2/+30
2024-04-26ASP-based solver: update os compatibility for macOS (#43862)Massimiliano Culpo1-0/+2
2024-04-26[intel-oneap-*] no redistribution (#43826)Robert Cohn1-2/+2
2024-04-26spack audit externals: allow selecting platforms and checking extra ↵Massimiliano Culpo3-2/+95
attributes (#43782)
2024-04-26ldflags=* are compiler flags, not linker flags (#43820)Harmen Stoppels2-6/+8
We run `extend spack_flags_list SPACK_LDFLAGS` for `$mode in ld|ccld`. That's problematic, cause `ccld` needs `-Wl,--flag` whereas `ld` needs `--flag` directly. Only `-L` and `-l` are common to compiler & linker. In all build systems `LDFLAGS` is for the compiler not the linker, cause any linker flag `-x` can be passed as a compiler flag `-Wl,-x`, and there are many compiler flags that affect the linker invocation, like `-fopenmp`, `-fuse-ld=`, `-fsanitize=` etc. So don't pass `LDFLAGS` to the linker directly. This way users can set `ldflags: -Wl,--allow-shlib-undefined` in compilers.yaml to work around an issue where the linker tries to resolve the `libcuda.so.1` stub lib which cannot be located by design in `cuda`.
2024-04-25build_environment.py: expand SPACK_MANAGED_DIRS with realpath (#43844)Harmen Stoppels2-16/+19
2024-04-24clang.py: detect flang-new (#43815)Harmen Stoppels1-4/+5
If a flang-new exists, which is rather unlikely, it probably means the user wants it as a fortran compiler.
2024-04-24Add new `redistribute()` directive (#20185)Peter Scheibel9-62/+302
Some packages can't be redistributed in source or binary form. We need an explicit way to say that in a package. This adds a `redistribute()` directive so that package authors can write, e.g.: ```python redistribute(source=False, binary=False) ``` You can also do this conditionally with `when=`, as with other directives, e.g.: ```python # 12.0 and higher are proprietary redistribute(source=False, binary=False, when="@12.0:") # can't redistribute when we depend on some proprietary dependency redistribute(source=False, binary=False, when="^proprietary-dependency") ``` To prevent Spack from adding either their sources or binaries to public mirrors and build caches. You can still unconditionally add things *if* you run either: * `spack mirror create --private` * `spack buildcache push --private` But the default behavior for build caches is not to include non-redistributable packages in either mirrors or build caches. We have previously done this manually for our public buildcache, but with this we can start maintaining redistributability directly in packages. Caveats: currently the default for `redistribute()` is `True` for both `source` and `binary`, and you can only set either of them to `False` via this directive. - [x] add `redistribute()` directive - [x] add `redistribute_source` and `redistribute_binary` class methods to `PackageBase` - [x] add `--private` option to `spack mirror` - [x] add `--private` option to `spack buildcache push` - [x] test exclusion of packages from source mirror (both as a root and as a dependency) - [x] test exclusion of packages from binary mirror (both as a root and as a dependency)
2024-04-24Revert "Windows: add win-sdk/wgl externals during bootstrapping (#43459)" ↵John W. Parent2-40/+0
(#43819) This reverts commit 9e2558bd563af31355d83471f628a5d02656cdac.
2024-04-24libc: from current python process (#43787)Harmen Stoppels6-139/+193
If there's no compiler we currently don't have any external libc for the solver. This commit adds a fallback on libc from the current Python process, which works if it is dynamically linked. Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-04-23Refactor to improve `spec format` speed (#43712)Todd Gamblin12-274/+230
When looking at where we spend our time in solver setup, I noticed a fair bit of time is spent in `Spec.format()`, and `Spec.format()` is a pretty old, slow, convoluted method. This PR does a number of things: - [x] Consolidate most of what was being done manually with a character loop and several regexes into a single regex. - [x] Precompile regexes where we keep them - [x] Remove the `transform=` argument to `Spec.format()` which was only used in one place in the code (modules) to uppercase env var names, but added a lot of complexity - [x] Avoid escaping and colorizing specs unless necessary - [x] Refactor a lot of the colorization logic to avoid unnecessary object construction - [x] Add type hints and remove some spots in the code where we were using nonexistent arguments to `format()`. - [x] Add trivial cases to `__str__` in `VariantMap` and `VersionList` to avoid sorting - [x] Avoid calling `isinstance()` in the main loop of `Spec.format()` - [x] Don't bother constructing a `string` representation for the result of `_prev_version` as it is only used for comparisons. In my timings (on all the specs formatted in a solve of `hdf5`), this is over 2.67x faster than the original `format()`, and it seems to reduce setup time by around a second (for `hdf5`).
2024-04-23concretizer: update `reuse:` default to True (#41302)Greg Becker4-7/+15
2024-04-23Remove import distro from packages and docs (#43772)Harmen Stoppels2-19/+13
2024-04-23Do not detect a compiler without a C compiler (#43778)Massimiliano Culpo2-2/+52
2024-04-22repo.py: drop deleted packages from provider cache (#43779)Harmen Stoppels1-6/+10
The reverse provider lookup may have stale entries for deleted packages, which used to cause errors. It's hard to invalidate those cache entries, so this commit simply drops entries w/o invalidating the cache. Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-04-22Adjust severity of irreversible operations (#43721)Kyle Knoepfel1-2/+2
2024-04-22compiler.py: reduce verbosity of implicit link dirs parsing (#43777)Harmen Stoppels1-6/+2
2024-04-22view: dont warn about externals (#43771)Harmen Stoppels1-3/+0
since it's the status quo on linux after libc as external by default
2024-04-22bootstrap: no need to add dummy compilers (#43775)Harmen Stoppels1-28/+7
2024-04-22Add libc dependency to compiled packages and runtime depsMassimiliano Culpo5-44/+160
This commit differentiate linux from other platforms by using libc compatibility as a criterion for deciding which buildcaches / binaries can be reused. Other platforms still use OS compatibility. On linux a libc is injected by all compilers as an implicit external, and the compatibility criterion is that a libc is compatible with all other libcs with the same name and a version that is lesser or equal. Some concretization unit tests use libc when run on linux.
2024-04-22Compiler.default_libcHarmen Stoppels6-109/+196
Some logic to detect what libc the c / cxx compilers use by default, based on `-dynamic-linker`. The function `compiler.default_libc()` returns a `Spec` of the form `glibc@x.y` or `musl@x.y` with the `external_path` property set. The idea is this can be injected as a dependency. If we can't run the dynamic linker directly, fall back to `ldd` relative to the prefix computed from `ld.so.`
2024-04-22database.py: stream of json objects forward compat (#43598)Harmen Stoppels2-16/+43
In the future we may transform the database from a single JSON object to a stream of JSON objects. This paves the way for constant time writes and constant time rereads when only O(1) changes are made. Currently both are linear time. This commit gives just enough forward compat for Spack to produce a friendly error when we would move to a stream of json objects, and a db would look like this: ```json {"database": {"version": "<something newer>"}} ```
2024-04-22Fix a bug preventing to set platform= on externals (#43758)Massimiliano Culpo3-7/+20
closes #43406
2024-04-20ci.py: visit all edges (#43761)Massimiliano Culpo1-1/+1
2024-04-20compiler wrapper: prioritize spack store paths in -L, -I, -rpath (#43593)Harmen Stoppels5-102/+286
* compiler wrapper: prioritize spack managed paths in search order This commit partitions search paths of -L, -I (and -rpath) into three groups, from highest priority to lowest: 1. Spack managed directories: these include absolute paths such as stores and the stage dir, as well as all relative paths since they are relative to a Spack owned dir 2. Non-system dirs: these are for externals that live in non-system locations 3. System dirs: your typical `/usr/lib` etc. It's very easy for Spack to known the prefixes it owns, it's much more difficult to tell system dirs from non-system dirs. Before this commit Spack tried to distinguish only system and non-system dirs, and failed for very trivial cases like `/usr/lib/x/..` which comes up often, since build systems sometimes copy search paths from `gcc -print-search-dirs`. Potentially this implementation is even faster than the current state of things, since a loop over paths is replaced with an eval'ed `case ...`. * Trigger a pipeline * Revert "Trigger a pipeline" This reverts commit 5d7fa863de91c5557ef4432c0ea105ed0924a6e8. * remove redudant return statement
2024-04-20ci.py: simplify, and dont warn excessively about externals (#43759)Harmen Stoppels2-140/+40
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.