summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2024-09-06Mixed-source cflags (#41049)Peter Scheibel8-174/+732
Allow flags from different sources (compilers, `require:`, command-line specs, and `depends_on`) to be merged together, and enforce a consistent order among them. The order is based on the sources, e.g. flags on specs from the command line always come last. Some flag order consistency issues are fixed: 1. Flags from `compilers.yaml` and the command line were always intra- and inter-source order consistent. 2. Flags from dependents and packages.yaml (introduced via `require:`) were not: for `-a -b` from one source and `-c` from another, the final result might rearrange `-a -b`, and would also be inconsistent in terms of whether `-c` came before or after. (1) is/was handled by going back to the original source, i.e., flags are retrieved directly from the command line spec rather than the solver. (2) is addressed by: * Keeping track of grouped flags in the solver * Keeping track of flag sources in the solver on a per-flag basis The latter info is used in this PR to enforce DAG ordering on flags applied from multiple dependents to the same package, e.g., for this graph: ``` a /|\ b | c \|/ d ``` If `a`, `b`, and `c` impose flags on `d`, the combined flags on `d` will contain the flags of `a`, `b`, and `c` -- in that order. Conflicting flags are allowed (e.g. -O2 and -O3). `Spec.satisifes()` has been updated such that X satisfies Y as long as X has *at least* all of the flags that Y has. This is also true in the solver constraints. `.satisfies` does not account for how order can change behavior (so `-O2 -O3` can satisfy `-O3 -O2`); it is expected that this can be addressed later (e.g. by prohibiting flag conflicts). `Spec.constrain` and `.intersects` have been updated to be consistent with this new definition of `.satisfies`.
2024-09-06Bootstrap GnuPG and `file` on Windows (#41810)John W. Parent8-83/+130
Spack can now bootstrap two new dependencies on Windows: GnuPG, and file. These dependencies are modeled as a separate package, and they install a cross-compiled binary. Details on how they binaries are built are in https://github.com/spack/windows-bootstrap-resources
2024-09-06fish: use shlex.quote instead of custom quote (#46251)Harmen Stoppels1-70/+43
2024-09-06db: more type hints (#46242)Harmen Stoppels1-23/+23
2024-09-05Allow deprecating more than one property in config (#46221)Massimiliano Culpo4-58/+70
* Allow deprecating more than one property in config This internal change allows the customization of errors and warnings to be printed when deprecating a property. Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> * fix Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> * Use a list comprehension for "issues" Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com> --------- Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-09-05Windows: Update pytest with echo and remove others (#45620)Nicole C.12-21/+7
* Windows: Update pytest with echo and remove others * Fix style * Remove unused pytest import in undevelop * Update test_test_part_pass to be Window compatible * Style
2024-09-05Avoid best-effort expansion of stacks (#40792)Massimiliano Culpo3-144/+35
fixes #40791 Currently stacks behave differently if used in unify:false environments, which leads to inconsistencies during concretization. For instance, we might have two abstract user specs that do not intersect with each other map to the same concrete spec in the environment. This is clearly wrong. This PR removes the best effort expansion, so that user specs are always applied strictly.
2024-09-05reindex: ensure database is empty before reindex (#46199)Harmen Stoppels1-5/+18
fixes two tests that did not clear the in-memory bits of a database before calling reindex.
2024-09-05Pass Database layout in constructor (#46219)Harmen Stoppels12-117/+96
Ensures that Database instances do not reference a global `spack.store.STORE.layout`. Simplify Database.{add,reindex} signature.
2024-09-05Remove `test_external_package_module` (#46218)Massimiliano Culpo1-14/+0
This test was possibly meant for the Cray platform, and currently is a no-op. Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-09-05spack deprecate: deprecate --link-type flag (#46202)Harmen Stoppels1-10/+5
2024-09-03solver: minor cleanup and optimization (#46176)Massimiliano Culpo2-15/+4
Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2024-09-03database: remove a few class properties (#46175)Harmen Stoppels4-56/+51
2024-09-02db: type hints (#46168)Harmen Stoppels2-69/+73
2024-09-02projections: simplify expression (#46167)Harmen Stoppels1-6/+1
2024-09-02remove dead code: fs.is_writable_dir was used on file (#46166)Harmen Stoppels1-24/+2
2024-09-02package_base: sort deprecated versions later in `preferred_version` (#46025)Wouter Deconinck3-8/+7
2024-09-02cuda: add v12.6.1 (#46143)pauleonix1-1/+2
Update build system conflict between CUDA 12.6 and Clang 18
2024-09-02docs: update conditional definition arch (#46139)Georgia Stuart1-1/+1
Signed-off-by: Georgia Stuart <gstuart@umass.edu> Co-authored-by: Jordan Galby <67924449+Jordan474@users.noreply.github.com>
2024-09-01Remove redundant inspect.getmodule(self) idiom in packages (#46073)Harmen Stoppels22-97/+62
2024-08-30Remove `DetectedPackage` class (#46071)Massimiliano Culpo9-95/+55
This PR simplifies the code doing external spec detection by removing the `DetectedPackage` class. Now, functions accepting or returning lists of `DetectedPackage`, will accept or return list of specs. Performance doesn't seem to change if we use `Spec.__reduce__` instead of `DetectionPackage.__reduce__`.
2024-08-29CMakePackage: Set policy CMP0042 NEW on macos (#46114)Chris Marsh1-0/+5
so linking to shared libraries works well at runtime on darwin for all packages with cmake_minimum_required < 3.
2024-08-29windows_establish_runtime_linkage: post install hook (#46103)Harmen Stoppels2-2/+0
2024-08-29Executable: make the timeout message readable (#46098)Tamara Dahlgren1-3/+3
2024-08-29Remove "get_compiler_duplicates" (#46077)Massimiliano Culpo2-37/+0
This function is used only in tests.
2024-08-28Don't check checksums on spack-develop packages (#46076)Jordan Galby1-0/+1
Fix regression introduced in spack 0.22.1 where Spack would ask about checksums on spack-develop packages.
2024-08-28For "when:" and install_environment.json: Support fully qualified hostname ↵Jordan Galby2-2/+4
(#45522)
2024-08-28buildcache.py: elide string not spec (#46074)Harmen Stoppels2-7/+6
2024-08-28Drop now redundant use of inspect (#46057)Harmen Stoppels8-14/+9
inspect.isclass -> isinstance(..., type) inspect.getmro -> cls.__mro__
2024-08-28Spec.from_detection now accounts for external prefix (#46063)Massimiliano Culpo6-69/+38
Change the signature of Spec.from_detection to set the external prefix, and the external modules, if they are present. Delete "spack.package_prefs.spec_externals" since it is unused.
2024-08-28Remove llnl.util.lang.has_method, use built-in hasattr instead (#46072)Massimiliano Culpo1-14/+4
2024-08-27spack_yaml: delete custom deepcopy (#46048)Harmen Stoppels1-15/+0
2024-08-27Remove "prevent_cray_detection" context manager (#46060)Massimiliano Culpo3-18/+2
This context manager was used to prevent detecting a platform as "cray". Since now Cray machines are detected as linux, we can remove the context manager.
2024-08-27config.py: tell don't ask (#46040)Harmen Stoppels1-20/+13
2024-08-27Remove a few unused classes and globals (#46054)Massimiliano Culpo1-68/+0
2024-08-27Move `spack.compilers._to_dict` to `Compiler` (#46051)Massimiliano Culpo2-30/+35
2024-08-27abi.py: remove (#46047)Harmen Stoppels3-198/+0
2024-08-26jsonschema: remove optional deps (#46041)Harmen Stoppels2-173/+188
2024-08-26distro.py: avoid excessive stat calls (#46030)Harmen Stoppels2-11/+58
2024-08-26cuda: add v12.6 (#45558)pauleonix1-2/+2
2024-08-26`ci generate`: don't warn when no cdash config (#46004)Todd Gamblin1-1/+2
Right now if you run `spack ci generate` you get a warning about CDash credentials even if there's no CDash configuration specified. We should only warn if there was actually a CDash config. Signed-off-by: Todd Gamblin <tgamblin@llnl.gov>
2024-08-26compilers: avoid redundant fs operations and cache (#46031)Harmen Stoppels2-13/+17
2024-08-24variant.py: extract spec bits into spec.py (#45941)Harmen Stoppels5-166/+156
2024-08-24PythonExtension: use different bin dir on Windows (#45427)John W. Parent1-1/+7
2024-08-24mirror: fetch by digest (#45809)Harmen Stoppels8-182/+173
Source mirrors store entries by digest and add a human readable alias of the form 'name-version'. If no digest is available, the alias is used as the primary storage location. Spack erroneously fetches by alias when the digest path does not exist. This is problematic if `version(..., sha256=...)` changes in package.py, and the mirror is populated with the old shasum. That would result in an error when a digest is available, but in case of git versions with a modified commit sha, the wrong sources would be fetched without error. With this PR, only the digest path is used, not the alias, in case a digest is available. This is also a small performance optimization, as the number of request is halved for mirrors that don't contain the sources. Further, for git sources the tag was used as a digest, but this is a moving target. Only commit sha is used now. Also whenever the alias already existed, Spack used to keep it in place when updating the mirror cache, which means that aliases would always point to outdated mirror entries whenever digests are modified. With this PR the alias is moved in place. Lastly, fix a recent regression where `Stage.disable_mirrors` disabled mirrors but not the local download cache, which was the intention.
2024-08-23Substitute `__import__` with `importlib.import_module` (#45965)Massimiliano Culpo8-49/+15
2024-08-23spack create: add depends_on(<lang>) statements (#45296)Harmen Stoppels4-106/+236
2024-08-23Add missing MultiMethodMeta metaclass in builders (#45879)Harmen Stoppels10-280/+277
* Add missing MultiMethodMeta metaclass in builders and remove the Python 2 fallback option in favor of hard errors to catch similar issues going forward. The fallback option can cause about 10K stat calls due to use of `realpath` in the inspect module, depending on how deep Spack itself is nested in the file system, which is ... undesirable. * code shuffling to avoid circular import * more reshuffling * move reserved variant names into variants module
2024-08-22Add a new audit to find missing package.py files (#45868)Massimiliano Culpo1-1/+28
* Add a new audit to find missing package.py files * Remove directory without package.py
2024-08-22Windows: port tests for mirror/blame (#45259)Nicole C.2-8/+6