summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
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.
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`