summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2021-10-25Return early in do_fetch when there is no code or a package is external (#26926)Harmen Stoppels3-7/+32
Co-authored-by: Ryan Krattiger <ryan.krattiger@kitware.com>
2021-10-25virtuals: simplify virtual handlingTodd Gamblin1-16/+5
These three rules in `concretize.lp` are overly complex: ```prolog :- not provider(Package, Virtual), provides_virtual(Package, Virtual), virtual_node(Virtual). ``` ```prolog :- provides_virtual(Package, V1), provides_virtual(Package, V2), V1 != V2, provider(Package, V1), not provider(Package, V2), virtual_node(V1), virtual_node(V2). ``` ```prolog provider(Package, Virtual) :- root(Package), provides_virtual(Package, Virtual). ``` and they can be simplified to just: ```prolog provider(Package, Virtual) :- node(Package), provides_virtual(Package, Virtual). ``` - [x] simplify virtual rules to just one implication - [x] rename `provides_virtual` to `virtual_condition_holds`
2021-10-25Add a unit test to prevent regressionMassimiliano Culpo4-2/+20
2021-10-25ASP-based solver: a package eligible to provide a virtual must provide itMassimiliano Culpo1-0/+5
fixes #26866 This semantics fits with the way Spack currently treats providers of virtual dependencies. It needs to be revisited when #15569 is reworked with a new syntax.
2021-10-24Mark flaky test_ci_rebuild as xfail (#26911)Scott Wittenburg1-0/+1
2021-10-24py-vermin: add latest version 1.3.1 (#26920)Morten Kristensen1-1/+1
* py-vermin: add latest version 1.3.1 * Exclude line from Vermin since version is already being checked for Vermin 1.3.1 finds that `encoding` kwarg of builtin `open()` requires Python 3+.
2021-10-22Document backport in py (#26897)Harmen Stoppels1-0/+2
2021-10-22Shorten long shebangs only if the execute permission is set (#26899)Harmen Stoppels2-0/+54
The OS should only interpret shebangs, if a file is executable. Thus, there should be no need to modify files where no execute bit is set. This solves issues that are e.g. encountered while packaging software as COVISE (https://github.com/hlrs-vis/covise), which includes example data in Tecplot format. The sbang post-install hook is applied to every installed file that starts with the two characters #!, but this fails on the binary Tecplot files, as they happen to start with #!TDV. Decoding them with UTF-8 fails and an exception is thrown during post_install. Co-authored-by: Martin Aumüller <aumuell@reserv.at>
2021-10-22Backport #186 from py-py to fix macOS failures (#26653)Harmen Stoppels1-3/+3
Backports the relevant bits of https://github.com/pytest-dev/py/commit/0f77b6e66f79c07dbb657e2b4a7e94263eacc01b
2021-10-22Add GCS Bucket Mirrors (#26382)Doug Jacobsen5-0/+375
This commit contains changes to support Google Cloud Storage buckets as mirrors, meant for hosting Spack build-caches. This feature is beneficial for folks that are running infrastructure on Google Cloud Platform. On public cloud systems, resources are ephemeral and in many cases, installing compilers, MPI flavors, and user packages from scratch takes up considerable time. Giving users the ability to host a Spack mirror that can store build caches in GCS buckets offers a clean solution for reducing application rebuilds for Google Cloud infrastructure. Co-authored-by: Joe Schoonover <joe@fluidnumerics.com>
2021-10-21Make 'spack location -e' print the current env, and 'spack cd -e' go to the ↵Harmen Stoppels2-21/+26
current env (#26654)
2021-10-20Add --preferred and --latest to`spack checksum` (#25830)Tamara Dahlgren5-14/+103
2021-10-20Reduce verbosity of error messages when concretizing environments (#26843)Massimiliano Culpo2-17/+25
With this commit stacktraces of subprocesses are shown only if debug mode is active
2021-10-20Fix typo in repositories.rst (#26845)Alexander Jaust1-1/+1
2021-10-19A single process pool is not something to boast about (#26837)Harmen Stoppels1-3/+3
2021-10-19cray architecture detection for zen3/milan (#26827)Greg Becker1-7/+14
* Update cray architecture detection for milan Update the cray architecture module table with x86-milan -> zen3 Make cray architecture more robust to back off from frontend architecture to a recent ancestor if necessary. This should make future cray updates less paingful for users. Co-authored-by: Gregory Becker <becker33.llnl.gov> Co-authored-by: Todd Gamblin <gamblin2@llnl.gov>
2021-10-19Reduce verbosity of threaded concretization (#26822)Harmen Stoppels1-2/+6
1. Don't use 16 digits of precision for the seconds, round to 2 digits after the comma 2. Don't print if we don't concretize (i.e. `spack concretize` without `-f` doesn't have to tell me it did nothing in `0.00` seconds)
2021-10-19Speed-up environment concretization on linux with a process pool (#26264)Massimiliano Culpo9-27/+232
* Speed-up environment concretization with a process pool We can exploit the fact that the environment is concretized separately and use a pool of processes to concretize it. * Add module spack.util.parallel Module includes `pool` and `parallel_map` abstractions, along with implementation details for both. * Add a new hash type to pass specs across processes * Add tty msg with concretization time
2021-10-19Fix trigger and child links in pipeline docs (#26814)Christopher Kotfila1-2/+2
2021-10-18Speed up pipeline generation (#26622)Scott Wittenburg2-16/+38
- [x] Stage already concretized specs instead of abstract ones - [x] Reduce number of network calls by reading naughty list up front
2021-10-18patches: make re-applied patches idempotent (#26784)Todd Gamblin4-25/+137
We use POSIX `patch` to apply patches to files when building, but `patch` by default prompts the user when it looks like a patch has already been applied. This means that: 1. If a patch lands in upstream and we don't disable it in a package, the build will start failing. 2. `spack develop` builds (which keep the stage around) will fail the second time you try to use them. To avoid that, we can run `patch` with `-N` (also called `--forward`, but the long option is not in POSIX). `-N` causes `patch` to just ignore patches that have already been applied. This *almost* makes `patch` idempotent, except that it returns 1 when it detects already applied patches with `-N`, so we have to look at the output of the command to see if it's safe to ignore the error. - [x] Remove non-POSIX `-s` option from `patch` call - [x] Add `-N` option to `patch` - [x] Ignore error status when `patch` returns 1 due to `-N` - [x] Add tests for applying a patch twice and applying a bad patch - [x] Tweak `spack.util.executable` so that it saves the error that *would have been* raised with `fail_on_error=True`. This lets us easily re-raise it. Co-authored-by: Greg Becker <becker33@llnl.gov>
2021-10-18Make macOS installed libraries more relocatable (#26608)Seth R. Johnson6-112/+392
* relocate: call install_name_tool less * zstd: fix race condition Multiple times on my mac, trying to install in parallel led to failures from multiple tasks trying to simultaneously create `$PREFIX/lib`. * PackageMeta: simplify callback flush * Relocate: use spack.platforms instead of platform * Relocate: code improvements * fix zstd * Automatically fix rpaths for packages on macOS * Only change library IDs when the path is already in the rpath This restores the hardcoded library path for GCC. * Delete nonexistent rpaths and add more testing * Relocate: Allow @executable_path and @loader_path
2021-10-18docutils > 0.17 issue with rendering list items in sphinx (#26355)Shahzeb Siddiqui2-0/+4
* downgrade_docutils_version * invalid version * Update requirements.txt * Improve spelling and shorten the reference link * Update spack.yaml * update version requirement * update version to maximum of 0.16 Co-authored-by: bernhardkaindl <43588962+bernhardkaindl@users.noreply.github.com>
2021-10-18Remove unused exist_errors in installer.py (#26650)Harmen Stoppels1-5/+1
2021-10-18Don't print error output in the test whether gpgconf works (#26682)Harmen Stoppels1-1/+1
2021-10-18Revert 19736 because conflicts are avoided by clingo by default (#26721)Harmen Stoppels1-96/+95
2021-10-15Fix ruby dependent extensions. (#26729)Brice Videau1-1/+8
* Fix ruby dependent extensions. * Added Kerilk as maintainer.
2021-10-15Revert "Don't run lsb_release on linux (#26707)" (#26754)Harmen Stoppels2-4/+1
This reverts commit fcac95b0654a84151ad51a9123f74e8cdfcf8d26.
2021-10-15EnvironmentModifications: allow disabling stack tracing (#26706)Harmen Stoppels2-14/+29
Currently Spack keeps track of the origin in the code of any modification to the environment variables. This is very slow and enabled unconditionally even in code paths where the origin of the modification is never queried. The only place where we inspect the origins of environment modifications is before we start a build, If there's an override of the type `e.set(...)` after incremental changes like `e.append_path(..)`, which is a "suspicious" change. This is very rare though. If an override like this ever happens, it might mean a package is broken. If that leads to build errors, we can just ask the user to run `spack -d install ...` and check the warnings issued by Spack to find the origins of the problem.
2021-10-14Stand-alone tests: disallow re-using an alias (#25881)Tamara Dahlgren4-8/+82
It can be frustrating to successfully run `spack test run --alias <name>` only to find you cannot get the results because you already use `<name>` in some previous stand-alone test execution. This PR prevents that from happening.
2021-10-14ASP-based solver: add a rule for version uniqueness in virtual packages (#26740)Massimiliano Culpo2-0/+10
fixes #26718 A virtual package may or may not have a version, but it never has more than one. Previously we were missing a rule for that.
2021-10-14Constrain abstract specs rather than concatenating strings in the "when" ↵Massimiliano Culpo6-11/+73
context manager (#26700) Using the Spec.constrain method doesn't work since it might trigger a repository lookup which could break our directives and triggers a circular import error. To fix that we introduce a function to merge abstract anonymous specs, based only on package names, which does not perform any lookup in the repository.
2021-10-14Don't run lsb_release on linux (#26707)Harmen Stoppels2-1/+4
Running `lsb_release` on Linux takes about 50ms because it is written in Python. We do not use the output, so this change makes use not call it.
2021-10-13buildcache: do one less tar file extraction Patrick Gartung2-35/+25
The buildcache is now extracted in a temporary folder within the current store, moved to its final place and relocated. "spack clean -s" has been extended to also clean the temporary extraction directory. Add hardlinks with absolute paths for libraries in the corge, garply and quux packages to detect incorrect handling of hardlinks in tests.
2021-10-12Improve error messages for bootstrap download failures (#26599)Harmen Stoppels5-23/+100
2021-10-12Add missing spack command in basic usage tutorial (#26646)Alexander Jaust1-2/+2
The `find` command was missing for the examples forcing colorized output. Without this (or another suitable) command, spack produces output that is not using any color. Thus, without the `find` command one does not see any difference between forced colorized and non-colorized output.
2021-10-12spack: Add package (#25979)Harmen Stoppels1-1/+1
* Make python 2 use 'from __future__ import absolute_import' to allow import spack.pkgkit * Add Spack * Improve ranges
2021-10-12allowing spack monitor to handle redirect (#26666)Vanessasaurus1-0/+16
when deployed on kubernetes, the server sends back permanent redirect responses. This is elegantly handled by the requests library, but not urllib that we have to use here, so I have to manually handle it by parsing the exception to get the Location header, and then retrying the request there. Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2021-10-12ASP-based solver: decrease the priority of multi-valued variant optimization ↵Massimiliano Culpo2-10/+31
for root (#26677) The ASP-based solver maximizes the number of values in multi-valued variants (if other higher order constraints are met), to avoid cases where only a subset of the values that have been specified on the command line or imposed by another constraint are selected. Here we swap the priority of this optimization target with the selection of the default providers, to avoid unexpected results like the one in #26598
2021-10-12Fix potentially broken shutil.rmtree in tests (#26665)Harmen Stoppels1-1/+4
Seems like https://bugs.python.org/issue29699 is relevant. Better to just ignore errors when removing them tmpdir. The OS will remove it anyways. Errors are happening randomly from tests that are using this fixture.
2021-10-12Avoid quadratic complexity in log parser (#26568)Harmen Stoppels1-62/+21
TL;DR: there are matching groups trying to match 1 or more occurrences of something. We don't use the matching group. Therefore it's sufficient to test for 1 occurrence. This reduce quadratic complexity to linear time. --- When parsing logs of an mpich build, I'm getting a 4 minute (!!) wait with 16 threads for regexes to run: ``` In [1]: %time p.parse("mpich.log") Wall time: 4min 14s ``` That's really unacceptably slow... After some digging, it seems a few regexes tend to have `O(n^2)` scaling where `n` is the string / log line length. I don't think they *necessarily* should scale like that, but it seems that way. The common pattern is this ``` ([^:]+): error ``` which matches `: error` literally, and then one or more non-colons before that. So for a log line like this: ``` abcdefghijklmnopqrstuvwxyz: error etc etc ``` Any of these are potential group matches when using `search` in Python: ``` abcdefghijklmnopqrstuvwxyz bcdefghijklmnopqrstuvwxyz cdefghijklmnopqrstuvwxyz ⋮ yz z ``` but clearly the capture group should return the longest match. My hypothesis is that Python has a very bad implementation of `search` that somehow considers all of these, even though it can be implemented in linear time by scanning for `: error` first, and then greedily expanding the longest possible `[^:]+` match to the left. If Python indeed considers all possible matches, then with `n` matches of length `1 .. n` you see the `O(n^2)` slowness (i verified this by replacing + with {1,k} and doubling `k`, it doubles the execution time indeed). This PR fixes this by removing the `+`, so effectively changing the O(n^2) into a O(n) worst case. The reason we are fine with dropping `+` is that we don't use the capture group anywhere, so, we just ensure `:: error` is not a match but `x: error` is. After going from O(n^2) to O(n), the 15MB mpich build log is parsed in `1.288s`, so about 200x faster. Just to be sure I've also updated `^CMake Error.*:` to `^CMake Error`, so that it does not match with all the possible `:`'s in the line. Another option is to use `.*?` there to make it quit scanning as soon as possible, but what line that starts with `CMake Error` that does not have a colon is really a false positive...
2021-10-11installer: Support showing status information in terminal title (#16259)Michael Kuhn3-1/+43
Installing packages with a lot of dependencies does not have an easy way of judging the current progress (apart from running `spack spec -I pkg` in another terminal). This change allows Spack to update the terminal's title with status information, including its current progress as well as information about the current and total number of packages.
2021-10-11Only install env modifications in <prefix>/.spack (#24081)Harmen Stoppels7-29/+79
- Do not store the full list of environment variables in <prefix>/.spack/spack-build-env.txt because it may contain user secrets. - Only store environment variable modifications upon installation. - Variables like PATH may still contain user and system paths to make spack-build-env.txt sourceable. Variables containing paths are modified through prepending/appending, and if we don't apply these to the current environment variable, we end up with statements like `export PATH=/path/to/spack/bin` with system paths missing, meaning no system binaries are in the path, which is a bad user experience. - Do write the full environment to spack-build-env.txt in the staging dir, but ensure it is readonly for the current user, to make it a bit safer on shared systems.
2021-10-11Add `spack env activate --temp` (#25388)Harmen Stoppels2-16/+54
Creates an environment in a temporary directory and activates it, which is useful for a quick ephemeral environment: ``` $ spack env activate -p --temp [spack-1a203lyg] $ spack add zlib ==> Adding zlib to environment /tmp/spack-1a203lyg ==> Updating view at /tmp/spack-1a203lyg/.spack-env/view ```
2021-10-11Remove unused --dependencies flag (#25731)Harmen Stoppels1-1/+1
2021-10-08Remove DB reindex during a read operation (#26601)Massimiliano Culpo2-12/+16
The DB should be what is trusted for certain operations. If it is not present when read we should assume the corresponding store is empty, rather than trying a write operation during a read. * Add a unit test * Document what needs to be there in tests
2021-10-08Fix leaky spack.binary_distribution.binary_index in tests (#26609)Harmen Stoppels2-7/+20
* Fix issues with leaky binary index across tests * More rigorous binary_index reset as now other tests are failing :(
2021-10-08Allow Version('') and map it to the empty tuple (#25953)Tamara Dahlgren2-4/+21
2021-10-07add hash field to spec on find --json and assert in test its there (#26443)Daniel G Travieso2-6/+9
Co-authored-by: Daniel Travieso <daniel@dgtravieso.com>
2021-10-07Fix for license symlinking issue. (#26576)Paul Ferrell1-1/+1
When a symlink to a license file exists but is broken, the license symlink post-install hook fails because os.path.exists() checks the existence of the target not the symlink itself. os.path.lexists() is the proper function to use.