Compare commits

..

455 Commits

Author SHA1 Message Date
Harmen Stoppels
522d9e260b mirrors: distinguish between source/binary mirror; simplify schema (#34523)
Allow the following formats:

```yaml
mirrors:
  name: <url>
```

```yaml
mirrors:
  name:
    url: s3://xyz
    access_pair: [x, y]
```

```yaml
mirrors:
  name:
    fetch: http://xyz
    push:
      url: s3://xyz
      access_pair: [x, y]
```

And reserve two new properties to indicate the mirror type (e.g.
mirror.spack.io is a source mirror, not a binary cache)

```yaml
mirrors:
  spack-public:
    source: true
    binary: false
    url: https://mirror.spack.io
```
2023-07-13 11:29:17 +00:00
Massimiliano Culpo
3261889e3a spack audit: allow skipping version checks from package.py (#28372)
A few packages have version directives evaluated
within if statements, conditional on the value of
`platform.platform()`.

Sometimes there are no cases for e.g. platform=darwin and that
causes a lot of spurious failures with version existence
audits.

This PR allows expressing conditions to skip version
existence checks in audits and avoid these spurious reports.
2023-07-13 06:47:47 -04:00
Harmen Stoppels
161b30a32f Add type hints to spack.installer (#38872) 2023-07-13 10:41:19 +00:00
Adam J. Stewart
b67f1f395b Add missing space in error msg (#38863) 2023-07-13 10:24:02 +02:00
dependabot[bot]
33c2fd7228 build(deps): bump docker/setup-buildx-action from 2.9.0 to 2.9.1 (#38868)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.9.0 to 2.9.1.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](2a1a44ac4a...4c0219f9ac)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  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-07-13 10:23:22 +02:00
Manuela Kuhn
7d5007b5e4 Restrict py-pip version for packages using --install-option (#38837) 2023-07-13 10:00:40 +02:00
Adam J. Stewart
bb7f437bf5 Standardize subcommand help strings (#38804)
### Rationale

While working on #29549, I noticed a lot of inconsistencies in our argparse help messages. This is important for fish where these help messages end up as descriptions in the tab completion menu. See https://github.com/spack/spack/pull/29549#issuecomment-1627596477 for some examples of longer or more stylized help messages.

### Implementation

This PR makes the following changes:

- [x] help messages start with a lowercase letter.
- [x] Help messages do not end with a period
- [x] the first line of a help message is short and simple

    longer text is separated by an empty line
- [x] "help messages do not use triple quotes" 

    """(except docstrings)"""
- [x] Parentheses not needed for string concatenation inside function call
- [x] Remove "..." "..." string concatenation leftover from black reformatting
- [x] Remove Sphinx argument docs from help messages

The first 2 choices aren't very controversial, and are designed to match the syntax of the `--help` flag automatically added by argparse. The 3rd choice is more up for debate, and is designed to match our package/module docstrings. The 4th choice is designed to avoid excessive newline characters and indentation. We may actually want to go even further and disallow docstrings altogether.

### Alternatives

Choice 3 in particular has a lot of alternatives. My goal is solely to ensure that fish tab completion looks reasonable. Alternatives include:

1. Get rid of long help messages, only allow short simple messages
2. Move longer help messages to epilog
3. Separate by 2 newline characters instead of 1
4. Separate by period instead of newline. First sentence goes into tab completion description

The number of commands with long help text is actually rather small, and is mostly relegated to `spack ci` and `spack buildcache`. So 1 isn't actually as ridiculous as it sounds.

Let me know if there are any other standardizations or alternatives you would like to suggest.
2023-07-13 00:18:23 -07:00
Vicente Bolea
6312ae8464 vtk-m: modernize vtk-m recipe (#38726) 2023-07-13 08:21:38 +02:00
Harmen Stoppels
3828ae2a52 ci: populate caches in before script (#38762)
* ci: run spack list in power ci

Let's see if Spack itself is the bottleneck in CI...

* rebuild curl in CI

* more of the same please!

* drop the profiler

* undo rebuildme test in ci variant

* add comment for posterity

* enable profiling

* trigger CI

* See how it goes now that perf regressions are fixed on develop

* try shorter poll intervals

* Revert "try shorter poll intervals"

This reverts commit d60c34ad3eceead0c13a5277cf8e783fd42b7458.

* Remove spec.format call in Database._get_matching_spec_key

* once more in ci please

* undo irrelevant changes

* run spack list in before script

* test in ci

* -:

* Undo CI testing
2023-07-12 18:12:22 -05:00
dependabot[bot]
c2bdb4600a build(deps): bump docker/setup-buildx-action from 2.8.0 to 2.9.0 (#38783)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](16c0bc4a6e...2a1a44ac4a)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  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-07-12 17:18:05 -04:00
Jonathon Anderson
90208da8a5 containers: retain shallow git data (#37734) 2023-07-12 21:03:10 +00:00
Michael Fink
c8026c3c87 Add path to MPI executables to ^mpi dependents (#35758) 2023-07-12 13:58:43 -05:00
G-Ragghianti
f895f80bc2 Package papi: update for smoke tests (#38711)
* Adding papi smoke tests
* smoke tests
* update to new test framework
2023-07-12 11:38:57 -07:00
Stephan Grein
0ca11d7033 Fix fmt and spdlog versions for micromamba. (#38739)
The spdlog project precisely states/depends which fmt version should
be used for compatibility. Latest version 1.11.0 depends explictly on
fmt 9.1.0. Without fixed version micromamba build fails when using spack
install micromamba on e.g. Rockylinux 8.5.
2023-07-12 11:24:26 -07:00
Dax Lynch
4fa7dc03ae py-callmonitor: added new package (#38764)
* py-callmonitor: added new package

* depends_on numpy

* Update var/spack/repos/builtin/packages/py-callmonitor/package.py

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

---------

Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
Co-authored-by: eugeneswalker <38933153+eugeneswalker@users.noreply.github.com>
Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>
2023-07-12 11:19:57 -07:00
Vicente Bolea
5ba99b8eb2 adios2: add aws variant (#38857) 2023-07-12 11:14:47 -07:00
Samuel Browne
78b24b45f6 Add gettext as a dependency of bison (#35979)
The 'bison' executable requires libtextstyle to run.  I think this was
usually satisfied because gettext is often installed with the OS, or
brought in accidentally via perl/m4.

Looks like the libtextstyle library dependency started in Bison 3.4
2023-07-12 14:01:12 -04:00
kjrstory
c2bafd7b7f openfoam-org: add precision option (#38746) 2023-07-12 14:49:45 +02:00
Andre Sailer
778cbb225c Static-analysis-suite: mark versions deprecate for this obsolete package (#38754) 2023-07-12 14:47:03 +02:00
Mikael Simberg
62f24f1b2a Patch broken CMake handling when no architectures are found in HIP package (#37022) 2023-07-12 14:39:41 +02:00
Vicente Bolea
37ef31dc22 vtk-m: correct cuda_arch variant behavior (#38697)
Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
2023-07-12 14:34:50 +02:00
Mikael Simberg
7f2be62ff2 Add conflict for hpx on ARM (#38812)
HPX requires use of Boost.Context on ARM.
2023-07-12 13:38:57 +02:00
snehring
ca16066eef apptainer: add flag_handler to discard spack flags (#38843) 2023-07-12 13:31:47 +02:00
Vanessasaurus
6a762501f8 flux-sched: add v0.28.0 (#38860)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2023-07-12 05:33:48 -04:00
Seth R. Johnson
29fa4bf64c hepmc3: add protobuf variant and update flags (#38841) 2023-07-12 11:21:49 +02:00
Adam J. Stewart
d2ed8c5226 py-torch: rename master to main (#38858) 2023-07-12 11:20:47 +02:00
Massimiliano Culpo
fb223f034b Fix build of CentOS stream docker image (#38824) 2023-07-12 10:55:43 +02:00
Daniele Cesarini
ca4c59cd77 REGALE: add new package (#38444)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-07-12 10:21:36 +02:00
Richard Berger
dfcb3bca65 legion: add ofi-slingshot11 conduit (#38859) 2023-07-12 03:53:26 -04:00
Tamara Dahlgren
ce6b79cd96 cbflib: fix build with newer gfortran (#38632) 2023-07-12 09:15:26 +02:00
Rocco Meli
831bfb43f5 DLA-Future: ensure umpire~cuda~rocm when ~cuda~rocm (#38835)
Co-authored-by: Raffaele Solcà <rasolca@cscs.ch>
2023-07-12 09:11:07 +02:00
Wileam Y. Phan
60697b421e fpm: add versions up to 0.9.0 (#38856) 2023-07-12 09:09:36 +02:00
Michael Kuhn
d5d0b8821c installer: Improve status reporting (#37903)
Refactor `TermTitle` into `InstallStatus` and use it to show progress
information both in the terminal title as well as inline. This also
turns on the terminal title status by default.

The inline output will look like the following after this change:
```
==> Installing m4-1.4.19-w2fxrpuz64zdq63woprqfxxzc3tzu7p3 [4/4]
```
2023-07-12 08:54:45 +02:00
Samuel Browne
d3704130b6 trilinos: Add CMake minimum and 14.2.0 version (#38853)
* Update minimum CMake version for Trilinos
  Changed to 3.23 as of release 14.0.0.
* Add Trilinos 14.2.0
2023-07-12 01:04:07 -04:00
Seth R. Johnson
9ef138dad5 protobuf: use cxxstd from abseil-cpp to fix C++17 build (#38840) 2023-07-11 20:03:51 -04:00
Thomas Madlener
6b51bfb713 edm4hep: Add tag for version 0.10 and deprecate older versions (#38817)
* edm4hep: add latest tag
* edm4hep: Mark all older versions as deprecated
2023-07-11 16:00:06 -07:00
MatthewLieber
fb7cdb0408 Adding sha for the 7.2 release of OMB (#38842)
Co-authored-by: Matt Lieber <lieber.31@osu.edu>
2023-07-11 15:56:25 -07:00
Chris Green
1e1b086484 [procps] Improve gettext/libintl handling (#38646)
Fixes #38639.
2023-07-11 15:35:55 -07:00
Stephen Hudson
0d51faf6cb libEnsemble: add v0.10.1 (#38845) 2023-07-11 18:18:16 -04:00
Manuela Kuhn
ed247744e7 py-charm4py: add missing dependencies (#38830) 2023-07-11 14:49:49 -04:00
Christian Glusa
299066feb5 Py-PyNucleus: Update dependencies, enable parallel build (#38779) 2023-07-11 12:50:41 -04:00
Martin Aumüller
2e695fa03f ispc: on ARM, build with ARM targets enabled, and updates (#38080)
* llvm: fix build with libcxx=none

* ispc: checksum 1.20.0

* ispc: ensure that it does not crash immediately

this would happen if linked to the wrong libc++

* ispc: fix build on macos

find ncurses instead of curses and link against tinfo in order to avoid
unresolved references to _del_curterm, _set_curterm, _setupterm, and
_tigetnum

* ispc: enable arm targets, if building on arm

* ispc: remove double cmake argument

I forgot to remove the constant -DARM_ENABLED=FALSE when adding
-DARM_ENABLED with a value depending on target architecture

* ispc: fix linux build

since 1.20, linux build uses TBB as default tasking system and thus
needs to depend on it

* ispc: try to fix link error on linux

link against both curses (as before) and tinfo (added because of macos)

* ispc: update for recent llvm changes

libcxx=none instead of ~libcxx
2023-07-11 09:44:18 -07:00
Adam J. Stewart
5fc949f252 py-black: add v23.7.0 (#38834) 2023-07-11 09:50:19 -05:00
Adam J. Stewart
e6876f47e6 py-lightning: add v2.0.5 (#38828) 2023-07-11 09:49:50 -05:00
Rocco Meli
364884df97 fix tiled-mm (#38774) 2023-07-11 14:28:37 +02:00
Massimiliano Culpo
d0e39a9870 Add CHANGELOG entry for v0.20.1 (#38836) 2023-07-11 13:35:04 +02:00
Todd Gamblin
162d0926f9 mypy: add more ignored modules to pyproject.toml (#38769)
`mypy` will check *all* imported packages, even optional dependencies outside your
project, and this can cause issues if you are targeting python versions *older* than the
one you're running in. `mypy` will report issues in the latest versions of dependencies
as errors even if installing on some older python would have installed an older version
of the dependency.

We saw this problem before with `numpy` in #34732. We've started seeing it with IPython
in #38704. This fixes the issue by exempting `IPython` and a number of other imports of
Spack's from `mypy` checking.
2023-07-11 13:30:07 +02:00
Manuela Kuhn
f0ef0ceb34 py-gluoncv: switch to PyPI and add 0.10.5.post0 (#38814)
* py-gluoncv: switch to PyPI and add 0.10.5.post0

* Fix style

* Remove no-unicode-readme.patch
2023-07-10 21:19:15 -05:00
Adam J. Stewart
5ba40913af py-numpy: add v1.25.1 (#38799) 2023-07-10 21:18:39 -05:00
Jen Herting
7288f11cf9 [arrow] tuple has no method append (#38820) 2023-07-10 18:12:08 -07:00
Wouter Deconinck
d5b01e45ce mlpack: remove go variant from cmake_args (#38821) 2023-07-10 18:10:02 -07:00
Manuela Kuhn
8827f01865 py-minkowskiengine: add missing openblas dependency (#38742)
* py-minkowskiengine: add missing openblas dependency

* Add comment about blas
2023-07-10 17:21:16 -05:00
renjithravindrankannath
2163c3701c Setting library path as lib similar to other rocm packages. (#37568)
* Setting library path as lib similar to other rocm packages.
* Fix style check failure
* Restricting changes to 5.4.3 and above
* Including comgr change
2023-07-10 14:55:39 -07:00
afzpatel
db23fd055c new hip-examples package (#35891)
* initial commit for adding hip-examples package
* adding test to hip-examples
* fixed compile error on add4
* change standalone test to use new syntax
2023-07-10 13:05:46 -07:00
Sangu Mbekelu
73acf110ff py-sacrebleu (#37159)
* new mosesdecoder package

* "new py-sacrebleu package"

* Delete package.py

* [@spackbot] updating style on behalf of Sangu-Mbekelu

* Update package.py

updating package based on review

---------

Co-authored-by: Sangu Mbekelu <s.mbekelu9@gmail.com>
2023-07-10 12:16:42 -07:00
kjrstory
ff49969264 Package:Openfoam-org version url using function (#37587)
* Package:Openfoam-org version url using function
* Package:Openfoam-org small style fix
* openfoam-org: url_for_function
2023-07-10 11:19:29 -07:00
eugeneswalker
eb94d830e1 legion +rocm: set HIP_PATH to {hip.prefix}/hip (#38819) 2023-07-10 10:35:12 -07:00
Chris Green
8fdd8fcf63 Perl package: detect opcode support in externals (#38618)
Spack-installed Perl always has opcode support, but external Perl
installations might not. This commit adds a +opcode variant and
updates the external detection logic to check for opcode support.

The postgresql package is updated to require perl+opcode (in
combination with the above, this helps detect when an external
Perl instance is sufficient for a Spack build of postgreqsql, or
if Spack needs to build its own Perl).
2023-07-10 10:01:20 -07:00
Michael Kuhn
30b077e63c glib: add 2.76.4 (#38813) 2023-07-10 09:06:05 -07:00
Taillefumier Mathieu
64c6d63675 Update cp2k recipe to use cmake or the current build system (#35718)
* Update cp2k recipe to use cmake or the current build system

Offers the possibility to build cp2k with the new cmake build system. commands like this are now supported

spack install cp2k@master build_system=cmake +.....

the recipe supports the following optional functionalities

- superlu, cosma, sirius, spglib, metis, spglib, libxc, libint, cuda/rocm, mkl/openblas/sci (and others), mpi, openmp, dbcsr
- dbcsr is built separately using the currently available recipe.

Two PRs need to be merged to be fully functional (cosma update in spack + one PR in cp2k github).

* Fix indentation

* Fix indentation

* Update libvori

* More typos

* Simplify BLAS/LAPACK

* Simplify BLAS/LAPACK

* Add A100 gpu value

* Fix typo

* Add the enable_regtests option

if -DCP2K_ENABLE_REGTESTS=ON (+enable_regtests with spack) then the location of the binary executables will be in the cp2k root directory under exe/build-cmake-*. This option is needed to run the regtests afterwards.

* Minor update

* more fixes

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>

* small changes

* Remove any reference to nvidia architecture in the rocm list

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/cp2k/package.py

Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>

* Final reformating

* Update py-fypp

---------

Co-authored-by: Mikael Simberg <mikael.simberg@iki.fi>
Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>
2023-07-10 14:02:52 +02:00
Massimiliano Culpo
0ed6ff3823 Removing inactive maintainer (#38773) 2023-07-10 11:31:09 +02:00
Todd Gamblin
757f8ae59c find: add --hashes shortcut for piping to other commands (#38663)
People frequently ask us how to pipe `spack find` output to other commands, and we tell
them to do things like this:

```console
$ spack find --format "/{hash}" | spack uninstall -ay
```

Sometimes users don't know about hash references and come up with potentially ambiguous
formulations like this:

```console
spack find --format {name}@{version}%{compiler} | spack uninstall -ay
```

Since this is a common enough thing to want to do, and to make it more obvious how, this
PR adds a `-H` / `--hashes` as a shortcut, so you can now just do:

```console
spack find -H | spack uninstall -ay
```
2023-07-10 09:43:37 +02:00
Dax Lynch
27c62b981a Added package py-bitstruct (#38761)
* Added packages bitstruct, callmonitor, and PYnvtx

* Revert "Added packages bitstruct, callmonitor, and PYnvtx"

This reverts commit 76d25aa76b.

* py-bitstruct: This module is intended to have a similar interface as the python struct module, but working on bits instead of primitive data types (char, int, …)

* Update package.py

To pass the style prechecks

* PyNVTX: new package

* Delete package.py

Accidentally added this package.

* Update var/spack/repos/builtin/packages/py-bitstruct/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

---------

Co-authored-by: eugeneswalker <38933153+eugeneswalker@users.noreply.github.com>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-07-09 20:19:07 -05:00
Manuela Kuhn
1ed934c710 py-triangle: restrict Python version (#38808) 2023-07-09 20:12:42 -04:00
Harmen Stoppels
eef14ddcad openssl: prefer 3.x (#36729)
* openssl: prefer 3.x

This PR is not intended to be merged immediately, but it would be good
to see what packages fail to build in CI so that we can get proper
version constraints on openssl (before all packages update and support
both openssl 1 and 3)

* Disable assembly for 3.x %oneapi

* cmake: depend on spack curl, to deal with curl - openssl compat

* also make zlib external

* remove overly strict & unsafe requirement on py-cryptographty patch version number

* update openssl compat bounds in py-cryptography

* smaller diff

* Make libssh2 an autotools/cmake package

* fix weird upperbound in libssh2 as there is not openssl v2

* libssh2: pc file lists plain -lssl -lcrypto w/o leading -L flag, confusing libgit2 parsing of pkg-config output

* Actually fix the issue in libssh2: its pc file looks broken
2023-07-09 17:48:00 -04:00
Jonathon Anderson
db879a5679 ci: Fix broken SPACK_CHECKOUT_VERSION (#38778) 2023-07-09 12:37:36 -07:00
Vanessasaurus
d0804c44f1 Automated deployment to update package flux-core 2023-07-08 (#38790)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2023-07-09 12:12:55 -07:00
Harmen Stoppels
374fda1063 Don’t call spec.format in Database._get_matching_spec_key (#38792)
`"%s" % spec` formats the spec with deps included, which produces sometimes KBs
of data and is slow to run in pure Python. It can delay otherwise very short-lived
read/write locks on the database.

Discovered in #38762 where profile output showed about 2 seconds is spent in
`spec.format`, which is significant overhead when using multiprocessing to install
from binary cache in parallel (installation often takes <5s for small packages). With
this change, `spec.format` no longer shows up in profile output.

(This line hasn't changed since Spack v0.9 ;p)

* move format() call to custom NoSuchSpecError exception
* add a comment saying why, so we can eventually change `Spec.__str__`
2023-07-09 11:27:38 -04:00
Jonathon Anderson
3c14569b8e pkgconf: Update to new upstream URL (#38800)
See 437c2a3218
2023-07-09 16:12:47 +02:00
Michael Kuhn
841402c57a gcc: add 10.5.0 (#38784) 2023-07-09 12:13:04 +02:00
Wouter Deconinck
09e1258ed4 qt-* (Qt6 pkgs): new versions 6.5.0, 6.5.1 (#36705)
* qt-base: new version 6.5.0

* qt-declarative: new version 6.5.0

* qt-quick3d: new version 6.5.0

* qt-quicktimeline: new version 6.5.0

* qt-shadertools: new version 6.5.0

* qt-*: new version 6.5.1

* qt-base: new version 6.5.1
2023-07-08 15:36:27 -05:00
Dax Lynch
b2dcd9bd42 PyNVTX: added new package (#38763) 2023-07-07 20:02:21 -05:00
Manuela Kuhn
2dc76248d3 py-pyarrow: disable dataset variant by default (#38775)
* py-pyarrow: enable parquet variant by default

* Disable parquet variant by default

* Add conflict to enable parquet when dataset is active

* Disable dataset variant by default
2023-07-07 16:27:32 -05:00
Adam J. Stewart
bf6eb832ae py-matplotlib: add v3.7.2 (#38745)
* py-matplotlib: add v3.7.2

* Update dep versions
2023-07-07 14:43:41 -05:00
Chris Richardson
e8e6d69af5 New package: py-nanobind (#38327)
* initial commit of nanobind package

* style fixes

* Update package.py

Typo

* addressed PR comments

* add v1.4.0

* Update var/spack/repos/builtin/packages/py-nanobind/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

---------

Co-authored-by: Matthew Archer <ma595@cam.ac.uk>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-07-07 12:02:45 -04:00
Manuela Kuhn
050d8df5a5 py-astropy: fix import tests and restrict py-pip version (#38731)
* py-astropy: fix import tests and restrict py-pip version

* Fix --install-option name in comments

* Rename variant and fix variant dependencies

* Remove parquet variant from py-pyarrow
2023-07-07 10:19:02 -05:00
Massimiliano Culpo
6958b49c2f Remove "node_compiler" from the list of unknown atoms (#38753) 2023-07-07 13:19:53 +02:00
Harmen Stoppels
a1d33e97ec Fix multiple quadratic complexity issues in environments (#38771)
1. Fix O(n^2) iteration in `_get_overwrite_specs`
2. Early exit `get_by_hash` on full hash
3. Fix O(n^2) double lookup in `all_matching_specs` with hashes
4. Fix some legibility issues
2023-07-07 10:51:58 +00:00
Massimiliano Culpo
ca9b52bbc5 Prevent "spack external find" to error out on wrong permissions (#38755)
fixes #38733
2023-07-07 12:05:32 +02:00
Andrey Parfenov
ae00d7c358 add info about spack env from spack-configs for oneAPI build tools (#38751)
Signed-off-by: Andrey Parfenov <andrey.parfenov@intel.com>
2023-07-07 03:47:54 +00:00
Mickael PHILIT
1071c1d8e0 add cgns 4.4.0 (#38530) 2023-07-06 17:52:03 -07:00
Carlos Bederián
5f6c832020 freesurfer: add 7.4.1, 7.4.0, 7.3.2 (#38544) 2023-07-06 17:51:01 -07:00
Wouter Deconinck
9e4c4be3f5 mlpack: new package (#38277)
* mlpack: new package

mlpack is an intuitive, fast, and flexible header-only C++ machine learning library with bindings to other languages. It is meant to be a machine learning analog to LAPACK, and aims to implement a wide array of machine learning methods and functions as a "swiss army knife" for machine learning researchers.

* mlpack: upstream merged patch to allow python installation in spack
2023-07-06 13:42:56 -07:00
John W. Parent
6c325a2246 Curl Package: Fixup bugs preventing build on Win (#38757) 2023-07-06 14:59:42 -04:00
Ben Cowan
28b884ace5 Add new version 5.0.0 of PyAMG (#38674)
* Added v5.0.0 of PyAMG.  This required v7.1.0 of setuptools_scm due to a bug in 7.0.5.

* Added comment about version requirement.

* Loosened dependency based on build experiments.

* Updated tomli deps.

* Update var/spack/repos/builtin/packages/py-setuptools-scm/package.py

Dependence for 7.0 only.

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Update var/spack/repos/builtin/packages/py-pyamg/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Swapped lines.

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-07-06 13:54:29 -04:00
Harmen Stoppels
a13687f022 Disable fortran in openblas for darwin ci, fix variant default value (#38752) 2023-07-06 17:47:20 +02:00
Thomas Bouvier
bd81676e3c py-torch: fix build (#38730) 2023-07-06 09:35:11 -05:00
Adam J. Stewart
7eaa99eabc py-scikit-learn: add v1.3.0 (#38660) 2023-07-06 08:55:00 -05:00
kjrstory
5cb0b57b30 openfoam.org: add a maintainer(#37280) (#37697)
Co-authored-by: Dom Heinzeller <dom.heinzeller@icloud.com>
2023-07-06 13:44:24 +02:00
Jen Herting
c6867649b9 [py-blis] added versions 0.7.9 and 0.9.1 (#38269)
* [py-blis] added version 0.7.9

* [py-blis] added version 0.9.1

* [py-blis]

- removed type run for dependency py-cython
2023-07-06 05:09:11 -04:00
Jim Phillips
c129603192 namd: add maintainer (#38740) 2023-07-06 04:28:54 -04:00
Manuela Kuhn
4e456992e4 py-abipy: add 0.9.3 (#38716)
* py-abipy: add 0.9.3

* Remove py-cython dependency

* Remove dep version restrictions for new release
2023-07-06 04:23:55 -04:00
Jen Herting
10876736e0 [py-cymem] added version 2.0.7 (#38267)
* [py-cymem] added version 2.0.3

* [py-cymem] added restriction to py-wheel limitation
2023-07-06 04:13:44 -04:00
Thomas Bouvier
982cdd7988 py-dm-tree: add v0.1.8 (#38606)
* `py-dm-tree`: add v0.1.8

* Update dependencies

* Fix hash
2023-07-06 00:12:04 -05:00
Thomas Bouvier
095e48f399 py-horovod: update to v0.28.1 (#38732) 2023-07-05 23:56:47 -05:00
Manuela Kuhn
833db65fa3 py-pip: add 23.1.2 (#38608)
* py-pip: add 23.1.2

* Restrict py-pip version for py-protobuf

* Restrict py-pip version for straightforward packages

* Restrict py-pip version for nrm

* Fix --install-option name in comments

* Simplify py-pip restriction for py-scs

* nrm: fix wrong comment
2023-07-05 23:37:16 -04:00
Harmen Stoppels
06268f7b72 perl: add 5.38.0, 5.36.1; prefer all even minor versions over development versions (#38690)
* perl: add 5.38.0, 5.36.1; prefer all even minor versions over development versions

* fix libxcrypt build with new perl

* fix libxcrypt with a patch
2023-07-05 18:08:54 -04:00
Manuela Kuhn
f884e71a03 py-spglib: add 2.0.2 (#38715)
* py-spglib: add 2.0.2

* Update var/spack/repos/builtin/packages/py-spglib/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Remove py-setuptools as run dependency

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-07-05 15:24:31 -05:00
Wouter Deconinck
ea1439dfa1 acts: new variant cxxstd (#38682)
* acts: allow ^root cxxstd=20

* acts: new variant cxxstd, pass through to root

* acts: always args.append CMAKE_CXX_STANDARD from variant

* acts: remove unused import

* acts: fix self.define_from_variant
2023-07-05 12:56:06 -07:00
Adam J. Stewart
45838cee0b Drop Python 2 super syntax (#38718) 2023-07-05 09:04:29 -05:00
Adam J. Stewart
95847a0b37 Drop Python 2 object subclassing (#38720) 2023-07-05 14:37:44 +02:00
George Young
8861fe0294 salmon: patching to build with %gcc@13: (#38553)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-07-05 14:36:55 +02:00
Harmen Stoppels
12427c6974 plumed: deprecate non-buildable versions, patch Python makefile only when supported (#38713) 2023-07-05 05:48:13 -04:00
Taillefumier Mathieu
a412403d7b Update cosma and a few related recipes (#35615)
* Add maintainers 

* Updated cosma archive checksum and costa version

- updated cosma version (in the cosma build system)
- updated costa version
- use the default generic url for downloading packages
- do not build tiled-mm when the cpu only version is needed


Signed-off-by: Dr. Mathieu Taillefumier <mathieu.taillefumier@free.fr>
Co-authored-by: Rocco Meli <r.meli@bluemail.ch>
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2023-07-05 11:02:50 +02:00
Martin Diehl
6a258c148f damask: fix build of alpha release (#38457) 2023-07-05 10:59:05 +02:00
Tom Epperly
8b13440038 Add version 1.8.23 that fixes a compilation bug on clang-15. (#38541) 2023-07-05 10:56:18 +02:00
Tamara Dahlgren
632f840d8a tk: convert to new stand-alone test process (#38575) 2023-07-05 10:55:07 +02:00
Alex Richert
8372726a88 ip: add v4.1.0, and additional variants (#38526) 2023-07-05 10:45:38 +02:00
Tamara Dahlgren
5dc84b64e9 tests/qthreads: convert to new stand-alone test process (#38600) 2023-07-05 10:41:25 +02:00
Tamara Dahlgren
8d72b8dd63 tests/papyrus: convert to new stand-alone test process (#38627) 2023-07-05 10:34:15 +02:00
Jim Phillips
adde84e663 Build NAMD with Tcl by default (#38645)
NAMD users expect the Tcl scripting interface to be enabled as it is used in many examples and tutorials in addition to being required for features such as multi-copy algorithms.
2023-07-05 10:29:11 +02:00
Rémi Lacroix
f863066b7e git-annex: add latest version 10.20230408 (#38728) 2023-07-05 04:27:46 -04:00
Juan Miguel Carceller
082afe04b8 xrootd: add _STAT_VER patch (#38547)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2023-07-05 10:14:18 +02:00
Peter Scheibel
f365386447 Installations: don't set group permissions when they match what is desired (#38036)
* When installing a package Spack will attempt to set group permissions on
the install prefix even when the configuration does not specify a group.

Co-authored-by: David Gomez <dvdgomez@users.noreply.github.com>
2023-07-05 09:54:04 +02:00
Carlos Bederián
a90200528f hcoll: ucx version requirements (#38665) 2023-07-05 09:48:58 +02:00
Adam J. Stewart
1ce6feef94 py-pyqt4: stricter dependency versions (#38673) 2023-07-05 09:45:24 +02:00
Weiqun Zhang
84010108b1 amrex: add v23.07 (#38676) 2023-07-05 09:43:37 +02:00
Adam J. Stewart
24d2005920 py-lightly: add v1.4.11 (#38717) 2023-07-05 09:41:08 +02:00
Robert Cohn
fa73b14247 intel-oneapi-mkl: support for cray mpich (#38725) 2023-07-05 09:20:19 +02:00
Manuela Kuhn
a99b7886e9 py-pymatgen: add 2022.9.8 (#38714) 2023-07-05 00:12:18 -05:00
Adam J. Stewart
2978911520 spack commands: add type hints and docstrings (#38705) 2023-07-04 16:43:02 -04:00
Harmen Stoppels
d35149d174 remove another Python 3.7 requirement & preference, since it was deprecated (#38710) 2023-07-04 20:33:47 +02:00
Manuela Kuhn
a3d11a7973 py-requests: add 2.31.0 (#38563) 2023-07-04 10:33:06 -04:00
Max Zeyen
cb69dbd804 gpi-space: add new versions (#38709)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-07-04 15:01:39 +02:00
Laura Bellentani
e6f50c5341 quantum-espresso: change in maintainers (#38688) 2023-07-04 14:06:21 +02:00
Chris White
32d0b5ca97 conduit: remove no longer needed blueos logic (#38698) 2023-07-04 07:52:59 -04:00
valmar
b537fad37a Added Python Prometheus client as dependency (#38700) 2023-07-04 07:12:47 -04:00
Thomas Bouvier
78e78eb1da nvtx: add new package (#38430)
Co-authored-by: thomas-bouvier <thomas-bouvier@users.noreply.github.com>
2023-07-04 07:07:41 -04:00
Stephen Sachs
8aeecafd1a wrf: add ARM compiler support (#38695) 2023-07-04 12:33:58 +02:00
Stephen Sachs
a0b2ca2dde Temporarily disable aws-pcluster pipelines (#38708) 2023-07-04 11:27:01 +02:00
Harmen Stoppels
08f23f4802 macos sip: apply on macos only, dont store LD_LIBRARY_PATH (#38687) 2023-07-04 10:54:13 +02:00
Adam J. Stewart
e9dc6dc96c Fix DYLD_* propagation to Python process from fish shell (#38615) 2023-07-04 10:48:56 +02:00
Adam J. Stewart
5588b93683 util-linux: add v2.39.1, fix macOS build (#38677) 2023-07-04 10:47:26 +02:00
George Young
70a38ea1c5 plink2: add new package @2.00a4.3 (#38469)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-07-04 04:09:45 -04:00
Adam J. Stewart
5bd7a0c563 spack make-installer: deterministic choice order (#38706) 2023-07-04 09:39:38 +02:00
Adam J. Stewart
33c5959e23 Remove from __future__ imports (#38703) 2023-07-04 08:30:29 +02:00
Manuela Kuhn
65288566e5 py-numpydoc: add 1.5.0 (#38701) 2023-07-03 22:13:54 -04:00
Manuela Kuhn
5e1c4693fd py-ruff: add 0.0.276 (#38702) 2023-07-03 21:59:14 -04:00
Aditya Bhamidipati
feb4681878 Add NCCL v2.18.3-1 release to recipe (#38647) 2023-07-03 16:26:07 -05:00
Thomas Bouvier
994b5ad49e ffmpeg: patch build failure (#38656)
* `ffmpeg`: patch build failure

* [@spackbot] updating style on behalf of thomas-bouvier

---------

Co-authored-by: thomas-bouvier <thomas-bouvier@users.noreply.github.com>
2023-07-03 11:12:26 -07:00
Harmen Stoppels
4654db54c7 hdf5-vol-log: depends on mpi (#38693)
From the configure.ac file:

> H5VL_log is built on top of MPI. Configure option --without-mpi or
> --with-mpi=no should not be used. Abort.

This currently fails to build in the oneAPI pipeline on `develop`
2023-07-03 20:08:40 +02:00
Adam J. Stewart
a6ebff3a2e py-pillow: add v10.0.0 (#38670) 2023-07-03 11:02:24 -07:00
Ashwin Kumar Karnad
6e8fb30b83 Add hash for octopusV13 (#38655) 2023-07-03 10:24:52 -07:00
Cyrus Harrison
465f83b484 add ascent 0.9.2 release (#38661) 2023-07-03 10:14:01 -07:00
Harmen Stoppels
ba7ae2c153 Drop requirement of python@3.7 since it's deprecated (#38692) 2023-07-03 16:15:32 +02:00
Jonathon Anderson
54adab7eac python: require xz libs=shared when +lzma (#38593) 2023-07-03 07:11:30 -05:00
Andrey Parfenov
30cb55e97c add support for oneapi compiler to wrf 4.4 (#38607)
Signed-off-by: Andrey Parfenov <andrey.parfenov@intel.com>
2023-07-03 07:34:06 -04:00
Harmen Stoppels
3594203f64 guile: fix %oneapi fast math madness (#38691) 2023-07-03 13:25:55 +02:00
Adam J. Stewart
f0add2428c dbus: AutotoolsPackage, optional documentation build (#38679)
Co-authored-by: Harmen Stoppels <me@harmenstoppels.nl>
2023-07-03 04:18:00 -04:00
Adam J. Stewart
af449b7943 qt-base: disable accessibility by default (#38680) 2023-07-03 09:45:22 +02:00
Adam J. Stewart
b6d591e39b bash: adam now uses fish (#38684) 2023-07-03 02:44:44 -05:00
Adam J. Stewart
3811dec18d Deprecate conda for Python 2 (#38681) 2023-07-03 09:44:20 +02:00
Adam J. Stewart
ae2efa1c27 xmlto: fix missing dependency on util-linux (#38678) 2023-07-03 09:43:18 +02:00
John Biddiscombe
acdcc8ed71 Add support to Paraview for TBB (#38582)
Co-authored-by: Jean Favre <jfavre@cscs.ch>
2023-07-03 09:33:56 +02:00
Jack Morrison
11bc27d984 Add libfabric 1.18.1 release (#38669) 2023-07-02 13:39:20 -07:00
Adam J. Stewart
4d5ff045e3 Deprecate Python 3.7 (#38619)
* Deprecated Python 3.7

* Add Python 3.7.17 because why not
2023-07-02 11:29:35 -05:00
Adam J. Stewart
63576275be SIPPackage: documentation fix (#38672) 2023-07-02 11:30:08 +02:00
Harmen Stoppels
cc74729115 Revert "openblas: do not build tests when installing (#38591)" (#38662)
This reverts commit 51c75c6da3.
2023-07-01 22:02:39 -04:00
dependabot[bot]
a864108bc1 build(deps): bump docker/setup-buildx-action from 2.7.0 to 2.8.0 (#38625)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.7.0 to 2.8.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](ecf95283f0...16c0bc4a6e)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  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-07-01 10:57:26 -07:00
Tamara Dahlgren
4aed051b73 openrasmol: convert to new stand-alone test process (#38630) 2023-07-01 10:55:20 -07:00
Jochen Klein
43996e84c3 icarus: add v11_0 and v12_0 (#38666) 2023-07-01 10:38:09 -07:00
Harmen Stoppels
14ebf1985e mercurial: add 6.x, fix python bounds (#38668)
* mercurial: add 6.x, fix python bounds

* remove python@2 versions, cause package audits is complaining
2023-07-01 12:49:49 +02:00
Robert Cohn
0c2b98ca70 [intel-oneapi-mkl] add openmpi support for +cluster (#38554) 2023-06-30 18:38:40 -04:00
Jonathon Anderson
43143b134a New package: pipx (#38658)
* py-userpath: new package

* pipx: new package

* Update var/spack/repos/builtin/packages/pipx/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* pipx: Remove incorrect dependency on py-platformdirs

* Update var/spack/repos/builtin/packages/pipx/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* py-userpath: Remove version requirements to match upstream

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-30 16:42:57 -05:00
Chris Green
45697582dc [py-onnx-runtime] Remove package superseded by py-onnxruntime (#37392) 2023-06-30 16:42:12 -05:00
David Boehme
9a214ffb75 Add Caliper variant in hypre package (#38651) 2023-06-30 15:46:18 -05:00
Tamara Dahlgren
4286c7398b tests/petsc: convert to new stand-alone test process (#38652) 2023-06-30 15:36:41 -05:00
Tamara Dahlgren
131acbdacc tests/slepc: convert to new stand-alone test process (#38653) 2023-06-30 15:34:42 -05:00
Adam J. Stewart
86d2399c76 Remove deprecated versions and packages (#37895)
This PR removes deprecated versions for all packages that I'm maintaining. In future Spack releases, I'm planning to do this on a much larger scale, but we can hold off until we have better reproducibility.

I'm hoping that this will improve the maintainability of these packages. If any other maintainers of these recipes would like to retain any of these deprecated versions, or add new versions, speak now or forever hold your peace 😄 

---------

Co-authored-by: adamjstewart <adamjstewart@users.noreply.github.com>
2023-06-30 12:29:45 -07:00
Adam J. Stewart
d89d6dab6d Python: add new versions (#38620) 2023-06-30 14:38:11 -04:00
Dan Lipsa
e6c94e9126 XZ package (Windows): install .dll files in bin (#35888)
Windows runtime library loading searches PATH, and therefore bin/ is
the appropriate place to put .dll files. Prior to this change, XZ was
installing both .dll and .lib files to the lib/ directory.
2023-06-30 10:10:18 -07:00
Scott Wittenburg
af5b93bb97 gitlab ci: reorganize when we check for specs on mirrors (#38626)
Move the logic checking which mirrors have the specs we need closer
to where that information is needed.  Also update the staging summary
to contain a brief description of why we scheduled or pruned each
job.  If a spec was found on any mirrors, regardless of whether
we scheduled a job for it, print those mirrors.
2023-06-30 10:18:16 -06:00
Tamara Dahlgren
dc25da1931 tests/pythons: convert to new stand-alone test process (#38340) 2023-06-30 05:52:42 -04:00
Chris White
067e40591a Py-shroud: add version 0.12.2 (#38643)
* add py-shroud version

* change version number based on advice of adamjstewart
2023-06-29 23:43:08 -04:00
mschouler
483688580e py-iterative-stats: Change maintainer, add new version (#38609)
* Change maintainer, add new version and deprecate old one

* Fix style issue

* Revert deprecation

---------

Co-authored-by: Marc Schouler <marc.schouler@inria.fr>
2023-06-29 21:06:43 -05:00
Thomas Bouvier
7448acaf98 py-nvidia-dali: add v1.27.0 (#38605)
* `py-nvidia-dali`: add v1.27.0

* Style
2023-06-29 20:47:41 -05:00
Adam J. Stewart
dfe2d5dca2 py-scipy: add v1.11.1 (#38635) 2023-06-29 18:38:48 -04:00
kwryankrattiger
b980fcff64 CI: Disable building VisIt in CI (#38642)
VisIt requires a deprecated version of Python (3.7) due to a VTK 8
dependency. Spack CI does not support building deprecated versions.
2023-06-29 17:33:40 -05:00
Adam J. Stewart
b405559e7b py-pandas: add v2.0.3 (#38636) 2023-06-29 14:13:23 -04:00
Sébastien Valat
7c5e3ddac5 numaprof: New package (version : 1.1.4) (#35271)
* numaprof: New package (version : 1.1.4)
* numaprof: Improve the deps description by adding 'type'
* numaprof: Fix maintainer semantic
2023-06-29 09:19:39 -07:00
Annop Wongwathanarat
6ffc11c46d relion: use patch from github for relion 4.0 (#38432) 2023-06-29 05:14:37 -04:00
Adam J. Stewart
a45d129f86 py-rasterio: add v1.3.8 (#38621) 2023-06-28 22:48:44 -05:00
eugeneswalker
3ccc527d74 py-pykerberos: needs krb5 for build to determine link and cflags via krb5-config binary (#38623) 2023-06-28 18:23:50 -04:00
Seth R. Johnson
51c75c6da3 openblas: do not build tests when installing (#38591)
* openblas: do not build tests when installing
* Add note about building tests
2023-06-28 17:57:08 -04:00
eugeneswalker
c3f4822f92 pruners-ninja: patch in upstream fix for spack issue #32112 (#38613) 2023-06-28 15:02:52 -04:00
Robert Cohn
ccae0ad534 [intel-tbb] support for building 2020.3 with icx (for dyninst) (#38610) 2023-06-28 14:08:12 -04:00
eugeneswalker
95fffe16a8 e4s ci: add hdf5-vol-daos (#37887)
* e4s ci: add hdf5-vol-daos

* hdf5-vol-daos: comment with failure notes
2023-06-28 08:31:59 -07:00
Seth R. Johnson
640ccf2ef9 celeritas: add patch when using geant4@10 (#38592) 2023-06-28 14:07:30 +01:00
John W. Parent
78f33bc002 Windows: Add PowerShell env support (#37951)
PowerShell requires explicit shell and env support in Spack.
This is due to the distinct differences in shell interactions between
cmd and pwsh. Add a doskey in pwsh piping 'spack' commands to a
powershell script similar to the sh function 'spack'. Add
support for PowerShell-specific shell interactions from Spack
(set/unset shell variables).
2023-06-27 18:26:51 -07:00
Xavier Delaruelle
25cc734452 environment-modules: add version 5.3.1 (#38597) 2023-06-27 21:22:53 -04:00
Adam J. Stewart
71b17a6945 geos: add v3.12.0 (#38595) 2023-06-27 16:23:51 -07:00
snehring
9425df1259 mindthegap: adding new version 2.3.0 (#38596) 2023-06-27 16:22:24 -07:00
Robert Cohn
e81076edd0 intel-oneapi-mkl: handle external mkl with external mpi (#38263) 2023-06-27 17:38:09 -04:00
Manuela Kuhn
84043d97b7 py-ruamel-yaml: add 0.17.32 and py-ruamel-yaml-clib: add 0.2.7 (#38585)
* py-ruamel-yaml: add 0.17.32 and py-ruamel-yaml-clib: add 0.2.7

* Update var/spack/repos/builtin/packages/py-ruamel-yaml/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Fix style

* Fix python dependency

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-27 16:37:28 -05:00
Adam J. Stewart
f93b61338c py-lightly: add v1.4.10 (#38594) 2023-06-27 16:37:11 -05:00
Axel Huebl
526ae84137 HDF5: is_enabled helper (ON) (#35705)
* HDF5: is_enabled helper (ON)
  Slightly generalize the `is_enabled` helper in the HDF5 package.
  `ON` is the most typical CMake bool option passed, besides many
  other possible `true` values, and should be included as a possible
  check to the config.
* Simplify
---------

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2023-06-27 16:42:57 -04:00
Manuela Kuhn
d960d29485 py-reportlab: add 4.0.4 (#38561) 2023-06-27 15:40:03 -05:00
Manuela Kuhn
5388ab1ac1 py-setupmeta: add 3.4.0 (#38589) 2023-06-27 13:09:12 -05:00
Manuela Kuhn
9ce075ed3d py-rst2pdf: add 0.100 (#38581) 2023-06-27 13:04:41 -05:00
Manuela Kuhn
46419502cb py-rich: add 13.4.2, py-markdown-it-py: add 3.0.0, py-mdurl: new (#38573)
* py-rich: add 13.4.2, py-markdown-it-py: add 3.0.0, py-mdurl: add new package

* Fix style
2023-06-27 13:03:40 -05:00
Manuela Kuhn
50623f6bde py-rfc3986: add 2.0.0 (#38570) 2023-06-27 12:46:35 -05:00
brian-kelley
d8922233ce kokkos-kernels: require kokkos+cuda_lambda (#38568)
(when +cuda, and on version 4.0.00 and up)
2023-06-27 10:22:57 -07:00
Adam J. Stewart
26a98f4c14 py-lightning: add v2.0.4, drop +extra (#38531)
* py-lightning: add v2.0.4, drop +extra

* Update dependencies
2023-06-27 12:01:39 -05:00
Scott Wittenburg
b6b33cfe7a ci: remove compiler bootstrapping code (#38543) 2023-06-27 10:35:19 -05:00
Luc Berger
41582f76bd Kokkos Kernels: adding release 3.7.1 and 4.0.0 (#36655)
Co-authored-by: eugeneswalker <38933153+eugeneswalker@users.noreply.github.com>
2023-06-27 08:33:29 -07:00
Tamara Dahlgren
97972d300a superlu-dist: convert to new stand-alone test process (#38188) 2023-06-27 10:44:16 -04:00
wspear
7470d14b35 Update superlu home page (#38562) 2023-06-27 08:34:12 -04:00
Tamara Dahlgren
ac825bd9d4 tests/py-genshi: convert to new stand-alone test process (#38345)
* py-genshi: convert to new stand-alone test process

* py-genshi: add run as py-setuptools deptype; remove test_testsuite comment
2023-06-27 08:33:56 -04:00
Wileam Y. Phan
e24bf70af4 Adjust cc90 to require at least CUDA 12 (#38572) 2023-06-27 08:24:12 -04:00
Dennis Klein
dfbdcaf551 fairmq: add v1.7.0 (#38550) 2023-06-27 08:19:42 -04:00
Matthieu Dorier
cc5ea14a6e cargs: add new package (#38548) 2023-06-27 08:19:19 -04:00
George Young
efd2ed750d py-bx-python: add 0.9.0 (#38419)
* py-bx-python: add 0.9.0

* remove dependency

* Remove python upper bound

* Clarify dependency requirements

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-27 08:14:37 -04:00
Harmen Stoppels
ab10b645c6 Revert "Updates to symlinking for Windows (#34701)" (#38578)
This reverts commit 66f75407d1.
2023-06-27 09:46:08 +02:00
Brian Van Essen
e79f275bc9 CachedCMakePackage: set build type (#38502)
Fixed the cached CMake package so that the build_type field is saved
in the cached configuration file.
2023-06-26 18:25:46 -07:00
Adam J. Stewart
09b4ed6c80 py-numpy: add v1.24.4 (#38555) 2023-06-26 18:28:13 -04:00
David Alexander
66f75407d1 Updates to symlinking for Windows (#34701)
* Support hardlinks/junctions on Windows systems without developer
  mode enabled
  * Generally, use of llnl.util.symlink.symlink is preferred over
    os.symlink since it handles this automatically
* Generally an error is now reported if a user attempts to create a
  symlink to a file that does not exist (this was previously allowed
  on Linux/Mac).
  * One exception to this: when Spack installs files from the source
    into their final prefix, dangling symlinks are allowed (on
    Linux/Mac - Windows does not allow this in any circumstance).
    The intent behind this is to avoid generating failures for
    installations on Linux/Mac that were succeeding before.
* Because Windows is strict about forbidding dangling symlinks,
  `traverse_tree` has been updated to skip creating symlinks if they
  would point to a file that is ignored. This check is not
  transitive (i.e., a symlink to a symlink to an ignored file would
  not be caught appropriately)
* Relocate function: resolve_link_target_relative_to_the_link
  (this is not otherwise modified)

Co-authored-by: jamessmillie <smillie@txcorp.com>
2023-06-26 13:38:14 -07:00
Manuela Kuhn
5db241c755 krb5: add missing findutils dependency (#38440)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-06-26 20:28:50 +02:00
Xavier Delaruelle
1dcc67535a modules: ignore more Modules variables in from_sourcing_file (#38455)
Update list of excluded variables in `from_sourcing_file` function to
cover all variables specific to Environment Modules or Lmod. Add
specifically variables relative to the definition of `module()`, `ml()`
and `_module_raw()` Bash functions.

Fixes #13504
2023-06-26 20:21:46 +02:00
Carson Woods
46fe1f48bc Adds new Qthreads package version (#38421)
* Add new versions of Qthreads
* Add version URLs explicitly as it has recently changed
* Use function to extrapolate version URL for older versions
* Fix url formatter
2023-06-26 09:48:47 -04:00
kjrstory
30201e3381 Openfoam: replace two boolean variants with multi-valued variant for precision option (#37736) 2023-06-26 15:43:27 +02:00
Martin Aumüller
501bb88de2 llvm: fix build against libstdc++ 13 (#38329)
llvm @13-15 is required for ispc, but fails to build with GCC 13.
14.0.6 and 15.0.7 built successfully with upstream patch, 13.0.1
still fails. Thus upstream patch is applied to 14 and 15 only.
2023-06-26 15:42:25 +02:00
Alex Richert
c5adb05433 ufs-utils: update urls, versions, and dependencies (#37255) 2023-06-26 15:41:38 +02:00
Tamara Dahlgren
8528106484 tests/heffte/tasmanian: convert to new stand-alone test process (#35750) 2023-06-26 15:10:55 +02:00
George Young
134dceb055 cromwell: add v85 (#38427)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-26 09:08:34 -04:00
Sergey Kosukhin
aa3744299b netcdf-c: apply patches (#38324)
* netcdf-c: fix building on macOS

* netcdf-c: add patch fixing multi-threaded HDF5 calls

* netcdf-c: update patch url
2023-06-26 15:04:12 +02:00
George Young
105ac0c377 mmseqs2: patching to support building with %gcc@13: (#38296)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-26 14:59:05 +02:00
Cameron Book
1949f67a71 scotch: add new variants + bison version min. (#37958) 2023-06-26 14:55:21 +02:00
Terry Cojean
0314071763 ginkgo: add version 1.6.0 (#38439) 2023-06-26 14:13:48 +02:00
Annop Wongwathanarat
6e13d7d917 acfl: remove version 23.04 (#38363) 2023-06-26 14:02:17 +02:00
Annop Wongwathanarat
2d4758bdd9 armpl-gcc: remove version 23.04 (#38362) 2023-06-26 14:01:43 +02:00
George Young
ff002316a8 py-python-lzo: add 1.15 (#38418)
* py-python-lzo: add 1.15

* Update package.py

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-26 07:42:39 -04:00
snehring
251282812b demuxlet: add new package (#38425) 2023-06-26 13:17:01 +02:00
SXS Bot
4ac43b5032 spectre: add v2023.06.19 (#38474)
Co-authored-by: sxs-bot <sxs-bot@users.noreply.github.com>
2023-06-26 13:07:39 +02:00
Tamara Dahlgren
05b6ac16bc tests/*mpi*: convert to new stand-alone test process (#35802) 2023-06-26 12:40:03 +02:00
Xavier Delaruelle
8164712264 Add raw attribute to env.set command (#38465)
Update `env.set` command and underlying `SetEnv` object to add the `raw`
boolean attribute. `raw` is optional and set to False by default. When
set to True, value format is skipped for object when generating
environment modifications.

With this change it is now possible to define environment variable
whose value contains variable reference syntax (like `{foo}` or `{}`)
that should be set as-is.

Fixes #29578
2023-06-26 11:55:57 +02:00
Wouter Deconinck
ce0b9ea8cf acts: ensure Python_EXECUTABLE uses ^python when +python (#38540)
By default, `find_package(Python)` searches from highest version to lowest version, identifying the highest version that satisfies the requirements. This means that `/usr/bin/python3.11` will be found before `$(spack location -i python)/bin/python3.10`, even when other packages have been built with the `python` in spack.

This ensures that the `python` dependency is explicitly the `python` version that is used.
2023-06-26 11:31:48 +02:00
Adam J. Stewart
c560053c39 py-scipy: add v1.11.0 (#38546)
Co-authored-by: adamjstewart <adamjstewart@users.noreply.github.com>
2023-06-26 11:30:06 +02:00
Fabien Bruneval
5b0ca6d287 MOLGW: add new package (#37878) 2023-06-26 11:12:03 +02:00
is-a-gamer
887d356e01 bzip2: add pkg-config file (#38355)
Co-authored-by: HongZhi He <a13041902330@outlook.com>
2023-06-26 05:02:23 -04:00
Tamara Dahlgren
95ca9dea89 libxml2: convert to new stand-alone test process (#37694) 2023-06-25 01:02:33 -04:00
Cyrus Harrison
cb23362b7f ascent: add optional occa dep (#38426)
Co-authored-by: cyrush <cyrush@users.noreply.github.com>
2023-06-24 23:32:34 -04:00
George Young
42c4a8b388 gmap-gsnap: updating to 2023-06-01 (#38428)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-24 16:46:37 +02:00
Thomas Madlener
cc1f403385 circe2: add new package (#38491) 2023-06-24 16:32:15 +02:00
snehring
b1d281f197 apptainer: add squashfuse dep (#38499) 2023-06-24 16:02:51 +02:00
Tamara Dahlgren
29a1c418b3 etsf-io: convert to new stand-alone test process (#35746) 2023-06-24 15:59:48 +02:00
Wouter Deconinck
36dd325187 gaudi: new versions 36.[11-14] (#38498) 2023-06-24 15:56:02 +02:00
Tamara Dahlgren
585e150816 hpctoolkit: convert to new stand-alone test process (#35752) 2023-06-24 15:44:14 +02:00
miheer vaidya
9a30ba1a4d clp and osi depend on pkgconfig (#31505)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2023-06-24 15:34:56 +02:00
David Huber
d5bb152165 GSI-ncdiag: add v1.1.0 and v1.1.1. (#38196)
Co-authored-by: [David Huber] <[david.huber@noaa.gov]>
2023-06-24 15:29:01 +02:00
Stephen Sachs
0c6d0541f0 Fix syntax to set default target in aws-pcluster pipelines (#38048)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-06-24 15:25:19 +02:00
Dennis Klein
7b977dc103 libzmq: Fix static assertion failure with gcc-13 (#38391) 2023-06-24 13:13:17 +02:00
Matthew Thompson
f98bfebce4 pfunit: fix the max_array_rank variant definition (#38528) 2023-06-24 11:01:21 +02:00
Kapil Arya
4907315079 DMTCP: add v3.0.0. (#38307) 2023-06-24 11:00:20 +02:00
Richard Berger
48168de1cc lammps: new verisons (#38532) 2023-06-24 10:49:18 +02:00
Gurkirat Singh
d99892e490 Fixes openmpi configure args for multinode execution on slurm (#38403)
Remove `--enable-mca-no-build=btl-uct` check for ucx spec
as it is already fixed in the openmpi open-mpi/ompi#6666
2023-06-24 10:40:43 +02:00
Chris Green
09d9b48957 range-v3: remove overbroad boost dependence (#38539)
Co-authored-by: greenc-FNAL <greenc-FNAL@users.noreply.github.com>
2023-06-24 10:25:39 +02:00
Stephen Hudson
62aa9d87ee libEnsemble: add v0.10.0 (#37954)
* libEnsemble: add v0.10.0

* Make new deps required

* Fixes to deps

* Update var/spack/repos/builtin/packages/py-libensemble/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Fix build, run

* Reorder required deps

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-23 15:16:53 -05:00
Manuela Kuhn
0470fe545f py-pytest: add 7.3.2 (#38522)
* py-pytest: add 7.3.2

* [@spackbot] updating style on behalf of manuelakuhn

* Swap py-importlib-metadata dependency order

* Restrict python version for older versions
2023-06-23 15:07:38 -05:00
mschouler
db8bf333d3 Add recipe for iterative-stats (#38039)
* Add recipe for iterative-stats

* Fix branch name and remove comment

* Add git link

* Add package maintainer

* Enforce multiple requested changes

* Update var/spack/repos/builtin/packages/py-iterative-stats/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Update checksum

* Fix openturns dependency specification

* Add python variant spec to openturns

---------

Co-authored-by: Marc Schouler <marc.schouler@inria.fr>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-23 15:07:04 -05:00
julian-zeidler
f73c8f2255 Added version 0.33 (#38534) 2023-06-23 14:17:38 -04:00
G-Ragghianti
42ed4d81b7 fix version dependency logic (#38535) 2023-06-23 11:08:56 -07:00
Harmen Stoppels
e76b039997 zlib-ng: add latest, default to drop in replacement of zlib (#37370) 2023-06-23 14:02:38 -04:00
Gurkirat Singh
b49d098e3f Add numa variant in ucx package (#38423) 2023-06-23 07:08:09 -04:00
Harmen Stoppels
cd67b2a1a9 spack buildcache sync (--manifest-glob <glob> | <src> <dest>) are mutually exclusive (#38533) 2023-06-23 12:20:48 +02:00
Manuela Kuhn
a076548bd4 py-pytz: add 2023.3 (#38525) 2023-06-22 23:03:28 -04:00
Juan Miguel Carceller
3d342ac69a py-qmtest: add patch for the removed bdist_wininst class (#38253)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2023-06-22 22:48:24 -04:00
Manuela Kuhn
88fc8ae591 py-python-gitlab: add 3.15.0 (#38524) 2023-06-22 22:43:15 -04:00
Paul R. C. Kent
ff6ac42812 Add 1606 (#38511) 2023-06-22 16:14:25 -07:00
snehring
c96f93b2a3 Emblmygff3 (#38515)
* py-bcbio-gff: adding new version 0.7.0

* emblmygff3: adding new package

* emblmygff3: adding py-setuptools dep
2023-06-22 16:50:11 -05:00
Alec Scott
cbe4a48291 rust: Add v1.70.0 and simplify package bootstrap (#38311)
* Add rust v1.70.0 and simplify package logic by moving bootstrap to dedicated package

* Fix formatting of rust-bootstrap package file

* Re-enable Rust as extendable

* Add nightly version to rust and rust-bootstrap

* Manually inject openssl certs into environment

* Add master and beta versions to rust

* Add additional documentation for using rust development releases

* Remove @AndrewGaspar as maintainer
2023-06-22 14:03:52 -07:00
Manuela Kuhn
ebd41134fe py-packaging: add 23.1 (#38417) 2023-06-22 16:29:49 -04:00
AMD Toolchain Support
77817a0f05 VASP package: Zen4 Support (#36800)
* zen4 support for vasp
* encourage openmp support in fftw/blas when +openmp
* enable gamma and non-collinear builds
2023-06-22 16:08:21 -04:00
Michael Kuhn
590d3ba6cf freefem: add missing dependencies (#38290)
Also remove the custom `autoreconf` method as it does not seem to be
necessary and potentially hides useful output provided by the default.
2023-06-22 11:48:00 -07:00
Manuela Kuhn
1e8988f11d py-notebook: add 6.5.4 (#38415)
* py-notebook: add 6.5.4

* [@spackbot] updating style on behalf of manuelakuhn

* Update var/spack/repos/builtin/packages/py-notebook/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Fix version of py-nbclassic dependency

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-22 12:14:38 -04:00
Ondřej Čertík
a889669cbc Add LFortran (#30901)
It installs the LFortran runtime library and
LFortran can compile codes to binaries. The interactive mode does not
work yet with LLVM > 11, that has to be fixed upstream.

Co-authored-by: Wileam Y. Phan <50928756+wyphan@users.noreply.github.com>
2023-06-22 09:51:29 -06:00
Manuela Kuhn
fde33e66be py-numexpr: add 2.8.4 (#38416) 2023-06-22 07:53:43 -04:00
mschouler
6314ddacf2 open turns: Add libxml2 dependency and increase version to v1.20 (#38038)
* Add libxml2 dependency and increase version to v1.20

* Update var/spack/repos/builtin/packages/openturns/package.py

Co-authored-by: Alec Scott <alec@bcs.sh>

* Add v19

* Add libxml2 variant

* Fix variant specification

---------

Co-authored-by: Marc Schouler <marc.schouler@inria.fr>
Co-authored-by: Alec Scott <alec@bcs.sh>
2023-06-22 06:27:59 -04:00
Manuela Kuhn
f935f36b21 py-platformdirs: add 3.5.3 (#38435)
* py-platformdirs: add 3.5.3

* py-typing-extensions: add 4.6.3
2023-06-22 05:54:17 -04:00
Manuela Kuhn
082934f73f py-prompt-toolkit: add 3.0.38 (#38472) 2023-06-22 04:04:23 -04:00
Manuela Kuhn
3e9e01e496 py-patsy: add 0.5.3 (#38433) 2023-06-22 04:04:00 -04:00
Wouter Deconinck
2abbfe719d qt: new version 5.15.10 (#38489)
No changes to the build system, no changes to `package.py` needed.

Changelog: https://github.com/qt/qtbase/compare/v5.15.9-lts-lgpl...v5.15.10-lts-lgpl

Main change taking up space:
- bundled 3rdparty/pcre2 updated from 10.39 to 10.40 (spack now includes 10.42, and we don't put specific version requirements in `package.py`)
2023-06-22 03:43:58 -04:00
Mikael Simberg
ace20c5d29 hpx: Add conflict with some GCC versions and +rocm due to valarray bug (#38297)
* hpx: Add conflict with some GCC versions and +rocm due to valarray bug

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103022

* remove conflict for %gcc@11.1.0 since there is none

---------

Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
2023-06-22 03:38:45 -04:00
Adam J. Stewart
f35fcee6be py-pyproj: add v3.6.0 (#38399) 2023-06-22 03:14:08 -04:00
Manuela Kuhn
103370d84a py-networkx: add 3.1 (#38377)
* py-networkx: add 3.1

* Update var/spack/repos/builtin/packages/py-networkx/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Add default variant

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-22 03:09:13 -04:00
Wouter Deconinck
6e47f1645f opencascade: typo in True (#38487)
Not sure why flake8 didn't catch this as an undefined name, e.g. https://www.flake8rules.com/rules/F823.html.
2023-06-22 02:39:20 -04:00
Seth R. Johnson
53eb6c46db Add VecGeom 1.2.3 and mark old versions as deprecated (#38483)
Co-authored-by: Ben Morgan <drbenmorgan@users.noreply.github.com>
2023-06-22 02:38:59 -04:00
miheer vaidya
00d769d644 add new package: daemonize (#38477) 2023-06-22 02:28:52 -04:00
Rémi Lacroix
b6b34aa0fe IQ-TREE: Add version 2.2.2.7 (#38481) 2023-06-22 02:24:13 -04:00
Seth R. Johnson
83b9196e78 celeritas: new version 0.3.0 (#38438) 2023-06-22 02:23:50 -04:00
Wouter Deconinck
ed76eab694 geant4: new version 11.1.2 (#38475)
No changes required to the geant4 package.py file.

Changes: https://gitlab.cern.ch/geant4/geant4/-/compare/v11.1.1...v11.1.2

Release notes: https://geant4.web.cern.ch/download/release-notes/notes-v11.1.2.txt

Co-authored-by: Ben Morgan <drbenmorgan@users.noreply.github.com>
2023-06-22 02:18:50 -04:00
Tamara Dahlgren
930b843885 tests/py-chainer: convert to new stand-alone test process (#38365)
* tests/py-chainer: convert to new stand-alone test process
* py-chainer: add skip_modules entry for onnx_chainer
2023-06-22 01:51:42 -04:00
Manuela Kuhn
f53c68e005 py-pycairo: add 1.24.0 (#38503)
* py-pycairo: add 1.24.0

* Change python dependency to 3.8

* Remove upper bound for python dependency

* Update var/spack/repos/builtin/packages/py-pycairo/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-21 16:47:35 -04:00
George Young
12a22eebc7 tetranscripts: new package @2.2.3 (#38485)
* tetranscripts: new package @2.2.3

* tidying up

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-21 15:43:48 -04:00
Matthieu Dorier
69eb15936c [tclap] Adds new versions to tclap package (#38508) 2023-06-21 15:34:22 -04:00
shanedsnyder
c69dea5465 darshan-runtime,darshan-util,py-darshan: add 3.4.3 releases (#38359)
* add darshan 3.4.3 releases

* darshan-runtime 3.4.3
* darshan-util 3.4.3
* py-darshan 3.4.3.0
  - add py-humanize as new dependency

* py-darshan has strict darshan-util version reqs

darshan-util version required is based on the first 3 parts of
the py-darshan version string

* remove support for python3.6

* py-humanize dependency for 3.4.3+ versions

* only enforce scipy dependency for 3.4.0.1

* drop optional lxml dependency

* drop matplotlib pinning

* importlib-resources not a dep in python-3.7+

* drop unnecessary numpy pin

* add build dep for pytest-runner

* fix typo in pytest-runner package name

* pip setuptools to match pydarsan setup.py

* spack style fix
2023-06-21 14:31:17 -05:00
miheer vaidya
3bd8c4df28 neovim: add v0.9.(0|1) (#38463) 2023-06-21 15:07:37 -04:00
Manuela Kuhn
02dc697831 py-prometheus-client: add 0.17.0 (#38471) 2023-06-21 13:34:04 -04:00
Manuela Kuhn
87cb39b860 py-gsutil: add 5.24, fix and add dependencies (#38450)
* py-gsutil: add 5.24, fix and add dependencies

* Update var/spack/repos/builtin/packages/py-httplib2/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Add httplib2@0.20.4 and pin it in py-gsutil

* Add py-cryptography conflict

* Update var/spack/repos/builtin/packages/py-httplib2/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* py-pyopenssl: fix py-cryptography conflict

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-21 13:33:42 -04:00
Erik Heeren
468138bb4f mpich: undefined variable dso_suffix (#37373)
* mpich: undefined variable dso_suffix

* mpich: formatting

---------

Co-authored-by: Nichols A. Romero <naromero77@users.noreply.github.com>
2023-06-21 11:12:05 -05:00
Adam J. Stewart
a8534b7345 py-lightly: add v1.4.8 (#38397)
* py-lightly: add v1.4.8

* Fix typo

* Update deps as well

* typing-extensions dep needed earlier

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

* Runtime dep on setuptools removed in master

---------

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>
2023-06-21 11:47:24 -04:00
Manuela Kuhn
8ba45b0b99 py-pygments: add 2.15.1 (#38505) 2023-06-21 10:33:03 -05:00
Manuela Kuhn
6ae358edd8 py-pydicom: add 2.4.1 (#38504) 2023-06-21 10:30:47 -05:00
Manuela Kuhn
5ce45e0cee py-psutil: add 5.9.5 (#38479)
* py-psutil: add 5.9.5

* Remove unneeded windows dependencies
2023-06-21 15:26:53 +00:00
George Young
b2901f1737 bulker: new package @0.7.3 (#38437)
* py-bulker: new package at 0.7.3

* bulker: renaming package

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-21 10:21:01 -05:00
Rocco Meli
6b552dedbc Add MDAnalysis and MDAnalysisTests to 2.5.0 (#37968)
* update mda and mdatests

* black

* Update var/spack/repos/builtin/packages/py-mdanalysis/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Update var/spack/repos/builtin/packages/py-mdanalysis/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* polish

* Update var/spack/repos/builtin/packages/py-mdanalysistests/package.py

* fixes

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-21 10:08:48 -05:00
Christian Mauch
6b3d2c535f py-tensorboard(-plugin-wit): remove unused patch files (#38360) 2023-06-21 10:08:12 -05:00
Adam J. Stewart
2727bd92d8 py-numpy: add v1.25.0 (#38461) 2023-06-21 10:03:50 -05:00
Martin Pokorny
ebbfc0363b kokkos-nvcc-wrapper: add new versions (#38446) 2023-06-20 21:38:30 -04:00
Tamara Dahlgren
1b6e1fc852 tests/superlu: convert to new stand-alone test process (#38404)
* superlu: convert to new stand-alone test process
* Bugfix/superlu: add BaseBuilder and move post-install work to it
2023-06-20 16:46:11 -07:00
Matthieu Dorier
1376ec4887 [mochi-margo] margo version 0.14.0 added (#38473) 2023-06-20 18:48:21 -04:00
Stephen Sachs
0eec7c5c53 [WRF] Always use compiler wrappers for FFLAGS/FCFLAGS (#38470)
`FFLAGS` and `FCFLAGS` are being ignored by WRF build system. Not only in version
`3.9.1.1`, but also `4.x`.

Also, I see no reason to explicitly add `-w` and `-O2` to compile lines when
using `gcc@10:`. Tested for version `3.9.1.1`, `4.2.2`, & `4.5.0`.

Tagging original authors of this part @MichaelLaufer and @giordano in case they
want to chime in.
2023-06-20 18:24:31 -04:00
Valentin Volkl
05dd240997 fastjet: add v3.4.1, update patch (#38467) 2023-06-20 18:16:37 -04:00
Erik Schnetter
fb16c81b6c mpiwrapper: New version 2.10.4 (#38448) 2023-06-20 18:16:15 -04:00
Erik Schnetter
7c3b33416f mpitrampoline: New version 5.3.1 (#38449) 2023-06-20 18:08:00 -04:00
snehring
6755b74d22 ncbi-rmblastn: switching urls from ftp to https (#38490) 2023-06-20 16:03:48 -04:00
George Young
d0e843ce03 ncbi-rmblastn: patching to support building with %gcc@13: (#38382)
* ncbi-rmblastn: patching to support building with %gcc@13:
* ncbi-rmblastn: patching to build with %gcc@13:

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-20 12:42:22 -07:00
George Young
37f6231f2a py-umi-tools: add 1.1.4, add py-pybktree dependency (#38394)
* py-umi-tools: add 1.1.4, add py-pybktree dependency

* remove python spec

* Remove `six` dependency

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-20 15:35:12 -04:00
snehring
d85f25a901 apptainer: adding version 1.1.9 (#38492) 2023-06-20 15:20:48 -04:00
Manuela Kuhn
2041b92d3a py-pybids: add 0.16.1 (#38480) 2023-06-20 11:22:24 -05:00
Valentin Volkl
f461069888 root: fix variant detection (#38436) 2023-06-20 08:47:49 -05:00
Manuela Kuhn
9eb3de85c5 py-pre-commit: add 3.3.3 (#38468)
* py-pre-commit: add 3.3.3

* Update var/spack/repos/builtin/packages/py-pre-commit/package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

---------

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-19 18:30:42 -04:00
Manuela Kuhn
92d970498a py-nodeenv: add 1.8.0 (#38383)
* py-nodeenv: add 1.8.0

* Remove python@3.7 restriction
2023-06-19 18:01:43 -04:00
Manuela Kuhn
bd5e99120d py-pkginfo: add 1.9.6 (#38434)
* py-pkginfo: add 1.9.6

* Remove py-setuptools as run dependency
2023-06-19 17:39:14 -04:00
Juan Miguel Carceller
a7e307bd81 gsl: set GSL_ROOT_DIR (#38464)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-06-19 16:37:37 -04:00
snehring
55152781cb repeatmasker: adding version 4.1.5 (#38445) 2023-06-19 11:13:27 -07:00
Manuela Kuhn
8ce0c7771c py-pooch: add 1.7.0 (#38466) 2023-06-19 12:43:19 -05:00
Wouter Deconinck
7e0dfa270f spdlog: patch for fmt::basic_runtime when ^fmt@10 (#38082) 2023-06-19 12:15:01 +02:00
Andrey Parfenov
7dc485d288 cc: Ensure that user-specified flags take precedence over others (#37376)
Spack flags supplied by users should supersede flags from package build systems and
other places in Spack.  However, Spack currently adds user-supplied flags to the 
beginning of the compile line, which means that in some cases build system flags will
supersede user-supplied ones.

The right place to add a flag to ensure it has highest precedence for the compiler really
depends on the type of flag.  For example, search paths like `-L` and `-I` are examined
in order, so adding them first is highest precedence.  Compilers take the *last* occurrence
of optimization flags like `-O2`, so those should be placed *after* other such flags.  Shim
libraries with `-l` should go *before* other libraries on the command line, so we want
user-supplied libs to go first, etc.

`lib/spack/env/cc` already knows how to split arguments into categories like `libs_list`,
`rpath_dirs_list`, etc., so we can leverage that functionality to merge user flags into
the arg list correctly.

The general rules for injected flags are:

1. All `-L`, `-I`, `-isystem`, `-l`, and `*-rpath` flags from `spack_flags_*` to appear
   before their regular counterparts.
2. All other flags ordered with the ones from flags after their regular counterparts,
   i.e. `other_flags` before `spack_flags_other_flags`

- [x] Generalize argument categorization into its own function in the `cc` shell script
- [x] Apply the same splitting logic to injected flags and flags from the original compile line.
- [x] Use the resulting flag lists to merge user- and build-system-supplied flags by category.
- [x] Add tests.

Signed-off-by: Andrey Parfenov <andrey.parfenov@intel.com>

Co-authored-by: iermolae <igor.ermolaev@intel.com>
2023-06-18 14:07:08 -07:00
simonleary-umass-edu
5c6c3b403b fix oneapi modules (#38400) 2023-06-18 07:17:19 -04:00
Morten Kristensen
242854f266 py-vermin: add latest version 1.5.2 (#38460)
* py-vermin: add latest version 1.5.2

* Removed obsolete dep and setuptools is only for build-time

- setuptools are not used as runtime
- py27 isn't strictly necessary
2023-06-18 03:52:58 -04:00
William Moses
e9406a7d9e Add latest enzyme release (#38442) 2023-06-17 03:12:14 -04:00
Greg Becker
0ac1c52d17 unparser: drop Python 2, fix testing bugs with newer Pythons (#38424)
The `unparser` that Spack uses for package hashing had several tweaks to ensure compatibility
with Python 2.7:
1. Currently, the unparser automatically moves `*` and `**` args to the end to preserve
   compatibility with `python@:3.4`
2. `print a, b, c` statements and single-tuple `print((a, b, c))` function calls were
   remapped to `print(a, b, c)` in the unparsed output for consistency across versions.

(1) is causing issues in our tests because a recent patch to the Python source code  
(https://github.com/python/cpython/pull/102953/files#diff-7972dffec6674d5f09410c71766ac6caacb95b9bccbf032061806ae304519c9bR813-R823) 
has a `**` arg before an named argument, and we round-trip the core python source code
as a test of our unparser.  This isn't actually a break with our consistent unpausing -- it's still
consistent, the python source just doesn't unparse to the same thing anymore. It does makes
it harder to test, so it's not worth maintaining the Python2-specific stuff anymore.

Since we only support `python@3.6:`, this PR removes (1) and (2) from the unparser, but keeps
one last tweak for unicode AST inconsistencies, as it's still needed for Python 3.5-3.7.

This fixes the CI error we've been seeing on `python@3.11.4` and `python@3.10.12`. Again, that
bug exists only in the test system and doesn't affect our canonical hashing of Python code.
2023-06-16 20:52:26 -04:00
Manuela Kuhn
a3c42715db py-aiohttp: add 3.8.4 (#38451) 2023-06-16 16:49:45 -04:00
Alec Scott
0f27188383 millepede: add v04-13-03 (#38141) 2023-06-16 11:12:01 -07:00
Greg Becker
99f3b9f064 show external status as [e] (#33792) 2023-06-16 18:22:28 +02:00
Axel Huebl
d1bc4c4ef1 WarpX 23.06 (#38303)
* WarpX 23.06

Update WarpX and related Python packages to the lastest releases.

WarpX 23.06 introduces multi-dimension support in a single package,
which will ease deployment in E4S et al. that can ship now a single,
full-feature module/package that is NOT incompatible with itself
anymore.

* e4s ci stacks: multiple specs for each dim variant no longer required

* [@spackbot] updating style on behalf of ax3l

* WarpX: Update CMake CLI and Test/Check

* Add Missing `build-directory`

* [@spackbot] updating style on behalf of ax3l

* Remove `build_directory` again

---------

Co-authored-by: eugeneswalker <eugenesunsetwalker@gmail.com>
Co-authored-by: ax3l <ax3l@users.noreply.github.com>
2023-06-16 06:47:59 -07:00
Gurkirat Singh
69a5c55702 docs: add quotes around some values in a YAML example (#38412) 2023-06-16 10:29:09 +02:00
Larry Knox
2972d5847c Remove experimental hdf5 versions 1.13.x and add hdf5 version 1.10.10. (#38013)
* Remove experimental hdf5 versions 1.13.x.
Upgrade to 1.14 or remove dependencies on hdf5 1.13.x.

* Revert change to netcdf-c/package.py.
2023-06-15 22:41:39 -05:00
George Young
1577eb9602 star: add 2.7.10 (#38197)
* star: add 2.7.10
* star: fix building for non-avx2 arch processors
* convert to MakefilePackage, second take at fixing for aarch64
* style

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-15 12:53:32 -07:00
George Young
2f97c6ead2 perl-gd: update to 2.77, update urls (#38413)
* perl-gd: update to 2.77, update urls

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-15 12:39:57 -07:00
markus-ferrell
1df4afb53f Enable build system guess tests on windows (#36971) 2023-06-15 11:40:09 -07:00
Adam J. Stewart
4991f0e484 MXNet: fix flag versions (#38402) 2023-06-15 11:34:21 -07:00
markus-ferrell
09fd7d68eb Windows testing: enable graph, mark, and info cmd tests (#36977) 2023-06-15 11:28:52 -07:00
Jacob King
2ace8a55c1 Create package.py file for NIMROD abstract accelerated infrastructure. (#38405)
Co-authored-by: jacobrking <jacobrking@users.noreply.github.com>
2023-06-15 11:24:55 -07:00
Manuela Kuhn
861acb9467 py-nibabel: add 5.1.0 (#38379) 2023-06-15 13:14:26 -05:00
Thomas Madlener
eea743de46 podio: Add py-tabulate as new run and test dependency (#38409) 2023-06-15 10:56:00 -07:00
George Young
e2b6e5a7ec py-numba: add 0.57.0, update dependency ranges (#38390)
* py-numba: add 0.57.0, update dependency ranges

* Update var/spack/repos/builtin/packages/py-numba/package.py

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/py-numba/package.py

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

* Update package.py

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>
2023-06-15 12:39:12 -05:00
Manuela Kuhn
2f2dc3695c py-datalad: add 0.18.4 (#37936) 2023-06-15 12:22:45 -05:00
Tamara Dahlgren
6eb5e57199 tests/py-horovod: convert to new stand-alone test process (#38366) 2023-06-15 12:17:09 -05:00
Tamara Dahlgren
9a047eb95f tests/py-libensemble: convert to new stand-alone test process (#38344) 2023-06-15 12:09:57 -05:00
Tamara Dahlgren
ef42fd7a2f tests/py-eccodes: convert to new stand-alone test process (#38346) 2023-06-15 11:58:00 -05:00
Manuela Kuhn
e642c2ea28 py-neurora: add 1.1.6.10 (#38378) 2023-06-15 11:14:28 -05:00
Massimiliano Culpo
f27d012e0c Add virtual information on DAG edges (#34821)
* DependencySpec: add virtuals attribute on edges

This works for both the new and the old concretizer. Also,
added type hints to involved functions.

* Improve virtual reconstruction from old format

* Reconstruct virtuals when reading from Cray manifest

* Reconstruct virtual information on test dependencies
2023-06-15 07:16:54 -07:00
Tamara Dahlgren
c638311796 test/dust: convert to new stand-alone test process (#38367) 2023-06-14 20:27:35 -07:00
Manuela Kuhn
2a02bea405 py-nbclient: add 0.8.0 (#38325) 2023-06-14 17:31:03 -05:00
Manuela Kuhn
219b42d991 py-nbconvert: add 7.4.0 (#38326)
* py-nbconvert: add 7.4.0

* Move historical dependencies after variant
2023-06-14 17:28:30 -05:00
Manuela Kuhn
c290ec1f62 py-docutils: re-add python@3.7 (#38336) 2023-06-14 17:19:27 -05:00
Satish Balay
e7ede86733 magma@master: add python dependency (#38341) 2023-06-14 17:15:40 -05:00
Thomas Madlener
e3e7609af4 edm4hep: Add version 0.9 (#38205) 2023-06-14 16:53:31 -04:00
Dennis Klein
49d7ebec36 fairmq: Add v1.6.0 (#38392) 2023-06-14 16:47:59 -04:00
Alec Scott
7c3d82d819 ltp: add v20230516 (#38138) 2023-06-14 16:27:27 -04:00
George Young
1c0fbec9ce subread: add 2.0.6, update download paths (#38200)
* subread: add 2.0.6, update download paths
* Update var/spack/repos/builtin/packages/subread/package.py

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2023-06-14 13:20:29 -07:00
kjrstory
ca4d60ae25 openradioss-starter,engine: new package (#38291)
* openradioss-starter,engine: new package
* openradioss-engine: change version name develop to main
* openradioss-starter: change version name develop to main
2023-06-14 13:04:03 -07:00
Alec Scott
dc571e20d6 freeipmi: add v1.6.9 (#38349) 2023-06-14 13:02:02 -07:00
Kim Liegeois
1485275d0c Add Binder spackage (#38371)
* Add Binder spackage
* Format binder recipe
* Format binder recipe
2023-06-14 12:41:35 -07:00
pabloaledo
1afbf72037 add bioconductor-ebseq (#38380)
* add buiconductor-ebseq
  Signed-off-by: Pablo <pablo.aledo@seqera.io>

---------

Signed-off-by: Pablo <pablo.aledo@seqera.io>
2023-06-14 12:40:57 -07:00
Rémi Lacroix
407fd80f95 ctffind: Add a patch to fix incorrect return types. (#38085)
Prevent the code from crashing (cf. https://grigoriefflab.umassmed.edu/comment/1696#comment-1696).
2023-06-14 12:29:41 -07:00
Tamara Dahlgren
62525d9076 dsqss: convert to new stand-alone test process (#38372) 2023-06-14 11:54:47 -07:00
Alec Scott
c2371263d1 lastz: add v1.04.22 (#38388)
* lastz: add v1.04.22

* Fix formatting of versions to include extra space
2023-06-14 10:05:45 -07:00
Alec Scott
5a870182ec ipopt: add v3.14.9 (#38387) 2023-06-14 10:04:54 -07:00
Alec Scott
e33ad83256 imath: add v3.1.9 (#38386) 2023-06-14 10:03:41 -07:00
Alec Scott
0352a1df5d imagemagick: add v7.1.1-11 (#38385) 2023-06-14 10:02:36 -07:00
Alec Scott
ade44bce62 cgal: add v5.5.2 (#38384) 2023-06-14 10:01:33 -07:00
Mark W. Krentel
ddb29ebc34 intel-xed: add version 2023.06.07 (#38373)
Add version 2023.06.07, update python to 3.7.
2023-06-14 09:46:53 -07:00
Mark W. Krentel
19a62630e5 hpcviewer: add version 2023.05 (#38374) 2023-06-14 09:45:21 -07:00
Alec Scott
5626802aa0 cloc: add v1.96.1 (#38348) 2023-06-14 12:28:08 -04:00
kwryankrattiger
f68063afbc DaV: Drop propagation of HDF5 to darshan (#38361)
Darshan Runtime does not properly link symols for HDF5 when using shared
libraries.
2023-06-14 11:02:18 -05:00
Alec Scott
8103d019d6 hbase: add v2.5.4 (#38353) 2023-06-14 11:47:53 -04:00
Alec Scott
ce89cdd9d7 fzf: add v0.41.1 (#38351) 2023-06-14 11:38:02 -04:00
Alec Scott
20d9b356f0 hashcat: add v6.2.6 (#38352) 2023-06-14 11:32:56 -04:00
Alec Scott
3401438a3a hyperfine: add v1.17.0 (#38354) 2023-06-14 11:23:20 -04:00
Alec Scott
dcf1999d22 ftxui: add v4.1.1 (#38350) 2023-06-14 11:16:13 -04:00
snehring
9e3c3ae298 Repeatmodeler 2.0.4 (#38337)
* perl-devel-size: adding new package
* repeatmodeler: adding new version 2.0.4
* perl-devel-size: adding proper description
2023-06-14 11:10:50 -04:00
Tamara Dahlgren
40d6b84b4d dssp: convert to new stand-alone test process (#38368) 2023-06-14 07:27:49 -07:00
Xavier Delaruelle
2db09f27af modules: use depends-on to autoload module with Lmod on Tcl (#38347)
Update Tcl modulefile template to use the `depends-on` command to
autoload modules if Lmod is the current module tool.

Autoloading modules with `module load` command in Tcl modulefile does
not work well for Lmod at some extend. An attempt to unload then load
designated module is performed each time such command is encountered. It
may lead to a load storm that may not end correctly with large number of
module dependencies.

`depends-on` command should be used for Lmod instead of `module load`,
as it checks if module is already loaded, and does not attempt to reload
this module.

Lua modulefile template already uses `depends_on` command to autoload
dependencies. Thus it is already considered that to use Lmod with Spack,
it must support `depends_on` command (version 7.6+).

Environment Modules copes well with `module load` command to autoload
dependencies (version 3.2+). `depends-on` command is supported starting
version 5.1 (as an alias of `prereq-all` command) which was relased last
year.

This change introduces a test to determine if current module tool that
evaluates modulefile is Lmod. If so, autoload dependencies are defined
with `depends-on` command. Otherwise `module load` command is used.

Test is based on `LMOD_VERSION_MAJOR` environment variable, which is set
by Lmod starting version 5.1.

Fixes #36764
2023-06-14 15:35:53 +02:00
dependabot[bot]
6979d6a96f build(deps): bump python-levenshtein in /lib/spack/docs (#38339)
Bumps [python-levenshtein](https://github.com/maxbachmann/python-Levenshtein) from 0.21.0 to 0.21.1.
- [Release notes](https://github.com/maxbachmann/python-Levenshtein/releases)
- [Changelog](https://github.com/maxbachmann/python-Levenshtein/blob/main/HISTORY.md)
- [Commits](https://github.com/maxbachmann/python-Levenshtein/compare/v0.21.0...v0.21.1)

---
updated-dependencies:
- dependency-name: python-levenshtein
  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-06-14 13:03:15 +02:00
dependabot[bot]
deffd2acc9 build(deps): bump docker/build-push-action from 4.1.0 to 4.1.1 (#38369)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](44ea916f6c...2eb1c1961a)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  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-06-14 09:48:57 +02:00
dependabot[bot]
988f71f434 build(deps): bump docker/setup-buildx-action from 2.6.0 to 2.7.0 (#38370)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.6.0 to 2.7.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](6a58db7e0d...ecf95283f0)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  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-06-14 09:36:41 +02:00
kjrstory
4fe76f973a SU2: add versions up to 7.5.1, update dependencies (#37767)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2023-06-13 18:33:10 -04:00
Raffaele Solcà
8e4e6ad529 add DLA-Future package (#38224) 2023-06-13 18:03:13 -04:00
Edoardo Aprà
3586a2dbe3 NWChem: fix fftw3 variant + patch (#38250) 2023-06-13 22:43:39 +02:00
Dan Lipsa
4648939043 Windows bugfix: path-to-URL conversion (#37827)
When interpreting local paths as relative URL endpoints, they were
formatted as Windows paths on Windows (i.e. with '\'). URLs should
always be POSIX-style.
2023-06-13 10:08:09 -07:00
Xavier Delaruelle
746eaaf01a modules: append trailing delimiter to MANPATH when set (#36678)
Update modulefile templates to append a trailing delimiter to MANPATH
environment variable, if the modulefile sets it.

With a trailing delimiter at ends of MANPATH's value, man will search
the system man pages after searching the specific paths set.

Using append-path/append_path to add this element, the module tool
ensures it is appended only once. When modulefile is unloaded, the
number of append attempt is decreased, thus the trailing delimiter is
removed only if this number equals 0.

Disclaimer: no path element should be appended to MANPATH by generated
modulefiles. It should always be prepended to ensure this variable's
value ends with the trailing delimiter.

Fixes #11355.
2023-06-13 10:29:11 +02:00
Alberto Sartori
bd2f78ae9a justbuild: bump version 1.1.2 (#38320) 2023-06-12 21:34:38 -04:00
Alec Scott
a4ebe01dec curl: add v8.1.2 (#38332) 2023-06-12 19:34:24 -04:00
Alex Richert
94e9e18558 Update sp package (#38208) 2023-06-12 17:51:57 -04:00
Alec Scott
d2e0ac4d1f cpp-httplib: add v0.12.5 (#38331) 2023-06-12 14:51:11 -07:00
Alec Scott
36321fef1c direnv: add v2.32.3 (#38333) 2023-06-12 14:48:06 -07:00
Alec Scott
e879877878 etcd: add v3.5.9 (#38334) 2023-06-12 14:46:43 -07:00
Alec Scott
f0bce3eb25 fastp: add v0.23.4 (#38335) 2023-06-12 14:45:45 -07:00
Wouter Deconinck
316bfd8b7d opencascade: new variants (#35345)
* opencascade: new variants

OpenCascade has several major modules and not every
application needs all of them. This adds variants for
the various modules.

It also uodatws the 3rdparty dependency treatment.

* [@spackbot] updating style on behalf of wdconinc

* Update var/spack/repos/builtin/packages/opencascade/package.py

* opencascade: remove variant foundation_classes (always true)

* [@spackbot] updating style on behalf of wdconinc

* Update var/spack/repos/builtin/packages/opencascade/package.py

---------

Co-authored-by: wdconinc <wdconinc@users.noreply.github.com>
2023-06-12 11:56:55 -05:00
Jerome Soumagne
92593fecd5 mercury: add v2.3.0 (#38279)
* fix Boost dependency

* fix testing and move psm2/sockets as unsupported

* fix style to separate maintainers/tags/version
2023-06-12 08:51:22 -07:00
MatthewLieber
8db5fecdf5 mvapich2: add hwloc_graphics variant (#38028)
Co-authored-by: Matthew Lieber <lieber.31@osu.edu>
2023-06-12 17:25:10 +02:00
Niclas Jansson
eee696f320 neko: add v0.6.0 and fixed rocm package recipe (#38024) 2023-06-12 17:17:12 +02:00
willdunklin
8689cf392f mochi-margo: correct patch versions (#38087) 2023-06-12 17:13:52 +02:00
Bruno Turcksin
15d4cce2eb Add new Kokkos release (#38049) 2023-06-12 17:08:51 +02:00
Peter Scheibel
45fbb82d1a pip is a pythonextension not a pythonpackage, and it turns out we werent doing our external surgery on things that inherited pythonextension (#38186) 2023-06-12 17:07:28 +02:00
Adam J. Stewart
2861c89b89 Deprecate R packages for spatial analysis (#38158)
* Deprecate R packages for spatial analysis

* [@spackbot] updating style on behalf of adamjstewart

---------

Co-authored-by: adamjstewart <adamjstewart@users.noreply.github.com>
2023-06-12 15:55:40 +02:00
Alec Scott
135bfeeb27 libtlx: add v0.6.1 (#38134) 2023-06-12 15:54:50 +02:00
Alec Scott
8fa9c66a7d ccache: add v4.8.1 (#38114) 2023-06-12 15:54:27 +02:00
snehring
5e6174cbe2 cdhit: add missing perl dep, patch shebangs (#38179) 2023-06-12 15:51:59 +02:00
MichaelLaufer
b4ad883b0d wrf: add v4.5.0 (#37618) 2023-06-12 15:48:54 +02:00
Juan Miguel Carceller
a681111a23 whizard: add tirpc/lib to the link flags (#38050)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2023-06-12 15:24:27 +02:00
Manuela Kuhn
d2436afb66 gdb: fix debuginfod for version 10 (#38058) 2023-06-12 15:20:45 +02:00
Martin Pokorny
e43444cbb6 kokkos: fix c++20 constraint (#37555) 2023-06-12 15:07:03 +02:00
nkgh77
8c0d947114 FrontISTR: relax the requirement on Trillinos (#38321) 2023-06-12 15:02:21 +02:00
Thomas Madlener
5ba4a2b83a podio: bump minimal version of catch2 (#38255) 2023-06-12 08:47:48 -04:00
Harmen Stoppels
da45073ef9 buildcache: remove deprecated api (#37246)
The API was deprecated in v0.20 and is slated for removal in v0.21
2023-06-12 14:33:26 +02:00
kwryankrattiger
61e17fb36d DaV: Use VTKm for all build configurations of ParaView (#38184) 2023-06-12 14:25:50 +02:00
Wouter Deconinck
9f13a90dd2 superlu: new version 6.0.0 (#38262)
No changes to build system required. Changelog: https://github.com/xiaoyeli/superlu/compare/v5.3.0...v6.0.0

Since this new version adds "64-bit indexing support", and since at least one dependent package (`armadillo`) requires "32-bit integers" (faa6cbf895), the previous version remains preferred.

* [@spackbot] updating style on behalf of wdconinc

---------

Co-authored-by: wdconinc <wdconinc@users.noreply.github.com>
2023-06-12 14:23:42 +02:00
Juan Miguel Carceller
ef4b35ea63 gaudi: remove the py-qmtest dependency (#38274)
Co-authored-by: jmcarcell <jmcarcell@users.noreply.github.com>
2023-06-12 14:22:21 +02:00
George Young
66187c8a6e orthofinder: add 2.5.5, add variants (#38298)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-12 14:13:15 +02:00
Massimiliano Culpo
c8d95512fc bootstrap: add minimum versions required for flake8 and pytest (#38322) 2023-06-12 12:29:35 +02:00
George Young
c74fa648b9 fastq-screen: add 0.15.3, add variants (#38288)
Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-12 10:37:51 +02:00
snehring
4cc5e9cac6 ltr-retriever 2.9.4 (#38300) 2023-06-12 10:05:44 +02:00
snehring
41345d18f9 perl-libwww-perl: adding perl-clone dependency (#38301) 2023-06-12 10:04:29 +02:00
Alec Scott
0dd1316b68 alglib: add v4.00.0 (#38313) 2023-06-12 09:46:24 +02:00
Alec Scott
d8cc185e22 bismark: add v0.24.1 (#38315) 2023-06-12 09:45:53 +02:00
Alec Scott
061051270c blogbench: add v1.2 (#38316) 2023-06-12 09:45:42 +02:00
Alec Scott
61445159db consul: add v1.15.3 (#38317) 2023-06-12 09:45:30 +02:00
Christopher Christofi
7fa3c7f0fa Fix typo in example code block (#38318) 2023-06-11 22:12:36 -04:00
Manuela Kuhn
9c0fe30f42 py-mypy: add 1.3.0 (#38286)
* py-mypy: add 1.3.0

* Remove redundant py-typed-ast dependency

* Read python@3.7 dep
2023-06-11 15:22:55 -04:00
George Young
d00010819f py-deeptools: add 3.5.2, update dependency versions (#38287)
* py-deeptools: add 3.5.2, update dependency versions

* Update var/spack/repos/builtin/packages/py-deeptools/package.py

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

* Update var/spack/repos/builtin/packages/py-deeptools/package.py

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>

* Rearranging dependencies to match setup.py

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>
2023-06-11 15:17:52 -04:00
Manuela Kuhn
248b05b32a py-jedi: add 0.18.2 (#38177)
* py-jedi: add 0.18.2

* Add setuptools as run dependency
2023-06-11 15:12:56 -04:00
dependabot[bot]
8232e934e9 build(deps): bump docker/login-action from 2.1.0 to 2.2.0 (#38241)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](f4ef78c080...465a07811f)

---
updated-dependencies:
- dependency-name: docker/login-action
  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-06-11 13:36:31 -05:00
dependabot[bot]
9d005839af build(deps): bump docker/setup-buildx-action from 2.5.0 to 2.6.0 (#38242)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](4b4e9c3e2d...6a58db7e0d)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  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-06-11 13:36:02 -05:00
dependabot[bot]
a7e5c73608 build(deps): bump docker/setup-qemu-action from 2.1.0 to 2.2.0 (#38243)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](e81a89b173...2b82ce82d5)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  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-06-11 13:35:42 -05:00
dependabot[bot]
7896625919 build(deps): bump urllib3 from 2.0.2 to 2.0.3 in /lib/spack/docs (#38244)
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](https://github.com/urllib3/urllib3/compare/2.0.2...2.0.3)

---
updated-dependencies:
- dependency-name: urllib3
  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-06-11 13:35:22 -05:00
dependabot[bot]
fb43cb8166 build(deps): bump sphinx-rtd-theme in /lib/spack/docs (#38245)
Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 1.2.1 to 1.2.2.
- [Changelog](https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst)
- [Commits](https://github.com/readthedocs/sphinx_rtd_theme/compare/1.2.1...1.2.2)

---
updated-dependencies:
- dependency-name: sphinx-rtd-theme
  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-06-11 13:35:03 -05:00
dependabot[bot]
28f68e5d11 build(deps): bump docker/build-push-action from 4.0.0 to 4.1.0 (#38306)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](3b5e8027fc...44ea916f6c)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  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-06-11 13:34:44 -05:00
dependabot[bot]
1199eeed0b build(deps): bump docker/build-push-action from 4.0.0 to 4.1.0 (#38306)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](3b5e8027fc...44ea916f6c)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  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-06-11 13:34:33 -05:00
Manuela Kuhn
8ffeb4900b py-multidict: add 6.0.4 (#38284) 2023-06-11 12:03:21 -05:00
Manuela Kuhn
456550da3f py-mne: add 1.4.2 (#38228) 2023-06-11 11:52:01 -05:00
Olivier Cessenat
b2676fe2dd Gxsview new version 2023.05.29 (#38310)
* netpbm: new version 10.73.43

* gxsview: new version 2023.05.29
2023-06-11 09:48:04 -07:00
Jen Herting
8561ec6249 [py-spacy-legacy] New package (#38276) 2023-06-11 11:45:23 -05:00
Jen Herting
5b775d82ac [py-spacy-loggers] new package (#38275) 2023-06-11 11:44:19 -05:00
Jen Herting
b43088cc16 [py-langcodes] new package (#38273) 2023-06-11 11:43:16 -05:00
Manuela Kuhn
237eab136a py-nbclassic: add 1.0.0 and py-notebook-shim: add 0.2.3 (#38289) 2023-06-11 11:36:38 -05:00
Marie Houillon
ffffa2794b New version for openCARP packages, v13.0 (#37940)
* New version for openCARP packages

* Update carputils dependencies

* Update types of openCARP dependencies

* Add type "run" to setuptools dependency

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Add package py-common as carputils dependency

* Add setuptools dependency for py-common

* Remove spaces on blank line

* Restrict type of dependency setuptools to "build"

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

---------

Co-authored-by: openCARP consortium <info@opencarp.org>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2023-06-11 11:25:41 -05:00
George Young
433b44403f py-pybktree: new package (#38209)
* py-pykbtree: new package

* py-pybktree: new package

---------

Co-authored-by: LMS Bioinformatics <bioinformatics@lms.mrc.ac.uk>
2023-06-11 11:16:33 -05:00
Manuela Kuhn
fa2e1c0653 py-pandas: exchange import_modules with skip_modules (#38227) 2023-06-11 11:14:56 -05:00
Manuela Kuhn
00257f6824 py-more-itertools: add 9.1.0 (#38229) 2023-06-11 11:14:43 -05:00
kjrstory
3b8366f3d3 slurm: add new version(23.02.2, 22.05.9) (#38285) 2023-06-10 18:48:48 -07:00
dependabot[bot]
a73f511404 build(deps): bump actions/checkout from 3.5.2 to 3.5.3 (#38305)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e5e7e5ab8...c85c95e3d7)

---
updated-dependencies:
- dependency-name: actions/checkout
  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-06-10 18:45:37 -07:00
Vanessasaurus
c823e01baf Automated deployment to update package flux-core 2023-06-10 (#38308)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2023-06-10 18:30:10 -07:00
827 changed files with 12555 additions and 9554 deletions

View File

@@ -17,9 +17,12 @@ concurrency:
jobs:
# Run audits on all the packages in the built-in repository
package-audits:
runs-on: ubuntu-latest
runs-on: ${{ matrix.operating_system }}
strategy:
matrix:
operating_system: ["ubuntu-latest", "macos-latest"]
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
with:
python-version: ${{inputs.python_version}}
@@ -41,4 +44,4 @@ jobs:
- uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # @v2.1.0
if: ${{ inputs.with_coverage == 'true' }}
with:
flags: unittests,linux,audits
flags: unittests,audits

View File

@@ -24,7 +24,7 @@ jobs:
make patch unzip which xz python3 python3-devel tree \
cmake bison bison-devel libstdc++-static
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup non-root user
@@ -62,7 +62,7 @@ jobs:
make patch unzip xz-utils python3 python3-dev tree \
cmake bison
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup non-root user
@@ -99,7 +99,7 @@ jobs:
bzip2 curl file g++ gcc gfortran git gnupg2 gzip \
make patch unzip xz-utils python3 python3-dev tree
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup non-root user
@@ -133,7 +133,7 @@ jobs:
make patch unzip which xz python3 python3-devel tree \
cmake bison
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup repo
@@ -158,7 +158,7 @@ jobs:
run: |
brew install cmake bison@2.7 tree
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
- name: Bootstrap clingo
run: |
source share/spack/setup-env.sh
@@ -179,7 +179,7 @@ jobs:
run: |
brew install tree
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
- name: Bootstrap clingo
run: |
set -ex
@@ -204,7 +204,7 @@ jobs:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup repo
@@ -247,7 +247,7 @@ jobs:
bzip2 curl file g++ gcc patchelf gfortran git gzip \
make patch unzip xz-utils python3 python3-dev tree
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup non-root user
@@ -283,7 +283,7 @@ jobs:
make patch unzip xz-utils python3 python3-dev tree \
gawk
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- name: Setup non-root user
@@ -316,7 +316,7 @@ jobs:
# Remove GnuPG since we want to bootstrap it
sudo rm -rf /usr/local/bin/gpg
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
- name: Bootstrap GnuPG
run: |
source share/spack/setup-env.sh
@@ -333,7 +333,7 @@ jobs:
# Remove GnuPG since we want to bootstrap it
sudo rm -rf /usr/local/bin/gpg
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
- name: Bootstrap GnuPG
run: |
source share/spack/setup-env.sh

View File

@@ -56,7 +56,7 @@ jobs:
if: github.repository == 'spack/spack'
steps:
- name: Checkout
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
- name: Set Container Tag Normal (Nightly)
run: |
@@ -92,13 +92,13 @@ jobs:
path: dockerfiles
- name: Set up QEMU
uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # @v1
uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # @v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # @v1
uses: docker/setup-buildx-action@4c0219f9ac95b02789c1075625400b2acbff50b1 # @v1
- name: Log in to GitHub Container Registry
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # @v1
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -106,13 +106,13 @@ jobs:
- name: Log in to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # @v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build & Deploy ${{ matrix.dockerfile[0] }}
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 # @v2
uses: docker/build-push-action@2eb1c1961a95fc15694676618e422e8ba1d63825 # @v2
with:
context: dockerfiles/${{ matrix.dockerfile[0] }}
platforms: ${{ matrix.dockerfile[1] }}

View File

@@ -35,7 +35,7 @@ jobs:
core: ${{ steps.filter.outputs.core }}
packages: ${{ steps.filter.outputs.packages }}
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
if: ${{ github.event_name == 'push' }}
with:
fetch-depth: 0

View File

@@ -14,7 +14,7 @@ jobs:
build-paraview-deps:
runs-on: windows-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0

View File

@@ -47,7 +47,7 @@ jobs:
on_develop: false
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
@@ -94,7 +94,7 @@ jobs:
shell:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
@@ -133,7 +133,7 @@ jobs:
dnf install -y \
bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
make patch tcl unzip which xz
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
- name: Setup repo and non-root user
run: |
git --version
@@ -152,7 +152,7 @@ jobs:
clingo-cffi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
@@ -186,7 +186,7 @@ jobs:
matrix:
python-version: ["3.10"]
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2

View File

@@ -18,7 +18,7 @@ jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
with:
python-version: '3.11'
@@ -35,7 +35,7 @@ jobs:
style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0 # @v2
@@ -68,7 +68,7 @@ jobs:
dnf install -y \
bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \
make patch tcl unzip which xz
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # @v2
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # @v2
- name: Setup repo and non-root user
run: |
git --version
@@ -81,6 +81,7 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
source share/spack/setup-env.sh
spack debug report
spack -d bootstrap now --dev
spack style -t black
spack unit-test -V

View File

@@ -15,7 +15,7 @@ jobs:
unit-tests:
runs-on: windows-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
@@ -39,7 +39,7 @@ jobs:
unit-tests-cmd:
runs-on: windows-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0
@@ -63,7 +63,7 @@ jobs:
build-abseil:
runs-on: windows-latest
steps:
- uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
- uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9
with:
fetch-depth: 0
- uses: actions/setup-python@bd6b4b6205c4dbad673328db7b31b7fab9e241c0

View File

@@ -1,3 +1,21 @@
# v0.20.1 (2023-07-10)
## Spack Bugfixes
- Spec removed from an environment where not actually removed if `--force` was not given (#37877)
- Speed-up module file generation (#37739)
- Hotfix for a few recipes that treat CMake as a link dependency (#35816)
- Fix re-running stand-alone test a second time, which was getting a trailing spurious failure (#37840)
- Fixed reading JSON manifest on Cray, reporting non-concrete specs (#37909)
- Fixed a few bugs when generating Dockerfiles from Spack (#37766,#37769)
- Fixed a few long-standing bugs when generating module files (#36678,#38347,#38465,#38455)
- Fixed issues with building Python extensions using an external Python (#38186)
- Fixed compiler removal from command line (#38057)
- Show external status as [e] (#33792)
- Backported `archspec` fixes (#37793)
- Improved a few error messages (#37791)
# v0.20.0 (2023-05-21)
`v0.20.0` is a major feature release.

View File

@@ -25,8 +25,6 @@ exit 1
# Line above is a shell no-op, and ends a python multi-line comment.
# The code above runs this file with our preferred python interpreter.
from __future__ import print_function
import os
import os.path
import sys

View File

@@ -214,7 +214,7 @@ goto :end_switch
if defined _sp_args (
if NOT "%_sp_args%"=="%_sp_args:--help=%" (
goto :default_case
) else if NOT "%_sp_args%"=="%_sp_args: -h=%" (
) else if NOT "%_sp_args%"=="%_sp_args:-h=%" (
goto :default_case
) else if NOT "%_sp_args%"=="%_sp_args:--bat=%" (
goto :default_case

132
bin/spack.ps1 Normal file
View File

@@ -0,0 +1,132 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
# #######################################################################
function Compare-CommonArgs {
$CMDArgs = $args[0]
# These aruments take precedence and call for no futher parsing of arguments
# invoke actual Spack entrypoint with that context and exit after
"--help", "-h", "--version", "-V" | ForEach-Object {
$arg_opt = $_
if(($CMDArgs) -and ([bool]($CMDArgs.Where({$_ -eq $arg_opt})))) {
return $true
}
}
return $false
}
function Read-SpackArgs {
$SpackCMD_params = @()
$SpackSubCommand = $NULL
$SpackSubCommandArgs = @()
$args_ = $args[0]
$args_ | ForEach-Object {
if (!$SpackSubCommand) {
if($_.SubString(0,1) -eq "-")
{
$SpackCMD_params += $_
}
else{
$SpackSubCommand = $_
}
}
else{
$SpackSubCommandArgs += $_
}
}
return $SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs
}
function Invoke-SpackCD {
if (Compare-CommonArgs $SpackSubCommandArgs) {
python $Env:SPACK_ROOT/bin/spack cd -h
}
else {
$LOC = $(python $Env:SPACK_ROOT/bin/spack location $SpackSubCommandArgs)
if (($NULL -ne $LOC)){
if ( Test-Path -Path $LOC){
Set-Location $LOC
}
else{
exit 1
}
}
else {
exit 1
}
}
}
function Invoke-SpackEnv {
if (Compare-CommonArgs $SpackSubCommandArgs[0]) {
python $Env:SPACK_ROOT/bin/spack env -h
}
else {
$SubCommandSubCommand = $SpackSubCommandArgs[0]
$SubCommandSubCommandArgs = $SpackSubCommandArgs[1..$SpackSubCommandArgs.Count]
switch ($SubCommandSubCommand) {
"activate" {
if (Compare-CommonArgs $SubCommandSubCommandArgs) {
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
}
elseif ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
}
elseif (!$SubCommandSubCommandArgs) {
python $Env:SPACK_ROOT/bin/spack env activate $SubCommandSubCommandArgs
}
else {
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params env activate "--pwsh" $SubCommandSubCommandArgs)
$ExecutionContext.InvokeCommand($SpackEnv)
}
}
"deactivate" {
if ([bool]($SubCommandSubCommandArgs.Where({$_ -eq "--pwsh"}))) {
python $Env:SPACK_ROOT/bin/spack env deactivate $SubCommandSubCommandArgs
}
elseif($SubCommandSubCommandArgs) {
python $Env:SPACK_ROOT/bin/spack env deactivate -h
}
else {
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params env deactivate --pwsh)
$ExecutionContext.InvokeCommand($SpackEnv)
}
}
default {python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
}
}
}
function Invoke-SpackLoad {
if (Compare-CommonArgs $SpackSubCommandArgs) {
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
}
elseif ([bool]($SpackSubCommandArgs.Where({($_ -eq "--pwsh") -or ($_ -eq "--list")}))) {
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
}
else {
$SpackEnv = $(python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand "--pwsh" $SpackSubCommandArgs)
$ExecutionContext.InvokeCommand($SpackEnv)
}
}
$SpackCMD_params, $SpackSubCommand, $SpackSubCommandArgs = Read-SpackArgs $args
if (Compare-CommonArgs $SpackCMD_params) {
python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs
exit $LASTEXITCODE
}
# Process Spack commands with special conditions
# all other commands are piped directly to Spack
switch($SpackSubCommand)
{
"cd" {Invoke-SpackCD}
"env" {Invoke-SpackEnv}
"load" {Invoke-SpackLoad}
"unload" {Invoke-SpackLoad}
default {python $Env:SPACK_ROOT/bin/spack $SpackCMD_params $SpackSubCommand $SpackSubCommandArgs}
}

View File

@@ -216,10 +216,11 @@ config:
# manipulation by unprivileged user (e.g. AFS)
allow_sgid: true
# Whether to set the terminal title to display status information during
# building and installing packages. This gives information about Spack's
# current progress as well as the current and total number of packages.
terminal_title: false
# Whether to show status information during building and installing packages.
# This gives information about Spack's current progress as well as the current
# and total number of packages. Information is shown both in the terminal
# title and inline.
install_status: true
# Number of seconds a buildcache's index.json is cached locally before probing
# for updates, within a single Spack invocation. Defaults to 10 minutes.

View File

@@ -1,2 +1,4 @@
mirrors:
spack-public: https://mirror.spack.io
spack-public:
binary: false
url: https://mirror.spack.io

View File

@@ -76,6 +76,53 @@ To build with with ``icx``, do ::
spack install patchelf%oneapi
Using oneAPI Spack environment
-------------------------------
In this example, we build lammps with ``icx`` using Spack environment for oneAPI packages created by Intel. The
compilers are installed with Spack like in example above.
Install the oneAPI compilers::
spack install intel-oneapi-compilers
Add the compilers to your ``compilers.yaml`` so Spack can use them::
spack compiler add `spack location -i intel-oneapi-compilers`/compiler/latest/linux/bin/intel64
spack compiler add `spack location -i intel-oneapi-compilers`/compiler/latest/linux/bin
Verify that the compilers are available::
spack compiler list
Clone `spack-configs <https://github.com/spack/spack-configs>`_ repo and activate Intel oneAPI CPU environment::
git clone https://github.com/spack/spack-configs
spack env activate spack-configs/INTEL/CPU
spack concretize -f
`Intel oneAPI CPU environment <https://github.com/spack/spack-configs/blob/main/INTEL/CPU/spack.yaml>`_ contains applications tested and validated by Intel, this list is constantly extended. And currently it supports:
- `GROMACS <https://www.gromacs.org/>`_
- `HPCG <https://www.hpcg-benchmark.org/>`_
- `HPL <https://netlib.org/benchmark/hpl/>`_
- `LAMMPS <https://www.lammps.org/#gsc.tab=0>`_
- `OpenFOAM <https://www.openfoam.com/>`_
- `STREAM <https://www.cs.virginia.edu/stream/>`_
- `WRF <https://github.com/wrf-model/WRF>`_
To build lammps with oneAPI compiler from this environment just run::
spack install lammps
Compiled binaries can be find using::
spack cd -i lammps
You can do the same for all other applications from this environment.
Using oneAPI MPI to Satisfy a Virtual Dependence
------------------------------------------------------

View File

@@ -72,7 +72,7 @@ arguments to the configure phase, you can use:
.. code-block:: python
def configure_args(self, spec, prefix):
def configure_args(self):
return ['--no-python-dbus']

View File

@@ -97,9 +97,7 @@ class PatchedPythonDomain(PythonDomain):
def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
if "refspecific" in node:
del node["refspecific"]
return super(PatchedPythonDomain, self).resolve_xref(
env, fromdocname, builder, typ, target, node, contnode
)
return super().resolve_xref(env, fromdocname, builder, typ, target, node, contnode)
#

View File

@@ -292,12 +292,13 @@ It is also worth noting that:
non_bindable_shared_objects = ["libinterface.so"]
----------------------
``terminal_title``
``install_status``
----------------------
By setting this option to ``true``, Spack will update the terminal's title to
provide information about its current progress as well as the current and
total package numbers.
When set to ``true``, Spack will show information about its current progress
as well as the current and total package numbers. Progress is shown both
in the terminal title and inline. Setting it to ``false`` will not show any
progress information.
To work properly, this requires your terminal to reset its title after
Spack has finished its work, otherwise Spack's status information will

View File

@@ -916,9 +916,9 @@ function, as shown in the example below:
.. code-block:: yaml
projections:
zlib: {name}-{version}
^mpi: {name}-{version}/{^mpi.name}-{^mpi.version}-{compiler.name}-{compiler.version}
all: {name}-{version}/{compiler.name}-{compiler.version}
zlib: "{name}-{version}"
^mpi: "{name}-{version}/{^mpi.name}-{^mpi.version}-{compiler.name}-{compiler.version}"
all: "{name}-{version}/{compiler.name}-{compiler.version}"
The entries in the projections configuration file must all be either
specs or the keyword ``all``. For each spec, the projection used will
@@ -1132,11 +1132,11 @@ index once every package is pushed. Note how this target uses the generated
example/push/%: example/install/%
@mkdir -p $(dir $@)
$(info About to push $(SPEC) to a buildcache)
$(SPACK) -e . buildcache create --allow-root --only=package --directory $(BUILDCACHE_DIR) /$(HASH)
$(SPACK) -e . buildcache push --allow-root --only=package $(BUILDCACHE_DIR) /$(HASH)
@touch $@
push: $(addprefix example/push/,$(example/SPACK_PACKAGE_IDS))
$(info Updating the buildcache index)
$(SPACK) -e . buildcache update-index --directory $(BUILDCACHE_DIR)
$(SPACK) -e . buildcache update-index $(BUILDCACHE_DIR)
$(info Done!)
@touch $@

View File

@@ -275,10 +275,12 @@ of the installed software. For instance, in the snippet below:
set:
BAR: 'bar'
# This anonymous spec selects any package that
# depends on openmpi. The double colon at the
# depends on mpi. The double colon at the
# end clears the set of rules that matched so far.
^openmpi::
^mpi::
environment:
prepend_path:
PATH: '{^mpi.prefix}/bin'
set:
BAR: 'baz'
# Selects any zlib package
@@ -293,7 +295,9 @@ of the installed software. For instance, in the snippet below:
- FOOBAR
you are instructing Spack to set the environment variable ``BAR=bar`` for every module,
unless the associated spec satisfies ``^openmpi`` in which case ``BAR=baz``.
unless the associated spec satisfies the abstract dependency ``^mpi`` in which case
``BAR=baz``, and the directory containing the respective MPI executables is prepended
to the ``PATH`` variable.
In addition in any spec that satisfies ``zlib`` the value ``foo`` will be
prepended to ``LD_LIBRARY_PATH`` and in any spec that satisfies ``zlib%gcc@4.8``
the variable ``FOOBAR`` will be unset.

View File

@@ -121,7 +121,7 @@ Since v0.19, Spack supports two ways of writing a package recipe. The most comm
def url_for_version(self, version):
if version >= Version("2.1.1"):
return super(Openjpeg, self).url_for_version(version)
return super().url_for_version(version)
url_fmt = "https://github.com/uclouvain/openjpeg/archive/version.{0}.tar.gz"
return url_fmt.format(version)
@@ -155,7 +155,7 @@ builder class explicitly. Using the same example as above, this reads:
def url_for_version(self, version):
if version >= Version("2.1.1"):
return super(Openjpeg, self).url_for_version(version)
return super().url_for_version(version)
url_fmt = "https://github.com/uclouvain/openjpeg/archive/version.{0}.tar.gz"
return url_fmt.format(version)
@@ -3071,7 +3071,7 @@ follows:
# The library provided by the bar virtual package
@property
def bar_libs(self):
return find_libraries("libFooBar", root=sef.home, recursive=True)
return find_libraries("libFooBar", root=self.home, recursive=True)
# The baz virtual package home
@property

View File

@@ -1,8 +1,8 @@
sphinx==6.2.1
sphinxcontrib-programoutput==0.17
sphinx_design==0.4.1
sphinx-rtd-theme==1.2.1
python-levenshtein==0.21.0
sphinx-rtd-theme==1.2.2
python-levenshtein==0.21.1
docutils==0.18.1
pygments==2.15.1
urllib3==2.0.2
urllib3==2.0.3

428
lib/spack/env/cc vendored
View File

@@ -416,30 +416,14 @@ input_command="$*"
# The lists are all bell-separated to be as flexible as possible, as their
# contents may come from the command line, from ' '-separated lists,
# ':'-separated lists, etc.
include_dirs_list=""
lib_dirs_list=""
rpath_dirs_list=""
system_include_dirs_list=""
system_lib_dirs_list=""
system_rpath_dirs_list=""
isystem_system_include_dirs_list=""
isystem_include_dirs_list=""
libs_list=""
other_args_list=""
# Global state for keeping track of -Wl,-rpath -Wl,/path
wl_expect_rpath=no
# Same, but for -Xlinker -rpath -Xlinker /path
xlinker_expect_rpath=no
parse_Wl() {
while [ $# -ne 0 ]; do
if [ "$wl_expect_rpath" = yes ]; then
if system_dir "$1"; then
append system_rpath_dirs_list "$1"
append return_system_rpath_dirs_list "$1"
else
append rpath_dirs_list "$1"
append return_rpath_dirs_list "$1"
fi
wl_expect_rpath=no
else
@@ -449,9 +433,9 @@ parse_Wl() {
if [ -z "$arg" ]; then
shift; continue
elif system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
append return_system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
append return_rpath_dirs_list "$arg"
fi
;;
--rpath=*)
@@ -459,9 +443,9 @@ parse_Wl() {
if [ -z "$arg" ]; then
shift; continue
elif system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
append return_system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
append return_rpath_dirs_list "$arg"
fi
;;
-rpath|--rpath)
@@ -475,7 +459,7 @@ parse_Wl() {
return 1
;;
*)
append other_args_list "-Wl,$1"
append return_other_args_list "-Wl,$1"
;;
esac
fi
@@ -483,177 +467,210 @@ parse_Wl() {
done
}
categorize_arguments() {
while [ $# -ne 0 ]; do
unset IFS
# an RPATH to be added after the case statement.
rp=""
return_other_args_list=""
return_isystem_was_used=""
return_isystem_system_include_dirs_list=""
return_isystem_include_dirs_list=""
return_system_include_dirs_list=""
return_include_dirs_list=""
return_system_lib_dirs_list=""
return_lib_dirs_list=""
return_system_rpath_dirs_list=""
return_rpath_dirs_list=""
# Multiple consecutive spaces in the command line can
# result in blank arguments
if [ -z "$1" ]; then
shift
continue
fi
# Global state for keeping track of -Wl,-rpath -Wl,/path
wl_expect_rpath=no
if [ -n "${SPACK_COMPILER_FLAGS_KEEP}" ] ; then
# NOTE: the eval is required to allow `|` alternatives inside the variable
eval "\
case \"\$1\" in
$SPACK_COMPILER_FLAGS_KEEP)
append other_args_list \"\$1\"
# Same, but for -Xlinker -rpath -Xlinker /path
xlinker_expect_rpath=no
while [ $# -ne 0 ]; do
# an RPATH to be added after the case statement.
rp=""
# Multiple consecutive spaces in the command line can
# result in blank arguments
if [ -z "$1" ]; then
shift
continue
fi
if [ -n "${SPACK_COMPILER_FLAGS_KEEP}" ] ; then
# NOTE: the eval is required to allow `|` alternatives inside the variable
eval "\
case \"\$1\" in
$SPACK_COMPILER_FLAGS_KEEP)
append return_other_args_list \"\$1\"
shift
continue
;;
esac
"
fi
# the replace list is a space-separated list of pipe-separated pairs,
# the first in each pair is the original prefix to be matched, the
# second is the replacement prefix
if [ -n "${SPACK_COMPILER_FLAGS_REPLACE}" ] ; then
for rep in ${SPACK_COMPILER_FLAGS_REPLACE} ; do
before=${rep%|*}
after=${rep#*|}
eval "\
stripped=\"\${1##$before}\"
"
if [ "$stripped" = "$1" ] ; then
continue
fi
replaced="$after$stripped"
# it matched, remove it
shift
continue
if [ -z "$replaced" ] ; then
# completely removed, continue OUTER loop
continue 2
fi
# re-build argument list with replacement
set -- "$replaced" "$@"
done
fi
case "$1" in
-isystem*)
arg="${1#-isystem}"
return_isystem_was_used=true
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append return_isystem_system_include_dirs_list "$arg"
else
append return_isystem_include_dirs_list "$arg"
fi
;;
-I*)
arg="${1#-I}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append return_system_include_dirs_list "$arg"
else
append return_include_dirs_list "$arg"
fi
;;
-L*)
arg="${1#-L}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append return_system_lib_dirs_list "$arg"
else
append return_lib_dirs_list "$arg"
fi
;;
-l*)
# -loopopt=0 is generated erroneously in autoconf <= 2.69,
# and passed by ifx to the linker, which confuses it with a
# library. Filter it out.
# TODO: generalize filtering of args with an env var, so that
# TODO: we do not have to special case this here.
if { [ "$mode" = "ccld" ] || [ $mode = "ld" ]; } \
&& [ "$1" != "${1#-loopopt}" ]; then
shift
continue
fi
arg="${1#-l}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
append return_other_args_list "-l$arg"
;;
-Wl,*)
IFS=,
if ! parse_Wl ${1#-Wl,}; then
append return_other_args_list "$1"
fi
unset IFS
;;
-Xlinker)
shift
if [ $# -eq 0 ]; then
# -Xlinker without value: let the compiler error about it.
append return_other_args_list -Xlinker
xlinker_expect_rpath=no
break
elif [ "$xlinker_expect_rpath" = yes ]; then
# Register the path of -Xlinker -rpath <other args> -Xlinker <path>
if system_dir "$1"; then
append return_system_rpath_dirs_list "$1"
else
append return_rpath_dirs_list "$1"
fi
xlinker_expect_rpath=no
else
case "$1" in
-rpath=*)
arg="${1#-rpath=}"
if system_dir "$arg"; then
append return_system_rpath_dirs_list "$arg"
else
append return_rpath_dirs_list "$arg"
fi
;;
--rpath=*)
arg="${1#--rpath=}"
if system_dir "$arg"; then
append return_system_rpath_dirs_list "$arg"
else
append return_rpath_dirs_list "$arg"
fi
;;
-rpath|--rpath)
xlinker_expect_rpath=yes
;;
"$dtags_to_strip")
;;
*)
append return_other_args_list -Xlinker
append return_other_args_list "$1"
;;
esac
fi
;;
"$dtags_to_strip")
;;
*)
append return_other_args_list "$1"
;;
esac
"
fi
# the replace list is a space-separated list of pipe-separated pairs,
# the first in each pair is the original prefix to be matched, the
# second is the replacement prefix
if [ -n "${SPACK_COMPILER_FLAGS_REPLACE}" ] ; then
for rep in ${SPACK_COMPILER_FLAGS_REPLACE} ; do
before=${rep%|*}
after=${rep#*|}
eval "\
stripped=\"\${1##$before}\"
"
if [ "$stripped" = "$1" ] ; then
continue
fi
shift
done
replaced="$after$stripped"
# it matched, remove it
shift
if [ -z "$replaced" ] ; then
# completely removed, continue OUTER loop
continue 2
fi
# re-build argument list with replacement
set -- "$replaced" "$@"
done
# We found `-Xlinker -rpath` but no matching value `-Xlinker /path`. Just append
# `-Xlinker -rpath` again and let the compiler or linker handle the error during arg
# parsing.
if [ "$xlinker_expect_rpath" = yes ]; then
append return_other_args_list -Xlinker
append return_other_args_list -rpath
fi
case "$1" in
-isystem*)
arg="${1#-isystem}"
isystem_was_used=true
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append isystem_system_include_dirs_list "$arg"
else
append isystem_include_dirs_list "$arg"
fi
;;
-I*)
arg="${1#-I}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append system_include_dirs_list "$arg"
else
append include_dirs_list "$arg"
fi
;;
-L*)
arg="${1#-L}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
if system_dir "$arg"; then
append system_lib_dirs_list "$arg"
else
append lib_dirs_list "$arg"
fi
;;
-l*)
# -loopopt=0 is generated erroneously in autoconf <= 2.69,
# and passed by ifx to the linker, which confuses it with a
# library. Filter it out.
# TODO: generalize filtering of args with an env var, so that
# TODO: we do not have to special case this here.
if { [ "$mode" = "ccld" ] || [ $mode = "ld" ]; } \
&& [ "$1" != "${1#-loopopt}" ]; then
shift
continue
fi
arg="${1#-l}"
if [ -z "$arg" ]; then shift; arg="$1"; fi
append other_args_list "-l$arg"
;;
-Wl,*)
IFS=,
if ! parse_Wl ${1#-Wl,}; then
append other_args_list "$1"
fi
unset IFS
;;
-Xlinker)
shift
if [ $# -eq 0 ]; then
# -Xlinker without value: let the compiler error about it.
append other_args_list -Xlinker
xlinker_expect_rpath=no
break
elif [ "$xlinker_expect_rpath" = yes ]; then
# Register the path of -Xlinker -rpath <other args> -Xlinker <path>
if system_dir "$1"; then
append system_rpath_dirs_list "$1"
else
append rpath_dirs_list "$1"
fi
xlinker_expect_rpath=no
else
case "$1" in
-rpath=*)
arg="${1#-rpath=}"
if system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
fi
;;
--rpath=*)
arg="${1#--rpath=}"
if system_dir "$arg"; then
append system_rpath_dirs_list "$arg"
else
append rpath_dirs_list "$arg"
fi
;;
-rpath|--rpath)
xlinker_expect_rpath=yes
;;
"$dtags_to_strip")
;;
*)
append other_args_list -Xlinker
append other_args_list "$1"
;;
esac
fi
;;
"$dtags_to_strip")
;;
*)
append other_args_list "$1"
;;
esac
shift
done
# Same, but for -Wl flags.
if [ "$wl_expect_rpath" = yes ]; then
append return_other_args_list -Wl,-rpath
fi
}
# We found `-Xlinker -rpath` but no matching value `-Xlinker /path`. Just append
# `-Xlinker -rpath` again and let the compiler or linker handle the error during arg
# parsing.
if [ "$xlinker_expect_rpath" = yes ]; then
append other_args_list -Xlinker
append other_args_list -rpath
fi
# Same, but for -Wl flags.
if [ "$wl_expect_rpath" = yes ]; then
append other_args_list -Wl,-rpath
fi
categorize_arguments "$@"
include_dirs_list="$return_include_dirs_list"
lib_dirs_list="$return_lib_dirs_list"
rpath_dirs_list="$return_rpath_dirs_list"
system_include_dirs_list="$return_system_include_dirs_list"
system_lib_dirs_list="$return_system_lib_dirs_list"
system_rpath_dirs_list="$return_system_rpath_dirs_list"
isystem_was_used="$return_isystem_was_used"
isystem_system_include_dirs_list="$return_isystem_system_include_dirs_list"
isystem_include_dirs_list="$return_isystem_include_dirs_list"
other_args_list="$return_other_args_list"
#
# Add flags from Spack's cppflags, cflags, cxxflags, fcflags, fflags, and
@@ -673,12 +690,14 @@ elif [ "$SPACK_ADD_DEBUG_FLAGS" = "custom" ]; then
extend flags_list SPACK_DEBUG_FLAGS
fi
spack_flags_list=""
# Fortran flags come before CPPFLAGS
case "$mode" in
cc|ccld)
case $lang_flags in
F)
extend flags_list SPACK_FFLAGS
extend spack_flags_list SPACK_FFLAGS
;;
esac
;;
@@ -687,7 +706,7 @@ esac
# C preprocessor flags come before any C/CXX flags
case "$mode" in
cpp|as|cc|ccld)
extend flags_list SPACK_CPPFLAGS
extend spack_flags_list SPACK_CPPFLAGS
;;
esac
@@ -697,10 +716,10 @@ case "$mode" in
cc|ccld)
case $lang_flags in
C)
extend flags_list SPACK_CFLAGS
extend spack_flags_list SPACK_CFLAGS
;;
CXX)
extend flags_list SPACK_CXXFLAGS
extend spack_flags_list SPACK_CXXFLAGS
;;
esac
@@ -712,10 +731,25 @@ esac
# Linker flags
case "$mode" in
ld|ccld)
extend flags_list SPACK_LDFLAGS
extend spack_flags_list SPACK_LDFLAGS
;;
esac
IFS="$lsep"
categorize_arguments $spack_flags_list
unset IFS
spack_flags_include_dirs_list="$return_include_dirs_list"
spack_flags_lib_dirs_list="$return_lib_dirs_list"
spack_flags_rpath_dirs_list="$return_rpath_dirs_list"
spack_flags_system_include_dirs_list="$return_system_include_dirs_list"
spack_flags_system_lib_dirs_list="$return_system_lib_dirs_list"
spack_flags_system_rpath_dirs_list="$return_system_rpath_dirs_list"
spack_flags_isystem_was_used="$return_isystem_was_used"
spack_flags_isystem_system_include_dirs_list="$return_isystem_system_include_dirs_list"
spack_flags_isystem_include_dirs_list="$return_isystem_include_dirs_list"
spack_flags_other_args_list="$return_other_args_list"
# On macOS insert headerpad_max_install_names linker flag
if [ "$mode" = ld ] || [ "$mode" = ccld ]; then
if [ "${SPACK_SHORT_SPEC#*darwin}" != "${SPACK_SHORT_SPEC}" ]; then
@@ -741,6 +775,8 @@ if [ "$mode" = ccld ] || [ "$mode" = ld ]; then
extend lib_dirs_list SPACK_LINK_DIRS
fi
libs_list=""
# add RPATHs if we're in in any linking mode
case "$mode" in
ld|ccld)
@@ -769,12 +805,16 @@ args_list="$flags_list"
# Insert include directories just prior to any system include directories
# NOTE: adding ${lsep} to the prefix here turns every added element into two
extend args_list spack_flags_include_dirs_list "-I"
extend args_list include_dirs_list "-I"
extend args_list spack_flags_isystem_include_dirs_list "-isystem${lsep}"
extend args_list isystem_include_dirs_list "-isystem${lsep}"
case "$mode" in
cpp|cc|as|ccld)
if [ "$isystem_was_used" = "true" ]; then
if [ "$spack_flags_isystem_was_used" = "true" ]; then
extend args_list SPACK_INCLUDE_DIRS "-isystem${lsep}"
elif [ "$isystem_was_used" = "true" ]; then
extend args_list SPACK_INCLUDE_DIRS "-isystem${lsep}"
else
extend args_list SPACK_INCLUDE_DIRS "-I"
@@ -782,11 +822,15 @@ case "$mode" in
;;
esac
extend args_list spack_flags_system_include_dirs_list -I
extend args_list system_include_dirs_list -I
extend args_list spack_flags_isystem_system_include_dirs_list "-isystem${lsep}"
extend args_list isystem_system_include_dirs_list "-isystem${lsep}"
# Library search paths
extend args_list spack_flags_lib_dirs_list "-L"
extend args_list lib_dirs_list "-L"
extend args_list spack_flags_system_lib_dirs_list "-L"
extend args_list system_lib_dirs_list "-L"
# RPATHs arguments
@@ -795,20 +839,25 @@ case "$mode" in
if [ -n "$dtags_to_add" ] ; then
append args_list "$linker_arg$dtags_to_add"
fi
extend args_list spack_flags_rpath_dirs_list "$rpath"
extend args_list rpath_dirs_list "$rpath"
extend args_list spack_flags_system_rpath_dirs_list "$rpath"
extend args_list system_rpath_dirs_list "$rpath"
;;
ld)
if [ -n "$dtags_to_add" ] ; then
append args_list "$dtags_to_add"
fi
extend args_list spack_flags_rpath_dirs_list "-rpath${lsep}"
extend args_list rpath_dirs_list "-rpath${lsep}"
extend args_list spack_flags_system_rpath_dirs_list "-rpath${lsep}"
extend args_list system_rpath_dirs_list "-rpath${lsep}"
;;
esac
# Other arguments from the input command
extend args_list other_args_list
extend args_list spack_flags_other_args_list
# Inject SPACK_LDLIBS, if supplied
extend args_list libs_list "-l"
@@ -864,3 +913,4 @@ fi
# Execute the full command, preserving spaces with IFS set
# to the alarm bell separator.
IFS="$lsep"; exec $full_command_list

View File

@@ -65,9 +65,6 @@
up to date with CTest, just make sure the ``*_matches`` and
``*_exceptions`` lists are kept up to date with CTest's build handler.
"""
from __future__ import print_function
from __future__ import division
import re
import math
import multiprocessing
@@ -211,7 +208,7 @@
]
class LogEvent(object):
class LogEvent:
"""Class representing interesting events (e.g., errors) in a build log."""
def __init__(self, text, line_no,
source_file=None, source_line_no=None,
@@ -348,7 +345,7 @@ def _parse_unpack(args):
return _parse(*args)
class CTestLogParser(object):
class CTestLogParser:
"""Log file parser that extracts errors and warnings."""
def __init__(self, profile=False):
# whether to record timing information

View File

@@ -3,33 +3,42 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import abc
import argparse
import errno
import io
import re
import sys
from argparse import ArgumentParser
from typing import IO, Optional, Sequence, Tuple
class Command(object):
class Command:
"""Parsed representation of a command from argparse.
This is a single command from an argparse parser. ``ArgparseWriter``
creates these and returns them from ``parse()``, and it passes one of
these to each call to ``format()`` so that we can take an action for
a single command.
Parts of a Command:
- prog: command name (str)
- description: command description (str)
- usage: command usage (str)
- positionals: list of positional arguments (list)
- optionals: list of optional arguments (list)
- subcommands: list of subcommand parsers (list)
This is a single command from an argparse parser. ``ArgparseWriter`` creates these and returns
them from ``parse()``, and it passes one of these to each call to ``format()`` so that we can
take an action for a single command.
"""
def __init__(self, prog, description, usage, positionals, optionals, subcommands):
def __init__(
self,
prog: str,
description: Optional[str],
usage: str,
positionals: Sequence[Tuple[str, str]],
optionals: Sequence[Tuple[Sequence[str], str, str]],
subcommands: Sequence[Tuple[ArgumentParser, str]],
) -> None:
"""Initialize a new Command instance.
Args:
prog: Program name.
description: Command description.
usage: Command usage.
positionals: List of positional arguments.
optionals: List of optional arguments.
subcommands: List of subcommand parsers.
"""
self.prog = prog
self.description = description
self.usage = usage
@@ -38,35 +47,34 @@ def __init__(self, prog, description, usage, positionals, optionals, subcommands
self.subcommands = subcommands
# NOTE: The only reason we subclass argparse.HelpFormatter is to get access
# to self._expand_help(), ArgparseWriter is not intended to be used as a
# formatter_class.
class ArgparseWriter(argparse.HelpFormatter):
"""Analyzes an argparse ArgumentParser for easy generation of help."""
# NOTE: The only reason we subclass argparse.HelpFormatter is to get access to self._expand_help(),
# ArgparseWriter is not intended to be used as a formatter_class.
class ArgparseWriter(argparse.HelpFormatter, abc.ABC):
"""Analyze an argparse ArgumentParser for easy generation of help."""
def __init__(self, prog, out=None, aliases=False):
"""Initializes a new ArgparseWriter instance.
def __init__(self, prog: str, out: IO = sys.stdout, aliases: bool = False) -> None:
"""Initialize a new ArgparseWriter instance.
Parameters:
prog (str): the program name
out (file object): the file to write to (default sys.stdout)
aliases (bool): whether or not to include subparsers for aliases
Args:
prog: Program name.
out: File object to write to.
aliases: Whether or not to include subparsers for aliases.
"""
super(ArgparseWriter, self).__init__(prog)
super().__init__(prog)
self.level = 0
self.prog = prog
self.out = sys.stdout if out is None else out
self.out = out
self.aliases = aliases
def parse(self, parser, prog):
"""Parses the parser object and returns the relavent components.
def parse(self, parser: ArgumentParser, prog: str) -> Command:
"""Parse the parser object and return the relavent components.
Parameters:
parser (argparse.ArgumentParser): the parser
prog (str): the command name
Args:
parser: Command parser.
prog: Program name.
Returns:
(Command) information about the command from the parser
Information about the command from the parser.
"""
self.parser = parser
@@ -80,8 +88,7 @@ def parse(self, parser, prog):
groups = parser._mutually_exclusive_groups
usage = fmt._format_usage(None, actions, groups, "").strip()
# Go through actions and split them into optionals, positionals,
# and subcommands
# Go through actions and split them into optionals, positionals, and subcommands
optionals = []
positionals = []
subcommands = []
@@ -98,7 +105,7 @@ def parse(self, parser, prog):
subcommands.append((subparser, subaction.dest))
# Look for aliases of the form 'name (alias, ...)'
if self.aliases:
if self.aliases and isinstance(subaction.metavar, str):
match = re.match(r"(.*) \((.*)\)", subaction.metavar)
if match:
aliases = match.group(2).split(", ")
@@ -113,28 +120,26 @@ def parse(self, parser, prog):
return Command(prog, description, usage, positionals, optionals, subcommands)
def format(self, cmd):
"""Returns the string representation of a single node in the
parser tree.
@abc.abstractmethod
def format(self, cmd: Command) -> str:
"""Return the string representation of a single node in the parser tree.
Override this in subclasses to define how each subcommand
should be displayed.
Override this in subclasses to define how each subcommand should be displayed.
Parameters:
(Command): parsed information about a command or subcommand
Args:
cmd: Parsed information about a command or subcommand.
Returns:
str: the string representation of this subcommand
String representation of this subcommand.
"""
raise NotImplementedError
def _write(self, parser, prog, level=0):
"""Recursively writes a parser.
def _write(self, parser: ArgumentParser, prog: str, level: int = 0) -> None:
"""Recursively write a parser.
Parameters:
parser (argparse.ArgumentParser): the parser
prog (str): the command name
level (int): the current level
Args:
parser: Command parser.
prog: Program name.
level: Current level.
"""
self.level = level
@@ -144,19 +149,17 @@ def _write(self, parser, prog, level=0):
for subparser, prog in cmd.subcommands:
self._write(subparser, prog, level=level + 1)
def write(self, parser):
def write(self, parser: ArgumentParser) -> None:
"""Write out details about an ArgumentParser.
Args:
parser (argparse.ArgumentParser): the parser
parser: Command parser.
"""
try:
self._write(parser, self.prog)
except IOError as e:
except BrokenPipeError:
# Swallow pipe errors
# Raises IOError in Python 2 and BrokenPipeError in Python 3
if e.errno != errno.EPIPE:
raise
pass
_rst_levels = ["=", "-", "^", "~", ":", "`"]
@@ -165,21 +168,33 @@ def write(self, parser):
class ArgparseRstWriter(ArgparseWriter):
"""Write argparse output as rst sections."""
def __init__(self, prog, out=None, aliases=False, rst_levels=_rst_levels):
"""Create a new ArgparseRstWriter.
def __init__(
self,
prog: str,
out: IO = sys.stdout,
aliases: bool = False,
rst_levels: Sequence[str] = _rst_levels,
) -> None:
"""Initialize a new ArgparseRstWriter instance.
Parameters:
prog (str): program name
out (file object): file to write to
aliases (bool): whether or not to include subparsers for aliases
rst_levels (list of str): list of characters
for rst section headings
Args:
prog: Program name.
out: File object to write to.
aliases: Whether or not to include subparsers for aliases.
rst_levels: List of characters for rst section headings.
"""
out = sys.stdout if out is None else out
super(ArgparseRstWriter, self).__init__(prog, out, aliases)
super().__init__(prog, out, aliases)
self.rst_levels = rst_levels
def format(self, cmd):
def format(self, cmd: Command) -> str:
"""Return the string representation of a single node in the parser tree.
Args:
cmd: Parsed information about a command or subcommand.
Returns:
String representation of a node.
"""
string = io.StringIO()
string.write(self.begin_command(cmd.prog))
@@ -205,7 +220,15 @@ def format(self, cmd):
return string.getvalue()
def begin_command(self, prog):
def begin_command(self, prog: str) -> str:
"""Text to print before a command.
Args:
prog: Program name.
Returns:
Text before a command.
"""
return """
----
@@ -218,10 +241,26 @@ def begin_command(self, prog):
prog.replace(" ", "-"), prog, self.rst_levels[self.level] * len(prog)
)
def description(self, description):
def description(self, description: str) -> str:
"""Description of a command.
Args:
description: Command description.
Returns:
Description of a command.
"""
return description + "\n\n"
def usage(self, usage):
def usage(self, usage: str) -> str:
"""Example usage of a command.
Args:
usage: Command usage.
Returns:
Usage of a command.
"""
return """\
.. code-block:: console
@@ -231,10 +270,24 @@ def usage(self, usage):
usage
)
def begin_positionals(self):
def begin_positionals(self) -> str:
"""Text to print before positional arguments.
Returns:
Positional arguments header.
"""
return "\n**Positional arguments**\n\n"
def positional(self, name, help):
def positional(self, name: str, help: str) -> str:
"""Description of a positional argument.
Args:
name: Argument name.
help: Help text.
Returns:
Positional argument description.
"""
return """\
{0}
{1}
@@ -243,13 +296,32 @@ def positional(self, name, help):
name, help
)
def end_positionals(self):
def end_positionals(self) -> str:
"""Text to print after positional arguments.
Returns:
Positional arguments footer.
"""
return ""
def begin_optionals(self):
def begin_optionals(self) -> str:
"""Text to print before optional arguments.
Returns:
Optional arguments header.
"""
return "\n**Optional arguments**\n\n"
def optional(self, opts, help):
def optional(self, opts: str, help: str) -> str:
"""Description of an optional argument.
Args:
opts: Optional argument.
help: Help text.
Returns:
Optional argument description.
"""
return """\
``{0}``
{1}
@@ -258,10 +330,23 @@ def optional(self, opts, help):
opts, help
)
def end_optionals(self):
def end_optionals(self) -> str:
"""Text to print after optional arguments.
Returns:
Optional arguments footer.
"""
return ""
def begin_subcommands(self, subcommands):
def begin_subcommands(self, subcommands: Sequence[Tuple[ArgumentParser, str]]) -> str:
"""Table with links to other subcommands.
Arguments:
subcommands: List of subcommands.
Returns:
Subcommand linking text.
"""
string = """
**Subcommands**
@@ -280,29 +365,25 @@ def begin_subcommands(self, subcommands):
class ArgparseCompletionWriter(ArgparseWriter):
"""Write argparse output as shell programmable tab completion functions."""
def format(self, cmd):
"""Returns the string representation of a single node in the
parser tree.
def format(self, cmd: Command) -> str:
"""Return the string representation of a single node in the parser tree.
Override this in subclasses to define how each subcommand
should be displayed.
Parameters:
(Command): parsed information about a command or subcommand
Args:
cmd: Parsed information about a command or subcommand.
Returns:
str: the string representation of this subcommand
String representation of this subcommand.
"""
assert cmd.optionals # we should always at least have -h, --help
assert not (cmd.positionals and cmd.subcommands) # one or the other
# We only care about the arguments/flags, not the help messages
positionals = []
positionals: Tuple[str, ...] = ()
if cmd.positionals:
positionals, _ = zip(*cmd.positionals)
optionals, _, _ = zip(*cmd.optionals)
subcommands = []
subcommands: Tuple[str, ...] = ()
if cmd.subcommands:
_, subcommands = zip(*cmd.subcommands)
@@ -315,71 +396,73 @@ def format(self, cmd):
+ self.end_function(cmd.prog)
)
def start_function(self, prog):
"""Returns the syntax needed to begin a function definition.
def start_function(self, prog: str) -> str:
"""Return the syntax needed to begin a function definition.
Parameters:
prog (str): the command name
Args:
prog: Program name.
Returns:
str: the function definition beginning
Function definition beginning.
"""
name = prog.replace("-", "_").replace(" ", "_")
return "\n_{0}() {{".format(name)
def end_function(self, prog=None):
"""Returns the syntax needed to end a function definition.
def end_function(self, prog: str) -> str:
"""Return the syntax needed to end a function definition.
Parameters:
prog (str or None): the command name
Args:
prog: Program name
Returns:
str: the function definition ending
Function definition ending.
"""
return "}\n"
def body(self, positionals, optionals, subcommands):
"""Returns the body of the function.
def body(
self, positionals: Sequence[str], optionals: Sequence[str], subcommands: Sequence[str]
) -> str:
"""Return the body of the function.
Parameters:
positionals (list): list of positional arguments
optionals (list): list of optional arguments
subcommands (list): list of subcommand parsers
Args:
positionals: List of positional arguments.
optionals: List of optional arguments.
subcommands: List of subcommand parsers.
Returns:
str: the function body
Function body.
"""
return ""
def positionals(self, positionals):
"""Returns the syntax for reporting positional arguments.
def positionals(self, positionals: Sequence[str]) -> str:
"""Return the syntax for reporting positional arguments.
Parameters:
positionals (list): list of positional arguments
Args:
positionals: List of positional arguments.
Returns:
str: the syntax for positional arguments
Syntax for positional arguments.
"""
return ""
def optionals(self, optionals):
"""Returns the syntax for reporting optional flags.
def optionals(self, optionals: Sequence[str]) -> str:
"""Return the syntax for reporting optional flags.
Parameters:
optionals (list): list of optional arguments
Args:
optionals: List of optional arguments.
Returns:
str: the syntax for optional flags
Syntax for optional flags.
"""
return ""
def subcommands(self, subcommands):
"""Returns the syntax for reporting subcommands.
def subcommands(self, subcommands: Sequence[str]) -> str:
"""Return the syntax for reporting subcommands.
Parameters:
subcommands (list): list of subcommand parsers
Args:
subcommands: List of subcommand parsers.
Returns:
str: the syntax for subcommand parsers
Syntax for subcommand parsers
"""
return ""

View File

@@ -402,7 +402,7 @@ def groupid_to_group(x):
os.remove(backup_filename)
class FileFilter(object):
class FileFilter:
"""Convenience class for calling ``filter_file`` a lot."""
def __init__(self, *filenames):
@@ -610,6 +610,8 @@ def chgrp(path, group, follow_symlinks=True):
gid = grp.getgrnam(group).gr_gid
else:
gid = group
if os.stat(path).st_gid == gid:
return
if follow_symlinks:
os.chown(path, -1, gid)
else:
@@ -1336,7 +1338,7 @@ def lexists_islink_isdir(path):
return True, is_link, is_dir
class BaseDirectoryVisitor(object):
class BaseDirectoryVisitor:
"""Base class and interface for :py:func:`visit_directory_tree`."""
def visit_file(self, root, rel_path, depth):
@@ -1890,7 +1892,7 @@ class HeaderList(FileList):
include_regex = re.compile(r"(.*?)(\binclude\b)(.*)")
def __init__(self, files):
super(HeaderList, self).__init__(files)
super().__init__(files)
self._macro_definitions = []
self._directories = None
@@ -1916,7 +1918,7 @@ def _default_directories(self):
"""Default computation of directories based on the list of
header files.
"""
dir_list = super(HeaderList, self).directories
dir_list = super().directories
values = []
for d in dir_list:
# If the path contains a subdirectory named 'include' then stop
@@ -2352,7 +2354,7 @@ def find_all_libraries(root, recursive=False):
)
class WindowsSimulatedRPath(object):
class WindowsSimulatedRPath:
"""Class representing Windows filesystem rpath analog
One instance of this class is associated with a package (only on Windows)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import division
import collections.abc
import contextlib
import functools
@@ -768,10 +766,10 @@ def pretty_seconds(seconds):
class RequiredAttributeError(ValueError):
def __init__(self, message):
super(RequiredAttributeError, self).__init__(message)
super().__init__(message)
class ObjectWrapper(object):
class ObjectWrapper:
"""Base class that wraps an object. Derived classes can add new behavior
while staying undercover.
@@ -798,7 +796,7 @@ def __init__(self, wrapped_object):
self.__dict__ = wrapped_object.__dict__
class Singleton(object):
class Singleton:
"""Simple wrapper for lazily initialized singleton objects."""
def __init__(self, factory):
@@ -845,7 +843,7 @@ def __repr__(self):
return repr(self.instance)
class LazyReference(object):
class LazyReference:
"""Lazily evaluated reference to part of a singleton."""
def __init__(self, ref_function):
@@ -943,7 +941,7 @@ def _wrapper(args):
return _wrapper
class Devnull(object):
class Devnull:
"""Null stream with less overhead than ``os.devnull``.
See https://stackoverflow.com/a/2929954.
@@ -1060,7 +1058,7 @@ def __str__(self):
return str(self.data)
class GroupedExceptionHandler(object):
class GroupedExceptionHandler:
"""A generic mechanism to coalesce multiple exceptions and preserve tracebacks."""
def __init__(self):
@@ -1091,7 +1089,7 @@ def grouped_message(self, with_tracebacks: bool = True) -> str:
return "due to the following failures:\n{0}".format("\n".join(each_exception_message))
class GroupedExceptionForwarder(object):
class GroupedExceptionForwarder:
"""A contextmanager to capture exceptions and forward them to a
GroupedExceptionHandler."""
@@ -1111,7 +1109,7 @@ def __exit__(self, exc_type, exc_value, tb):
return True
class classproperty(object):
class classproperty:
"""Non-data descriptor to evaluate a class-level property. The function that performs
the evaluation is injected at creation time and take an instance (could be None) and
an owner (i.e. the class that originated the instance)

View File

@@ -5,8 +5,6 @@
"""LinkTree class for setting up trees of symbolic links."""
from __future__ import print_function
import filecmp
import os
import shutil
@@ -287,7 +285,7 @@ def visit_symlinked_file(self, root, rel_path, depth):
self.visit_file(root, rel_path, depth)
class LinkTree(object):
class LinkTree:
"""Class to create trees of symbolic links from a source directory.
LinkTree objects are constructed with a source root. Their
@@ -432,12 +430,12 @@ class MergeConflictError(Exception):
class ConflictingSpecsError(MergeConflictError):
def __init__(self, spec_1, spec_2):
super(MergeConflictError, self).__init__(spec_1, spec_2)
super().__init__(spec_1, spec_2)
class SingleMergeConflictError(MergeConflictError):
def __init__(self, path):
super(MergeConflictError, self).__init__("Package merge blocked by file: %s" % path)
super().__init__("Package merge blocked by file: %s" % path)
class MergeConflictSummary(MergeConflictError):
@@ -452,4 +450,4 @@ def __init__(self, conflicts):
msg += "\n `{0}` and `{1}` both project to `{2}`".format(
conflict.src_a, conflict.src_b, conflict.dst
)
super(MergeConflictSummary, self).__init__(msg)
super().__init__(msg)

View File

@@ -39,7 +39,7 @@
true_fn = lambda: True
class OpenFile(object):
class OpenFile:
"""Record for keeping track of open lockfiles (with reference counting).
There's really only one ``OpenFile`` per inode, per process, but we record the
@@ -53,7 +53,7 @@ def __init__(self, fh):
self.refs = 0
class OpenFileTracker(object):
class OpenFileTracker:
"""Track open lockfiles, to minimize number of open file descriptors.
The ``fcntl`` locks that Spack uses are associated with an inode and a process.
@@ -169,7 +169,7 @@ def _attempts_str(wait_time, nattempts):
return " after {} and {}".format(pretty_seconds(wait_time), attempts)
class LockType(object):
class LockType:
READ = 0
WRITE = 1
@@ -192,7 +192,7 @@ def is_valid(op):
return op == LockType.READ or op == LockType.WRITE
class Lock(object):
class Lock:
"""This is an implementation of a filesystem lock using Python's lockf.
In Python, ``lockf`` actually calls ``fcntl``, so this should work with
@@ -681,7 +681,7 @@ def _status_msg(self, locktype, status):
)
class LockTransaction(object):
class LockTransaction:
"""Simple nested transaction context manager that uses a file lock.
Arguments:
@@ -770,7 +770,7 @@ class LockDowngradeError(LockError):
def __init__(self, path):
msg = "Cannot downgrade lock from write to read on file: %s" % path
super(LockDowngradeError, self).__init__(msg)
super().__init__(msg)
class LockLimitError(LockError):
@@ -782,7 +782,7 @@ class LockTimeoutError(LockError):
def __init__(self, lock_type, path, time, attempts):
fmt = "Timed out waiting for a {} lock after {}.\n Made {} {} on file: {}"
super(LockTimeoutError, self).__init__(
super().__init__(
fmt.format(
lock_type,
pretty_seconds(time),
@@ -798,7 +798,7 @@ class LockUpgradeError(LockError):
def __init__(self, path):
msg = "Cannot upgrade lock from read to write on file: %s" % path
super(LockUpgradeError, self).__init__(msg)
super().__init__(msg)
class LockPermissionError(LockError):
@@ -810,7 +810,7 @@ class LockROFileError(LockPermissionError):
def __init__(self, path):
msg = "Can't take write lock on read-only file: %s" % path
super(LockROFileError, self).__init__(msg)
super().__init__(msg)
class CantCreateLockError(LockPermissionError):
@@ -819,4 +819,4 @@ class CantCreateLockError(LockPermissionError):
def __init__(self, path):
msg = "cannot create lock '%s': " % path
msg += "file does not exist and location is not writable"
super(LockError, self).__init__(msg)
super().__init__(msg)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import unicode_literals
import contextlib
import io
import os

View File

@@ -6,8 +6,6 @@
"""
Routines for printing columnar output. See ``colify()`` for more information.
"""
from __future__ import division, unicode_literals
import io
import os
import sys

View File

@@ -59,8 +59,6 @@
To output an @, use '@@'. To output a } inside braces, use '}}'.
"""
from __future__ import unicode_literals
import re
import sys
from contextlib import contextmanager
@@ -70,7 +68,7 @@ class ColorParseError(Exception):
"""Raised when a color format fails to parse."""
def __init__(self, message):
super(ColorParseError, self).__init__(message)
super().__init__(message)
# Text styles for ansi codes
@@ -205,7 +203,7 @@ def color_when(value):
set_color_when(old_value)
class match_to_ansi(object):
class match_to_ansi:
def __init__(self, color=True, enclose=False):
self.color = _color_when_value(color)
self.enclose = enclose
@@ -321,7 +319,7 @@ def cescape(string):
return string
class ColorStream(object):
class ColorStream:
def __init__(self, stream, color=None):
self._stream = stream
self._color = color

View File

@@ -5,8 +5,6 @@
"""Utility classes for logging the output of blocks of code.
"""
from __future__ import unicode_literals
import atexit
import ctypes
import errno
@@ -67,7 +65,7 @@ def _strip(line):
return _escape.sub("", line)
class keyboard_input(object):
class keyboard_input:
"""Context manager to disable line editing and echoing.
Use this with ``sys.stdin`` for keyboard input, e.g.::
@@ -244,7 +242,7 @@ def __exit__(self, exc_type, exception, traceback):
signal.signal(signum, old_handler)
class Unbuffered(object):
class Unbuffered:
"""Wrapper for Python streams that forces them to be unbuffered.
This is implemented by forcing a flush after each write.
@@ -289,7 +287,7 @@ def _file_descriptors_work(*streams):
return False
class FileWrapper(object):
class FileWrapper:
"""Represents a file. Can be an open stream, a path to a file (not opened
yet), or neither. When unwrapped, it returns an open file (or file-like)
object.
@@ -331,7 +329,7 @@ def close(self):
self.file.close()
class MultiProcessFd(object):
class MultiProcessFd:
"""Return an object which stores a file descriptor and can be passed as an
argument to a function run with ``multiprocessing.Process``, such that
the file descriptor is available in the subprocess."""
@@ -431,7 +429,7 @@ def log_output(*args, **kwargs):
return nixlog(*args, **kwargs)
class nixlog(object):
class nixlog:
"""
Under the hood, we spawn a daemon and set up a pipe between this
process and the daemon. The daemon writes our output to both the
@@ -752,7 +750,7 @@ def close(self):
os.close(self.saved_stream)
class winlog(object):
class winlog:
"""
Similar to nixlog, with underlying
functionality ported to support Windows.

View File

@@ -13,8 +13,6 @@
Note: The functionality in this module is unsupported on Windows
"""
from __future__ import print_function
import multiprocessing
import os
import re
@@ -36,7 +34,7 @@
pass
class ProcessController(object):
class ProcessController:
"""Wrapper around some fundamental process control operations.
This allows one process (the controller) to drive another (the
@@ -157,7 +155,7 @@ def wait_running(self):
self.wait(lambda: "T" not in self.proc_status())
class PseudoShell(object):
class PseudoShell:
"""Sets up controller and minion processes with a PTY.
You can create a ``PseudoShell`` if you want to test how some

View File

@@ -13,7 +13,7 @@
from spack.util.executable import Executable, ProcessError
class ABI(object):
class ABI:
"""This class provides methods to test ABI compatibility between specs.
The current implementation is rather rough and could be improved."""

View File

@@ -60,7 +60,7 @@ def _search_duplicate_compilers(error_cls):
GROUPS = collections.defaultdict(list)
class Error(object):
class Error:
"""Information on an error reported in a test."""
def __init__(self, summary, details):
@@ -725,11 +725,22 @@ def _version_constraints_are_satisfiable_by_some_version_in_repo(pkgs, error_cls
dependencies_to_check.extend([edge.spec for edge in dependency_data.values()])
host_architecture = spack.spec.ArchSpec.default_arch()
for s in dependencies_to_check:
dependency_pkg_cls = None
try:
dependency_pkg_cls = spack.repo.path.get_pkg_class(s.name)
assert any(v.intersects(s.versions) for v in list(dependency_pkg_cls.versions))
# Some packages have hacks that might cause failures on some platform
# Allow to explicitly set conditions to skip version checks in that case
skip_conditions = getattr(dependency_pkg_cls, "skip_version_audit", [])
skip_version_check = False
for condition in skip_conditions:
if host_architecture.satisfies(spack.spec.Spec(condition).architecture):
skip_version_check = True
break
assert skip_version_check or any(
v.intersects(s.versions) for v in list(dependency_pkg_cls.versions)
)
except Exception:
summary = (
"{0}: dependency on {1} cannot be satisfied " "by known versions of {1.name}"

View File

@@ -80,14 +80,14 @@ def __init__(self, errors):
else:
err = errors[0]
self.message = "{0}: {1}".format(err.__class__.__name__, str(err))
super(FetchCacheError, self).__init__(self.message)
super().__init__(self.message)
class ListMirrorSpecsError(spack.error.SpackError):
"""Raised when unable to retrieve list of specs from the mirror"""
class BinaryCacheIndex(object):
class BinaryCacheIndex:
"""
The BinaryCacheIndex tracks what specs are available on (usually remote)
binary caches.
@@ -317,9 +317,9 @@ def update(self, with_cooldown=False):
from each configured mirror and stored locally (both in memory and
on disk under ``_index_cache_root``)."""
self._init_local_index_cache()
mirrors = spack.mirror.MirrorCollection()
configured_mirror_urls = [m.fetch_url for m in mirrors.values()]
configured_mirror_urls = [
m.fetch_url for m in spack.mirror.MirrorCollection(binary=True).values()
]
items_to_remove = []
spec_cache_clear_needed = False
spec_cache_regenerate_needed = not self._mirrors_for_spec
@@ -517,9 +517,7 @@ class NoOverwriteException(spack.error.SpackError):
"""Raised when a file would be overwritten"""
def __init__(self, file_path):
super(NoOverwriteException, self).__init__(
f"Refusing to overwrite the following file: {file_path}"
)
super().__init__(f"Refusing to overwrite the following file: {file_path}")
class NoGpgException(spack.error.SpackError):
@@ -528,7 +526,7 @@ class NoGpgException(spack.error.SpackError):
"""
def __init__(self, msg):
super(NoGpgException, self).__init__(msg)
super().__init__(msg)
class NoKeyException(spack.error.SpackError):
@@ -537,7 +535,7 @@ class NoKeyException(spack.error.SpackError):
"""
def __init__(self, msg):
super(NoKeyException, self).__init__(msg)
super().__init__(msg)
class PickKeyException(spack.error.SpackError):
@@ -548,7 +546,7 @@ class PickKeyException(spack.error.SpackError):
def __init__(self, keys):
err_msg = "Multiple keys available for signing\n%s\n" % keys
err_msg += "Use spack buildcache create -k <key hash> to pick a key."
super(PickKeyException, self).__init__(err_msg)
super().__init__(err_msg)
class NoVerifyException(spack.error.SpackError):
@@ -565,7 +563,7 @@ class NoChecksumException(spack.error.SpackError):
"""
def __init__(self, path, size, contents, algorithm, expected, computed):
super(NoChecksumException, self).__init__(
super().__init__(
f"{algorithm} checksum failed for {path}",
f"Expected {expected} but got {computed}. "
f"File size = {size} bytes. Contents = {contents!r}",
@@ -578,7 +576,7 @@ class NewLayoutException(spack.error.SpackError):
"""
def __init__(self, msg):
super(NewLayoutException, self).__init__(msg)
super().__init__(msg)
class UnsignedPackageException(spack.error.SpackError):
@@ -760,13 +758,12 @@ def hashes_to_prefixes(spec):
}
def get_buildinfo_dict(spec, rel=False):
def get_buildinfo_dict(spec):
"""Create metadata for a tarball"""
manifest = get_buildfile_manifest(spec)
return {
"sbang_install_path": spack.hooks.sbang.sbang_install_path(),
"relative_rpaths": rel,
"buildpath": spack.store.layout.root,
"spackprefix": spack.paths.prefix,
"relative_prefix": os.path.relpath(spec.prefix, spack.store.layout.root),
@@ -1209,9 +1206,6 @@ class PushOptions(NamedTuple):
#: Overwrite existing tarball/metadata files in buildcache
force: bool = False
#: Whether to use relative RPATHs
relative: bool = False
#: Allow absolute paths to package prefixes when creating a tarball
allow_root: bool = False
@@ -1281,41 +1275,17 @@ def _build_tarball_in_stage_dir(spec: Spec, out_url: str, stage_dir: str, option
raise NoOverwriteException(url_util.format(remote_specfile_path))
pkg_dir = os.path.basename(spec.prefix.rstrip(os.path.sep))
workdir = os.path.join(stage_dir, pkg_dir)
# TODO: We generally don't want to mutate any files, but when using relative
# mode, Spack unfortunately *does* mutate rpaths and links ahead of time.
# For now, we only make a full copy of the spec prefix when in relative mode.
if options.relative:
# tarfile is used because it preserves hardlink etc best.
binaries_dir = workdir
temp_tarfile_name = tarball_name(spec, ".tar")
temp_tarfile_path = os.path.join(tarfile_dir, temp_tarfile_name)
with closing(tarfile.open(temp_tarfile_path, "w")) as tar:
tar.add(name="%s" % spec.prefix, arcname=".")
with closing(tarfile.open(temp_tarfile_path, "r")) as tar:
tar.extractall(workdir)
os.remove(temp_tarfile_path)
else:
binaries_dir = spec.prefix
binaries_dir = spec.prefix
# create info for later relocation and create tar
buildinfo = get_buildinfo_dict(spec, options.relative)
buildinfo = get_buildinfo_dict(spec)
# optionally make the paths in the binaries relative to each other
# in the spack install tree before creating tarball
if options.relative:
make_package_relative(workdir, spec, buildinfo, options.allow_root)
elif not options.allow_root:
if not options.allow_root:
ensure_package_relocatable(buildinfo, binaries_dir)
_do_create_tarball(tarfile_path, binaries_dir, pkg_dir, buildinfo)
# remove copy of install directory
if options.relative:
shutil.rmtree(workdir)
# get the sha256 checksum of the tarball
checksum = checksum_tarball(tarfile_path)
@@ -1336,7 +1306,6 @@ def _build_tarball_in_stage_dir(spec: Spec, out_url: str, stage_dir: str, option
# This will be used to determine is the directory layout has changed.
buildinfo = {}
buildinfo["relative_prefix"] = os.path.relpath(spec.prefix, spack.store.layout.root)
buildinfo["relative_rpaths"] = options.relative
spec_dict["buildinfo"] = buildinfo
with open(specfile_path, "w") as outfile:
@@ -1496,8 +1465,9 @@ def download_tarball(spec, unsigned=False, mirrors_for_spec=None):
"signature_verified": "true-if-binary-pkg-was-already-verified"
}
"""
if not spack.mirror.MirrorCollection():
tty.die("Please add a spack mirror to allow " + "download of pre-compiled packages.")
configured_mirrors = spack.mirror.MirrorCollection(binary=True).values()
if not configured_mirrors:
tty.die("Please add a spack mirror to allow download of pre-compiled packages.")
tarball = tarball_path_name(spec, ".spack")
specfile_prefix = tarball_name(spec, ".spec")
@@ -1514,11 +1484,7 @@ def download_tarball(spec, unsigned=False, mirrors_for_spec=None):
# we need was in an un-indexed mirror. No need to check any
# mirror for the spec twice though.
try_first = [i["mirror_url"] for i in mirrors_for_spec] if mirrors_for_spec else []
try_next = [
i.fetch_url
for i in spack.mirror.MirrorCollection().values()
if i.fetch_url not in try_first
]
try_next = [i.fetch_url for i in configured_mirrors if i.fetch_url not in try_first]
for url in try_first + try_next:
mirrors_to_try.append(
@@ -1596,35 +1562,6 @@ def download_tarball(spec, unsigned=False, mirrors_for_spec=None):
return None
def make_package_relative(workdir, spec, buildinfo, allow_root):
"""
Change paths in binaries to relative paths. Change absolute symlinks
to relative symlinks.
"""
prefix = spec.prefix
old_layout_root = buildinfo["buildpath"]
orig_path_names = list()
cur_path_names = list()
for filename in buildinfo["relocate_binaries"]:
orig_path_names.append(os.path.join(prefix, filename))
cur_path_names.append(os.path.join(workdir, filename))
platform = spack.platforms.by_name(spec.platform)
if "macho" in platform.binary_formats:
relocate.make_macho_binaries_relative(cur_path_names, orig_path_names, old_layout_root)
if "elf" in platform.binary_formats:
relocate.make_elf_binaries_relative(cur_path_names, orig_path_names, old_layout_root)
allow_root or relocate.ensure_binaries_are_relocatable(cur_path_names)
orig_path_names = list()
cur_path_names = list()
for linkname in buildinfo.get("relocate_links", []):
orig_path_names.append(os.path.join(prefix, linkname))
cur_path_names.append(os.path.join(workdir, linkname))
relocate.make_link_relative(cur_path_names, orig_path_names)
def ensure_package_relocatable(buildinfo, binaries_dir):
"""Check if package binaries are relocatable."""
binaries = [os.path.join(binaries_dir, f) for f in buildinfo["relocate_binaries"]]
@@ -2040,7 +1977,9 @@ def try_direct_fetch(spec, mirrors=None):
specfile_is_signed = False
found_specs = []
for mirror in spack.mirror.MirrorCollection(mirrors=mirrors).values():
binary_mirrors = spack.mirror.MirrorCollection(mirrors=mirrors, binary=True).values()
for mirror in binary_mirrors:
buildcache_fetch_url_json = url_util.join(
mirror.fetch_url, _build_cache_relative_path, specfile_name
)
@@ -2103,7 +2042,7 @@ def get_mirrors_for_spec(spec=None, mirrors_to_check=None, index_only=False):
if spec is None:
return []
if not spack.mirror.MirrorCollection(mirrors=mirrors_to_check):
if not spack.mirror.MirrorCollection(mirrors=mirrors_to_check, binary=True):
tty.debug("No Spack mirrors are currently configured")
return {}
@@ -2142,7 +2081,7 @@ def clear_spec_cache():
def get_keys(install=False, trust=False, force=False, mirrors=None):
"""Get pgp public keys available on mirror with suffix .pub"""
mirror_collection = mirrors or spack.mirror.MirrorCollection()
mirror_collection = mirrors or spack.mirror.MirrorCollection(binary=True)
if not mirror_collection:
tty.die("Please add a spack mirror to allow " + "download of build caches.")
@@ -2303,7 +2242,7 @@ def check_specs_against_mirrors(mirrors, specs, output_file=None):
"""
rebuilds = {}
for mirror in spack.mirror.MirrorCollection(mirrors).values():
for mirror in spack.mirror.MirrorCollection(mirrors, binary=True).values():
tty.debug("Checking for built specs at {0}".format(mirror.fetch_url))
rebuild_list = []
@@ -2347,7 +2286,7 @@ def _download_buildcache_entry(mirror_root, descriptions):
def download_buildcache_entry(file_descriptions, mirror_url=None):
if not mirror_url and not spack.mirror.MirrorCollection():
if not mirror_url and not spack.mirror.MirrorCollection(binary=True):
tty.die(
"Please provide or add a spack mirror to allow " + "download of buildcache entries."
)
@@ -2356,7 +2295,7 @@ def download_buildcache_entry(file_descriptions, mirror_url=None):
mirror_root = os.path.join(mirror_url, _build_cache_relative_path)
return _download_buildcache_entry(mirror_root, file_descriptions)
for mirror in spack.mirror.MirrorCollection().values():
for mirror in spack.mirror.MirrorCollection(binary=True).values():
mirror_root = os.path.join(mirror.fetch_url, _build_cache_relative_path)
if _download_buildcache_entry(mirror_root, file_descriptions):
@@ -2395,7 +2334,7 @@ def download_single_spec(concrete_spec, destination, mirror_url=None):
return download_buildcache_entry(files_to_fetch, mirror_url)
class BinaryCacheQuery(object):
class BinaryCacheQuery:
"""Callable object to query if a spec is in a binary cache"""
def __init__(self, all_architectures):

View File

@@ -175,12 +175,12 @@ def black_root_spec() -> str:
def flake8_root_spec() -> str:
"""Return the root spec used to bootstrap flake8"""
return _root_spec("py-flake8")
return _root_spec("py-flake8@3.8.2:")
def pytest_root_spec() -> str:
"""Return the root spec used to bootstrap flake8"""
return _root_spec("py-pytest")
return _root_spec("py-pytest@6.2.4:")
def ensure_environment_dependencies() -> None:

View File

@@ -148,7 +148,7 @@ class MakeExecutable(Executable):
def __init__(self, name, jobs, **kwargs):
supports_jobserver = kwargs.pop("supports_jobserver", True)
super(MakeExecutable, self).__init__(name, **kwargs)
super().__init__(name, **kwargs)
self.supports_jobserver = supports_jobserver
self.jobs = jobs
@@ -175,7 +175,7 @@ def __call__(self, *args, **kwargs):
if jobs_env_jobs is not None:
kwargs["extra_env"] = {jobs_env: str(jobs_env_jobs)}
return super(MakeExecutable, self).__call__(*args, **kwargs)
return super().__call__(*args, **kwargs)
def _on_cray():
@@ -1332,7 +1332,7 @@ class ChildError(InstallError):
build_errors = [("spack.util.executable", "ProcessError")]
def __init__(self, msg, module, classname, traceback_string, log_name, log_type, context):
super(ChildError, self).__init__(msg)
super().__init__(msg)
self.module = module
self.name = classname
self.traceback = traceback_string

View File

@@ -289,6 +289,7 @@ def std_initconfig_entries(self):
"# CMake executable path: {0}".format(self.pkg.spec["cmake"].command.path),
"#------------------{0}\n".format("-" * 60),
cmake_cache_path("CMAKE_PREFIX_PATH", cmake_prefix_path),
self.define_cmake_cache_from_variant("CMAKE_BUILD_TYPE", "build_type"),
]
def initconfig_package_entries(self):
@@ -311,7 +312,7 @@ def initconfig(self, pkg, spec, prefix):
@property
def std_cmake_args(self):
args = super(CachedCMakeBuilder, self).std_cmake_args
args = super().std_cmake_args
args.extend(["-C", self.cache_path])
return args

View File

@@ -296,8 +296,46 @@ def std_args(pkg, generator=None):
define("CMAKE_PREFIX_PATH", spack.build_environment.get_cmake_prefix_path(pkg)),
]
)
return args
@staticmethod
def define_cuda_architectures(pkg):
"""Returns the str ``-DCMAKE_CUDA_ARCHITECTURES:STRING=(expanded cuda_arch)``.
``cuda_arch`` is variant composed of a list of target CUDA architectures and
it is declared in the cuda package.
This method is no-op for cmake<3.18 and when ``cuda_arch`` variant is not set.
"""
cmake_flag = str()
if "cuda_arch" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.18:"):
cmake_flag = CMakeBuilder.define(
"CMAKE_CUDA_ARCHITECTURES", pkg.spec.variants["cuda_arch"].value
)
return cmake_flag
@staticmethod
def define_hip_architectures(pkg):
"""Returns the str ``-DCMAKE_HIP_ARCHITECTURES:STRING=(expanded amdgpu_target)``.
``amdgpu_target`` is variant composed of a list of the target HIP
architectures and it is declared in the rocm package.
This method is no-op for cmake<3.18 and when ``amdgpu_target`` variant is
not set.
"""
cmake_flag = str()
if "amdgpu_target" in pkg.spec.variants and pkg.spec.satisfies("^cmake@3.21:"):
cmake_flag = CMakeBuilder.define(
"CMAKE_HIP_ARCHITECTURES", pkg.spec.variants["amdgpu_target"].value
)
return cmake_flag
@staticmethod
def define(cmake_var, value):
"""Return a CMake command line argument that defines a variable.

View File

@@ -102,11 +102,10 @@ def cuda_flags(arch_list):
depends_on("cuda@11.0:", when="cuda_arch=80")
depends_on("cuda@11.1:", when="cuda_arch=86")
depends_on("cuda@11.4:", when="cuda_arch=87")
depends_on("cuda@11.8:", when="cuda_arch=89")
depends_on("cuda@11.8:", when="cuda_arch=90")
depends_on("cuda@12.0:", when="cuda_arch=90")
# From the NVIDIA install guide we know of conflicts for particular
# platforms (linux, darwin), architectures (x86, powerpc) and compilers

View File

@@ -121,7 +121,7 @@ def setup_run_environment(self, env):
$ source {prefix}/{component}/{version}/env/vars.sh
"""
# Only if environment modifications are desired (default is +envmods)
if "+envmods" in self.spec:
if "~envmods" not in self.spec:
env.extend(
EnvironmentModifications.from_sourcing_file(
join_path(self.component_prefix, "env", "vars.sh")
@@ -175,7 +175,7 @@ def libs(self):
return find_libraries("*", root=lib_path, shared=True, recursive=True)
class IntelOneApiStaticLibraryList(object):
class IntelOneApiStaticLibraryList:
"""Provides ld_flags when static linking is needed
Oneapi puts static and dynamic libraries in the same directory, so

View File

@@ -23,6 +23,7 @@
import spack.store
from spack.directives import build_system, depends_on, extends, maintainers
from spack.error import NoHeadersError, NoLibrariesError, SpecError
from spack.install_test import test_part
from spack.version import Version
from ._checks import BaseBuilder, execute_install_time_tests
@@ -167,18 +168,65 @@ def remove_files_from_view(self, view, merge_map):
view.remove_files(to_remove)
def test(self):
def test_imports(self):
"""Attempts to import modules of the installed package."""
# Make sure we are importing the installed modules,
# not the ones in the source directory
python = inspect.getmodule(self).python.path
for module in self.import_modules:
self.run_test(
inspect.getmodule(self).python.path,
["-c", "import {0}".format(module)],
purpose="checking import of {0}".format(module),
with test_part(
self,
f"test_imports_{module}",
purpose=f"checking import of {module}",
work_dir="spack-test",
)
):
python("-c", f"import {module}")
def update_external_dependencies(self, extendee_spec=None):
"""
Ensure all external python packages have a python dependency
If another package in the DAG depends on python, we use that
python for the dependency of the external. If not, we assume
that the external PythonPackage is installed into the same
directory as the python it depends on.
"""
# TODO: Include this in the solve, rather than instantiating post-concretization
if "python" not in self.spec:
if extendee_spec:
python = extendee_spec
elif "python" in self.spec.root:
python = self.spec.root["python"]
else:
python = self.get_external_python_for_prefix()
if not python.concrete:
repo = spack.repo.path.repo_for_pkg(python)
python.namespace = repo.namespace
# Ensure architecture information is present
if not python.architecture:
host_platform = spack.platforms.host()
host_os = host_platform.operating_system("default_os")
host_target = host_platform.target("default_target")
python.architecture = spack.spec.ArchSpec(
(str(host_platform), str(host_os), str(host_target))
)
else:
if not python.architecture.platform:
python.architecture.platform = spack.platforms.host()
if not python.architecture.os:
python.architecture.os = "default_os"
if not python.architecture.target:
python.architecture.target = archspec.cpu.host().family.name
# Ensure compiler information is present
if not python.compiler:
python.compiler = self.spec.compiler
python.external_path = self.spec.external_path
python._mark_concrete()
self.spec.add_dependency_edge(python, deptypes=("build", "link", "run"), virtuals=())
class PythonPackage(PythonExtension):
@@ -225,51 +273,6 @@ def list_url(cls):
name = cls.pypi.split("/")[0]
return "https://pypi.org/simple/" + name + "/"
def update_external_dependencies(self, extendee_spec=None):
"""
Ensure all external python packages have a python dependency
If another package in the DAG depends on python, we use that
python for the dependency of the external. If not, we assume
that the external PythonPackage is installed into the same
directory as the python it depends on.
"""
# TODO: Include this in the solve, rather than instantiating post-concretization
if "python" not in self.spec:
if extendee_spec:
python = extendee_spec
elif "python" in self.spec.root:
python = self.spec.root["python"]
else:
python = self.get_external_python_for_prefix()
if not python.concrete:
repo = spack.repo.path.repo_for_pkg(python)
python.namespace = repo.namespace
# Ensure architecture information is present
if not python.architecture:
host_platform = spack.platforms.host()
host_os = host_platform.operating_system("default_os")
host_target = host_platform.target("default_target")
python.architecture = spack.spec.ArchSpec(
(str(host_platform), str(host_os), str(host_target))
)
else:
if not python.architecture.platform:
python.architecture.platform = spack.platforms.host()
if not python.architecture.os:
python.architecture.os = "default_os"
if not python.architecture.target:
python.architecture.target = archspec.cpu.host().family.name
# Ensure compiler information is present
if not python.compiler:
python.compiler = self.spec.compiler
python.external_path = self.spec.external_path
python._mark_concrete()
self.spec.add_dependency_edge(python, deptypes=("build", "link", "run"))
def get_external_python_for_prefix(self):
"""
For an external package that extends python, find the most likely spec for the python

View File

@@ -63,7 +63,7 @@ def create(pkg):
return _BUILDERS[id(pkg)]
class _PhaseAdapter(object):
class _PhaseAdapter:
def __init__(self, builder, phase_fn):
self.builder = builder
self.phase_fn = phase_fn
@@ -115,7 +115,7 @@ class hierarchy (look at AspellDictPackage for an example of that)
# package. The semantic should be the same as the method in the base builder were still
# present in the base class of the package.
class _ForwardToBaseBuilder(object):
class _ForwardToBaseBuilder:
def __init__(self, wrapped_pkg_object, root_builder):
self.wrapped_package_object = wrapped_pkg_object
self.root_builder = root_builder
@@ -188,7 +188,7 @@ def __init__(self, pkg):
# Attribute containing the package wrapped in dispatcher with a `__getattr__`
# method that will forward certain calls to the default builder.
self.pkg_with_dispatcher = _ForwardToBaseBuilder(pkg, root_builder=self)
super(Adapter, self).__init__(pkg)
super().__init__(pkg)
# These two methods don't follow the (self, spec, prefix) signature of phases nor
# the (self) signature of methods, so they are added explicitly to avoid using a
@@ -388,7 +388,7 @@ def __new__(mcs, name, bases, attr_dict):
return super(_PackageAdapterMeta, mcs).__new__(mcs, name, bases, attr_dict)
class InstallationPhase(object):
class InstallationPhase:
"""Manages a single phase of the installation.
This descriptor stores at creation time the name of the method it should
@@ -530,9 +530,9 @@ def setup_build_environment(self, env):
modifications to be applied when the package is built. Package authors
can call methods on it to alter the build environment.
"""
if not hasattr(super(Builder, self), "setup_build_environment"):
if not hasattr(super(), "setup_build_environment"):
return
super(Builder, self).setup_build_environment(env)
super().setup_build_environment(env)
def setup_dependent_build_environment(self, env, dependent_spec):
"""Sets up the build environment of packages that depend on this one.
@@ -563,9 +563,9 @@ def setup_dependent_build_environment(self, env, dependent_spec):
the dependent's state. Note that *this* package's spec is
available as ``self.spec``
"""
if not hasattr(super(Builder, self), "setup_dependent_build_environment"):
if not hasattr(super(), "setup_dependent_build_environment"):
return
super(Builder, self).setup_dependent_build_environment(env, dependent_spec)
super().setup_dependent_build_environment(env, dependent_spec)
def __getitem__(self, idx):
key = self.phases[idx]

View File

@@ -58,7 +58,7 @@ def _fetch_cache():
return spack.fetch_strategy.FsCache(path)
class MirrorCache(object):
class MirrorCache:
def __init__(self, root, skip_unstable_versions):
self.root = os.path.abspath(root)
self.skip_unstable_versions = skip_unstable_versions

View File

@@ -28,7 +28,6 @@
import spack
import spack.binary_distribution as bindist
import spack.compilers as compilers
import spack.config as cfg
import spack.environment as ev
import spack.main
@@ -58,7 +57,7 @@
PushResult = namedtuple("PushResult", "success url")
class TemporaryDirectory(object):
class TemporaryDirectory:
def __init__(self):
self.temporary_directory = tempfile.mkdtemp()
@@ -70,17 +69,10 @@ def __exit__(self, exc_type, exc_value, exc_traceback):
return False
def _is_main_phase(phase_name):
return True if phase_name == "specs" else False
def get_job_name(phase, strip_compiler, spec, osarch, build_group):
def get_job_name(spec, osarch, build_group):
"""Given the necessary parts, format the gitlab job name
Arguments:
phase (str): Either 'specs' for the main phase, or the name of a
bootstrapping phase
strip_compiler (bool): Should compiler be stripped from job name
spec (spack.spec.Spec): Spec job will build
osarch: Architecture TODO: (this is a spack.spec.ArchSpec,
but sphinx doesn't recognize the type and fails).
@@ -93,12 +85,7 @@ def get_job_name(phase, strip_compiler, spec, osarch, build_group):
format_str = ""
format_args = []
if phase:
format_str += "({{{0}}})".format(item_idx)
format_args.append(phase)
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_str += "{{{0}}}".format(item_idx)
format_args.append(spec.name)
item_idx += 1
@@ -110,10 +97,9 @@ def get_job_name(phase, strip_compiler, spec, osarch, build_group):
format_args.append(spec.version)
item_idx += 1
if _is_main_phase(phase) is True or strip_compiler is False:
format_str += " {{{0}}}".format(item_idx)
format_args.append(spec.compiler)
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_args.append(spec.compiler)
item_idx += 1
format_str += " {{{0}}}".format(item_idx)
format_args.append(osarch)
@@ -153,49 +139,33 @@ def _add_dependency(spec_label, dep_label, deps):
deps[spec_label].add(dep_label)
def _get_spec_dependencies(
specs, deps, spec_labels, check_index_only=False, mirrors_to_check=None
):
spec_deps_obj = _compute_spec_deps(
specs, check_index_only=check_index_only, mirrors_to_check=mirrors_to_check
)
def _get_spec_dependencies(specs, deps, spec_labels):
spec_deps_obj = _compute_spec_deps(specs)
if spec_deps_obj:
dependencies = spec_deps_obj["dependencies"]
specs = spec_deps_obj["specs"]
for entry in specs:
spec_labels[entry["label"]] = {
"spec": entry["spec"],
"needs_rebuild": entry["needs_rebuild"],
}
spec_labels[entry["label"]] = entry["spec"]
for entry in dependencies:
_add_dependency(entry["spec"], entry["depends"], deps)
def stage_spec_jobs(specs, check_index_only=False, mirrors_to_check=None):
def stage_spec_jobs(specs):
"""Take a set of release specs and generate a list of "stages", where the
jobs in any stage are dependent only on jobs in previous stages. This
allows us to maximize build parallelism within the gitlab-ci framework.
Arguments:
specs (Iterable): Specs to build
check_index_only (bool): Regardless of whether DAG pruning is enabled,
all configured mirrors are searched to see if binaries for specs
are up to date on those mirrors. This flag limits that search to
the binary cache indices on those mirrors to speed the process up,
even though there is no garantee the index is up to date.
mirrors_to_checK: Optional mapping giving mirrors to check instead of
any configured mirrors.
Returns: A tuple of information objects describing the specs, dependencies
and stages:
spec_labels: A dictionary mapping the spec labels which are made of
(pkg-name/hash-prefix), to objects containing "spec" and "needs_rebuild"
keys. The root spec is the spec of which this spec is a dependency
and the spec is the formatted spec string for this spec.
spec_labels: A dictionary mapping the spec labels (which are formatted
as pkg-name/hash-prefix) to concrete specs.
deps: A dictionary where the keys should also have appeared as keys in
the spec_labels dictionary, and the values are the set of
@@ -224,13 +194,7 @@ def _remove_satisfied_deps(deps, satisfied_list):
deps = {}
spec_labels = {}
_get_spec_dependencies(
specs,
deps,
spec_labels,
check_index_only=check_index_only,
mirrors_to_check=mirrors_to_check,
)
_get_spec_dependencies(specs, deps, spec_labels)
# Save the original deps, as we need to return them at the end of the
# function. In the while loop below, the "dependencies" variable is
@@ -256,24 +220,36 @@ def _remove_satisfied_deps(deps, satisfied_list):
return spec_labels, deps, stages
def _print_staging_summary(spec_labels, dependencies, stages):
def _print_staging_summary(spec_labels, stages, mirrors_to_check, rebuild_decisions):
if not stages:
return
tty.msg(" Staging summary ([x] means a job needs rebuilding):")
mirrors = spack.mirror.MirrorCollection(mirrors=mirrors_to_check, binary=True)
tty.msg("Checked the following mirrors for binaries:")
for m in mirrors.values():
tty.msg(" {0}".format(m.fetch_url))
tty.msg("Staging summary ([x] means a job needs rebuilding):")
for stage_index, stage in enumerate(stages):
tty.msg(" stage {0} ({1} jobs):".format(stage_index, len(stage)))
tty.msg(" stage {0} ({1} jobs):".format(stage_index, len(stage)))
for job in sorted(stage):
s = spec_labels[job]["spec"]
s = spec_labels[job]
rebuild = rebuild_decisions[job].rebuild
reason = rebuild_decisions[job].reason
reason_msg = " ({0})".format(reason) if reason else ""
tty.msg(
" [{1}] {0} -> {2}".format(
job, "x" if spec_labels[job]["needs_rebuild"] else " ", _get_spec_string(s)
" [{1}] {0} -> {2}{3}".format(
job, "x" if rebuild else " ", _get_spec_string(s), reason_msg
)
)
if rebuild_decisions[job].mirrors:
tty.msg(" found on the following mirrors:")
for murl in rebuild_decisions[job].mirrors:
tty.msg(" {0}".format(murl))
def _compute_spec_deps(spec_list, check_index_only=False, mirrors_to_check=None):
def _compute_spec_deps(spec_list):
"""
Computes all the dependencies for the spec(s) and generates a JSON
object which provides both a list of unique spec names as well as a
@@ -337,12 +313,8 @@ def append_dep(s, d):
tty.msg("Will not stage external pkg: {0}".format(s))
continue
up_to_date_mirrors = bindist.get_mirrors_for_spec(
spec=s, mirrors_to_check=mirrors_to_check, index_only=check_index_only
)
skey = _spec_deps_key(s)
spec_labels[skey] = {"spec": s, "needs_rebuild": not up_to_date_mirrors}
spec_labels[skey] = s
for d in s.dependencies(deptype=all):
dkey = _spec_deps_key(d)
@@ -352,14 +324,8 @@ def append_dep(s, d):
append_dep(skey, dkey)
for spec_label, spec_holder in spec_labels.items():
specs.append(
{
"label": spec_label,
"spec": spec_holder["spec"],
"needs_rebuild": spec_holder["needs_rebuild"],
}
)
for spec_label, concrete_spec in spec_labels.items():
specs.append({"label": spec_label, "spec": concrete_spec})
deps_json_obj = {"specs": specs, "dependencies": dependencies}
@@ -371,26 +337,17 @@ def _spec_matches(spec, match_string):
def _format_job_needs(
phase_name,
strip_compilers,
dep_jobs,
osname,
build_group,
prune_dag,
stage_spec_dict,
enable_artifacts_buildcache,
dep_jobs, osname, build_group, prune_dag, rebuild_decisions, enable_artifacts_buildcache
):
needs_list = []
for dep_job in dep_jobs:
dep_spec_key = _spec_deps_key(dep_job)
dep_spec_info = stage_spec_dict[dep_spec_key]
rebuild = rebuild_decisions[dep_spec_key].rebuild
if not prune_dag or dep_spec_info["needs_rebuild"]:
if not prune_dag or rebuild:
needs_list.append(
{
"job": get_job_name(
phase_name, strip_compilers, dep_job, dep_job.architecture, build_group
),
"job": get_job_name(dep_job, dep_job.architecture, build_group),
"artifacts": enable_artifacts_buildcache,
}
)
@@ -490,17 +447,12 @@ def get_spec_filter_list(env, affected_pkgs, dependent_traverse_depth=None):
return affected_specs
def _build_jobs(phases, staged_phases):
for phase in phases:
phase_name = phase["name"]
spec_labels, dependencies, stages = staged_phases[phase_name]
for stage_jobs in stages:
for spec_label in stage_jobs:
spec_record = spec_labels[spec_label]
release_spec = spec_record["spec"]
release_spec_dag_hash = release_spec.dag_hash()
yield release_spec, release_spec_dag_hash
def _build_jobs(spec_labels, stages):
for stage_jobs in stages:
for spec_label in stage_jobs:
release_spec = spec_labels[spec_label]
release_spec_dag_hash = release_spec.dag_hash()
yield release_spec, release_spec_dag_hash
def _noop(x):
@@ -519,14 +471,21 @@ def _unpack_script(script_section, op=_noop):
return script
class RebuildDecision:
def __init__(self):
self.rebuild = True
self.mirrors = []
self.reason = ""
class SpackCI:
"""Spack CI object used to generate intermediate representation
used by the CI generator(s).
"""
def __init__(self, ci_config, phases, staged_phases):
def __init__(self, ci_config, spec_labels, stages):
"""Given the information from the ci section of the config
and the job phases setup meta data needed for generating Spack
and the staged jobs, set up meta data needed for generating Spack
CI IR.
"""
@@ -541,9 +500,6 @@ def __init__(self, ci_config, phases, staged_phases):
"enable-artifacts-buildcache": self.ci_config.get(
"enable-artifacts-buildcache", False
),
"bootstrap": self.ci_config.get(
"bootstrap", []
), # This is deprecated and should be removed
"rebuild-index": self.ci_config.get("rebuild-index", True),
"broken-specs-url": self.ci_config.get("broken-specs-url", None),
"broken-tests-packages": self.ci_config.get("broken-tests-packages", []),
@@ -551,7 +507,7 @@ def __init__(self, ci_config, phases, staged_phases):
}
jobs = self.ir["jobs"]
for spec, dag_hash in _build_jobs(phases, staged_phases):
for spec, dag_hash in _build_jobs(spec_labels, stages):
jobs[dag_hash] = self.__init_job(spec)
for name in self.named_jobs:
@@ -873,25 +829,6 @@ def generate_gitlab_ci_yaml(
if "temporary-storage-url-prefix" in ci_config:
temp_storage_url_prefix = ci_config["temporary-storage-url-prefix"]
bootstrap_specs = []
phases = []
if "bootstrap" in ci_config:
for phase in ci_config["bootstrap"]:
try:
phase_name = phase.get("name")
strip_compilers = phase.get("compiler-agnostic")
except AttributeError:
phase_name = phase
strip_compilers = False
phases.append({"name": phase_name, "strip-compilers": strip_compilers})
for bs in env.spec_lists[phase_name]:
bootstrap_specs.append(
{"spec": bs, "phase-name": phase_name, "strip-compilers": strip_compilers}
)
phases.append({"name": "specs", "strip-compilers": False})
# If a remote mirror override (alternate buildcache destination) was
# specified, add it here in case it has already built hashes we might
# generate.
@@ -993,39 +930,13 @@ def generate_gitlab_ci_yaml(
except bindist.FetchCacheError as e:
tty.warn(e)
staged_phases = {}
try:
for phase in phases:
phase_name = phase["name"]
if phase_name == "specs":
# Anything in the "specs" of the environment are already
# concretized by the block at the top of this method, so we
# only need to find the concrete versions, and then avoid
# re-concretizing them needlessly later on.
concrete_phase_specs = [
concrete
for abstract, concrete in env.concretized_specs()
if abstract in env.spec_lists[phase_name]
]
else:
# Any specs lists in other definitions (but not in the
# "specs") of the environment are not yet concretized so we
# have to concretize them explicitly here.
concrete_phase_specs = env.spec_lists[phase_name]
with spack.concretize.disable_compiler_existence_check():
for phase_spec in concrete_phase_specs:
phase_spec.concretize()
staged_phases[phase_name] = stage_spec_jobs(
concrete_phase_specs,
check_index_only=check_index_only,
mirrors_to_check=mirrors_to_check,
)
finally:
# Clean up remote mirror override if enabled
if remote_mirror_override:
spack.mirror.remove("ci_pr_mirror", cfg.default_modify_scope())
if spack_pipeline_type == "spack_pull_request":
spack.mirror.remove("ci_shared_pr_mirror", cfg.default_modify_scope())
spec_labels, dependencies, stages = stage_spec_jobs(
[
concrete
for abstract, concrete in env.concretized_specs()
if abstract in env.spec_lists["specs"]
]
)
all_job_names = []
output_object = {}
@@ -1048,276 +959,212 @@ def generate_gitlab_ci_yaml(
else:
broken_spec_urls = web_util.list_url(broken_specs_url)
spack_ci = SpackCI(ci_config, phases, staged_phases)
spack_ci = SpackCI(ci_config, spec_labels, stages)
spack_ci_ir = spack_ci.generate_ir()
for phase in phases:
phase_name = phase["name"]
strip_compilers = phase["strip-compilers"]
rebuild_decisions = {}
spec_labels, dependencies, stages = staged_phases[phase_name]
for stage_jobs in stages:
stage_name = "stage-{0}".format(stage_id)
stage_names.append(stage_name)
stage_id += 1
for stage_jobs in stages:
stage_name = "stage-{0}".format(stage_id)
stage_names.append(stage_name)
stage_id += 1
for spec_label in stage_jobs:
release_spec = spec_labels[spec_label]
release_spec_dag_hash = release_spec.dag_hash()
for spec_label in stage_jobs:
spec_record = spec_labels[spec_label]
release_spec = spec_record["spec"]
release_spec_dag_hash = release_spec.dag_hash()
spec_record = RebuildDecision()
rebuild_decisions[spec_label] = spec_record
if prune_untouched_packages:
if release_spec not in affected_specs:
tty.debug(
"Pruning {0}/{1}, untouched by change.".format(
release_spec.name, release_spec.dag_hash()[:7]
)
)
spec_record["needs_rebuild"] = False
continue
job_object = spack_ci_ir["jobs"][release_spec_dag_hash]["attributes"]
if not job_object:
tty.warn("No match found for {0}, skipping it".format(release_spec))
if prune_untouched_packages:
if release_spec not in affected_specs:
spec_record.rebuild = False
spec_record.reason = "Pruned, untouched by change."
continue
if spack_pipeline_type is not None:
# For spack pipelines "public" and "protected" are reserved tags
job_object["tags"] = _remove_reserved_tags(job_object.get("tags", []))
if spack_pipeline_type == "spack_protected_branch":
job_object["tags"].extend(["protected"])
elif spack_pipeline_type == "spack_pull_request":
job_object["tags"].extend(["public"])
up_to_date_mirrors = bindist.get_mirrors_for_spec(
spec=release_spec, mirrors_to_check=mirrors_to_check, index_only=check_index_only
)
if "script" not in job_object:
raise AttributeError
spec_record.rebuild = not up_to_date_mirrors
if up_to_date_mirrors:
spec_record.reason = "Pruned, found in mirrors"
spec_record.mirrors = [m["mirror_url"] for m in up_to_date_mirrors]
else:
spec_record.reason = "Scheduled, not found anywhere"
def main_script_replacements(cmd):
return cmd.replace("{env_dir}", rel_concrete_env_dir)
job_object = spack_ci_ir["jobs"][release_spec_dag_hash]["attributes"]
job_object["script"] = _unpack_script(
job_object["script"], op=main_script_replacements
)
if not job_object:
tty.warn("No match found for {0}, skipping it".format(release_spec))
continue
if "before_script" in job_object:
job_object["before_script"] = _unpack_script(job_object["before_script"])
if spack_pipeline_type is not None:
# For spack pipelines "public" and "protected" are reserved tags
job_object["tags"] = _remove_reserved_tags(job_object.get("tags", []))
if spack_pipeline_type == "spack_protected_branch":
job_object["tags"].extend(["protected"])
elif spack_pipeline_type == "spack_pull_request":
job_object["tags"].extend(["public"])
if "after_script" in job_object:
job_object["after_script"] = _unpack_script(job_object["after_script"])
if "script" not in job_object:
raise AttributeError
osname = str(release_spec.architecture)
job_name = get_job_name(
phase_name, strip_compilers, release_spec, osname, build_group
)
def main_script_replacements(cmd):
return cmd.replace("{env_dir}", rel_concrete_env_dir)
compiler_action = "NONE"
if len(phases) > 1:
compiler_action = "FIND_ANY"
if _is_main_phase(phase_name):
compiler_action = "INSTALL_MISSING"
job_object["script"] = _unpack_script(
job_object["script"], op=main_script_replacements
)
job_vars = job_object.setdefault("variables", {})
job_vars["SPACK_JOB_SPEC_DAG_HASH"] = release_spec_dag_hash
job_vars["SPACK_JOB_SPEC_PKG_NAME"] = release_spec.name
job_vars["SPACK_COMPILER_ACTION"] = compiler_action
if "before_script" in job_object:
job_object["before_script"] = _unpack_script(job_object["before_script"])
job_object["needs"] = []
if spec_label in dependencies:
if enable_artifacts_buildcache:
# Get dependencies transitively, so they're all
# available in the artifacts buildcache.
dep_jobs = [d for d in release_spec.traverse(deptype=all, root=False)]
else:
# In this case, "needs" is only used for scheduling
# purposes, so we only get the direct dependencies.
dep_jobs = []
for dep_label in dependencies[spec_label]:
dep_jobs.append(spec_labels[dep_label]["spec"])
if "after_script" in job_object:
job_object["after_script"] = _unpack_script(job_object["after_script"])
job_object["needs"].extend(
_format_job_needs(
phase_name,
strip_compilers,
dep_jobs,
osname,
build_group,
prune_dag,
spec_labels,
enable_artifacts_buildcache,
)
)
osname = str(release_spec.architecture)
job_name = get_job_name(release_spec, osname, build_group)
rebuild_spec = spec_record["needs_rebuild"]
# This next section helps gitlab make sure the right
# bootstrapped compiler exists in the artifacts buildcache by
# creating an artificial dependency between this spec and its
# compiler. So, if we are in the main phase, and if the
# compiler we are supposed to use is listed in any of the
# bootstrap spec lists, then we will add more dependencies to
# the job (that compiler and maybe it's dependencies as well).
if _is_main_phase(phase_name):
spec_arch_family = release_spec.architecture.target.microarchitecture.family
compiler_pkg_spec = compilers.pkg_spec_for_compiler(release_spec.compiler)
for bs in bootstrap_specs:
c_spec = bs["spec"]
bs_arch = c_spec.architecture
bs_arch_family = bs_arch.target.microarchitecture.family
if (
c_spec.intersects(compiler_pkg_spec)
and bs_arch_family == spec_arch_family
):
# We found the bootstrap compiler this release spec
# should be built with, so for DAG scheduling
# purposes, we will at least add the compiler spec
# to the jobs "needs". But if artifact buildcache
# is enabled, we'll have to add all transtive deps
# of the compiler as well.
# Here we check whether the bootstrapped compiler
# needs to be rebuilt. Until compilers are proper
# dependencies, we artificially force the spec to
# be rebuilt if the compiler targeted to build it
# needs to be rebuilt.
bs_specs, _, _ = staged_phases[bs["phase-name"]]
c_spec_key = _spec_deps_key(c_spec)
rbld_comp = bs_specs[c_spec_key]["needs_rebuild"]
rebuild_spec = rebuild_spec or rbld_comp
# Also update record so dependents do not fail to
# add this spec to their "needs"
spec_record["needs_rebuild"] = rebuild_spec
dep_jobs = [c_spec]
if enable_artifacts_buildcache:
dep_jobs = [d for d in c_spec.traverse(deptype=all)]
job_object["needs"].extend(
_format_job_needs(
bs["phase-name"],
bs["strip-compilers"],
dep_jobs,
str(bs_arch),
build_group,
prune_dag,
bs_specs,
enable_artifacts_buildcache,
)
)
else:
debug_msg = "".join(
[
"Considered compiler {0} for spec ",
"{1}, but rejected it either because it was ",
"not the compiler required by the spec, or ",
"because the target arch families of the ",
"spec and the compiler did not match",
]
).format(c_spec, release_spec)
tty.debug(debug_msg)
if prune_dag and not rebuild_spec and not copy_only_pipeline:
tty.debug(
"Pruning {0}/{1}, does not need rebuild.".format(
release_spec.name, release_spec.dag_hash()
)
)
continue
if broken_spec_urls is not None and release_spec_dag_hash in broken_spec_urls:
known_broken_specs_encountered.append(release_spec_dag_hash)
# Only keep track of these if we are copying rebuilt cache entries
if spack_buildcache_copy:
# TODO: This assumes signed version of the spec
buildcache_copies[release_spec_dag_hash] = [
{
"src": url_util.join(
buildcache_copy_src_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_name(release_spec, ".spec.json.sig"),
),
"dest": url_util.join(
buildcache_copy_dest_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_name(release_spec, ".spec.json.sig"),
),
},
{
"src": url_util.join(
buildcache_copy_src_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_path_name(release_spec, ".spack"),
),
"dest": url_util.join(
buildcache_copy_dest_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_path_name(release_spec, ".spack"),
),
},
]
if artifacts_root:
job_object["needs"].append(
{"job": generate_job_name, "pipeline": "{0}".format(parent_pipeline_id)}
)
job_vars["SPACK_SPEC_NEEDS_REBUILD"] = str(rebuild_spec)
if cdash_handler:
cdash_handler.current_spec = release_spec
build_name = cdash_handler.build_name
all_job_names.append(build_name)
job_vars["SPACK_CDASH_BUILD_NAME"] = build_name
build_stamp = cdash_handler.build_stamp
job_vars["SPACK_CDASH_BUILD_STAMP"] = build_stamp
job_object["artifacts"] = spack.config.merge_yaml(
job_object.get("artifacts", {}),
{
"when": "always",
"paths": [
rel_job_log_dir,
rel_job_repro_dir,
rel_job_test_dir,
rel_user_artifacts_dir,
],
},
)
job_vars = job_object.setdefault("variables", {})
job_vars["SPACK_JOB_SPEC_DAG_HASH"] = release_spec_dag_hash
job_vars["SPACK_JOB_SPEC_PKG_NAME"] = release_spec.name
job_object["needs"] = []
if spec_label in dependencies:
if enable_artifacts_buildcache:
bc_root = os.path.join(local_mirror_dir, "build_cache")
job_object["artifacts"]["paths"].extend(
[
os.path.join(bc_root, p)
for p in [
bindist.tarball_name(release_spec, ".spec.json"),
bindist.tarball_directory_name(release_spec),
]
]
# Get dependencies transitively, so they're all
# available in the artifacts buildcache.
dep_jobs = [d for d in release_spec.traverse(deptype=all, root=False)]
else:
# In this case, "needs" is only used for scheduling
# purposes, so we only get the direct dependencies.
dep_jobs = []
for dep_label in dependencies[spec_label]:
dep_jobs.append(spec_labels[dep_label])
job_object["needs"].extend(
_format_job_needs(
dep_jobs,
osname,
build_group,
prune_dag,
rebuild_decisions,
enable_artifacts_buildcache,
)
)
job_object["stage"] = stage_name
job_object["retry"] = {"max": 2, "when": JOB_RETRY_CONDITIONS}
job_object["interruptible"] = True
rebuild_spec = spec_record.rebuild
length_needs = len(job_object["needs"])
if length_needs > max_length_needs:
max_length_needs = length_needs
max_needs_job = job_name
if not rebuild_spec and not copy_only_pipeline:
if prune_dag:
spec_record.reason = "Pruned, up-to-date"
continue
else:
# DAG pruning is disabled, force the spec to rebuild. The
# record still contains any mirrors on which the spec
# may have been found, so we can print them in the staging
# summary.
spec_record.rebuild = True
spec_record.reason = "Scheduled, DAG pruning disabled"
if not copy_only_pipeline:
output_object[job_name] = job_object
job_id += 1
if broken_spec_urls is not None and release_spec_dag_hash in broken_spec_urls:
known_broken_specs_encountered.append(release_spec_dag_hash)
# Only keep track of these if we are copying rebuilt cache entries
if spack_buildcache_copy:
# TODO: This assumes signed version of the spec
buildcache_copies[release_spec_dag_hash] = [
{
"src": url_util.join(
buildcache_copy_src_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_name(release_spec, ".spec.json.sig"),
),
"dest": url_util.join(
buildcache_copy_dest_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_name(release_spec, ".spec.json.sig"),
),
},
{
"src": url_util.join(
buildcache_copy_src_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_path_name(release_spec, ".spack"),
),
"dest": url_util.join(
buildcache_copy_dest_prefix,
bindist.build_cache_relative_path(),
bindist.tarball_path_name(release_spec, ".spack"),
),
},
]
if artifacts_root:
job_object["needs"].append(
{"job": generate_job_name, "pipeline": "{0}".format(parent_pipeline_id)}
)
# Let downstream jobs know whether the spec needed rebuilding, regardless
# whether DAG pruning was enabled or not.
job_vars["SPACK_SPEC_NEEDS_REBUILD"] = str(rebuild_spec)
if cdash_handler:
cdash_handler.current_spec = release_spec
build_name = cdash_handler.build_name
all_job_names.append(build_name)
job_vars["SPACK_CDASH_BUILD_NAME"] = build_name
build_stamp = cdash_handler.build_stamp
job_vars["SPACK_CDASH_BUILD_STAMP"] = build_stamp
job_object["artifacts"] = spack.config.merge_yaml(
job_object.get("artifacts", {}),
{
"when": "always",
"paths": [
rel_job_log_dir,
rel_job_repro_dir,
rel_job_test_dir,
rel_user_artifacts_dir,
],
},
)
if enable_artifacts_buildcache:
bc_root = os.path.join(local_mirror_dir, "build_cache")
job_object["artifacts"]["paths"].extend(
[
os.path.join(bc_root, p)
for p in [
bindist.tarball_name(release_spec, ".spec.json"),
bindist.tarball_directory_name(release_spec),
]
]
)
job_object["stage"] = stage_name
job_object["retry"] = {"max": 2, "when": JOB_RETRY_CONDITIONS}
job_object["interruptible"] = True
length_needs = len(job_object["needs"])
if length_needs > max_length_needs:
max_length_needs = length_needs
max_needs_job = job_name
if not copy_only_pipeline:
output_object[job_name] = job_object
job_id += 1
if print_summary:
for phase in phases:
phase_name = phase["name"]
tty.msg('Stages for phase "{0}"'.format(phase_name))
phase_stages = staged_phases[phase_name]
_print_staging_summary(*phase_stages)
_print_staging_summary(spec_labels, stages, mirrors_to_check, rebuild_decisions)
# Clean up remote mirror override if enabled
if remote_mirror_override:
spack.mirror.remove("ci_pr_mirror", cfg.default_modify_scope())
if spack_pipeline_type == "spack_pull_request":
spack.mirror.remove("ci_shared_pr_mirror", cfg.default_modify_scope())
tty.debug("{0} build jobs generated in {1} stages".format(job_id, stage_id))
@@ -1410,20 +1257,11 @@ def main_script_replacements(cmd):
output_object["stages"] = stage_names
# Capture the version of spack used to generate the pipeline, transform it
# into a value that can be passed to "git checkout", and save it in a
# global yaml variable
# Capture the version of Spack used to generate the pipeline, that can be
# passed to `git checkout` for version consistency. If we aren't in a Git
# repository, presume we are a Spack release and use the Git tag instead.
spack_version = spack.main.get_version()
version_to_clone = None
v_match = re.match(r"^\d+\.\d+\.\d+$", spack_version)
if v_match:
version_to_clone = "v{0}".format(v_match.group(0))
else:
v_match = re.match(r"^[^-]+-[^-]+-([a-f\d]+)$", spack_version)
if v_match:
version_to_clone = v_match.group(1)
else:
version_to_clone = spack_version
version_to_clone = spack.main.get_spack_commit() or f"v{spack.spack_version}"
output_object["variables"] = {
"SPACK_ARTIFACTS_ROOT": rel_artifacts_root,
@@ -1576,44 +1414,6 @@ def can_verify_binaries():
return len(gpg_util.public_keys()) >= 1
def configure_compilers(compiler_action, scope=None):
"""Depending on the compiler_action parameter, either turn on the
install_missing_compilers config option, or find spack compilers,
or do nothing. This is used from rebuild jobs in bootstrapping
pipelines, where in the bootsrapping phase we would pass
FIND_ANY in case of compiler-agnostic bootstrapping, while in the
spec building phase we would pass INSTALL_MISSING in order to get
spack to use the compiler which was built in the previous phase and
is now sitting in the binary mirror.
Arguments:
compiler_action (str): 'FIND_ANY', 'INSTALL_MISSING' have meanings
described above. Any other value essentially results in a no-op.
scope (spack.config.ConfigScope): Optional. The scope in which to look for
compilers, in case 'FIND_ANY' was provided.
"""
if compiler_action == "INSTALL_MISSING":
tty.debug("Make sure bootstrapped compiler will be installed")
config = cfg.get("config")
config["install_missing_compilers"] = True
cfg.set("config", config)
elif compiler_action == "FIND_ANY":
tty.debug("Just find any available compiler")
find_args = ["find"]
if scope:
find_args.extend(["--scope", scope])
output = spack_compiler(*find_args)
tty.debug("spack compiler find")
tty.debug(output)
output = spack_compiler("list")
tty.debug("spack compiler list")
tty.debug(output)
else:
tty.debug("No compiler action to be taken")
return None
def _push_mirror_contents(input_spec, sign_binaries, mirror_url):
"""Unchecked version of the public API, for easier mocking"""
unsigned = not sign_binaries
@@ -2319,7 +2119,7 @@ def run_standalone_tests(**kwargs):
tty.debug("spack test exited {0}".format(exit_code))
class CDashHandler(object):
class CDashHandler:
"""
Class for managing CDash data and processing.
"""

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import os
import re
@@ -149,7 +147,7 @@ def get_command(cmd_name):
return getattr(get_module(cmd_name), pname)
class _UnquotedFlags(object):
class _UnquotedFlags:
"""Use a heuristic in `.extract()` to detect whether the user is trying to set
multiple flags like the docker ENV attribute allows (e.g. 'cflags=-Os -pipe').
@@ -547,7 +545,7 @@ class PythonNameError(spack.error.SpackError):
def __init__(self, name):
self.name = name
super(PythonNameError, self).__init__("{0} is not a permissible Python name.".format(name))
super().__init__("{0} is not a permissible Python name.".format(name))
class CommandNameError(spack.error.SpackError):
@@ -555,9 +553,7 @@ class CommandNameError(spack.error.SpackError):
def __init__(self, name):
self.name = name
super(CommandNameError, self).__init__(
"{0} is not a permissible Spack command name.".format(name)
)
super().__init__("{0} is not a permissible Spack command name.".format(name))
########################################

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import collections
import archspec.cpu

View File

@@ -59,7 +59,7 @@ def setup_parser(subparser):
subparser.add_argument(
"package_or_file",
help="name of package to show contributions for, " "or path to a file in the spack repo",
help="name of package to show contributions for, or path to a file in the spack repo",
)

View File

@@ -2,8 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os.path
import shutil
import tempfile

View File

@@ -43,14 +43,7 @@ def setup_parser(subparser):
subparsers = subparser.add_subparsers(help="buildcache sub-commands")
push = subparsers.add_parser("push", aliases=["create"], help=push_fn.__doc__)
# TODO: remove from Spack 0.21
push.add_argument(
"-r",
"--rel",
action="store_true",
help="make all rpaths relative before creating tarballs. (deprecated)",
)
push.add_argument("-f", "--force", action="store_true", help="overwrite tarball if it exists.")
push.add_argument("-f", "--force", action="store_true", help="overwrite tarball if it exists")
push.add_argument(
"-u", "--unsigned", action="store_true", help="push unsigned buildcache tarballs"
)
@@ -60,79 +53,37 @@ def setup_parser(subparser):
action="store_true",
help="allow install root string in binary files after RPATH substitution",
)
push.add_argument(
"-k", "--key", metavar="key", type=str, default=None, help="Key for signing."
)
output = push.add_mutually_exclusive_group(required=False)
# TODO: remove from Spack 0.21
output.add_argument(
"-d",
"--directory",
metavar="directory",
dest="mirror_flag",
type=arguments.mirror_directory,
help="local directory where buildcaches will be written. (deprecated)",
)
# TODO: remove from Spack 0.21
output.add_argument(
"-m",
"--mirror-name",
metavar="mirror-name",
dest="mirror_flag",
type=arguments.mirror_name,
help="name of the mirror where buildcaches will be written. (deprecated)",
)
# TODO: remove from Spack 0.21
output.add_argument(
"--mirror-url",
metavar="mirror-url",
dest="mirror_flag",
type=arguments.mirror_url,
help="URL of the mirror where buildcaches will be written. (deprecated)",
)
# Unfortunately we cannot add this to the mutually exclusive group above,
# because we have further positional arguments.
# TODO: require from Spack 0.21
push.add_argument("mirror", type=str, help="Mirror name, path, or URL.", nargs="?")
push.add_argument("-k", "--key", metavar="key", type=str, default=None, help="key for signing")
push.add_argument("mirror", type=str, help="mirror name, path, or URL")
push.add_argument(
"--update-index",
"--rebuild-index",
action="store_true",
default=False,
help="Regenerate buildcache index after building package(s)",
help="regenerate buildcache index after building package(s)",
)
push.add_argument(
"--spec-file", default=None, help="Create buildcache entry for spec from json or yaml file"
"--spec-file", default=None, help="create buildcache entry for spec from json or yaml file"
)
push.add_argument(
"--only",
default="package,dependencies",
dest="things_to_install",
choices=["package", "dependencies"],
help=(
"Select the buildcache mode. the default is to"
" build a cache for the package along with all"
" its dependencies. Alternatively, one can"
" decide to build a cache for only the package"
" or only the dependencies"
),
help="select the buildcache mode\n\n"
"the default is to build a cache for the package along with all its dependencies. "
"alternatively, one can decide to build a cache for only the package or only the "
"dependencies",
)
arguments.add_common_arguments(push, ["specs"])
push.set_defaults(func=push_fn)
install = subparsers.add_parser("install", help=install_fn.__doc__)
install.add_argument(
"-f", "--force", action="store_true", help="overwrite install directory if it exists."
"-f", "--force", action="store_true", help="overwrite install directory if it exists"
)
install.add_argument(
"-m", "--multiple", action="store_true", help="allow all matching packages "
)
# TODO: remove from Spack 0.21
install.add_argument(
"-a",
"--allow-root",
action="store_true",
help="allow install root string in binary files after RPATH substitution. (deprecated)",
"-m", "--multiple", action="store_true", help="allow all matching packages"
)
install.add_argument(
"-u",
@@ -186,11 +137,11 @@ def setup_parser(subparser):
"-m",
"--mirror-url",
default=None,
help="Override any configured mirrors with this mirror URL",
help="override any configured mirrors with this mirror URL",
)
check.add_argument(
"-o", "--output-file", default=None, help="File where rebuild info should be written"
"-o", "--output-file", default=None, help="file where rebuild info should be written"
)
# used to construct scope arguments below
@@ -206,13 +157,13 @@ def setup_parser(subparser):
)
check.add_argument(
"-s", "--spec", default=None, help="Check single spec instead of release specs file"
"-s", "--spec", default=None, help="check single spec instead of release specs file"
)
check.add_argument(
"--spec-file",
default=None,
help=("Check single spec from json or yaml file instead of release specs file"),
help="check single spec from json or yaml file instead of release specs file",
)
check.set_defaults(func=check_fn)
@@ -220,15 +171,15 @@ def setup_parser(subparser):
# Download tarball and specfile
download = subparsers.add_parser("download", help=download_fn.__doc__)
download.add_argument(
"-s", "--spec", default=None, help="Download built tarball for spec from mirror"
"-s", "--spec", default=None, help="download built tarball for spec from mirror"
)
download.add_argument(
"--spec-file",
default=None,
help=("Download built tarball for spec (from json or yaml file) from mirror"),
help="download built tarball for spec (from json or yaml file) from mirror",
)
download.add_argument(
"-p", "--path", default=None, help="Path to directory where tarball should be downloaded"
"-p", "--path", default=None, help="path to directory where tarball should be downloaded"
)
download.set_defaults(func=download_fn)
@@ -237,106 +188,52 @@ def setup_parser(subparser):
"get-buildcache-name", help=get_buildcache_name_fn.__doc__
)
getbuildcachename.add_argument(
"-s", "--spec", default=None, help="Spec string for which buildcache name is desired"
"-s", "--spec", default=None, help="spec string for which buildcache name is desired"
)
getbuildcachename.add_argument(
"--spec-file",
default=None,
help=("Path to spec json or yaml file for which buildcache name is desired"),
help="path to spec json or yaml file for which buildcache name is desired",
)
getbuildcachename.set_defaults(func=get_buildcache_name_fn)
# Given the root spec, save the yaml of the dependent spec to a file
savespecfile = subparsers.add_parser("save-specfile", help=save_specfile_fn.__doc__)
savespecfile.add_argument("--root-spec", default=None, help="Root spec of dependent spec")
savespecfile.add_argument("--root-spec", default=None, help="root spec of dependent spec")
savespecfile.add_argument(
"--root-specfile",
default=None,
help="Path to json or yaml file containing root spec of dependent spec",
help="path to json or yaml file containing root spec of dependent spec",
)
savespecfile.add_argument(
"-s",
"--specs",
default=None,
help="List of dependent specs for which saved yaml is desired",
help="list of dependent specs for which saved yaml is desired",
)
savespecfile.add_argument(
"--specfile-dir", default=None, help="Path to directory where spec yamls should be saved"
"--specfile-dir", default=None, help="path to directory where spec yamls should be saved"
)
savespecfile.set_defaults(func=save_specfile_fn)
# Sync buildcache entries from one mirror to another
sync = subparsers.add_parser("sync", help=sync_fn.__doc__)
sync.add_argument(
"--manifest-glob",
default=None,
help="A quoted glob pattern identifying copy manifest files",
"--manifest-glob", help="a quoted glob pattern identifying copy manifest files"
)
source = sync.add_mutually_exclusive_group(required=False)
# TODO: remove in Spack 0.21
source.add_argument(
"--src-directory",
metavar="DIRECTORY",
dest="src_mirror_flag",
type=arguments.mirror_directory,
help="Source mirror as a local file path (deprecated)",
)
# TODO: remove in Spack 0.21
source.add_argument(
"--src-mirror-name",
metavar="MIRROR_NAME",
dest="src_mirror_flag",
type=arguments.mirror_name,
help="Name of the source mirror (deprecated)",
)
# TODO: remove in Spack 0.21
source.add_argument(
"--src-mirror-url",
metavar="MIRROR_URL",
dest="src_mirror_flag",
type=arguments.mirror_url,
help="URL of the source mirror (deprecated)",
)
# TODO: only support this in 0.21
source.add_argument(
sync.add_argument(
"src_mirror",
metavar="source mirror",
type=arguments.mirror_name_or_url,
help="Source mirror name, path, or URL",
nargs="?",
help="source mirror name, path, or URL",
)
dest = sync.add_mutually_exclusive_group(required=False)
# TODO: remove in Spack 0.21
dest.add_argument(
"--dest-directory",
metavar="DIRECTORY",
dest="dest_mirror_flag",
type=arguments.mirror_directory,
help="Destination mirror as a local file path (deprecated)",
)
# TODO: remove in Spack 0.21
dest.add_argument(
"--dest-mirror-name",
metavar="MIRROR_NAME",
type=arguments.mirror_name,
dest="dest_mirror_flag",
help="Name of the destination mirror (deprecated)",
)
# TODO: remove in Spack 0.21
dest.add_argument(
"--dest-mirror-url",
metavar="MIRROR_URL",
dest="dest_mirror_flag",
type=arguments.mirror_url,
help="URL of the destination mirror (deprecated)",
)
# TODO: only support this in 0.21
dest.add_argument(
sync.add_argument(
"dest_mirror",
metavar="destination mirror",
type=arguments.mirror_name_or_url,
help="Destination mirror name, path, or URL",
nargs="?",
help="destination mirror name, path, or URL",
)
sync.set_defaults(func=sync_fn)
@@ -344,46 +241,15 @@ def setup_parser(subparser):
update_index = subparsers.add_parser(
"update-index", aliases=["rebuild-index"], help=update_index_fn.__doc__
)
update_index_out = update_index.add_mutually_exclusive_group(required=True)
# TODO: remove in Spack 0.21
update_index_out.add_argument(
"-d",
"--directory",
metavar="directory",
dest="mirror_flag",
type=arguments.mirror_directory,
help="local directory where buildcaches will be written (deprecated)",
)
# TODO: remove in Spack 0.21
update_index_out.add_argument(
"-m",
"--mirror-name",
metavar="mirror-name",
dest="mirror_flag",
type=arguments.mirror_name,
help="name of the mirror where buildcaches will be written (deprecated)",
)
# TODO: remove in Spack 0.21
update_index_out.add_argument(
"--mirror-url",
metavar="mirror-url",
dest="mirror_flag",
type=arguments.mirror_url,
help="URL of the mirror where buildcaches will be written (deprecated)",
)
# TODO: require from Spack 0.21
update_index_out.add_argument(
"mirror",
type=arguments.mirror_name_or_url,
help="Destination mirror name, path, or URL",
nargs="?",
update_index.add_argument(
"mirror", type=arguments.mirror_name_or_url, help="destination mirror name, path, or URL"
)
update_index.add_argument(
"-k",
"--keys",
default=False,
action="store_true",
help="If provided, key index will be updated as well as package index",
help="if provided, key index will be updated as well as package index",
)
update_index.set_defaults(func=update_index_fn)
@@ -436,32 +302,12 @@ def _concrete_spec_from_args(args):
def push_fn(args):
"""create a binary package and push it to a mirror"""
if args.mirror_flag:
mirror = args.mirror_flag
elif not args.mirror:
raise ValueError("No mirror provided")
else:
mirror = arguments.mirror_name_or_url(args.mirror)
if args.mirror_flag:
tty.warn(
"Using flags to specify mirrors is deprecated and will be removed in "
"Spack 0.21, use positional arguments instead."
)
if args.rel:
tty.warn("The --rel flag is deprecated and will be removed in Spack 0.21")
# TODO: remove this in 0.21. If we have mirror_flag, the first
# spec is in the positional mirror arg due to argparse limitations.
input_specs = args.specs
if args.mirror_flag and args.mirror:
input_specs.insert(0, args.mirror)
mirror = arguments.mirror_name_or_url(args.mirror)
url = mirror.push_url
specs = bindist.specs_to_be_packaged(
_matching_specs(input_specs, args.spec_file),
_matching_specs(args.specs, args.spec_file),
root="package" in args.things_to_install,
dependencies="dependencies" in args.things_to_install,
)
@@ -486,7 +332,6 @@ def push_fn(args):
url,
bindist.PushOptions(
force=args.force,
relative=args.rel,
unsigned=args.unsigned,
allow_root=args.allow_root,
key=args.key,
@@ -524,9 +369,6 @@ def install_fn(args):
if not args.specs:
tty.die("a spec argument is required to install from a buildcache")
if args.allow_root:
tty.warn("The --allow-root flag is deprecated and will be removed in Spack 0.21")
query = bindist.BinaryCacheQuery(all_architectures=args.otherarch)
matches = spack.store.find(args.specs, multiple=args.multiple, query_fn=query)
for match in matches:
@@ -564,9 +406,7 @@ def keys_fn(args):
def preview_fn(args):
"""analyze an installed spec and reports whether executables
and libraries are relocatable
"""
"""analyze an installed spec and reports whether executables and libraries are relocatable"""
constraints = spack.cmd.parse_specs(args.specs)
specs = spack.store.find(constraints, multiple=True)
@@ -578,11 +418,11 @@ def preview_fn(args):
def check_fn(args):
"""Check specs (either a single spec from --spec, or else the full set
of release specs) against remote binary mirror(s) to see if any need
to be rebuilt. This command uses the process exit code to indicate
its result, specifically, if the exit code is non-zero, then at least
one of the indicated specs needs to be rebuilt.
"""check specs against remote binary mirror(s) to see if any need to be rebuilt
either a single spec from --spec, or else the full set of release specs. this command uses the
process exit code to indicate its result, specifically, if the exit code is non-zero, then at
least one of the indicated specs needs to be rebuilt
"""
if args.spec or args.spec_file:
specs = [_concrete_spec_from_args(args)]
@@ -613,10 +453,12 @@ def check_fn(args):
def download_fn(args):
"""Download buildcache entry from a remote mirror to local folder. This
command uses the process exit code to indicate its result, specifically,
a non-zero exit code indicates that the command failed to download at
least one of the required buildcache components."""
"""download buildcache entry from a remote mirror to local folder
this command uses the process exit code to indicate its result, specifically, a non-zero exit
code indicates that the command failed to download at least one of the required buildcache
components
"""
if not args.spec and not args.spec_file:
tty.msg("No specs provided, exiting.")
return
@@ -633,19 +475,18 @@ def download_fn(args):
def get_buildcache_name_fn(args):
"""Get name (prefix) of buildcache entries for this spec"""
"""get name (prefix) of buildcache entries for this spec"""
spec = _concrete_spec_from_args(args)
buildcache_name = bindist.tarball_name(spec, "")
print("{0}".format(buildcache_name))
def save_specfile_fn(args):
"""Get full spec for dependencies, relative to root spec, and write them
to files in the specified output directory. Uses exit code to signal
success or failure. An exit code of zero means the command was likely
successful. If any errors or exceptions are encountered, or if expected
command-line arguments are not provided, then the exit code will be
non-zero.
"""get full spec for dependencies and write them to files in the specified output directory
uses exit code to signal success or failure. an exit code of zero means the command was likely
successful. if any errors or exceptions are encountered, or if expected command-line arguments
are not provided, then the exit code will be non-zero
"""
if not args.root_spec and not args.root_specfile:
tty.msg("No root spec provided, exiting.")
@@ -699,32 +540,19 @@ def copy_buildcache_file(src_url, dest_url, local_path=None):
def sync_fn(args):
"""Syncs binaries (and associated metadata) from one mirror to another.
Requires an active environment in order to know which specs to sync.
"""sync binaries (and associated metadata) from one mirror to another
Args:
src (str): Source mirror URL
dest (str): Destination mirror URL
requires an active environment in order to know which specs to sync
"""
if args.manifest_glob:
manifest_copy(glob.glob(args.manifest_glob))
return 0
# If no manifest_glob, require a source and dest mirror.
# TODO: Simplify in Spack 0.21
if not (args.src_mirror_flag or args.src_mirror) or not (
args.dest_mirror_flag or args.dest_mirror
):
raise ValueError("Source and destination mirror are required.")
if args.src_mirror is None or args.dest_mirror is None:
tty.die("Provide mirrors to sync from and to.")
if args.src_mirror_flag or args.dest_mirror_flag:
tty.warn(
"Using flags to specify mirrors is deprecated and will be removed in "
"Spack 0.21, use positional arguments instead."
)
src_mirror = args.src_mirror_flag if args.src_mirror_flag else args.src_mirror
dest_mirror = args.dest_mirror_flag if args.dest_mirror_flag else args.dest_mirror
src_mirror = args.src_mirror
dest_mirror = args.dest_mirror
src_mirror_url = src_mirror.fetch_url
dest_mirror_url = dest_mirror.push_url
@@ -802,14 +630,8 @@ def update_index(mirror: spack.mirror.Mirror, update_keys=False):
def update_index_fn(args):
"""Update a buildcache index."""
if args.mirror_flag:
tty.warn(
"Using flags to specify mirrors is deprecated and will be removed in "
"Spack 0.21, use positional arguments instead."
)
mirror = args.mirror_flag if args.mirror_flag else args.mirror
update_index(mirror, update_keys=args.keys)
"""update a buildcache index"""
update_index(args.mirror, update_keys=args.keys)
def buildcache(parser, args):

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import sys

View File

@@ -47,40 +47,36 @@ def setup_parser(subparser):
generate.add_argument(
"--output-file",
default=None,
help="""pathname for the generated gitlab ci yaml file
Path to the file where generated jobs file should
be written. Default is .gitlab-ci.yml in the root of
the repository.""",
help="pathname for the generated gitlab ci yaml file\n\n"
"path to the file where generated jobs file should be written. "
"default is .gitlab-ci.yml in the root of the repository",
)
generate.add_argument(
"--copy-to",
default=None,
help="""path to additional directory for job files
This option provides an absolute path to a directory
where the generated jobs yaml file should be copied.
Default is not to copy.""",
help="path to additional directory for job files\n\n"
"this option provides an absolute path to a directory where the generated "
"jobs yaml file should be copied. default is not to copy",
)
generate.add_argument(
"--optimize",
action="store_true",
default=False,
help="""(Experimental) optimize the gitlab yaml file for size
Run the generated document through a series of
optimization passes designed to reduce the size
of the generated file.""",
help="(experimental) optimize the gitlab yaml file for size\n\n"
"run the generated document through a series of optimization passes "
"designed to reduce the size of the generated file",
)
generate.add_argument(
"--dependencies",
action="store_true",
default=False,
help="(Experimental) disable DAG scheduling; use " ' "plain" dependencies.',
help="(experimental) disable DAG scheduling (use 'plain' dependencies)",
)
generate.add_argument(
"--buildcache-destination",
default=None,
help="Override the mirror configured in the environment (spack.yaml) "
+ "in order to push binaries from the generated pipeline to a "
+ "different location.",
help="override the mirror configured in the environment\n\n"
"allows for pushing binaries from the generated pipeline to a different location",
)
prune_group = generate.add_mutually_exclusive_group()
prune_group.add_argument(
@@ -88,45 +84,37 @@ def setup_parser(subparser):
action="store_true",
dest="prune_dag",
default=True,
help="""skip up-to-date specs
Do not generate jobs for specs that are up-to-date
on the mirror.""",
help="skip up-to-date specs\n\n"
"do not generate jobs for specs that are up-to-date on the mirror",
)
prune_group.add_argument(
"--no-prune-dag",
action="store_false",
dest="prune_dag",
default=True,
help="""process up-to-date specs
Generate jobs for specs even when they are up-to-date
on the mirror.""",
help="process up-to-date specs\n\n"
"generate jobs for specs even when they are up-to-date on the mirror",
)
generate.add_argument(
"--check-index-only",
action="store_true",
dest="index_only",
default=False,
help="""only check spec state from buildcache indices
Spack always checks specs against configured binary
mirrors, regardless of the DAG pruning option.
If enabled, Spack will assume all remote buildcache
indices are up-to-date when assessing whether the spec
on the mirror, if present, is up-to-date. This has the
benefit of reducing pipeline generation time but at the
potential cost of needlessly rebuilding specs when the
indices are outdated.
If not enabled, Spack will fetch remote spec files
directly to assess whether the spec on the mirror is
up-to-date.""",
help="only check spec state from buildcache indices\n\n"
"Spack always checks specs against configured binary mirrors, regardless of the DAG "
"pruning option. if enabled, Spack will assume all remote buildcache indices are "
"up-to-date when assessing whether the spec on the mirror, if present, is up-to-date. "
"this has the benefit of reducing pipeline generation time but at the potential cost of "
"needlessly rebuilding specs when the indices are outdated. if not enabled, Spack will "
"fetch remote spec files directly to assess whether the spec on the mirror is up-to-date",
)
generate.add_argument(
"--artifacts-root",
default=None,
help="""path to the root of the artifacts directory
If provided, concrete environment files (spack.yaml,
spack.lock) will be generated under this directory.
Their location will be passed to generated child jobs
through the SPACK_CONCRETE_ENVIRONMENT_PATH variable.""",
help="path to the root of the artifacts directory\n\n"
"if provided, concrete environment files (spack.yaml, spack.lock) will be generated under "
"this directory. their location will be passed to generated child jobs through the "
"SPACK_CONCRETE_ENVIRONMENT_PATH variable",
)
generate.set_defaults(func=ci_generate)
@@ -150,13 +138,13 @@ def setup_parser(subparser):
"--tests",
action="store_true",
default=False,
help="""run stand-alone tests after the build""",
help="run stand-alone tests after the build",
)
rebuild.add_argument(
"--fail-fast",
action="store_true",
default=False,
help="""stop stand-alone tests after the first failure""",
help="stop stand-alone tests after the first failure",
)
rebuild.set_defaults(func=ci_rebuild)
@@ -166,10 +154,10 @@ def setup_parser(subparser):
description=deindent(ci_reproduce.__doc__),
help=spack.cmd.first_line(ci_reproduce.__doc__),
)
reproduce.add_argument("job_url", help="Url of job artifacts bundle")
reproduce.add_argument("job_url", help="URL of job artifacts bundle")
reproduce.add_argument(
"--working-dir",
help="Where to unpack artifacts",
help="where to unpack artifacts",
default=os.path.join(os.getcwd(), "ci_reproduction"),
)
@@ -177,12 +165,12 @@ def setup_parser(subparser):
def ci_generate(args):
"""Generate jobs file from a CI-aware spack file.
"""generate jobs file from a CI-aware spack file
If you want to report the results on CDash, you will need to set
the SPACK_CDASH_AUTH_TOKEN before invoking this command. The
value must be the CDash authorization token needed to create a
build group and register all generated jobs under it."""
if you want to report the results on CDash, you will need to set the SPACK_CDASH_AUTH_TOKEN
before invoking this command. the value must be the CDash authorization token needed to create
a build group and register all generated jobs under it
"""
env = spack.cmd.require_active_env(cmd_name="ci generate")
output_file = args.output_file
@@ -223,10 +211,11 @@ def ci_generate(args):
def ci_reindex(args):
"""Rebuild the buildcache index for the remote mirror.
"""rebuild the buildcache index for the remote mirror
Use the active, gitlab-enabled environment to rebuild the buildcache
index for the associated mirror."""
use the active, gitlab-enabled environment to rebuild the buildcache index for the associated
mirror
"""
env = spack.cmd.require_active_env(cmd_name="ci rebuild-index")
yaml_root = env.manifest[ev.TOP_LEVEL_KEY]
@@ -242,10 +231,11 @@ def ci_reindex(args):
def ci_rebuild(args):
"""Rebuild a spec if it is not on the remote mirror.
"""rebuild a spec if it is not on the remote mirror
Check a single spec against the remote mirror, and rebuild it from
source if the mirror does not contain the hash."""
check a single spec against the remote mirror, and rebuild it from source if the mirror does
not contain the hash
"""
env = spack.cmd.require_active_env(cmd_name="ci rebuild")
# Make sure the environment is "gitlab-enabled", or else there's nothing
@@ -274,7 +264,6 @@ def ci_rebuild(args):
signing_key = os.environ.get("SPACK_SIGNING_KEY")
job_spec_pkg_name = os.environ.get("SPACK_JOB_SPEC_PKG_NAME")
job_spec_dag_hash = os.environ.get("SPACK_JOB_SPEC_DAG_HASH")
compiler_action = os.environ.get("SPACK_COMPILER_ACTION")
spack_pipeline_type = os.environ.get("SPACK_PIPELINE_TYPE")
remote_mirror_override = os.environ.get("SPACK_REMOTE_MIRROR_OVERRIDE")
remote_mirror_url = os.environ.get("SPACK_REMOTE_MIRROR_URL")
@@ -295,7 +284,6 @@ def ci_rebuild(args):
tty.debug("pipeline_artifacts_dir = {0}".format(pipeline_artifacts_dir))
tty.debug("remote_mirror_url = {0}".format(remote_mirror_url))
tty.debug("job_spec_pkg_name = {0}".format(job_spec_pkg_name))
tty.debug("compiler_action = {0}".format(compiler_action))
# Query the environment manifest to find out whether we're reporting to a
# CDash instance, and if so, gather some information from the manifest to
@@ -411,14 +399,6 @@ def ci_rebuild(args):
if signing_key:
spack_ci.import_signing_key(signing_key)
# Depending on the specifics of this job, we might need to turn on the
# "config:install_missing compilers" option (to build this job spec
# with a bootstrapped compiler), or possibly run "spack compiler find"
# (to build a bootstrap compiler or one of its deps in a
# compiler-agnostic way), or maybe do nothing at all (to build a spec
# using a compiler already installed on the target system).
spack_ci.configure_compilers(compiler_action)
# Write this job's spec json into the reproduction directory, and it will
# also be used in the generated "spack install" command to install the spec
tty.debug("job concrete spec path: {0}".format(job_spec_json_path))
@@ -616,7 +596,7 @@ def ci_rebuild(args):
)
reports_dir = fs.join_path(os.getcwd(), "cdash_report")
if args.tests and broken_tests:
tty.warn("Unable to run stand-alone tests since listed in " "ci's 'broken-tests-packages'")
tty.warn("Unable to run stand-alone tests since listed in ci's 'broken-tests-packages'")
if cdash_handler:
msg = "Package is listed in ci's broken-tests-packages"
cdash_handler.report_skipped(job_spec, reports_dir, reason=msg)
@@ -659,7 +639,7 @@ def ci_rebuild(args):
tty.warn("No recognized test results reporting option")
else:
tty.warn("Unable to run stand-alone tests due to unsuccessful " "installation")
tty.warn("Unable to run stand-alone tests due to unsuccessful installation")
if cdash_handler:
msg = "Failed to install the package"
cdash_handler.report_skipped(job_spec, reports_dir, reason=msg)
@@ -738,10 +718,11 @@ def ci_rebuild(args):
def ci_reproduce(args):
"""Generate instructions for reproducing the spec rebuild job.
"""generate instructions for reproducing the spec rebuild job
Artifacts of the provided gitlab pipeline rebuild job's URL will be
used to derive instructions for reproducing the build locally."""
artifacts of the provided gitlab pipeline rebuild job's URL will be used to derive
instructions for reproducing the build locally
"""
job_url = args.job_url
work_dir = args.working_dir

View File

@@ -48,7 +48,7 @@ def get_origin_info(remote):
)
except ProcessError:
origin_url = _SPACK_UPSTREAM
tty.warn("No git repository found; " "using default upstream URL: %s" % origin_url)
tty.warn("No git repository found; using default upstream URL: %s" % origin_url)
return (origin_url.strip(), branch.strip())
@@ -69,7 +69,7 @@ def clone(parser, args):
files_in_the_way = os.listdir(prefix)
if files_in_the_way:
tty.die(
"There are already files there! " "Delete these files before boostrapping spack.",
"There are already files there! Delete these files before boostrapping spack.",
*files_in_the_way,
)

View File

@@ -3,17 +3,22 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import copy
import os
import re
import sys
from argparse import ArgumentParser, Namespace
from typing import IO, Any, Callable, Dict, Sequence, Set
import llnl.util.filesystem as fs
import llnl.util.tty as tty
from llnl.util.argparsewriter import ArgparseCompletionWriter, ArgparseRstWriter, ArgparseWriter
from llnl.util.argparsewriter import (
ArgparseCompletionWriter,
ArgparseRstWriter,
ArgparseWriter,
Command,
)
from llnl.util.tty.colify import colify
import spack.cmd
@@ -27,12 +32,12 @@
#: list of command formatters
formatters = {}
formatters: Dict[str, Callable[[Namespace, IO], None]] = {}
#: standard arguments for updating completion scripts
#: we iterate through these when called with --update-completion
update_completion_args = {
update_completion_args: Dict[str, Dict[str, Any]] = {
"bash": {
"aliases": True,
"format": "bash",
@@ -42,13 +47,25 @@
}
def formatter(func):
"""Decorator used to register formatters"""
def formatter(func: Callable[[Namespace, IO], None]) -> Callable[[Namespace, IO], None]:
"""Decorator used to register formatters.
Args:
func: Formatting function.
Returns:
The same function.
"""
formatters[func.__name__] = func
return func
def setup_parser(subparser):
def setup_parser(subparser: ArgumentParser) -> None:
"""Set up the argument parser.
Args:
subparser: Preliminary argument parser.
"""
subparser.add_argument(
"--update-completion",
action="store_true",
@@ -91,18 +108,34 @@ class SpackArgparseRstWriter(ArgparseRstWriter):
def __init__(
self,
prog,
out=None,
aliases=False,
documented_commands=[],
rst_levels=["-", "-", "^", "~", ":", "`"],
prog: str,
out: IO = sys.stdout,
aliases: bool = False,
documented_commands: Set[str] = set(),
rst_levels: Sequence[str] = ["-", "-", "^", "~", ":", "`"],
):
out = sys.stdout if out is None else out
super(SpackArgparseRstWriter, self).__init__(prog, out, aliases, rst_levels)
"""Initialize a new SpackArgparseRstWriter instance.
Args:
prog: Program name.
out: File object to write to.
aliases: Whether or not to include subparsers for aliases.
documented_commands: Set of commands with additional documentation.
rst_levels: List of characters for rst section headings.
"""
super().__init__(prog, out, aliases, rst_levels)
self.documented = documented_commands
def usage(self, *args):
string = super(SpackArgparseRstWriter, self).usage(*args)
def usage(self, usage: str) -> str:
"""Example usage of a command.
Args:
usage: Command usage.
Returns:
Usage of a command.
"""
string = super().usage(usage)
cmd = self.parser.prog.replace(" ", "-")
if cmd in self.documented:
@@ -112,11 +145,21 @@ def usage(self, *args):
class SubcommandWriter(ArgparseWriter):
def format(self, cmd):
"""Write argparse output as a list of subcommands."""
def format(self, cmd: Command) -> str:
"""Return the string representation of a single node in the parser tree.
Args:
cmd: Parsed information about a command or subcommand.
Returns:
String representation of this subcommand.
"""
return " " * self.level + cmd.prog + "\n"
_positional_to_subroutine = {
_positional_to_subroutine: Dict[str, str] = {
"package": "_all_packages",
"spec": "_all_packages",
"filter": "_all_packages",
@@ -138,7 +181,19 @@ def format(self, cmd):
class BashCompletionWriter(ArgparseCompletionWriter):
"""Write argparse output as bash programmable tab completion."""
def body(self, positionals, optionals, subcommands):
def body(
self, positionals: Sequence[str], optionals: Sequence[str], subcommands: Sequence[str]
) -> str:
"""Return the body of the function.
Args:
positionals: List of positional arguments.
optionals: List of optional arguments.
subcommands: List of subcommand parsers.
Returns:
Function body.
"""
if positionals:
return """
if $list_options
@@ -168,7 +223,15 @@ def body(self, positionals, optionals, subcommands):
self.optionals(optionals)
)
def positionals(self, positionals):
def positionals(self, positionals: Sequence[str]) -> str:
"""Return the syntax for reporting positional arguments.
Args:
positionals: List of positional arguments.
Returns:
Syntax for positional arguments.
"""
# If match found, return function name
for positional in positionals:
for key, value in _positional_to_subroutine.items():
@@ -178,22 +241,49 @@ def positionals(self, positionals):
# If no matches found, return empty list
return 'SPACK_COMPREPLY=""'
def optionals(self, optionals):
def optionals(self, optionals: Sequence[str]) -> str:
"""Return the syntax for reporting optional flags.
Args:
optionals: List of optional arguments.
Returns:
Syntax for optional flags.
"""
return 'SPACK_COMPREPLY="{0}"'.format(" ".join(optionals))
def subcommands(self, subcommands):
def subcommands(self, subcommands: Sequence[str]) -> str:
"""Return the syntax for reporting subcommands.
Args:
subcommands: List of subcommand parsers.
Returns:
Syntax for subcommand parsers
"""
return 'SPACK_COMPREPLY="{0}"'.format(" ".join(subcommands))
@formatter
def subcommands(args, out):
def subcommands(args: Namespace, out: IO) -> None:
"""Hierarchical tree of subcommands.
args:
args: Command-line arguments.
out: File object to write to.
"""
parser = spack.main.make_argument_parser()
spack.main.add_all_commands(parser)
writer = SubcommandWriter(parser.prog, out, args.aliases)
writer.write(parser)
def rst_index(out):
def rst_index(out: IO) -> None:
"""Generate an index of all commands.
Args:
out: File object to write to.
"""
out.write("\n")
index = spack.main.index_commands()
@@ -221,13 +311,19 @@ def rst_index(out):
@formatter
def rst(args, out):
def rst(args: Namespace, out: IO) -> None:
"""ReStructuredText documentation of subcommands.
args:
args: Command-line arguments.
out: File object to write to.
"""
# create a parser with all commands
parser = spack.main.make_argument_parser()
spack.main.add_all_commands(parser)
# extract cross-refs of the form `_cmd-spack-<cmd>:` from rst files
documented_commands = set()
documented_commands: Set[str] = set()
for filename in args.rst_files:
with open(filename) as f:
for line in f:
@@ -245,7 +341,13 @@ def rst(args, out):
@formatter
def names(args, out):
def names(args: Namespace, out: IO) -> None:
"""Simple list of top-level commands.
args:
args: Command-line arguments.
out: File object to write to.
"""
commands = copy.copy(spack.cmd.all_commands())
if args.aliases:
@@ -255,7 +357,13 @@ def names(args, out):
@formatter
def bash(args, out):
def bash(args: Namespace, out: IO) -> None:
"""Bash tab-completion script.
args:
args: Command-line arguments.
out: File object to write to.
"""
parser = spack.main.make_argument_parser()
spack.main.add_all_commands(parser)
@@ -263,7 +371,13 @@ def bash(args, out):
writer.write(parser)
def prepend_header(args, out):
def prepend_header(args: Namespace, out: IO) -> None:
"""Prepend header text at the beginning of a file.
Args:
args: Command-line arguments.
out: File object to write to.
"""
if not args.header:
return
@@ -271,10 +385,14 @@ def prepend_header(args, out):
out.write(header.read())
def _commands(parser, args):
def _commands(parser: ArgumentParser, args: Namespace) -> None:
"""This is the 'regular' command, which can be called multiple times.
See ``commands()`` below for ``--update-completion`` handling.
Args:
parser: Argument parser.
args: Command-line arguments.
"""
formatter = formatters[args.format]
@@ -296,12 +414,15 @@ def _commands(parser, args):
formatter(args, sys.stdout)
def update_completion(parser, args):
def update_completion(parser: ArgumentParser, args: Namespace) -> None:
"""Iterate through the shells and update the standard completion files.
This is a convenience method to avoid calling this command many
times, and to simplify completion update for developers.
Args:
parser: Argument parser.
args: Command-line arguments.
"""
for shell, shell_args in update_completion_args.items():
for attr, value in shell_args.items():
@@ -309,14 +430,20 @@ def update_completion(parser, args):
_commands(parser, args)
def commands(parser, args):
def commands(parser: ArgumentParser, args: Namespace) -> None:
"""Main function that calls formatter functions.
Args:
parser: Argument parser.
args: Command-line arguments.
"""
if args.update_completion:
if args.format != "names" or any([args.aliases, args.update, args.header]):
tty.die("--update-completion can only be specified alone.")
# this runs the command multiple times with different arguments
return update_completion(parser, args)
update_completion(parser, args)
else:
# run commands normally
return _commands(parser, args)
_commands(parser, args)

View File

@@ -36,7 +36,10 @@ def shell_init_instructions(cmd, equivalent):
" source %s/setup-env.fish" % spack.paths.share_path,
"",
color.colorize("@*c{For Windows batch:}"),
" source %s/spack_cmd.bat" % spack.paths.share_path,
" %s\\spack_cmd.bat" % spack.paths.bin_path,
"",
color.colorize("@*c{For PowerShell:}"),
" %s\\setup-env.ps1" % spack.paths.share_path,
"",
"Or, if you do not want to use shell support, run "
+ ("one of these" if shell_specific else "this")
@@ -50,6 +53,7 @@ def shell_init_instructions(cmd, equivalent):
equivalent.format(sh_arg="--csh ") + " # csh/tcsh",
equivalent.format(sh_arg="--fish") + " # fish",
equivalent.format(sh_arg="--bat ") + " # batch",
equivalent.format(sh_arg="--pwsh") + " # powershell",
]
else:
msg += [" " + equivalent]

View File

@@ -265,7 +265,7 @@ def recurse_dependents():
"--dependents",
action="store_true",
dest="dependents",
help="also uninstall any packages that depend on the ones given " "via command line",
help="also uninstall any packages that depend on the ones given via command line",
)
@@ -286,7 +286,7 @@ def deptype():
"--deptype",
action=DeptypeAction,
default=dep.all_deptypes,
help="comma-separated list of deptypes to traverse\ndefault=%s"
help="comma-separated list of deptypes to traverse\n\ndefault=%s"
% ",".join(dep.all_deptypes),
)
@@ -350,9 +350,9 @@ def install_status():
"--install-status",
action="store_true",
default=True,
help="show install status of packages. packages can be: "
help="show install status of packages\n\npackages can be: "
"installed [+], missing and needed by an installed package [-], "
"installed in and upstream instance [^], "
"installed in an upstream instance [^], "
"or not installed (no annotation)",
)
@@ -393,24 +393,23 @@ def add_cdash_args(subparser, add_help):
cdash_help = {}
if add_help:
cdash_help["upload-url"] = "CDash URL where reports will be uploaded"
cdash_help[
"build"
] = """The name of the build that will be reported to CDash.
Defaults to spec of the package to operate on."""
cdash_help[
"site"
] = """The site name that will be reported to CDash.
Defaults to current system hostname."""
cdash_help[
"track"
] = """Results will be reported to this group on CDash.
Defaults to Experimental."""
cdash_help[
"buildstamp"
] = """Instead of letting the CDash reporter prepare the
buildstamp which, when combined with build name, site and project,
uniquely identifies the build, provide this argument to identify
the build yourself. Format: %%Y%%m%%d-%%H%%M-[cdash-track]"""
cdash_help["build"] = (
"name of the build that will be reported to CDash\n\n"
"defaults to spec of the package to operate on"
)
cdash_help["site"] = (
"site name that will be reported to CDash\n\n" "defaults to current system hostname"
)
cdash_help["track"] = (
"results will be reported to this group on CDash\n\n" "defaults to Experimental"
)
cdash_help["buildstamp"] = (
"use custom buildstamp\n\n"
"instead of letting the CDash reporter prepare the "
"buildstamp which, when combined with build name, site and project, "
"uniquely identifies the build, provide this argument to identify "
"the build yourself. format: %%Y%%m%%d-%%H%%M-[cdash-track]"
)
else:
cdash_help["upload-url"] = argparse.SUPPRESS
cdash_help["build"] = argparse.SUPPRESS
@@ -479,7 +478,7 @@ def __init__(
# substituting '_' for ':'.
dest = dest.replace(":", "_")
super(ConfigSetAction, self).__init__(
super().__init__(
option_strings=option_strings,
dest=dest,
nargs=0,
@@ -542,16 +541,16 @@ def add_s3_connection_args(subparser, add_help):
"--s3-access-key-id", help="ID string to use to connect to this S3 mirror"
)
subparser.add_argument(
"--s3-access-key-secret", help="Secret string to use to connect to this S3 mirror"
"--s3-access-key-secret", help="secret string to use to connect to this S3 mirror"
)
subparser.add_argument(
"--s3-access-token", help="Access Token to use to connect to this S3 mirror"
"--s3-access-token", help="access token to use to connect to this S3 mirror"
)
subparser.add_argument(
"--s3-profile", help="S3 profile name to use to connect to this S3 mirror", default=None
)
subparser.add_argument(
"--s3-endpoint-url", help="Endpoint URL to use to connect to this S3 mirror"
"--s3-endpoint-url", help="endpoint URL to use to connect to this S3 mirror"
)

View File

@@ -2,8 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import os

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import sys

View File

@@ -14,18 +14,16 @@
def setup_parser(subparser):
subparser.add_argument(
"-f", "--force", action="store_true", help="Re-concretize even if already concretized."
"-f", "--force", action="store_true", help="re-concretize even if already concretized"
)
subparser.add_argument(
"--test",
default=None,
choices=["root", "all"],
help="""Concretize with test dependencies. When 'root' is chosen, test
dependencies are only added for the environment's root specs. When 'all' is
chosen, test dependencies are enabled for all packages in the environment.""",
help="concretize with test dependencies of only root packages or all packages",
)
subparser.add_argument(
"-q", "--quiet", action="store_true", help="Don't print concretized specs"
"-q", "--quiet", action="store_true", help="don't print concretized specs"
)
spack.cmd.common.arguments.add_concretizer_args(subparser)

View File

@@ -2,8 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import collections
import os
import shutil
@@ -44,7 +42,7 @@ def setup_parser(subparser):
get_parser = sp.add_parser("get", help="print configuration values")
get_parser.add_argument(
"section",
help="configuration section to print. " "options: %(choices)s",
help="configuration section to print\n\noptions: %(choices)s",
nargs="?",
metavar="section",
choices=spack.config.section_schemas,
@@ -55,7 +53,7 @@ def setup_parser(subparser):
)
blame_parser.add_argument(
"section",
help="configuration section to print. " "options: %(choices)s",
help="configuration section to print\n\noptions: %(choices)s",
metavar="section",
choices=spack.config.section_schemas,
)
@@ -63,7 +61,7 @@ def setup_parser(subparser):
edit_parser = sp.add_parser("edit", help="edit configuration file")
edit_parser.add_argument(
"section",
help="configuration section to edit. " "options: %(choices)s",
help="configuration section to edit\n\noptions: %(choices)s",
metavar="section",
nargs="?",
choices=spack.config.section_schemas,
@@ -78,7 +76,7 @@ def setup_parser(subparser):
add_parser.add_argument(
"path",
nargs="?",
help="colon-separated path to config that should be added," " e.g. 'config:default:true'",
help="colon-separated path to config that should be added, e.g. 'config:default:true'",
)
add_parser.add_argument("-f", "--file", help="file from which to set all config values")
@@ -90,7 +88,7 @@ def setup_parser(subparser):
"--local",
action="store_true",
default=False,
help="Set packages preferences based on local installs, rather " "than upstream.",
help="set packages preferences based on local installs, rather than upstream",
)
remove_parser = sp.add_parser("remove", aliases=["rm"], help="remove configuration parameters")
@@ -159,7 +157,7 @@ def config_get(args):
tty.die("environment has no %s file" % ev.manifest_name)
else:
tty.die("`spack config get` requires a section argument " "or an active environment.")
tty.die("`spack config get` requires a section argument or an active environment.")
def config_blame(args):
@@ -182,7 +180,7 @@ def config_edit(args):
# If we aren't editing a spack.yaml file, get config path from scope.
scope, section = _get_scope_and_section(args)
if not scope and not section:
tty.die("`spack config edit` requires a section argument " "or an active environment.")
tty.die("`spack config edit` requires a section argument or an active environment.")
config_file = spack.config.config.get_config_filename(scope, section)
if args.print_file:
@@ -376,7 +374,7 @@ def config_revert(args):
proceed = True
if not args.yes_to_all:
msg = "The following scopes will be restored from the corresponding" " backup files:\n"
msg = "The following scopes will be restored from the corresponding backup files:\n"
for entry in to_be_restored:
msg += "\t[scope={0.scope}, bkp={0.bkp}]\n".format(entry)
msg += "This operation cannot be undone."

View File

@@ -10,7 +10,7 @@
import spack.container
import spack.container.images
description = "creates recipes to build images for different" " container runtimes"
description = "creates recipes to build images for different container runtimes"
section = "container"
level = "long"

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import re
import urllib.parse
@@ -71,7 +69,7 @@ class {class_name}({base_class_name}):
'''
class BundlePackageTemplate(object):
class BundlePackageTemplate:
"""
Provides the default values to be used for a bundle package file template.
"""
@@ -122,7 +120,7 @@ def install(self, spec, prefix):
url_line = ' url = "{url}"'
def __init__(self, name, url, versions):
super(PackageTemplate, self).__init__(name, versions)
super().__init__(name, versions)
self.url_def = self.url_line.format(url=url)
@@ -200,7 +198,7 @@ def __init__(self, name, url, *args, **kwargs):
# Make it more obvious that we are renaming the package
tty.msg("Changing package name from {0} to lua-{0}".format(name))
name = "lua-{0}".format(name)
super(LuaPackageTemplate, self).__init__(name, url, *args, **kwargs)
super().__init__(name, url, *args, **kwargs)
class MesonPackageTemplate(PackageTemplate):
@@ -308,7 +306,7 @@ def __init__(self, name, url, *args, **kwargs):
tty.msg("Changing package name from {0} to rkt-{0}".format(name))
name = "rkt-{0}".format(name)
self.body_def = self.body_def.format(name[4:])
super(RacketPackageTemplate, self).__init__(name, url, *args, **kwargs)
super().__init__(name, url, *args, **kwargs)
class PythonPackageTemplate(PackageTemplate):
@@ -400,7 +398,7 @@ def __init__(self, name, url, *args, **kwargs):
+ self.url_line
)
super(PythonPackageTemplate, self).__init__(name, url, *args, **kwargs)
super().__init__(name, url, *args, **kwargs)
class RPackageTemplate(PackageTemplate):
@@ -439,7 +437,7 @@ def __init__(self, name, url, *args, **kwargs):
if bioc:
self.url_line = ' url = "{0}"\n' ' bioc = "{1}"'.format(url, r_name)
super(RPackageTemplate, self).__init__(name, url, *args, **kwargs)
super().__init__(name, url, *args, **kwargs)
class PerlmakePackageTemplate(PackageTemplate):
@@ -466,7 +464,7 @@ def __init__(self, name, *args, **kwargs):
tty.msg("Changing package name from {0} to perl-{0}".format(name))
name = "perl-{0}".format(name)
super(PerlmakePackageTemplate, self).__init__(name, *args, **kwargs)
super().__init__(name, *args, **kwargs)
class PerlbuildPackageTemplate(PerlmakePackageTemplate):
@@ -499,7 +497,7 @@ def __init__(self, name, *args, **kwargs):
tty.msg("Changing package name from {0} to octave-{0}".format(name))
name = "octave-{0}".format(name)
super(OctavePackageTemplate, self).__init__(name, *args, **kwargs)
super().__init__(name, *args, **kwargs)
class RubyPackageTemplate(PackageTemplate):
@@ -527,7 +525,7 @@ def __init__(self, name, *args, **kwargs):
tty.msg("Changing package name from {0} to ruby-{0}".format(name))
name = "ruby-{0}".format(name)
super(RubyPackageTemplate, self).__init__(name, *args, **kwargs)
super().__init__(name, *args, **kwargs)
class MakefilePackageTemplate(PackageTemplate):
@@ -572,7 +570,7 @@ def __init__(self, name, *args, **kwargs):
tty.msg("Changing package name from {0} to py-{0}".format(name))
name = "py-{0}".format(name)
super(SIPPackageTemplate, self).__init__(name, *args, **kwargs)
super().__init__(name, *args, **kwargs)
templates = {
@@ -614,7 +612,7 @@ def setup_parser(subparser):
"--template",
metavar="TEMPLATE",
choices=sorted(templates.keys()),
help="build system template to use. options: %(choices)s",
help="build system template to use\n\noptions: %(choices)s",
)
subparser.add_argument(
"-r", "--repo", help="path to a repository where the package should be created"
@@ -622,7 +620,7 @@ def setup_parser(subparser):
subparser.add_argument(
"-N",
"--namespace",
help="specify a namespace for the package. must be the namespace of "
help="specify a namespace for the package\n\nmust be the namespace of "
"a repository registered with Spack",
)
subparser.add_argument(
@@ -715,7 +713,7 @@ def __call__(self, stage, url):
output = tar("--exclude=*/*/*", "-tf", stage.archive_file, output=str)
except ProcessError:
output = ""
lines = output.split("\n")
lines = output.splitlines()
# Determine the build system based on the files contained
# in the archive.
@@ -880,7 +878,7 @@ def get_build_system(template, url, guesser):
# Use whatever build system the guesser detected
selected_template = guesser.build_system
if selected_template == "generic":
tty.warn("Unable to detect a build system. " "Using a generic package template.")
tty.warn("Unable to detect a build system. Using a generic package template.")
else:
msg = "This package looks like it uses the {0} build system"
tty.msg(msg.format(selected_template))

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import platform
import re

View File

@@ -26,8 +26,8 @@ def setup_parser(subparser):
"--installed",
action="store_true",
default=False,
help="List installed dependencies of an installed spec, "
"instead of possible dependencies of a package.",
help="list installed dependencies of an installed spec "
"instead of possible dependencies of a package",
)
subparser.add_argument(
"-t",

View File

@@ -25,15 +25,15 @@ def setup_parser(subparser):
"--installed",
action="store_true",
default=False,
help="List installed dependents of an installed spec, "
"instead of possible dependents of a package.",
help="list installed dependents of an installed spec "
"instead of possible dependents of a package",
)
subparser.add_argument(
"-t",
"--transitive",
action="store_true",
default=False,
help="Show all transitive dependents.",
help="show all transitive dependents",
)
arguments.add_common_arguments(subparser, ["spec"])

View File

@@ -13,8 +13,6 @@
It is up to the user to ensure binary compatibility between the deprecated
installation and its deprecator.
"""
from __future__ import print_function
import argparse
import os
@@ -28,7 +26,7 @@
from spack.database import InstallStatuses
from spack.error import SpackError
description = "Replace one package with another via symlinks"
description = "replace one package with another via symlinks"
section = "admin"
level = "long"
@@ -48,7 +46,7 @@ def setup_parser(sp):
action="store_true",
default=True,
dest="dependencies",
help="Deprecate dependencies (default)",
help="deprecate dependencies (default)",
)
deps.add_argument(
"-D",
@@ -56,7 +54,7 @@ def setup_parser(sp):
action="store_false",
default=True,
dest="dependencies",
help="Do not deprecate dependencies",
help="do not deprecate dependencies",
)
install = sp.add_mutually_exclusive_group()
@@ -66,7 +64,7 @@ def setup_parser(sp):
action="store_true",
default=False,
dest="install",
help="Concretize and install deprecator spec",
help="concretize and install deprecator spec",
)
install.add_argument(
"-I",
@@ -74,7 +72,7 @@ def setup_parser(sp):
action="store_false",
default=False,
dest="install",
help="Deprecator spec must already be installed (default)",
help="deprecator spec must already be installed (default)",
)
sp.add_argument(
@@ -83,7 +81,7 @@ def setup_parser(sp):
type=str,
default="soft",
choices=["soft", "hard"],
help="Type of filesystem link to use for deprecation (default soft)",
help="type of filesystem link to use for deprecation (default soft)",
)
sp.add_argument(

View File

@@ -25,14 +25,14 @@ def setup_parser(subparser):
"--source-path",
dest="source_path",
default=None,
help="path to source directory. defaults to the current directory",
help="path to source directory (defaults to the current directory)",
)
subparser.add_argument(
"-i",
"--ignore-dependencies",
action="store_true",
dest="ignore_deps",
help="don't try to install dependencies of requested packages",
help="do not try to install dependencies of requested packages",
)
arguments.add_common_arguments(subparser, ["no_checksum", "deprecated"])
subparser.add_argument(
@@ -55,16 +55,13 @@ def setup_parser(subparser):
type=str,
dest="shell",
default=None,
help="drop into a build environment in a new shell, e.g. bash, zsh",
help="drop into a build environment in a new shell, e.g., bash",
)
subparser.add_argument(
"--test",
default=None,
choices=["root", "all"],
help="""If 'root' is chosen, run package tests during
installation for top-level packages (but skip tests for dependencies).
if 'all' is chosen, run package tests during installation for all
packages. If neither are chosen, don't run tests for any packages.""",
help="run tests on only root packages or all packages",
)
arguments.add_common_arguments(subparser, ["spec"])

View File

@@ -20,7 +20,7 @@
def setup_parser(subparser):
subparser.add_argument("-p", "--path", help="Source location of package")
subparser.add_argument("-p", "--path", help="source location of package")
clone_group = subparser.add_mutually_exclusive_group()
clone_group.add_argument(
@@ -28,18 +28,18 @@ def setup_parser(subparser):
action="store_false",
dest="clone",
default=None,
help="Do not clone. The package already exists at the source path",
help="do not clone, the package already exists at the source path",
)
clone_group.add_argument(
"--clone",
action="store_true",
dest="clone",
default=None,
help="Clone the package even if the path already exists",
help="clone the package even if the path already exists",
)
subparser.add_argument(
"-f", "--force", help="Remove any files or directories that block cloning source code"
"-f", "--force", help="remove any files or directories that block cloning source code"
)
arguments.add_common_arguments(subparser, ["spec"])

View File

@@ -29,7 +29,7 @@ def setup_parser(subparser):
action="store_true",
default=False,
dest="dump_json",
help="Dump json output instead of pretty printing.",
help="dump json output instead of pretty printing",
)
subparser.add_argument(
"--first",

View File

@@ -62,7 +62,7 @@ def setup_parser(subparser):
dest="path",
action="store_const",
const=spack.paths.build_systems_path,
help="Edit the build system with the supplied name.",
help="edit the build system with the supplied name",
)
excl_args.add_argument(
"-c",

View File

@@ -86,6 +86,13 @@ def env_activate_setup_parser(subparser):
const="bat",
help="print bat commands to activate the environment",
)
shells.add_argument(
"--pwsh",
action="store_const",
dest="shell",
const="pwsh",
help="print powershell commands to activate environment",
)
view_options = subparser.add_mutually_exclusive_group()
view_options.add_argument(
@@ -95,7 +102,7 @@ def env_activate_setup_parser(subparser):
dest="with_view",
const=True,
default=True,
help="update PATH etc. with associated view",
help="update PATH, etc., with associated view",
)
view_options.add_argument(
"-V",
@@ -104,7 +111,7 @@ def env_activate_setup_parser(subparser):
dest="with_view",
const=False,
default=True,
help="do not update PATH etc. with associated view",
help="do not update PATH, etc., with associated view",
)
subparser.add_argument(
@@ -154,7 +161,7 @@ def env_activate(args):
# Error out when -e, -E, -D flags are given, cause they are ambiguous.
if args.env or args.no_env or args.env_dir:
tty.die("Calling spack env activate with --env, --env-dir and --no-env " "is ambiguous")
tty.die("Calling spack env activate with --env, --env-dir and --no-env is ambiguous")
env_name_or_dir = args.activate_env or args.dir
@@ -243,7 +250,7 @@ def env_deactivate(args):
# Error out when -e, -E, -D flags are given, cause they are ambiguous.
if args.env or args.no_env or args.env_dir:
tty.die("Calling spack env deactivate with --env, --env-dir and --no-env " "is ambiguous")
tty.die("Calling spack env deactivate with --env, --env-dir and --no-env is ambiguous")
if ev.active_environment() is None:
tty.die("No environment is currently active.")
@@ -283,7 +290,7 @@ def env_create_setup_parser(subparser):
"envfile",
nargs="?",
default=None,
help="either a lockfile (must end with '.json' or '.lock') or a manifest file.",
help="either a lockfile (must end with '.json' or '.lock') or a manifest file",
)
@@ -411,7 +418,7 @@ def env_list(args):
colify(color_names, indent=4)
class ViewAction(object):
class ViewAction:
regenerate = "regenerate"
enable = "enable"
disable = "disable"
@@ -601,16 +608,16 @@ def env_depfile_setup_parser(subparser):
"--make-target-prefix",
default=None,
metavar="TARGET",
help="prefix Makefile targets (and variables) with <TARGET>/<name>. By default "
help="prefix Makefile targets (and variables) with <TARGET>/<name>\n\nby default "
"the absolute path to the directory makedeps under the environment metadata dir is "
"used. Can be set to an empty string --make-prefix ''.",
"used. can be set to an empty string --make-prefix ''",
)
subparser.add_argument(
"--make-disable-jobserver",
default=True,
action="store_false",
dest="jobserver",
help="disable POSIX jobserver support.",
help="disable POSIX jobserver support",
)
subparser.add_argument(
"--use-buildcache",
@@ -618,8 +625,8 @@ def env_depfile_setup_parser(subparser):
type=arguments.use_buildcache,
default="package:auto,dependencies:auto",
metavar="[{auto,only,never},][package:{auto,only,never},][dependencies:{auto,only,never}]",
help="When using `only`, redundant build dependencies are pruned from the DAG. "
"This flag is passed on to the generated spack install commands.",
help="when using `only`, redundant build dependencies are pruned from the DAG\n\n"
"this flag is passed on to the generated spack install commands",
)
subparser.add_argument(
"-o",
@@ -633,7 +640,7 @@ def env_depfile_setup_parser(subparser):
"--generator",
default="make",
choices=("make",),
help="specify the depfile type. Currently only make is supported.",
help="specify the depfile type\n\ncurrently only make is supported",
)
subparser.add_argument(
metavar="specs",

View File

@@ -22,7 +22,7 @@
def setup_parser(subparser):
subparser.epilog = (
"If called without argument returns " "the list of all valid extendable packages"
"If called without argument returns the list of all valid extendable packages"
)
arguments.add_common_arguments(subparser, ["long", "very_long"])
subparser.add_argument(

View File

@@ -2,8 +2,6 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import errno
import os
@@ -44,7 +42,7 @@ def setup_parser(subparser):
"--path",
default=None,
action="append",
help="Alternative search paths for finding externals. May be repeated",
help="one or more alternative search paths for finding externals",
)
find_parser.add_argument(
"--scope",
@@ -68,10 +66,8 @@ def setup_parser(subparser):
read_cray_manifest = sp.add_parser(
"read-cray-manifest",
help=(
"consume a Spack-compatible description of externally-installed "
"packages, including dependency relationships"
),
help="consume a Spack-compatible description of externally-installed packages, including "
"dependency relationships",
)
read_cray_manifest.add_argument(
"--file", default=None, help="specify a location other than the default"
@@ -94,7 +90,7 @@ def setup_parser(subparser):
read_cray_manifest.add_argument(
"--fail-on-error",
action="store_true",
help=("if a manifest file cannot be parsed, fail and report the " "full stack trace"),
help="if a manifest file cannot be parsed, fail and report the full stack trace",
)
@@ -113,14 +109,14 @@ def external_find(args):
# For most exceptions, just print a warning and continue.
# Note that KeyboardInterrupt does not subclass Exception
# (so CTRL-C will terminate the program as expected).
skip_msg = "Skipping manifest and continuing with other external " "checks"
skip_msg = "Skipping manifest and continuing with other external checks"
if (isinstance(e, IOError) or isinstance(e, OSError)) and e.errno in [
errno.EPERM,
errno.EACCES,
]:
# The manifest file does not have sufficient permissions enabled:
# print a warning and keep going
tty.warn("Unable to read manifest due to insufficient " "permissions.", skip_msg)
tty.warn("Unable to read manifest due to insufficient permissions.", skip_msg)
else:
tty.warn("Unable to read manifest, unexpected error: {0}".format(str(e)), skip_msg)
@@ -170,7 +166,7 @@ def external_find(args):
)
if new_entries:
path = spack.config.config.get_config_filename(args.scope, "packages")
msg = "The following specs have been detected on this system " "and added to {0}"
msg = "The following specs have been detected on this system and added to {0}"
tty.msg(msg.format(path))
spack.cmd.display_specs(new_entries)
else:
@@ -238,7 +234,7 @@ def _collect_and_consume_cray_manifest_files(
if fail_on_error:
raise
else:
tty.warn("Failure reading manifest file: {0}" "\n\t{1}".format(path, str(e)))
tty.warn("Failure reading manifest file: {0}\n\t{1}".format(path, str(e)))
def external_list(args):

View File

@@ -51,9 +51,7 @@ def fetch(parser, args):
else:
specs = env.all_specs()
if specs == []:
tty.die(
"No uninstalled specs in environment. Did you " "run `spack concretize` yet?"
)
tty.die("No uninstalled specs in environment. Did you run `spack concretize` yet?")
else:
tty.die("fetch requires at least one spec argument")

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import copy
import sys
@@ -32,6 +30,14 @@ def setup_parser(subparser):
default=None,
help="output specs with the specified format string",
)
format_group.add_argument(
"-H",
"--hashes",
action="store_const",
dest="format",
const="{/hash}",
help="same as '--format {/hash}'; use with xargs or $()",
)
format_group.add_argument(
"--json",
action="store_true",

View File

@@ -68,7 +68,7 @@ def setup_parser(subparser):
metavar="DEST",
type=str,
dest="secret",
help="export the private key to a file.",
help="export the private key to a file",
)
create.set_defaults(func=gpg_create)
@@ -86,7 +86,7 @@ def setup_parser(subparser):
export = subparsers.add_parser("export", help=gpg_export.__doc__)
export.add_argument("location", type=str, help="where to export keys")
export.add_argument(
"keys", nargs="*", help="the keys to export; " "all public keys if unspecified"
"keys", nargs="*", help="the keys to export (all public keys if unspecified)"
)
export.add_argument("--secret", action="store_true", help="export secret keys")
export.set_defaults(func=gpg_export)
@@ -99,29 +99,29 @@ def setup_parser(subparser):
"--directory",
metavar="directory",
type=str,
help="local directory where keys will be published.",
help="local directory where keys will be published",
)
output.add_argument(
"-m",
"--mirror-name",
metavar="mirror-name",
type=str,
help="name of the mirror where " + "keys will be published.",
help="name of the mirror where keys will be published",
)
output.add_argument(
"--mirror-url",
metavar="mirror-url",
type=str,
help="URL of the mirror where " + "keys will be published.",
help="URL of the mirror where keys will be published",
)
publish.add_argument(
"--rebuild-index",
action="store_true",
default=False,
help=("Regenerate buildcache key index " "after publishing key(s)"),
help="regenerate buildcache key index after publishing key(s)",
)
publish.add_argument(
"keys", nargs="*", help="the keys to publish; " "all public keys if unspecified"
"keys", nargs="*", help="keys to publish (all public keys if unspecified)"
)
publish.set_defaults(func=gpg_publish)
@@ -146,7 +146,7 @@ def gpg_create(args):
def gpg_export(args):
"""export a gpg key, optionally including secret key."""
"""export a gpg key, optionally including secret key"""
keys = args.keys
if not keys:
keys = spack.util.gpg.signing_keys()
@@ -168,7 +168,7 @@ def gpg_sign(args):
elif not keys:
raise RuntimeError("no signing keys are available")
else:
raise RuntimeError("multiple signing keys are available; " "please choose one")
raise RuntimeError("multiple signing keys are available; please choose one")
output = args.output
if not output:
output = args.spec[0] + ".asc"
@@ -216,7 +216,7 @@ def gpg_publish(args):
url = spack.util.url.path_to_file_url(args.directory)
mirror = spack.mirror.Mirror(url, url)
elif args.mirror_name:
mirror = spack.mirror.MirrorCollection().lookup(args.mirror_name)
mirror = spack.mirror.MirrorCollection(binary=True).lookup(args.mirror_name)
elif args.mirror_url:
mirror = spack.mirror.Mirror(args.mirror_url, args.mirror_url)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import textwrap
from itertools import zip_longest
@@ -73,7 +71,7 @@ def variant(s):
return spack.spec.enabled_variant_color + s + plain_format
class VariantFormatter(object):
class VariantFormatter:
def __init__(self, variants):
self.variants = variants
self.headers = ("Name [Default]", "When", "Allowed values", "Description")

View File

@@ -75,10 +75,9 @@ def setup_parser(subparser):
default="package,dependencies",
dest="things_to_install",
choices=["package", "dependencies"],
help="""select the mode of installation.
the default is to install the package along with all its dependencies.
alternatively one can decide to install only the package or only
the dependencies""",
help="select the mode of installation\n\n"
"default is to install the package along with all its dependencies. "
"alternatively, one can decide to install only the package or only the dependencies",
)
subparser.add_argument(
"-u",
@@ -143,12 +142,11 @@ def setup_parser(subparser):
type=arguments.use_buildcache,
default="package:auto,dependencies:auto",
metavar="[{auto,only,never},][package:{auto,only,never},][dependencies:{auto,only,never}]",
help="""select the mode of buildcache for the 'package' and 'dependencies'.
Default: package:auto,dependencies:auto
- `auto` behaves like --use-cache
- `only` behaves like --cache-only
- `never` behaves like --no-cache
""",
help="select the mode of buildcache for the 'package' and 'dependencies'\n\n"
"default: package:auto,dependencies:auto\n\n"
"- `auto` behaves like --use-cache\n"
"- `only` behaves like --cache-only\n"
"- `never` behaves like --no-cache",
)
subparser.add_argument(
@@ -156,8 +154,8 @@ def setup_parser(subparser):
action="store_true",
dest="include_build_deps",
default=False,
help="""include build deps when installing from cache,
which is useful for CI pipeline troubleshooting""",
help="include build deps when installing from cache, "
"useful for CI pipeline troubleshooting",
)
subparser.add_argument(
@@ -186,7 +184,7 @@ def setup_parser(subparser):
dest="install_verbose",
help="display verbose build output while installing",
)
subparser.add_argument("--fake", action="store_true", help="fake install for debug purposes.")
subparser.add_argument("--fake", action="store_true", help="fake install for debug purposes")
subparser.add_argument(
"--only-concrete",
action="store_true",
@@ -199,14 +197,13 @@ def setup_parser(subparser):
"--add",
action="store_true",
default=False,
help="""(with environment) add spec to the environment as a root.""",
help="(with environment) add spec to the environment as a root",
)
updateenv_group.add_argument(
"--no-add",
action="store_false",
dest="add",
help="""(with environment) do not add spec to the environment as a
root (the default behavior).""",
help="(with environment) do not add spec to the environment as a root",
)
subparser.add_argument(
@@ -216,7 +213,7 @@ def setup_parser(subparser):
default=[],
dest="specfiles",
metavar="SPEC_YAML_FILE",
help="install from file. Read specs to install from .yaml files",
help="read specs to install from .yaml files",
)
cd_group = subparser.add_mutually_exclusive_group()
@@ -227,19 +224,12 @@ def setup_parser(subparser):
"--test",
default=None,
choices=["root", "all"],
help="""If 'root' is chosen, run package tests during
installation for top-level packages (but skip tests for dependencies).
if 'all' is chosen, run package tests during installation for all
packages. If neither are chosen, don't run tests for any packages.""",
help="run tests on only root packages or all packages",
)
arguments.add_common_arguments(subparser, ["log_format"])
subparser.add_argument("--log-file", default=None, help="filename for the log file")
subparser.add_argument(
"--log-file",
default=None,
help="filename for the log file. if not passed a default will be used",
)
subparser.add_argument(
"--help-cdash", action="store_true", help="Show usage instructions for CDash reporting"
"--help-cdash", action="store_true", help="show usage instructions for CDash reporting"
)
arguments.add_cdash_args(subparser, False)
arguments.add_common_arguments(subparser, ["yes_to_all", "spec"])
@@ -280,7 +270,7 @@ def require_user_confirmation_for_overwrite(concrete_specs, args):
display_args = {"long": True, "show_flags": True, "variants": True}
if installed:
tty.msg("The following package specs will be " "reinstalled:\n")
tty.msg("The following package specs will be reinstalled:\n")
spack.cmd.display_specs(installed, **display_args)
not_installed = list(filter(lambda x: x not in installed, concrete_specs))

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import re
from collections import defaultdict
@@ -102,7 +100,7 @@ def list_files(args):
]
class LicenseError(object):
class LicenseError:
def __init__(self):
self.error_counts = defaultdict(int)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import division, print_function
import argparse
import fnmatch
import json

View File

@@ -66,10 +66,9 @@ def setup_parser(subparser):
default="package,dependencies",
dest="things_to_load",
choices=["package", "dependencies"],
help="""select whether to load the package and its dependencies
the default is to load the package and all dependencies
alternatively one can decide to load only the package or only
the dependencies""",
help="select whether to load the package and its dependencies\n\n"
"the default is to load the package and all dependencies. alternatively, "
"one can decide to load only the package or only the dependencies",
)
subparser.add_argument(

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import llnl.util.tty as tty
@@ -57,13 +55,13 @@ def setup_parser(subparser):
directories.add_argument(
"--source-dir",
action="store_true",
help="source directory for a spec " "(requires it to be staged first)",
help="source directory for a spec (requires it to be staged first)",
)
directories.add_argument(
"-b",
"--build-dir",
action="store_true",
help="build directory for a spec " "(requires it to be staged first)",
help="build directory for a spec (requires it to be staged first)",
)
directories.add_argument(
"-e",
@@ -164,7 +162,7 @@ def location(parser, args):
# source dir remains, which requires the spec to be staged
if not pkg.stage.expanded:
tty.die(
"Source directory does not exist yet. " "Run this to create it:",
"Source directory does not exist yet. Run this to create it:",
"spack stage " + " ".join(args.spec),
)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
from collections import defaultdict

View File

@@ -39,7 +39,7 @@ def line_to_rtf(str):
def setup_parser(subparser):
spack_source_group = subparser.add_mutually_exclusive_group(required=True)
spack_source_group.add_argument(
"-v", "--spack-version", default="", help="download given spack version e.g. 0.16.0"
"-v", "--spack-version", default="", help="download given spack version"
)
spack_source_group.add_argument(
"-s", "--spack-source", default="", help="full path to spack source"
@@ -49,9 +49,8 @@ def setup_parser(subparser):
"-g",
"--git-installer-verbosity",
default="",
choices=set(["SILENT", "VERYSILENT"]),
help="Level of verbosity provided by bundled Git Installer.\
Default is fully verbose",
choices=["SILENT", "VERYSILENT"],
help="level of verbosity provided by bundled git installer (default is fully verbose)",
required=False,
action="store",
dest="git_verbosity",

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import sys
from llnl.util import tty
@@ -37,10 +35,7 @@ def setup_parser(subparser):
"--all",
action="store_true",
dest="all",
help="Mark ALL installed packages that match each "
"supplied spec. If you `mark --all libelf`,"
" ALL versions of `libelf` are marked. If no spec is "
"supplied, all installed packages will be marked.",
help="mark ALL installed packages that match each supplied spec",
)
exim = subparser.add_mutually_exclusive_group(required=True)
exim.add_argument(
@@ -48,14 +43,14 @@ def setup_parser(subparser):
"--explicit",
action="store_true",
dest="explicit",
help="Mark packages as explicitly installed.",
help="mark packages as explicitly installed",
)
exim.add_argument(
"-i",
"--implicit",
action="store_true",
dest="implicit",
help="Mark packages as implicitly installed.",
help="mark packages as implicitly installed",
)

View File

@@ -21,7 +21,6 @@
import spack.util.path
import spack.util.web as web_util
from spack.error import SpackError
from spack.util.spack_yaml import syaml_dict
description = "manage mirrors (source and binary)"
section = "config"
@@ -55,13 +54,13 @@ def setup_parser(subparser):
)
create_parser.add_argument(
"--exclude-specs",
help="specs which Spack should not try to add to a mirror" " (specified on command line)",
help="specs which Spack should not try to add to a mirror (specified on command line)",
)
create_parser.add_argument(
"--skip-unstable-versions",
action="store_true",
help="don't cache versions unless they identify a stable (unchanging)" " source code",
help="don't cache versions unless they identify a stable (unchanging) source code",
)
create_parser.add_argument(
"-D", "--dependencies", action="store_true", help="also fetch all dependencies"
@@ -104,6 +103,15 @@ def setup_parser(subparser):
default=spack.config.default_modify_scope(),
help="configuration scope to modify",
)
add_parser.add_argument(
"--type",
action="append",
choices=("binary", "source"),
help=(
"specify the mirror type: for both binary "
"and source use `--type binary --type source` (default)"
),
)
arguments.add_s3_connection_args(add_parser, False)
# Remove
remove_parser = sp.add_parser("remove", aliases=["rm"], help=mirror_remove.__doc__)
@@ -120,8 +128,12 @@ def setup_parser(subparser):
set_url_parser = sp.add_parser("set-url", help=mirror_set_url.__doc__)
set_url_parser.add_argument("name", help="mnemonic name for mirror", metavar="mirror")
set_url_parser.add_argument("url", help="url of mirror directory from 'spack mirror create'")
set_url_parser.add_argument(
"--push", action="store_true", help="set only the URL used for uploading new packages"
set_url_push_or_fetch = set_url_parser.add_mutually_exclusive_group(required=False)
set_url_push_or_fetch.add_argument(
"--push", action="store_true", help="set only the URL used for uploading"
)
set_url_push_or_fetch.add_argument(
"--fetch", action="store_true", help="set only the URL used for downloading"
)
set_url_parser.add_argument(
"--scope",
@@ -132,6 +144,35 @@ def setup_parser(subparser):
)
arguments.add_s3_connection_args(set_url_parser, False)
# Set
set_parser = sp.add_parser("set", help=mirror_set.__doc__)
set_parser.add_argument("name", help="mnemonic name for mirror", metavar="mirror")
set_parser_push_or_fetch = set_parser.add_mutually_exclusive_group(required=False)
set_parser_push_or_fetch.add_argument(
"--push", action="store_true", help="modify just the push connection details"
)
set_parser_push_or_fetch.add_argument(
"--fetch", action="store_true", help="modify just the fetch connection details"
)
set_parser.add_argument(
"--type",
action="append",
choices=("binary", "source"),
help=(
"specify the mirror type: for both binary "
"and source use `--type binary --type source`"
),
)
set_parser.add_argument("--url", help="url of mirror directory from 'spack mirror create'")
set_parser.add_argument(
"--scope",
choices=scopes,
metavar=scopes_metavar,
default=spack.config.default_modify_scope(),
help="configuration scope to modify",
)
arguments.add_s3_connection_args(set_parser, False)
# List
list_parser = sp.add_parser("list", help=mirror_list.__doc__)
list_parser.add_argument(
@@ -144,105 +185,85 @@ def setup_parser(subparser):
def mirror_add(args):
"""Add a mirror to Spack."""
"""add a mirror to Spack"""
if (
args.s3_access_key_id
or args.s3_access_key_secret
or args.s3_access_token
or args.s3_profile
or args.s3_endpoint_url
or args.type
):
connection = {"url": args.url}
if args.s3_access_key_id and args.s3_access_key_secret:
connection["access_pair"] = (args.s3_access_key_id, args.s3_access_key_secret)
connection["access_pair"] = [args.s3_access_key_id, args.s3_access_key_secret]
if args.s3_access_token:
connection["access_token"] = args.s3_access_token
if args.s3_profile:
connection["profile"] = args.s3_profile
if args.s3_endpoint_url:
connection["endpoint_url"] = args.s3_endpoint_url
mirror = spack.mirror.Mirror(fetch_url=connection, push_url=connection, name=args.name)
if args.type:
connection["binary"] = "binary" in args.type
connection["source"] = "source" in args.type
mirror = spack.mirror.Mirror(connection, name=args.name)
else:
mirror = spack.mirror.Mirror(args.url, name=args.name)
spack.mirror.add(mirror, args.scope)
def mirror_remove(args):
"""Remove a mirror by name."""
"""remove a mirror by name"""
spack.mirror.remove(args.name, args.scope)
def mirror_set_url(args):
"""Change the URL of a mirror."""
url = args.url
def _configure_mirror(args):
mirrors = spack.config.get("mirrors", scope=args.scope)
if not mirrors:
mirrors = syaml_dict()
if args.name not in mirrors:
tty.die("No mirror found with name %s." % args.name)
tty.die(f"No mirror found with name {args.name}.")
entry = mirrors[args.name]
key_values = ["s3_access_key_id", "s3_access_token", "s3_profile"]
entry = spack.mirror.Mirror(mirrors[args.name], args.name)
direction = "fetch" if args.fetch else "push" if args.push else None
changes = {}
if args.url:
changes["url"] = args.url
if args.s3_access_key_id and args.s3_access_key_secret:
changes["access_pair"] = [args.s3_access_key_id, args.s3_access_key_secret]
if args.s3_access_token:
changes["access_token"] = args.s3_access_token
if args.s3_profile:
changes["profile"] = args.s3_profile
if args.s3_endpoint_url:
changes["endpoint_url"] = args.s3_endpoint_url
if any(value for value in key_values if value in args):
incoming_data = {
"url": url,
"access_pair": (args.s3_access_key_id, args.s3_access_key_secret),
"access_token": args.s3_access_token,
"profile": args.s3_profile,
"endpoint_url": args.s3_endpoint_url,
}
try:
fetch_url = entry["fetch"]
push_url = entry["push"]
except TypeError:
fetch_url, push_url = entry, entry
# argparse cannot distinguish between --binary and --no-binary when same dest :(
# notice that set-url does not have these args, so getattr
if getattr(args, "type", None):
changes["binary"] = "binary" in args.type
changes["source"] = "source" in args.type
changes_made = False
changed = entry.update(changes, direction)
if args.push:
if isinstance(push_url, dict):
changes_made = changes_made or push_url != incoming_data
push_url = incoming_data
else:
changes_made = changes_made or push_url != url
push_url = url
else:
if isinstance(push_url, dict):
changes_made = changes_made or push_url != incoming_data or push_url != incoming_data
fetch_url, push_url = incoming_data, incoming_data
else:
changes_made = changes_made or push_url != url
fetch_url, push_url = url, url
items = [
(
(n, u)
if n != args.name
else (
(n, {"fetch": fetch_url, "push": push_url})
if fetch_url != push_url
else (n, {"fetch": fetch_url, "push": fetch_url})
)
)
for n, u in mirrors.items()
]
mirrors = syaml_dict(items)
spack.config.set("mirrors", mirrors, scope=args.scope)
if changes_made:
tty.msg(
"Changed%s url or connection information for mirror %s."
% ((" (push)" if args.push else ""), args.name)
)
if changed:
mirrors[args.name] = entry.to_dict()
spack.config.set("mirrors", mirrors, scope=args.scope)
else:
tty.msg("No changes made to mirror %s." % args.name)
def mirror_set(args):
"""Configure the connection details of a mirror"""
_configure_mirror(args)
def mirror_set_url(args):
"""Change the URL of a mirror."""
_configure_mirror(args)
def mirror_list(args):
"""Print out available mirrors to the console."""
"""print out available mirrors to the console"""
mirrors = spack.mirror.MirrorCollection(scope=args.scope)
if not mirrors:
@@ -395,9 +416,7 @@ def process_mirror_stats(present, mirrored, error):
def mirror_create(args):
"""Create a directory to be used as a spack mirror, and fill it with
package archives.
"""
"""create a directory to be used as a spack mirror, and fill it with package archives"""
if args.specs and args.all:
raise SpackError(
"cannot specify specs on command line if you chose to mirror all specs with '--all'"
@@ -470,7 +489,7 @@ def create_mirror_for_all_specs_inside_environment(path, skip_unstable_versions,
def mirror_destroy(args):
"""Given a url, recursively delete everything under it."""
"""given a url, recursively delete everything under it"""
mirror_url = None
if args.mirror_name:
@@ -490,6 +509,7 @@ def mirror(parser, args):
"remove": mirror_remove,
"rm": mirror_remove,
"set-url": mirror_set_url,
"set": mirror_set,
"list": mirror_list,
}

View File

@@ -31,7 +31,7 @@ def setup_parser(subparser):
action="store",
dest="module_set_name",
default="default",
help="Named module set to use from modules configuration.",
help="named module set to use from modules configuration",
)
sp = subparser.add_subparsers(metavar="SUBCOMMAND", dest="subparser_name")

View File

@@ -30,7 +30,7 @@ def add_command(parser, command_dict):
def setdefault(module_type, specs, args):
"""Set the default module file, when multiple are present"""
"""set the default module file, when multiple are present"""
# For details on the underlying mechanism see:
#
# https://lmod.readthedocs.io/en/latest/060_locating.html#marking-a-version-as-default

View File

@@ -29,7 +29,7 @@ def add_command(parser, command_dict):
def setdefault(module_type, specs, args):
"""Set the default module file, when multiple are present"""
"""set the default module file, when multiple are present"""
# Currently, accepts only a single matching spec
spack.cmd.modules.one_spec_or_raise(specs)
spec = specs[0]

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import itertools
import os
@@ -60,7 +58,7 @@ def setup_parser(subparser):
"--type",
action="store",
default="C",
help="Types of changes to show (A: added, R: removed, " "C: changed); default is 'C'",
help="types of changes to show (A: added, R: removed, C: changed); default is 'C'",
)
rm_parser = sp.add_parser("removed", help=pkg_removed.__doc__)
@@ -83,7 +81,7 @@ def setup_parser(subparser):
"--canonical",
action="store_true",
default=False,
help="dump canonical source as used by package hash.",
help="dump canonical source as used by package hash",
)
arguments.add_common_arguments(source_parser, ["spec"])

View File

@@ -17,9 +17,7 @@
def setup_parser(subparser):
subparser.epilog = (
"If called without argument returns " "the list of all valid virtual packages"
)
subparser.epilog = "If called without argument returns the list of all valid virtual packages"
subparser.add_argument(
"virtual_package", nargs="*", help="find packages that provide this virtual package"
)

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import code
import os

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import sys
@@ -29,7 +27,7 @@ def setup_parser(subparser):
create_parser.add_argument("directory", help="directory to create the repo in")
create_parser.add_argument(
"namespace",
help="namespace to identify packages in the repository. " "defaults to the directory name",
help="namespace to identify packages in the repository (defaults to the directory name)",
nargs="?",
)
create_parser.add_argument(
@@ -38,10 +36,8 @@ def setup_parser(subparser):
action="store",
dest="subdir",
default=spack.repo.packages_dir_name,
help=(
"subdirectory to store packages in the repository."
" Default 'packages'. Use an empty string for no subdirectory."
),
help="subdirectory to store packages in the repository\n\n"
"default 'packages'. use an empty string for no subdirectory",
)
# List
@@ -80,14 +76,14 @@ def setup_parser(subparser):
def repo_create(args):
"""Create a new package repository."""
"""create a new package repository"""
full_path, namespace = spack.repo.create_repo(args.directory, args.namespace, args.subdir)
tty.msg("Created repo with namespace '%s'." % namespace)
tty.msg("To register it with spack, run this command:", "spack repo add %s" % full_path)
def repo_add(args):
"""Add a package source to Spack's configuration."""
"""add a package source to Spack's configuration"""
path = args.path
# real_path is absolute and handles substitution.
@@ -118,7 +114,7 @@ def repo_add(args):
def repo_remove(args):
"""Remove a repository from Spack's configuration."""
"""remove a repository from Spack's configuration"""
repos = spack.config.get("repos", scope=args.scope)
namespace_or_path = args.namespace_or_path
@@ -148,7 +144,7 @@ def repo_remove(args):
def repo_list(args):
"""Show registered repositories and their namespaces."""
"""show registered repositories and their namespaces"""
roots = spack.config.get("repos", scope=args.scope)
repos = []
for r in roots:

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import os
import llnl.util.tty as tty

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import argparse
import re
import sys
@@ -35,7 +33,7 @@ def setup_parser(subparser):
"--show",
action="store",
default="opt,solutions",
help="select outputs: comma-separated list of: \n"
help="select outputs\n\ncomma-separated list of:\n"
" asp asp program text\n"
" opt optimization criteria for best model\n"
" output raw clingo output\n"

View File

@@ -3,8 +3,6 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from __future__ import print_function
import sys
import llnl.util.lang as lang

View File

@@ -60,7 +60,7 @@ def is_package(f):
#: decorator for adding tools to the list
class tool(object):
class tool:
def __init__(self, name, required=False):
self.name = name
self.required = required

View File

@@ -12,7 +12,7 @@
import spack.store
import spack.tag
description = "Show package tags and associated packages"
description = "show package tags and associated packages"
section = "basic"
level = "long"

Some files were not shown because too many files have changed in this diff Show More