Compare commits

...

1743 Commits

Author SHA1 Message Date
Cameron Smith
93b14e6c19 patch for config update problem
spack #26169
2022-10-18 13:27:59 -04:00
snehring
b44c83429c vsearch: add v2.22.1 (#33327) 2022-10-18 08:59:38 -06:00
snehring
8e8d6e5adb mothur: add v1.48.0 and variants (#33326) 2022-10-18 08:54:23 -06:00
dependabot[bot]
b21e54dffa build(deps): bump docker/setup-buildx-action from 2.1.0 to 2.2.0 (#33384)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](95cb08cb26...c74574e6c8)

---
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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-18 10:22:30 +02:00
Massimiliano Culpo
fe2656f182 intel-oneapi-compilers: fix Python 2.7 compliance (#33383) 2022-10-18 07:19:25 +02:00
Adam J. Stewart
0b014ff9cd py-fiona: add v1.8.22 (#33372) 2022-10-17 22:33:50 -06:00
eugeneswalker
dd003f66a8 e4s ci stack: add trilinos +rocm (#31601) 2022-10-17 21:04:31 +00:00
Michael Kuhn
9d11b96e4b lz4: add 1.9.4 (#33334) 2022-10-17 14:42:03 -06:00
Brian Van Essen
47bfc60845 Bugfix HIP and aluminum rocm build (#33344)
* Fixed two bugs in the HIP package recipe.  The first is that the
HIP_PATH was being set to the actual spec, and not the spec prefix.

The second bug is that HIP is expected to be in /opt/rocm-x.y.z/hip
but it's libraries can exist at both /opt/rocm-x.y.z/hip/lib and
/opt/rocm-x.y.z/lib.  This means that the external detection logic may
find it in either and it turns out that some modules only expose one
of those two locations.  Logic is added to ensure that the internal
HIP_PATH and associated ROCM_PATH are correctly set in both cases.

* Added support for Aluminum to use the libfabric plugin with either
RCCL or NCCL.
2022-10-17 13:07:27 -07:00
Mosè Giordano
9b87b4c8cd grid: reference fftw-api instead of fftw (#33374)
This makes it possible to compile with, e.g., `cray-fftw`, not just `fftw`.
2022-10-17 14:06:15 -06:00
snehring
c0361168a5 New packages: libbigwig, methyldackel (#33273)
* libbigwig: adding new package libbigwig
* methyldackel: adding new package methyldackel
* libbigwig: tighten up curl variant
2022-10-17 12:40:01 -07:00
Robert Underwood
da6aeaad44 Initial contribution of LibPressio ecosystem (#32630)
* Add libpressio and dependencies; some of these packages are
  maintained as forks of the original repositories and in those
  cases the docstring mentions this.
* Add optional dependency in adios2 on libpressio
* cub package: set CUB_DIR environment variable for dependent
  installations
* Clear R_HOME/R_ENVIRON before Spack installation (avoid sources
  outside of Spack from affecting the installation in Spack)
* Rename dlib to dorian3d-dlib and update dependents; add new dlib
  implementation. Pending an official policy on how to handle
  packages with short names, reviewer unilaterally decided that
  the rename was acceptable given that the new Spack dlib package
  is referenced more widely (by orders of magnitude) than the
  original

Co-authored-by: Samuel Li <shaomeng@users.noreply.github.com>
2022-10-17 13:30:54 -06:00
Luke Diorio-Toth
fb090a69f4 py-xopen: version bump to 1.6.0 (#33231)
* version bump to 1.6.0

* added py-isal, updated URL
2022-10-17 19:16:09 +00:00
Stephen Sachs
2e55812417 Classic Intel compilers do not support gcc-toolchain (#33281)
* Classic Intel compilers do not support gcc-toolchain

This fix removes `--gcc-toolchain=` from the ~.fcg` files for the classic Intel
compilers. AFAIK this option is only supported for Clang based compilers.

This lead to an issue when installing cmake. Reproducer:
```
spack install cmake@3.24.2%intel@2021.7.0~doc+ncurses+ownlibs~qt
build_type=Release arch=linux-amzn2-skylake_avx512
```

Tagging maintainer @rscohn2

* Add `-gcc-name` for icc

.. and `-gxx-name` for icpc.

AFAIK this is used for modern C++ support, so we can ignore `ifort`.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-10-17 10:46:11 -06:00
Harmen Stoppels
e7b14dd491 database: don't warn adding missing build deps (#33361)
When installing an individual spec `spack --only=package --cache-only /xyz`
from a buildcache, Spack currently issues tons of warnings about
missing build deps (and their deps) in the database.

This PR disables these warnings, since it's fine to have a spec without
its build deps in the db (they are just "missing").
2022-10-17 18:30:19 +02:00
Adam J. Stewart
839cf48352 py-horovod: add v0.26 (#33311)
* py-horovod: add v0.26

* py-petastorm: add v0.12.0
2022-10-17 09:14:55 -07:00
Harmen Stoppels
39105a3a6f installer.py: traverse_dependencies has local deptype (#33367)
Currently `traverse_dependencies` fixes deptypes to traverse once and
for all in the recursion, but this is incorrect, since deptypes depend
on the node (e.g. if it's a dependency and cache-only, don't follow
build type edges, even if the parent is build from sources and needs
build deps.)
2022-10-17 16:14:12 +00:00
Massimiliano Culpo
9081871966 GnuPG: add v2.3.8 and update stack (#33368) 2022-10-17 10:13:52 -06:00
iarspider
ad430a7504 Add checksum for py-ipykernel 6.15.2 (#33360) 2022-10-17 10:59:21 -05:00
iarspider
db342d8727 Add checksum for py-secretstorage 3.3.3 (#33366) 2022-10-17 10:54:31 -05:00
Carlos Bederián
32761cdb7b python: add 3.10.7, 3.9.14, 3.8.14, 3.7.14 (#32623) 2022-10-17 17:47:10 +02:00
Scott Wittenburg
29df7e9be3 Support spackbot rebuilding all specs from source (#32596)
Support spackbot rebuilding all specs from source when asked (with "rebuild everything")

- Allow overriding --prune-dag cli opt with env var
- Use job variable to optionally prevent rebuild jobs early exit behavior
- ci rebuild: Use new install argument to insist deps are always installed from binary, but
package is only installed from source.
- gitlab: fix bug w/ untouched pruning
- ci rebuild: install from hash rather than json file
- When doing a "rebuild everything" pipeline, make sure that each install job only consumes
binary dependencies from the mirror being populated by the current pipeline.  This avoids
using, e.g. binaries from develop, when rebuilding everything on a PR.
- When running a pipeline to rebuild everything, do not die because we generated a hash on
the broken specs list.  Instead only warn in that case.
- bugfix: Replace broken no-args tty.die() with sys.exit(1)
2022-10-17 09:45:09 -06:00
Harmen Stoppels
ea80113d0f Github Discussions can be used for Q&A (#33364) 2022-10-17 08:38:25 -07:00
Rui Peng Li
4fe53061a8 hypre 2.26.0 (#33299) 2022-10-17 08:31:28 -07:00
iarspider
bfe49222d5 Add checksum for py-prompt-toolkit 3.0.31 (#33362) 2022-10-17 09:02:19 -06:00
iarspider
42a27f3075 Add checksum for py-grpcio-tools 1.48.1 (#33358) 2022-10-17 10:01:22 -05:00
Harmen Stoppels
e882583b01 installer.py: fix/test get_deptypes (#33363)
Fixing an oversight in https://github.com/spack/spack/pull/32537

`get_deptypes` should depend on new `package/dependencies_cache_only`
props.
2022-10-17 08:57:58 -06:00
Scott Wittenburg
1be6506e29 gitlab ci: Do not force protected build jobs to run on aws runners (#33314) 2022-10-17 07:29:56 -07:00
iarspider
25e35c936b Add checksum for py-astroid 2.12.7, py-astroid 2.12.10, py-setuptools 62.6.0, py-wrapt 1.14.1, py-pylint 2.15.0 (#32976)
* Add checksum for py-astroid 2.12.7, py-setuptools 62.6.0

* Also add checksum for py-wrapt

* Update package.py

* Update package.py (#57)

* Update package.py

* Update package.py

* Update package.py
2022-10-17 08:09:52 -06:00
Harmen Stoppels
2c802c12a5 installer.py: show timers for binary install (#33305)
Print a message of the form
```
Fetch mm:ss.  Build: mm:ss.  Total: mm:ss
```
when installing from buildcache. 

Previously this only happened for source builds.
2022-10-17 15:54:40 +02:00
iarspider
f3523d8655 py-jupyterlab-pygments: install from wheel to avoid cyclic dependency (#33278)
* py-jupyterlab-pygments: avoid cyclic dependency

* Fix style

* Update package.py

* Update package.py

* [@spackbot] updating style on behalf of iarspider

* Update package.py

* Flake-8

* fix

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-17 07:42:01 -06:00
Adam J. Stewart
84fbccd682 py-numpy: add v1.23.4 (#33260) 2022-10-17 15:23:08 +02:00
iarspider
8dc2d37447 Add checksum for py-sniffio 1.3.0 (#32975) 2022-10-17 05:19:40 -06:00
Harmen Stoppels
9933a9046a py-tensorflow-hub: zlib, again. (#33359) 2022-10-17 12:39:16 +02:00
Michael Kuhn
f3ebe237e5 mariadb-c-client: add 3.3.2, 3.2.7, 3.1.18, 3.0.10 (#33335) 2022-10-17 09:53:07 +02:00
Wouter Deconinck
7993d10e54 sdl2: add v2.0.22 and v2.24.1 (#33351) 2022-10-17 09:37:34 +02:00
Diego Alvarez
574ab3e40a nextflow: add v20.10.0 (#33354) 2022-10-17 09:35:45 +02:00
Mosè Giordano
1338dbca56 libblastrampoline: Add versions 5.1.1, 5.2.0 (#33352) 2022-10-17 09:23:51 +02:00
Adam J. Stewart
02fb32bc1e py-setuptools: add v65.5.0 (#33353) 2022-10-17 09:17:10 +02:00
Adam J. Stewart
25e4d48227 py-sphinx: add v5.3 and v5.2 (#33356) 2022-10-16 22:45:07 +02:00
Hans Fangohr
7547f1c414 octopus: upgrade to 12.1 (#33343) 2022-10-16 18:19:01 +02:00
Miroslav Stoyanov
0c505e459b tasmanian: disable openmp by default (#33345) 2022-10-16 18:17:44 +02:00
Adam J. Stewart
23fe981c41 py-meson-python: add new versions (#33294) 2022-10-16 18:00:24 +02:00
Harmen Stoppels
f7f11fc881 py-tensorflow: fix zlib (#33349)
* py-tensorflow: fix zlib

* [@spackbot] updating style on behalf of haampie

Co-authored-by: haampie <haampie@users.noreply.github.com>
2022-10-16 05:09:56 -06:00
Adam J. Stewart
496f4193a6 meson: update OneAPI compiler support patch (#33293) 2022-10-16 11:53:54 +02:00
Jonathon Anderson
10491e98a8 CI: allow multiple matches to combine tags (#32290)
Currently "spack ci generate" chooses the first matching entry in
gitlab-ci:mappings to fill attributes for a generated build-job,
requiring that the entire configuration matrix is listed out
explicitly. This unfortunately causes significant problems in
environments with large configuration spaces, for example the
environment in #31598 (spack.yaml) supports 5 operating systems,
3 architectures and 130 packages with explicit size requirements,
resulting in 1300 lines of configuration YAML.

This patch adds a configuraiton option to the gitlab-ci schema called
"match_behavior"; when it is set to "merge", all matching entries
are applied in order to the final build-job, allowing a few entries
to cover an entire matrix of configurations.

The default for "match_behavior" is "first", which behaves as before
this commit (only the runner attributes of the first match are used).

In addition, match entries may now include a "remove-attributes"
configuration, which allows matches to remove tags that have been
aggregated by prior matches. This only makes sense to use with
"match_behavior:merge". You can combine "runner-attributes" with
"remove-attributes" to effectively override prior tags.
2022-10-15 17:29:53 +00:00
iarspider
898c0b45fb Add checksum for py-seaborn 0.12.0 (#33145)
* Add checksum for py-seaborn 0.12.0

* Update package.py

* Update package.py

* [@spackbot] updating style on behalf of iarspider

* Update package.py

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-15 10:34:30 -05:00
Michael Kuhn
b2d7782b00 rocksdb: add 7.7.3 (#33341) 2022-10-14 22:34:17 -06:00
Harmen Stoppels
2f6a56a43b depfile: update docs (#33279) 2022-10-15 06:10:05 +02:00
Michael Kuhn
31cda96181 glib: add 2.74.0 and 2.72.4 (#33332) 2022-10-14 21:27:08 -06:00
WuK
19226ecc49 gptl: new version 8.1.1; use the correct mpi fortran compiler (#33235)
* gptl: new version 8.1.1; use the correct `mpifc`
* add `F90` and `$F77`
2022-10-14 15:54:41 -07:00
Greg Sjaardema
2a166a5cc4 seacas: update to latest release (#33330)
Add checksum for latest tag/release
2022-10-14 15:49:06 -07:00
Erik Schnetter
a661193c64 ninja: New version 1.11.1 (#33215) 2022-10-14 14:31:42 -06:00
iarspider
9546eadd98 Add checksum for py-oauthlib 3.2.1 (#33201)
* Add checksum for py-oauthlib 3.2.1

* Update package.py

* [@spackbot] updating style on behalf of iarspider

* Update package.py

* Update package.py

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-14 12:46:08 -06:00
John-Luke Navarro
89b3e6c6d0 py-libensemble: updating package for v0.9.3 (#33298)
* commit updating py-libensemble package for 0.9.3

* removed commented-out lines
2022-10-14 11:01:57 -05:00
Satish Balay
6983d520fa petsc,py-petsc4py,slepc,py-slepc4py: add version 3.18.0 (#32938)
* petsc,py-petsc4py,slepc,py-slepc4py: add version 3.18.0

* workaround for dealii build failure [with petsc version check]

* pism: add compatibility fix to for petsc@3.18

* add in hipsolver dependency
2022-10-14 08:12:16 -07:00
eugeneswalker
c44934a44d hip@5.2.0 onwards: set prefix properly (#33257)
* hip-set-prefix-rocm5.2.0-onwards

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

Update description

Co-authored-by: Satish Balay <balay@mcs.anl.gov>
2022-10-14 08:12:07 -07:00
Auriane R
67bc90acb7 Fix pika@0.9.0 sha (#33307) 2022-10-14 07:13:57 -06:00
Dan Bonachea
0de1f98920 UPC++/GASNet-EX 2022.9.0 update (#33277)
* gasnet: Add new release hash
* upcxx: Add new release hash
* gasnet: misc updates
* upcxx: misc updates
2022-10-13 18:50:27 -07:00
iarspider
c13381fab3 Add checksum for py-gitpython 3.1.27 (#33285)
* Add checksum for py-gitpython 3.1.27

* Update package.py

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-13 20:27:39 -05:00
Adam J. Stewart
d5ebb55338 meson: remove slash in path (#33292) 2022-10-13 20:26:51 -05:00
Scott Wittenburg
7da303334e gitlab ci: Print better information about broken specs (#33124)
When a pipeline generation job is automatically failed because it
generated jobs for specs known to be broken on develop, print better
information about the broken specs that were encountered.  Include
at a minimum the hash and the url of the job whose failure caused it
to be put on the broken specs list in the first place.
2022-10-13 16:35:07 -06:00
iarspider
43dd34b651 Add checksum for py-psutil 5.9.2 (#33139) 2022-10-13 15:06:06 -06:00
Jim Edwards
00ea25061f add version 1.12.3 of parallel-netcdf (#33286) 2022-10-13 14:51:50 -06:00
Harmen Stoppels
75f71d3f81 py-execnet: 1.9.0 (#33282)
* py-execnet: 1.9.0

* bounds
2022-10-13 14:22:08 -06:00
Luke Diorio-Toth
f74742b834 new package (#33262) 2022-10-13 15:01:16 -05:00
Harmen Stoppels
599480ae9a Add missing upperbound to docs/spack.yaml (#33280) 2022-10-13 11:54:20 -07:00
Gregory Lee
feb1f3aadb libcroco does not respect gtk-doc configure flag, so removing variant (#32890)
* libcroco does not respect gtk-doc configure flag, so removing variant
2022-10-13 11:51:28 -07:00
Adam J. Stewart
8ce1574e0c py-meson: remove package (#33295) 2022-10-13 12:22:09 -06:00
Luke Diorio-Toth
7f24ab9b0a py-alive-progress, py-about-time, py-graphme: new packages (#33252)
* new package + deps

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

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

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

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

* removed unnecessary python version dep

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-13 12:22:03 -06:00
Chris White
5167eed558 Lua: Add versions and minor clean up (#33037)
* add new lua releases

* split install phase and move it into a build phase, remove hardcoded standard flag

* revert back to the original hardcoded std flag, guard patch against versions above 5.4
2022-10-13 11:51:07 -06:00
Adam J. Stewart
3014caa586 py-kornia: add v0.6.8 (#33287) 2022-10-13 12:42:27 -05:00
Adam J. Stewart
6ac1f445ec py-shapely: add v1.8.5 (#33259) 2022-10-13 11:52:20 -05:00
iarspider
be93b27ffc Add checksum for py-atomicwrites 1.4.1 (#33284) 2022-10-13 11:42:58 -05:00
iarspider
9c6c296474 Add checksum for py-asn1crypto 1.5.1 (#33283) 2022-10-13 11:42:19 -05:00
Cameron Rutherford
e20d45f3bc Fix ROCm constraints for ginkgo@glu_experimental in HiOp (#32499)
* Remove ROCm constraints for ginkgo@glu_experimental.

* Fix style.

* Apply @tcojean suggestion.

* Fix hip_repair_options in camp package.

* Remvoe old ROCm logic.

* Remove added whitespace.

* Fix style issue.

* Revert camp changes.

* Revert camp whitespace change.

* Set Ginkgo preferred version to 1.4.0
2022-10-13 09:41:18 -07:00
Laurent Aphecetche
0c4ad440c6 py-pyopenssl: add version 22.1.0 (#33189)
* py-pyopenssl: add version 22.1.0

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-13 11:32:11 -05:00
iarspider
93be19d0e3 Add checksum for py-bokeh 2.4.3 (#33236)
* Add checksum for py-bokeh 2.4.3

* [@spackbot] updating style on behalf of iarspider

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-13 11:31:42 -05:00
iarspider
4c151e0387 Add checksum for py-mpld3 0.5.8 (#33239) 2022-10-13 11:29:48 -05:00
iarspider
0af5838581 Add checksum for py-cloudpickle 2.2.0 (#33240) 2022-10-13 11:28:52 -05:00
iarspider
828fddacf1 Add checksum for py-bottle 0.12.23 (#33241) 2022-10-13 11:28:15 -05:00
iarspider
268a43762c Add checksum for py-pymongo 4.2.0 (#33234) 2022-10-13 11:25:43 -05:00
iarspider
bd263b71da Add checksum for py-keyring 23.9.1 (#33185)
* Add checksum for py-keyring 23.9.1

* Update package.py
2022-10-13 11:24:35 -05:00
iarspider
f76a3a1a73 Add checksum for py-setuptools-rust 1.5.1 (#33188)
* Add checksum for py-setuptools-rust 1.5.1

* Update package.py
2022-10-13 11:24:05 -05:00
iarspider
5eeb81c253 Add checksum for py-jupyter-server-mathjax 0.2.6 (#33203)
* Add checksum for py-jupyter-server-mathjax 0.2.6

* Update package.py

* Update package.py
2022-10-13 11:23:38 -05:00
iarspider
4ddf011c56 Add checksum for py-regex 2022.8.17 (#33209)
* Add checksum for py-regex 2022.8.17

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-13 11:23:07 -05:00
iarspider
f5704fff69 Add checksum for py-async-lru 1.0.3 (#33196)
* Add checksum for py-async-lru 1.0.3

* [@spackbot] updating style on behalf of iarspider

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

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

* Update package.py

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-13 11:22:37 -05:00
dependabot[bot]
a8b1314d18 Bump docker/login-action from 2.0.0 to 2.1.0 (#33268)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](49ed152c8e...f4ef78c080)

---
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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-13 09:49:26 +02:00
dependabot[bot]
601c727491 Bump docker/setup-buildx-action from 2.0.0 to 2.1.0 (#33267)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](dc7b9719a9...95cb08cb26)

---
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>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-13 09:48:55 +02:00
William R Tobin
40c400441a exodusii: add fortran variant (#33074)
* add fortran variant, pass cmake options to build with fortran + specified compiler/mpi compiler wrapper (following existing style in the package), activate exodus fortran wrapper library compilation
* change variant description, fix style
2022-10-12 15:28:35 -07:00
Max Zeyen
a2dee76310 gpi-space: add new version (#33184)
* gpi-space: add new version
* gpi-space: fix flake8 formatting issues
* gpi-space: fix more flake8 issues
2022-10-12 15:23:19 -07:00
Brian Van Essen
f24c135383 Added hash for version 2.7.0-6 (#33263) 2022-10-12 14:35:45 -07:00
Harmen Stoppels
5009e3d94a env depfile: allow deps only install (#33245)
* env depfile: allow deps only install

- Refactor `spack env depfile` to use a Jinja template, making it a bit
  easier to follow as a human being.
- Add a layer of indirection in the generated Makefile through an
  `<prefix>/.install-deps/<hash>` target, which allows one to specify
  different options when installing dependencies. For example, only
  verbose/debug mode on when installing some particular spec:
  ```
  $ spack -e my_env env depfile -o Makefile --make-target-prefix example
  $ make example/.install-deps/<hash> -j16
  $ make example/.install/<hash> SPACK="spack -d" SPACK_INSTALL_FLAGS=--verbose -j16
  ```

This could be used to speed up `spack ci rebuild`:
- Parallel install of dependencies from buildcache
- Better readability of logs, e.g. reducing verbosity when installing
  dependencies, and splitting logs into deps.log and current_spec.log

* Silence please!
2022-10-12 14:30:00 -07:00
Filippo Spiga
8dbdfbd1eb NVIDIA HPC SDK: add v22.9 (#33258) 2022-10-12 15:17:53 -06:00
Glenn Johnson
042fcc3575 update Bioconductor R packages (#33224)
* Add bioc attribute to r-do-db
* add version 1.38.1 to bioconductor package r-annotationforge
* add version 1.30.4 to bioconductor package r-biocparallel
* add version 2.64.1 to bioconductor package r-biostrings
* add version 4.4.4 to bioconductor package r-clusterprofiler
* add version 2.12.1 to bioconductor package r-complexheatmap
* add version 1.18.1 to bioconductor package r-delayedmatrixstats
* add version 3.22.1 to bioconductor package r-dose
* add version 3.38.4 to bioconductor package r-edger
* add version 1.16.2 to bioconductor package r-enrichplot
* add version 2.20.2 to bioconductor package r-ensembldb
* add version 1.32.4 to bioconductor package r-genomeinfodb
* add version 1.32.1 to bioconductor package r-genomicalignments
* add version 1.48.4 to bioconductor package r-genomicfeatures
* add version 1.44.1 to bioconductor package r-ggbio
* add version 3.4.4 to bioconductor package r-ggtree
* add version 1.24.2 to bioconductor package r-hdf5array
* add version 2.30.1 to bioconductor package r-iranges
* add version 1.36.3 to bioconductor package r-keggrest
* add version 3.52.4 to bioconductor package r-limma
* add version 1.8.1 to bioconductor package r-matrixgenerics
* update r-org-hs-eg-db
* add version 1.38.1 to bioconductor package r-organismdbi
* add version 1.36.1 to bioconductor package r-pathview
* add version 1.56.1 to bioconductor package r-rtracklayer
* add version 1.4.1 to bioconductor package r-scaledmatrix
* add version 1.24.1 to bioconductor package r-scran
* add version 1.6.3 to bioconductor package r-scuttle
* add version 1.18.1 to bioconductor package r-singlecellexperiment
* add version 1.20.2 to bioconductor package r-treeio
* Revert "Add bioc attribute to r-do-db"
This reverts commit 36be5c6072.
* Fix quotes on versions

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-10-12 14:04:20 -07:00
Massimiliano Culpo
48da17d18e py-pythran: customize headers attribute (#33242) 2022-10-12 13:09:52 -06:00
Auriane R
4765309b97 Limit whip dependencies for pika (#33244) 2022-10-12 11:10:03 -06:00
iarspider
d52eef5b16 Add checksum for py-requests-oauthlib 1.3.1 (#33199) 2022-10-12 10:22:12 -06:00
G-Ragghianti
a227fec4b9 Package slate: Added deps for +rocm smoke test (#33218)
* Added deps for slate+rocm smoke test
* Style change
2022-10-12 08:34:48 -07:00
Vicente Bolea
949151aff3 vtkm: add v1.9.0 (#33221) 2022-10-12 06:50:14 -06:00
iarspider
008b13f676 Add checksum for py-awkward 1.9.0 (#33159) 2022-10-12 07:43:14 -05:00
Harmen Stoppels
acd4787a1a oneapi: set -Wno-unused-command-line-argument (#33192)
For older versions of intel-oneapi-compilers, running the compiler in
preprocessor / compilation mode would trigger warnings that
`-Wl,-rpath,...` flags were unused.

This in turn caused certain configure scripts to fail as they did not
expect output from the compiler (it's treated as an error). Notably
cmake's bootstrap phase failed to detect c++ features of the compiler.

As a workaround, add this flag to silence the warning, since I don't
think we can scope the flags to compile+link mode.
2022-10-12 14:38:57 +02:00
Alberto Invernizzi
4ee22e7cf7 neovim: add version 0.8.0 (#33238)
* bump version for libvterm, required by neovim

* bump version for neovim and add related dep constraints

see release note:
d367ed9b23

in particular:
'deps: Bump required libvterm to v0.3'
https://github.com/neovim/neovim/pull/20222
2022-10-12 13:26:48 +02:00
iarspider
8537220b0e Add checksum for py-prettytable 3.4.1 (#33138) 2022-10-12 03:41:53 -06:00
Sergey Kosukhin
c85faaa216 netcdf packages: filter compiler wrappers in the *-config files (#33025)
* netcdf packages: filter compiler wrappers in the *-config files

* netcdf-c: provide dependent packages with unfiltered nc-config
2022-10-12 11:29:47 +02:00
Harmen Stoppels
dc39edb790 man-db: fix gnulib issue (#33149)
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-10-12 11:28:45 +02:00
Seth R. Johnson
f9620950cd py-sphinxcontrib-bibtex: new version 2.5.0 (#32902)
2.4 seems to have issues with sphinx-rtd and sphinx 5.1:
```
AttributeError: 'Text' object has no attribute 'rawsource'
```
2022-10-12 11:25:56 +02:00
iarspider
f10997a0df py-uproot: add v4.3.5 (#33151) 2022-10-12 11:22:43 +02:00
Michael Kuhn
2df25d8b37 meson: add 0.63.3 (#33216) 2022-10-12 03:02:44 -06:00
Jim Edwards
e31a4b6dc6 ESMF package update (#33202) 2022-10-12 10:59:02 +02:00
Jonathon Anderson
827e576c3d bear: fix RPATH handling (#33217) 2022-10-12 10:34:56 +02:00
Adam J. Stewart
549f6361ce py-poetry-core: jail git to stage directory (#33181) 2022-10-12 10:31:12 +02:00
MicK7
c3cc462a69 Add new vtk 9.2.2 release (#33001)
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-10-12 10:22:42 +02:00
Glenn Johnson
bffc4ab826 Update CRAN packages (#33223) 2022-10-12 10:20:52 +02:00
Luke Diorio-Toth
fffa9258c5 infernal: add v1.1.4 (#33230) 2022-10-12 09:41:01 +02:00
Luke Diorio-Toth
a34b36703a trnascan-se: add v2.0.11 (#33232) 2022-10-12 09:39:36 +02:00
Massimiliano Culpo
7efbd7d8eb Fix typo in docs (#33182) 2022-10-12 08:31:48 +02:00
iarspider
bd5705b2a8 Add checksum for py-cryptography 37.0.4 (#33186) 2022-10-11 20:43:56 -05:00
iarspider
f4cc48286d Add checksum for py-frozenlist 1.3.1 (#33193) 2022-10-11 20:41:08 -05:00
iarspider
caf8b57fd4 Add checksum for py-yarl 1.8.1 (#33195) 2022-10-11 20:40:22 -05:00
iarspider
9342344f78 Add checksum for py-immutables 0.18 (#33197) 2022-10-11 20:39:20 -05:00
iarspider
552908595e Add checksum for py-google-auth-oauthlib 0.5.2 (#33198) 2022-10-11 20:38:26 -05:00
iarspider
9cd47454f3 Add checksum for py-jupyter-server 1.18.1 (#33204) 2022-10-11 20:32:42 -05:00
iarspider
cbe2178e3f Add checksum for py-websocket-client 1.4.1 (#33205) 2022-10-11 20:30:45 -05:00
iarspider
7d4fa0ea00 Add checksum for py-requests-unixsocket 0.3.0 (#33206) 2022-10-11 20:29:40 -05:00
iarspider
7f49cc2d17 Add checksum for py-typed-ast 1.5.4 (#33207) 2022-10-11 20:28:37 -05:00
iarspider
a43ad2d876 Add checksum for py-scinum 1.4.3 (#33208) 2022-10-11 20:27:49 -05:00
iarspider
401412f999 Add checksum for py-python-rapidjson@1.8 (#33210) 2022-10-11 20:25:30 -05:00
iarspider
019463be39 Add checksum for py-pysqlite3 0.4.7 (#33211) 2022-10-11 20:24:46 -05:00
Luke Diorio-Toth
cd74e091d0 version bump to 3.10.42 (#33220) 2022-10-11 19:13:56 -06:00
Adam J. Stewart
5844c24ca8 py-rtree: add v1.0.1 (#33222) 2022-10-11 17:49:41 -07:00
Adam J. Stewart
d1fb82a2c4 GCC: update Xcode 14 conflict (#33226) 2022-10-11 17:26:47 -07:00
Harmen Stoppels
926dca9e5f Specify GCC prefix in LLVM-based compilers (#33146)
* spack.compiler.Compiler: introduce prefix property

We currently don't really have something that gives the GCC install
path, which is used by many LLVM-based compilers (llvm, llvm-amdgpu,
nvhpc, ...) to fix the GCC toolchain once and for all.

This `prefix` property is dynamic in the sense that it queries the
compiler itself. This is necessary because it's not easy to deduce the
install path from the `cc` property (might be a symlink, might be a
filename like `gcc` which works by having the compiler load a module
that sets the PATH variable, might be a generic compiler wrapper based
on environment variables like on cray...).

With this property introduced, we can clean up some recipes that have
the logic repeated for GCC.

* intel-oneapi-compilers: set --gcc-sysroot to %gcc prefix
2022-10-11 17:45:51 -06:00
kwryankrattiger
4b866e8ffc Darshan variant cleanup (#33165)
* Darshan-Runtime: Cleanup version dependent variants

* Darshan-Util: Cleanup version dependent variants.
2022-10-11 12:04:22 -07:00
kwryankrattiger
5d0f0914b8 Omega-H: Current constraint doesn't allow any cuda (#33164)
From the issue referenced, it seems later and earlier versions
of cuda work.
2022-10-11 12:03:39 -07:00
Massimiliano Culpo
de8c827983 Refactor a few classes related to package repositories (#32273)
Caches used by repositories don't reference the global spack.repo.path instance
anymore, but get the repository they refer to during initialization.
 
Spec.virtual now use the index, and computation done to compute the index 
use Repository.is_virtual_safe. 

Code to construct mock packages and mock repository has been factored into 
a unique MockRepositoryBuilder that is used throughout the codebase.

Add debug print for pushing and popping config scopes.

Changed spack.repo.use_repositories so that it can override or not previous repos

spack.repo.use_repositories updates spack.config.config according to the modifications done

Removed a peculiar behavior from spack.config.Configuration where push would always 
bubble-up a scope named command_line if it existed
2022-10-11 19:28:27 +02:00
Peter Scheibel
b594c0aee0 spack diff any specs you want (#32737)
Resolves #31782

With this change, if a spec is concrete after parsing (e.g. spec.yaml
or /hash-based), then it is not disambiguated (a process which requires
(a) that the spec be installed and (b) that it be part of the
currently-active environment).

This commit allows you to:

* Diff specs from an environment regardless of whether they have
  been installed (more useful for projection/matrix-based envs)
* Diff specs read from .yaml files which may or may not be entirely
  different installations of Spack

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-10-11 10:03:31 -06:00
dependabot[bot]
8e3c088a7a Bump actions/setup-python from 4.2.0 to 4.3.0 (#33166)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](b55428b188...13ae5bb136)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-11 09:54:17 +02:00
iarspider
a0489d8480 py-importlib-resources: add v5.9.0 (#33047) 2022-10-11 09:52:01 +02:00
eugeneswalker
a587bff119 e4s ci: add cabana +rocm (#33177) 2022-10-11 00:37:55 -06:00
Glenn Johnson
c885b591e2 new package: r-profvis (#33171) 2022-10-10 21:09:53 -06:00
Glenn Johnson
771aee30ea new package: r-urlchecker (#33174) 2022-10-10 19:42:06 -06:00
Glenn Johnson
87536ab107 new package: r-ragg (#33172) 2022-10-10 19:38:06 -06:00
Glenn Johnson
acf6acc93c Add bioc attribute to r-do-db (#33179) 2022-10-10 19:33:55 -06:00
Glenn Johnson
cecec254b0 new package: r-optimparallel (#33169) 2022-10-10 19:25:55 -06:00
Mark W. Krentel
c7472c849f hpctoolkit: add version 2022.10.01 (#33078)
* hpctoolkit: add version 2022.10.01

 1. add version 2022.10.01
 2. remove version for master branch, develop is now the main branch
 3. add CPATH and LD_LIBRARY_PATH to module run environment,
    this is for apps that want to use the start/stop interface
 4. cleanup style in variants, depends and conflicts
 5. remove all-static variant, nothing uses it
 6. deprecate more old versions

* [@spackbot] updating style on behalf of mwkrentel

* Add when(+level_zero) to the gtpin variant.

* Test commit to see if this passes E4S.

* Another test commit to see if E4S succeeds.

* Add temporary hack to ignore +mpi for version 2022.10.01 and issue a
warning instead.

Co-authored-by: mwkrentel <mwkrentel@users.noreply.github.com>
2022-10-10 17:59:13 -07:00
iarspider
be293ceb7a Add checksum for py-virtualenv 20.16.4 (#33154)
* Add checksum for py-virtualenv 20.16.4

* [@spackbot] updating style on behalf of iarspider

* Update package.py

* Update package.py

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-10 18:49:52 -06:00
iarspider
4a9790e8cd Add checksum for py-msgpack 1.0.4 (#33161)
* Add checksum for py-msgpack 1.0.4

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-10 18:38:19 -06:00
Glenn Johnson
cd6ef2c3cb new package: r-textshaping (#33173) 2022-10-10 18:38:01 -06:00
Glenn Johnson
042050be11 new package: r-pkgdown (#33170) 2022-10-10 18:33:58 -06:00
Glenn Johnson
46b7d3995c new package: r-interp (#33168) 2022-10-10 17:57:52 -06:00
iarspider
c393a57a48 Update py werkzeug (#33155)
* Add checksum for py-virtualenv 20.16.4

* Add checksum for py-werkzeug 2.2.2

* Restore py-virtualenv/package.py

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-10 17:50:06 -06:00
Axel Huebl
9d89dba292 Docs: Getting Started Dependencies (#32480)
* Docs: Getting Started Dependencies

Finally document what one needs to install to use Spack on
Linux and Mac :-)

With <3 for minimal container users and my colleagues with
their fancy Macs.

* Debian Update Packages: GCC, Python

- build-essential: includes gcc, g++ (thx Cory)
- Python: add python3-venv, python3-distutils (thx Pradyun)

* Add RHEL8 Dependencies
2022-10-10 23:25:37 +00:00
Glenn Johnson
a05a34361a new package: r-downlit (#33167) 2022-10-10 16:24:13 -07:00
eugeneswalker
dc141f5ad6 e4s: add hypre +rocm (#32148) 2022-10-10 16:09:52 -06:00
iarspider
634941a1c3 Add checksum for py-mako 1.2.2 (#33141) 2022-10-10 13:30:06 -06:00
iarspider
22ea4aa210 Add checksum for py-pyrsistent 0.18.1 (#33084) 2022-10-10 13:26:03 -06:00
iarspider
83916961da Add checksum for py-parso 0.8.3 (#33050) 2022-10-10 13:16:29 -06:00
Harmen Stoppels
dcf157d3a9 julia: add latest 1.8.x and 1.6.x releases and update deps, remove deprecated versions (#32956)
* julia: add latest 1.8.x and 1.6.x releases and update deps, remove deprecated versions
* get libuv verisons right
* resurrect libuv 1.44.1
2022-10-10 12:11:13 -07:00
Adam J. Stewart
831d7979ca ML CPU pipeline: test py-torch-nvidia-apex (#33158) 2022-10-10 12:18:05 -06:00
iarspider
14f6de9bf2 Add checksum for py-skl2onnx 1.12 (#33137)
* Add checksum for py-skl2onnx 1.12

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

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

* Update package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-10 12:17:52 -06:00
iarspider
c777380569 Add checksum for py-tables 3.7.0 (#33157)
* Add checksum for py-tables 3.7.0

* Update package.py

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-10 12:06:08 -06:00
Jean Luca Bez
0835b69771 New package: DXT Explorer tool (#31007)
* DXT Explorer tool

* Remove comments

* Fix style

* Syntax change

* Fix syntax

* remove dependencies, update version number, fix recipe

* fix syntax

* fixes

* change version order
2022-10-10 11:49:58 -06:00
iarspider
d886700de5 Add checksum for py-stevedore 4.0.0 (#33147) 2022-10-10 12:26:55 -05:00
iarspider
15dddee8f6 Add checksum for py-pycurl 7.45.1 (#33143) 2022-10-10 12:23:52 -05:00
iarspider
75cb7cefc1 Add checksum for py-pytools 2022.1.12 (#33142) 2022-10-10 12:22:59 -05:00
Jonas Thies
c61dad1c25 phist: new version 1.11 and patch to make previous versions compile w… (#33132)
* phist: new version 1.11 and patch to make previous versions compile with OpenBLAS

* phist; drop conflict on netlib-lapack and openblas
2022-10-10 19:19:09 +02:00
Jim Galarowicz
ee2ece3c91 Update versions of the survey performance tool. (#33058) 2022-10-10 09:55:49 -07:00
Jim Edwards
8829fb7c03 add ANL mpi-serial package (used by parallelio) (#33150) 2022-10-10 09:39:58 -07:00
iarspider
ef4c7474e5 Add checksum for py-dill 0.3.5.1 (#33144) 2022-10-10 11:31:51 -05:00
iarspider
5f642ff2d6 Add checksum for py-crashtest 0.4.0 (#33162) 2022-10-10 11:30:28 -05:00
Auriane R
41f992a2f8 Do not set CMAKE_HIP_ARCHITECTURES if none specified (#33156) 2022-10-10 09:21:45 -07:00
iarspider
c453d8718b Add checksum for py-vector 0.8.5 (#33152) 2022-10-10 11:13:37 -05:00
iarspider
5b3e8a46b3 Add checksum for py-cachecontrol 0.12.11 (#33160) 2022-10-10 10:05:59 -06:00
Adam J. Stewart
8d9a035d12 py-torch-nvidia-apex: fix +cuda build (#33070) 2022-10-10 16:04:35 +02:00
Sarah Osborn
cbc867a24c hypre: fix to correctly find rocsparse and rocrand when not in ROCM_PATH (#33073) 2022-10-10 15:46:26 +02:00
snehring
86aaede202 libfabric: add version 1.16.1 (#33030) 2022-10-10 15:45:41 +02:00
Adam J. Stewart
8da82ebf69 py-matplotlib: add v3.6.1 (#33126) 2022-10-10 15:45:06 +02:00
Thomas Madlener
fc23b48804 podio, edm4hep: add latest versions (#33056) 2022-10-10 15:41:33 +02:00
iarspider
f915f9db32 py-luigi: add v3.1.1 (#33090) 2022-10-10 15:37:40 +02:00
Brian Vanderwende
27cf8dddec shell prompt: enclose control sequence in brackets (#33079)
When setting `PS1` in Bash, it's required to enclose non-printable characters in square brackets, so that the width of the terminal is handled correctly.

See https://www.gnu.org/software/bash/manual/bash.html#Controlling-the-Prompt
2022-10-10 07:29:58 -06:00
Adam J. Stewart
7cb745b03a PythonPackage: fix libs/headers attributes (#32970) 2022-10-10 13:26:30 +00:00
iarspider
bfbd411091 Add checksum for py-lizard 1.17.10 (#33095) 2022-10-10 06:09:56 -06:00
Wouter Deconinck
2a43571a68 root: new variant webgui when +root7 (default True) (#33133)
ROOT has a webgui which is available with the `+root7` variant. This is a fairly large part of a ROOT install (275MB out of 732MB on my system) which is not necessarily useful in all use cases (e.g. inside containers on network-restricted HPC/HTC compute nodes). This new variant adds the option to retain the ROOT7 functionality but not necessarily include the `webgui` aspects.
2022-10-10 11:13:35 +02:00
Yang Zongze
46239ea525 fixbug-ctags-5.8: general.h: missing binary operator before token "(" (#33135)
`__unused__` defined in `general.h` conflict with the one defined by libc headers,
so change it to `__attribute__unused__` according to s.zharkoff:
  https://bugs.gentoo.org/828550#c11

cmd:
  `grep -rl "__unused__" . | xargs -n1 sed -i -e 's/\b__unused__\b/__attribute__unused__/g' -e 's/(unused)/(__unused__)/g'`
2022-10-10 10:24:54 +02:00
Adam J. Stewart
01ede3c595 Add CI stack for ML packages (#31592)
Basic stack of ML packages we would like to test and generate binaries for in CI. 

Spack now has a large CI framework in GitLab for PR testing and public binary generation.
We should take advantage of this to test and distribute optimized binaries for popular ML
frameworks.

This is a pretty extensive initial set, including CPU, ROCm, and CUDA versions of a core
`x96_64_v4` stack.

### Core ML frameworks

These are all popular core ML frameworks already available in Spack.

- [x] PyTorch
- [x] TensorFlow
- [x] Scikit-learn
- [x] MXNet
- [x] CNTK
- [x] Caffe
- [x] Chainer
- [x] XGBoost
- [x] Theano

### ML extensions

These are domain libraries and wrappers that build on top of core ML libraries

- [x] Keras
- [x] TensorBoard
- [x] torchvision
- [x] torchtext
- [x] torchaudio
- [x] TorchGeo
- [x] PyTorch Lightning
- [x] torchmetrics
- [x] GPyTorch
- [x] Horovod

### ML-adjacent libraries

These are libraries that aren't specific to ML but are still core libraries used in ML pipelines

- [x] numpy
- [x] scipy
- [x] pandas
- [x] ONNX
- [x] bazel

Co-authored-by: Jonathon Anderson <17242663+blue42u@users.noreply.github.com>
2022-10-09 15:39:47 -07:00
iarspider
4a6aff8bd1 Add checksum for py-nest-asyncio 1.5.5 (#33080) 2022-10-09 16:25:58 -06:00
iarspider
5d8e97af2a Add checksum for py-pycparser 2.21 (#32981) 2022-10-09 16:21:54 -06:00
iarspider
48f5f8eb17 Add checksum for py-br 5.10.0 (#33093) 2022-10-09 11:11:05 -06:00
iarspider
01a54dd616 Add checksum for py-hep-ml 0.7.1 (#33091) 2022-10-09 11:10:43 -06:00
iarspider
e5414ed9cc Add checksum for py-python-daemon 2.3.1 (#33092) 2022-10-09 11:10:24 -06:00
iarspider
20453622a0 Add checksum for py-law 0.1.7 (#33089) 2022-10-09 11:10:12 -06:00
Sergey Kosukhin
4a3e3807a3 py-eccodes: fix environment variables (#32807) 2022-10-09 11:09:57 -06:00
Sergey Kosukhin
c60dffaea7 py-cdo: add version 1.5.6, deprecate 1.3.2 (#32793)
* py-cdo: add version 1.5.6

* py-cdo: make python run depdendencies also the build ones

* py-cdo: restrict Python version
2022-10-09 11:38:54 -05:00
Axel Huebl
17898a61dd py-cupy: 11.2 (#33076)
* py-cupy: 11.2

Add the latest version of `cupy`:
  https://github.com/cupy/cupy/tree/v11.2.0#installation

* Update Dependencies

* Deprecate: 8.0.0
2022-10-09 10:38:04 -06:00
iarspider
2d28274387 Add checksum for py-pybind11 2.10.0 (#32971) 2022-10-09 11:17:20 -05:00
iarspider
918ed5f328 Add checksum for py-scikit-build 0.15.0 and use sources from pypi (#32954)
* Add checksum for py-scikit-build 0.15.0 and use sources from pypi

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-09 11:17:07 -05:00
iarspider
6f79dc654c Add checksum for py-terminado 0.15.0 (#33085)
* Add checksum for py-terminado 0.15.0

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-09 11:13:19 -05:00
Luke Diorio-Toth
6c2df00443 new packages (py-metaphlan, py-hclust2, iqtree2) + updates to others (py-dendropy, py-phylophlan, py-pkgconfig) (#32936)
* added metaphlan v4, cleaned up phylophlan

* added iqtree2

* fixed phylophlan, builds now

* changed config.yaml to default

* fixed style

* py-jsonschema: add 4.16.0 and new package py-hatch-fancy-pypi-readme (#32929)

* acfl: add v22.1 (#32915)

Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>

* Fixup errors introduced by Clingo Pr: (#32905)

* re2c depends on cmake on Windows
* Winbison properly added to bootstrap package search list

* Set CMAKE_HIP_ARCHITECTURES with the value of amdgpu_target (#32901)

* libtiff: default to +zlib+jpeg (#32945)

* octave: add version 7.2.0 (#32943)

* simgrid new releases (#32920)

* [rocksdb] Added rtti variant (#32918)

* rvs binary path updated for 5.2 rocm release (#32892)

* Add checksum for py-pytest-runner 6.0.0 (#32957)

* py-einops: add v0.5.0 (#32959)

* Replace repo with the NVIDIA one (#32951)

* Add checksum for py-tomli 2.0.1 (#32949)

* QMCPACK: add @3.15.0 (#32931)

* Tidied up configure arguments to use special spack autotools features. (#32930)

* casper: old domain fell off, adding github repo (#32928)

* unifyfs: pin mercury version; add boost variant (#32911)

Mercury has a new version (v2.2) releasing soon that UnifyFS does not build with and hasn't been tested with. This pins UnifyFS to the last version of Mercury used/tested.

Add a variant to avoid building/using boost

Append -std=gnu99 to cflags if building with gcc@4. Needed for mochi-margo to compile

* trilinos: constrain superlu-dist version (#32889)

* trilinos: constrain superlu-dist version for 13.x
* syntax

* FEniCSx: Updates for 0.5.1 (#32665)

* Updates for DOLFINx 0.5.1 and associated packages
* xtensor needed on anything less than main
* Switch back to Python 3.7 minimum.
* Might be good to point out in our README how to fix Python version?
* Fix basix, xtensor dep
* Add numba feature
* Fix checksum
* Make slepc optional

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* simgrid: add variant and remove flag (#32797)

* simgrid: remove std c++11 flag
* simgrid: add msg variant

* Axom: bring in changes from axom repo (#32643)

* bring in changes from axom repo

Co-authored-by: white238 <white238@users.noreply.github.com>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* Add checksum for py-pyparsing 3.0.9 (#32952)

* rdma-core: fix syntax for external discoverability (#32962)

* Add checksum for py-flatbuffers 2.0.7 (#32955)

* amrex: add v22.10 (#32966)

* Remove CMakePackage.define alias from most packages (#32950)

* Bug fix for `ca-certificates-mozilla/package.py` to enable `spack install --source` (#32953)

* made suggested changes to iqtree2, py-dendropy, py-metaphlan, and py-pkgconfig. Poetry install still broken

* reverted py-pkgconfig deps to poetry-core

* made iqtree2 less dedundant, changes to py-dendropy and py-pkgconfig deps

Co-authored-by: Manuela Kuhn <36827019+manuelakuhn@users.noreply.github.com>
Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@gmail.com>
Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>
Co-authored-by: John W. Parent <45471568+johnwparent@users.noreply.github.com>
Co-authored-by: Auriane R <48684432+aurianer@users.noreply.github.com>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
Co-authored-by: Kai Torben Ohlhus <k.ohlhus@gmail.com>
Co-authored-by: Vinícius <viniciusvgp@gmail.com>
Co-authored-by: Matthieu Dorier <mdorier@anl.gov>
Co-authored-by: renjithravindrankannath <94420380+renjithravindrankannath@users.noreply.github.com>
Co-authored-by: iarspider <iarspider@gmail.com>
Co-authored-by: Paul R. C. Kent <kentpr@ornl.gov>
Co-authored-by: Brian Van Essen <vanessen1@llnl.gov>
Co-authored-by: snehring <7978778+snehring@users.noreply.github.com>
Co-authored-by: Cameron Stanavige <stanavige1@llnl.gov>
Co-authored-by: Cody Balos <balos1@llnl.gov>
Co-authored-by: Jack S. Hale <mail@jackhale.co.uk>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
Co-authored-by: Lucas Nesi <lucas31nesi@hotmail.com>
Co-authored-by: Chris White <white238@llnl.gov>
Co-authored-by: white238 <white238@users.noreply.github.com>
Co-authored-by: Martin Pokorny <mpokorny@caltech.edu>
Co-authored-by: Weiqun Zhang <WeiqunZhang@lbl.gov>
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Dom Heinzeller <dom.heinzeller@icloud.com>
2022-10-08 16:57:45 -06:00
Jen Herting
3146f9309c New package: py-qudida (#33115)
* [py-qudida] New package

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-10-08 11:37:50 -06:00
Qian Jianhua
c1440aaa17 py-blis: fix environment settings (#32913) 2022-10-08 01:20:51 -05:00
iarspider
5ca32d82e4 Add checksum for py-jupyterlab-pygments 0.2.2 (#33081) 2022-10-07 22:06:15 -06:00
eugeneswalker
dfbeaff8ae remove outdated comments (#33123) 2022-10-07 19:47:57 -07:00
iarspider
8309ae08d1 Add checksum for py-jupyter-core 4.11.1 (#33086) 2022-10-07 16:06:11 -06:00
Sergey Kosukhin
4bc8f66388 autotools: extend patching of the libtool script (#30768)
* filter_file: introduce argument 'start_at'

* autotools: extend patching of the libtool script

* autotools: refactor _patch_usr_bin_file

* autotools: improve readability of the filtering

* autotools: keep the modification time of the configure scripts

* autotools: do not try to patch directories

* autotools: explain libtool patching for posterity

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-10-07 22:04:44 +00:00
iarspider
8a5790514d Add checksum for py-nbclient 0.6.7 (#33083) 2022-10-07 15:58:03 -06:00
eugeneswalker
01e7b89b53 e4s ci: add variorum (#33113) 2022-10-07 14:52:30 -07:00
eugeneswalker
041c1486f8 e4s ci: add h5bench (#33114) 2022-10-07 14:52:08 -07:00
Jen Herting
cbc224852b [brotli] added version 1.0.9 (#33107) 2022-10-07 15:33:07 -06:00
Jen Herting
5560bbf97e New package: py-pathml (#32566)
* [py-pathml Farber] Created package

* [pathml Farber] Dependencies added

* [py-pathml] Corrected dependency

* [py-pathml] Added types

* [py-pathml] depends on py-h5py

* [py-pathml] py-opencv-contrib-python -> opencv+python3+contrib

* [py-pathml] added spack import and fixed setuptools type

* [py-pathml] update import

* [py-pathml] opencv no longer has +contrib

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-10-07 15:32:43 -06:00
Gregory Lee
b3cfcebf94 fixed and added mrnet versions (#33120) 2022-10-07 14:25:53 -06:00
iarspider
f3027fb561 Add checksum for py-onnxmltools 1.11.0 (#33104)
* Add checksum for py-onnxmltools 1.11.0

* Add checksum for py-onnxmltools 1.11.0

* Fix patch name

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-07 14:05:52 -05:00
iarspider
af4134dd48 Add checksum for py-pkginfo 1.8.3 (#33094)
* Add checksum for py-pkginfo 1.8.3

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-07 13:02:13 -06:00
iarspider
3270df735f Add checksum for py-markdown 3.4.1 (#33098)
* Add checksum for py-markdown 3.4.1

* Update package.py
2022-10-07 13:01:54 -06:00
Laurent Aphecetche
a2d7776c95 pythia6: set CMAKE_MACOSX_RPATH=True to build on macos (#33082) 2022-10-07 11:53:41 -07:00
iarspider
a4651a2a02 Add checksum for py-pathlib2 2.3.7.poast1 (#33105)
* Add checksum for py-pathlib2 2.3.7.poast1

* [@spackbot] updating style on behalf of iarspider

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-07 13:47:26 -05:00
iarspider
910cf7fe7b Add checksum for py-python-ldap 3.4.2 (#33106) 2022-10-07 13:46:09 -05:00
iarspider
fb0d8cd151 Add checksum for py-networkx 2.8.6, py-pygraphviz 1.10 (#33102)
* Add checksum for py-networkx 2.8.6, py-pygraphviz 1.10

* [@spackbot] updating style on behalf of iarspider

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-10-07 13:39:56 -05:00
iarspider
c5e3ec8b1f Add checksum for py-mplhep 0.3.26 (#33101) 2022-10-07 13:37:17 -05:00
iarspider
e81ecae3b5 Add checksum for py-more-itertools 8.14.0 (#33100) 2022-10-07 13:36:11 -05:00
iarspider
ce7461a783 Add checksum for py-lz4 4.0.2 (#33097) 2022-10-07 13:32:34 -05:00
iarspider
f141f806e9 Add checksum for py-llvmlite 0.38.1 (#33096) 2022-10-07 13:31:31 -05:00
iarspider
3968263bf6 Add checksum for py-jupyter-console 6.4.4 (#33088) 2022-10-07 12:54:58 -05:00
iarspider
9de9d2f65b Add checksum for py-jsonpickle 2.2.0 (#33087) 2022-10-07 12:53:44 -05:00
Adam J. Stewart
163242bd6e py-black: add v22.10.0 (#33077) 2022-10-07 10:33:04 -07:00
eugeneswalker
35bc158387 e4s ci: add quantum-espresso (#33075) 2022-10-07 08:38:10 -07:00
Auriane R
39fe4371fa Rename p2300 to stdexec (#33099)
* Rename p2300 package after renaming PR merged in stdexec

https://github.com/NVIDIA/stdexec/pull/622

* Adapt pika to depend on stdexec
2022-10-07 14:54:05 +02:00
Paul Kuberry
2346544e6f trilinos and xyce: fix fortran library handling (#33033)
* trilinos and xyce: fix fortran library handling

xyce:
  - add pymi_static_blas variant and logic
    handles blas and hdf5 conflicts for Xyce-PyMi
  - make +isorropia and +zoltan conditional on mpi

* xyce: clean up CMake options

* xyce: change pymi_static_blas to pymi_static_tpls

* xyce: made pymi_static_tpls only when +pymi
2022-10-07 06:47:26 -04:00
iarspider
8acb4da6aa Add checksum for py-tornado 6.2, py-pyzmq 24.0.1, py-jupyter-client 7.3.5 (#33062) 2022-10-07 00:09:56 -06:00
Laurent Aphecetche
837954729f geant3: new package (#33065)
* geant3: new package
* fix copyright
2022-10-06 22:26:22 -06:00
MatthewLieber
23f6c92f33 add compatibility for rocky8 and rhel8 (#33068) 2022-10-07 04:25:58 +00:00
Hans Fangohr
a661536eb6 oommf: update oommf package to version 2.0b0 (#33072)
- Official release mentioned on https://math.nist.gov/oommf/software-20.html
- Tested at https://github.com/fangohr/oommf-in-spack/pull/39/files
2022-10-06 18:30:27 -07:00
Laurent Aphecetche
080c37046f cppgsl: add version 4.0.0 (#33060) 2022-10-06 18:24:01 -07:00
Jonas Thies
f56ff16564 phist: add patch to resolve build issue #32111 with +fortran %oneapi (#32965)
* phist: add patch to resolve build issue #32111 with +fortran %oneapi

* phist: some lines of code were patched twice, make these patches orthogonal.
2022-10-06 16:16:48 -07:00
Massimiliano Culpo
1a12ddbd2d Add a warning on Python 2.7 deprecation (#33052)
Co-authored-by: alalazo <alalazo@users.noreply.github.com>
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
2022-10-06 23:42:34 +02:00
snehring
f43887dd4e ncbi-toolkit: adding version 26_0_1 (#33061) 2022-10-06 12:26:25 -07:00
Sergey Kosukhin
a520a7ef28 tcl module template: automatically unload automatically loaded modules (#32853)
Remove `module-info mode load` condition that prevents auto-unloading when autoloading is enabled. It looks like this condition was added to work around an issue in environment-modules that is no longer necessary.

Add quotes to make is-loaded happy
2022-10-06 20:15:28 +02:00
iarspider
c3018f95ee Add checksum for py-executing 1.0.0 (#33059) 2022-10-06 10:25:54 -06:00
iarspider
164d5fc7a4 Add checksum for py-histogrammar 1.0.31 (#33045) 2022-10-06 09:52:38 -05:00
iarspider
38b50079e1 Add checksum for py-uhi 0.3.1 (#33043) 2022-10-06 09:51:28 -05:00
iarspider
e67a19cb36 Add checksum for py-tqdm 4.64.1 (#33046) 2022-10-06 09:50:24 -05:00
iarspider
7e1cb5414c Add checksum for py-zipp@3.8.1 (#33048) 2022-10-06 09:47:56 -05:00
iarspider
5c5de3e683 Update py stack data (#33051)
* Add checksum for py-traitlets 5.3.0

* Add checksum for py-stack-data 0.5.0

* Remove extra file
2022-10-06 09:41:16 -05:00
Laurent Aphecetche
ca0e023c43 geant4-vmc: unset MACOSX_DEPLOYMENT_TARGET (#32828) 2022-10-06 10:41:08 -04:00
Sergey Kosukhin
70a3868168 ncl: enable building with recent versions of hdf5 (#32842) 2022-10-06 16:20:55 +02:00
iarspider
f168a44fcb Add checksum for py-urllib3 1.26.12 (#33019)
* Add checksum for py-urllib3 1.26.12

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

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

* Fixes from review

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-06 07:38:00 -06:00
Harmen Stoppels
c959d6c905 gmake: add 4.3.90 alpha release (#33044)
GNU Make 4.3.90 supports jobserver through fifo, so it's nice to add the
alpha release to Spack already.
2022-10-06 04:34:00 -06:00
Manuela Kuhn
4cfe58651a py-docutils: add 0.19 (#32814) 2022-10-06 04:29:48 -06:00
eugeneswalker
a56cd8ffb6 e4s ci: add charliecloud (#32990) 2022-10-06 12:22:23 +02:00
Sreenivasa Murthy Kolam
5cf05b6515 mlirmiopen: update the SHA for 5.2.1 release (#33049) 2022-10-06 03:54:03 -06:00
Harmen Stoppels
fc5da74998 docs: fix deprecated use of install_tree (#33004) 2022-10-06 09:45:46 +00:00
iarspider
0bc23d8bdc Add checksum for py-markupsafe 2.1.1 (#33003) 2022-10-06 03:42:01 -06:00
iarspider
5fc0bef4fc Add checksum for py-avro 1.11.1 (#32979) 2022-10-06 03:26:07 -06:00
iarspider
0184f008f1 Add checksum for py-autopep8 1.7.0, py-pycodestyle 2.9.1 (#32978) 2022-10-06 03:22:06 -06:00
Mark W. Krentel
e8dcfcd7ae hpcviewer: add v2022.10 (#33041) 2022-10-06 03:18:04 -06:00
dependabot[bot]
bfd848089f build(deps): bump actions/checkout from 3.0.2 to 3.1.0 (#32998) 2022-10-06 02:58:13 -06:00
Wouter Deconinck
887dd3fcd9 dd4hep: add v1.23 (#32968)
Release notes at https://github.com/AIDASoft/DD4hep/releases/tag/v01-23
2022-10-06 10:57:09 +02:00
iarspider
96daaa359d Add checksum for py-soupsieve 2.3.2.post1 (#32980)
* Add checksum for py-soupsieve 2.3.2.post1

* Update package.py

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-10-06 02:53:58 -06:00
Jen Herting
1f5729644b New package: py-scanpy (#32565)
* [py-scanpy] New package

* [py-scanpy] Added types

* [py-scan] reworked dependencies

* [py-scanpy] flake8

* [py-scanpy] update import

* [py-scanpy] fixed minor issues

Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-10-06 10:27:37 +02:00
iarspider
aab5bcf05a Add checksum for py-histoprint 2.4.0 (#33017) 2022-10-06 02:22:00 -06:00
iarspider
0ae46519ba Add checksum for py-hepdata-lib 0.10.1, py-hepdata-validator 0.3.3 (#33018)
* Add checksum for py-hepdata-lib 0.10.1, py-hepdata-validator 0.3.3

* Update package.py

* Update package.py

* Update package.py

* Update package.py
2022-10-06 02:14:06 -06:00
Vanessasaurus
270a19504b flux-core: add v0.44.0 (#33039)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2022-10-06 02:10:11 -06:00
snehring
6de5f58026 dock: fix compilation with gcc10+, add dep (#33034) 2022-10-06 09:57:14 +02:00
Jean Luca Bez
33b1425add h5bench: update version (#33000)
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-10-06 09:48:09 +02:00
Jen Herting
071c323b95 New package: py-pprintpp (#30764)
* New package: py-pprintpp

* [py-pprintpp] added dependency on setuptools

Co-authored-by: Viv Eric Hafener <vehrc@sporcbuild.rc.rit.edu>
2022-10-06 09:46:32 +02:00
Andrew W Elble
28de7da0cc cuda: add v11.8.0 (#33027)
Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
2022-10-06 09:46:01 +02:00
Vanessasaurus
791776cece flux-sched: add v0.25.0 (#33038)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2022-10-06 09:41:15 +02:00
Chris White
9ba102c2bb add blt 0.5.2 (#33029) 2022-10-06 00:02:04 -06:00
Jen Herting
c5d62294b2 New package: py-pyassimp (#30762)
* New package: py-pyasimp

* Cleaned up dependencies

* Fixed liked issue

* Fixed linked issue

* [py-pyassimp] depends on assimp

* [py-pyassimp] added dependency on py-setuptools

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: Viv Eric Hafener <vehrc@sporcbuild.rc.rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-10-05 21:43:29 -05:00
Harmen Stoppels
189baa96db python: don't accidentally link to system db libs (#33007) 2022-10-05 18:22:01 -06:00
snehring
4b17d9b92e salmon: new version 1.9.0 (#33035) 2022-10-05 17:10:00 -06:00
Charles Ferenbaugh
21ca17a157 pfunit: fix @4: ~openmp (#33024) 2022-10-05 17:03:18 -06:00
iarspider
5b45ffb353 Add checksum for py-threadpoolctl 3.1.0 (#33012)
* Add checksum for py-threadpoolctl 3.1.0

* Update package.py
2022-10-05 16:54:04 -06:00
iarspider
143faeee0e Add checksum for py-distlib 0.3.6 (#33009)
* Add checksum for py-distlib 0.3.6

* Update package.py

* Update package.py

* Update package.py
2022-10-05 16:32:56 -06:00
dlkuehn
b4df99376d Package jsonnet: change sha256sum to sha256 for version hash (#33031)
Co-authored-by: David Kuehn <las_dkuehn@iastate.edu>
2022-10-05 14:40:59 -07:00
Daryl W. Grunau
b2c2958acc eospac: support version 6.5.5 (#33023)
Co-authored-by: Daryl W. Grunau <dwg@lanl.gov>
2022-10-05 14:08:27 -07:00
snehring
881571c4ba canu: new version 2.2 (#32999) 2022-10-05 15:06:08 -06:00
Glenn Johnson
aef6d4a40a add version 4.2.1 of R (#32993) 2022-10-05 13:40:45 -07:00
Adam J. Stewart
760294b402 py-matplotlib: add v3.6.0, new backends (#32697)
* py-matplotlib: add v3.6.0, new backends
* [@spackbot] updating style on behalf of adamjstewart
* Undo conditional variant hack
* Update dependencies

Co-authored-by: adamjstewart <adamjstewart@users.noreply.github.com>
2022-10-05 13:36:37 -07:00
Charles Ferenbaugh
417760e829 Fix wonton CMake config to not break host codes (#33026) 2022-10-05 14:06:12 -06:00
MichaelLaufer
e0b418f288 py-pyfr: add v1.15.0, explicitly set env variables for dependencies (#32964)
* Update to PyFR v1.15.0

* allow unsupported compilers for cuda

* update requirement for py-gimmik version

* update requirement for cuda version

* update versions, style fix

* lib directory changed, style fixes

* PYFR_METIS_LIBRARY_PATH set
2022-10-05 14:08:37 -05:00
eugeneswalker
1fe8387d23 e4s ci: add gotcha cpu (#32989) 2022-10-05 11:43:13 -07:00
Adam J. Stewart
d956da95c3 py-torch-nvidia-apex: ~cuda does not build (#32939) 2022-10-05 12:38:21 -05:00
Axel Huebl
4ed963dda1 OpenBLAS 0.3.21: w/o Fortran (#32398)
There is a new OpenBLAS release out that can be compiled w/o
a Fortran compiler.

macOS XCode developers, rejoice. Maybe at some point Spack
becomes a package manager that can be used without using
another package manager (to get gfortran) 🎉

phist: add conflict on reference netlib-lapack due to API change in lapack.h

Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-10-05 11:30:09 -06:00
eugeneswalker
cefc1dc808 e4s ci: add caliper +cuda (#32992) 2022-10-05 10:25:18 -07:00
eugeneswalker
af02dcbd2e e4s ci: enable caliper cpu (#32988) 2022-10-05 10:25:04 -07:00
iarspider
1800684ac1 Add checksum for py-flit 3.7.1 (#33013) 2022-10-05 11:41:16 -05:00
eugeneswalker
82cfa68e69 e4s: add omega-h +cuda (#32156) 2022-10-05 09:36:09 -07:00
eugeneswalker
27074d5bec e4s ci: add unifyfs (#32991) 2022-10-05 09:28:19 -07:00
Wileam Y. Phan
9fe315b953 Make hwloc both CudaPackage and ROCmPackage (#31334)
* Make hwloc both CudaPackage and ROCmPackage

* Remove redundant variants
2022-10-05 09:45:47 -06:00
iarspider
592d97137a Add checksum for py-arrow 1.2.3 (#33005) 2022-10-05 10:38:58 -05:00
iarspider
9abee2e851 Add checksum for py-pydantic 1.10.2 (#33006) 2022-10-05 10:37:50 -05:00
iarspider
e5da747d6f Add checksum for py-rich 12.5.1 (#33008) 2022-10-05 10:29:30 -05:00
Brian Van Essen
f463666f0e Add aws-ofi-nccl library (#32906)
* Added a package for the aws-ofi-nccl plug-in from to enable NCCL to
use libfabric communication library as a network provider.

Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-10-05 14:08:32 +02:00
Jordan Galby
6c12630e95 Optimize concurrent misc_cache provider index rebuild (#32874)
When concurrent misc_cache provider index rebuilds happen, try to
rebuild it only once, so we don't exceed misc_cache lock timeout.

For example, when using `spack env depfile`, with no previous
misc_cache, running `make -f depfile -j8` could run at most 8 concurrent
`spack install` locking on misc_cache to rebuild the provider index. If
one rebuild takes 30s, before this fix, the "worst" lock could wait up
to 30s * 7, easily exceeding misc_cache lock timeout. Now, the "worst"
lock would take 30s * 1 + ~1s * 6.
2022-10-05 06:01:59 -06:00
Chris MacMackin
53cea629b7 autotools: Filter libtools when building with dpcpp (#32876)
Due to a [known
issue](https://community.intel.com/t5/Intel-oneAPI-Data-Parallel-C/dpcpp-and-GNU-Autotools/m-p/1296985)
with dpcpp, autotool-based builds that try to use it will fail because
they try to link against temporary files that no longer exist. This
commit filters those files out of the libtools script so that linking
can work properly.
2022-10-05 11:57:37 +00:00
iarspider
cfea21319f Add checksums for Rivet 3.1.7 and YODA 1.9.7 and fastjet 3.4.0 (#32917)
* Add checksums for Rivet 3.1.7 and YODA 1.9.7

* Add checksum for fastjet 3.4.0

* Add v3.1.7b...

... in which version requirement for autoconf was lowered to 2.68
2022-10-05 12:54:20 +02:00
Adam J. Stewart
e2b5179060 py-torchmetrics: add v0.10.0 (#32997) 2022-10-05 04:45:59 -06:00
Auriane R
4e5ea86b20 Add pika 0.9.0 (#33010)
* Reorder dependencies in alphabetical order + fix typo
2022-10-05 03:33:54 -06:00
Annop Wongwathanarat
e69c8338a4 armpl-gcc: Add version 22.1 (#32914)
* armpl-gcc: Add version 22.1

* fixed url, installation script name, and conflicts

Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>
2022-10-05 11:02:56 +02:00
Brian Van Essen
15e0e15c90 Added a new version (#33002) 2022-10-05 10:29:36 +02:00
Paul R. C. Kent
316b620a05 llvm: add 15.0.1, 15.0.2 (#32983)
* llvm: 15.0.1, 15.0.2

* Requested format change
2022-10-04 21:54:04 -06:00
Richard Berger
153206be00 flecsi: upcoming release will no longer need lanl-cmake-modules (#32986) 2022-10-04 17:44:58 -07:00
snehring
f677855e7d pbbam: switching to meson, adding version 2.1.0 (#32996) 2022-10-04 18:38:08 -06:00
Sam Grayson
d1fe67b0bc nix: Fix #32994 (#32995)
* Fix nix
* Check value in attribute
2022-10-04 18:37:47 -06:00
SXS Bot
fd911e7b2e spectre: add v2022.10.04 (#32987)
Co-authored-by: sxs-bot <sxs-bot@users.noreply.github.com>
2022-10-04 14:22:21 -06:00
Greg Becker
5f59821433 BuildEnvironment: accumulate module changes to poke to all relevant modules (#32340)
Currently, module changes from `setup_dependent_package` are applied only to the module of the package class, but not to any parent classes' modules between the package class module and `spack.package_base`.

In this PR, we create a custom class to accumulate module changes, and apply those changes to each class that requires it. This design allows us to code for a single module, while applying the changes to multiple modules as needed under the hood, without requiring the user to reason about package inheritance.
2022-10-04 13:06:50 -07:00
eugeneswalker
b57d24a5e1 e4s: add vtk-m +rocm (#32151) 2022-10-04 12:28:24 -07:00
Adam J. Stewart
8e1de16193 py-tensorflow-probability: add v0.18.0 (#32941) 2022-10-04 13:50:25 -05:00
Adam J. Stewart
7fdfdea0c7 py-tensorflow-estimator: add v2.10 (#32940)
* py-tensorflow-estimator: add v2.10

* Typo fix
2022-10-04 13:48:11 -05:00
eugeneswalker
4bd537574b omega-h: add v9.34.13 (#32963) 2022-10-04 12:05:52 -06:00
Todd Gamblin
8c50b44bfe find/list: display package counts last (#32946)
* find/list: display package counts last

We have over 6,600 packages now, and `spack list` still displays the number of packages
before it lists them all. This is useless for large sets of results (e.g., with no args)
as the number has scrolled way off the screen before you can see it. The same is true
for `spack find` with large installations.

This PR changes `spack find` and `spack list` so that they display the package count
last.

* add some quick testing

Co-authored-by: Danny McClanahan <1305167+cosmicexplorer@users.noreply.github.com>
2022-10-04 10:56:46 -07:00
Adam J. Stewart
450a3074e2 Fix typo in documentation (#32984) 2022-10-04 19:54:40 +02:00
iarspider
7f2e204e20 Add checksum for py-pip 22.2.2 (#32877) 2022-10-04 11:26:17 -06:00
iarspider
bf7512e25a Add checksum for py-pysympy 1.11.1 (#32972) 2022-10-04 12:23:14 -05:00
iarspider
aaf6b1fd29 Add checksum for py-absl-py 1.2.0 (#32973) 2022-10-04 12:22:12 -05:00
iarspider
30c2d2765c Add checksum for py-grpcio 1.48.1 (#32974) 2022-10-04 12:21:14 -05:00
Cody Balos
c03979c74b superlu-dist: add 8.1.0 and 8.0.0 versions (#32558) 2022-10-04 07:25:53 -06:00
Dom Heinzeller
8af1802bd9 Bug fix for ca-certificates-mozilla/package.py to enable spack install --source (#32953) 2022-10-04 04:29:48 -06:00
Massimiliano Culpo
abbdf24083 Remove CMakePackage.define alias from most packages (#32950) 2022-10-04 10:58:58 +02:00
Weiqun Zhang
93cd84c922 amrex: add v22.10 (#32966) 2022-10-03 22:01:49 -06:00
iarspider
7daab390b3 Add checksum for py-flatbuffers 2.0.7 (#32955) 2022-10-03 17:53:47 -07:00
Martin Pokorny
916b21bfb4 rdma-core: fix syntax for external discoverability (#32962) 2022-10-03 17:45:46 -06:00
iarspider
977c89cee1 Add checksum for py-pyparsing 3.0.9 (#32952) 2022-10-03 14:57:56 -06:00
Chris White
9225f4f27f Axom: bring in changes from axom repo (#32643)
* bring in changes from axom repo

Co-authored-by: white238 <white238@users.noreply.github.com>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-10-03 14:02:46 -06:00
Lucas Nesi
ffc40a0fdb simgrid: add variant and remove flag (#32797)
* simgrid: remove std c++11 flag
* simgrid: add msg variant
2022-10-03 13:53:59 -06:00
Jack S. Hale
241b4624bc FEniCSx: Updates for 0.5.1 (#32665)
* Updates for DOLFINx 0.5.1 and associated packages
* xtensor needed on anything less than main
* Switch back to Python 3.7 minimum.
* Might be good to point out in our README how to fix Python version?
* Fix basix, xtensor dep
* Add numba feature
* Fix checksum
* Make slepc optional

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-10-03 12:49:04 -07:00
Cody Balos
a51a81655a trilinos: constrain superlu-dist version (#32889)
* trilinos: constrain superlu-dist version for 13.x
* syntax
2022-10-03 12:24:21 -07:00
Cameron Stanavige
db1e32623f unifyfs: pin mercury version; add boost variant (#32911)
Mercury has a new version (v2.2) releasing soon that UnifyFS does not build with and hasn't been tested with. This pins UnifyFS to the last version of Mercury used/tested.

Add a variant to avoid building/using boost

Append -std=gnu99 to cflags if building with gcc@4. Needed for mochi-margo to compile
2022-10-03 11:51:05 -07:00
snehring
6e86daf470 casper: old domain fell off, adding github repo (#32928) 2022-10-03 11:42:03 -07:00
Brian Van Essen
25c1ef1e57 Tidied up configure arguments to use special spack autotools features. (#32930) 2022-10-03 11:05:21 -07:00
Paul R. C. Kent
8e60b3932c QMCPACK: add @3.15.0 (#32931) 2022-10-03 19:28:31 +02:00
iarspider
8227a221e6 Add checksum for py-tomli 2.0.1 (#32949) 2022-10-03 10:45:55 -06:00
Auriane R
941eb8d297 Replace repo with the NVIDIA one (#32951) 2022-10-03 09:33:00 -07:00
Adam J. Stewart
e89b79d074 py-einops: add v0.5.0 (#32959) 2022-10-03 10:29:50 -06:00
iarspider
0fee3095e1 Add checksum for py-pytest-runner 6.0.0 (#32957) 2022-10-03 10:21:51 -06:00
renjithravindrankannath
52e538e1d9 rvs binary path updated for 5.2 rocm release (#32892) 2022-10-03 05:13:52 -06:00
Matthieu Dorier
d4f05b0362 [rocksdb] Added rtti variant (#32918) 2022-10-03 12:55:18 +02:00
Vinícius
9728ddb0cd simgrid new releases (#32920) 2022-10-03 12:51:11 +02:00
Kai Torben Ohlhus
4924a9a28d octave: add version 7.2.0 (#32943) 2022-10-03 12:38:57 +02:00
Adam J. Stewart
4fb99912f1 libtiff: default to +zlib+jpeg (#32945) 2022-10-03 12:37:46 +02:00
Auriane R
7ee8fd5926 Set CMAKE_HIP_ARCHITECTURES with the value of amdgpu_target (#32901) 2022-10-03 10:22:25 +02:00
John W. Parent
5a0f4970df Fixup errors introduced by Clingo Pr: (#32905)
* re2c depends on cmake on Windows
* Winbison properly added to bootstrap package search list
2022-10-02 17:44:05 -07:00
Annop Wongwathanarat
fa7407093e acfl: add v22.1 (#32915)
Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>
2022-10-01 09:23:16 +02:00
Manuela Kuhn
1596191b27 py-jsonschema: add 4.16.0 and new package py-hatch-fancy-pypi-readme (#32929) 2022-09-30 20:57:45 -06:00
Greg Becker
deae0c48e4 develop: canonicalize dev paths and base relative paths on env.path (#30075)
Allow environment variables and spack-specific path substitution variables (e.g. `$spack`) to be
used in the paths associated with develop specs, while maintaining the ability to keep those
paths relative to the environment rather than the working directory.
2022-09-30 20:56:53 +00:00
Manuela Kuhn
a5a16ed5b3 py-jinja2: add 3.1.2 (#32925) 2022-09-30 13:41:48 -06:00
Manuela Kuhn
c4429ad6ed py-ipykernel: add 6.16.0 (#32923) 2022-09-30 12:38:02 -06:00
Manuela Kuhn
918de81f5a py-joblib: add 1.2.0 (#32926) 2022-09-30 12:29:53 -06:00
Manuela Kuhn
8b2ed09832 py-json5: add 0.9.10 (#32927) 2022-09-30 12:09:51 -06:00
Manuela Kuhn
4f5be6c17e py-jeepney: add 0.8.0 (#32924) 2022-09-30 10:33:57 -06:00
Massimiliano Culpo
cf0c4523f3 qmcpack: set python3 executable explicitly (#32900) 2022-09-30 09:43:15 +02:00
Daniel De Lucca
e31f8da021 New Package: Navi (#32895)
* feat: adds navi
* Update var/spack/repos/builtin/packages/navi/package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-30 00:53:53 -06:00
liuyangzhuan
2abbcaa49c add butterflypack 2.2.1 (#32909) 2022-09-29 19:38:02 -06:00
Stephen McDowell
24f9ec7dc0 Update ecp-data-vis-sdk homepage and maintainers (#32886) 2022-09-29 17:33:52 -06:00
G-Ragghianti
d417d49690 Package updates for slate, lapackpp, and blaspp (#32907)
* Added new versions
* New slate version
* Adding GPU support for lapackpp package
* Modified dependency on lapackpp
* Added rocblas and rocsolver to deps
* Testing with custom lapackpp repo
* Added chaining depends_on for +rocm
* Removing testing repo
2022-09-29 17:09:55 -06:00
Stephen Sachs
bb510c7979 [lammps] Add +intel and +user-intel options (#32898)
Going ahead adding this option individually since https://github.com/spack/spack/pull/25015 needs some more time.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-09-29 16:42:08 -06:00
Sergey Kosukhin
56a2cfd19d claw: enable building with oneapi and nag+gcc@10: (#32897)
* claw: enable building when '%oneapi'
* claw: enable building when '%nag' is mixed with 'gcc@10:'
2022-09-29 13:32:10 -07:00
Manuela Kuhn
4b7836f822 py-ipython: add 8.5.0 and py-win-unicode-console: new package (#32903)
* py-ipython: add 8.5.0 and py-win-unicode-console: new package

* Fix style

* Fix dependency version

* Deprecate version 2.3.1 and 3.1.0

* Always skip IPython.kernel

* Move skip_module definition to top
2022-09-29 13:46:18 -06:00
kwryankrattiger
a01c36da45 Install: Add use-buildcache option to install (#32537)
Install: Add use-buildcache option to install

* Allow differentiating between top level packages and dependencies when
determining whether to install from the cache or not.

* Add unit test for --use-buildcache

* Use metavar to display use-buildcache options.

* Update spack-completion
2022-09-29 13:48:06 -05:00
Brian Van Essen
7a25f416b8 Added new versions of NCCL (#32891) 2022-09-29 11:54:07 -06:00
Brian Van Essen
400a9f3df7 Add aws ofi rccl (#32773)
* Added a package for the aws-ofi-rccl plug-in from the ROCm software
stack.  It allows RCCL to use the libfabric communication library.

Added support for using libfabric in Aluminum.

* Updated the run environment so that the plugin would get loaded.

* Added support for setting up the the LD_LIBRARY_PATH for dependent packages.

* Added package for RCCL tests to assess the impact of OFI libfabric RCCL plug-in.
2022-09-29 10:46:27 -07:00
iarspider
699f575976 Add tag for xgboost 1.6.2 (#32896)
* Add tag for xgboost 1.6.2

* Update py-xgboost as well

* Update package.py

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-29 11:10:22 -06:00
Manuela Kuhn
2ea7703d69 py-itsdangerous: add 2.1.2 (#32904) 2022-09-29 10:54:27 -06:00
Stephen McDowell
679cd4b60d Enable adios2+cuda for ecp-data-vis-sdk +cuda (#32885) 2022-09-29 09:49:58 -05:00
Manuela Kuhn
22054403e8 py-hatchling: add 1.10.0 and py-pathspec: add 0.10.1 (#32865) 2022-09-29 08:16:11 -06:00
Mikael Simberg
a78462988b Add patch to link pthread library for llvm 15 (#32838) 2022-09-29 06:41:59 -07:00
Manuela Kuhn
a0147a1f07 py-importlib-metadata-4.12.0 (#32872) 2022-09-29 07:04:42 -06:00
Sergey Kosukhin
19faeab84d intel-oneapi-compilers-classic: extend setup_run_environment with the one from intel-oneapi-compilers (#32854)
* intel-oneapi-compilers-classic: refactor setup_run_environment

* intel-oneapi-compilers-classic: extend setup_run_environment with the one from intel-oneapi-compilers
2022-09-29 07:58:05 -04:00
Annop Wongwathanarat
42a230eef1 Rename arm to acfl, add v22.0.2 (#32518)
Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>
2022-09-29 13:49:39 +02:00
Manuela Kuhn
8d14f16246 py-imageio: add 2.22.0 (#32870) 2022-09-29 05:29:48 -06:00
Manuela Kuhn
dfecbbeeee py-idna: add 3.4 (#32869) 2022-09-29 04:41:55 -06:00
Manuela Kuhn
1b343434c3 py-interface-meta: add 1.3.0 (incl new dependency packages) (#32873)
* py-interface-meta: add 1.3.0 (incl new dependency packages)

* Update var/spack/repos/builtin/packages/py-poetry-dynamic-versioning/package.py

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-29 04:22:41 -06:00
Manuela Kuhn
d9cab51fd7 py-formulaic: add 0.5.2 (#32851) 2022-09-29 04:22:18 -06:00
Manuela Kuhn
3f1ebfd4fb py-fracridge: add 2.0 (#32852) 2022-09-29 04:17:59 -06:00
Howard Pritchard
eab148288a superlu:oneapi-deal with non ISO C99 compliance (#32685)
superlu:oneapi-deal with non ISO C99 complianc in the package.

The Intel OneAPI compilers are based on LLVM 14.  A recent enhancement to LLVM -
  https://reviews.llvm.org/D122983
results in superlu-dist not compiling because of some non ISO C99 compliant stuff.

A workaround is to use an llvm compile line option noted in the above URL.

Signed-off-by: Howard Pritchard <howardp@lanl.gov>
2022-09-29 03:58:03 -06:00
Laurent Aphecetche
17d9960424 gl2ps: set CMAKE_MACOSX_RPATH=True to build (#32777) 2022-09-29 03:50:08 -06:00
Lucas Nesi
b37a1ec12b fxt: add static variant (#32794) 2022-09-29 03:46:05 -06:00
Matthieu Dorier
9515998deb [py-deephyper] Added py-deephyper package (#32848) 2022-09-29 03:38:19 -06:00
Manuela Kuhn
2d0ff51185 py-identify: add 2.5.5 (#32868) 2022-09-29 03:34:32 -06:00
iarspider
7b365f4c43 clhep: add v2.4.5.3 and cms-specific patch (#32757) 2022-09-29 11:26:16 +02:00
Manuela Kuhn
7d50fd3b8e py-imagesize-1.4.1 (#32871) 2022-09-29 03:14:18 -06:00
Rob Jones
0e95f580a0 MGCFD-OP2: add new package (#32529) 2022-09-29 11:11:53 +02:00
Manuela Kuhn
a70897c356 py-flake8: add 5.0.4 (#32867) 2022-09-29 03:02:37 -06:00
Manuela Kuhn
6fe89a4220 py-humanize: add 4.4.0 (#32866) 2022-09-29 03:02:14 -06:00
Adam J. Stewart
bc039524da py-torch: fix +rocm+nccl build (#32771) 2022-09-29 11:01:32 +02:00
Sarah Osborn
77afad229c hypre: add Umpire variant (#32884)
* hypre: Add umpire variant
* hypre: Fix to umpire / GPU target propagation
2022-09-29 02:42:00 -06:00
Hans Fangohr
2214f34380 anaconda3: add v2021.11 and v2022.05 (#32882) 2022-09-29 09:07:16 +02:00
Paul Kuberry
59415e6fc8 hwloc: update url_for_version (#32735) 2022-09-29 09:05:18 +02:00
Paul Kuberry
31d54da198 trilinos: update url (#32887) 2022-09-28 23:30:07 -06:00
Manuela Kuhn
d6d40919b2 py-greenlet: add 1.1.3 (#32864) 2022-09-28 22:57:59 -06:00
Manuela Kuhn
e7b0ef719d py-fonttools: add 4.37.3 (#32850) 2022-09-28 22:05:50 -06:00
Sergey Kosukhin
266453ce24 serialbox: enable building with NAG 7.1 (#32883) 2022-09-28 15:57:51 -06:00
Sergey Kosukhin
81f9a5b732 serialbox: patch to add missing include directives (#32880) 2022-09-28 10:33:59 -06:00
Manuela Kuhn
25a75ff9bf py-filelock: add 3.8.0 and py-setuptools-scm: add 7.0.5 (#32846) 2022-09-28 10:09:59 -06:00
John W. Parent
650a668a9d Windows: Support for Clingo and dependencies (#30690)
Make it possible to install the Clingo package on Windows; this
also provides a means to use Clingo with Spack on Windows.

This includes

* A new "winbison" package: Windows has a port of bison and flex where
  the two packages are grouped together. Clingo dependencies have been
  updated to use winbison on Windows and bison elsewhere (this avoids
  complicating the existin bison/flex packages until we can add support
  for implied virtuals).
* The CMake build system was incorrectly converting CMAKE_INSTALL_PREFIX
  to POSIX format.
* The re2c package has been modified to use CMake on Windows; for now
  this is done by overloading the configure/build/install methods to
  perform CMake-appropriate operations; the package should be refactored
  once support for multiple build systems in one Package is available.
2022-09-28 09:54:00 -06:00
iarspider
db2565cb53 Add checksum for py-ipywidgets 8.0.2, py-jupyterlab-widgets 3.0.3 (#32847)
* Add checksum for py-ipywidgets 8.0.2, py-jupyterlab-widgets 3.0.3, add py-jupyterpackaging10

* Apply changes from review

* Fix
2022-09-28 03:45:53 -06:00
Massimiliano Culpo
63dca0c6cc Remove mentions of "best-effort" matrix expansion in the docs (#32755)
closes #20340
2022-09-28 09:15:36 +02:00
Adam J. Stewart
51feed16db py-sphinx: add v5.2.0 (#32804)
* py-sphinx: add v5.2.0
* py-colorama: add v0.4.5
* 3.6 still supported
2022-09-27 21:13:49 -06:00
Vicente Bolea
af1e62b0ac vtkm: add v1.9.0-rc1, keep v1.8.0 preferred (#32858) 2022-09-27 17:41:48 -06:00
eugeneswalker
87b014ed13 e4s: use ubuntu 20.04 image and %gcc@9.4.0 (#32795) 2022-09-27 16:25:56 -06:00
Tom Scogland
d0136899a2 fix cmake cache package handling for hip workaround 2022-09-27 14:21:59 -07:00
Adam J. Stewart
90b86a2266 py-torch-geometric: add v2.1.0 (#32822)
* py-torch-geometric: add v2.1.0

* black

* Update homepage

* Add missing sklearn dep
2022-09-27 15:47:45 -05:00
Alex Hornburg
67717c569e shell.py: fix undefined variable in csh deactivate (#32816)
This commit fixes #27027.

The root cause of the issue is that the `SPACK_OLD_PROMPT` variable
was evaluated in string interpolation regardless of whether the
guard condition above evaluates to true or false. This commit uses
the `eval` keyword to defer evaluation until the command is executed.

Co-authored-by: Alexander Hornburg <alexande@xilinx.com>
2022-09-27 12:32:42 -07:00
snehring
cb9f174a7f zziplib: adding some missing build deps (#32833)
* zziplib: adding some missing build deps
2022-09-27 10:46:01 -06:00
Philipp Edelmann
f0ec6a994c pgplot: install rbg.txt and change PGPLOT_DIR (#32775)
The file rbg.txt is needed for many PGPLOT application, such as the MESA
stellar evolution code. This change installs the file to the PGPLOT_DIR,
where the library expects it.

PGPLOT_DIR was previously set to the prefix itself, which is an odd
place to install rgb.txt. This commit changes it to lib/pgplot5,
following the convention used by Debian.

Co-authored-by: Philipp Edelmann <edelmann@fs.tum.de>
2022-09-27 09:44:19 -07:00
Laurent Aphecetche
384ff70b0d root: add arrow variant (#32837) 2022-09-27 09:26:22 -07:00
Michael Kuhn
9c1d6da111 strace: add 5.19 (#32844) 2022-09-27 08:45:28 -07:00
Manuela Kuhn
0c49ee939b py-executing: add 1.1.0 (#32840) 2022-09-27 10:42:58 -05:00
Manuela Kuhn
086dc66653 py-exifread: add 3.0.0 (#32841) 2022-09-27 10:41:59 -05:00
Manuela Kuhn
608d20446d py-fasteners: add 0.18 (#32843) 2022-09-27 10:39:08 -05:00
Manuela Kuhn
b7a43bf515 py-fastjsonschema: add 2.16.2 (#32845) 2022-09-27 10:38:02 -05:00
Stefano Bertone
ae627150b2 cgal: depends on for older versions (#32802)
* cgal: depends on for older versions
* Update package.py

Co-authored-by: steo85it <steo85it@users.noreply.github.com>
2022-09-27 08:32:16 -07:00
iarspider
9f271fa388 hwloc: replace 'shared' variant with 'libs' (#32093)
* hwloc: replace 'shared' variant with 'libs'
* PEP-8
* Fix gpi-space
2022-09-27 05:53:57 -06:00
Adam J. Stewart
43ceff4193 py-libclang: add v14 (#32824) 2022-09-26 17:21:52 -06:00
Chris White
777271da18 improve lexing error (#32832) 2022-09-26 22:47:45 +00:00
Pak Lui
de9fc038f7 add ROCmPackage to OSU Micro Benchmarks (#32806) 2022-09-26 14:26:58 -07:00
iarspider
b192e3492c Add checksum for py-nbconvert 7.0.0, py-mistune 2.0.4 (#32817) 2022-09-26 14:02:06 -06:00
Jean Luca Bez
f64ca7bc6a hdf5-vol-async: fix path needed for h5bench (#32805)
* fix path needed for h5bench
* Update var/spack/repos/builtin/packages/hdf5-vol-async/package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-26 12:21:45 -06:00
Laurent Aphecetche
a077b2b0ee vmc: add versions 1-1-p1 and 2-0 (#32703)
* vmc: add versions 1-1-p1 and 2-0
* Update var/spack/repos/builtin/packages/vmc/package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-26 11:02:10 -07:00
Valentin Volkl
b6be1f3520 hoppet: fix typo in hep tag (#32820) 2022-09-26 11:26:05 -06:00
Manuela Kuhn
94435778ba py-datalad-metalad: add 0.4.5 and new package py-datalad-metadata-model (#32811)
* py-datalad-metalad: add 0.4.5

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-26 11:25:43 -06:00
Manuela Kuhn
f8e23b4fbe py-cryptography: add 38.0.1 (#32809)
* py-cryptography: add 38.0.1

* Fix rust dependency
2022-09-26 10:38:01 -06:00
Alberto Invernizzi
b1fda5dd64 add neovim version 0.7.2 (#32815) 2022-09-26 09:10:38 -07:00
akhursev
5fbbc5fa68 2022.3 oneAPI release promotion (#32786)
In addition to the new release, made intel-oneapi-compilers-classic version number match the compiler version number, instead of the version of the package that contains it.

Co-authored-by: Robert Cohn <robert.s.cohn@intel.com>
2022-09-26 10:01:59 -06:00
Seth R. Johnson
494946d020 celeritas: new versions 0.1.2,3 (#32803) 2022-09-26 08:50:14 -07:00
Manuela Kuhn
7c5a417bb3 py-bottleneck: add 1.3.5 and py-versioneer: add 0.26 (#32780)
* py-bottleneck: add 1.3.5

* Fix sha256 for version 0.18

* Fix python dependency
2022-09-26 10:47:37 -05:00
Manuela Kuhn
beab39eb3c py-coverage: add 6.4.4 (#32789)
* py-coverage: add 6.4.4

* Fix python version in +toml variant
2022-09-26 10:46:23 -05:00
Manuela Kuhn
100eb5014a py-datalad-container: add 1.1.7 (#32810) 2022-09-26 10:42:25 -05:00
Laurent Aphecetche
a5bf7f458d root: make X11 really optional on macOS (#32661)
* root: make X11 really optional on macOS
* Update var/spack/repos/builtin/packages/root/package.py
* remove when clauses in provides

Co-authored-by: Hadrien G. <knights_of_ni@gmx.com>
2022-09-26 08:37:21 -07:00
Manuela Kuhn
b961cfa8d6 py-debugpy: add 1.6.3 (#32812) 2022-09-26 10:35:59 -05:00
Manuela Kuhn
07157306b2 py-distro: add 1.7.0 (#32813) 2022-09-26 10:34:43 -05:00
Laurent Aphecetche
3aa93ca79d arrow: add version 9 and more variants (#32701)
* utf8proc: add version 2.7.0 and shared variant
* xsimd: add version 8.1.0
* arrow: add version 9.0.0 and more variants
2022-09-26 08:30:24 -07:00
Adam J. Stewart
b7926eb6c8 py-py2cairo: only supports Python 2 (#32818) 2022-09-26 17:14:20 +02:00
Adam J. Stewart
1f6545c1c7 gcc: add Apple Silicon support for newer versions (#32702) 2022-09-26 16:21:25 +02:00
Auriane R
677a862fb9 Adapt pika to use the p2300 spack package (#32667)
* Adapt pika to use the p2300 spack package

* Fix formatting with black
2022-09-26 15:07:26 +02:00
Massimiliano Culpo
93dc500f41 py-pkgutil-resolve-name: fix issue with UTF-8 character
This modifications breaks `develop` since it doesn't
pass audits with Python 2.7 It is to be investigated
why audits pass in CI for the PR and the issue is
revealed only when the package is pushed to develop.
2022-09-26 14:47:13 +02:00
Massimiliano Culpo
ecce657509 Remove "tut" from the "build-systems" pipeline
PR #32615 deprecated Python versions up to 3.6.X. Since
the "build-systems" pipeline requires Python 3.6.15 to
build "tut", it will fail on the first rebuild that
involves Python.

The "tut" package is meant to perform an end-to-end
test of the "Waf" build-system, which is scarcely
used. The fix therefore is just to remove it from
the pipeline.
2022-09-26 14:47:13 +02:00
John W. Parent
30f6fd8dc0 Fetching/decompressing: use magic numbers (#31589)
Spack currently depends on parsing filenames of downloaded files to
determine what type of archive they are and how to decompress them.
This commit adds a preliminary check based on magic numbers to
determine archive type (but falls back on name parsing if the
extension type cannot be determined).

As part of this work, this commit also enables decompression of
.tar.xz-compressed archives on Windows.
2022-09-26 00:01:42 -07:00
iarspider
a5ea566bdf Update py-poetry to 1.2.1 (including new packages) (#32776)
* Update py-poetry to 1.2.1

* Update py-xattr

* Apply style from review

* Apply suggestions from code review (part 1)

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

* Changes from review - 2

* Fix typo

* Fix style

* Add missing py-dulwich version

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

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

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

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

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

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

* Apply changes from review

* Add py-backports-cached-property and fix style

* Apply suggestions from code review

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

* Update package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-25 12:36:42 -05:00
Sergey Kosukhin
5dc440ea92 py-eccodes: add version 1.5.0 (#32792)
* py-eccodes: ensure the minimal recommended shared version of libeccodes

* py-eccodes: set less general environment variables to enable location of libeccodes

* py-eccodes: add version 1.5.0

* py-eccodes: make flake8 happy
2022-09-24 16:00:45 -05:00
Manuela Kuhn
d9b7bedaaa py-cppy: add 1.2.1 (#32790)
* py-cppy: add 1.2.1

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

Co-authored-by: iarspider <iarspider@gmail.com>

Co-authored-by: iarspider <iarspider@gmail.com>
2022-09-24 15:57:55 -05:00
Manuela Kuhn
00753d49da py-click: add 8.1.3 (#32788) 2022-09-24 15:53:42 -05:00
Valentin Volkl
5573ccee53 py-colorcet: add new package (#31597)
* py-colorcet: add new package

* style

* py-colorcet: depend on python 2.7:

* address pr review comments

* address pr review comments

* style
2022-09-24 15:52:14 -05:00
Manuela Kuhn
b721f8038f py-ci-info: add 0.3.0 (#32785) 2022-09-24 15:49:58 -05:00
Manuela Kuhn
08371954bb py-charset-normalizer: add 2.1.1 (#32784) 2022-09-24 15:49:16 -05:00
Manuela Kuhn
3e4bf1e400 py-cfgv: add 3.3.1 (#32782) 2022-09-24 15:48:30 -05:00
Manuela Kuhn
cd58ae23be py-chardet: add 3.0.2 (#32783) 2022-09-24 15:47:37 -05:00
Manuela Kuhn
184af723e4 py-certifi: add 2022.9.14 (#32781) 2022-09-24 15:46:32 -05:00
Manuela Kuhn
c2aab98920 py-beautifulsoup4: add 4.11.1 (#32779) 2022-09-24 15:42:47 -05:00
iarspider
6ee7b5ad91 Add checksum for py-hist 2.6.1, py-boost-histogram 1.3.1 (#32787)
* Add checksum for py-hist 2.6.1

* Swap when and type
2022-09-24 15:41:18 -05:00
iarspider
02e4d4e546 Add checksum for py-google-auth 2.11.0, py-cachetools 5.2.0 (#32791)
* Add checksum for py-google-auth 2.11.0

* Swap when and type

* Update package.py
2022-09-24 15:27:19 -05:00
Tamara Dahlgren
4751881fd1 Fix two docstring typos (#32751) 2022-09-23 11:17:01 -07:00
Manuela Kuhn
3f28ef89cc py-pytz: add 2022.2.1 (#32711) 2022-09-23 09:30:01 -06:00
Daryl W. Grunau
ca62819261 Packages/py scipy (#32767) 2022-09-23 07:41:44 -06:00
Manuela Kuhn
4bfa61c149 py-attrs: add 22.1.0 (#32762) 2022-09-23 04:09:44 -06:00
Harmen Stoppels
2fa9aff206 gitlab: cuda not compatible amazon linux 2 (#32678)
amazon linux 2 ships a glibc that is too old to work with cuda toolkit
for aarch64.

For example:

`libcurand.so.10.2.10.50` requires the symbol `logf@@GLIBC_2.27`, but
glibc is at 2.26.

So, these specs are removed.
2022-09-23 11:01:59 +02:00
Manuela Kuhn
e98e27ac3f py-asttokens: add 2.0.8 (#32760) 2022-09-23 02:49:43 -06:00
iarspider
86958669cf New packages: py-conan, py-node-semver, py-patch-ng (#32753)
* New packages: py-conan, py-node-semver, py-patch-ng

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

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

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-23 02:17:42 -06:00
Peter Scheibel
0a050785e9 Skip all tests using problematic fixture on python 2.7 (#32768) 2022-09-23 09:29:48 +02:00
Manuela Kuhn
8f5b847cb0 py-babel: add 2.10.3 (#32763)
* py-babel: add 2.10.3

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-22 18:29:38 -06:00
iarspider
cbde650eed New package: py-jaraco-classes (#32759)
* New package: py-jaraco-classes

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-22 14:41:53 -06:00
Matthieu Dorier
b18ab062cf [py-tinydb] Added package py-tinydb (#32752)
* [py-tinydb] added package py-tinydb

* [py-tinydb] corrected version in dependency for py-tinydb

* [py-tinydb] update python dependency

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

* [py-tinydb] update dependency

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-22 15:32:19 -05:00
Peter Scheibel
4094e59ab8 Fetching: log more exceptions (#32736)
Include exception info related to url retrieval in debug messages
which otherwise would be swallowed. This is intended to be useful
for detecting if CA configuration interferes with downloads from
HTTPS links.
2022-09-22 10:54:52 -07:00
Adam J. Stewart
0869d22fcb py-pytorch-lightning: add v1.7.7 (#32765) 2022-09-22 10:22:45 -07:00
Manuela Kuhn
be38400ce2 py-anyio: add 3.6.1 (#32756) 2022-09-22 10:30:14 -06:00
Hans Fangohr
2ad47c8ab2 Enable use of latest version of Octopus (12.0) (#32758)
Release notes:
https://www.octopus-code.org/documentation/main/releases/octopus-12/
2022-09-22 08:50:59 -07:00
iarspider
83d55daae5 New package: cepgen (#32754) 2022-09-22 08:47:44 -07:00
Andrey Alekseenko
0ddbb92ae3 GROMACS: update CMake version, and a couple more fixes (#32748)
- GROMACS is not an acronym (https://www.gromacs.org/about.html).
- GROMACS switched to LGPL a long time ago, so let's mention it first.
- CMake version required for `main` has been bumped to 3.18
  (https://gitlab.com/gromacs/gromacs/-/merge_requests/3093)
- `-DGMX_USE_OPENCL` flag was used before 2021; for newer versions,
  `-DGMX_GPU=OpenCL` is enough.
2022-09-22 07:10:30 -05:00
Tamara Dahlgren
54d06fca79 Add hash hint to multi-spec message (#32652) 2022-09-22 09:18:43 +02:00
Sreenivasa Murthy Kolam
457daf4be6 Add new variants (OPENCL and HIP) for MIVisionX recipe and their dependencies correctly. (#32486)
* add the 2 variants OPENCL and HIP and their dependencies correctly
for OPENCL - rocm-opencl, miopengemm and miopen-opencl
for HIP - miopen-hip
Earlier this was adding both the dependencies -miopen-hip and miopen-opencl
for both the backends which did not seem correct.
Also corrected the miopen-hip or miopen-opencl config.h  in patch() depending on the
backend
Also added libjpeg-turbo as it is required for building ROCAl .
the AMDRpp is still required for ROCAL inclusion but it currently does not build
AMDRpp will be added as a new spack recipe and the mivisionx will refer to that as a
dependency in future.

* fix style errors
* bump up the version for 5.2.3 release. tested +opencl, +hip and ~hip~opencl(cpu backend)

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-21 16:54:40 -07:00
renjithravindrankannath
c6d7557484 Update the version details for rccl, rvs, rocm-tensile rocm-5.2.3 release (#32741)
* ROCm 5.2.3 release changes
* Patch file for rccl

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-21 15:48:23 -07:00
Sreenivasa Murthy Kolam
e7f1f1af30 Update the version details for rocm-5.2.3 release (#32733)
* Bump up the version for rocm-5.2.3 release
* revert miopen-hip till the tag for mlirmiopen for 5.2.3 is available
2022-09-21 14:40:40 -07:00
Massimiliano Culpo
7e01a1252a Allow conditional variants as first values in a variant directive (#32740) 2022-09-21 19:22:58 +02:00
Robert Pavel
d07b200b67 Spackage for mlperf's OpenCatalyst (#32553)
* Initial opencatalyst proxy app spackage

Initial spackage for opencatalyst proxy app. Includes exposing of
versions in dependency spackages

* Verified Functionality and Spack Style

Verified build of mlperf-opencatalyst and fixed lingering spack style
issues

* Making requested changes to py-ocp

Making requested changed to spackage

* Further Requested Changes
2022-09-21 10:45:48 -06:00
Vanessasaurus
663f55825d flux-core: add v0.43.0 (#32744)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2022-09-21 18:26:41 +02:00
Vanessasaurus
dc214edc9c flux-sched: add v0.24.0 (#32743)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2022-09-21 18:26:09 +02:00
Manuela Kuhn
36df918e7d py-bleach: add 5.0.1 (#32727) 2022-09-21 09:48:16 -05:00
Laurent Aphecetche
874364bf4d vgm: add v5-0 (#32742) 2022-09-21 15:38:52 +02:00
Tamara Dahlgren
f12ececee5 Docs: Update pipeline ci rebuild to add --tests (plus fixed typos) (#32048) 2022-09-21 14:23:58 +02:00
Garth N. Wells
1313bc99a6 dolfinx: fix depends_on directive missing a version (#32730) 2022-09-21 10:12:22 +02:00
Adam J. Stewart
e45bc8440b pango: harfbuzz+coretext required on macOS (#32637) 2022-09-20 17:57:50 -06:00
Paulo Baraldi Mausbach
16692b802b New python package support: py-river (#32718) 2022-09-20 15:47:08 -05:00
John W. Parent
fd66f55e3c cmake: add v3.24.1 and v3.24.2 (#32654) 2022-09-20 11:24:16 -07:00
Wouter Deconinck
4b66364b06 gaudi: @:36 fails to build with fmt@9: (#32699)
Since fmt@9.0.0 and 9.1.0 were [added](6c4acfbf83) to spack a few days ago, gaudi fails to compile with default concretization. Since gaudi developers are usually paying attention to new versions of dependencies, I'm going to assume (perhaps optimistically) that the next bugfix version of gaudi will fix this (even though the issue has not been reported yet to Gaudi; I posted on the [key4hep public mirror](https://github.com/key4hep/Gaudi/issues/1)).
2022-09-20 11:20:55 -07:00
HELICS-bot
692f1d0e75 helics: Add version 3.3.0 (#32682)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ryan Mast <3969255+nightlark@users.noreply.github.com>
2022-09-20 11:53:59 -06:00
Stephanie Labasan Brink
2f796e1119 variorum: new versions 0.5 and 0.6, remove log option (#32731) 2022-09-20 11:46:04 -06:00
iarspider
ac459df2b6 Add fixed version 0.7.0 to cpu-features (#32726)
* Add fixed version 0.7.0 to cpu-features
* [@spackbot] updating style on behalf of iarspider

Co-authored-by: iarspider <iarspider@users.noreply.github.com>
2022-09-20 10:40:39 -07:00
Joel Falcou
d8e566d554 Update EVE to 2022.09 (#32729) 2022-09-20 10:35:39 -07:00
Luke Diorio-Toth
cc0e7c87c1 new version (py-multiqc v1.13) + new package (py-rich-click) (#32719)
* started updating multiqc package

* working now

* added py-rich-click

* fixed style

* changed py-matlibplot versions

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

* changed py-networkx versions

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

* changed py-coloredlogs versions

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

* changed python versions

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

* changed py-markdown versions

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

* changed py-pyyaml requirement

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

* changed py-requests requirements

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

* changed py-spectra requirements

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-20 11:14:01 -06:00
Manuela Kuhn
757a2db741 py-python-gitlab: add 3.9.0 (#32723) 2022-09-20 10:41:53 -06:00
Manuela Kuhn
8409ec0f21 py-annexremote: add 1.6.0 (#32725) 2022-09-20 10:06:03 -06:00
Manuela Kuhn
0d3a4d799a py-pybids: add 0.15.3 (#32722) 2022-09-20 11:03:33 -05:00
Manuela Kuhn
578d06a86a py-nibabel: add 4.0.2 (#32721) 2022-09-20 11:01:06 -05:00
dependabot[bot]
e656b4659a build(deps): bump codecov/codecov-action from 3.1.0 to 3.1.1 (#32717)
Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/codecov/codecov-action/releases)
- [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md)
- [Commits](81cd2dc814...d9f34f8cd5)

---
updated-dependencies:
- dependency-name: codecov/codecov-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-09-20 14:03:47 +02:00
natshineman
3b273e263b osu-micro-benchmarks: add v6.1 (#32692) 2022-09-20 12:57:59 +02:00
Jim Galarowicz
24245be85a must: fix incorrect cmake argument (#32671) 2022-09-20 12:45:15 +02:00
Massimiliano Culpo
71434d8b9d intel-oneapi-itac: remove UTF-8 character in docstring
This character causes random failures in CI for Python 2.7
2022-09-20 11:02:10 +02:00
iarspider
2518a55105 Add checksum for py-nbconvert 6.5.1 (#32646) 2022-09-20 09:31:48 +02:00
Jen Herting
637a95c67f py-h5py: add v3.7.0 (#32578) 2022-09-20 09:30:36 +02:00
Manuela Kuhn
7e00852278 py-bids-validator: add 1.9.8 (#32712) 2022-09-20 01:05:45 -06:00
Gregory Lee
9b9691233a stat: add v4.2.1 (#32691) 2022-09-20 08:43:36 +02:00
Sreenivasa Murthy Kolam
0405ed6e9b Bump up the version for rocm-5.2.1 release (#32195)
* Bump up the version for rocm-5.2.1-initial commit
* Bump up the version for rocm-5.2.1 release
* Bump up the version for rocm-5.2.1 release
* correct the PROF_API_HEADER_PATH to include
* Bump up the version of rocm-openmp-extras for rocm-5.2.1 release
* bump up the version of rocwmma for 5.2.1
2022-09-19 21:13:38 -06:00
Jim Edwards
60997a7bc3 add pio2_5_9 to spack package (#32716) 2022-09-19 15:45:40 -06:00
Adam J. Stewart
5479f26aa6 py-pandas: add v1.5.0 (#32714) 2022-09-19 15:09:52 -06:00
kent-cheung-arm
8a7343f97b Added variant to ensure Arm Forge license acceptance (#32635)
* Added variant to ensure Arm Forge license acceptance
* Update var/spack/repos/builtin/packages/arm-forge/package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-19 13:45:43 -07:00
Wouter Deconinck
5b26df8f64 imagemagick: new variant ghostscript (#32450)
* imagemagick: new variant ghostscript

Ghostscript adds about 75 dependencies to an installation of
imagemagick (97 without, 172 with Ghostscript). This adds a
variant (defaulting to true for backward compatibility) that
allows users to turn off Ghostscript support.

* imagemagick: be explicit when `--with-gslib`

* imagemagick: fix suggestion fail

* imagemagick: use spec.prefix.share.font

* imagemagick: default ghostscript false

* imagemagick: no need for join_path anymore

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-19 15:41:11 -05:00
Adam J. Stewart
83e66ce03e Deprecate Python 2 support (#32615)
This PR deprecates using Spack to install [EOL Python versions](https://endoflife.date/python), including Python 2.7, 3.1–3.6. It also deprecates running Spack with Python 2.7. Going forward, we expect Spack to have the following Python support timeline.

### Running Spack

* Spack 0.18 (spring 2022): Python 2.7, 3.5–3.10
* Spack 0.19 (fall 2022): Python 2.7 (deprecated), 3.6–3.11
* Spack 0.20 (spring 2023): Python 3.6–3.11

### Building with Spack

* Spack 0.18 (spring 2022): Python 2.7, 3.1–3.10
* Spack 0.19 (fall 2022): Python 2.7, 3.1–3.6 (deprecated), 3.7–3.11
* Spack 0.20 (spring 2023): Python 3.7–3.11

This is a reboot of #28003. See #31824 for a detailed discussion of the motivation for this PR.
If you have concerns about this change, please comment on #31824.
2022-09-19 13:34:38 -07:00
Manuela Kuhn
cc78d5db36 py-datalad: add 0.17.5 (#32676)
* py-datalad: add 0.17.5

* Fix description of py-types-urllib3

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

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

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

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

* Add colorama dependency for windows

* Fix importlib-metadata dependency

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

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

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

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

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

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

* Use conflict to avoid dependency duplication

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-19 15:30:34 -05:00
rsanthanam-amd
8f8205af88 NCCL should not be dependent on ROCm builds since RCCL is used instead. (#32461)
Allow the nccl flag to be specified even for ROCm builds so that NCCL kernels are included in the build.

In this case the NCCL kernels will use RCCL as the backend implementation.
2022-09-19 15:02:02 -05:00
Stephen Sachs
13d870157f Adding intel-oneapi-itac package (#32658)
* Adding intel-oneapi-itac package
* Make black happy
* add rscohn2 as maintainer
* black prefers double quotes

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
Co-authored-by: Robert Cohn <rscohn2@gmail.com>
2022-09-19 12:44:32 -07:00
Terry Cojean
5d42185698 Ginkgo: improve smoke testing (#32647)
* Ginkgo: improve smoke testing
* Fix style issues
* Pass `self.compiler.{cc,cxx}` to the smoke tests
2022-09-19 12:37:34 -07:00
Ashwin Kumar
3ffc7f4281 patch etsf-io tests (#32666)
(Patches from meisam.tabriz@mpcdf.mpg.de and smoke tests from @fangohr)
2022-09-19 12:31:59 -07:00
Wouter Deconinck
7d250c4bea root: determine_variants cxxstd=20 support (#32673)
This is somewhat ahead of reality, but once/when external ROOT installs with cxxstd=20 are common, we will need this to pick up the correct variant.
2022-09-19 11:32:47 -07:00
snehring
edee67d96f fasttree: updating to 2.1.11 (#32683) 2022-09-19 11:07:51 -07:00
Massimiliano Culpo
fc1e25c5e1 Don't run bootstrap on package only PRs (#32689)
* Don't run bootstrap on package only PRs

* Run bootstrap tests when ci.yaml is modified

* Test a package only PR

* Revert "Test a package only PR"

This reverts commit af96b1af60b0c31efcc9a2875ffb1a809ef97241.
2022-09-19 10:59:29 -07:00
Adam J. Stewart
bb071d03ba py-sip: add v6.6.2 (#32695)
* py-sip: add v6.6.2

* Fix python deptype
2022-09-19 10:56:47 -07:00
Wouter Deconinck
0298823e28 edm4hep: allow variant cxxstd 20, sync with podio (#32698)
Now that `podio` can support `cxxstd` variants 17 and 20, we can allow `edm4hep` to use `cxxstd=20` as well, but must ensure that `edm4hep` uses the same `cxxstd` variant as `podio`. Solution as in `celeritas`.
2022-09-19 10:51:22 -07:00
Laurent Aphecetche
51d2c05022 geant4-vmc: add version 6-1-p1 (#32704) 2022-09-19 10:12:02 -07:00
iarspider
3762e7319d Fix benchmark recipe after branch name was changed (#32708) 2022-09-19 10:08:30 -07:00
Wouter Deconinck
2f19826470 geant4: new bugfix version 11.0.3 (#32700)
Geant4 has a new bugfix version 11.0 patch-03, [release notes](https://geant4-data.web.cern.ch/ReleaseNotes/Patch.11.0-3.txt). No build system changes.
2022-09-19 13:11:31 +01:00
Manuela Kuhn
0f9cd73f58 py-neurora: add 1.1.6.8 (#32684) 2022-09-19 04:41:41 -06:00
Manuela Kuhn
17c16ac2fc py-pydicom: add 2.3.0 (#32681) 2022-09-19 04:25:35 -06:00
John W. Parent
0376a62458 Attempt at patching phist find mpi heuristic (#32688)
for updated phist version
2022-09-18 11:18:28 -05:00
Manuela Kuhn
d4c13b0f8f Add skip_import to PythonPackage and use it in py-nilearn (#32664)
* Add skip_import to PythonPackage and use it in py-nilearn

* Fix dependencies
2022-09-17 23:02:30 +00:00
Paul Kuberry
2c7c749986 xyce: Change preferred to last numeric version (#32679)
- Also handles new constraints on Trilinos version
2022-09-17 13:57:40 -06:00
Robert Cohn
9e0755ca3a [intel-oneapi-compilers] fix CC/CXX (#32677) 2022-09-16 14:16:06 -04:00
Massimiliano Culpo
0f26931628 CI: add coverage on Windows (#32610)
Co-authored-by: Tom Scogland <scogland1@llnl.gov>
2022-09-16 05:38:29 -07:00
Todd Gamblin
a0c7209dc1 bugfix: package hash should affect process, dag, and dunder hashes (#32516)
This fixes a bug where two installations that differ only by package hash will not show
up in `spack find`.

The bug arose because `_cmp_node` on `Spec` didn't include the package hash in its
yielded fields. So, any two `Spec` objects that were only different by package hash
would appear to be equal and would overwrite each other when inserted into the same
`dict`. Note that we could still *install* specs with different package hashes, and they
would appear in the database, but we code that needed to put them into data structures
that use `__hash__` would have issues.

This PR makes `Spec.__hash__` and `Spec.__eq__` include the `process_hash()`, and it
makes `Spec._cmp_node` include the package hash. All of these *should* include all
information in a spec so that we don't end up in a situation where we are blind to
particular field differences.

Eventually, we should unify the `_cmp_*` methods with `to_node_dict` so there aren't two
sources of truth, but this needs some thought, since the `_cmp_*` methods exist for
speed. We should benchmark whether it's really worth having two types of hashing now
that we use `json` instead of `yaml` for spec hashing.

- [x] Add `package_hash` to `Spec._cmp_node`
- [x] Add `package_hash` to `spack.solve.asp.spec_clauses` so that the `package_hash`
      will show up in `spack diff`.
- [x] Add `package_hash` to the `process_hash` (which doesn't affect abstract specs
      but will make concrete specs correct)
- [x] Make `_cmp_iter` report the dag_hash so that no two specs with different
      process hashes will be considered equal.
2022-09-16 00:57:10 +00:00
liuyangzhuan
46d7ba9f78 adding butterflypack 2.2.0 (#32670) 2022-09-15 18:14:01 -06:00
iarspider
31c24cd0d5 New package: xrdcl-record (#32663)
* New package: xrdcl-record
* Flake-8
2022-09-15 10:13:37 -07:00
Matthew Archer
66b451a70d Fenicsx v0.5.0 (#32611)
* initial commit of 0.5.0 changes
* updated dependencies
* updated ffcx sha
* comment style
* llvm compilers
* introduce pugixml dependency for 0.5.0:
* update compilers to support C++20 features
* style fixes
* xtensor and xtl not needed for basix 0.5.0 and above
* Skip to Basix 0.5.1

The 0.5.1 release removes the C++ build dependency on Python that sneaked into the 0.5.0 build system.

* Improve depends on version ranges
* More dependency version improvements

Co-authored-by: Chris Richardson <chris@bpi.cam.ac.uk>
Co-authored-by: Garth N. Wells <gnw20@cam.ac.uk>
2022-09-15 08:11:25 -07:00
Robert Underwood
6f15d8ac76 added missing dependency for py-msgpack that breaks neovim (#32631)
* added missing dependency for py-msgpack that breaks neovim

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

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

Co-authored-by: Robert Underwood <runderwood@anl.gov>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-15 09:45:39 -05:00
Glenn Johnson
123354e920 FPLO: add new package (#32580) 2022-09-15 10:03:05 +02:00
Matthieu Dorier
eaf3f7c17c [py-pip] fix setup_dependent_package in py-pip (#32632) 2022-09-14 23:41:34 -06:00
Vicente Bolea
dde5867d15 libcatalyst: use git instead of fixed urls (#32642)
The issue is that we are not not able to install (Fetch URL error) any
version of catalyst other than the specified in the spack package.py.
This very version is accessible only because it is cached by Spack. The
real URL does not exist anymore, I believe the reason is that there used
to be a tag in catalyst that does not exist anymore.
2022-09-14 17:05:02 -07:00
John W. Parent
deca34676f Bugfix: find_libraries (#32653)
53a7b49 created a reference error which broke `.libs` (and
`find_libraries`) for many packages. This fixes the reference
error and improves the testing for `find_libraries` by actually
checking the extension types of libraries that are retrieved by
the function.
2022-09-14 14:45:42 -06:00
Peter Scheibel
7971985a06 Manifest parsing: skip invalid manifest files (#32467)
* catch json schema errors and reraise as property of SpackError
* no need to catch subclass of given error
* Builtin json library for Python 2 uses more generic type
* Correct instantiation of SpackError (requires a string rather than an exception)
* Use exception chaining (where possible)
2022-09-14 13:02:51 -07:00
Sergey Kosukhin
ebb20eb8f8 llvm: fix detection of LLDB_PYTHON_EXE_RELATIVE_PATH (#32584) 2022-09-14 12:45:41 -06:00
psakievich
045a5e80cb Allow version to accept the '=' token without activating lexer switch (#32257) 2022-09-14 10:16:28 -07:00
Valentin Volkl
01c9780577 py-awkward: allow newer, fixed rapidjson versions (#32650)
Rapidjson was constrained due to a bug (see https://github.com/spack/spack/pull/29889) , but newer (although untagged) versions of rapidjson have since been added to spack (https://github.com/spack/spack/pull/29869). Tested the build of py-awkward with the latest, works fine.
2022-09-14 11:57:20 -05:00
iarspider
5ffde1d51c Add checksum for yoda 1.9.6 (#32648) 2022-09-14 09:48:56 -07:00
Ishaan Desai
4453653418 [py-pyprecice] add v2.5.0.0 and v2.5.0.1 and update checksum of v2.4.0.0 (#32551)
* Update versions 2.5.0.0 and 2.5.0.1

* Applying review changes

* Updating incorrect checksum for v2.4.0.0

* Add for loop to define depends_on for preCICE versions and bindings versions

* Formatting

* Missing comma
2022-09-14 09:55:48 -05:00
Paul Kuberry
f37e9addcd compadre: add v1.5.0, v1.4.1 (#32609) 2022-09-14 06:49:52 -06:00
Houjun Tang
c1b3f0e02f Add hdf5-vol-async v1.3 (#32634) 2022-09-14 04:21:48 -06:00
Adam J. Stewart
ddd18351a1 py-pytorch-lightning: add v1.7.6 (#32644) 2022-09-14 02:09:58 -06:00
Adam J. Stewart
ce56cb23fe py-tokenize-rt: add missing setuptools dependency (#32639) 2022-09-14 10:04:03 +02:00
Jonas Thies
8d2cd4a620 phist: add v1.9.5 (#32621) 2022-09-14 09:46:09 +02:00
Erik Schnetter
9543716d81 berkeley-db: Correct TLS auto-detection (#32592) 2022-09-13 22:13:50 -06:00
Zack Galbreath
4ebdc5643e Revert "e4s ci: restore power builds (#32296)" (#32633)
This reverts commit 0d18c32bca.
2022-09-14 03:26:26 +00:00
Adam J. Stewart
93c39464e3 json-glib: add pkgconfig dependency (#32638) 2022-09-13 21:18:55 -06:00
Adam J. Stewart
cb323b1f55 graphite2: fix build on macOS (#32636) 2022-09-13 21:16:59 -06:00
João Seródio
9f72962dd1 New package: py-qiskit-nature (#32628) 2022-09-13 21:16:38 -06:00
Robert Underwood
9e5f3f96dd add ability to disable werror for rocksdb (#32618)
* add ability to disable werror for rocksdb
* Update var/spack/repos/builtin/packages/rocksdb/package.py

Co-authored-by: Robert Underwood <runderwood@anl.gov>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-13 19:45:56 -06:00
Sam Broderick
d6a3ffc301 Update module_file_support.rst (#32629)
Missing lead in "This may to inconsistent modulfiles if..."
2022-09-14 01:41:50 +00:00
Jonas Thies
4654d66905 packages/phist: new version 1.10 (#32581)
* packages/phist: new version 1.10

* fix (and narrow) conflicts, thanks @glennpj
2022-09-13 17:21:46 -05:00
Ondřej Čertík
463c5eacca Add libraqm package; enable in py-pillow (#32619)
* Add libraqm package

* py-pillow: Add optional raqm dependency/variant

* Use sha256

* Use " instead of '

* Use more explicit import

* Only add raqm from @8.4.0:

* Make the docstring shorter to satisfy flake

* Add conflict, silence warning, adjust version

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-13 14:13:57 -06:00
Aurelien Bouteiller
83d6aff03a Parsec: v3.0.2209 (#32617)
Signed-off-by: Aurelien Bouteiller <bouteill@icl.utk.edu>

Signed-off-by: Aurelien Bouteiller <bouteill@icl.utk.edu>
2022-09-13 13:33:56 -06:00
Carlos Bederián
3b46a0bffe gromacs: add 2022.3 (#32624) 2022-09-13 12:41:57 -06:00
Chris White
937b576b5b fix depends on versioning (#32626) 2022-09-13 10:29:21 -07:00
John W. Parent
53a7b49619 Windows rpath support (#31930)
Add a post-install step which runs (only) on Windows to modify an
install prefix, adding symlinks to all dependency libraries.

Windows does not have the same concept of RPATHs as Linux, but when
resolving symbols will check the local directory for dependency
libraries; by placing a symlink to each dependency library in the
directory with the library that needs it, the package can then
use all Spack-built dependencies.

Note:

* This collects dependency libraries based on Package.rpath, which
  includes only direct link dependencies
* There is no examination of libraries to check what dependencies
  they require, so all libraries of dependencies are symlinked
  into any directory of the package which contains libraries
2022-09-13 10:28:29 -07:00
Cameron Stanavige
251d86e5ab unifyfs & gotcha: new releases (#32625)
UnifyFS:
- Add 1.0 release
- Deprecate older, unsupported versions
- Set fortran variant to true by default
- Update gotcha and mochi-margo dependency versions for unifyfs@1.0
  and unifyfs@develop
- Add conflict of unifyfs with libfabric 1.13.* versions
- Update configure_args to use helper functions

GOTCHA: Hasn't been under active development for a couple years but
the develop branch has some fixes UnifyFS uses. To avoid having
UnifyFS v1.0 depend on a develop branch of a dependency, this creates
a new release in the Gotcha Spack package based on the most recent
commit of the develop branch.
2022-09-13 10:53:11 -06:00
Cory Bloor
633a4cbd46 rocsparse: add spack build test (#31529)
* rocsparse: add spack build test

* Fix Navi 1x patch for ROCm 5.2

* Remove bench variant and other cleanup

* Fix style
2022-09-13 08:42:42 -07:00
Jordan Ogas
3e331c7397 charliecloud: deprecate old versions (#32462)
* tidy, deprecate old versions

* bump python

* begrudgingly apply less readable style

* adjust comment spacing

* apply ghastly multiline function arguments
2022-09-13 09:25:55 -06:00
Tamara Dahlgren
e97915eef2 Add an issue template for reporting package stand-alone test failures (#32487) 2022-09-13 08:22:04 -06:00
Brian Van Essen
2d895a9ec3 Added 2.6.0 version to NVSHMEM package. Added new variant for GPU (#32622)
initiated support experimental feature.
2022-09-13 08:14:04 -06:00
Tamara Dahlgren
62e788fb89 Added install phase test methods for CachedCMakePackage (inherited) and WafPackage (#32627) 2022-09-13 12:12:15 +02:00
Henrik Nortamo
bc83c72ebe Hyperqueue package (#32475)
* Adds hyperqueue package

* Adds maintainers

* Adds missing dockstring

* Bump year for Copyright

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* Fixes checksum, selects preferred version

Don't use a release candidate as the default version

* Switch maintainer to one of the developers for HQ

* Update package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-09-13 00:57:55 -06:00
Adam J. Stewart
68115eb1d0 GDAL: add v3.5.2 (#32614) 2022-09-13 00:53:51 -06:00
Erik Schnetter
6e5dc7374c openblas: Allow building linktest.c with clang@15 (#32597) 2022-09-12 12:17:49 -06:00
kwryankrattiger
6a5d247d7c VTK-m: Update gcc 11 conflict after patch (#32546) 2022-09-12 11:29:45 -06:00
Cory Bloor
13d872592e rocalution: fix compilation for Navi 1x and 2x (#32586) 2022-09-12 09:19:59 -07:00
Jim Edwards
5dc1a9f214 parallelio: make shared lib the default (#32432) 2022-09-12 17:48:21 +02:00
Wouter Deconinck
8dad297526 cuba: new package (#32510) 2022-09-12 15:27:03 +00:00
Qian Jianhua
734ae99285 dtc: fix build error with clang or Fujitsu compiler (#32543) 2022-09-12 16:59:05 +02:00
kwryankrattiger
b4f3812077 SDK: Remove conflicting variants from sensei propagation (#32490) 2022-09-12 16:57:42 +02:00
Rémi Lacroix
f2b19c39a0 r-gridextra: fix the CRAN package name. (#32474)
It seems like it was renamed from "gridExtras" to "gridExtra".
2022-09-12 16:57:15 +02:00
Simon Pintarelli
cb3b5fb716 sirius: new version, libsci supports (#32443) 2022-09-12 16:56:14 +02:00
Vicente Bolea
e5dcc43b57 ParaView: add v5.11.0-RC1 (#32436) 2022-09-12 16:55:18 +02:00
Mikael Simberg
daf691fd07 whip: add new package (#32576) 2022-09-12 16:54:17 +02:00
Kendra Long!
3ff63b06bf draco: add v7.14.1 (#32495) 2022-09-12 08:52:41 -06:00
Adrien Cotte
acdb6321d1 wi4mpi: mpi dep removed after v3.6.0 (#32352) 2022-09-12 08:52:17 -06:00
Jack Morrison
8611aeff52 opa-psm2: add v11.2.230 (#32530) 2022-09-12 08:47:04 -06:00
Ioannis Magkanaris
6c4acfbf83 fmt: add v9.1.0 and v9.0.0 (#32527)
Co-authored-by: Ioannis Magkanaris <ioannis.magkanaris@epfl.ch>
2022-09-12 08:46:42 -06:00
aeropl3b
d8e6782f42 HIPSycl: LLVM@10: provides working clang with cuda >= 11 (#32512)
Co-authored-by: RJ <aeropl3b+dev@gmail.com>
2022-09-12 08:46:19 -06:00
Simon Pintarelli
f33b7c0a58 spfft: inherit from ROCmPackage (#32550)
Co-authored-by: Alberto Invernizzi <9337627+albestro@users.noreply.github.com>
2022-09-12 08:22:39 -06:00
Seth R. Johnson
d4065e11c6 iwyu: support external find (#32458) 2022-09-12 08:22:14 -06:00
natshineman
bb6c39ea7c osu-micro-benchmarks: add v6.0 (#32587) 2022-09-12 16:19:23 +02:00
Carson Woods
46828eff1b Add new and legacy intel-mpi-benchmarks versions (#32535)
* Add new intel-mpi-benchmarks version

* Add new versions of intel mpi benchmarks

* Fix style bugs

* Fix style bugs

* Switch to using url_for_version formatting and improve patch ranges

* p2p benchmark is not included on older versions

* Set patch to proper version

* Add url field, improve patch versioning, improve version detection

* Add url field, improve patch versioning, improve version detection

* Bug fix
Syntax fix

* Remove 2019 from valid version on reorder_benchmark_macros patch

* OpenMPI isn't supported on older versions of the benchmark. Prevents OpenMPI from being selected on those versions

* Add new requirement of gmake for older versions

* Require intel-mpi for older versions of benchmark

* Minor changes to build directory for older versions

* Remove repeated conflict

* Minor style changes

* Minor change

* Correct fix for intel-mpi-benchmarks

* Bug fix

* Bug fix

* Attempted fix for install bug

* Attempted fix for install bug

* Remove duplicate build_directory setting
2022-09-12 08:54:42 -05:00
Christoph Conrads
5be1da4491 fenics-basix: make xtensor-blas dependency explicit (#28951) 2022-09-12 12:51:37 +00:00
Wouter Deconinck
29093f13ec podio: new variant cxxstd=(17,20) (#30437) 2022-09-12 14:44:16 +02:00
SXS Bot
51ce370412 spectre: add v2022.09.02 (#32501)
Co-authored-by: sxs-bot <sxs-bot@users.noreply.github.com>
2022-09-12 14:05:40 +02:00
Jen Herting
3c822cee58 [py-bitarray] added version 2.6.0 (#32560) 2022-09-12 04:01:55 -06:00
Adam J. Stewart
7904e1d504 GDAL: fix typo (#32524) 2022-09-12 11:41:55 +02:00
Adam J. Stewart
9d9f1ac816 py-pytorch-lightning: add v1.7.5 (#32552) 2022-09-12 11:41:33 +02:00
eugeneswalker
bf84cdfcbe e4s: add py-torch +cuda (#32601) 2022-09-12 09:40:49 +00:00
Ken Raffenetti
8071cc60cb mpich: Set minimum libfabric version to build (#32557)
Starting with MPICH 3.4, we need at least libfabric 1.5 in order to
build. Fixes #24394
2022-09-12 11:38:55 +02:00
Elsa Gonsiorowski, PhD
f5c0bc194f SCR: add v3.0.1 (#32555) 2022-09-12 03:38:05 -06:00
Jhon-Cleto
1ca184c1ee cuda: add v11.7.1 (#32606) 2022-09-12 03:30:00 -06:00
Sergey Kosukhin
7a93eddf1c gcc: add support for the D language (GDC) (#32330) 2022-09-12 11:27:35 +02:00
Andrew W Elble
f7fbfc54b3 routinator: add new package (#32532) 2022-09-12 11:20:16 +02:00
Larry Knox
0bc9dbe6f8 Add spack package hdf5-vol-cache. (#32449)
* Add spack package hdf5-vol-cache.

* Style updates.

* Update var/spack/repos/builtin/packages/hdf5-vol-cache/package.py

* Remove outdated hdf5-cmake package options.
2022-09-12 03:18:05 -06:00
Adam J. Stewart
3d904d8e65 py-tensorflow: add v2.10.0 (#32544) 2022-09-12 11:17:47 +02:00
Stephen Sachs
9c1e916c1c wrf: define NETCDFFPATH in case it differs from NETCDFPATH (#32548)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-09-12 11:17:17 +02:00
Erik Schnetter
cd1d6a9178 mpitrampoline: add v5.0.2 (#32598) 2022-09-12 03:09:52 -06:00
Auriane R
a2396c30b2 p2300: add wg21 p2300 std_execution as a package (#32531) 2022-09-12 09:04:04 +00:00
Philipp Edelmann
dea1e12c88 pgplot: fix build failure when using +X (#32542)
The spec was using the wrong key to find the X11 library flags.
2022-09-12 10:58:43 +02:00
Mikael Simberg
17b98f6b1f pika: add v0.8.0 (#32577) 2022-09-12 10:41:29 +02:00
Stephen Sachs
40ee78f6e8 GPCNeT: add new package (#32593)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-09-12 10:40:19 +02:00
Massimiliano Culpo
34a7df9ea0 Fix encoding issues with py-cylp (#32608)
fixes #32607

The package contains character that have encoding
issues with Python 2.7.
2022-09-12 10:34:54 +02:00
Adam J. Stewart
cb2cdb7875 py-tensorflow-metadata: add v1.10.0 (#32545) 2022-09-12 10:27:16 +02:00
Adam J. Stewart
50c031e6aa nettle: add v3.8.1 (#32523) 2022-09-12 09:45:35 +02:00
João Marcos
7382a3ca89 distbench: add new package (#32605) 2022-09-12 08:44:05 +02:00
Mark W. Krentel
d4ec0da49a hpctoolkit: add yaml-cpp as dependency for develop (#32538) 2022-09-12 08:35:37 +02:00
Adam J. Stewart
2caf449b8b py-numpy: add v1.23.3 (#32590) 2022-09-10 19:58:11 -05:00
Adam J. Stewart
76b4e5cc51 py-torchgeo: add v0.3.1 (#32582) 2022-09-10 19:43:45 -05:00
Adam J. Stewart
2ad9164379 py-pyproj: add v3.4.0 (#32599)
* py-pyproj: add v3.4.0

* Remove older basemap versions
2022-09-10 19:25:01 -05:00
Adam J. Stewart
11a4b5ed69 py-cartopy: add v0.21.0 (#32600) 2022-09-10 19:24:30 -05:00
Glenn Johnson
01153b3271 new packages: py-arm-pyart and dependencies (#32579)
* new packages: py-arm-pyart and dependencies

- py-arm-pyart
- py-cylp
- rsl

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

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

* Fix dependencies

- xarray is not optional
- pandas is needed
- pylab is needed
  - new package, py-pylab-sdk
- setuptools is needed at run time

* Patch for import of StringIO

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

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

* Fix call to `StringIO` in patch

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-10 23:02:15 +00:00
Massimiliano Culpo
1427ddaa59 ci: restore coverage computation (#32585)
* ci: restore coverage computation

* Mark "test_foreground_background" as xfail

* Mark "test_foreground_background_output" as xfail

* Make number of processes explicit, remove verbosity on linux

* Run coverage on just 3 Python jobs for linux

* Run coverage on just 3 Python jobs for linux

* Run coverage on just 2 Python jobs for linux

* Add back verbose, since before we didn't encounter the xdist internal error

* Reduce the workers to 2

* Try to use command line
2022-09-10 07:25:44 -06:00
psakievich
b4a2b8d46c GitRef Versions: Bug Fixes (#32437)
* Fix a version cmp bug in asp.py

* Fix submodule bug for git refs

* Add branch in logic for submodules

* Fix git version comparisons

main does not satisfy git.foo=main
git.foo=main does satisfy main
2022-09-09 11:02:40 -07:00
Jen Herting
c51af2262e py-session-info: add new package (#32564)
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-09-09 05:13:59 -06:00
Jen Herting
a13cf43b65 py-anndata: add new package (#32563)
Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-09-09 05:09:45 -06:00
Jen Herting
0fd749aa2c New package: py-python-bioformats (#32561)
* [py-python-bioformats] New package

* [py-python-bioformats] Added version 4.0.0

* [py-python-bioformats] Added types

* [py-python-bioformats] setuptools is build only

* [py-python-bioformats] fixup import

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-09-09 03:09:57 -06:00
Jen Herting
59602f790e py-umap-learn: add new package (#32562)
Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-09-09 03:05:49 -06:00
eugeneswalker
0d18c32bca e4s ci: restore power builds (#32296) 2022-09-08 21:00:58 -07:00
Brian Van Essen
f0c1c6f8cc Match protobuf to py-protobuf version (#32491)
* Fixed the py-protobuf recipe so that when cpp support is require so
that it uses the same major and minor version range for the protobuf
package.

* Fixed the range bound for the 3.x py-protobuf packages.

Added mappings for 4.x py-protobuf packages to 3.x protobuf packages.

Removed a hash for v21.1 protobuf and replaced with v3.21.1 to keep a
standard versioning convention.  Note that while Google has started
releasing both 3.x.y and a tag that dropped the leading 3. so it is
just x.y.  This provides the appearance of a new major version, but
really is just a new minor version.  These packages still report
versions as 3.x.y, so switching to versions and hashes with that
convention.

* Simplified constraints based on reviewer comments.

* Fixed flake8 errors

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

* Fixed constraints on v2. versions and addressed Flake8 comments.

* Fixed flake8

* Fixed range dependencies for version 2.x

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

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

* Fixed version ranges to skip unknown versions.

* Fixed the dependencies on protobuf to solve weird build issues.

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-09-08 21:05:52 -06:00
Peter Scheibel
02151ac649 CMakePackage: allow custom CMAKE_PREFIX_PATH entries (#32547)
* define `cmake_prefix_paths` property for packages

add to CMake arguments via CMakePackage

Co-authored-by: Robert Underwood <runderwood@anl.gov>
2022-09-08 16:23:04 -07:00
Mark W. Krentel
e3f87035b6 libmonitor: add version 2022.09.02 (#32525) 2022-09-08 13:45:57 -06:00
Massimiliano Culpo
67534516c7 ci: avoid running coverage on package only PRs (#32573)
* ci: remove !docs from "core" filters

Written like it is now it causes package only PRs
to run with coverage.

* Try to skip job under condition, see if the workflow proceed

* Try to cancel a running CI job

* Simplify linux unit-tests, skip windows unit-tests on package PRs

* Reduce the inputs to unit-tests workflow

* Move control logic to main workflow, remove inputs

* Revert "Move control logic to main workflow, remove inputs"

This reverts commit 0c46fece4c.

* Do not compute "with_coverage" since it's always == to "core"

* Remove workflow dispatch from unit tests

* Revert "Revert "Move control logic to main workflow, remove inputs""

This reverts commit dd4e4a4e61.

* Try to skip all from the main workflow

* Add back bootstrap to needed checks for "all"

* Restore the correct logic for conditionals
2022-09-08 10:58:53 -07:00
Michael Kuhn
dc1734f0a6 py-cython: add 0.29.32 (#32574) 2022-09-08 12:41:24 -05:00
Michael Kuhn
2cfac3389a meson: add v0.63.2 (#32575) 2022-09-08 10:33:49 -06:00
Jen Herting
63d079cce9 New package: py-pytesseract (#30765)
* Versions added for each dep, but I think I'll need to remove them

* py-tesseract now builds and will import in python

* Fixed flake style error as raised by pipeline

* changed to proper python dependency

* added pil as a dependency

* Fixed flake style errors

* [py-pytesseract] py-pillow and py-wheel are redundant

* [py-pytesseract]

- fixed spelling
- removed unneeded dependency

* [py-pytesseract] update import

Co-authored-by: Viv Eric Hafener <vehrc@sporcbuild.rc.rit.edu>
2022-09-08 15:24:42 +00:00
Howard Pritchard
a7fe137941 ucx: add 1.13.1 release (#32556)
Signed-off-by: Howard Pritchard <howardp@lanl.gov>

Signed-off-by: Howard Pritchard <howardp@lanl.gov>
2022-09-08 08:24:21 +02:00
Peter Scheibel
021ff1c7da Skip test which fails randomly on Python 2.7 (#32569) 2022-09-08 08:11:20 +02:00
Tom Scogland
762ba27036 Make GHA tests parallel by using xdist (#32361)
* Add two no-op jobs named "all-prechecks" and "all"

These are a suggestion from @tgamblin, they are stable named markers we
can use from gitlab and possibly for required checks to make CI more
resilient to refactors changing the names of specific checks.

* Enable parallel testing using xdist for unit testing in CI

* Normalize tmp paths to deal with macos

* add -u flag compatibility to spack python

As of now, it is accepted and ignored.  The usage with xdist, where it
is invoked specifically by `python -u spack python` which is then passed
`-u` by xdist is the entire reason for doing this.  It should never be
used without explicitly passing -u to the executing python interpreter.

* use spack python in xdist to support python 2

When running on python2, spack has many import cycles unless started
through main.  To allow that, this uses `spack python` as the
interpreter, leveraging the `-u` support so xdist doesn't error out when
it unconditionally requests unbuffered binary IO.

* Use shutil.move to account for tmpdir being in a separate filesystem sometimes
2022-09-07 20:12:57 +02:00
Satish Balay
8e5ccddc13 llvm: add 15.0.0 (#32536) 2022-09-07 10:42:01 -07:00
Robert Blake
5bb175aede Upgrade py-kosh to 2022-08-10 version. (#32541) 2022-09-06 21:57:57 -06:00
Laura Bellentani
92e0dbde03 quantum-espresso: add cuda support (#31869) 2022-09-06 14:45:57 -06:00
Adam J. Stewart
ab82cc5257 py-tensorflow: add v2.7.4, v2.8.3, v2.9.2 (#32500)
* py-tensorflow: add v2.7.4

* py-tensorflow: add v2.8.3

* py-tensorflow: add v2.9.2
2022-09-06 15:44:51 -05:00
luker
92018261aa update libflame for work with crayCC, craycc, ... (#32533)
update libflame for work with crayCC, craycc, crayftn compiler wrappers. These lightweight compiler drivers do not add the `-L<lib_path>` like the CC/cc/ftn compiler drivers do. I've made a slight change to add the lib directories.
2022-09-06 11:14:06 -06:00
Seth R. Johnson
c7292aa4b6 Fix spack locking on some NFS systems (#32426)
Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
2022-09-06 09:50:59 -07:00
Massimiliano Culpo
d7d59a24d1 Mark a test xfail on Python 2.7 (#32526)
refers #32470
2022-09-06 11:56:44 +02:00
Cory Bloor
b093929f91 rocthrust: add amdgpu_target and spack build test (#31203)
This change adds support for building the rocthrust tests and adds the `amdgpu_target` 
variant to the `rocthrust` package.

- [x] rocthrust: add amdgpu_target and spack build test
- [x] Drop numactl as it is not a direct dependency
2022-09-04 19:18:33 -07:00
Tom Scogland
c25b7ea898 Apply hip workaround for raja-framework (#32469)
* add workaround for broken behavior in HIP

Hip has a longstanding cmake issue where they calculate include paths
incorrectly, this works around it for raja and adds an explicit rocprim
dependency.

* propagate openmp requirement and workaround to camp

* refactor and include umpire

* propagate openmp option to camp in umpire and use main camp for main and develop raja and umpire

* bump camp to new patch release
2022-09-02 16:55:06 -07:00
Tom Scogland
69f7a8f4d1 Reorder workflow execution in GHA (#32183)
This patchset refactors our GitHub actions into a single top-level ci workflow that
invokes a series of reusable actions.  The main goal of this is to be able to easily
control which tests run and in what order based on the success or failure of top-level
prechecks.  Our previous workflows ran in three sets:

* nix tests: style and verification first, then linux and macos tests if successful
* windows tests: style and verification first, then linux and macos tests if successful
* bootstrap tests

As a result, the bootstrap tests ran even if the style failed, and style and verification
had to run on two different platforms despite running identical checks.  I'm relatively
sure that's because of the limitation on dependencies between steps in the jobs.
Reusable workflows allow us to run the style, verification and now audit checks once,
then depending on the results, and the files changed, run the appropriate nix, windows
and bootstrap tests.  While it saves only a few minutes by itself, this makes it easier to
refactor checks to subset tests without having to replicate tests or other workflow
components in the future.

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-09-02 14:09:23 -07:00
Harmen Stoppels
80389911cc Update bootstrap buildcache to v0.3 (#32262)
This release allow to bootstrap patchelf from binaries.
2022-09-02 12:48:46 +02:00
Timothy Brown
a2e829c7b9 [CURL] New version. (#32481)
Adding a new version of curl. This addresses issue [9081](https://github.com/curl/curl/issues/9081).
2022-09-02 01:57:58 -06:00
Alex Hedges
85446f7a96 tree: add 2.0.3 (#32463)
Fix GCC compiler warnings due to not using C99 mode

CC should be overriden with Spack's value, and the other flags needed
to be copied from the Makefile.
2022-09-02 09:44:43 +02:00
Adam J. Stewart
de623f240c meson: add maintainer (#32460) 2022-09-01 20:45:46 -07:00
Adam J. Stewart
7796bf3fa0 py-pytorch-lightning: add v1.7.4 (#32464) 2022-09-01 22:15:52 +00:00
Scott Wittenburg
6239198d65 Fix cause of checksum failures in public binary mirror (#32407)
Move the copying of the buildcache to a root job that runs after all the child
pipelines have finished, so that the operation can be coordinated across all
child pipelines to remove the possibility of race conditions during potentially
simlutandous copies. This lets us ensure the .spec.json.sig and .spack files
for any spec in the root mirror always come from the same child pipeline
mirror (though which pipeline is arbitrary).  It also allows us to avoid copying
of duplicates, which we now do.
2022-09-01 15:29:44 -06:00
H. Joe Lee
d9313cf561 Upgrade version from 0.7.0-beta to 0.8.0-beta. (#32442)
The version 0.8.0-beta is released.
2022-09-01 14:53:48 -06:00
Axel Huebl
ce1500fad3 Add: py-sphinx-design (#32482)
* Add: py-sphinx-design

Needed for #32480
2022-09-01 19:25:59 +00:00
kwryankrattiger
117b0af831 Backport fix for buliding vtk-m diy with GCC 11 (#32465) 2022-09-01 11:41:20 -07:00
Peter Scheibel
2968ae667f New command, spack change, to change existing env specs (#31995)
If you have an environment like

```
$ cat spack.yaml
spack:
  specs: [openmpi@4.1.0+cuda]
```

this PR provides a new command `spack change` that you can use to adjust environment specs from the command line:

```
$ spack change openmpi~cuda
$ cat spack.yaml
spack:
  specs: [openmpi@4.1.0~cuda]
```

in other words, this allows you to tweak the details of environment specs from the command line.

Notes:

* This is only allowed for environments that do not define matrices
  * This is possible but not anticipated to be needed immediately
  * If this were done, it should probably only be done for "named"/not-anonymous specs (i.e. we can change `openmpi+cuda` but not spec like `+cuda` or `@4.0.1~cuda`)
2022-09-01 11:04:01 -07:00
Graeme A Stewart
92b72f186e root: apply 6.26 COMPILE_DEFINITIONS patch unconditionally (#32472)
This bug isn't per-se tied to the root7 variant and should
be applied always for these ROOT releases
2022-09-01 17:57:50 +02:00
Weiqun Zhang
3d67c58436 amrex: add v22.09 (#32477) 2022-09-01 09:45:49 -06:00
Massimiliano Culpo
01298287f6 Fix CI for package only PRs (#32473) 2022-09-01 14:41:28 +02:00
Jordan Ogas
9dca54fdc8 use bash for autoreconf (#32466) 2022-09-01 02:29:58 -06:00
Massimiliano Culpo
0df0b9a505 Port package sanity unit tests to audits (#32405) 2022-09-01 08:21:12 +02:00
Michael Kuhn
c4647a9c1f meson: add 0.63.1 (#32441) 2022-08-31 20:45:52 -06:00
marcost2
597af9210f perl-bignum: Adding perl module (#31590) 2022-08-31 21:07:41 -05:00
Adam J. Stewart
986e8fd6c5 py-black: add v22.8.0 (#32468) 2022-08-31 19:53:46 -06:00
Wouter Deconinck
c75c27c95c gdk-pixbuf: only build tests when requested (#32452)
The building of tests is optional [as of 2.42.9](801eef111d). This applies this option in the build.

The reason the option was added was to deal with test build failures in sandboxed environments and with certain glibc versions (caused by glib gresources). For example, with the latest version glibc and in the latest version of docker these tests [cannot be built](https://github.com/moby/moby/issues/43595).
2022-08-31 16:16:22 -07:00
Adam J. Stewart
f1f831edef py-pandas: add v1.4.4 (#32459) 2022-08-31 14:27:15 -07:00
Satish Balay
60f37e8c88 llvm: fix 15.0.0rc builds on MacOS with command-line-tools (#32397)
* llvm: fix 15.0.0rc builds on MacOS with command-line-tools

Ref: https://github.com/llvm/llvm-project/issues/57037

i.e use -DBUILTINS_CMAKE_ARGS=-DCOMPILER_RT_ENABLE_IOS=OFF. But this needs switching "compiler-rt" from "projects" to "runtimes".

Also fixing the warnings below fixes compile errors

CMake Warning at CMakeLists.txt:101 (message):
  Using LLVM_ENABLE_PROJECTS=libcxx is deprecated now, please use
  -DLLVM_ENABLE_RUNTIMES=libcxx or see the instructions at
  https://libcxx.llvm.org/BuildingLibcxx.html for building the runtimes.


CMake Warning at CMakeLists.txt:101 (message):
  Using LLVM_ENABLE_PROJECTS=libcxxabi is deprecated now, please use
  -DLLVM_ENABLE_RUNTIMES=libcxxabi or see the instructions at
  https://libcxx.llvm.org/BuildingLibcxx.html for building the runtimes.


CMake Warning at CMakeLists.txt:101 (message):
  Using LLVM_ENABLE_PROJECTS=libunwind is deprecated now, please use
  -DLLVM_ENABLE_RUNTIMES=libunwind or see the instructions at
  https://libcxx.llvm.org/BuildingLibcxx.html for building the runtimes.


/private/var/folders/nt/_m1t_x7j76q6sl3xt91tqgs00000gn/T/balay/spack-stage/spack-stage-llvm-15.0.0-rc2-h2t5bohzyy7exz2ub3m42pfycjcmbndk/spack-build-h2t5boh/include/c++/v1/cstdlib:135:9: error: no member named 'at_quick_exit' in the global namespace
using ::at_quick_exit _LIBCPP_USING_IF_EXISTS;
      ~~^

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-31 13:29:07 -07:00
Massimiliano Culpo
0c6e3188ac ASP-based solver: allow to reuse installed externals (#31558)
fixes #31484

Before this change if anything was matching an external
condition, it was considered "external" and thus something
to be "built".

This was happening in particular to external packages
that were re-read from the DB, which then couldn't be
reused, causing the problems shown in #31484.

This PR fixes the issue by excluding specs with a
"hash" from being considered "external"

* Test that users have a way to select a virtual

This ought to be solved by extending the "require"
attribute to virtual packages, so that one can:
```yaml
mpi:
  require: 'multi-provider-mpi'
```

* Prevent conflicts to be enforced on specs that can be reused.

* Rename the "external_only" fact to "buildable_false", to better reflect its origin
2022-08-31 20:05:55 +00:00
Seth R. Johnson
08261af4ab py-breathe: add new version and improve version constraints (#31857)
* py-breathe: add new version and improve version constraints

* py-breathe: everyone loves versions

```
py-breathe, py-breathe in the air
don't be afraid to care
````

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

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

* add comment

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-31 17:23:19 +00:00
Larry Knox
62e4177e44 hdf5-vol-log: Update package versions and update HDF5 dependency to version 1.13.2 (#32448)
* Add HDF5 version 1.13.2.
Remove HDF5 versions 1.13.0 and 1.13.1.

* Correct formatting.

* Update vol-log-based versions and HDF5 dependency version.
2022-08-31 06:29:15 -07:00
Ivan Maidanski
74506a2a83 bdw-gc: add v8.2.2 (#32453) 2022-08-31 06:18:49 -07:00
Adam J. Stewart
5fcfce18fd py-gpytorch: add v1.9.0 (#32445) 2022-08-30 11:34:06 -07:00
Adam J. Stewart
c07c4629ff py-kornia: add v0.6.7 (#32447) 2022-08-30 11:33:49 -07:00
Tamara Dahlgren
3894ceebc9 Environments: Add support for include URLs (#29026)
* Preliminary support for include URLs in spack.yaml (environment) files

This commit adds support in environments for external configuration files obtained from a URL with a preference for grabbing raw text from GitHub and gitlab for efficient downloads of the relevant files. The URL can also be a link to a directory that contains multiple configuration files.

Remote configuration files are retrieved and cached for the environment. Configuration files with the same name will not be overwritten once cached.
2022-08-30 11:13:23 -07:00
Ryan Marcellino
b35a0b1b40 New package: py-mkdocstrings-python (#32421) 2022-08-30 10:27:02 -07:00
Gregory Lee
543a797d1a added STAT 4.2.0 and updated deps (#32385)
* added STAT 4.2.0 and updated deps

* launchmon package fix and style fixes

* launchmon package fix

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-30 09:25:55 -06:00
Ivan Maidanski
08c67302fc libatomic_ops: add v7.6.14 (#32418)
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-30 06:00:09 -07:00
Harmen Stoppels
33cb61afb9 libxml2: fix building with nvhpc (#32440) 2022-08-30 06:13:47 -06:00
Wouter Deconinck
43ae15a887 root: new bugfix version 6.26.06 (#32230) 2022-08-30 10:31:17 +02:00
Toyohisa Kameyama
a735dc027d oprnmx: fix to build with Fujitsu compiler. (#32389) 2022-08-30 10:26:15 +02:00
Olivier Cessenat
5be9f4dfef coreutils: add support for external find (#32414) 2022-08-30 02:26:02 -06:00
David M. Rogers
d75234b675 hipsycl: fix building on OSX. Patch boost to be backward-compatible. (#31311)
Co-authored-by: frobnitzem <frobnitzem@users.noreply.github.com>
2022-08-30 10:22:34 +02:00
luker
3779e645b8 scorep: modify configure flags for Cray platforms (#32201) 2022-08-30 00:25:35 -07:00
Olivier Cessenat
7f4799a4a2 visit: actually set the dev env for plugins again (#32427) 2022-08-30 08:02:23 +02:00
Jim Edwards
a09d4ffb4e esmf: update package for cce (cray) compiler (#32433) 2022-08-30 07:53:45 +02:00
robgics
0c9b4bc3d2 Initial commit for freesurfer package (#32395)
* Initial commit for freesurfer package

* Add myself as maintainer

* Change URLs to https and move url function to proper place.
2022-08-29 14:35:34 -07:00
snehring
778af070f0 snphylo: update to new version (#32425) 2022-08-29 11:56:57 -07:00
Brian Van Essen
bd815fbada Switched LBANN to using an explicit variant to enable unit testing (#32429)
support rather than relying on the spack install --test root option,
because it doesn't play nice in environments.
2022-08-29 12:53:45 -06:00
Luca Heltai
1c22af8ef4 dealii:: fixed application of stdcxx variant (#32413)
* Fixed imposition of stdcxx.

* Fixed style.
2022-08-29 08:41:17 -07:00
Seth R. Johnson
9687d91d72 celeritas: new version 0.1.1 (#32412) 2022-08-29 08:34:16 -07:00
Wouter Deconinck
a14d228e8b gdk-pixbuf: new bugfix version 2.42.9 (#32420)
No changes of note. Just bugfixes. Full diff at https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/compare/2.42.6...2.42.9?from_project_id=1548
2022-08-29 07:48:48 -07:00
Ryan Marcellino
b64d2393ea New package: py-mkdocstrings (#32417) 2022-08-28 14:34:02 -07:00
Ryan Marcellino
d0173a486f New package: py-mkdocs-jupyter (#32416) 2022-08-28 14:32:50 -07:00
Sergey Kosukhin
215379cc27 libxml2: add new versions (#32394)
* libxml2: add new versions

* libxml2: apply patch preventing SIGFPE
2022-08-27 02:29:49 -06:00
Adam J. Stewart
a7cc58d42c py-radiant-mlhub: add v0.5 (#32406) 2022-08-26 18:02:02 -06:00
downloadico
430b8ca362 add sra-tools and NCBI-VDT packages (#32403)
* ncbi-vdb: add ncbi-vdb package to spack
ncbi-vdb provides the interface to the NCBI VDB

* sra-tools: add sra-tools to spack
2022-08-26 17:38:27 -06:00
Richard Berger
e6f6de406d py-sphinx-rtd-theme: add version 1.0.0 (#32379) 2022-08-26 17:38:14 -06:00
Betsy McPhail
ad95719a1d Use threading.TIMEOUT_MAX when available (#32399)
This value was introduced in Python 3.2. Specifying a timeout greater than
this value will raise an OverflowError.
2022-08-26 17:37:56 -06:00
Jen Herting
59bfa6bcd3 [py-pybedtools] added version 0.9.0 (#32401) 2022-08-26 21:44:53 +00:00
dlkuehn
c7acda0062 New packages: roary plus 5 new perl-* (#32217)
* New package: roary
2022-08-26 14:29:44 -06:00
Massimiliano Culpo
51244abee9 Configuration: Allow requirements for virtual packages (#32369)
Extend the semantics of package requirements to
allow using them also under a virtual package
attribute in packages.yaml

These requirements are enforced whenever that
virtual spec is present in the DAG.
2022-08-26 13:17:40 -07:00
kwryankrattiger
eb1c9c1583 SDK: Option to disable fortran support. (#32319)
This option was requested to support MacOS systems that do not have
fortran installed.
2022-08-26 11:12:13 -07:00
Ryan Marcellino
c227e7ab13 New package: py-mkdocs-material (#32387) 2022-08-26 10:32:03 -07:00
Ryan Marcellino
987c067f68 New package: py-mkdocs-autorefs (#32386) 2022-08-26 10:30:28 -07:00
Dom Heinzeller
26a16dc5bb Add pic variant to bacio (#32388)
* Add pic variant to bacio

* Fix black style error
2022-08-26 09:24:34 -07:00
François Trahay
e41f9aad38 add eztrace 2.0 release (#32350)
* [EZTrace] Version uptate to 2.0

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-26 08:45:05 -07:00
Massimiliano Culpo
b6ea2a46d1 Update archspec to latest commit (#32368)
Modifications:

- [x] Add graviton3
- [x] Optimize __eq__ for microarchitectures
2022-08-26 12:58:20 +02:00
Tom Scogland
a2f0588004 calculate make_jobs in ninja (#32384)
This is in case ninja's setup_dependent_package is called before its
module is initialized by build_environment
2022-08-26 03:37:53 -06:00
Chris White
b31cd189a7 Improve error message for yaml config file (#32382)
* improve error message

* Update lib/spack/spack/config.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-26 02:43:03 +00:00
Wouter Deconinck
3ba58d85e2 libzmq: add patch for gcc-12; conflict for older gcc-11 versions (#32381)
Per #32214, the existing patch `92b2c...` for `gcc@11:` only applies
cleanly for `libzmq@4.3.3:4.3.4`. This PR adds a conflict for earlier
versions, as they cannot be patched due to different context.

For `gcc@11`, this leaves the most recent two versions available (a
satisfactory compromise).

For `gcc@12`, however, there is another existing conflict that makes
these most recent two versions unavailable. This PR adds an upstream
patch for the single most recent version that allows compilation with
`gcc@12` for that most recent version.

Starting point:
- `gcc@11` concretizes on all versions, attempts to apply patch on
`@4.2.3:4.3.4`, and only succeeds to apply patch on `@4.3.3:4.3.4`,
- `gcc@12` concretizes on `@:4.3.1` (and `@master`), attempts to apply
patch on `@4.2.3:4.3.1`, fails to apply patch on all.

Ending point:
- `gcc@11` concretizes on `@4.3.3:4.3.4` (and `@master`), attempts and
succeeds to apply patch on `@4.3.3:4.3.4`,
- `gcc@12` concretizes on `@4.3.4` (and `@master`), attempts and
succeeds to apply patch on `@4.3.4`.

Verified with environment build:
```yaml
spack:
  specs:
  - libzmq@4.3.4%gcc@12.1.0
  - libzmq@4.3.4%gcc@11.3.0
  - libzmq@4.3.3%gcc@11.3.0
  view: false
```
which returns the following:
```console
16:14:47 wdconinc@menelaos ~/git/spack (libzmq-patch-gcc12 *+$%=) $
spack install --fresh
==> Installing environment libzmq
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-12.1.0/libmd-1.0.4-egpgd6eoaqtsl5fja2iwsl6gyc4o32p5
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-12.1.0/libsodium-1.0.18-af3rsfnvck6anxf7eeog3f2bph44tjia
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-12.1.0/pkgconf-1.8.0-z5of2hj2c6ygd3kxr4cwv7u7t42sxair
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/libmd-1.0.4-tec234gco2sd7n52dkwbrad43sdhaw4o
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/libsodium-1.0.18-uljf675u3yrn5c7fdjdpa5c7qnnkynke
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/pkgconf-1.8.0-l4hzc2g4pnn7dwyttphmxivt3xghvpoq
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-12.1.0/libbsd-0.11.5-fi3ri64moy45ksr4sf5pcwd6k23dsa4o
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/libbsd-0.11.5-2matmm7im7oygrr77k7wznttv4rbupfz
==> Installing libzmq-4.3.4-t7ad54q3atrnte4rzq7g7cfjcw5227pr
==> No binary for libzmq-4.3.4-t7ad54q3atrnte4rzq7g7cfjcw5227pr found:
installing from source
==> Fetching
c593001a89.tar.gz
==> Fetching
310b8aa57a
==> Fetching
https://github.com/zeromq/libzmq/pull/4334.patch?full_index=1
==> Applied patch
92b2c38a2c.patch?full_index=1
==> Applied patch
https://github.com/zeromq/libzmq/pull/4334.patch?full_index=1
==> libzmq: Executing phase: 'autoreconf'
==> libzmq: Executing phase: 'configure'
==> libzmq: Executing phase: 'build'
==> libzmq: Executing phase: 'install'
==> libzmq: Successfully installed
libzmq-4.3.4-t7ad54q3atrnte4rzq7g7cfjcw5227pr
  Fetch: 0.61s.  Build: 1m 31.57s.  Total: 1m 32.18s.
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-12.1.0/libzmq-4.3.4-t7ad54q3atrnte4rzq7g7cfjcw5227pr
==> Installing libzmq-4.3.3-pxrd6piprucu65bkro2ixms6d3x2eudz
==> No binary for libzmq-4.3.3-pxrd6piprucu65bkro2ixms6d3x2eudz found:
installing from source
==> Fetching
9d9285db37.tar.gz
==> Using cached archive:
/home/wdconinc/.spack/cache/_source-cache/archive/31/310b8aa57a8ea77b7ac74debb3bf928cbafdef5e7ca35beaac5d9c61c7edd239
==> Applied patch
92b2c38a2c.patch?full_index=1
==> libzmq: Executing phase: 'autoreconf'
==> libzmq: Executing phase: 'configure'
==> libzmq: Executing phase: 'build'
==> libzmq: Executing phase: 'install'
==> libzmq: Successfully installed
libzmq-4.3.3-pxrd6piprucu65bkro2ixms6d3x2eudz
  Fetch: 0.93s.  Build: 11.55s.  Total: 12.48s.
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/libzmq-4.3.3-pxrd6piprucu65bkro2ixms6d3x2eudz
==> Installing libzmq-4.3.4-hiil6dzy2reb4nk555zztwh44rpbyv4h
==> No binary for libzmq-4.3.4-hiil6dzy2reb4nk555zztwh44rpbyv4h found:
installing from source
==> Using cached archive:
/home/wdconinc/.spack/cache/_source-cache/archive/c5/c593001a89f5a85dd2ddf564805deb860e02471171b3f204944857336295c3e5.tar.gz
==> Using cached archive:
/home/wdconinc/.spack/cache/_source-cache/archive/31/310b8aa57a8ea77b7ac74debb3bf928cbafdef5e7ca35beaac5d9c61c7edd239
==> Applied patch
92b2c38a2c.patch?full_index=1
==> libzmq: Executing phase: 'autoreconf'
==> libzmq: Executing phase: 'configure'
==> libzmq: Executing phase: 'build'
==> libzmq: Executing phase: 'install'
==> libzmq: Successfully installed
libzmq-4.3.4-hiil6dzy2reb4nk555zztwh44rpbyv4h
  Fetch: 0.01s.  Build: 10.77s.  Total: 10.78s.
[+]
/opt/software/linux-ubuntu22.04-skylake/gcc-11.3.0/libzmq-4.3.4-hiil6dzy2reb4nk555zztwh44rpbyv4h
```
2022-08-25 19:13:41 -06:00
Adam J. Stewart
c6842605ac py-pytorch-lightning: add v1.7.3 (#32383) 2022-08-25 18:01:50 -06:00
snehring
4d10cdb7e8 phylip: adding workarounds for gcc10+ (#32376)
* phylip: adding workarounds for gcc10+

* phylip: switch to spec.satisfies
2022-08-25 16:29:40 -06:00
Massimiliano Culpo
1bffa46d4d zig: add v0.9.1 (#32380) 2022-08-25 14:38:26 -07:00
Richard Berger
6e420c3556 charliecloud: add versions 0.28 and 0.29 (#32378) 2022-08-25 13:21:27 -07:00
Ryan Marcellino
a476f0fa59 New package: py-mkdocs (#32363) 2022-08-25 12:37:20 -07:00
AMD Toolchain Support
6fb13c0fc5 fixed cp2k libcp2k.pc (#32349)
Co-authored-by: Prasanthi <pdonthir@amd.com>
2022-08-25 12:01:02 -07:00
Glenn Johnson
c2291f7eb3 new packages: r-cmdstanr and cmdstan (#32364) 2022-08-25 11:58:31 -07:00
Glenn Johnson
925a99a043 new package: r-glmgampoi (#32366)
* new package: r-glmgampoi

* Remove duplicate depends_on directive
2022-08-25 11:50:11 -07:00
Glenn Johnson
883b96aeb5 new packages: r-scdblfinder and dependencies (#32367)
- r-bluster
- r-metapod
- r-scran
2022-08-25 11:47:12 -07:00
Matthieu Dorier
9204bd6204 [ycsb] fixes build process and installation of YCSB (#32213)
* [ycsb] fixes build process and installation of YCSB

* [ycsb] fixing style

* [ycsb] removed extra newline
2022-08-25 11:26:08 -07:00
Wileam Y. Phan
b482c71b43 New package: glab (#32251) 2022-08-25 11:23:15 -07:00
robgics
ff2874333d ddt: Initial commit (#32338)
* ddt: Initial commit

* ddt: Minor change to license date to appease the CI gods

* Get rid of unattractive extra line

* Switch to sha256 instead of md5
2022-08-25 11:03:07 -07:00
Robert Pavel
7214a438dc Adding e3sm-kernels to Spack (#32341)
* Initial Draft of E3SM-Kernels Spackage

Initial draft of E3SM-Kernels. Currently no support for nested_loops due
to build system limitations

* Style Check and Fixed gfortran Check

Fixed style issues and changed gnu toolchain check to a gfortran check
due to hybrid compilers (e.g. clang+gfortran)

* Fixed Style Issues
2022-08-25 11:01:07 -07:00
Lucas Frérot
06ba4d5c28 lammps: added build dependency to py-setuptools (#32351)
LAMMPS' setup.py uses setuptools as of lammps/lammps@2ed8e5cf02
2022-08-25 10:40:07 -07:00
Mikael Simberg
1c3979dcfa Add patch for missing template instantiation in pika 0.7.0 on macOS (#32370) 2022-08-25 11:30:00 -06:00
Melven Roehrig-Zoellner
f0925e1823 tixi: new variants (fortran,shared) (#32356)
* tixi: new variants (fortran,shared)

Since some tixi 3 versions, additional CMake flags are needed to build
tixi with shared libraries, respectively with Fortran support.

* tixi: fix style
2022-08-25 10:27:00 -07:00
snehring
ba87413eeb snap-berkeley: update to version 2.0.1 (#32358) 2022-08-25 10:21:53 -07:00
Tyler Funnell
a4cbdba388 fish: adding v3.5.1 (#32362) 2022-08-25 10:18:39 -07:00
snehring
70388da974 libfabric: adding missing dep for opx fabric (#32377) 2022-08-25 10:10:30 -07:00
Sreenivasa Murthy Kolam
f0df4b653d Changes for ROCm-5.2.0 changes and new recipe rocwmma (#31667)
* Changes for ROCm-5.2.0 changes and new recipe rocwmma

* modify the maintainers for hipify-clang

* address review comments

* update the rocwmma new recipe as per latest syntax

* fix style errors

* modify the patch file to provide the details about the patch

* fix style errors
2022-08-25 10:00:02 -07:00
Adam J. Stewart
507e06b5d2 Python: add new maintainer (#31755) 2022-08-25 09:46:09 -07:00
H. Joe Lee
c8f8b6957d libfabric: Match main version. (#32342)
* Match main version.

`develop` no loger exists.

* Change develop to main.
2022-08-25 09:25:43 -07:00
robgics
10ac24874b cplex: add package.py (#32337)
* cplex: add package.py

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-25 09:11:40 -07:00
Massimiliano Culpo
8654197c56 ASP-based solver: prevent the use of hashes that are not available (#32354)
fixes #32348
2022-08-25 17:55:58 +02:00
Dom Heinzeller
b332c1055c Update ESMF: bug fix for esmf@8.3.0b09 with PIO (#32360) 2022-08-25 08:52:54 -07:00
Christian Mauch
7e0d8fce89 py-pynn: add version 0.10.0 (#32307) 2022-08-25 08:02:52 -07:00
Robert Cohn
c56abe4247 oneapi e4s: use require: to force gcc build for some packages (#32309) 2022-08-24 16:22:02 -04:00
Graeme A Stewart
ee02623171 whizard: Fix passing of build options, update versions (#32326)
* whizard: Fix passing of build options, update versions

The dependency of whizard on libtirpc is now correctly passed down as
an autotools option.

Update known versions of package with 3.0.2 and 3.0.3.

* Express path to headers via spec object methods
2022-08-24 06:58:48 -07:00
otsukay
6fa6b8a903 fujitsu-fftw: add option for enabling thread support (#31426)
Co-authored-by: Yuichi Otsuka <otsukay@riken.jp>
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: otsukay <otsukay@users.noreply.github.com>
2022-08-24 11:36:14 +02:00
Atsushi Hori
14e99a1a5d process-in-process: overhaul package recipe (#32347) 2022-08-24 11:35:08 +02:00
Massimiliano Culpo
e2468c8928 Allow default requirements in packages.yaml (#32260)
Allow users to express default requirements in packages.yaml. 

These requirements are overridden if more specific requirements
are present for a given package.
2022-08-24 09:33:55 +02:00
Ryan Marcellino
b4df535e8d New package: py-mkdocs-material-extensions (#32334) 2022-08-23 23:29:56 -06:00
Ryan Marcellino
af4788fdef New package: py-griffe and new build backend: py-pdm-pep517 (#32335)
* New package: py-griffe and new build backend: py-pdm-pep517

* add pdm to build backend docs
2022-08-23 23:23:23 -05:00
Cyrus Harrison
a2bdbfcd24 add conduit 0.8.4 release (#32343) 2022-08-23 21:33:49 -06:00
Ben Darwin
3fb7fdfc58 minc-toolkit: add runtime flex dependency (#32345)
Some programs such as `minccalc` depend on libfl.so at runtime.
2022-08-23 17:14:07 -06:00
Timothy Brown
7e87c208ba [WRF] Version update to 4.4 (#32046)
* [WRF] Update to version 4.4.

* [WRF] Patches for v4.4.

* Fixing style.

* [@spackbot] updating style on behalf of t-brown
2022-08-23 13:47:23 -07:00
Jim Galarowicz
f8ae2ef8b4 Add new package for MUST runtime correctness analysis tool (#32329)
* Add new package for MUST runtime correctness analysis tool

* Fix encryption to SHA256 to fix with spack convention.
2022-08-23 20:43:55 +00:00
Ryan Marcellino
b238a9a457 New package: py-pyyaml-env-tag (#32333) 2022-08-23 12:55:53 -07:00
Harmen Stoppels
8af3743e91 Relative paths in default prefix_inspections start with ./ (#31867) 2022-08-23 12:54:12 -07:00
Harmen Stoppels
707a099b69 spack -e x config --scope=y add z add to scope (#31746)
* `spack -e x config --scope=y add z` add to scope

instead of to the environment file.
2022-08-23 12:52:34 -07:00
iarspider
2b680ae7b8 cpu-features: fix fetch failure (#32325)
* cpu-features: fix fetch failure

`master` branch was renamed to `main`

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-23 12:37:59 -07:00
Robert Cohn
6654d53611 intel-oneapi-compilers-classic: fix paths (#32305)
* Fix intel-oneapi-compilers-classic bin path

* Update package.py

* intel-oneapi-compilers-classic fix path

Co-authored-by: OfirGan <offirgan@gmail.com>
2022-08-23 12:14:24 -07:00
Ben Darwin
9b6b1a277d minc-toolkit: add MINC_TOOLKIT environment variable at runtime (#32331)
This variable is used by some programs both internal and external to the
toolkit itself to discover shared objects, data, etc.
2022-08-23 11:03:12 -07:00
Toyohisa Kameyama
a08d6e790d py-scipy: Fortran compiler specify code is change to setup.cfg for Fujitsu compiler (#32142)
* py-numpy: Change Fortran detect order for Fujitsu Compiler.

* create setup.cfg instead of command line.
2022-08-23 10:06:49 -07:00
Jen Herting
00feccde34 New package: py-loguru (#32074)
* [py-loguru] New package

* [py-loguru] Removed commented out line

* [py-loguru] Added types removed extra dependencies

* [py-loguru] missing windows dependency. listing windows as a conflict for now

* [py-loguru] depends on py-colorama when platform=windows

* [py-loguru] flake8

* [py-loguru] Import update

* [py-loguru]

- python is a runtime dependency
- setuptools is a build dependency

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-23 10:00:25 -07:00
Jen Herting
2c567edc1d New package: py-python-javabridge (#32075)
* [py-python-javabridge] New package

* [py-python-javabridge] Added dependencies

* [py-python-javabridge] Added types

* [py-python-javabridge] py-setuptools and java are dependencies

* [py-python-javabridge] Import update

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-23 09:59:09 -07:00
Martin Pokorny
51293f3750 libfabric: new versions (#32083)
* libfabric: add new versions

1.15.0, 1.15.1, main (previously named master)

* Add OPX fabric option, with conflict for versions before v1.15.0

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-23 10:33:49 -06:00
kwryankrattiger
b7024010d3 SDK: Quick fix to allow SDK to build with HIP (#32321) 2022-08-23 07:09:56 -07:00
Simon Pintarelli
44258a7cce meson: create unique names for build directory (#32062)
Taken from CMakePackage
2022-08-23 13:24:32 +02:00
Seth R. Johnson
0f25d3b219 Add cxxstd flag to googletest and default mock to true (#32171) 2022-08-23 13:05:03 +02:00
Seth R. Johnson
79a462c084 Geant4: update cmake defines and add support for nvhpc (#32185)
* geant4: use define function

* geant4: Change new feature from conflicts to when

* geant4: add support/conflicts for nvhpc

* fixup! geant4: add support/conflicts for nvhpc
2022-08-23 12:57:00 +02:00
Zhilin Zheng
b307d6e766 remove compiler optimize level limit of O2 for GCC (#32303)
gfortran can make it with O3, it might be better to remove this limitation.
2022-08-23 12:13:47 +02:00
Wouter Deconinck
abdecd2a9b acts: add new dependency on vecmem and autodiff (#26790)
Co-authored-by: Hadrien G. <knights_of_ni@gmx.com>
2022-08-23 11:31:33 +02:00
Tamara Dahlgren
3c3b18d858 spack ci: add support for running stand-alone tests (#27877)
This support requires adding the '--tests' option to 'spack ci rebuild'.
Packages whose stand-alone tests are broken (in the CI environment) can
be configured in gitlab-ci to be skipped by adding them to
broken-tests-packages.

Highlights include:
- Restructured 'spack ci' help to provide better subcommand summaries;
- Ensured only one InstallError (i.e., installer's) rather than allowing
  build_environment to have its own; and
- Refactored CI and CDash reporting to keep CDash-related properties and
  behavior in a separate class.

This allows stand-alone tests from `spack ci` to run when the `--tests`
option is used.  With `--tests`, stand-alone tests are run **after** a
**successful** (re)build of the package.  Test results are collected
and report(able) using CDash.

This PR adds the following features:
- Adds `-t` and `--tests` to `spack ci rebuild` to run stand-alone tests;
- Adds `--fail-fast` to stop stand-alone tests after the first failure;
- Ensures a *single* `InstallError` across packages
    (i.e., removes second class from build environment);
- Captures skipping tests for externals and uninstalled packages
    (for CDash reporting);
- Copies test logs and outputs to the CI artifacts directory to facilitate
    debugging;
- Parses stand-alone test results to report outputs from each `run_test` as
    separate test parts (CDash reporting);
- Logs a test completion message to allow capture of timing of the last
    `run_test` part;
- Adds the runner description to the CDash site to better distinguish entries
    in CDash tables;
- Adds `gitlab-ci` `broken-tests-packages` to CI configuration to skip
    stand-alone testing for packages with known issues;
- Changes `spack ci --help` so description of each subcommand is a single line;
- Changes `spack ci <subcommand> --help` to provide the full description of
    each command (versus no description); and
- Ensures `junit` test log file ends in an `.xml` extension (versus default where
    it does not).

Tasks:

- [x] Include the equivalent of the architecture information, or at least the host target, in the CDash output
- [x] Upload stand-alone test results files as  `test` artifacts
- [x] Confirm tests are run in GitLab
- [x] Ensure CDash results are uploaded as artifacts
- [x] Resolve issues with CDash build-and test results appearing on same row of the table 
- [x] Add unit tests  as needed
- [x] Investigate why some (dependency) packages don't have test results (e.g., related from other pipelines)
- [x] Ensure proper parsing and reporting of skipped tests (as `not run`) .. post- #28701 merge
- [x] Restore the proper CDash URLand or mirror ONCE out-of-band testing completed
2022-08-23 00:52:48 -07:00
Mikael Simberg
8b49790784 Constrain __skip_rocmclang workaround in pika package (#32208) 2022-08-23 01:41:54 -06:00
robgics
abad24265e ampl: Add new version and add variants for more install control. (#32317) 2022-08-23 09:40:53 +02:00
Daryl W. Grunau
4095666013 eospac: support intel-classic@2021 (#32323)
Co-authored-by: Daryl W. Grunau <dwg@lanl.gov>
2022-08-23 09:14:22 +02:00
Ryan Marcellino
877393e019 py-jupytext: add v1.14.1 (#32313) 2022-08-23 09:12:54 +02:00
kwryankrattiger
0d29bc00ec Kokkos: ROCm and CUDA are not compatible in Kokkos (#32181) 2022-08-23 08:24:56 +02:00
Ryan Marcellino
b203418720 New package: py-mergedeep (#32322) 2022-08-23 00:45:30 -05:00
Ryan Marcellino
3e3e387a45 New package: py-pymdown-extensions (#32324) 2022-08-23 00:44:39 -05:00
Vanessasaurus
04339fbe9a Automated deployment to update package flux-core 2022-08-23 (#32320)
Co-authored-by: github-actions <github-actions@users.noreply.github.com>
2022-08-22 20:33:42 -06:00
Dom Heinzeller
560b6432cc Update ESMF from JCSDA/NOAA-EMC spack fork (esmf@8.3.0 with external parallelio) (#32222)
* Update ESMF package from JCSDA/NOAA-EMC spack fork

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

Fix url_for_version

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* [@spackbot] updating style on behalf of climbfuji

Co-authored-by: Jim Edwards <jedwards@ucar.edu>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
Co-authored-by: climbfuji <climbfuji@users.noreply.github.com>
2022-08-22 17:36:07 -07:00
Cody Balos
bea8936e02 sundials: add v6.3.0 and logging-mpi variant (#32315) 2022-08-22 15:37:59 -06:00
Ryan Marcellino
95e8c4a615 New package: py-ghp-import (#32316) 2022-08-22 14:29:16 -07:00
Wouter Deconinck
c92db8a22a gaudi: consistent test dependencies when +examples (#32134)
* gaudi: consistent test dependencies when +examples

Gaudi requires testing to be enabled for examples to be built, so all
test dependencies are also there for `+examples`. This PR fixes a
missing pytest dependency when `+examples` is used but no testing is
enabled. The construct with the loop is to ensure the identical
dependencies are always used, even as version ranges my start to differ.

Testing with gaudi_add_tests was added in v35r0. Some nosetests and
QMtests were in the tree before, but not accessible it seems. The
effective dependency since 35.0 is also applied for pytest, extending
the range that was there before disentangling `optional`, at
9d67d1e034/var/spack/repos/builtin/packages/gaudi/package.py

* gaudi: version 36.7 in other PR...
2022-08-22 14:24:36 -07:00
Valentin Volkl
afecd70bc8 dd4hep: add version 1.22 (#32209) 2022-08-22 15:21:50 -06:00
Adam J. Stewart
9296a76658 py-shapely: add v1.8.3 (#32218) 2022-08-22 14:09:38 -07:00
Ryan Marcellino
e6e569e07c New package: py-py-f90nml (#32314) 2022-08-22 19:03:42 +00:00
Eric Brugger
ca9b2fe6ad VisIt: Add patch to include jpeg library in install. (#32245) 2022-08-22 11:59:07 -07:00
Mark Abraham
70f0a725cc hwloc: fix build with +onepai-level-zero (#31622)
Flags to configure were erroneously managed to configure twice. 

Removed the one that was wrong so that a configure warning is no longer issued.
2022-08-22 12:45:58 -06:00
Barry Rountree
fd80e34037 teckit: Fixes missing xmlparse.h issue. (#32295)
The "release" tarball provided by github lacks several files in
the SFconv/expat/xmlparse directory, including xmlparse.  Using
tarballs based off of version tags solves the problem.

o Changes version() to use commits associated with version tags.
o Adds several additional versions.
o Adds myself as maintainer.
o Adds hook to execute autogen.sh.
o Adds autotools &ct dependences.
o Removes expat dependence.
2022-08-22 18:39:28 +00:00
Paul Romano
7fc78b8b0f OpenMC: add v0.13.1 (#32263)
* openmc: add v0.13.1

* Add @paulromano as maintainer of openmc and py-openmc

* Address review comments from @adamjstewart

* Add back MPI variant in openmc package
2022-08-22 18:09:37 +00:00
Adam J. Stewart
1039caabed crunch: add new package (#31980) 2022-08-22 18:05:06 +00:00
Ryan Mast
5edb0fe96a helics: update v3 options and add missing versions (#32121)
* helics: update v3 options and add missing versions

* helics: allow using openssl 3.x for encryption support

* helics: fix style errors

* helics: Apply suggestion from code review

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-22 17:49:57 +00:00
iarspider
2860f2f70a Add checksum for py-requests 2.27.1, 2.28.0, 2.28.1 (#31896)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-22 11:46:01 -06:00
Jean-Paul Pelteret
85b8a41ccb deal.II 9.4: Fix issues due to override of CMake FIND_PACKAGE macro (#32079) 2022-08-22 11:37:52 -06:00
Harmen Stoppels
6e5d6ebf99 openmpi: fix patches for %nvhpc (#32308) 2022-08-22 10:57:51 -06:00
Adam J. Stewart
177e2e2672 xgboost: GCC 8+ required (#32282) 2022-08-22 08:48:18 -07:00
Arjun Guha
72b133a875 racket: fix spec (#32304) 2022-08-22 14:50:11 +00:00
Adam J. Stewart
dc0836804f py-rasterio: add v1.3.2 (#32277) 2022-08-22 16:15:33 +02:00
kwryankrattiger
a38beeaed2 HPX: ROCm and Cuda conflict needed (#32178)
Discovered this missing conflict when building the e4s enviroment with
unify:when_possible. #31940
2022-08-22 16:13:59 +02:00
Kelly (KT) Thompson
1c61f0420a Provide patches provided by consumers of draco. (#32281) 2022-08-22 16:04:58 +02:00
Robert Cohn
00b244853e enable packages that use numpy for oneapi e4s stack (#32293)
* enable geopm oneapi

* enable packages that depend on py-numpy

* disable nan warnings

* undo geopm enable

* undo geopm, it has multiple compile issues
2022-08-22 07:02:22 -07:00
Kendra Long!
1a030aa417 draco: add v7_14_0 (#32267) 2022-08-22 16:02:11 +02:00
Eric Brugger
c28f1c0b42 VisIt: add conduit and mfem variants (#32255) 2022-08-22 15:59:29 +02:00
Olivier Cessenat
a20c9b2d8e keepassxc: option autotype with pcsclite (#32288) 2022-08-22 15:50:41 +02:00
Jonas Thies
88a58abcf8 openfoam-org: add v9 and v10 (#32274) 2022-08-22 15:33:40 +02:00
Rémi Lacroix
e16f0b9f12 Molden: update URLs. (#32207) 2022-08-22 14:48:44 +02:00
Valentin Volkl
4d0612abfc baurmc: correct compile flag (#31305) 2022-08-22 14:28:20 +02:00
Valentin Volkl
408076adf0 prophecy4f: add hep tag, install to share (#31308) 2022-08-22 14:27:54 +02:00
Cory Bloor
dde6d00ab9 hip@4.5.2: fix installation (#31416)
In a fast-moving project with as many forks as LLVM, it's difficult to
accurately determine if a function exists just by checking the version
number. The existing version check fails, for example, with llvm-amdgpu
from ROCm 4.5. It is more robust to directly check if the function
exists.
2022-08-22 12:39:09 +02:00
Alan Sill
4c64a0fab2 VASP: add v6.3.2; handle changes to makefile.include naming pattern (#31701)
Added the SHA256 for version 6.3.2 and added logic to eal with the change of naming pattern for the makefile.include files that now appears to leave out the "linux_" prefix. (Changes should be. backwards compatible.)

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: alansill <alansill@users.noreply.github.com>
2022-08-22 12:21:00 +02:00
haralmha
01a4844ac4 feynhiggs: update url (#31760) 2022-08-22 12:20:09 +02:00
Adam J. Stewart
2ff132a62f py-isort: add v5.10.1 (#32302) 2022-08-22 11:09:09 +02:00
Olivier Cessenat
f7424e1fea qscintilla: coherence with py-sip (#32128) 2022-08-21 11:32:10 -07:00
Wileam Y. Phan
ab31256ee7 gcc: add 12.2.0 (#32270) 2022-08-21 15:30:37 +02:00
sparkyniner
21e6679056 spack list: add --tag flag (#32016)
* modified list.py and added functionality for --tag

* Removed long and very long, shifted rest of code above return statement

* removed results variable

* added import statement at top

* added the line accidentally deleted

* added line accidentally deleted

* changed p.name to p, added line inside if statement

* line order switched

* [@spackbot] updating style on behalf of sparkyniner

* ran update completion command

* add tests

* Update lib/spack/spack/test/cmd/list.py

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

* [@spackbot] updating style on behalf of sparkyniner

* changed argument to mock_packages and moved code under filter by tag

* removed bad rebase code and added additional test

* [@spackbot] updating style on behalf of sparkyniner

* added line removed earlier

* added line removed earlier

* replaced function

* added more recommended changes

Co-authored-by: sairaj <sairaj@sairajs-MacBook-Pro.local>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-20 16:09:44 -06:00
Morten Kristensen
8d02e2cc52 py-vermin: add latest version 1.4.2 (#32287) 2022-08-20 13:35:07 -05:00
Axel Huebl
39beafc99a Ascent, Conduit & VTK-h: don't assume I have Fortran (#32285)
* VTK-h: don't assume I have Fortran

Don't assume I have a working Fortran compiler in my toolchain :)

* Conduit: Do not Assume Fortran

* Ascent: Do not Assume Fortran

* fix style
2022-08-20 10:12:23 -07:00
kwryankrattiger
fff929d5ab WarpX: Add hints for FindMPI (#31842)
This seems to be needed on some cray systems and is safe on normal
desktops.
2022-08-20 15:45:03 +02:00
Olivier Cessenat
51619fdb00 gxsview: new version 2022.05.09 (#32289) 2022-08-20 14:33:10 +02:00
Axel Huebl
7db1c69945 Vis: macOS llvm-openmp (#32284)
Add some OpenMP lib provider for Apple-Clang to the vis packages.
2022-08-20 01:11:03 -07:00
Sreenivasa Murthy Kolam
11a4f5e25d Enable Tensorflow for ROCm. Add ROCm dependencies. (#32248)
* Build Tensorflow using the fork for rocm. Initial commit

* re-order the versions

* fix style errors

* address review comments

* add conflicts for rocm version

* address review comments

* remove rocm variant as its added by ROCmPackage
2022-08-20 01:50:38 +00:00
eugeneswalker
5590cad1ef py-globus-sdk: add new versions; unpin py-cryptography version constraint (#32280)
* add mothra tests

* py-globus-sdk: add new versions; unpin py-cryptography version constraint

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-19 19:30:07 -06:00
eugeneswalker
09486c082c py-pyjwt: fix py-cryptography version constraints (#32279)
* py-pyjwt: fix py-cryptography version constraints

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-19 18:50:20 -06:00
Adam J. Stewart
dab46296b6 py-setuptools: add v64.0.0 (#32078) 2022-08-19 14:20:08 -07:00
Axel Huebl
7f314947dd Doc: WarpX SENSEI Work-Around (#32276)
Follow-up to #31542
2022-08-19 14:10:00 -06:00
Rémi Lacroix
56e4203450 netcdf-cxx: Update the download URL (#32275) 2022-08-19 18:44:14 +00:00
Adam J. Stewart
b0990aa1fa py-pygments: add v2.13.0 (#32168) 2022-08-19 18:09:51 +00:00
Seth R. Johnson
e29d9de2dd ForTrilinos: new versions 2.0.1, 2.1.0 (#32265)
* ForTrilinos: new versions 2.0.1, 2.1.0

I also had to update the checksum for the released 2.0.0: see #32000 for
the explanation and solution to keep this from happening again.

* Soooo stylish
2022-08-19 11:37:55 -06:00
Harmen Stoppels
7acc082fba ncurses 6.3 restrict patch (#32271) 2022-08-19 10:11:32 -07:00
Olivier Cessenat
362cdc5437 pcsclite: add new package (#32129) 2022-08-19 18:22:15 +02:00
eugeneswalker
e1bce8c577 e4s %oneapi: add aml +ze (level zero) (#32161) 2022-08-19 08:25:15 -07:00
Seth R. Johnson
7760625b3f py-macholib: add v1.16 (#31967)
* py-macholib: add v1.16

* Update dependencies

Even 1.11 requires `altgraph (>=0.15)`. The lastest requires no
additional dependencies.
2022-08-19 08:25:51 -06:00
dunatotatos
77c2332df6 htslib, samtools: add v1.15 and v1.15.1 (#32259) 2022-08-19 13:56:14 +00:00
Olivier Cessenat
8773c183b5 ghostscript: new version 9.56.1 (#32088) 2022-08-19 15:00:14 +02:00
Harmen Stoppels
2daea9e4b4 docs: add a note about an issue being solved on develop (#32261) 2022-08-19 12:40:41 +00:00
psakievich
abf847ce82 Add messages to assertions in asp.py (#32237)
Assertions without messages if/when hit create a blank error message for users.  

This PR adds error messages to all assertions in asp.py even
if it seems unlikely they will ever be needed.
2022-08-19 14:15:25 +02:00
iarspider
8d99d33128 xpmem: fix configure with ~kernel-module (#32258) 2022-08-19 12:36:11 +02:00
eugeneswalker
a42a874faa e4s oneapi: compiler environment: prepend lib dir to LD_LIBRARY_PATH (#32227) 2022-08-19 06:30:18 -04:00
Mikael Simberg
be62635154 Add tracy variant to pika (#32090) 2022-08-19 02:38:07 -06:00
eugeneswalker
022d59f4a5 e4s: add dealii +cuda (#32159) 2022-08-18 22:41:57 -06:00
Massimiliano Culpo
605d72133b spack.util.package_hash: parametrize unit-tests (#32240)
* spack.util.package_hash: parametrize unit-tests

* Fix comment
2022-08-18 18:17:43 -07:00
eugeneswalker
b2d1d07d2e e4s %oneapi: add amrex +sycl (#32162) 2022-08-18 18:16:55 -07:00
Mark W. Krentel
908055e37c hpctoolkit: update git url from github to gitlab (#32252) 2022-08-18 17:35:34 -07:00
Wouter Deconinck
90352d7223 kassiopeia: new version 3.8.2 (#32254)
* kassiopeia: new version 3.8.2

There was no version 3.8.1, so here is the diff with 3.8.0: https://github.com/KATRIN-Experiment/Kassiopeia/compare/v3.8.0...v3.8.2

Build system changes:
- default `cxxstd` is now 17.

* kassiopeia: updated hash

* kassiopeia: use spec.satisfies

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-18 17:20:17 -07:00
kwryankrattiger
d77a8f7aa1 Sensei v4 (#30432)
* Sensei: Refactor package to work with v4.0.0

* Add missing MPI dependency
* Patch bug in libsim adapter
* Simplify conflicts with when-clauses
* Conflict variants that are incompatible (catalyst/libsim/ascent)
* Fix paraview version constraints to be more clear
* Add version constraints for VTK
* Drop unneeded visit restrictions
* Specify +vtkm dependency on ParaView's VTKm
* +hl is not needed for VTK, and is already specified in the VTK recipe
when it is needed
* Pass paths for adios2 and ascent packages

* ECP-SDK: Enable sensei

* CI: Add sensei to the data-vis-sdk pipeline

* Sensei: Change VISIT_DIR to work on linux

* Fixup: style check

* Sensei: Add patch for version detection

* CI: revert SDK pipeline in favor of new matrices

* Sensei: Formatting fixes
2022-08-18 17:20:01 -07:00
snehring
364e4e03ef pasta: missing setuptools dep (#32220)
* pasta: missing setuptools dep

* pasta: remove extraneous which

* pasta: convert to PythonPackage

* pasta: specify dendropy version
2022-08-18 22:53:09 +00:00
Adam J. Stewart
373d2ccf9f py-rasterio: add v1.3.1 (#32244) 2022-08-18 21:08:46 +00:00
Gregory Lee
0a8df434d2 added qt-creator 5.0.3 (#32241)
* added qt-creator 5.0.3

* [@spackbot] updating style on behalf of lee218llnl

Co-authored-by: lee218llnl <lee218llnl@users.noreply.github.com>
2022-08-18 19:35:44 +00:00
Sergey Kosukhin
15be91b585 autoconf-archive: fetch patch from github (#32232)
* autoconf-archive: fetch patch from github

* autoconf-archive: do not try to patch libtool
2022-08-18 10:55:04 -07:00
Thomas Gruber
bfa67bb275 Add patch for MEM_* group for Intel Icelake SP for 5.2.0 and newer (#32235) 2022-08-18 10:30:56 -07:00
Massimiliano Culpo
3c6b5b8afc Remove unused argument in test fixture (#32236)
The argument is very likely a typo, and was meant to
be given to the fixture decorator. Since the value
being passed is the default, let's just remove it.
2022-08-18 10:22:50 -07:00
Robert Cohn
1cdc50e3f6 ascent: fix oneapi build (#32239) 2022-08-18 17:15:39 +00:00
eugeneswalker
cfa4bffe26 e4s ci stack: add catalyst build (#31993) 2022-08-18 10:49:51 -06:00
Robert Cohn
3d4705ffab flux-sched: fix oneapi build (#32233) 2022-08-18 07:34:34 -07:00
Massimiliano Culpo
9d55a0436b spec: fix typo in Spec._finalize_concretization (#32210) 2022-08-18 15:04:08 +02:00
Olivier Cessenat
5981225d5a latex2html: new version V2022.2 (#32089) 2022-08-18 12:34:35 +00:00
Massimiliano Culpo
7f81a0a25e CI: move nightly macOS builds from GA to pipelines (#32231)
Modifications:
- [x] Delete the `macOS builds nightly` workflow
- [x] Removed shield in README.md
- [x] Moved corresponding specs to `e4s-macos`
2022-08-18 09:13:37 +00:00
Axel Huebl
5a59e1b77a hiredis: set install_name on macos, ccache: optional hiredis (#32219)
* hiredis: set install_name on macos
* ccache: make hiredis optional

Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-08-18 08:49:53 +00:00
snehring
a164b0b3e6 Update busco to 5.4.3 (#32221)
* metaeuk: new package

* sepp: new package

* busco: adding version 5.4.3

* busco: adding maintainers

* metauk: more accurate cmake dep

* sepp: adding missing dep and accurate python dep

* sepp: remove install_tree

* sepp: extend python
2022-08-17 23:31:04 -06:00
Adam J. Stewart
d398e91e88 py-pytorch-lightning: add v1.7.2 (#32226) 2022-08-18 04:25:16 +00:00
Sergey Kosukhin
f2adbafe38 mpich: add patch fixing MPI_MIN for unsigned integers (#32188) 2022-08-17 19:25:56 -06:00
Tom Scogland
b9e57006c9 bugfix: use cmake version from dependency (#31739)
Ensure that build tools with module-level commands in spack use
the version built as part of their build graph if one exists.
This is now also required for mesa, scons, cmake and ctest, out
of graph versions of these tools in path will not be found unless
added as an external.

This bug appeared because a new version of rocprim needs cmake
3.16, while I have 3.14 in my path I had added an external for
cmake 3.20 to the dag, but 3.14 was still used to configure
rocprim causing it to fail. As far as I can tell, all the build
tools added in build_environment.py had this problem, despite the
fact that they should have been resolving these tools by name
with a path search and find the one in the dag that way. I'm
still investigating why the path searching and Executable logic
didn't do it, but this makes three of the build systems much more
explicit, and leaves only gmake and ninja as dependencies from
out in the system while ensuring the version in the dag is used
if there is one.

The additional sqlite version is to perturb the hash of python to
work around a relocation bug which will be fixed in a subsequent
PR.
2022-08-17 17:54:17 -07:00
牟展佑
c386181c0f LLVM: add @15.0.0-rc1 (#31945) 2022-08-17 16:53:59 -06:00
Mikhail Titov
33c3cf2412 rct: update packages (RE, RG, RP, RS, RU) with new versions (#32216) 2022-08-17 22:42:48 +00:00
eugeneswalker
d8689b5038 e4s mac ci: try lambda, the new mac studio runner (#32169) 2022-08-17 21:24:47 +00:00
Larry Knox
c340fe43d2 Add HDF5 version 1.13.2. (#32202)
* Add HDF5 version 1.13.2.
Remove HDF5 versions 1.13.0 and 1.13.1.

* Correct formatting.
2022-08-17 14:21:54 -07:00
wanlinwang
4c040e02d1 Add riscv-gnu-toolchain package. (#32047)
Create a package for riscv-gnu-toolchain, a cross-compilation tool.
2022-08-17 12:18:24 -06:00
Todd Gamblin
73d25984ca clingo: fix bootstrapping on M1/monterey with command line tools
The Python that comes with XCode command line tools is a bit weird.

This fixes two issues that were preventing it from bootstrapping:

- [x] CommandLineTools python does not come with a `python-config` executable. If you
      don't have one of these, CMake's FindPython will, for some reason, assume that you
      want Python 2, so you need to set `CLINGO_PYTHON_VERSION` to ensure that clingo
      tells `find_package(Python <VERSION>)` the right thing.

- [x] We weren't setting `PYTHONHOME` correctly in Python's `package.py`. We were
      setting it to the `prefix` from Python `sysconfig`, but `prefix` tells you where
      the executable lives. CommandLineTools python reports its prefix as

          /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8

      but that doesn't exist. It looks like Apple builds the full python and just copies
      pieces of it into command line tools. PYTHONHOME is supposed to tell you where the
      default python library location is. So you have to look at the `base`, which
      `sysconfig` reports as

          /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8

      On most systems this is probably the same as `prefix`, but not with
      CommandLineTools, which has its system library in a different place.

The second change here was cherry-picked to 0d981a012d before merging and doesn't show
up here.

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-17 10:42:15 -07:00
Adam J. Stewart
50f8a0f0d6 python: simplify libs() and headers() methods in python/package.py
- [x] Rework `headers` to search a sequence of directories and to display all searched
      locations on error, as opposed to handling each directory with a variable

- [x] Make `headers` and `libs` do the same type of search and raise the same sort of
      errors.

Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
2022-08-17 10:42:15 -07:00
Jen Herting
30585890a8 New package: py-bitshuffle (#31876)
* [py-bitshuffle] New package

* [py-bitshuffle] compiling against spack hdf5

* [py-bitshuffle] flake8

* [py-bitshuffle] update import ine

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-17 10:19:19 -07:00
snehring
80afc1a5a8 ncbi-toolkit: adding new version (#32098) 2022-08-17 09:56:55 -07:00
Jonathan R. Madsen
809df37765 Add omnitrace version 1.4.0 (#32160)
* Add version 1.4.0

- override build variant with explicit variant instead of __init__ workaround

* Update package.py
2022-08-17 09:54:47 -07:00
Mike Renfro
7330969e8a fasta-36.3.8h_2020-05-04 (#32180)
* Adding 36.3.8h_2020-05-04

* [@spackbot] updating style on behalf of mikerenfro

Co-authored-by: mikerenfro <mikerenfro@users.noreply.github.com>
2022-08-17 09:50:35 -07:00
Erik Schnetter
b8b1a85e4d rclone: add v1.59.1 (#32011) 2022-08-17 14:51:06 +02:00
Wouter Deconinck
ff163bf623 acts: new versions 19.7.0, 20.0.0 (#32177) 2022-08-17 14:48:50 +02:00
Jon Rood
e76601006a amr-wind: remove propagation of shared and openmp variant to dependencies. (#32182) 2022-08-17 14:47:19 +02:00
eugeneswalker
8d8aa5c6cf kokkos: set CMAKE_CXX_STANDARD instead of Kokkos_CXX_STANDARD (#31841)
* kokkos@develop: set CMAKE_CXX_STANDARD instead of Kokkos_CXX_STANDARD

* use CMAKE_CXX_STANDARD regardless of kokkos version
2022-08-17 13:57:13 +02:00
Peter Scheibel
546c8a3092 Add c++14 support flag for xl compiler (#31826) 2022-08-17 13:57:13 +02:00
Adam J. Stewart
913e6043bb lerc: add libs property (#31684) 2022-08-17 13:57:13 +02:00
Adam J. Stewart
0c314caa37 mxnet: prefer stable release (#31821) 2022-08-17 13:57:13 +02:00
Weiqun Zhang
0017cbb193 amrex: add v22.08 (#31844) 2022-08-17 13:57:13 +02:00
eugeneswalker
5fe8ccca3a e4s oneapi stack: remove notes for now-fixed builds (#31839) 2022-08-17 13:57:13 +02:00
RichardABunt
3cbfb64a7e arm-forge: add v22.0.4. (#31835) 2022-08-17 13:57:13 +02:00
Massimiliano Culpo
6979d47cb6 CI: reduce the amount of tests run in the original concretizer (#32179)
* CI: reduce the amount of tests run in the original concretizer
* Don't test Python 3.6 on the original concretizer
2022-08-17 09:16:19 +02:00
Todd Gamblin
2d6087995c kokkos: fix conflict for deprecated sycl namespace
We're seeing errors pop up with older versions of Kokkos and newer versions of
`oneapi`, specifically:

    error: no member named 'ONEAPI' in namespace 'sycl'

This hapens because `sycl::ONEAPI` is `sycl::ext::oneapi` since oneapi `2022.0.0`.
`kokkos@3.6:` uses the new namespace. A conflict was present for this, but it was too
specific -- both to `dpcpp` and to the `2022.0.0` version.

- [x] Expand version ranges in `kokkos` conflict
- [x] Add conflict for `oneapi` in addition to `dpcpp`
2022-08-16 23:19:52 -07:00
Wouter Deconinck
8f34a3ac5c filesystem: in recursive mtime, check only files that exist (#32175)
* filesystem: use lstat in recursive mtime

When a `develop` path contains a dead symlink, the `os.stat` in the recursive `mtime` determination trips up over it.

Closes #32165.
2022-08-16 21:06:31 +00:00
Todd Gamblin
7e1890772c bugfix: silence clingo warning about requirement_policy/3
`requirement_policy/3` is generated and may not be in Spack's inputs to Clingo.
Currently this is causing warnings like:

```
$ spack spec zlib
/global/u2/t/tgamblin/src/spack/lib/spack/spack/solver/concretize.lp:510:3-43: info: atom does not occur in any rule head:
  requirement_policy(Package,X,"one_of")

/global/u2/t/tgamblin/src/spack/lib/spack/spack/solver/concretize.lp:517:3-43: info: atom does not occur in any rule head:
  requirement_policy(Package,X,"one_of")

/global/u2/t/tgamblin/src/spack/lib/spack/spack/solver/concretize.lp:523:3-43: info: atom does not occur in any rule head:
  requirement_policy(Package,X,"any_of")

/global/u2/t/tgamblin/src/spack/lib/spack/spack/solver/concretize.lp:534:3-43: info: atom does not occur in any rule head:
  requirement_policy(Package,X,"any_of")

Input spec
--------------------------------
zlib

Concretized
--------------------------------
zlib@1.2.11%gcc@7.5.0+optimize+pic+shared arch=cray-sles15-haswell
```

- [x] Silence warning with `#defined requirement_policy/3`
2022-08-16 12:56:37 -07:00
dunatotatos
194b4213c6 Add variant to install jellyfish in krakenuniq. (#32174) 2022-08-16 19:22:17 +00:00
Peter Scheibel
8281a0c5fe Configuration: allow users to enforce hard spec constraints (#27987)
Spack doesn't have an easy way to say something like "If I build
package X, then I *need* version Y":

* If you specify something on the command line, then you ensure
  that the constraints are applied, but the package is always built
* Likewise if you `spack add X...`` to your environment, the
  constraints are guaranteed to hold, but the environment always
  builds the package
* You can add preferences to packages.yaml, but these are not
  guaranteed to hold (Spack can choose other settings)

This commit adds a 'require' subsection to packages.yaml: the
specs added there are guaranteed to hold. The commit includes
documentation for the feature.

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-16 11:44:30 -07:00
Todd Gamblin
0d981a012d python: use base instead of prefix in python/package.py 2022-08-16 10:55:01 -07:00
Adam J. Stewart
2b69746e8a Python: remove ensurepip variant 2022-08-16 10:55:01 -07:00
Seth R. Johnson
928dfd6e75 celeritas: update checksum for git describe difference (#32000)
* celeritas: update checksum for git describe difference

Using `$Format:%h$` and the export-subst gitattribute property mean that
the release checksum can change post release...

```
$ diff -ru spack-stage-celeritas-0.1.0-hv7ewpjouekqws2y5iaql2cnp6tn76iz/ spack-stage-celeritas-0.1.0.wtf-ynyck3df2a7kkgkqrpwapgz3l2i62omz/
diff -ru spack-stage-celeritas-0.1.0-hv7ewpjouekqws2y5iaql2cnp6tn76iz/spack-src/cmake/CgvFindVersion.cmake spack-stage-celeritas-0.1.0.wtf-ynyck3df2a7kkgkqrpwapgz3l2i62omz/spack-src/cmake/CgvFindVersion.cmake
--- spack-stage-celeritas-0.1.0-hv7ewpjouekqws2y5iaql2cnp6tn76iz/spack-src/cmake/CgvFindVersion.cmake	2022-07-31 19:45:03.000000000 -0400
+++ spack-stage-celeritas-0.1.0.wtf-ynyck3df2a7kkgkqrpwapgz3l2i62omz/spack-src/cmake/CgvFindVersion.cmake	2022-07-31 19:45:03.000000000 -0400
@@ -75,7 +75,7 @@

   # Get a possible Git version generated using git-archive (see the
   # .gitattributes file)
-  set(_ARCHIVE_TAG "HEAD -> master, tag: v0.1.0")
+  set(_ARCHIVE_TAG "tag: v0.1.0")
   set(_ARCHIVE_HASH "04fe945d9")

   set(_TAG_REGEX "v([0-9.]+)(-dev[0-9.]+)?")
Binary files spack-stage-celeritas-0.1.0-hv7ewpjouekqws2y5iaql2cnp6tn76iz/v0.1.0.tar.gz and spack-stage-celeritas-0.1.0.wtf-ynyck3df2a7kkgkqrpwapgz3l2i62omz/v0.1.0.tar.gz differ
```

* celeritas: Use exported and re-uploaded tar.gz for reproducibility
2022-08-16 13:58:57 +00:00
eugeneswalker
0d7a6ec410 e4s: add flecsi +cuda (#32158) 2022-08-16 13:00:03 +00:00
eugeneswalker
fe77cc9b27 e4s: add ascent +cuda (#32153) 2022-08-16 10:47:17 +00:00
eugeneswalker
9bc537bb89 e4s: add amrex +cuda (#32152) 2022-08-16 09:08:26 +00:00
Thomas Madlener
55ae4e20bb podio, edm4hep: start to deprecate old versions (#32143) 2022-08-16 10:55:42 +02:00
Alberto Invernizzi
0403d11995 direnv: add v2.32.1 (#32094) 2022-08-16 10:55:01 +02:00
eugeneswalker
2c42ab45a0 e4s: add papi +rocm (#32150) 2022-08-16 08:26:06 +00:00
eugeneswalker
934db62541 e4s: add caliper +rocm (#32149) 2022-08-16 07:52:09 +00:00
Florian Albrechtskirchinger
89d55149c3 nlohmann-json: add v3.11.2 and make 'multiple_headers' the default (#31865)
* nlohmann-json: add v3.11.2

* nlohmann-json: variant multiple_headers should be the default
2022-08-15 18:16:47 -07:00
Peter Scheibel
4c2f357f0e CI/documentation: constrain pygments to avoid latest version (2.13.0) (#32163)
All PRs are failing the docs build on account of an error with
pygments. These errors coincide with a new release of pygments
(2.13.0) and restricting to < 2.13 allows the doc tests to pass,
so this commit enforces that constraint for the docs build.

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-15 18:00:33 -07:00
Massimiliano Culpo
2131bd7e8c Check that no reserved names are overridden by package recipes (#32092)
A few attribute in packages are meant to be reserved for
Spack internal use. This audit checks packages to ensure none
of these attributes are overridden.

- [x] add additional audit check
2022-08-15 16:31:10 -07:00
Andrew W Elble
ce0683db1d llvm: fix ncurses/terminfo builds (#32028)
* llvm: fix ncurses/terminfo builds

* use suggestion

* formatting
2022-08-15 15:37:59 -06:00
snehring
713c716195 tophat: fixing build issue with newer automakes (#32082) 2022-08-15 13:33:15 -07:00
Olivier Cessenat
cc48076e26 netpbm: new super stable version 10.73.40 (#32087) 2022-08-15 12:25:05 -07:00
Eric Brugger
68b94acf0d MFEM: Add an exceptions variant. (#32096) 2022-08-15 12:03:57 -07:00
snehring
a68ca0ead9 bridger: adding ncurses dep (#32103) 2022-08-15 11:55:43 -07:00
snehring
01e80210be quantum-espresso: adding some missing build deps (#32109) 2022-08-15 20:40:36 +02:00
Satish Balay
ede6d2caac fix oce build failure due to change of intel-tbb default version (#32101)
In file included from /data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.cxx:17:
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx: In static member function 'static void OSD_Parallel::ForEach(InputIterator, InputIterator, const Functor&, Standard_Boolean)':
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx:223:18: error: 'captured_exception' in namespace 'tbb' does not name a type
  223 |     catch ( tbb::captured_exception& anException )
      |                  ^~~~~~~~~~~~~~~~~~
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx:225:38: error: 'anException' was not declared in this scope
  225 |       Standard_NotImplemented::Raise(anException.what());
      |                                      ^~~~~~~~~~~
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx: In static member function 'static void OSD_Parallel::For(Standard_Integer, Standard_Integer, const Functor&, Standard_Boolean)':
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx:272:18: error: 'captured_exception' in namespace 'tbb' does not name a type
  272 |     catch ( tbb::captured_exception& anException )
      |                  ^~~~~~~~~~~~~~~~~~
/data/xsdkci/VS1mJQ1K/0/xsdk-project/spack-xsdk/spack-stage/balay/spack-stage-oce-0.18.3-rim5zhuacb7z4plxag52fjj3gbc4znv3/spack-src/src/OSD/OSD_Parallel.hxx:274:38: error: 'anException' was not declared in this scope
  274 |       Standard_NotImplemented::Raise(anException.what());
      |                                      ^~~~~~~~~~~
2022-08-15 11:35:00 -07:00
eugeneswalker
43c0dac6f6 unifyfs %oneapi: add CFLAGS=-Wno-unused-function to build environment (#32107) 2022-08-15 10:43:39 -07:00
kwryankrattiger
c12446d0ea VTK-h: Patch VTK-h to build +shared+cuda (#32104) 2022-08-15 10:41:45 -07:00
Seth R. Johnson
b1e499d009 swig: new version 4.1.dev1-fortran (#32135) 2022-08-15 10:03:09 -07:00
eugeneswalker
5bffd371e7 e4s ci: enable trilinos@13.4.0 +cuda build, issues resolved (#32124) 2022-08-15 09:06:03 -07:00
eugeneswalker
ad51e7d9f0 e4s ci: enable hpctoolkit +rocm (#32126) 2022-08-15 09:05:34 -07:00
Valentin Volkl
4e5d4909c0 root: set CLING_STANDARD_PCH as in thisroot.sh (#32095)
* root: set CLING_STANDARD_PCH as in thisroot.sh

* root: also set CPPYY_API_PATH
2022-08-15 09:34:15 -04:00
Harmen Stoppels
f7736ddfc0 curl: --with-pkg=prefix instead of --with-pkg (#31816) 2022-08-15 13:47:07 +02:00
Wouter Deconinck
f52d59cd86 gaudi: new version 36.7 (#32116)
Small bugfix release, https://gitlab.cern.ch/gaudi/Gaudi/-/compare/v36r6...v36r7. No changes to recipe needed.
2022-08-15 10:21:21 +02:00
Adam J. Stewart
34aad9b53f py-numpy: add v1.23.2 (#32139) 2022-08-15 10:19:07 +02:00
eugeneswalker
d402c1d6b5 flex %oneapi: add -Wno-implicit-function-declaration (#32073) 2022-08-14 08:48:32 -07:00
eugeneswalker
53e41ca9f1 arpack-ng %oneapi: add -Wno-implicit-function-declaration (#32080) 2022-08-14 08:48:24 -07:00
eugeneswalker
4d31b6bf8b mpifileutils %oneapi: add -Wno-implicit-function-declaration (#32067) 2022-08-14 07:44:25 -04:00
eugeneswalker
b43104acab openblas@0.3.20 %openblas: -Wno-implicit-function-declaration (#32065) 2022-08-14 07:43:51 -04:00
eugeneswalker
d192e6f88b hdf5 flag_handler for icx: add -Wno-implicit-function-declaration (#32066) 2022-08-14 07:42:58 -04:00
eugeneswalker
a56e779071 superlu-dist %oneapi: add -Wno-implicit-function-declaration (#32081) 2022-08-14 07:32:19 -04:00
Wouter Deconinck
e250371ee2 root: fix setup_dependent_build_environment regression (#32115)
`setup_dependent_build_environment(self, env, dependent_spec)` does not have a variable `spec`.

This causes several issues right now:
```console
==> Installing gaudi-36.6-cjjrpjwpcqrtojyrdqml3jpzkbn55hpb
==> No binary for gaudi-36.6-cjjrpjwpcqrtojyrdqml3jpzkbn55hpb found: installing from source
==> Error: NameError: name 'spec' is not defined

/home/wdconinc/git/spack/var/spack/repos/builtin/packages/root/package.py:614, in setup_dependent_build_environment:
        611        env.prepend_path("ROOT_INCLUDE_PATH", dependent_spec.prefix.include)
        612        if "+rpath" not in self.spec:
        613            env.prepend_path("LD_LIBRARY_PATH", self.prefix.lib.root)
  >>    614        if "platform=darwin" in spec:
        615            # Newer deployment targets cause fatal errors in rootcling
        616            env.unset("MACOSX_DEPLOYMENT_TARGET")
```
2022-08-14 07:19:09 -04:00
renjithravindrankannath
b32cb5765c Add new dependencies for rocm variant for py-torch recipe (#32100)
* Cmake module path updated for ROCm 5.2

* nccl is already set below for PyTorch 1.6+

* Threadpool is set below for PyTorch 1.6+
2022-08-13 01:17:20 -05:00
eugeneswalker
4ec31003aa e4s oneapi ci: enable hpx due to merged PR #32097 (#32117) 2022-08-12 23:41:53 -06:00
eugeneswalker
e0a03d07de boost@1.76:1.79 %oneapi: patch according to Intel guide for building Boost (#32097) 2022-08-12 20:02:00 -07:00
eugeneswalker
ffb63ca933 e4s oneapi: build tau %oneapi ^binutils%gcc (#32106) 2022-08-12 20:01:04 -07:00
Vanessasaurus
f00152a54f do not require docs (py-docutils) if not +docs (#32099)
Signed-off-by: vsoch <vsoch@users.noreply.github.com>

Signed-off-by: vsoch <vsoch@users.noreply.github.com>
Co-authored-by: vsoch <vsoch@users.noreply.github.com>
2022-08-12 21:32:50 +00:00
Scott Wittenburg
cb19ca2471 gitlab ci: Make sure PR pipelines can push to buildcache (#32014)
On PR pipelines we need to override the buildcache destination to
point to the "spack-binaries-prs" bucket, otherwise, those pipelines
try to push to the default mirror in a bucket for which they don't
have write permission.
2022-08-12 16:53:59 +00:00
Mikael Simberg
aa1ae5250a Use llvm13-thread.patch for all compilers when building llvm (#31661) 2022-08-12 10:33:53 -06:00
Olivier Cessenat
54ac5bdb42 perl-fth: add v0.527 (#32032) 2022-08-12 07:13:51 -06:00
Olivier Cessenat
30991ccee4 keepassxc: add 'docs' variant (#32049)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-12 15:06:59 +02:00
renjithravindrankannath
08e75f7a3e rocm: add v5.2 for the entire stack (#31591) 2022-08-12 09:20:47 +02:00
kwryankrattiger
3c9daa3ef8 VTK-m: Constrain gcc compiler after 11 updates. (#32059) 2022-08-11 22:29:54 -06:00
Massimiliano Culpo
1913dc2da3 Fix performance regression with spack mirror create --all (#32005)
This PR fixes the performance regression reported in #31985 and a few
other issues found while refactoring the spack mirror create command.

Modifications:

* (Primary) Do not require concretization for
  `spack mirror create --all`
* Forbid using --versions-per-spec together with --all
* Fixed a few issues when reading specs from input file (specs were
  not concretized, command would fail when trying to mirror
  dependencies)
* Fix issue with default directory for spack mirror create not being
  canonicalized
* Add more unit tests to poke spack mirror create
* Skip externals also when mirroring environments
* Changed slightly the wording for reporting (it was mentioning
  "Successfully created" even in presence of errors)
* Fix issue with colify (was not called properly during error
  reporting)
2022-08-11 16:51:01 -07:00
Jen Herting
a550b8ce30 New package: py-pynndescent (#32076)
* [py-pynndescent] New package

* [py-pynndescent] Removed white space

* [py-pynndescent] fixed dependencies

* [py-pynndescent] flake8

* [py-pynndescent] Import update

Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-08-11 17:41:54 -06:00
Chris White
8c23545a3a CachedCMakePackage: Port over logic from CMake build system for ldlibs and ldflags (#31750)
* port over logic from cmake build system for ldlibs and ldflags

* follow new style standards

* escape quotes

* escape quotes

* nevermind going back
2022-08-11 14:55:43 -07:00
Satish Balay
6ab6058ab4 petsc, py-petsc4py: add 3.17.4 (#32071) 2022-08-11 14:46:33 -06:00
Swann Perarnau
25da1052f7 aml: add v0.2, cuda,opencl,hip support (#30701)
- [x] Add release v0.2 of the AML package, deprecate v0.1, and add support for
      OpenCL, HIP, and CUDA variants of the library. Also update repo and
      release URL, as the previous one is not accessible anymore.
- [x] aml: add oneapi-level-zero support
- [x] Change openmp flags to force compatibility when compiling with
      intel-oneapi compilers.
2022-08-11 15:34:04 -05:00
snehring
29ee89b28b pasta: updating to latest version (#32077)
* pasta: updating to latest version

* pasta: fixing missing 's' from maintainers
2022-08-11 19:23:12 +00:00
Wouter Deconinck
02a5996d24 podio, edm4hep: new versions (#32063)
* podio, edm4hep: new versions

* edm4hep: new version

* edm4hep: @0.6: depends_on podio@0.15:
2022-08-11 10:50:01 -07:00
Brian Spilner
8cf5e829d9 release cdo-2.0.6 (#32069) 2022-08-11 17:36:38 +00:00
Olivier Cessenat
2d3db71729 pwgen: add new package (#32053)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-11 17:36:12 +02:00
Erik Schnetter
714a211e25 hwloc: add v2.8.0 (#32042) 2022-08-11 08:45:59 -06:00
Harmen Stoppels
ceda5fb46c Don't set LD_LIBRARY_PATH by default on Linux (#28354)
`LD_LIBRARY_PATH` can break system executables (e.g., when an enviornment is loaded) and isn't necessary thanks to `RPATH`s.  Packages that require `LD_LIBRARY_PATH` can set this in `setup_run_environment`.

- [x] Prefix inspections no longer set `LD_LIBRARY_PATH` by default
- [x] Document changes and workarounds for people who want `LD_LIBRARY_PATH`
2022-08-11 09:33:08 -05:00
Harmen Stoppels
e4d296dfc5 cmake: add v3.23.3 and v3.22.6 (#31926) 2022-08-11 14:51:28 +02:00
Robert Cohn
f84fa41cd1 Pin tbb version for salmon & dyninst (#32026) 2022-08-11 14:45:25 +02:00
Adam J. Stewart
975ebaaec7 py-matplotlib: add v3.5.3 (#32051) 2022-08-11 06:29:47 -06:00
Andrew W Elble
d60aa995a9 py-tensorflow-estimator: new versions (#32029)
* py-tensorflow-estimator: new versions

* [@spackbot] updating style on behalf of aweits

Co-authored-by: aweits <aweits@users.noreply.github.com>
2022-08-11 06:25:58 -06:00
Chris Green
46c8962e91 Add missing info to diagnostic for circular provides (#32027) 2022-08-11 14:20:17 +02:00
Olivier Cessenat
76d8376fea gxsview: gcc11 compilation rule for std::numeric_limits (#31970)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-11 14:18:01 +02:00
Tamara Dahlgren
f96b54b0a6 info: properly report default when for overridden variants (#32040) 2022-08-11 14:09:53 +02:00
Adam J. Stewart
5e57677140 py-scipy: 1.4.0:1.4.1 conflict on ppc64le (#32050) 2022-08-11 13:53:05 +02:00
Harmen Stoppels
6503652bc3 bubblewrap: add v0.6.2 (#32055) 2022-08-11 13:46:35 +02:00
David Schneider
2165d7205a precice: add v2.5.0 (#32052) 2022-08-11 13:44:50 +02:00
Brian Van Essen
0d5437ea4e Add support for using Spdlog in LBANN (#32034) 2022-08-11 11:39:40 +02:00
Brian Van Essen
ce59b33bcf Updated the RDKit dependencies for Boost variants. (#32033) 2022-08-11 11:39:07 +02:00
Glenn Johnson
4d06dcd62f bazel: add patches to compile with gcc-11 (#28548) 2022-08-10 19:04:18 -07:00
Harmen Stoppels
e3fe56abae llvm: fix LLDB_ENABLE_[N]CURSES (#32006) 2022-08-10 19:21:45 -06:00
Richarda Butler
ef818339db Update tests so /tmp/store can be accessed (#32003) 2022-08-10 20:53:48 +00:00
Thomas Gruber
98a540c793 Add LIKWID 5.2.2 (#32031) 2022-08-10 16:49:15 +00:00
Mikael Simberg
f237e669f2 Patch /usr/bin/file to file when on nixos (#30718)
These changes make many packages build on nixos where nearly nothing
comes from /bin or /usr/bin (the only things in "system locations" are
/bin/sh and /usr/bin/env, all the rest is found through PATH).

Many configuration scripts hardcode /usr/bin/file instead of using the
one from PATH. This patches them to use file from PATH.
2022-08-10 17:54:09 +02:00
Eric Brugger
9df2c7190f VisIt: fix missing link libs patch for parallel. (#32018) 2022-08-10 17:51:19 +02:00
Robert Cohn
19bebae931 intel-tbb add 2021.4, 2021.5, 2021.6.0-rc and master branch (#31997) 2022-08-10 07:07:26 -07:00
Richard Berger
1cb4b2337f singularity-eos: add dependency to py-pybind11 (#31907) 2022-08-10 04:20:39 -06:00
Filippo Spiga
623eee9a53 arm: add a dependency on "ncurses abi=5' (#31942)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: fspiga <fspiga@users.noreply.github.com>
2022-08-10 12:15:41 +02:00
Wouter Deconinck
acc848a0f8 gaudi: disentangle variant 'optional' (#31801) 2022-08-10 12:11:13 +02:00
Adam J. Stewart
47b1138ef2 libgta: add new package (#31981) 2022-08-10 11:04:56 +02:00
Seth R. Johnson
5d6ab9a76c core: add a helpful long message for UnknownPackageError (#31996)
```
Error: Package 'armpl' not found.
```
is pretty useless after an upgrade unless you're a spack pro. I've
recently hit this on multiple machines. See
https://github.com/spack/spack/issues/31453 ,
https://github.com/spack/spack/issues/31489  .
2022-08-10 11:01:07 +02:00
Jim Edwards
13bcf82851 parallelio: update config (#31868) 2022-08-10 10:53:04 +02:00
Adam J. Stewart
b7358cc6d6 py-pytorch-lightning: add v1.7.1 (#32020) 2022-08-10 02:25:56 -06:00
Axel Huebl
b6ed343b18 WarpX: add v22.08 (#31849) 2022-08-10 10:25:26 +02:00
Harmen Stoppels
857a798aed modules: add missing Python imports (#32012) 2022-08-10 10:00:33 +02:00
Adam J. Stewart
03a91df81a libjxl: add new package (#31983) 2022-08-10 09:20:07 +02:00
Axel Huebl
e7d8a7765b ADIOS2: ZFP<1.0 (#32015)
* ADIOS2: ZFP<1.0

The tagged ADIOS2 releases in Spack (and develop) do not yet
work with ZFP 1.0. Express valid depedency range before someone
updates the ZFP package and triggers the incompatibility.

* Use semver
2022-08-10 00:35:03 -06:00
iarspider
ddb83ed776 Add checksum for py-setuptools-rust 1.2.0 and 1.4.1 (#32009)
* Add checksum for py-setuptools-rust 1.2.0 and 1.4.1

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* Update package.py

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-08-09 16:53:57 -06:00
iarspider
6a30a5c8d7 Add checksum for py-pynacl 1.5.0 (#31988)
* Add checksum for py-pynacl 1.5.0

* Update package.py
2022-08-09 10:25:28 -07:00
iarspider
0d97d05ccb Add checksum for new py-semantic-version versions (#32010) 2022-08-09 10:24:48 -07:00
Tamara Dahlgren
3320c983a7 Reduce installation noise: filter path padding and make some details debug level 2 (#31998) 2022-08-09 19:22:09 +02:00
Adam J. Stewart
d29d5462c6 PythonPackage: add --config-settings support (#31823) 2022-08-09 10:09:51 -07:00
Adam J. Stewart
bc32b2c22c py-gpytorch: add v1.8.1 (#32001) 2022-08-09 09:45:35 -07:00
Jose E. Roman
bce3369325 New patch release SLEPc 3.17.2 (#32007) 2022-08-09 09:44:34 -07:00
iarspider
8598da337d Add checksum for py-pyjwt 2.4.0 (#31987) 2022-08-09 08:05:53 -06:00
Harmen Stoppels
f53b522572 Add base class for directory visitor (#32008) 2022-08-09 15:43:30 +02:00
Massimiliano Culpo
b61187455a Update release procedure, keep CHANGELOG up-to-date (#31969)
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-08-09 12:10:49 +00:00
Ryan Marcellino
d475306b6e rdma-core: add v22.4 (#31888) 2022-08-09 08:12:57 +02:00
eugeneswalker
9215d59599 axom@0.6.1 %oneapi: patch examples (#31991)
* axom@0.6.1 %oneapi: patch examples

* uncomment axom%oneapi ci build now that it is fixed
2022-08-08 19:39:32 +00:00
iarspider
522fda0a48 Add checksum for py-lxml 4.9.0 and 4.9.1 (#31986)
* Add checksum for py-lxml 4.9.0 and 4.9.1

* Update package.py
2022-08-08 18:53:07 +00:00
Adam J. Stewart
c0493f92af TensorFlow: add versions 2.8–2.9 (#31615) 2022-08-08 11:30:56 -07:00
iarspider
4a5af1a3d3 py-uproot: Add checksums for new versions (#31989)
* Add checksums for new uproot versions

* Update package.py
2022-08-08 18:13:06 +00:00
Olivier Cessenat
1d4925387e swig: support external find (#31990) 2022-08-08 11:41:41 -06:00
Maciej Wójcik
b24a068f3d gromacs: add CP2K (#31836) 2022-08-08 18:13:31 +02:00
Valentin Volkl
1841e947f6 acts: add v19.6.0 (#31922) 2022-08-08 15:03:04 +00:00
Wouter Deconinck
0b2ab33dee acts: add v19.4.0 and v19.5.0 (#31773) 2022-08-08 16:27:13 +02:00
Adam J. Stewart
739883027e py-scikit-learn: add v1.1.2 (#31957) 2022-08-08 16:24:00 +02:00
haralmha
bfd058db24 crmc: add necessary boost variants and allow argument mismatch for clang (#31928) 2022-08-08 16:23:27 +02:00
Niclas Jansson
f99e5e4295 neko: add v0.4.3, v0.4.2 and fixed package recipe (#31984) 2022-08-08 16:20:39 +02:00
Wouter Deconinck
8e50db1680 qt: new version 5.15.5 (#31973) 2022-08-08 07:40:22 -04:00
Alberto Invernizzi
32a31d01af sirius: inherit from rocmpackage (#31207)
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-08-08 11:40:37 +02:00
Adam J. Stewart
b02cbaad44 Update PyTorch ecosystem (#31960) 2022-08-08 10:51:55 +02:00
dependabot[bot]
5c5c194a6e build(deps): bump docker/build-push-action from 3.0.0 to 3.1.1 (#31964)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 3.0.0 to 3.1.1.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](e551b19e49...c84f382811)

---
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>
2022-08-08 10:51:13 +02:00
Olivier Cessenat
49bd4f6e0c perl-cgi: adding v4.54 (#31971) 2022-08-08 09:27:40 +02:00
Olivier Cessenat
26258ebb5b perl-tk: adding v804.036 (#31972) 2022-08-08 09:26:51 +02:00
eugeneswalker
e5eabe0cf6 e4s oneapi ci: unify when possible (#31965) 2022-08-08 09:22:32 +02:00
Wouter Deconinck
e31b4cdf33 herwig3: add v7.2.2 (#28233) 2022-08-08 09:11:12 +02:00
Erik Schnetter
93eb8be43c hpx: add v1.8.1 (#31977) 2022-08-08 09:01:33 +02:00
Olivier Cessenat
9b0bd7c536 hypre: update homepage (#31976) 2022-08-08 08:58:24 +02:00
Adam J. Stewart
0e3418887b py-tbparse: add new package (#31979)
Co-authored-by: adamjstewart <adamjstewart@users.noreply.github.com>
2022-08-08 08:57:36 +02:00
Adam J. Stewart
a00951137f libheif: add new package (#31982) 2022-08-08 08:50:49 +02:00
Melven Roehrig-Zoellner
67154a1088 cudnn: adjust version dependency on CUDA (#31763) 2022-08-07 08:27:51 -07:00
Vanessasaurus
86be4666fc flux packages used in a spack view will already be unshallow (#31955)
* flux packages used in a spack view will already be unshallow
and this particular command will error and break the entire build. Instead
we want to catch the ProcessError and allow for a regular fetch.
* final tweaks to add missing sqlite and fallback to fetch

Signed-off-by: vsoch <vsoch@users.noreply.github.com>
2022-08-06 12:05:29 -07:00
Ryan Marcellino
75d1cb469f py-simpleeval: new package (#31968) 2022-08-06 12:48:09 -05:00
eugeneswalker
0efadcae16 curl@7.84.0: patch easy_lock.h (https://github.com/curl/curl/pull/9054) (#31950) 2022-08-06 18:13:12 +02:00
Adam J. Stewart
7966e9bfb6 py-jaxlib: bazel 5 not yet supported (#31962) 2022-08-06 09:12:13 -07:00
Adam J. Stewart
6d021a9878 Perl: set PERL5LIB for test deps (#31685) 2022-08-05 15:31:56 -07:00
牟展佑
c5fb023c41 python: add @3.10.6 (#31951) 2022-08-05 15:29:59 -06:00
iarspider
8ca2ee2bbd Add checksum for py-numexprt 2.8.3 (#31900) 2022-08-05 15:29:46 -06:00
Luke Diorio-Toth
baf3b7299b py-flye: added v2.7-2.9 (#31956) 2022-08-05 14:17:31 -07:00
Jen Herting
42de3ff968 jxrlib-debian: new package (#31877)
Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-05 11:49:46 -06:00
Massimiliano Culpo
65a4125dd0 spack mirror: skip non-concretizable specs (#31897)
fixes #31736

Catch errors when concretizing specs and report them as
debug messages. The corresponding spec is skipped.

Co-authored-by: Greg Becker <becker33@llnl.gov>
2022-08-05 19:19:51 +02:00
Eric Brugger
fefab26f01 Add vtkm variant to visit spack package. (#31887) 2022-08-05 10:25:56 -06:00
downloadico
e30a8e70ce seq-gen: add new package (#31916) 2022-08-05 15:12:06 +00:00
Harmen Stoppels
519a2d2b15 rdma-core: latest (patch) releases (#31943) 2022-08-05 07:28:11 -07:00
Harmen Stoppels
b07b017dc5 patchelf: 0.15.0 (#31946) 2022-08-05 07:27:00 -07:00
dunatotatos
235f27a815 krakenuniq: add new package. (#31944) 2022-08-05 14:31:41 +02:00
Massimiliano Culpo
5bf6b7e6a5 Refactor cmd/install.py for better readability (#31936)
* Extracted two functions in cmd/install.py

* Extracted a function to perform installation from the active environment

* Rename a few functions, remove args from their arguments

* Rework conditional in install_from_active_environment to reduce nesting in the function

* Extract functions to parsespecs from cli and files

* Extract functions to getuser confirmation for overwrite

* Extract functions to install specs inside and outside environments

* Rename a couple of functions

* Fix outdated comment

* Add missing imports

* Split conditional to dedent one level

* Invert check and exit early to dedent one level when requiring user confirmation
2022-08-05 12:36:33 +02:00
Luke Diorio-Toth
901e6cb5e1 bracken: added new version and removed depreciated version (#31904) 2022-08-05 09:16:14 +02:00
Frank Willmore
08f403146e wps: add mpi dependency (#31855) 2022-08-05 08:58:32 +02:00
Ryan Mulhall
4114a7f91d Add new fms version 2022.03 (#31901)
Co-authored-by: rem1776 <Ryan.Mulhall@lscamd50-d.gfdl.noaa.gov>
2022-08-05 00:17:53 -06:00
Harmen Stoppels
a80c0e0217 mbedtls, xz: add missing install_name fixes on macOS (#31919) 2022-08-05 08:10:42 +02:00
Nils Vu
bb9744213f spectre: add v2022.07.18 and v2022.08.01 (#31633) 2022-08-05 08:09:30 +02:00
dunatotatos
739d98801f qtltools: fix prefix in Makefile (#31929) 2022-08-05 08:03:25 +02:00
psakievich
ddc373b4e1 Fix doc format for code blocks: GitRef versions (#31937)
Rendering was not pretty using `console` from #31914
2022-08-05 02:01:03 +00:00
Axel Huebl
465fa7a5f6 Add: pyAMReX (#31915)
* Add: pyAMReX

Add the new pybind11 project `pyAMReX` as `py-amrex` package.

* Fix PEP8 Style
2022-08-04 16:57:29 -07:00
Jonathon Anderson
6cc5a657fb Add checksum for py-identify 2.5.3 (#31935)
* Add checksum for py-identify 2.5.3

* Update package.py
2022-08-04 16:57:48 -06:00
Jonathan R. Madsen
6970beb647 Omnitrace version 1.3.1 (#31911) 2022-08-04 15:50:16 -07:00
Olivier Cessenat
1c6830dd7a ruby-asciidoctor: adding version 2.0.17 (#31927) 2022-08-04 15:46:52 -07:00
downloadico
d458d1feb2 tassel: add version 3.0.174 (#31917)
* tassel: add version 3.0.174
fix naming of 5.2.39 from "2017-07-22"

* changed single quotes to double quotes to appease the gods ;)

* fixed style issues
2022-08-04 15:40:56 -07:00
Cameron Rutherford
68a1d558b1 HiOp: use ginkgo@glu_experimental with develop. (#31934) 2022-08-04 15:08:32 -07:00
eugeneswalker
25b1451ea9 openblas%cce: patch to support -hnofortran (#31931) 2022-08-04 21:12:53 +00:00
Chris Green
20de47a1e2 Move type hint to satisfy Python 3.6, 3.7 interpreters (#31932) 2022-08-04 20:48:05 +00:00
psakievich
d67ead5978 Add documentation for git refs as versions (#31914)
* document git commit versions

Include documentation for manually specifying associated known version

* document spack develop command

Co-authorerd-by: psakievich <psakiev@sandia.gov>
Co-authored-by: Gregory Becker <becker33@llnl.gov>
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-08-04 13:20:33 -07:00
psakievich
3b1401f292 Git Ref versions can be paired to defined versions in the spec (#30998)
The current use of git ref's as a version requires a search algorithm to pick the right matching version based on the tags in the git history of the package.

This is less than ideal for the use case where users already know the specific version they want the git ref to be associated with. This PR makes a new version syntax [package]@[ref]=[version] to allow the users to specify the exact hash they wish to use.
2022-08-04 13:17:34 -07:00
iarspider
19a8bb53f0 Add checksums for py-onnx 1.10.1, 1.11.0, 1.12.0 (#31891)
* Add checksums for py-onnx 1.10.1, 1.11.0, 1.12.0

* Update package.py
2022-08-04 09:56:43 -07:00
iarspider
5512adbfc7 Add checksum for py-notebook 6.4.12 (#31924) 2022-08-04 09:54:44 -07:00
iarspider
ae6734a228 Add checksum for py-ipython 7.31.1 (#31923) 2022-08-04 09:53:15 -07:00
Auriane R
5c3e4f4a92 pika: add v0.7.0 (#31906) 2022-08-04 15:20:15 +00:00
Marie Houillon
2e487a90e9 New version for openCARP packages, v11.0 (#31652)
Co-authored-by: openCARP consortium <info@opencarp.org>
2022-08-04 16:32:12 +02:00
Massimiliano Culpo
0e40804cd0 Deprecate support for Python 3.5 (by removing it from CI) (#31908)
* Deprecate support for Python 3.5 (by removing it from CI)

* Restore Python 3.9
2022-08-04 15:26:56 +02:00
Filippo Spiga
80e6b6647f Adding JUBE 2.4.1, 2.4.2 and 2.4.3 (#31921) 2022-08-04 12:10:06 +02:00
iarspider
9173e1ad28 Add checksum for py-arrow 1.2.1 and 1.2.2 (#31894)
* Add checksum for py-arror 1.2.1 and 1.2.2

* Update package.py

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

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

* Update package.py

* Update package.py

* Update package.py

* Update package.py

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-08-04 02:01:21 +00:00
Massimiliano Culpo
9a48035e49 asp: refactor low level API to permit the injection of configuration
This allows writing extension commands that can benchmark
different configurations in clingo, or try different
configurations for a single test.
2022-08-03 18:01:08 -07:00
Axel Huebl
e90ea79347 AMReX: 1D Option (#31913)
Expose 1D support in AMREX_SPACEDIM.
2022-08-03 16:54:51 -06:00
eugeneswalker
2b04c4f840 sundials@6.1.0:6.2.0 +rocm: patch nvector to use pic (#31910)
* sundials@6.1.0:6.2.0 +rocm: patch nvector to use pic

* e4s ci: add sundials +rocm
2022-08-03 16:01:59 -06:00
Cameron Rutherford
3a62f3aeae ExaGO: disable Python with rocm+ipopt. HiOp: fix umpire+raja costraints. RAJA: fix option naming for 0.14.0 (#31880) 2022-08-03 15:21:58 -06:00
Jen Herting
43be9a1ac1 New package: py-glymur (#31875)
* [py-glymur] New Package: py-glymur

* [py-glymur] fixed copyright line

* [py-glumur] update import ine

* [@spackbot] updating style on behalf of qwertos

Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-03 10:13:25 -07:00
iarspider
849f01df86 Add checksum for py-smmap 3.0.5,4.0.0,5.0.0 (#31898) 2022-08-03 10:07:22 -07:00
Adam J. Stewart
6b23fe857e py-torchgeo: lock down pytorch-lightning version (#31886) 2022-08-03 10:26:38 -06:00
Glenn Johnson
26ec46e834 r-rhtslib: fix issue with git commit for v1.28 (#31653)
There is a problem with the git repo for rhtslib that apparently led to
a bad version entry during the previous round of package updates. A git
checkout on the commit also fails so use branch for most recent version.
2022-08-03 10:22:05 -06:00
Erik
d93c074491 AMReX: SYCL support (#31233)
Add SYCL support, check CUDA-HIP-SYCL mutually exclusive. Require
AMReX ver 21.06+ for SYCL.

Co-authored-by: etpalmer63 <etpalmer63@users.noreply.github.com>
2022-08-03 09:54:09 -06:00
Vicente Bolea
af0e20ba9f adios2: add v2.8.3 (#31885) 2022-08-03 07:25:52 -06:00
Harmen Stoppels
78364a6fe4 openssl: copy mozilla certs to work around symlink relocation issue (#31862) 2022-08-03 14:16:47 +02:00
Jen Herting
ba9b225ffc zopfli: add new package (#31879)
Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-03 06:02:02 -06:00
Piotr Luszczek
a5d49ef77a plasma: add code generation step for develop version (#31668)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-08-03 13:30:24 +02:00
Peter Scheibel
5603b031de Also set FC when building hypre+fortran (#31850) 2022-08-03 13:12:42 +02:00
dunatotatos
a8480281d5 QTLTools: add new package (#31881) 2022-08-03 12:42:45 +02:00
dunatotatos
ab87cac63f Match documentation of spack create with actual behavior. (#31892) 2022-08-03 10:38:56 +00:00
Jen Herting
09c56255c3 libspng: add new package (#31878)
Co-authored-by: James A Zilberman <jazrc@rit.edu>
Co-authored-by: qwertos <qwertos@users.noreply.github.com>
2022-08-03 04:30:05 -06:00
Massimiliano Culpo
080a26a314 Remove macOS 10.15 from bootstrap tests (#31890)
That version of the runners have been deprecated, see:
https://github.blog/changelog/2022-07-20-github-actions-the-macos-10-15-actions-runner-image-is-being-deprecated-and-will-be-removed-by-8-30-22/
2022-08-03 12:29:29 +02:00
Yang Zongze
ad09f7a1af Make parmmg dependent on mmg and metis (#31838)
1. copy source of mmg to its install tree for parmmg's build
2. add cmake args for parmmg
3. add '+mmg' when '+parmmg' for petsc
2022-08-03 01:57:53 -06:00
Adam J. Stewart
8f55c3c34a py-pytorch-lightning: add v1.7.0 (#31871) 2022-08-03 09:44:27 +02:00
Ken Raffenetti
84073466e6 mpich: fix hwloc config option for version >= 4.0 (#31874)
In MPICH 4.0, the config option for external hwloc changed from
--with-hwloc-prefix to --with-hwloc
2022-08-03 09:21:50 +02:00
dependabot[bot]
4aaa3841b8 build(deps): bump actions/setup-python from 4.1.0 to 4.2.0 (#31882)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](c4e89fac7e...b55428b188)

---
updated-dependencies:
- dependency-name: actions/setup-python
  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>
2022-08-03 09:08:03 +02:00
Chris Green
4d2ed35552 black: fix bootstrap for Python 3.6 (#31872)
* py-platformdirs: sanitize UTF-8 setup.cfg on Python 3.6

* py-platformdirs: black compliance

* Minimal fix per @adamjstewart
2022-08-02 20:49:36 -06:00
Chuck Atkins
2ed03407f4 libedit: Make sure libedit linkes to the correct terminfo lib from spack (#31870) 2022-08-02 20:49:14 -06:00
eugeneswalker
0462818c2e e4s oneapi ci: build vtk-m ~openmp due to issue #31830 (#31840) 2022-08-02 14:45:58 -07:00
Harmen Stoppels
2ecec26188 ca-certificates-mozilla: add v2022-07-19 and v2022-04-26(#31863) 2022-08-02 15:30:02 -06:00
eugeneswalker
b3f221185e butterflypack %oneapi: patch CMakeLists to solve issue #31818 (#31848)
* butterflypack %oneapi: patch CMakeLists to solve issue #31818

* uncomment builds affected by failing butterflypack

Co-authored-by: e <e>
2022-08-02 14:02:00 -06:00
Andrew W Elble
e11211eec6 new package: py-alphafold (#27849)
* new package: alphafold

and related dependencies, depends on #27138

* [@spackbot] updating style on behalf of aweits

* fix

Co-authored-by: aweits <aweits@users.noreply.github.com>
2022-08-02 20:01:22 +00:00
Peter Scheibel
4e723b634e Allow building with camp@0.2.3 for raja@0.14.0 and umpire@6.0.0 (#31853) 2022-08-02 21:39:45 +02:00
Jonathon Anderson
8c50ea9dc0 spack ci rebuild: Don't install in a login shell (#31771)
On some systems the shell in login mode wipes important parts of the
environment, such as PATH. This causes the build to fail since it can't
find `spack`.

For better robustness, don't use a login shell.

In a full CI job the final spack install is run in an environment formed by scripts running in this order:

export AWS_SECRET=...                  # 1. Load environment from GitLab project variables
source spack/share/spack/setup-env.sh  # 2. Load Spack into the environment (PATH)
spack env activate -V concrete_env     # 3. Activate the concrete environment
source /etc/profile                    # 4. Bash login shell (from -l)
spack install ...
Whereas when a user launches their own container with (docker|podman) run -it, they end up running spack install in an environment formed in this order:

source /etc/bash.bashrc                # (not 4). Bash interactive shell (default with TTY)
export AWS_SECRET=...                  #~1. Manually load environment from GitLab project variables
source spack/share/spack/setup-env.sh  # 2. Load Spack into the environment (PATH)
spack env activate -V concrete_env     # 3. Activate the concrete environment
spack install ...
The big problem being that (4) has a completely different position and content (on Leap 15 and possibly other containers).

So in context, this PR removes (4) from the CI job case, leaving us with the simpler:

export AWS_SECRET=...                  # 1. Load environment from GitLab project variables
source spack/share/spack/setup-env.sh  # 2. Load Spack into the environment (PATH)
spack env activate -V concrete_env     # 3. Activate the concrete environment
spack install ...
2022-08-02 11:45:50 -07:00
Massimiliano Culpo
6e0b7959a4 Optimize reuse from buildcaches (#30806)
* database: don't sort on return from query_local

* ASP-based solver: don't build the hash-lookup dictionary twice

Building this dictionary twice and traversing all the specs
might be time-consuming for large buildcaches.
2022-08-02 11:43:14 -07:00
Massimiliano Culpo
aeac72e1e3 Style fixes 2022-08-02 10:52:52 -07:00
Massimiliano Culpo
0b832b2929 Remove line that sets non-existing attribute? 2022-08-02 10:52:52 -07:00
Massimiliano Culpo
2b3f350071 Use __slots__ for fast attribute access 2022-08-02 10:52:52 -07:00
Massimiliano Culpo
b6c8779772 Use __slots__ for fast attribute access during parsing 2022-08-02 10:52:52 -07:00
Harmen Stoppels
57e6452831 Document that reuse is higher priority than preferences in packages.yaml (#31864)
Resurrect Known issues, since users ask frequently about that.
2022-08-02 18:54:41 +02:00
Harmen Stoppels
3b4d1bdd31 py-pre-commit 2.20.0 2022-08-02 05:07:41 -07:00
Todd Gamblin
415ac29665 docs: Fix outdated pre-0.18 text on build dependencies (#31860) 2022-08-02 11:34:58 +00:00
Melven Roehrig-Zoellner
ac3b1d77fb gdb: add v12.1 (#31765) 2022-08-02 04:05:44 -06:00
Sebastian Ehlert
5533256dc6 Add mctc-lib v0.3.1 and toml-f v0.3.0 (#31847) 2022-08-02 08:03:00 +02:00
Adam J. Stewart
22d4612d94 Add meson Python build backend (#31809) 2022-08-02 07:55:41 +02:00
Adam J. Stewart
113acd4714 py-flake8: add v5.0 (#31854) 2022-08-02 07:44:02 +02:00
Adam J. Stewart
1a61252c64 spack checksum: black compliance (#31851) 2022-08-02 07:29:30 +02:00
eugeneswalker
df4e66ecde kokkos: set CMAKE_CXX_STANDARD instead of Kokkos_CXX_STANDARD (#31841)
* kokkos@develop: set CMAKE_CXX_STANDARD instead of Kokkos_CXX_STANDARD

* use CMAKE_CXX_STANDARD regardless of kokkos version
2022-08-01 23:12:32 +00:00
Peter Scheibel
c0ede0e0fa Add c++14 support flag for xl compiler (#31826) 2022-08-01 22:51:02 +00:00
Adam J. Stewart
77537fab82 lerc: add libs property (#31684) 2022-08-01 21:42:36 +00:00
Adam J. Stewart
d9d3438637 mxnet: prefer stable release (#31821) 2022-08-01 20:15:46 +00:00
Weiqun Zhang
2f34556f44 amrex: add v22.08 (#31844) 2022-08-01 19:40:02 +00:00
eugeneswalker
0fc045392b e4s oneapi stack: remove notes for now-fixed builds (#31839) 2022-08-01 12:03:39 -07:00
RichardABunt
d9c0080858 arm-forge: add v22.0.4. (#31835) 2022-08-01 19:53:30 +02:00
Adam J. Stewart
f018b869e6 Add support for macOS Ventura (#31812) 2022-08-01 16:45:56 +00:00
Adam J. Stewart
90dbfea895 python: fix clingo bootstrapping on Apple M1/M2 (#31792) 2022-08-01 15:48:07 +00:00
Seth R. Johnson
ae3c039908 celeritas: new package (#31834)
ROOT also needs updating for downstream macOS packages
2022-08-01 10:59:09 -04:00
Seth R. Johnson
2ec17288f3 py-breathe: fix version constraints to avoid concretizing old breathe (#31828) 2022-08-01 10:58:54 -04:00
Adam J. Stewart
c98d367a91 CUDA: add new GCC conflict (#31820) 2022-08-01 14:31:07 +00:00
Erik Schnetter
e985a9884a gperftools: make the "libunwind" variant conditional (#31673)
libunwind is supported on Linux only
2022-08-01 14:17:31 +00:00
Erik Schnetter
532668af29 wi4mpi: New version 3.6.0 (#31681)
* wi4mpi: New version 3.6.0
2022-07-31 22:25:35 -06:00
Todd Gamblin
ab04d697c7 tests: remove old changed_files() test
This test relied on an old version of the `flake8_package` fixture that modified
the spack repository, but it doesn't do that anymore. There are other tests for
`changed_files()` that do a better job of mocking up a git repository with
changes, so we can just delete this one.
2022-07-31 21:01:02 -07:00
Todd Gamblin
98d6862787 black: fix .git-blame-ignore-revs commit
A GitHub rebase merge seems to rewrite commits even if it would be a
fast-forward, which means that the commit merged from #24718 is wrong.

- [x] update `.git-blame-ignore-revs` with real commit from `develop`
2022-07-31 15:06:38 -07:00
Todd Gamblin
143f3f830c style: simplify arguments with --tool TOOL and --skip TOOL
`spack style` tests were annoyingly brittle because we could not easily be
specific about which tools to run (we had to use `--no-black`, `--no-isort`,
`--no-flake8`, and `--no-mypy`). We should be able to specify what to run OR
what to skip.

Now you can run, e.g.:

    spack style --tool black,flake8

or:

    spack style --skip black,isort

- [x] Remove  `--no-black`, `--no-isort`, `--no-flake8`, and `--no-mypy` args.
- [x] Add `--tool TOOL` argument.
- [x] Add `--skip TOOL` argument.
- [x] Allow either `--tool black --tool flake8` or `--tool black,flake8` syntax.
2022-07-31 13:29:20 -07:00
Todd Gamblin
76b190a624 black: ensure that spack create templates are black-compliant
- [x] remove alignment spaces from tempaltes
- [x] replace single with double quotes
- [x] Makefile template now generates parsable code
      (function body is `pass` instead of just a comment)
- [x] template checks now run black to check output
2022-07-31 13:29:20 -07:00
Todd Gamblin
b87ca6da27 black: do not align sha56's with spaces in spack checksum output 2022-07-31 13:29:20 -07:00
Todd Gamblin
e2dc4b0b60 black: add badge to README.md 2022-07-31 13:29:20 -07:00
Todd Gamblin
357968469e black: bootstrap if black in PATH is too new
Previously we'd accept any version for bootstrapping black, but we need <= 21.

- [x] modify bootstrapping code to check black version before accepting an
      executable from `PATH`.
2022-07-31 13:29:20 -07:00
Todd Gamblin
f27eeaa2e8 black: add .git-blame-ignore-revs toignore black reformatting in blame
- [x] add `.git-blame-ignore-revs` to ignore black reformatting
- [x] make `spack blame` respect `.git-blame-ignore-revs`
      (even if the user hasn't configured git to do so)
2022-07-31 13:29:20 -07:00
Todd Gamblin
c661ca248b black: fix format-sensitive tests
Some of our tests rely on single vs. double quotes, and others rely on specific
line numbers in the source. These needed fixing after the switch to Black.
2022-07-31 13:29:20 -07:00
Todd Gamblin
f52f6e99db black: reformat entire repository with black 2022-07-31 13:29:20 -07:00
Todd Gamblin
549ba1ed32 black: fix style check package and flake8 formatting for black
Black will automatically fix a lot of the exceptions we previously allowed for
directives, so we don't need them in our custom `flake8_formatter` anymore.

- [x] remove `E501` (long line) exceptions for directives from `flake8_formatter`,
      as they won't help us now.
- [x] Refine exceptions for long URLs in the `flake8_formatter`.
- [x] Adjust the mock `flake8-package` to exhibit the exceptions we still allow.
- [x] Update style tests for new `flake8-package`.
- [x] Blacken style test.
2022-07-31 13:29:20 -07:00
Todd Gamblin
156af2a60a black: clean up noqa comments from most of the code
Many noqa's in the code are no longer necessary now that the column limit is 99
characters. Others can easily be eliminated, and still more can just be made more
specific if they do not have to do with line length.

The only E501's still in the code are in the tests for `spack.util.path` and the tests
for `spack style`.
2022-07-31 13:29:20 -07:00
Todd Gamblin
3fa090f490 black: break up long strings that black cannot fix 2022-07-31 13:29:20 -07:00
Todd Gamblin
67d27841ae black: configuration
This adds necessary configuration for flake8 and black to work together.

This also sets the line length to 99, per the data here:

* https://github.com/spack/spack/pull/24718#issuecomment-876933636

Given the data and the spirit of black's 88-character limit, we set the limit to 99
characters for all of Spack, because:

* 99 is one less than 100, a nice round number, and all lines will fit in a
  100-character wide terminal (even when the text editor puts a \ at EOL).
* 99 is just past the knee the file size curve for packages, and it means that packages
  remain readable and not significantly longer than they are now.
* It doesn't seem to hurt core -- files in core might change length by a few percent but
  seem like they'll be mostly the same as before -- just a bit more roomy.

- [x] set line length to 99
- [x] remove most exceptions from `.flake8` and add the ones black cares about
- [x] add `[tool.black]` to `pyproject.toml`
- [x] make `black` run if available in `spack style --fix`

Co-Authored-By: Tom Scogland <tscogland@llnl.gov>
2022-07-31 13:29:20 -07:00
Adam J. Stewart
ec87924039 MACOSX_DEPLOYMENT_TARGET: MAJOR.MINOR (#31811) 2022-07-30 02:12:02 +00:00
Sam Reeve
d2ad58c476 cabana: new version 0.5 (#31807) 2022-07-29 22:02:00 +00:00
eugeneswalker
d360551c16 e4s oneapi ci: uncomment pdt (#31803)
* e4s oneapi ci: uncomment pdt

* load oneapi compiler module before executing `spack ci rebuild`
2022-07-29 20:57:25 +00:00
Adam J. Stewart
9d62faa239 py-segmentation-models-pytorch: add v0.3.0 (#31806) 2022-07-29 14:05:44 -06:00
iarspider
882a7455ea Add checksum for numba 0.55.2 and 0.56, py-llvmlite 0.39.0 (#31802)
* Add checksum for numba 0.55.2 and 0.56

* Add checksum for py-llvmlite 0.39.0

* Apply suggestions from code review

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-07-29 19:21:02 +00:00
eugeneswalker
9e683126f0 e4s ci: add tasmanian +rocm (#31606) 2022-07-29 11:43:34 -07:00
Chuck Atkins
57af891cb1 OpenGL restructure (#31748)
* OpenGL: Restructures the OpenGL packages

This provides concrete glx and osmesa packages which delegate to
virtual libglx and libosmesa packages provided by mesa. This was
necessary because GLX and OSMesa both provide gl implementations but
with mesa providing the girtual gl package there was no way to properly
distinguish which of the two opengl implementations was beiing requested
when querying the spec['gl'] dependency.  This additional level of
indirection allows for that.

* OpenGL: Adjust downstream dependents of OpenGL for the restructure

This implements the necessary fixes in the packages that depend on
OpenGL to work with the restructuring.  This also attempts to create a
consistent variant for specifying glx or osmesa.
2022-07-29 12:04:42 -06:00
eugeneswalker
70c849f76b e4s oneapi ci: uncomment parallel-netcdf (#31804) 2022-07-29 17:39:51 +00:00
Seth R. Johnson
e35b69ca57 vdt: add missing python dependency (#31795)
* vdt: add missing python dependency

* vdt: fix dependency and add explicit exe path
2022-07-29 09:27:19 -07:00
Wouter Deconinck
9d67d1e034 gaudi: new version 36.6 (#31799)
No build system changes. Changelog at https://gitlab.cern.ch/gaudi/Gaudi/-/tags/v36r6, comparison at https://gitlab.cern.ch/gaudi/Gaudi/-/compare/v36r5...v36r6
2022-07-29 09:01:29 -07:00
Seth R. Johnson
a9b2bd5edc iwyu: new version 0.18 (#31798) 2022-07-29 08:57:59 -07:00
eugeneswalker
ec8c8e8aa8 e4s ci: add oneapi stack (#31781)
* e4s ci: add oneapi stack

* shorten padded_length to 256

* comment out pdt and add failure note
2022-07-29 03:32:41 +00:00
Scott Wittenburg
4f57430ef3 Deprecate visit 3.3.0 because it is broken (#31790) 2022-07-28 17:36:49 -07:00
Tim Haines
dd54690097 Dyninst: add version 12.2.0 (#31789) 2022-07-28 18:21:45 -06:00
Glenn Johnson
1cb6836614 new package: r-signac (#31703)
Also includes new package depdendency for r-rcpproll.
2022-07-28 15:14:45 -07:00
Evgeny Posenitskiy
519e7e0bb0 New package: trexio (#31769)
* [WIP] first working Spack spec for TREXIO

* add patch to prepend -lhdf5_hl to LIBS

* Fix spack stype issues

* trexio: Fix hashes and hdf5 variant build

* trexio: Remove import from Spack

* trexio: Fix the isort error

* Apply suggestions from code review

By @tldahlgren

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-07-28 15:05:28 -07:00
snehring
bc555fd148 sentieon-genomics: update version to 202112.05 (#31788) 2022-07-28 15:03:40 -07:00
Harmen Stoppels
e4f0f3582e environment.py: only install root specs explicitly (#31645) 2022-07-28 12:16:35 -07:00
Sam Reeve
e8cce0f7cb Cabana: add test variants (#31776)
* Simplify Cabana build flags
* Add unit tests, examples, and performance options
2022-07-28 11:21:53 -07:00
Manuela Kuhn
fc4d74b132 py-rsatoolbox: add 0.0.4 (#31785) 2022-07-28 09:59:34 -07:00
Brent Huisman
9ec05f045f New version of Arbor package (#31660) 2022-07-28 13:11:51 +02:00
Harmen Stoppels
09a945d924 gcc: fix unstable patch urls (#31784)
the patch urls dynamically generate a diff, which includes metadata
about the git version used, meaning they are not content-addressable.

instead ship the patches with spack.
2022-07-28 11:49:56 +02:00
Filippo Spiga
9ed2d07d68 Adding NVIDIA HPC SDK 22.7 (#31770) 2022-07-28 03:25:58 -06:00
Stephen Sachs
584cc47fb3 Fix parsing of clean_url (#31783)
In #31618 the idea was to determine the file extension heuristically by dropping query params etc from a url and then consider it as a file path. That broke for URLs that only have query params like http://example.com/?patch=x as it would result in empty string as basename. This PR reverts to the old behavior of saving files as ?patch=x in that case.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-28 09:24:19 +00:00
Erik Schnetter
2dd4795f56 mpitrampoline: New version 5.0.1 (#31772) 2022-07-28 02:33:45 -06:00
AMD Toolchain Support
6c0ca932aa Adding Flamemaster product (#31126)
* Adding Flamemaster product

About FlameMaster: Flamemaster is an open source C++ program package for 0D
combustion and 1D laminar flame calculations.

* Addressed review comments and style tests errors

* Addressed style tests errors

* Incorporated spack style of coding

* Fixed following spack style error

[E228] missing whitespace around modulo operator

* Update package.py

addressing style issues

* Update package.py

* Changes to maintainers entry
2022-07-27 15:44:27 -07:00
eugeneswalker
5f845f3f31 e4s ci: add slate +rocm (#31602) 2022-07-27 15:36:59 -07:00
Erik Schnetter
b86f8f41e8 c-blosc2: New version 2.2.0 (#31577) 2022-07-27 15:06:49 -07:00
Sam Reeve
180fc7cdf1 New ExaCA package (#31777) 2022-07-27 14:54:57 -07:00
David Boehme
075dd64883 Add Caliper v2.8.0 and rocm support (#31632)
* Add Caliper v2.8.0

* Add conflict for +rocm+cuda
2022-07-27 15:38:54 -06:00
Thomas Madlener
5bd44a795c lcio, podio, edm4hep: Add latest versions (#31749)
* lcio: add latest version

* edm4hep: Add latest versions

* podio: Add latest versions
2022-07-27 14:13:47 -07:00
Andrew-Dunning-NNL
5505c443bf ZSH: add lmod and local etc variants (#29651)
* zsh: add lmod and local etc support

* zsh: fix indentation
2022-07-27 14:06:07 -07:00
Eric Brugger
71657fffbd VisIt: Update to VisIt 3.3.0. (#31654) 2022-07-27 13:46:04 -07:00
kwryankrattiger
a3f8dc1874 WarpX: Add sensei insitu variant (#31542) 2022-07-27 13:17:44 -06:00
Valentin Volkl
afc044cbad dd4hep: add v1.21 (#31705) 2022-07-27 10:27:21 -07:00
Valentin Volkl
850b295ec5 herwig3, thepeg: correct lhapdfsets dependency, specify boost libs (#31744)
* herwig3: change lhapdfsets dependency type to build

These data sets are needed for a check during build, but due to the difficulty of versioning the datasets it is preferred not to keep the them in the run environment.

* herwig3: explicitly state needed boost libs

* thepeg: explicitly state needed boost libs

* style

* stylestyle
2022-07-27 10:23:03 -07:00
Pitamila
56ab4c9820 py-scipy: -fPIC appending trouble with gcc@10: (#31698)
`-fPIC` mandatory option squeezed by error, the
NPY_DISTUTILS_APPEND_FLAGS appears handy

Co-authored-by: duperrayp <duperrayp@u-un00s16835>
2022-07-27 10:20:49 -07:00
wspear
02151565e9 Tau must get GCC path from environment on Cray (#31751)
* Tau must get GCC path from environment on Cray

self.compiler doesn't provide the path to the gcc compiler when using cray cc and the spack internal compiler overrides the location in PATH. If possible get the location from the GCC_PATH variable instead.

* Fix flake8 issues

* Update package.py
2022-07-27 10:04:06 -07:00
Jonathan R. Madsen
3db87f207e Update omnitrace package with v1.3.0 (#31754) 2022-07-27 10:01:30 -07:00
Adam J. Stewart
fdd914c990 py-sphinx: add v5.1.1 (#31756) 2022-07-27 09:58:15 -07:00
Melven Roehrig-Zoellner
3d9b143296 tixi: new versions (#31761) 2022-07-27 09:51:21 -07:00
Melven Roehrig-Zoellner
179afcac4e valgrind: new version (#31762) 2022-07-27 09:48:55 -07:00
Melven Roehrig-Zoellner
1ab7f65920 itensor: new version, restrict hdf5 to :1.10 (#31764) 2022-07-27 09:44:38 -07:00
Harmen Stoppels
ade7bcd514 curl: 7.84.0 (#31725) 2022-07-26 20:37:49 -06:00
eugeneswalker
5b4c076ddb cabana: add cajita variant (#31753)
* cabana: add cajita variant

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

Co-authored-by: Sam Reeve <6740307+streeve@users.noreply.github.com>

* cabana: cannot build +cajita ~mpi

Co-authored-by: Sam Reeve <6740307+streeve@users.noreply.github.com>
2022-07-26 17:33:15 -07:00
eugeneswalker
b38a814dc9 e4s ci stack: add spec: hdf5-vol-async (#31747)
* e4s ci stack: add spec: hdf5-vol-async

* hdf5-vol-async: add e4s tag
2022-07-26 16:21:56 -06:00
eugeneswalker
3b692875d8 mpich@4.0.2 %oneapi: patch config.rpath (#31740) 2022-07-26 15:41:42 -06:00
Harmen Stoppels
1319e2d261 openmpi: +pmi implies schedulers=slurm (#31722) 2022-07-26 14:04:55 -07:00
Harmen Stoppels
cffdd86d11 libjwt: new versions, missing dep, disable examples (#31723) 2022-07-26 14:04:27 -07:00
Harmen Stoppels
43d53a032a jansson: new version, disable docs (#31724)
We don't have the build deps for the docs, so disable for now.
2022-07-26 14:04:11 -07:00
Harmen Stoppels
15ee035f97 json-c: 0.16 (#31726) 2022-07-26 13:50:23 -07:00
Harmen Stoppels
c8c46bd012 munge: 0.5.15 (#31727) 2022-07-26 13:50:08 -07:00
Harmen Stoppels
fa3808bebd libgcrypt: bump (#31728) 2022-07-26 13:49:52 -07:00
Harmen Stoppels
644cfb5197 libgpg-error: bump (#31729) 2022-07-26 13:44:12 -07:00
Harmen Stoppels
859b56a105 gnupg: bump and deprecate over cve (#31730) 2022-07-26 13:43:53 -07:00
Harmen Stoppels
ce039e4fa5 environment.py: reduce # of locks further (#31643)
* environment.py: reduce # of locks further
2022-07-26 09:00:27 -07:00
Harmen Stoppels
e2056377d0 containerize: fix concretization -> concretizer (#31594)
* containerize: fix concretization -> concretizer

* fix test
2022-07-26 08:56:24 -07:00
Harmen Stoppels
a552c27f74 cmake: missing patch releases (#31676) 2022-07-26 08:54:23 -07:00
Chuck Atkins
f38a2ebb25 llvm: Variant and dependency cleanup (#31331)
* llvm: Use variant when clauses for many of the expressed conflicts

* llvm: Remove the shared variant as it wasn't really used

* llvm: Remove unnecessary deps and make explicit the ones that are

* llvm: Cleanup patch conditions

* pocl: Update for llvm cleanup

* unit-test: update unparse package hash with the updated llvm package

* llvm: Fix ppc long double patching and add clarifying comments
2022-07-26 10:45:20 -05:00
Stephen Sachs
6a240c9b39 Fix self.extension for symlinks (#31743)
`self.archive_file` is (among others) a symlink to a tarball. `extension()` on a
symlink will result in no extension. This patch fixes the behavior introduced in
https://github.com/spack/spack/pull/31618.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-26 13:05:41 +00:00
eugeneswalker
0662bbdc43 openblas %oneapi: patch f_check for proper linkage (#31737) 2022-07-25 15:38:11 -07:00
Richard Berger
7be0dac36b new package: singularity-eos (#31500) 2022-07-25 23:41:24 +02:00
snehring
885a7a1979 gdal: fixing typo for libxml2 (#31734) 2022-07-25 14:05:45 -06:00
psakievich
8cde20997d GCC: Add bootstrap conflict for M1 (#31189) 2022-07-25 15:12:54 -04:00
Paul Ferrell
babb0edf07 LLVM requires swig version > 3 (#31625) 2022-07-25 15:50:22 +02:00
haralmha
bf838fe15f llvm: Add missing include for version range 8 to 11 (#31639) 2022-07-25 11:39:12 +02:00
Harmen Stoppels
b56871dd9c Fix stage with uri params (#31618)
* don't determine extension of a url

* parse url to drop query params from filename
2022-07-25 10:31:13 +02:00
snehring
fe0643a14e wget: replacing prior workaround with proper fix (#31699)
Co-authored-by: Harmen Stoppels <harmenstoppels@gmail.com>
2022-07-25 10:29:28 +02:00
Adam J. Stewart
cd4d657c2f py-torchdata: add new package (#31704)
* py-torchdata: add new package

* third_party deps only in 0.4+
2022-07-25 10:22:53 +02:00
Adam J. Stewart
afbb4dbc88 py-torchmetrics: add v0.9.3 (#31707) 2022-07-25 10:22:25 +02:00
Adam J. Stewart
24869fd469 py-geopandas: add v0.11.1 (#31710) 2022-07-25 10:22:15 +02:00
Adam J. Stewart
d46e81798a py-sphinx: add v5.1.0 (#31711) 2022-07-25 10:21:52 +02:00
Adam J. Stewart
5850afc9dc Sphinx 5.1.0 breaks doc builds (#31709) 2022-07-24 21:45:01 +00:00
Ishaan Desai
241c7f7914 [py-pyprecice] add v2.4.0.0 (#31697)
* Add py-pyprecice v2.4.0.0

* Adding lower bound to pip dependency

* Removing when=@:2.1 from dependencies packaging and pip
2022-07-24 15:31:51 -05:00
Morten Kristensen
85b3c1d812 py-vermin: add latest version 1.4.1 (#31708) 2022-07-24 16:21:40 +02:00
Harmen Stoppels
215a99cbc3 clingo patch fixed in patch release (#31690) 2022-07-22 10:34:04 -07:00
Harmen Stoppels
517293efe0 llvm: fix patch already applied on main branch (#31694) 2022-07-22 09:46:03 -07:00
Harmen Stoppels
5cf7d8e9ef coreutils: gnulib patch (#31693)
Co-authored-by: snehring <snehring@iastate.edu>
2022-07-22 15:36:14 +02:00
Harmen Stoppels
fce861d2ac Mark external as explicit only when installing explicitly (#31665) 2022-07-22 15:20:17 +02:00
Hector Martinez-Seara
cfdfdf77e0 gromacs: Added version 2021.6 (#31692) 2022-07-22 15:18:59 +02:00
Harmen Stoppels
799553d302 autotools: add -I flag when non-standard libtool (#31677)
When
1. Spack installs libtool,
2. system libtool is installed too, and
3. system automake is used

Spack passes system automake's `-I <prefix>` flag to itself, even though
it's a default search path. This takes precedence over spack's libtool
prefix dir. This causes the wrong `libtool.m4` file to be used (since
system libtool is in the same prefix as system automake).

And that leads to error messages about incompatible libtool, something
something LT_INIT.
2022-07-22 15:11:38 +02:00
Massimiliano Culpo
5cf7bf3770 Use pkg_cls in spack.mirror.get_all_versions (#31636)
fixes #31627

spack.mirror.get_all_versions now uses the package class
instead of the package object in its implementation.

Ensure spec is concrete before staging for mirrors
2022-07-22 10:04:17 +02:00
Erik Schnetter
2b0b573827 mpitrampoline: New version 4.2.0 (#31683) 2022-07-22 09:22:24 +02:00
Nicholas Sly
0e6b57e953 py-torch: use immutable URLs for open-ce patches (#31672)
* Update open-ce patches for py-torch to us immutable URLs.  Update magma dependency specs to be more explicit.

* Address comments for PR regarding URLs and conflicting variants.

Co-authored-by: Nicholas Cameron Sly <sly1@llnl.gov>
2022-07-21 18:02:34 -06:00
Stephen Sachs
ee39fab226 [py-numpy] Newer versions do not build with icc (#31637)
* [py-numpy] Newer versions do not build with `icc`

Workaround until https://github.com/numpy/numpy/issues/22011 is solved.

* [py-numpy] Remove whitespaces
2022-07-21 12:33:41 -06:00
AMD Toolchain Support
5ffc095f63 Add version 3.2 of AMD libraries (#31538) 2022-07-21 13:32:28 +02:00
Adam J. Stewart
f85c4ec288 py-torch: ~caffe2 by default (#31656) 2022-07-21 09:43:02 +02:00
Adam J. Stewart
1af76946a4 py-torchvision: fix __version__ for stable releases (#31657) 2022-07-21 09:36:11 +02:00
Adam J. Stewart
609bc89fd9 py-gpytorch: add v1.8.0 (#31649) 2022-07-21 09:35:22 +02:00
Adam J. Stewart
de5a12c366 py-nbmake: add v1.3.3 (#31651) 2022-07-21 09:34:59 +02:00
Richard Berger
7d9c517c88 flecsi: correct version 2.x depends_on (#31658)
Propagate +shared to legion
2022-07-21 09:34:36 +02:00
Hadrien G
aa68f23177 root does not actually install libraries in /lib but in /lib/root (#31624) 2022-07-21 01:33:52 -06:00
Johannes Blaschke
15d50d81db ncdu: add v1.16 and v1.17 (#31659) 2022-07-21 09:24:25 +02:00
shanedsnyder
56f5492fc0 darshan: add v3.4.0 to runtime/util packages (#31666) 2022-07-21 09:16:41 +02:00
snehring
d8983497f7 giflib: restrict patch to darwin (#31670) 2022-07-21 08:52:50 +02:00
psakievich
22798d7540 Don't restage develop specs when a patch fails (#31593)
* make develop specs not restage when a patch fails
* add a unit test
2022-07-20 13:55:16 -07:00
Harmen Stoppels
bf8c2b05b3 py-wheel: 0.37.1 (#31619) 2022-07-20 09:05:39 -06:00
haralmha
cf3774aa46 xgboost: Add version 1.6.1 and make openmp variant compatible with clang (#31557) 2022-07-20 07:45:01 -07:00
Harmen Stoppels
e7be8dbbcf spack stage: add missing --fresh and --reuse (#31626) 2022-07-20 13:50:56 +02:00
Harmen Stoppels
e3aca44601 installer.py: require "explicit: True" in the install arguments to mark a package "explicit" (#31646) 2022-07-20 12:09:45 +02:00
Harmen Stoppels
43673fee80 py-pip: 22.x (#31621) 2022-07-18 19:13:42 -06:00
Servesh Muralidharan
918637b943 Update py-xdot to use python_purelib #31616 (#31628)
Issue discussed in https://github.com/spack/spack/issues/31616
2022-07-18 12:56:19 -07:00
Cory Bloor
5c59e9746a rocblas: tighten tensile dependencies (#31414)
* rocblas: make tensile dependencies conditional

* Remove rocm-smi from the rocblas dependency list

rocm-smi was added to the rocblas dependency list because Tensile was a
dependency of rocBLAS and rocm-smi was a dependency of Tensile. However,
that reasoning was not correct.

Tensile is composed of three components:

  1. A command-line tool for generating kernels, benchmarking them, and
     saving the parameters used for generating the best kernels
     (a.k.a. "Solutions") in YAML files.
  2. A build system component that reads YAML solution files, generates
     kernel source files, and invokes the compiler to compile then into
     code object files (*.co, *.hsco). An index of the kernels and their
     associated parameters is also generated and stored in either YAML
     or MessagePack format (TensileLibrary.yaml or TensileLibrary.dat).
  3. A runtime library that will load the TensileLibrary and code object
     files when asked to execute a GEMM and choose the ideal kernel for
     your specific input parameters.

rocBLAS developers use (1) during rocBLAS development. This is when
Tensile depends on rocm-smi. The GPU clock speed and temperature must be
controlled to ensure consistency when doing the solution benchmarking.
That control is provided by rocm-smi. When building rocBLAS, Tensile is
used for (2). However, there is no need for control of the GPU at that
point and rocm-smi is not a dependency. At runtime, the rocBLAS library
uses Tensile for (3), but there is again no dependency on rocm-smi.

tl;dr: rocm-smi is a dependency of the tensile benchmarking tool,
which is not a build dependency or runtime dependency of rocblas.
2022-07-18 12:21:40 -07:00
eugeneswalker
b065d69136 e4s ci: add ginkgo +rocm (#31603) 2022-07-18 14:19:31 +02:00
Luke Diorio-Toth
710ec58df0 kraken2: add v2.1.2 (#31613) 2022-07-18 02:45:48 -06:00
Massimiliano Culpo
70be612f43 containerize: fix missing environment activation (#31596) 2022-07-18 10:31:16 +02:00
haralmha
c589f97cf0 lhapdf: add gettext libs explicitly (#31555)
Co-authored-by: Valentin Volkl <valentin.volkl@cern.ch>
2022-07-18 10:25:08 +02:00
Adam J. Stewart
ad4f551c22 py-pyarrow: aarch64 patch no longer applies/required (#31609) 2022-07-18 09:44:58 +02:00
Adam J. Stewart
37134aa331 py-kornia: add v0.6.6 (#31611) 2022-07-18 09:43:41 +02:00
Glenn Johnson
bb1632c99d Fixes for kallisto package (#31617)
This PR contains several fixes for the kallisto package.

- create hdf5 variant as hdf5 is optional beginning with 0.46.2
- provide patch for 0.43 to link against libz
- provide patch for older versions to build again gcc-11 and up
- patch and code to use autoconf-2.70 and up
2022-07-18 09:37:21 +02:00
Jonathon Anderson
117c7cc3db Only hack botocore when needed (#31610)
Newer versions of botocore (>=1.23.47) support the full IOBase
interface, so the hacks added to supplement the missing attributes are
no longer needed. Conditionally disable the hacks if they appear to be
unnecessary based on the class hierarchy found at runtime.
2022-07-18 08:40:13 +02:00
Luke Diorio-Toth
7b95e2f050 py-phydms, py-pypdf2, and py-pyvolve: new packages (#31540)
* py-panaroo: new package

* moving panaroo to branch

* py-phydms: new package

* added dependencies and new packages

* fixed py-pypdf2 dependencies
2022-07-16 17:24:29 -07:00
Luke Diorio-Toth
03c1962252 mizani, plotnine, and pystan: added more versions and variable dependencies (#31541)
* py-panaroo: new package

* moving panaroo to branch

* updated mizani, plotnine, and pystan versions and requirements

* made suggested fixes

* adding more requested fixes

* added new versions of statsmodels and httpstan
2022-07-16 17:23:29 -07:00
FJ-NaokiMatsumura
268ec998c0 py-horovod: add versions 0.22+, fix aarch64 build (#29310)
* py-torch: add version 0.23.0 and fix to built on aarch64

* Add newer versions, fix build issues

* Fix tests

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-07-16 01:41:42 -06:00
Adam J. Stewart
caee7341dd Qhull: fix RPATH on macOS (#31586) 2022-07-15 16:14:19 -07:00
Adam J. Stewart
ac15ebec76 py-geocube: add v0.3.2 (#31588) 2022-07-15 16:03:11 -07:00
Lucas Frérot
914ce8508a tamaas: new version 2.5.0 (#31501)
* tamaas: new version 2.5.0

* tamaas: do not build/install documentation

* tamaas: hash correction for v2.5.0.post1

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-07-15 10:49:11 -07:00
haralmha
17b6bb9d06 gperftools: Add version 2.10 and add unwind to LDFLAGS (#31574)
* gperftools: Add version 2.10 and add unwind to LDFLAGS

* Make unwind flag conditional on libunwind variant
2022-07-15 10:34:47 -07:00
Harmen Stoppels
6f8d7390f1 Use lexists instead of exists during fetch (#31509) 2022-07-15 18:43:14 +02:00
牟展佑
123c405e11 openssl: add patch for @1.1.1q. fixed issues #31545 (#31575) 2022-07-14 20:29:45 -06:00
Elizabeth Sherrock
6f46345b60 blight, fparser, typing_extensions (#31566)
* Added fparser 0.0.16

* Created package

* Change from GitHub download to pypi

* py-typing-extensions: 4.3.0

* Added py-pdoc3

* Finished adding py-blight

* Fixed typos

* Fixed dependency specs

* Fixed some things after PR review

* Added @woodruffw as blight maintainer

* Removed maintainer comment block from pdoc3
2022-07-14 17:13:47 -06:00
Erik Schnetter
49ae847c6c snappy: Update to version 1.1.9 (#31578) 2022-07-14 16:53:46 -06:00
eugeneswalker
3cb6fd140c update e4s to reflect june status (#31032) 2022-07-14 22:05:57 +00:00
Joseph Snyder
64b41b012c Bug/fix credentials s3 buildcache update (#31391)
* Add connection information to buildcache update command

Ensure that the s3 connection made when attempting to update the content
of a buildcache attempts to use the extra connection information
from the mirror creation.

* Add unique help for endpoint URL argument

Fix copy/paste error for endpoint URL help which was the same as
the access token

* Re-work URL checking for S3 mirrors

Due to the fact that nested bucket URLs would never match the string used
for checking that the mirror is the same, switch the check used.

Sort all mirror URLs by length to have the most specific cases first
and see if the desired URL "starts with" the mirror URL.

* Long line style fixes

Add execptions for long lines and fix other style errors

* Use format() function to rebuild URL

Use the format command to rebuild the url instead of crafing a
formatted string out of known values

* Add early exit for URL checking

When a valid mirror is found, break from the loop
2022-07-14 20:49:46 +00:00
Todd Gamblin
3d0347ddd3 Deprecate blacklist/whitelist in favor of include/exclude (#31569)
For a long time the module configuration has had a few settings that use
`blacklist`/`whitelist` terminology. We've been asked by some of our users to replace
this with more inclusive language. In addition to being non-inclusive, `blacklist` and
`whitelist` are inconsistent with the rest of Spack, which uses `include` and `exclude`
for the same concepts.

- [x] Deprecate `blacklist`, `whitelist`, `blacklist_implicits` and `environment_blacklist`
      in favor of `exclude`, `include`, `exclude_implicits` and `exclude_env_vars` in module
      configuration, to be removed in Spack v0.20.
- [x] Print deprecation warnings if any of the deprecated names are in module config.
- [x] Update tests to test old and new names.
- [x] Update docs.
- [x] Update `spack config update` to fix this automatically, and include a note in the error
      that you can use this command.
2022-07-14 20:42:33 +00:00
Jen Herting
875b032151 [py-tensorflow-hub] full_index=1 caused checksum change (#31585) 2022-07-14 11:47:30 -07:00
snehring
c7e49ea5a0 interproscan: new version 5.56-89.0 (#31565)
* interproscan: new version 5.56-89.0

* interproscan: add maintainer
2022-07-14 09:53:12 -07:00
Adam J. Stewart
a1f07b68a8 py-statsmodels: add v0.13.2 (#31571) 2022-07-14 09:30:43 -07:00
Axel Huebl
c4efeab976 ADIOS2: 2.8.2 (#31564)
Add the latest ADIOS2 release.
2022-07-14 03:17:38 -06:00
Peter Scheibel
7741bfb7d1 Decompression: use tar exe vs. built-in Python tarfile support (#31563)
Python's built-in tarfile support doesn't address some general
cases of malformed tarfiles that are already handled by the system
'tar' utility; until these can be addressed, use that exclusively.
2022-07-13 14:12:21 -07:00
Stephen Sachs
d25315c2f6 Add package py-devito and it's dependencies (#31495)
* [py-devito] Add package

Also add dependencies:
- py-nbval
- py-cgen
- py-codepy
- py-contexttimer
- py-pyrevolve

* [py-devito] Fix some typos

* [py-devito] Fix: include examples directory

Upstream issue: https://github.com/devitocodes/devito/issues/1954

* [py-devito] clean up

* [py-devito] clean up dependency packages

* [py-devito] flake8: line too long

* Address @adamjstewart comments

* Make flake8 happy

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-13 13:12:28 -07:00
Jonathon Anderson
8e00aa7c79 m4: Add build dependency on diffutils (#31232) 2022-07-13 22:02:17 +02:00
Adam J. Stewart
752697add2 GDAL: CMake support and dependency variants (#31197)
Add support for CMake builds while preserving autotools support
for older versions of GDAL

* Add GDAL 3.5.0
* Remove GDAL 1
* Add support for new CMake build system
* Change defaults to build all recommended dependencies
* Simplify Autotools flag handling
* Determine version range for drivers
2022-07-13 11:58:39 -07:00
Ben Darwin
f7ed9092e5 ants: add version 2.4.0 (#31562) 2022-07-13 17:35:04 +00:00
Emil Briggs
5da8bae2a9 Add versions 4.3.0 and 4.3.1. Update boost reqs with component/versions. (#31559) 2022-07-13 10:08:29 -07:00
Erik Schnetter
a78e8bc54e mpitrampoline: New version 4.1.2 (#31560) 2022-07-13 10:06:04 -07:00
Chris White
cdf541ac4a Cppcheck: fix install and convert to cmake build system (#31488)
* fix cppcheck install and convert to cmake build system

* add white238 as a maintainer
2022-07-13 07:32:48 -07:00
Rémi Lacroix
0e783b2c47 ghostscript-fonts: fix URL (#31360) 2022-07-13 10:11:22 +02:00
H. Joe Lee
9c5ef2aafe Hermes: add v0.7.0-beta, remove older versions (#31544) 2022-07-13 09:25:45 +02:00
Vicente Bolea
1f7ee4957b vtk-m: add v1.8.0 (#31220) 2022-07-13 09:21:56 +02:00
Elizabeth Sherrock
6fbb01fe31 py-ford: add v6.1.13 (#31483) 2022-07-13 09:19:23 +02:00
Adam J. Stewart
a36c05068f Open3D: fix build with external fmt (#31547) 2022-07-13 09:17:07 +02:00
Adam J. Stewart
16e079aa52 py-pytorch-lightning: add v1.6.5 (#31548) 2022-07-13 09:07:52 +02:00
Marco De La Pierre
79f67ba92b Tower Agent / Tower CLI: new packages (#31539) 2022-07-13 09:05:03 +02:00
Massimiliano Culpo
7f2b5e8e57 spack.repo.get() can only be called on concrete specs (#31411)
The goal of this PR is to make clearer where we need a package object in Spack as opposed to a package class.

We currently instantiate a lot of package objects when we could make do with a class.  We should use the class
when we only need metadata, and we should only instantiate and us an instance of `PackageBase` at build time.

Modifications:
- [x] Remove the `spack.repo.get` convenience function (which was used in many places, and not really needed)
- [x] Use `spack.repo.path.get_pkg_class` wherever possible
- [x] Try to route most of the need for `spack.repo.path.get` through `Spec.package`
- [x] Introduce a non-data descriptor, that can be used as a decorator, to have "class level properties"
- [x] Refactor unit tests that had to be modified to reduce code duplication
- [x] `Spec.package` and `Repo.get` now require a concrete spec as input
- [x] Remove `RepoPath.all_packages` and `Repo.all_packages`
2022-07-12 19:45:24 -04:00
Seth R. Johnson
6ceb274de0 trilinos: add new release 13.4.0 and use sha256 instead of commit hashes (#31277) 2022-07-12 14:57:39 -06:00
Richard Berger
8e25fd4f16 spiner: update dependencies (#31486) 2022-07-12 11:16:34 -07:00
Adam J. Stewart
3fc8c3d18b py-nbmake: add v1.3.0; py-nbclient: add v0.6.6, 0.5.13; py-traitlets: add v5.3.0 (#31513)
* py-nbmake: add v1.3.0

* Add newer versions
2022-07-12 11:03:40 -07:00
Carlos Bederián
bfe058aa57 amdblis: add 3.2 (#31518) 2022-07-12 10:40:54 -07:00
Carlos Bederián
45b77a2215 amdlibflame: add 3.2 (#31519) 2022-07-12 10:37:26 -07:00
Carlos Bederián
7dd22e93c6 amdfftw: add 3.2 (#31520) 2022-07-12 10:24:59 -07:00
nicolas le goff
cdb7c7a1db fixed the cgal recipe and added the latest release. (#31523)
* fixed the cgal recipe and added the latest release.

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

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

* updated cgal recipe to new URL for tarballs

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-07-12 09:04:51 -07:00
Harmen Stoppels
ea91e8f4ca file_cache.py: idempotent remove without races (#31477)
There's a race condition in `remove()` as the lockfile is removed after
releasing the lock, which is a problem when another process acquires a
write lock during deletion.

Also simplify life a bit in multiprocessing when a file is possibly
removed multiple times, which currently is an error on the second
deletion, so the proposed fix is to make remove(...) idempotent and not
error when deleting non-existing cache entries.

Don't tests for existence of lockfile, cause windows/linux behavior is different
2022-07-12 15:03:48 +00:00
Harmen Stoppels
74e2625dcf compression.py: buffered copy (#31533) 2022-07-12 16:49:59 +02:00
RichardABunt
a4f0522468 arm-forge: add 22.0.2 and 22.0.3. (#31432) 2022-07-12 16:21:07 +02:00
Marco De La Pierre
ff67e10f60 lammps package: added fftw_precision variant (#31459) 2022-07-12 16:14:58 +02:00
Axel Huebl
c8931e390a WarpX: 22.07 (#31508)
Update `warpx` & `py-warpx` to the latest release, `22.07`.
2022-07-12 16:13:51 +02:00
Harmen Stoppels
b2c519470b environment.py: only acquire write lock when necessary (#31493) 2022-07-12 16:12:43 +02:00
marcosmazz
9087224e04 OpenMX: add v3.9 (#31466)
Co-authored-by: Marcos Mazzini - <mmazzini@serafin.ccad.unc.edu.ar>
2022-07-12 15:44:02 +02:00
Stephen Sachs
110a35a520 py-gevent: deprecated compiler flags (#31469)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-12 15:23:26 +02:00
miheer vaidya
ea9151b2a5 abseil: add v20220623 (#31507) 2022-07-12 15:21:31 +02:00
Nicholas Brunhart-Lupo
9708afc3b3 amr-wind: add "ascent" variant (#31376) 2022-07-12 14:38:24 +02:00
Harmen Stoppels
d904a789d5 env depfile: add missing touch (#31494)
Oversight in #31433, the non-phony `env` target was missing a file being
created for it, which can cause make to infinitely loop when including
multiple generated makefiles.
2022-07-12 14:16:31 +02:00
Erik Schnetter
7917f87c63 cuda: New version 11.5.2 (#31463) 2022-07-12 13:52:12 +02:00
dependabot[bot]
e33a57ab65 build(deps): bump actions/setup-python from 4.0.0 to 4.1.0 (#31526)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](d09bd5e600...c4e89fac7e)

---
updated-dependencies:
- dependency-name: actions/setup-python
  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>
2022-07-12 13:50:30 +02:00
Mark W. Krentel
7f830295ae hpcviewer: add v2022.06 (#31532) 2022-07-12 13:41:13 +02:00
Massimiliano Culpo
89b8d33d05 Remove os.getcwd from function signature (#31480)
fixes #29730

This is also wrong since it binds the directory at the time
of module import, rather than the one at the time of function
call.
2022-07-12 10:08:37 +02:00
Jonathon Anderson
25f198aa91 Sanitize ownership when extracting tarfiles (#31524) 2022-07-12 09:28:24 +02:00
Adam J. Stewart
5bd1074afb py-hatchling: add new packages, document new build backend (#31512)
* py-hatchling: add new package, document new build backend

* Minor doc changes

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-07-11 16:23:28 -07:00
Michael Kuhn
18b51e19df glib: add 2.72.3 (#31516) 2022-07-11 17:09:43 -06:00
renjithravindrankannath
21822f233c Fix for sanity check failure in spack upstream code: atmi, hip-rocclr (#31454)
* Fix for sanity check failure in spack upstream code

* Style check failure correction

* Correction as per the review comments
2022-07-11 15:01:47 -07:00
Keita Iwabuchi
5f7f8ce1eb Metall package: add v0.21 (#31482)
* Metall package: add dependency to GCC for build test

* Package Metall: add v.017

* Package Metall: update the package file

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

Co-authored-by: Bernhard Kaindl <43588962+bernhardkaindl@users.noreply.github.com>

* Metall package: add v0.18 and v0.19

* Metall Package: add v0.20

* Metall package: add v0.21

Co-authored-by: Bernhard Kaindl <43588962+bernhardkaindl@users.noreply.github.com>
2022-07-11 14:54:57 -07:00
Richard Berger
ac09607a5a ports-of-call: new version 1.2.0, simplify (#31485) 2022-07-11 14:53:36 -07:00
miheer vaidya
e0bbf26f1f [cppcodec] new package (#31506) 2022-07-11 14:11:24 -07:00
Adam J. Stewart
1d827a9ff6 py-mypy: add v0.961 (#31503) 2022-07-11 12:34:09 -07:00
Adam J. Stewart
ba0cff1831 py-gpytorch: add v1.7.0 (#31504) 2022-07-11 12:30:58 -07:00
Adam J. Stewart
12699787e7 py-numpy: add v1.23.1 (#31510)
* py-numpy: add v1.23.1

* Remove packaging dep
2022-07-11 10:47:20 -07:00
Adam J. Stewart
c020894f36 py-torchgeo: add v0.3.0 (#31514) 2022-07-11 10:10:30 -07:00
Carlos Bederián
05a32b5cf5 ucx: add 1.13.0 (#31517) 2022-07-11 10:06:33 -07:00
Michael Kuhn
359d094528 julia: fix patch (#31515) 2022-07-11 16:13:47 +02:00
Harmen Stoppels
92dfe7f25b man-db: Don't use DESTDIR (#31492) 2022-07-10 21:41:55 +02:00
Erik Schnetter
2159ce036e openssl: New version 1.1.1q (#31487) 2022-07-08 13:25:43 -06:00
Adam J. Stewart
7e6dbfb185 py-setuptools: add v63.0.0 (#31444) 2022-07-08 10:41:15 -07:00
Harmen Stoppels
4043b13d59 vim: deprecate 9.0.0000, add 9.0.0045 (#31490) 2022-07-08 10:16:50 +00:00
Luke Diorio-Toth
ec7513c8b5 py-panaroo, py-edlib, and py-intbitset: new packages (#31452) 2022-07-07 18:13:39 -06:00
Erin Newcomer
44b48cfe46 Package/py phylophlan (#31422)
* py-phylophlan: new package

* py-phyloseq: new package

* py-phylophlan: style fix

* py-phylophlan: fixed dependencies

* py-phylophlan: style fix
2022-07-07 14:06:55 -07:00
Tamara Dahlgren
a12ce9fd59 OpenBabel: Make building with GUI an option (#31456) 2022-07-07 09:43:17 -07:00
Cory Bloor
bb92ea59a2 Fix spack edit message when no editor installed (#31412)
When no default editor is installed and no environment variable is set,
which_string would return None and this would be passed to os.execv
resulting in a TypeError. The message presented to the user would be:

    Error: execv: path should be string, bytes or os.PathLike,
    not NoneType

This change checks that which_string has returned successfully before
attempting to execute the result, resulting in a new error message:

    Error: No text editor found! Please set the VISUAL and/or EDITOR
    environment variable(s) to your preferred text editor.

It's not strictly necessary, but I've also changed try_exec to catch
all errors rather than just OSErrors. This would have provided slightly
more context for the original error message.
2022-07-07 17:08:15 +02:00
Stephen Sachs
626b239c96 [py-distributed] Add version 2022.2.1 (#31465) 2022-07-07 08:06:18 -07:00
Adam J. Stewart
211030cd19 py-pytorch-lightning: remove upper bounds on deps (#31443) 2022-07-07 17:05:33 +02:00
Stephen Sachs
3787f0c64c mpas-model: Overwrite compiler args in Makefile (#31431)
Use 8 byte reals only when `precision=double` is set

The pre-defined compilation targets do not follow the usual behavior of
Makefiles. Compiler flags are set as strings (not Makefile variables) and as
such are not able to be overridden by environment variables. This patch changes
the behavior to the expected behavior of a Makefile such that `fflags` etc have
the desired effect.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-07 17:04:51 +02:00
Ryan Marcellino
be65e4471e speexdsp: add pkgconfig dependency (#31455) 2022-07-07 16:53:11 +02:00
Adam J. Stewart
8745009492 py-tensorboard: install from wheel (#31445) 2022-07-07 16:48:06 +02:00
Adam J. Stewart
7c5116a73a py-rasterio: add v1.3.0 (#31457) 2022-07-07 16:46:52 +02:00
Stephen Sachs
e6bdbde54e libzmq: fix issue with newer GCC and master branch (#31468)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-07 08:45:37 -06:00
Adam J. Stewart
386f08c1b4 py-torch: re-add headers/libs properties (#31446) 2022-07-07 16:31:09 +02:00
Adam J. Stewart
9c437e2a10 py-torchgeo: tiff support required (#31447) 2022-07-07 16:30:18 +02:00
Marie Houillon
d393260a11 Fix conditional dependencies for openCARP (#31478) 2022-07-07 08:21:41 -06:00
Tamara Dahlgren
1b919d306f Documentation: Add SourceforgePackage to the build systems docs (#31473) 2022-07-07 14:30:22 +02:00
Stephen Sachs
ad95b0d01d [py-ipyparallel] setuptools.config.StaticModule moved (#31467)
* [py-ipyparallel] setuptools.config.StaticModule moved

... in py-setuptools@61

* [py-ipyparallel] setuptools fix only added to release 8.2.1

https://github.com/ipython/ipyparallel/pull/680

* [py-ipyparallel] Fix typo

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-07-07 03:17:36 -06:00
Vanessasaurus
6b1e86aecc removing feature bloat: monitor and analyzers (#31130)
Signed-off-by: vsoch <vsoch@users.noreply.github.com>

Co-authored-by: vsoch <vsoch@users.noreply.github.com>
2022-07-07 00:49:40 -06:00
Stephen Hudson
3338d536f6 libEnsemble: add v0.9.2 (#31471) 2022-07-06 19:14:12 -07:00
Erik Schnetter
6cbcc94fc9 kokkos: New version 3.6.01 (#31462) 2022-07-06 14:33:48 -06:00
Erik Schnetter
c7ac0b9aa6 spiner: New version 1.5.1 (#31461) 2022-07-06 14:21:53 -06:00
Adam J. Stewart
5efe0822b8 pip bootstrap packages: add myself as maintainer (#31448) 2022-07-06 14:05:42 -06:00
Kenny Weiss
5d97c816ca Minor typo fix in mfem's package (#31470)
Pointed out by @agcapps
2022-07-06 12:52:23 -07:00
Tamara Dahlgren
e68ed3268b Testing Bugfix: refactor clean --python-cache to support all (#31449)
There were two choices: 1) remove '-p' from '-a' or 2) allow monkeypatching
the cleaning of the python cache since clean's test_function_calls isn't
supposed to be actually cleaning anything.

This commit supports the latter and adds a test case for `-p`.
2022-07-06 11:44:41 -07:00
Weiqun Zhang
9a711e6ffa amrex: add v22.07 (#31464) 2022-07-06 11:13:44 -06:00
iarspider
fcea26ca23 Add checksum for py-lazy-object-proxy 1.7.0 and 1.7.1 (#31435)
* Add checksum for py-lazy-object-proxy 1.7.0 and 1.7.1

* Update package.py
2022-07-06 10:06:37 -07:00
iarspider
687cac3a79 Add checksum for py-pylint 2.14.4; py-astroid 2.11.5, 2.11.6 (#31436)
* Add checksums for astroid 2.11.5 and 2.11.6

* Add checksum for py-pylint 2.14.4

* Update package.py

* Add checksum for py-tomlkit 0.11.0
2022-07-06 09:58:35 -07:00
otsukay
d9f49d7415 add recipe for improved-rdock (#31158)
* add recipe for improved-rdock

* style: fix format

* style: fix format again

* Fix location of the directory

* Fix copyright

* Fix according to the reviewer's comments.

* Revert "Fix according to the reviewer's comments."

This reverts commit 4877877daf.

* Fix according to the reviewer's comments.

* style: fix format

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Yuichi Otsuka <otsukay@riken.jp>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-07-06 09:25:45 -07:00
Erik Schnetter
ccb5432177 readline: New version 8.1.2 (#31025) 2022-07-06 16:32:12 +02:00
Mikael Simberg
dfb0c6c51d Add pika 0.6.0 (#31458) 2022-07-06 11:55:58 +02:00
Adam J. Stewart
8d1c723576 Bazel: new versions, patches, conflicts, and java version contraints (#31402) 2022-07-05 23:28:50 -05:00
Adam J. Stewart
8037c91403 py-libclang: add v13.0.0 (#31441) 2022-07-05 17:50:07 -07:00
Adam J. Stewart
30e5828f06 llvm-openmp: add v14.0.6 (#31440) 2022-07-05 17:11:00 -07:00
Mark W. Krentel
12fb842bea hpctoolkit: add variants for gtpin and opencl (#31439)
Reorder a few options to better group them by function.
2022-07-05 12:22:00 -07:00
Matthew LeGendre
37c9974755 Add adiak version 0.2.2 (#31438) 2022-07-05 13:05:51 -06:00
Luke Diorio-Toth
86a127788d Package/ont-guppy (#31417)
* guppy: new package

* adding different hashs/urls

* working now

* guppy: new package

* ont-guppy: new package

* ont-guppy: new package

* ont-guppy: fixed style
2022-07-05 10:46:58 -07:00
Annop Wongwathanarat
613362c42d armpl: Add new versions and rename package to armpl-gcc (#31437)
Co-authored-by: Annop Wongwathanarat <annop.wongwathanarat@arm.com>
2022-07-05 10:22:12 -07:00
Richard Berger
b7fb5dbb28 flecsi: exclude caliper versions that cause aborts with Legion (#31410) 2022-07-05 09:29:47 -06:00
Harmen Stoppels
dac31ef3c4 Remove fetch from depfile (#31433) 2022-07-05 14:48:32 +02:00
Alberto Invernizzi
bb3a663392 ROCmPackage: unify amdgpu_targets (#30582)
* unify amdgpu_targets for rocsolver and rocblas

* add more archs

* adapt all roc packages to unified amdgpu_targets
2022-07-05 14:33:30 +02:00
Valentin Volkl
d05ab36ff9 bdsim: add new package (#31384)
Co-authored-by: gganis <gerardo.ganis@cern.ch>
2022-07-05 12:30:15 +02:00
Jean-Paul Pelteret
f6d701ca26 deal.II: add v9.4.0 (#31279) 2022-07-05 11:40:28 +02:00
Paul R. C. Kent
ffcd9282b5 libcint: add v5.1.3 (#31340) 2022-07-05 11:34:59 +02:00
haralmha
28c5c3285a root: set gnuinstall to True (#31209) 2022-07-05 11:27:49 +02:00
Adam J. Stewart
6dc708670c py-torchgeo: latest version of torchvision won't work (#31372) 2022-07-05 11:21:31 +02:00
Marco De La Pierre
d71bbf036f lammps: add versions and packages Feb-Jun 2022 (#31369) 2022-07-05 11:14:28 +02:00
Mikael Simberg
8cf7241b64 Build llvm-amdgpu's libcxx with cmake --build (#31403)
CMAKE_GENERATOR may be set to something other than "Unix Makefiles" in
which case the build would fail because there is no Makefile for make to
build.
2022-07-05 10:52:52 +02:00
Adam J. Stewart
f932a832ac node-js: fix build on macOS 12 (#31408) 2022-07-05 10:42:14 +02:00
Cory Bloor
a183b343b9 rocalution: add spack build test (#31415)
- rocprim is a header-only library; its amdgpu_target variant is only
  meaningful for its client executables, not the library itself
- comgr and llvm-amdgpu are merely indirect dependencies (via hip)
2022-07-05 10:02:46 +02:00
Paul R. C. Kent
08fa0c9d46 pyscf: add v2.0.1 (#31342) 2022-07-05 09:14:06 +02:00
Sergey Kosukhin
0b3a409746 nag: fix installation of man pages (#31428) 2022-07-05 09:10:45 +02:00
Marco Feder
18ab94de4b cgal: add v5.1.5 (#31429) 2022-07-05 09:10:03 +02:00
Moritz Kern
f217ca2059 py-elephant: add versions up to v0.11.1 (#30613)
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-07-05 08:59:34 +02:00
Barry Rountree
ac5fd8fa35 util-linux-uuid: Fix icc build issue (#31312) 2022-07-04 16:11:35 +02:00
Glenn Johnson
2eddf8a78d highfive: Add version 2.4.1 (#31288) 2022-07-03 14:06:41 -05:00
Adam J. Stewart
5b4927a3de py-pillow: add v9.2.0 (#31409) 2022-07-01 18:53:33 -06:00
Wouter Deconinck
d068b59856 acts: new version 19.3.0 (#31272)
* acts: new version 19.3.0

* acts: new variants +profilecpu, +profilemem
2022-07-01 13:06:55 -07:00
Adam J. Stewart
f2789fa5c5 py-cartopy: add v0.20.3 (#31354)
* py-cartopy: add v0.20.3

* Add py-setuptools-scm 7.0.3
2022-07-01 13:05:14 -07:00
Paul R. C. Kent
f5b0e264fc Add xcfun 2.1.0 (#31336)
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-07-01 13:00:53 -07:00
Paul R. C. Kent
1f696951e7 Add 5.2.3 (#31337) 2022-07-01 12:59:50 -07:00
Erik Schnetter
2508aa1ab4 ninja: New version 1.11.0 (#31400) 2022-07-01 13:57:46 -06:00
Jonathan R. Madsen
eed265f593 Initial implementation of Omnitrace package (#31381)
* Initial implementation of Omnitrace package

* Fix flake8 errors

* Fix run environment when +python

* String normalization and fix for build env when +tau

* Tweak to style
2022-07-01 12:53:33 -07:00
Simon Pintarelli
bc215c7504 qmcpack pass cuda_arch correctly to cmake (#31407)
Fix compilation of @3.14.0+cuda  (didn't check older versions).
2022-07-01 12:39:50 -07:00
Scott Wittenburg
87b8321fa9 gitlab: Fix pipeline generation for non-develop protected pipelines (#31378)
Release branches and tags run protected pipelines, and we noticed
that those pipelines were generating all jobs in the stack, even
when the mirror contained all the built specs and an up to date
index.  The problem was caused because the override mirror was
not present in spacks mirror configuration at the time when the
binary_distribution.update() method was called.  This fixes that
by always adding the mirror override, if present, to the list of
configured mirrors.
2022-07-01 11:56:36 -07:00
WuK
8b4de69f6a py-altair: new package (#31386)
* py-altair: new package

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

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

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

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

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

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

* py-altair: update

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-07-01 10:46:35 -07:00
Harmen Stoppels
3e85d3fd03 bat, hyperfine, ripgrep: Bump versions (#31364) 2022-07-01 08:49:57 +02:00
Brian Van Essen
06f4f43915 New package: NVIDIA cuTensor (#31397) 2022-06-30 22:37:47 -07:00
Richard Berger
4a6b447465 New package: bueno (#31374) 2022-06-30 22:32:30 -07:00
Max Zeyen
43654078fc boost: do not add the context-impl option for version below 1.65.0 (#30719)
* boost: do not access the context-impl variant for versions below 1.65.0

* boost: check if spec.variants contains context-impl

* boost: improve error message when the context-impl variant causes a conflict

Executing spack solve boost@1.63.0 +context context-impl=fcontext
triggers the following error message:
==> Error: No version for 'boost' satisfies '@1.63.0' and '@1.79.0'

With this change, the error message becomes the following:
==> Error: Cannot set variant 'context-impl' for package 'boost' because the variant condition cannot be satisfied for the given spec
2022-06-30 19:27:38 -07:00
Erik Schnetter
8cd542529a libcxxwrap-julia: New version 0.9.1 (#31392) 2022-06-30 17:01:42 -07:00
Scott Wittenburg
861edcf996 gitlab: Fix mirror url to match stack name (#31399)
We adopted the convention of putting binaries for each stack into
a dedicated mirror named after the directory in which the stack
(spack.yaml file) resides.  This fixes the mirror url of the
radiuss-aws-aarch64 stack to follow that convention.
2022-06-30 15:38:58 -07:00
Luke Diorio-Toth
60c533b80b py-cmseq: new package (#31375)
* py-cmseq: new package

* py-cmseq: fixed copyright year

* py-cmseq: changed download to pi, added deps
2022-06-30 10:58:12 -07:00
Mikael Simberg
60d94f2782 Add tracy 0.8.2 (#31385) 2022-06-30 10:55:00 -07:00
Stephen Sachs
8e591f058e [mpas-model] Add optional make_target and precision variants (#31388)
`make_target` can be used to instruct Spack to build one of the pre-defined make
targets in the MPAS makefile. Spack will guess the targret based on the value of
`spack_fc`, but the user can overwrite the target as variant. E.g.
```
spack install mpas-model make_target=pgi-nersc
```

`precision` is used to set the `PRECISION` flag in the Makefile to {single,
double}. Default is double.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-30 10:52:33 -07:00
Stephen Sachs
4397ec6a48 [mpas-model] Add new versions (#31390)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-30 10:50:32 -07:00
Jack Morrison
cbce77b3d9 SOS: Update to include version 1.5.1 (#31394) 2022-06-30 10:26:34 -07:00
Marco De La Pierre
03843db00f plumed: added fine grained control over optional modules (#29743) 2022-06-30 16:23:27 +02:00
Stephen Sachs
e046dc3ca4 lammps: compiler flags for Intel compiler on AMD zen+ procs (#31183)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-30 07:25:41 -06:00
Stephen Sachs
eec78f7702 lammps: fix sha256 of patch_20201029 (#31177)
Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-30 15:21:12 +02:00
Adam J. Stewart
abd6241978 py-torchmetrics: add v0.9.2 (#31382) 2022-06-30 09:05:20 +02:00
Adam J. Stewart
eb6564bc33 py-laspy: add v2.2.0 (#31383) 2022-06-30 09:05:04 +02:00
Peter Scheibel
abeee9e1fd Cray manifest: compiler duplicates (#31173)
* remove unhelpful comment
* Filter compiler duplicates while reading manifest
* more-specific version matching edited to use module-specific version (to avoid an issue where a user might add a compiler with the same version to the initial test configuration
2022-06-29 17:05:29 -07:00
WuK
ec89ab1c27 cutlass: new package (#31379)
* cutlass: new package

* cutlass: fix ci

* cutlass: remove `join_path`

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* cutlass: adding a message for cuda_arch

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* cutlass: simplify cmake_args

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* cutlass: fix cmake_args

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-29 16:39:39 -07:00
Glenn Horton-Smith
e6678e5f12 New packages: EPICS (Experimental Physics and Industrial Control System) (#28270) 2022-06-29 13:36:48 -07:00
Glenn Johnson
b200c57739 Set R_LIBS_USER='' in dependent build environment (#31287)
* Set R_LIBS_USER='' in dependent build environment

Despite R packages being installed with the --vanilla flag, which
ignores Rprofile and Renviron files, R will still set R_LIBS_USER if the
default directory exists. This could lead to pulling in packages from
that directory during the build which could cause the build to fail. To
avoid that, explicitly set R_LIB_USER='' to ensure that packages from
the HOME/R directory are not in the library path.

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

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

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-06-29 14:14:21 -06:00
Harmen Stoppels
814418db35 file: 5.41 5.42 (#31367) 2022-06-29 20:59:49 +02:00
Davide
53001cc28c Allow building octave w/ Intel compiler (#31346) 2022-06-29 11:55:39 -07:00
Adam J. Stewart
93c16f1ee3 PythonPackage: add default libs/headers attributes (#28527)
* PythonPackage: add default libs/headers attributes

* Style fix

* libs and headers should be properties

* Check both platlib and include

* Fix variable reference
2022-06-29 11:55:24 -07:00
Satish Balay
7bacde16e4 petsc, py-petsc4py: add 3.17.3 (#31356) 2022-06-29 11:51:45 -07:00
Harmen Stoppels
44d9931cdd git: 2.37.0 (#31370) 2022-06-29 20:06:01 +02:00
Nadir Román Guerrero
54b7df0bfa Adds py-websockets 10.3 (#31363) 2022-06-29 17:58:46 +00:00
Harmen Stoppels
ee680567a5 ccache: 4.6.x (#31371) 2022-06-29 10:43:42 -07:00
Sam Gillingham
6a1bbc1658 kealib: add version 1.4.15 (#31355) 2022-06-29 08:24:23 -07:00
Harmen Stoppels
6f3e61b179 vim: add v9.0.0000 (#31365) 2022-06-29 16:36:14 +02:00
Luke Diorio-Toth
a9c246ed67 amrfinder: new package (#31273) 2022-06-29 15:40:03 +02:00
Massimiliano Culpo
557abe04ec Update containerize templates to account for view indirection (#31321)
fixes #30965
2022-06-29 15:39:18 +02:00
Marco De La Pierre
58b144c0da Modify dockerfile template, so that any command can be executed (#29741) 2022-06-29 12:02:24 +00:00
Harmen Stoppels
768d3504dd tree: 2.0.2 (#31362) 2022-06-29 13:06:38 +02:00
Richard Berger
a98806bd9b new package: py-lark to replace py-lark-parser, add new versions (#31324)
* new package: py-lark to replace py-lark-parser

* update packages that need py-lark-parser and use py-lark instead
2022-06-28 22:45:30 -07:00
Wileam Y. Phan
ebf0f6281d Add version 2.0.2 (#31339) 2022-06-28 19:21:45 -07:00
Chris White
0de44a20f6 py-ats: Add new version (#31350)
* add new py-ats version

* fix copyright date
2022-06-29 01:22:09 +00:00
Chris White
62cac911e0 set CMAKE_CUDA_ARCHITECTURES for newer cmakes in camp (#31333) 2022-06-28 18:45:45 -06:00
Pranith
8bdc506579 emacs: Add option to install version 28.1 (#31348) 2022-06-28 17:30:16 -07:00
Adam J. Stewart
52eaedfca2 Add py-torch v1.12, py-torchvision v0.13 (#31335)
* Add py-torch v1.12, py-torchvision v0.13

* Style fix
2022-06-28 13:57:09 -07:00
Adam J. Stewart
5f5d6a84dc libxml2: add command property (#31296) 2022-06-28 13:29:48 -06:00
David Beckingsale
170c605d6a AWS RADIUSS builds (#31114)
* Add AWS RADIUSS builds

* Correct variable naming

* Add two more MFEM specs

* Updates to MFEM spec suggested by @v-dobrev

* Simplify MFEM specs
2022-06-28 12:15:53 -07:00
Marco De La Pierre
38dfec42b7 Update/lammps package: new variants for refactoring of code modules (#29788)
* lammps package: kokkos variant, add support for cray-fftw

* lammps package: added bugfix version 20210929.3

* lammps package: added packages molfile, plugin, user-brownian

* lammps package: package refactor at versions 20210702 and 20210728

* lammps package: fix for ml-iap variant

* lammps package: fix for conflicts of dielectric variant

* lammps package: edits for flake8 layout compliance
2022-06-28 11:22:35 -07:00
haralmha
24048e3be7 herwig3: Add version 7.2.3 and update dependency versions (thepeg and lhapdf) (#31329) 2022-06-28 10:43:16 -07:00
Michael Kuhn
f1d8b711ed gcc: add 10.4.0 (#31332) 2022-06-28 10:42:11 -07:00
genric
ee21873616 py-luigi: add v3.1.0; py-tenacity: add v8.0.1 (#31320) 2022-06-28 07:37:24 -07:00
Moritz Kern
ba6f4b3f8b Neo update (#31316) 2022-06-28 07:36:49 -07:00
Erik Schnetter
e5ceb68850 openssl: New version 1.1.1p (#31266) 2022-06-28 08:17:54 -06:00
Adam J. Stewart
505bcc5aba curl: add command property (#31293) 2022-06-28 08:01:42 -06:00
Harmen Stoppels
33fee003b8 julia: 1.8.0-rc1 (#31064) 2022-06-28 13:24:06 +02:00
Adam J. Stewart
1dfdaa1025 c-blosc: add libs property (#31290) 2022-06-28 03:49:44 -06:00
Jonathon Anderson
a8d0ef43fa krb5: Add build dependency on diffutils (#31258) 2022-06-28 11:40:05 +02:00
Valentin Volkl
f948ec07cc feynhiggs: add hep tag (#31325)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-06-28 11:05:29 +02:00
Mikael Simberg
2943d53115 mimalloc: rework package recipe, add variants (#31262) 2022-06-28 10:51:20 +02:00
Valentin Volkl
99bfd7059e ampt: add new package (#31307)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-06-28 08:46:33 +00:00
Brecht Machiels
129880d2ed Midnight Commander: add v4.8.28 (#31313)
Also, fix a build issue.
2022-06-28 02:33:48 -06:00
Wouter Deconinck
8f7f96ae2b oneAPI supports cxx17_flag and cxx20_flag (#31274) 2022-06-28 10:33:19 +02:00
Adam J. Stewart
15f736e104 rapidjson: fix Apple M1 build (#31291) 2022-06-28 02:29:46 -06:00
Adam J. Stewart
8f3aa27e25 oracle-instant-client: add macOS conflict (#31301) 2022-06-28 02:21:37 -06:00
Adam J. Stewart
cd54a3e908 py-black: add v22.6.0 (#31328) 2022-06-28 02:01:43 -06:00
Brian Van Essen
8965d8f661 lbann, aluminum, hydrogen,dihydrogen: explicit flags to pass the AMD GPU architecture into CMake (#31326) 2022-06-28 09:45:00 +02:00
Adam J. Stewart
899dfdb416 grass: add v8.2.0 (#31303) 2022-06-28 09:33:57 +02:00
Adam J. Stewart
24a03e5a50 libkml: add libs property (#31299) 2022-06-28 09:33:23 +02:00
Adam J. Stewart
662d5066f1 sfcgal: add command property (#31298) 2022-06-28 09:33:01 +02:00
Adam J. Stewart
616d7454fc geos: add command property (#31294) 2022-06-28 09:32:41 +02:00
Adam J. Stewart
2683040c09 mysql: add v8.0.29, command, libs (#31300) 2022-06-28 00:09:52 -06:00
Adam J. Stewart
63b33403db kealib: add command property (#31295)
* kealib: add command property

* Correct exe name on Windows
2022-06-28 00:06:09 -06:00
Adam J. Stewart
6a5bec8d43 Java extensions: jdk -> openjdk (#31289) 2022-06-28 00:05:55 -06:00
Adam J. Stewart
7dba08bd83 thrift: add v0.16.0 (#31302) 2022-06-28 00:05:00 -06:00
Adam J. Stewart
c533bbdfb0 unixodbc: add libs property (#31304) 2022-06-28 00:04:41 -06:00
Adam J. Stewart
4f203eb50f postgresql: add command property (#31297) 2022-06-28 00:04:26 -06:00
Luke Diorio-Toth
f6d4000e58 py-unicycler: added new versions and fixed dependencies (#31327) 2022-06-27 22:45:14 -07:00
Jen Herting
c5fc16ddd7 New package: py-aiocontextvars (#30815)
* [py-aiocontextvars] New package

* [py-aiocontextvars] Added types

* [py-aiocontextvars]

- removed test dependencies
- flake8

* [py-aiocontextvars] fixed dependency types

* [py-aiocontextvars] spack -> spack.package

* [py-aiocontextvars] depends on setuptools

Co-authored-by: James A Zilberman <jazrc@rit.edu>
2022-06-27 19:09:18 -07:00
Greg Becker
df44045fdb Feature: use git branches/tags as versions (#31200)
Building on #24639, this allows versions to be prefixed by `git.`. If a version begins `git.`, it is treated as a git ref, and handled as git commits are starting in the referenced PR.

An exception is made for versions that are `git.develop`, `git.main`, `git.master`, `git.head`, or `git.trunk`. Those are assumed to be greater than all other versions, as those prefixed strings are in other contexts.
2022-06-28 01:54:41 +00:00
iarspider
7dd2ca0207 Sherpa: add libs (shared, static, both) variant (#31318)
* Sherpa: add libs (shared, static, both) variant

* PEP-8
2022-06-27 18:09:45 -06:00
Max Zeyen
7aedf9da37 gpi-space: add new version (#31319)
* gpi-space: add new version

* gpi-space: update copyright year
2022-06-27 18:05:46 -06:00
Paul R. C. Kent
5b627a9353 llvm: add 14.0.6 (#31310) 2022-06-27 17:37:58 -06:00
Sergey Kosukhin
7fc68240fe oneapi-* packages: improve use with modules (#30981)
This commit adds some changes which improve use of Spack-installed
oneAPI packages with Spack-generated modules, but not within Spack
(e.g. if you install some of these packages with Spack, then load
their associated modules to build other packages outside of Spack).

The majority of the PR diff is refactoring. The functional changes
are:

* intel-oneapi-mkl:
  * setup_run_environment: update Intel compiler flags to RPATH the
    mkl libs
* intel-oneapi-compilers: update the compiler configuration to RPATH
  libraries installed by this package (note that Spack already handled
  this when installing dependent packages with Spack, but this is
  specifically to use the intel-oneapi-compilers package outside
  of Spack). Specifically:
  * inject_rpaths: this modifies the binaries installed as part of
    the intel-oneapi-compilers package to RPATH libraries provided
    by this package
  * extend_config_flags: this instructs the compiler executables
    provided by this package to RPATH those same libraries

Refactoring includes:

* intel-oneapi-compilers: in addition to the functional changes,
  a large portion of this diff is reorganizing the creation of
  resources/archives downloaded for the install
* The base oneAPI package renamed component_path, so several packages
  changed as a result:
  * intel-oneapi-dpl
  * intel-oneapi-dnn
  * extrae
* intel-oneapi-mpi:
  * Perform file filtering in one pass rather than two
2022-06-27 16:34:15 -07:00
Valentin Volkl
614a014948 feynhiggs: add new package (#31306)
* feynhiggs: add new package

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

* Update var/spack/repos/builtin/packages/feynhiggs/package.py
2022-06-27 21:08:02 +00:00
Peter Scheibel
f7ef064bdc spack external find: handle manifest with bad permissions (#31201)
Allow `spack external find` (with no extra args) to proceed if the manifest file exists but
without sufficient permissions; in that case, print a warning. Also add a test for that behavior.

TODOs:

- [x] continue past any exception raised during manifest parsing as part of `spack external find`, 
      except for CTRL-C (and other errors that indicate immediate program termination)
- [x] Semi-unrelated but came up when discussing this with the user who reported this issue to
      me: the manifest parser now accepts older schemas 

See: https://github.com/spack/spack/issues/31191
2022-06-27 19:26:12 +00:00
Mark Olesen
0080f6b7a5 openfoam: v2206 release. v2106/2012/2006/1912 patched to 202220610 (#31317)
Co-authored-by: Mark Olesen <Mark.Olesen@esi-group.com>
2022-06-27 13:17:36 -06:00
Pariksheet Nanda
0471c1ad5d ioapi: adapt to upstream's build system changes (#28247) (#31149)
Co-authored-by: Pariksheet Nanda <pnanda@necrosis.micro.med.umich.edu>
2022-06-27 11:28:46 -07:00
sayefsakin
1ba4ea5f20 cuda 11 support for hiop (#31282)
Co-authored-by: Sayef Azad Sakin <ssakin@moonshot.cels.anl.gov>
2022-06-27 11:24:07 -07:00
Jen Herting
8be7257990 [sratoolkit] added version 3.0.0 (#31322) 2022-06-27 17:40:20 +00:00
Adam J. Stewart
6628272765 openexr: add v3.1.5, CMake support (#31292) 2022-06-27 11:09:35 -06:00
Adam J. Stewart
78882c5569 brunsli: add new package (#31240) 2022-06-27 18:44:03 +02:00
Adam J. Stewart
7bce92ad46 HDF: fix build with Apple Clang (#31235) 2022-06-27 18:37:13 +02:00
Adam J. Stewart
a6b0de3beb py-torch: add M1 GPU support (#31283) 2022-06-27 18:21:49 +02:00
Massimiliano Culpo
11d71ca85e Rename os_facts.lp to os_compatibility.lp (#31206)
Follow-up from #31170
2022-06-27 09:15:25 -07:00
Harmen Stoppels
5698846619 Fix pigz%nvhpc build (#31227)
nvc doesn't know this flag: `-Wno-unknown-pragmas`, it doesn't hurt to
remove the specific warning flags, from:

```
-O3 -Wall -Wextra -Wno-unknown-pragmas -Wcast-qual
```

to:

```
-O3 -Wall
```
2022-06-27 14:41:40 +02:00
Luke Diorio-Toth
f09f834a8f py-gtdbtk and fastani: new packages (#31268) 2022-06-24 07:49:07 -07:00
Cody Balos
147f39d7aa Fix typo in documentation note about concretizer:unify (#31246) 2022-06-24 11:31:43 +02:00
Adam J. Stewart
9fad3ed5f1 giflib: fix macOS build (#31234) 2022-06-24 11:28:44 +02:00
Adam J. Stewart
1375b1975b librttopo: add missing Autotools deps (#31252) 2022-06-24 11:28:12 +02:00
Adam J. Stewart
c533612ab6 sfcgal: fix boost build issues (#31254) 2022-06-24 10:22:56 +02:00
Adam J. Stewart
e5cc3c51d1 py-numpy: add v1.23.0 (#31250) 2022-06-24 10:20:04 +02:00
Massimiliano Culpo
70650cacbd ASP-based solver: rescale target weights so that 0 is always the best score (#31226)
fixes #30997

Instead of giving a penalty of 30 to all nodes when preferences
are not package specific, give a penalty of 100 to all targets
of a node where we have package specific preferences, if the target
is not explicitly preferred.
2022-06-23 23:33:36 -07:00
Brian Van Essen
d8a5638d9f Fixed the range on Catch2 to avoid v3.x (#31242) 2022-06-23 16:10:27 -07:00
Luke Diorio-Toth
158f6ddb14 py-instrain: adding new package (#31244)
* py-instrain: adding new package

* py-instrain: fixed style

* removed unnecessary setuptools and numba version restrictions

* fixed pandas version
2022-06-23 22:58:45 +00:00
haralmha
86d1a6f2fc hadoop-xrootd: Add clang conflict (#31215)
* hadoop-xrootd: Add clang conflict

* Flake8

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-23 16:45:39 -06:00
Mikael Simberg
ca10ff1649 Allow using mimalloc 2 in pika and HPX (#31260) 2022-06-23 15:33:03 -07:00
Adam J. Stewart
19175b9bab keyutils: add macOS conflict (#31236) 2022-06-23 16:13:37 -06:00
Richard Berger
7d64a8e81f add charliecloud 0.27 and fix master install (#31247)
* charliecloud: custom autoreconf and require py-pip and py-wheel for master

* charliecloud: add 0.27

* charliecloud: add minimum py-pip version
2022-06-23 15:03:03 -07:00
Adam J. Stewart
a0b68a0baa rpcsvc-proto: add v1.4.3 (#31253) 2022-06-23 14:59:55 -07:00
Harmen Stoppels
b7e0692dfa libfuse: 3.11.0 (#31259) 2022-06-23 14:55:47 -07:00
Maciej Wójcik
8cc62ef916 Add some GROMACS versions (#31264)
* gromacs: add recent version

* gromacs-swaxs: add recent versions

* gromacs-chain-coordinate: add recent version
2022-06-23 14:53:32 -07:00
Stephen Sachs
2363aba710 [lammps] Rename master -> develop branch (#31263)
https://github.com/lammps/lammps/pull/3311

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-23 14:40:55 -07:00
Weston Ortiz
5a0c56229c goma: update package with new version and options (#31267) 2022-06-23 14:10:14 -07:00
AMD Toolchain Support
96bb72e412 Updated sha256 value for amdlibflame (#31269) 2022-06-23 14:07:09 -07:00
Adam J. Stewart
7c977733f1 py-pandas: add v1.4.3 (#31270) 2022-06-23 14:05:49 -07:00
Brian Van Essen
d48a760837 Add the rocm tag to packages from the Radeon Open Compute Platform. (#31187)
* Add the rocm tag to packages from the Radeon Open Compute Platform.

* Added more packages from the ROCm software distribution based on
reviewer feedback.

* Updated tags based on reviewer feedback
2022-06-23 09:10:01 -07:00
Brian Van Essen
c64298a183 Enable MVAPICH2 to use the mpichversion executable to detect externals (#31245)
This is an an alternative to mpiname.
2022-06-23 07:41:25 +02:00
Ben Boeckel
31d89e80bc protobuf: add 21.1 (#31249)
Older versions have compile errors under newer compilers (e.g., gcc-12).
2022-06-22 19:33:54 -06:00
Luke Diorio-Toth
2844f1fc45 added racon conflict with new versions of gcc (#31243) 2022-06-22 18:00:27 -07:00
Vicente Bolea
8b85f8ec58 vtk-m: change smoke test (#29113) 2022-06-22 18:58:03 -06:00
eugeneswalker
7ef52acfce relocation: x-pie-executable needs relocation (#31248) 2022-06-22 23:55:28 +00:00
Nicholas Sly
c3fecfb103 Add --disable-wrapper-runpath to openmpi when ~wrapper-rpath to avoid build time error. (#31221)
Co-authored-by: Nicholas Cameron Sly <sly1@rzalastor2.llnl.gov>
2022-06-22 16:57:55 -06:00
Adam J. Stewart
ef278c601c spack create: fix for no URL (#31239) 2022-06-22 18:45:03 +00:00
JeromeDuboisPro
5e9a8d27f7 add first version of py-pyrr package (#31211)
* add first version of py-pyrr package

* added license

* update license HEADER

* Remove preferred as there is only one version available

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

* Better specify dependency type

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

* remove useless variable license

Co-authored-by: Jérôme Dubois <jerome.dubois@cea.fr>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-06-22 10:36:49 -07:00
Manuela Kuhn
ffc90f944c py-bids-validator: add 1.9.4 (#31230) 2022-06-22 10:35:57 -07:00
Harmen Stoppels
699c0cf9a0 squashfs-mount: new package (#31225) 2022-06-22 14:31:20 +02:00
Massimiliano Culpo
55cac3b098 Remove update functions used to ease the transition in v0.16 (#31216) 2022-06-22 11:15:57 +02:00
Tamara Dahlgren
35d07a6f18 Add missing '?full_index=1' to meson 9850.patch URL (#31222)
* Add missing '?full_index=1' to meson 9850.patch URL

* Correct checksum

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

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-06-22 08:56:49 +02:00
Adam J. Stewart
1f42a5e598 py-geopandas: add v0.11.0 (#31218) 2022-06-21 18:14:04 -07:00
Adam J. Stewart
967463432b py-shapely: env vars always needed (#31217) 2022-06-21 18:11:36 -07:00
Howard Pritchard
bc03b5caaf meson: fix to recognize intel oneapi compiler (#30605)
Signed-off-by: Howard Pritchard <howardp@lanl.gov>
2022-06-21 10:47:46 -07:00
Massimiliano Culpo
649760dc1a Canonicalize positional argument to spack bootstrap mirror (#31180)
fixes #31139
2022-06-21 19:25:01 +02:00
Adam J. Stewart
77118427b1 grep: add +pcre variant (#31204) 2022-06-21 10:06:42 -07:00
haralmha
1a024963a2 frontier-client: Add openssl and zlib directories to search path (#31212) 2022-06-21 09:38:24 -07:00
Massimiliano Culpo
aebb601b70 Stricter compatibility rules for OS and compiler when reusing specs (#31170)
* Stricter compatibility rules for OS and compiler when reusing specs
* Add unit test
2022-06-20 17:32:13 -07:00
Robert Cohn
d95f53e1ac New (external-only) package: oneapi-igc (#31045) 2022-06-20 13:38:41 -07:00
Christian Goll
0fe57962b3 OpenSUSE Tumbleweed: use GLIBC version as distro version (#19895)
Tumbleweed is a rolling release that would have used a date 
as a version instead.
2022-06-20 22:20:31 +02:00
Massimiliano Culpo
8ec451aa7d setuptools: add v62.4.0 (#31112) 2022-06-20 08:59:58 -07:00
Stephen Sachs
14349cb882 lammps: add lammps_sizes variant (#31182)
This is translated to CMakes LAMMS_SIZES variable. Used to select integer sizes.

Co-authored-by: Stephen Sachs <stesachs@amazon.com>
2022-06-20 09:39:03 +00:00
Pariksheet Nanda
bc438ed4e9 ome-files-cpp: add v0.6.0 (#31156) 2022-06-20 10:16:21 +02:00
Sam Broderick
760a12c440 Fix request for bzip2, since bzip was pulled due to patent issues (#31198) 2022-06-20 08:13:20 +00:00
Adam J. Stewart
9325c8e53f py-tensorboard-data-server: fix build on Apple M1 (#30908) 2022-06-20 10:12:32 +02:00
HELICS-bot
fd5b7d6cce helics: add v3.2.1 (#31190)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-06-20 09:54:57 +02:00
Cory Bloor
b19a0744f1 rocm: add master and develop to BLAS and SOLVER (#30273) 2022-06-20 09:52:47 +02:00
Sebastian Ehlert
75d0c0dff7 fpm: add v0.6.0 (#31193) 2022-06-20 09:49:21 +02:00
Adam J. Stewart
aedc41c3a0 texlive: fix and deprecate live version (#31195) 2022-06-20 09:44:36 +02:00
Valentin Churavy
1f39d6d916 Julia: add v1.7.3 (#31196) 2022-06-20 09:41:50 +02:00
Ye Luo
1bc3b0a926 quantum-espresso: Add 7.1 (#31192) 2022-06-18 23:32:28 +02:00
Ryan Marcellino
62596fb796 py-f90wrap: new version (#31174) 2022-06-17 17:09:34 -06:00
Brian Van Essen
15c35a3cff Bugfix external find --all for libraries (#31186)
* Fixed a bug in the 'external find --all' command where the call failed
to find packages by both executable and library. The bug was that the
call `path.all_packages()` incorrectly turned the variable
`packages_to_check` into a generator rather than keeping it a list.
Thus the second call to `detection.by_library` had no work to do.

* Fixed the help message for the find external and compiler commands as
well as others that used the `scopes_metavar` field to define where
the results should be stored in configuration space.  Specifically,
the fact that configuration could be added to the environment was not
mentioned in the help message.
2022-06-17 21:52:06 +00:00
Brian Van Essen
249c90f909 Added the ecp and radiuss tags to the LBANN software stack packages. (#31188) 2022-06-17 21:25:50 +00:00
Kyle Gerheiser
043b2cbb7c Fix external compiler detection for MPICH and OpenMPI (#30875)
os.path.dirname was being used to compare compilers. If two compilers
are in the same directory then it will pick up the first one it encounters.

Compare the full compiler path instead.
2022-06-17 14:01:49 -06:00
Bernhard Kaindl
aedf215b90 openssh: don't suid-install ssh-keysign (not used by default) (#31083) 2022-06-17 12:09:52 -06:00
Mikhail Titov
eed4a63be7 rct: update packages (RE, RG, RP, RS, RU) with new versions (#31172) 2022-06-17 10:44:22 -07:00
Massimiliano Culpo
13b609b4b6 docs: quote string to show valid YAML (#31178)
fixes #31167
2022-06-17 18:25:52 +02:00
Chuck Atkins
85dc20cb55 Spec: Add a new virtual-customizable home attribute (#30917)
* Spec: Add a new virtual-customizable home attribute

* java: Use the new builtin home attribute

* python: Use the new builtin home attribute
2022-06-17 10:29:08 -04:00
Massimiliano Culpo
667c39987c py-setuptools: install setuptools from wheels directly (#31131)
When installing setuptools from sources in Spack, we might
get into weird failures due to the way we use pip.

In particular, for Spack it's necessary to install in a
non-isolated pip environment to allow using PYTHONPATH as a
selection method for all the build requirements of a
Python package.

This can fail when installing setuptools since there might
be a setuptools version already installed for the Python
interpreter being used, with different entry points than
the one we want to install.

Installing from wheels both pip and setuptools should
harden our installation procedure in the context of:
- Bootstrapping Python dependencies of Spack
- Using external Python packages
2022-06-17 10:42:28 +02:00
Cyrus Harrison
f35d8c4102 vtk-h: use cmake base pkg, overhaul recipe (#28898)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-06-17 09:59:57 +02:00
Sreenivasa Murthy Kolam
6ac3186132 Support 'spack external find' for rocm packages (#30792) 2022-06-17 09:34:49 +02:00
Robert Cohn
466572dc14 Update Intel package descriptions (#31150) 2022-06-17 09:23:40 +02:00
Harmen Stoppels
1c0bf12e5b openssl package: default to mozilla certs (#31164)
On Cray systems that use Cray Data Virtualization Service (DVS),
symlinks across filesystems are not allowed, either due to a bug, or
because they're simply not POSIX compliant [1].

Spack's OpenSSL package defaults to `certs=system` which comes down to
symlinking `/etc/ssl` in the Spack install prefix, triggering this
problem, resulting in mysterious installation failures.

Instead of relying on system certs, we can just use
`ca-certificates-mozilla`, and if users really need system certs, then
they're probably better off marking OpenSSL entirely as external.

[1] https://github.com/glennklockwood/cray-dvs
2022-06-16 23:25:32 -06:00
Adam J. Stewart
bf990bc8ec py-sphinx: add v5, maintainer (#31171) 2022-06-16 20:41:31 -06:00
Massimiliano Culpo
267358a799 ASP-based solver: fix rules on version weights selection (#31153)
* ASP: sort and deduplicate version weights from installed specs

* Pick version weights according to provenance

* Add unit test
2022-06-16 14:17:40 -07:00
Peter Scheibel
392b548312 Manifest parsing: avoid irrelevant files (#31144)
* Manifest directory may not contain manifest files: exclude non-manifest files
* Manifest files use different name for rocmcc: add translation for it
2022-06-16 15:16:48 -05:00
Elizabeth Sherrock
8c3b82c140 New packages: py-ford and dependencies (#31107)
* Created package and added description

* Add py-markdown-include

* Created package

* Finished creating package

* Added py-md-environ

* Added build dependencies

* Added other deps

* Add python-markdown-math (#4)

* Created package and started to add info

* Removed unneeded global/install options

* Figured out version spec for markdown-math

* Removed type=build from unnecessary dependencies

* Removed unneeded install/global options, added version spec to dependency

* Added wscullin as interim maintainer for packages

* Fixed style issues

* Took care of trailing whitespace

* Removed comment line before imports

* Changed file charset to match other packages

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

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

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

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

* Removed test dependency after review feedback

* Added new 6.1.12 version to py-ford

Co-authored-by: Seth R. Johnson <johnsonsr@ornl.gov>
Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-06-16 12:14:40 -07:00
Qian Jianhua
2e4b533420 rpcsvc-proto: add 'cpp' path for rpcgen (#31157) 2022-06-16 18:24:28 +00:00
Mark Abraham
3b393fe0eb Add LevelZero variant to hwloc package (#31161)
* Add LevelZero variant to hwloc package

This permits the hwloc package to build with with support for the
Intel Level Zero low-level layer, analogous to CUDA, ROCm, and OpenCL.

* Fix typo
2022-06-16 12:21:36 -06:00
Massimiliano Culpo
895ceeda38 concretize.lp: impose a lower bound on the number of version facts if a solution exists (#31142)
* concretize.lp: impose a lower bound on the number of version facts if a valid version exists

fixes #30864

* Add a unit test
2022-06-16 09:25:56 -07:00
Satish Balay
6f1e3a4ad3 xsdk-examples: use 'parallel=False' with tests - as they may fail with a large '-j'[when used with +cuda] (#31138) 2022-06-16 07:50:45 -07:00
iarspider
ce41b7457b Xerces-C: Add option to disable transcoder (#31162)
* Xerces-C: Add option to disable transcoder

* Update package.py

* Apply suggestion from review

* Flake-8
2022-06-16 10:40:03 -04:00
G-Ragghianti
4f9f56630b slate, blaspp, lapackpp: new versions (#31147)
* Adding new release for slate, blaspp, and lapackpp

* Setting release tar file hashes

* New slate release
2022-06-16 08:09:42 -04:00
Rob Falgout
e216ba1520 hypre: new version 2.25.0 (#31146) 2022-06-16 08:07:30 -04:00
Massimiliano Culpo
4fd5ee1d9d CI: test binary bootstrapping of clingo on all macOS versions (#31160) 2022-06-16 07:26:20 -04:00
Mosè Giordano
89f32d51f3 grid: add new package (#31133) 2022-06-16 09:00:09 +02:00
Manuela Kuhn
3b3be70226 r-httpuv: fix zlib dependency (#31121) 2022-06-15 20:22:58 -05:00
Chuck Atkins
95888602f2 mesa: Match rtti settings with the libllvm dependency (#31145)
* llvm-amdgpu: Update the libllvm version provided

* mesa: Match configure rtti settings to the libllvm dependency
2022-06-15 17:29:33 -06:00
Wileam Y. Phan
0205fefe0c googletest: use URLs with .tar.gz extension (#31129) 2022-06-15 18:21:44 +00:00
Tom Scogland
b261b2a5ff Allow bootstrapping to work when partial or incompatible modules exist in the module path (#31035) 2022-06-15 19:09:07 +02:00
Ryan Mast
8c58c14c3d helics: add v2.8.1 (#31134) 2022-06-15 09:27:50 +02:00
SXS Bot
f7b4d488c3 spectre: add v2022.06.14 (#31135)
Co-authored-by: sxs-bot <sxs-bot@users.noreply.github.com>
2022-06-15 09:27:10 +02:00
Sreenivasa Murthy Kolam
38a8d4d2fe ROCm support to build py-torch (#31115)
* rocm support to build py-torch

* rocm support to build py-torch
2022-06-14 15:56:11 -07:00
Robert Underwood
1ceee714db sz: smoke, unit, version updates, and more oh my (#30873)
Co-authored-by: Robert Underwood <runderwood@anl.gov>
2022-06-14 16:53:47 -06:00
Brian Van Essen
5b3e4ba3f8 Fixed bad hashes for recent versions and added v8.4.0 (#31038) 2022-06-14 22:05:44 +02:00
snehring
37426e41cb wget: fixing compilation issue with gcc11+ on rhel7 (#30858) 2022-06-14 16:03:02 +00:00
Sergey Kosukhin
a05e729e1b mpich: remove libtool patches (#30769) 2022-06-14 16:29:22 +02:00
Mikael Simberg
f8a6799e67 apex: fix compilation with binutils (#30638) 2022-06-14 16:04:53 +02:00
Maciej Wójcik
633ebd149c dbcsr: add versions up to v2.2.0 (#30891)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-06-14 15:08:13 +02:00
G-Ragghianti
bf6220821b Make the IntelPackage fail successfully (#30773)
Co-authored-by: Robert Cohn <rscohn2@gmail.com>
2022-06-14 15:06:06 +02:00
Sebastian Ehlert
3db96aa892 simple-dftd3: add package and dependencies (#31046)
- add simple-dftd3 (version 0.6.0, 0.5.1)
- add mctc-lib (version 0.3.0)
- add toml-f (version 0.2.3)
- update dftd4 (version 3.4.0, use mctc-lib as actual dependency)
- update json-fortran (version 8.*, make static library PIC)
2022-06-14 15:05:01 +02:00
Jim Galarowicz
c7628d768a survey: add v1.0.5 (#31053) 2022-06-14 14:56:51 +02:00
haralmha
e1ad926189 vectorclass-version2: move files to include folder (#31105) 2022-06-14 14:54:16 +02:00
dlkuehn
8705735c74 gemma: add new package. (#31078)
Co-authored-by: David Kuehn <las_dkuehn@iastate.edu>
2022-06-14 12:53:14 +00:00
Hadrien G
d82fa045d5 acts: add v19.2 (#31108) 2022-06-14 12:45:03 +00:00
Richard Berger
c72d51cb3a legion: add HIP support (#31080) 2022-06-14 13:49:33 +02:00
Qian Jianhua
d76f184430 hybrid-lambda: fix build tests (#30214) 2022-06-14 13:46:23 +02:00
Seth R. Johnson
19ea24d2bd hdf5: add conflict for broken @1.8.22+fortran+mpi (#31111) 2022-06-14 13:42:48 +02:00
Bernhard Kaindl
83efea32f4 openssh: enable authentication via Kerberos through GSSAPI (#31086)
Add variant +gssapi to enable authentication via Kerberos through GSSAPI

When openssh is installed at sites using Kerberos, openssh needs to auth
via Kerberos through GSSAPI in order to work in such environments.
2022-06-14 13:41:32 +02:00
Mark Olesen
bc577f2dee openfoam: update v2112 to latest patch (#31113)
Co-authored-by: Mark Olesen <Mark.Olesen@esi-group.com>
2022-06-13 21:21:42 -06:00
Jean Luca Bez
04529fbe80 Update HDF5 VOL async (#31011)
* Update h5bench maintainers and versions

* Include version 1.1 for h5bench

* Correct release hash and set default version

* Update .tar.gz version

* Update HDF5 VOL async version and environment variable syntax
2022-06-13 21:58:16 -05:00
Wouter Deconinck
cdfbe2c25d root: new version 6.26.04 (#31116)
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-13 17:45:37 -07:00
Manuela Kuhn
8305742d75 exempi: add 2.6.1 and fix boost dependency (#31120) 2022-06-13 15:20:31 -07:00
Greg Sjaardema
e0137b1566 SEACAS: Clean up, add new versions (#31119) 2022-06-13 16:22:43 -04:00
iarspider
be95699a55 Add checksum for pacparser 1.4.0 (#31110) 2022-06-13 14:17:33 -06:00
Massimiliano Culpo
7d96a0aa5a Pin setuptools version in Github Action Workflows (#31118)
fixes #31109
2022-06-13 21:09:16 +02:00
Qian Jianhua
874b713edf netpbm: run custom test command (#31072)
* netpbm: run custom test command

* fix styles

* change method name
2022-06-13 11:26:54 -07:00
iarspider
3c0a98c5ab sloccount: add build-time dependency on flex (#31106) 2022-06-13 09:39:44 -07:00
Elsa Gonsiorowski, PhD
998bf90b35 SCR release v3.0, including components (#29924) 2022-06-13 18:17:17 +02:00
liuyangzhuan
2ca32fbc8c Remove filter operation for superlu-dist to avoid permission issues on read-only systems (#30970)
* added package gptune with all its dependencies: adding py-autotune, pygmo, py-pyaml, py-autotune, py-gpy, py-lhsmdu, py-hpbandster, pagmo2, py-opentuner; modifying superlu-dist, py-scikit-optimize

* adding gptune package

* minor fix for macos spack test

* update patch for py-scikit-optimize; update test files for gptune

* fixing gptune package style error

* fixing unit tests

* a few changes reviewed in the PR

* improved gptune package.py with a few newly added/improved dependencies

* fixed a few style errors

* minor fix on package name py-pyro4

* fixing more style errors

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

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

* resolved a few issues in the PR

* fixing file permissions

* a few minor changes

* style correction

* minor correction to jq package file

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

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

* fixing a few issues in the PR

* adding py-selectors34 required by py-pyro4

* improved the superlu-dist package

* improved the superlu-dist package

* moree changes to gptune and py-selectors34 based on the PR

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

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

* improved gptune package: 1. addressing comments of tldahlgren in PR 26936; 2. adding variant openmpi

* fixing style issue of gptune

* changing file mode

* improved gptune package: add variant mpispawn which depends on openmpi; add variant superlu and hypre for installing the drivers; modified hypre package file to add a gptune variant

* fixing style error

* corrected pddrive_spawn path in gptune test; enforcing gcc>7

* fixing style error

* setting environment variables when loading gptune

* removing debug print in hypre/package.py

* adding superlu-dist v7.2.0; fixing an issue with CMAKE_INSTALL_LIBDIR

* changing site_packages_dir to python_platlib

* not using python3.9 for py-gpy, which causes due to dropped support of tp_print

* more replacement of site_packages_dir

* fixing a few dependencies in gptune; added a gptune version

* adding url for gptune

* minor correction of gptune

* updating versions in butterflypack

* added a version for openturns

* added a url for openturns

* minor fix for openturns

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

Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>

* added version2.1.1 for butterflypack

* fixing a tag in butterflypack

* minor fix for superlu-dist

* removed file filter for superlu-dist

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* superlu-dist: add version detection for the testing; removing unused lines

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-13 08:48:55 -07:00
Jordan Galby
e50d08ce48 Fix spack style arbitrary git rev as base (#31019)
Allow `spack style -b @` or `spack style -b origin/develop` to work as
expected.

Regression since spack 0.17 #25085
2022-06-13 15:22:35 +00:00
Sergey Kosukhin
696d81513d nvhpc: conflict with all compilers except for gcc (#31073) 2022-06-13 16:47:28 +02:00
Mark Grondona
b38afa7528 Add flux-core v0.39.0 and v0.40.0 and flux-sched v0.23.0 (#31061) 2022-06-13 16:15:25 +02:00
Mikael Simberg
0f2786c9d3 Fix tracy-client package (#31076) 2022-06-13 16:11:00 +02:00
Carson Woods
f72c2ab583 Fix download URL for pcre package (#31077) 2022-06-13 16:05:25 +02:00
Adam J. Stewart
f6e6403fd1 Fix packages that will break with PIL 10 (#31071) 2022-06-13 16:04:13 +02:00
Simon Pintarelli
5550271ead atompaw: add v4.2.0.1 (#31087)
apply ifort patch including v4.2.0.0, but not for 4.2.0.1 anymore
2022-06-13 15:15:59 +02:00
Jack Morrison
a1b19345b1 opa-psm2: add v11.2.228 (#31089) 2022-06-13 14:58:25 +02:00
Erik Schnetter
e2aeb06c91 adios2: add v2.8.1 (#31090) 2022-06-13 14:55:09 +02:00
Brice Videau
14ae0e0d94 py-py-spy: fix dependency on libunwind (#31013)
Co-authored-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
2022-06-13 14:16:26 +02:00
Seth R. Johnson
516587a1da py-breathe: new version 4.33.1 and fix dependencies (#31098)
* py-breathe: new version 4.33.1 and fix dependencies

* remove unused dependencies
2022-06-12 18:06:39 -05:00
Paul R. C. Kent
dc36fd87bb Addllvmv1405 (#31099) 2022-06-12 11:24:31 -07:00
marcosmazz
06b5141d01 Limit Jasper version for WPS (#31088)
* Limit Jasper version for WPS

Jasper@3: changed API and does not support interfaces used by WPS.
This prevented ungrib.exe build and failed silently.
2022-06-12 19:02:07 +02:00
Seth R. Johnson
27610838dd py-sphinxcontrib-bibtex: new version 2.4.2 (#31097) 2022-06-12 09:24:46 -07:00
Danny McClanahan
0c7fd9bd8c fix doubly shell quoting args to spack spec (#29282)
* add test to verify fix works
* fix spec cflags/variants parsing test (breaking change)
* fix `spack spec` arg quoting issue
* add error report for deprecated cflags coalescing
* use .group(n) vs subscript regex group extraction for 3.5 compat
* add random test for untested functionality to pass codecov
* fix new test failure since rebase
2022-06-11 12:35:46 -07:00
Todd Gamblin
bf2b30a5f5 bugfix: preserve dict order for Spec.dag_hash() in Python 2 (#31092)
Fix a bug introduced in #21720. `spack_json.dump()` calls `_strify()` on dictionaries to
convert `unicode` to `str`, but it constructs `dict` objects instead of
`collections.OrderedDict` objects, so in Python 2 (or earlier versions of 3) it can
scramble dictionary order.

This can cause hashes to differ between Python 2 and Python 3, or between Python 3.7
and earlier Python 3's.

- [x] use `OrderedDict` in `_strify`
- [x] add a regression test
2022-06-10 20:32:35 -07:00
Asher Mancinelli
f42680b785 ripgrep: remove need for llvm (#31062) 2022-06-10 11:45:53 -07:00
Sergey Kosukhin
a2afd5b82f clingo: fix string formatting in error messages (#31084) 2022-06-10 16:24:27 +00:00
Cyrus Harrison
11f1b371f7 babelflow: fix conditional constraint in "when" decorator (#31057) 2022-06-10 18:07:22 +02:00
Valentin Churavy
cfc46504ac enzyme: new version 0.0.32 (#31081)
Add LLDEnzyme to libs list
2022-06-10 11:48:35 +02:00
dependabot[bot]
163251aa65 build(deps): bump actions/setup-python from 3.1.2 to 4 (#31059)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3.1.2 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](98f2ad02fd...d09bd5e600)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-06-10 11:03:36 +02:00
eugeneswalker
6ab9f3a290 exago@1.4.1: : needs py-pytest (#31060) 2022-06-09 16:55:04 -07:00
Gregory Lee
45043bcdf5 py-xdot requires explicit dependency on harfbuzz (#30968) 2022-06-09 13:53:32 -06:00
Adam J. Stewart
7642fa3d99 py-kornia: add v0.6.5 (#31067) 2022-06-09 12:13:51 -07:00
Adam J. Stewart
1689f7fcbe py-pillow: add v9.1.1 (#31068) 2022-06-09 12:12:02 -07:00
Adam J. Stewart
4f67afeb5f py-pytorch-lightning: add v1.6.4 (#31069) 2022-06-09 12:09:05 -07:00
Adam J. Stewart
9d8ecffed0 py-timm: add v0.5.4 (#31070) 2022-06-09 12:06:58 -07:00
Cyrus Harrison
1ada7ea809 add fix for implicit includes with newer vers of gcc (#31056) 2022-06-09 09:40:08 -07:00
Martin Lang
4a8db00691 nfft, pnfft: fix detection of fftw variants (precision) (#30935)
* nfft, pnfft: fix detection of fftw variants (precision)

* nfft, pnfft: use fftw's selected_precisions; avoid repetitive calls to spec

Co-authored-by: Martin Lang <martin.lang@mpsd.mpg.de>
2022-06-09 08:47:12 -07:00
Tim Fuller
01f8236bf5 Allow more fine-grained control over what submodules are updated (#27293)
The "submodules" argument of the "version" directive can now accept
a callable that returns a list of submodules, in addition to the usual
Boolean values
2022-06-09 07:45:49 +02:00
Adam J. Stewart
57822d3014 clingo: fix ~python build (#30824) 2022-06-09 07:33:56 +02:00
Massimiliano Culpo
3fdb3f832a Cancel running workflows automatically on PR update (#31044)
* Cancel running workflows automatically on PR update
* Add the last update later to check cancellation is working
* Use github.run_number instead of github.sha
2022-06-08 15:46:46 -07:00
Asher Mancinelli
bedad508a9 lua-mpack: build with -fPIC always (#31054) 2022-06-08 21:37:55 +00:00
Adam J. Stewart
31f6dedecd py-memray: add new package (#31033)
* py-memray: add new package

* Link to Python

* Add missing non-Python deps
2022-06-08 13:52:38 -07:00
Adam J. Stewart
dc0c4959db cuDNN: add v8.4.0.27-11.6 (#31034) 2022-06-08 13:48:12 -07:00
Mark W. Krentel
8550b6cf49 hpctoolkit: adjust dependencies for develop (#31050)
The develop branch now uses libiberty, but not binutils or libdwarf.
2022-06-08 13:42:32 -07:00
Jen Herting
0e5c4c9cbf Draft: Pending #29806 [py-sentry-sdk] added version 1.5.5 (#29143)
* [py-sentry-sdk] audited dependencies and relisted extras as variants

* [py-sentry-sdk] added version 1.5.5

* [py-sentry-sdk] flake8

* [py-sentry-sdk]

- added "descriptions" to variants
- removed conflicts
  - replaced with when statements in varients
2022-06-08 20:41:44 +00:00
Jen Herting
9bac72e818 New package: py-colossialai (#30807)
* colossalai is dependency for deepoffense

* [py-colossalai] added homepage

* [py-colossalai] added dependencies and removed older versions

* [py-colossalai] updated pypi url to match listed version

* [py-colossalai] spack -> spack.package

Co-authored-by: Sid Pendelberry <sid@rit.edu>
2022-06-08 20:34:34 +00:00
Brice Videau
a65a217c54 py-ytopt: add v0.0.4 (#31029) 2022-06-08 19:43:20 +00:00
Ryan Marcellino
26e6aae8d4 new package: py-pytest-asyncio (#31040) 2022-06-08 11:31:31 -07:00
Manuela Kuhn
d6fabd1533 py-glmsingle: add new package (#31043) 2022-06-08 10:03:18 -07:00
Massimiliano Culpo
d245c46487 bootstrap: account for disabled sources (#31042)
* bootstrap: account for disabled sources

Fix a bug introduced in #30192, which effectively skips
any prescription on disabled bootstrapping sources.

* Add unit test to avoid regression
2022-06-08 07:17:37 -06:00
Adam J. Stewart
3eba28e383 OpenCV: add v4.6.0 (#31022) 2022-06-08 14:31:55 +02:00
Adam J. Stewart
0d91cb58dc py-pympler: add v1.0.1 (#31031) 2022-06-08 14:27:56 +02:00
Adam J. Stewart
5f55abeecb Python: add v3.10.5 (#31039) 2022-06-08 14:22:51 +02:00
psakievich
c3c2416672 Nalu-Wind: allow for lowest order infinity version (#31036)
This will allow us to pin trilinos in our repo
2022-06-08 14:22:10 +02:00
Adam J. Stewart
9e2bc41e45 libtiff: add v4.4.0 (#31008) 2022-06-07 15:49:56 -06:00
Axel Huebl
8f80c5e6f7 openPMD-api: 0.14.5 (#31023)
Add the latest release.
2022-06-07 14:32:43 -07:00
Erik Schnetter
a5e1367882 meson: add version 0.62.2 (#31005) 2022-06-07 15:13:40 -06:00
Peter Scheibel
c724e26ba9 Staging: determine extensions from nonstandard URLs (#31027)
Fixes #31021

With #25185, we no longer default to using tar when we can't
determine the extension type, opting to fail instead.

This broke fetching for the pcre package, where we couldn't determine
the extension. To determine the extension, we were attempting to
extract it from the destination filename; however, this file name
may omit details of the origin URL that are required to determine the
extension, so instead we examine the URL directly.

This also updates the decompressor_for method not to set ext=None
by default: it must now always be set by the caller.
2022-06-07 14:12:08 -07:00
Glenn Johnson
1b9a1992fb Update Spack Bioconductor packages to Bioconductor 3.15 (#30984) 2022-06-07 20:10:01 +02:00
Graeme A Stewart
815764bdef Update prmon recipe, v3.0.2 (#30979)
* Update prmon recipe, v3.0.2

Update recipe to v3.0.2, using external dependency
option for the build (as these are satisfied so easily with Spack)

* Remove "broken" 3.0.1 version

This one could not build properly with Spack, due to
missing submodule sources
2022-06-07 17:17:25 +00:00
Bitllion
adf073b53c Add New Package:PSCMC (#30944)
* add some new version of abacus and fix bug on mkl

* Add Package:PSCMC

* update maintainer

* rebase

* update maintainers

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-07 10:11:14 -07:00
Axel Huebl
449e885d4c WarpX: 22.06 (#31012)
* WarpX: 22.06

Update `warpx` & `py-warpx` to the latest release, `22.06`.

* Patch: Fix 1D CUDA Builds
2022-06-07 09:49:35 -06:00
Brice Videau
560472ce3a Fix py-deap py-setuptools dependency (#31014) 2022-06-07 08:57:44 -06:00
Brice Videau
0c66446437 Add py-ytopt-autotune version v1.0.0 (#31015) 2022-06-07 08:49:44 -06:00
Massimiliano Culpo
6b4b1dacd9 docs: update the list of Docker images with Spack preinstalled (#31003)
Also, update the image in the docs and use ghcr.io
2022-06-07 16:43:04 +02:00
Gregory Lee
3e90134e14 json-glib depends on gobject-introspection (#30963) 2022-06-07 08:29:38 -06:00
Asher Mancinelli
4ad0594c7b fd: add new package (#31010) 2022-06-07 08:21:59 -06:00
kwryankrattiger
f13b760f10 Visit: Allow building without rendering (#31006)
This is important for HPC systems.
2022-06-07 08:21:36 -06:00
Carlos Bederián
0f6fb1a706 gmsh: +petsc requires ~int64 variant (#30969) 2022-06-07 16:21:07 +02:00
Jordan Galby
e74d85a524 Fix empty install prefix post-install sanity check (#30983) 2022-06-07 16:17:33 +02:00
Glenn Johnson
ffd63c5de1 R ecosystem: cran updates (#31004) 2022-06-07 16:12:51 +02:00
Axel Huebl
ed263615d7 AMReX: update the CMake requirements for v22.06+ (#31018) 2022-06-07 16:01:13 +02:00
Morten Kristensen
b4e775a11a py-vermin: add latest version 1.4.0 (#31009) 2022-06-07 06:09:39 -06:00
Mosè Giordano
6a2844fdee libint: add Python as build dependency (#30870)
Installation process of libint runs a Python script:
<69cc7b9bc6/export/cmake/CMakeLists.txt.export (L410)>.
If Python isn't explicitly listed as build dependency, system Python will be
picked up, which can cause troubles.
2022-06-07 06:01:53 -06:00
Manuela Kuhn
44d670a8ce git-annex: fix source urls (#30789) 2022-06-07 05:45:40 -06:00
Massimiliano Culpo
4a0ac87d07 archspec: bump to v0.1.4 (#30856)
Fixes compiler flags for oneapi and dpcpp
2022-06-07 08:51:34 +00:00
Michael Kuhn
2c6898c717 glib: add v2.72.2 (#31001) 2022-06-07 02:45:51 -06:00
Brice Videau
0a8083c604 Fix py-ray dependencies and build system (#31016)
* Fix py-ray dependencies and build system

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

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

* Added documentation for unusual dependencies.

* Fixed npm preinstall script per @adamjstewart suggestion.

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2022-06-07 01:36:24 +00:00
John W. Parent
5b45df5269 Update decompression support on Windows (#25185)
Most package installations include compressed source files. This
adds support for common archive types on Windows:

* Add support for using system 7zip functionality to decompress .Z
  files when available (and on Windows, use 7zip for .xz archives)
* Default to using built-in Python support for tar/bz2 decompression
  (note that Python tar documentation mentions preservation of file
  permissions)
* Add tests for decompression support
* Extract logic for handling exploding archives (i.e. compressed
  archives that expand to more than one base file) into an
  exploding_archive_catch context manager in the filesystem module
2022-06-06 18:14:43 -07:00
Chuck Atkins
9d7cc43673 Package: Don't warn for missing source on bundle packages without code (#30913) 2022-06-06 15:33:03 -07:00
miheer vaidya
932065beca Update package rtags (#30890)
* Update backage bear

Newer versions of rtags aren't available via older url

* Fix sha256 as download link has changed

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-06 15:30:35 -07:00
Massimiliano Culpo
360192cbfe atompow: remove again misplaced duplicate package (#30992)
Regression re-introduced in #30404
2022-06-06 14:59:22 -07:00
Jen Herting
7bc349c041 New package: py-numpy-quaternion (#29452)
* first build of numpy-quaternion and spherical-functions

* [py-numpy-quaternion] removed python restriction

* [py-numpy-quaternion] added scipy and numba variants

* [py-numpy-quaternion] fixing unicode

Co-authored-by: Sid Pendelberry <sid@rit.edu>
2022-06-06 14:42:33 -07:00
Jen Herting
603ec40ab1 [py-httpx] added version 0.22.0 (#29806)
* [py-httpx] python dependencies are type=('build', 'run')

* [py-httpx] py-wheel is now implied by PythonPackage

* [py-httpx] fixed older version dependencies

* [py-httpx] added version 0.22.0
2022-06-06 14:34:11 -07:00
renjithravindrankannath
ed6695b9c9 Correcting library path of hsakmt-roct for Centos7 and cleaning up the patch file. (#30885)
* Correcting library path of hsakmt-roct and cleaning up the patch file.

* Delete 007-library-path.patch
2022-06-06 13:50:41 -07:00
Adam J. Stewart
fb173f80b2 py-torchmetrics: add v0.9.0 (#31000) 2022-06-06 16:28:11 +02:00
Ye Luo
15d4262b9b quantum-espresso: no need of patch and hdf5 is optional for pw2qmcpack (#30884) 2022-06-06 15:47:10 +02:00
Daniel Arndt
7116fb1b70 Kokkos SYCL AOT flags (#30723)
* Kokkos SYCL AOT flags

* Improve selecting the Intel GPU arch
2022-06-06 15:41:13 +02:00
Adam J. Stewart
9b713fa6a6 py-black: new version/variants/maintainer (#30999) 2022-06-06 07:09:39 -06:00
Adam J. Stewart
8d4a5cb247 GCC: add Apple M1 support (#30825)
Co-authored-by: Seth R. Johnson <johnsonsr@ornl.gov>
2022-06-06 14:46:43 +02:00
Filippo Spiga
bf2d44c87e nvhpc: add v22.5 (#30845) 2022-06-06 14:44:39 +02:00
Brian Van Essen
926e311f3c dihydrogen: propagate cuda_arch to nvshmem (#30886) 2022-06-06 14:38:58 +02:00
Simon Pintarelli
8ef937032c quantum-espresso: support libxc also for autotools build (#30895) 2022-06-06 14:26:07 +02:00
Erik
73ce789390 amrvis: add configuration file and default color palette (#30942) 2022-06-06 14:01:57 +02:00
Jianshen Liu
e4f3cfcc3a cppcheck: add v2.8 (#30993) 2022-06-06 13:42:42 +02:00
Erik Schnetter
7ac05485c6 cmake: New version 3.23.2 (#30994) 2022-06-05 14:01:18 +02:00
John W. Parent
13b0e73a4e Sanitize filepath from URL (#30625)
Spack's staging logic constructs a file path based on a URL. The URL
may contain characters which are not allowed in valid file paths on
the system (e.g. Windows prohibits ':' and '?' among others). This
commit adds a function to remove such offending characters (but
otherwise preserves the URL string when constructing a file path).
2022-06-04 15:06:43 -07:00
Tom Scogland
03c54aebdd luajit: use GC64 on darwin (#30971) 2022-06-04 14:44:45 +02:00
G-Ragghianti
f4a4b3fa87 Intel oneAPI DPCPP compatibility toolkit: add new package (#30986) 2022-06-04 14:31:41 +02:00
Adam J. Stewart
6b3607287a py-botorch: add new package (#30989) 2022-06-04 14:29:33 +02:00
Carlos Bederián
b4b2585d67 protobuf: patch build error when @3.20 %gcc@12.1.0 (#30973) 2022-06-03 21:32:13 +02:00
Satish Balay
29855ae31e petsc, py-petsc4py: add 3.17.2 (#30982) 2022-06-03 09:39:52 -07:00
Michael Kuhn
44b9efa132 rocksdb: add 7.2.2 (#30977) 2022-06-03 08:56:28 -07:00
Michael Kuhn
f21e26b904 doxygen: add 1.9.4 (#30975) 2022-06-03 08:54:34 -07:00
Jacob Merson
73865c38f9 Include new versions of model-traits package (#30972) 2022-06-03 08:51:43 -07:00
Martin Diehl
38ccefbe84 mpicxx does not work with icpx (#30098) 2022-06-03 08:40:02 -07:00
Adam J. Stewart
1bd33d88bd py-protobuf: pin dependents to @:3 (#30880) 2022-06-03 00:32:02 -04:00
Seth R. Johnson
67ad23cc11 geant4: enable building against spack-built geant outside of spack (#30936) 2022-06-02 21:09:41 -06:00
Adam J. Stewart
8640b50258 Rust: Apple M1 support (#30823) 2022-06-02 20:57:40 -04:00
Adam J. Stewart
043cc688ef py-torch: fix Apple M1 support (#30833) 2022-06-02 20:51:18 -04:00
Adam J. Stewart
e52527029a OpenJDK: fix Apple M1 support (#30826) 2022-06-02 20:48:55 -04:00
Alex Hedges
a7d2f76ac5 git: add v2.36.1 (#30966) 2022-06-02 13:21:37 -07:00
Derek Ryan Strong
fbb134b1af Add lftp 4.9.2 (#30967) 2022-06-02 19:34:46 +00:00
Bitllion
548e9ae88c Abacus (#30933)
* add pacakge: abacus

* rename

* fix some style bugs

* update package:abacus

* fix some style bugs

* format code

* Delete a line of useless comments

* updatee abacus

* Update package.py

add new version info and fix a bug on mkl

* update version info and fix a bug on mkl

* Update package.py

* fix style bugs

* trailing whitespace
2022-06-02 12:09:53 -07:00
Adam J. Stewart
5728ba0122 Use stable URLs for patch-diff GitHub patches (#30953) 2022-06-02 12:52:05 -04:00
Adam J. Stewart
2bda10edb5 Fix typo in GitHub Actions step name (#30924) 2022-06-02 16:33:39 +00:00
miheer vaidya
bd15ca4f16 Update bear to v3.0.0 (#30835) 2022-06-02 09:31:10 -07:00
Jakub Krajniak
f9dfd5fcb8 Add flag to enable WRF-Chem module (#30950)
* Add flag to enable WRF-Chem module

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

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>

* Set chem variant only for v4+

Co-authored-by: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com>
2022-06-02 09:11:45 -07:00
Glenn Johnson
f3c4e1adbb texlive: add 20220321 distribution (#30955) 2022-06-02 09:05:24 -07:00
Seth R. Johnson
b2d3ed9096 pmix: add explicit hwloc dependency (#30897)
pmix@:2 uses hwloc if it's available (e.g. in homebrew) which can break
the installation.
2022-06-02 14:47:53 +02:00
Mikael Simberg
dac5fec255 Add pika 0.5.0 (#30960) 2022-06-02 13:56:05 +02:00
Axel Huebl
9784b8f926 Prepare: openPMD-api 0.15.0-dev (#29484)
Anticipate openPMD-api changes in the next major release that are
already in `dev` (aka Spack `develop`):
- C++17 requirement
- drop: `mpark-variant` public dependency
- add: `toml11` private dependency

Also add @franzpoeschel as co-maintainer for the Spack package.
2022-06-01 19:13:33 -06:00
Axel Huebl
adef8f6ca7 WarpX: Patch no-MPI & Lib Install (#30866)
Fixes WarpX issues:
- https://github.com/ECP-WarpX/WarpX/pull/3134
- https://github.com/ECP-WarpX/WarpX/pull/3141

and uses GitHub patch URLs directly instead of storing
patch copies.
2022-06-01 18:49:25 -06:00
Larry Knox
c36f15e29e hdf5: new version version 1.10.9 (#30903) 2022-06-01 16:37:37 -06:00
Carlos Bederián
03531ed904 openmpi: add 4.1.4 (#30947) 2022-06-01 16:21:38 -06:00
Carlos Bederián
54332b2d83 python: add 3.9.13 (#30948) 2022-06-01 15:37:31 -06:00
Xavier Delaruelle
165f42b7ce environment-modules: add version 5.1.1 (#30946) 2022-06-01 12:17:48 -06:00
Sreenivasa Murthy Kolam
1190d03b0f Bump up the version for ROCm-5.1.3 release (#30819)
* Bump up the version for ROCm-5.1.3 release

* remove extra comma from hashes for device-libs of rocm-openmp-extras
2022-06-01 10:57:10 -07:00
kwryankrattiger
5faa927fe6 Ascent: Patch find conduit python (#30949)
Some systems have trouble when using the python on the login node so
this should provide an option to build that doesn't require running
python.
2022-06-01 10:36:33 -07:00
Adam J. Stewart
c60d220f81 py-jupyterlab: add v3.4.2 (#30867) 2022-06-01 10:18:47 -07:00
Hartmut Kaiser
61d3d60414 Update HPX recipe for HPX V1.8.0 (#30896) 2022-06-01 11:06:03 -06:00
rashawnLK
174258c09a Updated intel-gtpin package.py for most recent version, GTPin 3.0. (#30877)
* Updated intel-gtpin package.py for  most recent version, GTPin 3.0.

* Fixed style issues in package.py -- removed trailing whitespace on two
lines.
2022-06-01 11:05:41 -06:00
Erik
73c6a8f73d Version updates for SUNDIALS and CUDA (#30874) 2022-06-01 11:01:32 -06:00
Olivier Cessenat
86dc904080 ngspice: adding version 37 (#30925) 2022-06-01 10:50:02 -06:00
Weiqun Zhang
9e1c87409d amrex: add v22.06 (#30951) 2022-06-01 10:49:46 -06:00
Sergey Kosukhin
2b30dc2e30 nag: add new version (#30927)
* nag: add new version

* nag: update maintainers
2022-06-01 10:49:32 -06:00
Ben Darwin
b1ce756d69 minc-toolkit: add version 1.9.18.2 (#30926) 2022-06-01 10:45:34 -06:00
Ida Mjelde
1194ac6985 Adding a libunwind variant to libzmq (#30932)
* Adding a libunwind variant to libzmq

* Remove whitespace line 46
2022-06-01 10:29:56 -06:00
Asher Mancinelli
954f961208 tmux: support building from master and utf8 opts (#30928)
* tmux: support building from master and utf8 opts

* Fix style errors
2022-06-01 10:29:35 -06:00
Zack Galbreath
47ac710796 CPU & memory requests for jobs that generate GitLab CI pipelines (#30940)
gitlab ci: make sure pipeline generation isn't resource starved
2022-06-01 09:43:23 -06:00
Derek Ryan Strong
d7fb5a6db4 rclone: add 1.58 (#30887)
* Add rclone 1.58

* Update rclone git repo path
2022-05-31 19:35:12 -07:00
Maciej Wójcik
e0624b9278 gromacs: Add recent releases (#30892)
* gromacs: Add recent releases

* gromacs: Update branch name

* gromacs: Update links
2022-05-31 19:27:23 -07:00
Olivier Cessenat
e86614f7b8 gmsh: adding version 4.10.3 (#30923) 2022-05-31 18:53:03 -07:00
Garth N. Wells
d166b948ce fenics-dolfinx: dependency updates (#30919)
* Add pugixml dependency

* Dependency updates

* Fix Spack Numpy verion

* Test more generous NumPy constraint

* Fix NumPy requirment
2022-05-31 18:49:49 -07:00
lorddavidiii
9cc3a2942d cfitsio: add 4.1.0 (#30920) 2022-05-31 18:46:07 -07:00
Marie Houillon
5d685f9ff6 New version for openCARP packages (#30931)
Co-authored-by: openCARP consortium <info@opencarp.org>
2022-05-31 18:21:55 -07:00
Paul Kuberry
9ddf45964d xyce: add sha for version 7.5.0 (#30941) 2022-05-31 17:59:13 -07:00
iarspider
b88cc77f16 xpmem package: add patches for building on FC 35 with kernel 5.16.18-200 (#29945) 2022-05-31 15:55:51 -07:00
Robert Cohn
f3af38ba9b Fix module support for oneapi compilers (#28901)
Updates to improve Spack-generated modules for Intel oneAPI compilers:

* intel-oneapi-compilers set CC etc.
* Add a new package intel-oneapi-compilers-classic which can be used to
  generate a module which sets CC etc. to older compilers (e.g. icc)
* lmod module logic now updated to treat the intel-oneapi-compilers*
  packages as compilers
2022-05-31 15:02:25 -07:00
Wouter Deconinck
adc9f887ea acts-dd4hep: new package; acts: new version (#30850)
* acts-dd4hep: new package, separated from new acts@19.1.0

* acts-dd4hep: improved versioning

* acts-dd4hep: don't use curl | sha256sum

* acts: new variant `odd` for Open Data Detector

* acts-dd4hep: style changes
2022-05-31 11:30:36 -07:00
Wouter Deconinck
9461f482d9 assimp: new version 5.2.4 (#30929) 2022-05-31 12:25:24 -06:00
Paul Kuberry
e014b889c6 xyce: remove python packages as +pymi dependencies and hdf5 from trilinos dependency (#30938) 2022-05-31 14:04:57 -04:00
snehring
181ac574bb sentieon-genomics: adding version 202112.04 (#30876) 2022-05-31 10:05:27 -06:00
Adam J. Stewart
055c9d125d CUDA: make cuda_arch sticky (#30910) 2022-05-30 12:53:15 -07:00
Evan Bollig
a94438b1f5 Added AWS-AHUG alinux2 pipeline (#24601)
Add spack stacks targeted at Spack + AWS + ARM HPC User Group hackathon.  Includes
a list of miniapps and full-apps that are ready to run on both x86_64 and aarch64.

Co-authored-by: Scott Wittenburg <scott.wittenburg@kitware.com>
2022-05-30 10:26:39 -06:00
Joseph Wang
f583e471b8 pass CC variable to make (#30912)
Set CC to cc
2022-05-30 08:44:31 +02:00
Brian Van Essen
f67f3b1796 Add new versions of protobuf and py-protobuf (#30503)
* Add new versions

* Updated the hashes to match the published pypi.org hashes.  Added version constraints for Python.
2022-05-30 01:23:26 -05:00
Jean Luca Bez
77c86c759c HDF5 VOL-ASYNC update versions (#30900) 2022-05-29 17:49:52 -04:00
Adam J. Stewart
8084259bd3 protobuf: fix spack versions (#30879) 2022-05-28 14:53:24 -06:00
Evan Bollig
98860c6a5f Alinux isc buildcache (#30462)
Add two new stacks targeted at x86_64 and arm, representing an initial list of packages 
used by current and planned AWS Workshops, and built in conjunction with the ISC22
announcement of the spack public binary cache.

Co-authored-by: Scott Wittenburg <scott.wittenburg@kitware.com>
2022-05-28 11:32:53 -06:00
Todd Gamblin
e6929b9ff9 0.18.0.dev0 -> 0.19.0.dev0 (#30907) 2022-05-28 17:23:01 +00:00
Tom Scogland
18c2f1a57a refactor: packages import spack.package explicitly (#30404)
Explicitly import package utilities in all packages, and corresponding fallout.

This includes:

* rename `spack.package` to `spack.package_base`
* rename `spack.pkgkit` to `spack.package`
* update all packages in builtin, builtin_mock and tutorials to include `from spack.package import *`
* update spack style
  * ensure packages include the import
  * automatically add the new import and remove any/all imports of `spack` and `spack.pkgkit`
    from packages when using `--fix`
  * add support for type-checking packages with mypy when SPACK_MYPY_CHECK_PACKAGES
    is set in the environment
* fix all type checking errors in packages in spack upstream
* update spack create to include the new imports
* update spack repo to inject the new import, injection persists to allow for a deprecation period

Original message below:
 
As requested @adamjstewart, update all packages to use pkgkit.  I ended up using isort to do this,
so repro is easy:

```console
$ isort -a 'from spack.pkgkit import *' --rm 'spack' ./var/spack/repos/builtin/packages/*/package.py
$ spack style --fix
```

There were several line spacing fixups caused either by space manipulation in isort or by packages
that haven't been touched since we added requirements, but there are no functional changes in here.

* [x] add config to isort to make sure this is maintained going forward
2022-05-28 12:55:44 -04:00
Todd Gamblin
3054cd0eff update changelog for v0.18.0 (#30905) 2022-05-28 17:33:20 +02:00
JDBetteridge
9016b79270 Additional BLAS/LAPACK library configuration for Numpy (#30817)
* Add amdblis and amdlibflame as BLAS/LAPACK options

* Add Cray-libsci as BLAS/LAPACK option

* Use Netlib config for Cray-libsci
2022-05-28 03:33:31 -06:00
Erik Schnetter
9f5c6fb398 hpx: New version 1.8.0 (#30848) 2022-05-28 09:40:20 +02:00
Greg Becker
19087c9d35 target optimization: re-norm optimization scale so that 0 is best. (#29926)
referred targets are currently the only minimization criteria for Spack for which we allow
negative values. That means Spack may be incentivized to add nodes to the DAG if they
match the preferred target.

This PR re-norms the minimization criteria so that preferred targets are weighted from 0,
and default target weights are offset by the number of preferred targets per-package to
calculate node_target_weight.

Also fixes a bug in the test for preferred targets that was making the test easier to pass
than it should be.
2022-05-27 22:49:41 -07:00
Greg Becker
4116b04368 update tutorial command for v0.18.0 and new gpg key (#30904) 2022-05-28 02:36:20 +00:00
JDBetteridge
1485931695 Ensure same BLAS/LAPACK config from Numpy used in Scipy (#30818)
* Call Numpy package's set_blas_lapack() and setup_build_environment() in Scipy package

* Remove broken link from comment

* Use .package attribute of spec to avoid import
2022-05-27 10:46:21 -07:00
Derek Ryan Strong
78cac4d840 Add R 4.2.0 (#30859) 2022-05-27 08:24:28 -05:00
Michael Kuhn
2f628c3a97 gcc: add 9.5.0 (#30893) 2022-05-27 12:18:57 +02:00
Adam J. Stewart
a3a8710cbe Python: fix clingo bootstrapping on Apple M1 (#30834)
This PR fixes several issues I noticed while trying to get Spack working on Apple M1.

- [x] `build_environment.py` attempts to add `spec['foo'].libs` and `spec['foo'].headers` to our compiler wrappers for all dependencies using a try-except that ignores `NoLibrariesError` and `NoHeadersError` respectively. However, The `libs` and `headers` attributes of the Python package were erroneously using `RuntimeError` instead.
- [x] `spack external find python` (used during bootstrapping) currently has no way to determine whether or not an installation is `+shared`, so previously we would only search for static Python libs. However, most distributions including XCode/Conda/Intel ship shared Python libs. I updated `libs` to search for both shared and static (order based on variant) as a fallback.
- [x] The `headers` attribute was recursively searching in `prefix.include` for `pyconfig.h`, but this could lead to non-deterministic behavior if multiple versions of Python are installed and `pyconfig.h` files exist in multiple `<prefix>/include/pythonX.Y` locations. It's safer to search in `sysconfig.get_path('include')` instead.
- [x] The Python installation that comes with XCode is broken, and `sysconfig.get_paths` is hard-coded to return specific directories. This meant that our logic for `platlib`/`purelib`/`include` where we replace `platbase`/`base`/`installed_base` with `prefix` wasn't working and the `mkdirp` in `setup_dependent_package` was trying to create a directory in root, giving permissions issues. Even if you commented out those `mkdirp` calls, Spack would add the wrong directories to `PYTHONPATH`. Added a fallback hard-coded to `lib/pythonX.Y/site-packages` if sysconfig is broken (this is what distutils always did).
2022-05-27 03:18:20 -07:00
Paul R. C. Kent
0bf3a9c2af llvm: 14.0.3 and 14.0.4 (#30888) 2022-05-27 09:51:54 +02:00
Severin Strobl
cff955f7bd otf2/scorep: add versions 3.0/7.1 (#28631) 2022-05-27 00:43:58 +02:00
Scott Wittenburg
3d43ebec72 Revert "strip -Werror: all specific or none (#30284)" (#30878)
This reverts commit 330832c22c.
2022-05-26 14:17:01 -07:00
Robert Pavel
6fd07479e3 Updated mfem constraints in laghos spackage (#30851)
Updated mfme constraints in laghos spackage to better match comments and
support legacy builds of `laghos@1.0:2.0`
2022-05-26 10:20:42 -07:00
Simon Pintarelli
03bc36f8b0 q-e-sirius: remove ~apps constraint (#30857) 2022-05-26 10:18:37 -07:00
Brian Van Essen
93e1b283b7 Added hash for new versions (#30860) 2022-05-26 10:15:59 -07:00
Derek Ryan Strong
df2c0fbfbd Add new versions of GNU parallel (#30862) 2022-05-26 10:09:43 -07:00
Derek Ryan Strong
54a69587c3 Add newer nano versions (#30865) 2022-05-26 10:04:50 -07:00
Hans Johansen
294312f02b Adding new package bricks for x86, cuda (#30863)
* Adding new package bricks for x86, cuda

* Fixed complaints from "spack style" that CI found

* add license comment at top

Co-authored-by: drhansj <drhansj@berkeley.edu>
Co-authored-by: eugeneswalker <38933153+eugeneswalker@users.noreply.github.com>
2022-05-26 07:40:11 -07:00
Massimiliano Culpo
0636fdbfef Remove the warning that Spack prints at each spec (#30872)
Add instead a warning box in the documentation
2022-05-26 14:35:20 +00:00
Scott Wittenburg
85e13260cf ci: Support secure binary signing on protected pipelines (#30753)
This PR supports the creation of securely signed binaries built from spack
develop as well as release branches and tags. Specifically:

- remove internal pr mirror url generation logic in favor of buildcache destination
on command line
    - with a single mirror url specified in the spack.yaml, this makes it clearer where 
    binaries from various pipelines are pushed
- designate some tags as reserved: ['public', 'protected', 'notary']
    - these tags are stripped from all jobs by default and provisioned internally
    based on pipeline type
- update gitlab ci yaml to include pipelines on more protected branches than just
develop (so include releases and tags)
    - binaries from all protected pipelines are pushed into mirrors including the
    branch name so releases, tags, and develop binaries are kept separate
- update rebuild jobs running on protected pipelines to run on special runners
provisioned with an intermediate signing key
    - protected rebuild jobs no longer use "SPACK_SIGNING_KEY" env var to
    obtain signing key (in fact, final signing key is nowhere available to rebuild jobs)
    - these intermediate signatures are verified at the end of each pipeline by a new
    signing job to ensure binaries were produced by a protected pipeline
- optionallly schedule a signing/notary job at the end of the pipeline to sign all
packges in the mirror
    - add signing-job-attributes to gitlab-ci section of spack environment to allow
    configuration
    - signing job runs on special runner (separate from protected rebuild runners)
    provisioned with public intermediate key and secret signing key
2022-05-26 08:31:22 -06:00
Adam J. Stewart
b5a519fa51 py-tensorboard: add v2.9.0 (#30832) 2022-05-26 07:43:40 -04:00
Adam J. Stewart
2e2d0b3211 libtiff: remove extra dependencies/patch (#30854) 2022-05-25 23:37:45 -06:00
7733 changed files with 233383 additions and 181389 deletions

45
.flake8
View File

@@ -1,43 +1,25 @@
# -*- conf -*-
# flake8 settings for Spack core files.
# flake8 settings for Spack.
#
# These exceptions are for Spack core files. We're slightly more lenient
# with packages. See .flake8_packages for that.
#
# E1: Indentation
# - E129: visually indented line with same indent as next logical line
#
# E2: Whitespace
# - E221: multiple spaces before operator
# - E241: multiple spaces after ','
# - E272: multiple spaces before keyword
#
# E7: Statement
# This is the only flake8 rule Spack violates somewhat flagrantly
# - E731: do not assign a lambda expression, use a def
#
# W5: Line break warning
# - W503: line break before binary operator
# - W504: line break after binary operator
#
# These are required to get the package.py files to test clean:
# - F999: syntax error in doctest
#
# N8: PEP8-naming
# - N801: class names should use CapWords convention
# - N813: camelcase imported as lowercase
# - N814: camelcase imported as constant
#
# F4: pyflakes import checks, these are now checked by mypy more precisely
# - F403: from module import *
# - F405: undefined name or from *
#
# Black ignores, these are incompatible with black style and do not follow PEP-8
# This is the only flake8 exception needed when using Black.
# - E203: white space around slice operators can be required, ignore : warn
# - W503: see above, already ignored for line-breaks
#
# We still allow these in packages (Would like to get rid of them or rely on mypy
# in the future)
# - F403: from/import * used; unable to detect undefined names
# - F405: undefined name or from *
# - F821: undefined name (needed with from/import *)
#
[flake8]
ignore = E129,E221,E241,E272,E731,W503,W504,F999,N801,N813,N814,F403,F405
max-line-length = 88
#ignore = E129,,W503,W504,F999,N801,N813,N814,F403,F405,E203
extend-ignore = E731,E203
max-line-length = 99
# F4: Import
# - F405: `name` may be undefined, or undefined from star imports: `module`
@@ -46,7 +28,8 @@ max-line-length = 88
# - F821: undefined name `name`
#
per-file-ignores =
var/spack/repos/*/package.py:F405,F821
var/spack/repos/*/package.py:F403,F405,F821
*-ci-package.py:F403,F405,F821
# exclude things we usually do not want linting for.
# These still get linted when passed explicitly, as when spack flake8 passes

3
.git-blame-ignore-revs Normal file
View File

@@ -0,0 +1,3 @@
# .git-blame-ignore-revs
# Formatted entire codebase with black
f52f6e99dbf1131886a80112b8c79dfc414afb7c

62
.github/ISSUE_TEMPLATE/test_error.yml vendored Normal file
View File

@@ -0,0 +1,62 @@
name: "\U0001F4A5 Tests error"
description: Some package in Spack had stand-alone tests that didn't pass
title: "Testing issue: "
labels: [test-error]
body:
- type: textarea
id: reproduce
attributes:
label: Steps to reproduce the failure(s) or link(s) to test output(s)
description: |
Fill in the test output from the exact spec that is having stand-alone test failures. Links to test outputs (e.g., CDash) can also be provided.
value: |
```console
$ spack spec -I <spec>
...
```
- type: textarea
id: error
attributes:
label: Error message
description: |
Please post the error message from spack inside the `<details>` tag below:
value: |
<details><summary>Error message</summary><pre>
...
</pre></details>
validations:
required: true
- type: textarea
id: information
attributes:
label: Information on your system or the test runner
description: Please include the output of `spack debug report` for your system.
validations:
required: true
- type: markdown
attributes:
value: |
If you have any relevant configuration detail (custom `packages.yaml` or `modules.yaml`, etc.) you can add that here as well.
- type: textarea
id: additional_information
attributes:
label: Additional information
description: |
Please upload test logs or any additional information about the problem.
- type: markdown
attributes:
value: |
Some packages have maintainers who have volunteered to debug build failures. Run `spack maintainers <name-of-the-package>` and **@mention** them here if they exist.
- type: checkboxes
id: checks
attributes:
label: General information
options:
- label: I have reported the version of Spack/Python/Platform/Runner
required: true
- label: I have run `spack maintainers <name-of-the-package>` and **@mentioned** any maintainers
required: true
- label: I have uploaded any available logs
required: true
- label: I have searched the issues of this repo and believe this is not a duplicate
required: true

44
.github/workflows/audit.yaml vendored Normal file
View File

@@ -0,0 +1,44 @@
name: audit
on:
workflow_call:
inputs:
with_coverage:
required: true
type: string
python_version:
required: true
type: string
concurrency:
group: audit-${{inputs.python_version}}-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
# Run audits on all the packages in the built-in repository
package-audits:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: ${{inputs.python_version}}
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools pytest codecov 'coverage[toml]<=6.2'
- name: Package audits (with coverage)
if: ${{ inputs.with_coverage == 'true' }}
run: |
. share/spack/setup-env.sh
coverage run $(which spack) audit packages
coverage combine
coverage xml
- name: Package audits (without coverage)
if: ${{ inputs.with_coverage == 'false' }}
run: |
. share/spack/setup-env.sh
$(which spack) audit packages
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # @v2.1.0
if: ${{ inputs.with_coverage == 'true' }}
with:
flags: unittests,linux,audits

7
.github/workflows/bootstrap-test.sh vendored Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
set -ex
source share/spack/setup-env.sh
$PYTHON bin/spack bootstrap untrust spack-install
$PYTHON bin/spack -d solve zlib
tree $BOOTSTRAP/store
exit 0

View File

@@ -3,28 +3,19 @@ name: Bootstrapping
on:
# This Workflow can be triggered manually
workflow_dispatch:
pull_request:
branches:
- develop
- releases/**
paths-ignore:
# Don't run if we only modified packages in the
# built-in repository or documentation
- 'var/spack/repos/builtin/**'
- '!var/spack/repos/builtin/packages/clingo-bootstrap/**'
- '!var/spack/repos/builtin/packages/python/**'
- '!var/spack/repos/builtin/packages/re2c/**'
- 'lib/spack/docs/**'
workflow_call:
schedule:
# nightly at 2:16 AM
- cron: '16 2 * * *'
jobs:
concurrency:
group: bootstrap-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
fedora-clingo-sources:
runs-on: ubuntu-latest
container: "fedora:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
run: |
@@ -33,7 +24,9 @@ jobs:
make patch unzip which xz python3 python3-devel tree \
cmake bison bison-devel libstdc++-static
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup non-root user
run: |
# See [1] below
@@ -44,7 +37,6 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap clingo
shell: runuser -u spack-test -- bash {0}
@@ -58,7 +50,6 @@ jobs:
ubuntu-clingo-sources:
runs-on: ubuntu-latest
container: "ubuntu:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
env:
@@ -70,7 +61,9 @@ jobs:
make patch unzip xz-utils python3 python3-dev tree \
cmake bison
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup non-root user
run: |
# See [1] below
@@ -81,7 +74,6 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap clingo
shell: runuser -u spack-test -- bash {0}
@@ -95,7 +87,6 @@ jobs:
ubuntu-clingo-binaries-and-patchelf:
runs-on: ubuntu-latest
container: "ubuntu:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
env:
@@ -106,7 +97,9 @@ jobs:
bzip2 curl file g++ gcc gfortran git gnupg2 gzip \
make patch unzip xz-utils python3 python3-dev tree
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup non-root user
run: |
# See [1] below
@@ -117,7 +110,6 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap clingo
shell: runuser -u spack-test -- bash {0}
@@ -129,7 +121,6 @@ jobs:
opensuse-clingo-sources:
runs-on: ubuntu-latest
container: "opensuse/leap:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
run: |
@@ -140,13 +131,14 @@ jobs:
make patch unzip which xz python3 python3-devel tree \
cmake bison
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup repo
run: |
# See [1] below
git config --global --add safe.directory /__w/spack/spack
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap clingo
run: |
@@ -158,13 +150,12 @@ jobs:
macos-clingo-sources:
runs-on: macos-latest
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
run: |
brew install cmake bison@2.7 tree
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
- name: Bootstrap clingo
run: |
source share/spack/setup-env.sh
@@ -175,55 +166,73 @@ jobs:
tree ~/.spack/bootstrap/store/
macos-clingo-binaries:
runs-on: macos-latest
runs-on: ${{ matrix.macos-version }}
strategy:
matrix:
python-version: ['3.5', '3.6', '3.7', '3.8', '3.9', '3.10']
if: github.repository == 'spack/spack'
macos-version: ['macos-11', 'macos-12']
steps:
- name: Install dependencies
run: |
brew install tree
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
with:
python-version: ${{ matrix.python-version }}
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
- name: Bootstrap clingo
run: |
source share/spack/setup-env.sh
spack bootstrap untrust spack-install
spack -d solve zlib
tree ~/.spack/bootstrap/store/
set -ex
for ver in '3.6' '3.7' '3.8' '3.9' '3.10' ; do
not_found=1
ver_dir="$(find $RUNNER_TOOL_CACHE/Python -wholename "*/${ver}.*/*/bin" | grep . || true)"
echo "Testing $ver_dir"
if [[ -d "$ver_dir" ]] ; then
if $ver_dir/python --version ; then
export PYTHON="$ver_dir/python"
not_found=0
old_path="$PATH"
export PATH="$ver_dir:$PATH"
./bin/spack-tmpconfig -b ./.github/workflows/bootstrap-test.sh
export PATH="$old_path"
fi
fi
# NOTE: test all pythons that exist, not all do on 12
done
ubuntu-clingo-binaries:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10']
if: github.repository == 'spack/spack'
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
python-version: ${{ matrix.python-version }}
fetch-depth: 0
- name: Setup repo
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap clingo
run: |
source share/spack/setup-env.sh
spack bootstrap untrust spack-install
spack -d solve zlib
tree ~/.spack/bootstrap/store/
set -ex
for ver in '2.7' '3.6' '3.7' '3.8' '3.9' '3.10' ; do
not_found=1
ver_dir="$(find $RUNNER_TOOL_CACHE/Python -wholename "*/${ver}.*/*/bin" | grep . || true)"
echo "Testing $ver_dir"
if [[ -d "$ver_dir" ]] ; then
if $ver_dir/python --version ; then
export PYTHON="$ver_dir/python"
not_found=0
old_path="$PATH"
export PATH="$ver_dir:$PATH"
./bin/spack-tmpconfig -b ./.github/workflows/bootstrap-test.sh
export PATH="$old_path"
fi
fi
if (($not_found)) ; then
echo Required python version $ver not found in runner!
exit 1
fi
done
ubuntu-gnupg-binaries:
runs-on: ubuntu-latest
container: "ubuntu:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
env:
@@ -234,7 +243,9 @@ jobs:
bzip2 curl file g++ gcc patchelf gfortran git gzip \
make patch unzip xz-utils python3 python3-dev tree
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup non-root user
run: |
# See [1] below
@@ -245,7 +256,6 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap GnuPG
shell: runuser -u spack-test -- bash {0}
@@ -258,7 +268,6 @@ jobs:
ubuntu-gnupg-sources:
runs-on: ubuntu-latest
container: "ubuntu:latest"
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
env:
@@ -270,7 +279,9 @@ jobs:
make patch unzip xz-utils python3 python3-dev tree \
gawk
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- name: Setup non-root user
run: |
# See [1] below
@@ -281,7 +292,6 @@ jobs:
shell: runuser -u spack-test -- bash {0}
run: |
git --version
git fetch --unshallow
. .github/workflows/setup_git.sh
- name: Bootstrap GnuPG
shell: runuser -u spack-test -- bash {0}
@@ -294,7 +304,6 @@ jobs:
macos-gnupg-binaries:
runs-on: macos-latest
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
run: |
@@ -302,7 +311,7 @@ jobs:
# Remove GnuPG since we want to bootstrap it
sudo rm -rf /usr/local/bin/gpg
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
- name: Bootstrap GnuPG
run: |
source share/spack/setup-env.sh
@@ -312,7 +321,6 @@ jobs:
macos-gnupg-sources:
runs-on: macos-latest
if: github.repository == 'spack/spack'
steps:
- name: Install dependencies
run: |
@@ -320,7 +328,7 @@ jobs:
# Remove GnuPG since we want to bootstrap it
sudo rm -rf /usr/local/bin/gpg
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
- name: Bootstrap GnuPG
run: |
source share/spack/setup-env.sh

View File

@@ -19,6 +19,10 @@ on:
release:
types: [published]
concurrency:
group: build_containers-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
deploy-images:
runs-on: ubuntu-latest
@@ -46,7 +50,7 @@ jobs:
if: github.repository == 'spack/spack'
steps:
- name: Checkout
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
- name: Set Container Tag Normal (Nightly)
run: |
@@ -85,10 +89,10 @@ jobs:
uses: docker/setup-qemu-action@8b122486cedac8393e77aa9734c3528886e4a1a8 # @v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@dc7b9719a96d48369863986a06765841d7ea23f6 # @v1
uses: docker/setup-buildx-action@c74574e6c82eeedc46366be1b0d287eff9085eb6 # @v1
- name: Log in to GitHub Container Registry
uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # @v1
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
with:
registry: ghcr.io
username: ${{ github.actor }}
@@ -96,13 +100,13 @@ jobs:
- name: Log in to DockerHub
if: github.event_name != 'pull_request'
uses: docker/login-action@49ed152c8eca782a232dede0303416e8f356c37b # @v1
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a # @v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build & Deploy ${{ matrix.dockerfile[0] }}
uses: docker/build-push-action@e551b19e49efd4e98792db7592c17c09b89db8d8 # @v2
uses: docker/build-push-action@c84f38281176d4c9cdb1626ffafcd6b3911b5d94 # @v2
with:
context: dockerfiles/${{ matrix.dockerfile[0] }}
platforms: ${{ matrix.dockerfile[1] }}

92
.github/workflows/ci.yaml vendored Normal file
View File

@@ -0,0 +1,92 @@
name: ci
on:
push:
branches:
- develop
- releases/**
pull_request:
branches:
- develop
- releases/**
concurrency:
group: ci-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
prechecks:
needs: [ changes ]
uses: ./.github/workflows/valid-style.yml
with:
with_coverage: ${{ needs.changes.outputs.core }}
audit-ancient-python:
uses: ./.github/workflows/audit.yaml
needs: [ changes ]
with:
with_coverage: ${{ needs.changes.outputs.core }}
python_version: 2.7
all-prechecks:
needs: [ prechecks ]
runs-on: ubuntu-latest
steps:
- name: Success
run: "true"
# Check which files have been updated by the PR
changes:
runs-on: ubuntu-latest
# Set job outputs to values from filter step
outputs:
bootstrap: ${{ steps.filter.outputs.bootstrap }}
core: ${{ steps.filter.outputs.core }}
packages: ${{ steps.filter.outputs.packages }}
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
if: ${{ github.event_name == 'push' }}
with:
fetch-depth: 0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721
id: filter
with:
# See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
# Don't run if we only modified packages in the
# built-in repository or documentation
filters: |
bootstrap:
- 'var/spack/repos/builtin/packages/clingo-bootstrap/**'
- 'var/spack/repos/builtin/packages/clingo/**'
- 'var/spack/repos/builtin/packages/python/**'
- 'var/spack/repos/builtin/packages/re2c/**'
- 'lib/spack/**'
- 'share/spack/**'
- '.github/workflows/bootstrap.yml'
- '.github/workflows/ci.yaml'
core:
- './!(var/**)/**'
packages:
- 'var/**'
# Some links for easier reference:
#
# "github" context: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context
# job outputs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs
# setting environment variables from earlier steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
#
bootstrap:
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.bootstrap == 'true' }}
needs: [ prechecks, changes ]
uses: ./.github/workflows/bootstrap.yml
unit-tests:
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.core == 'true' }}
needs: [ prechecks, changes ]
uses: ./.github/workflows/unit_tests.yaml
windows:
if: ${{ github.repository == 'spack/spack' && needs.changes.outputs.core == 'true' }}
needs: [ prechecks ]
uses: ./.github/workflows/windows_python.yml
all:
needs: [ windows, unit-tests, bootstrap, audit-ancient-python ]
runs-on: ubuntu-latest
steps:
- name: Success
run: "true"

View File

@@ -1,67 +0,0 @@
# These are nightly package tests for macOS
# focus areas:
# - initial user experience
# - scientific python stack
name: macOS builds nightly
on:
schedule:
# nightly at 1 AM
- cron: '0 1 * * *'
pull_request:
branches:
- develop
paths:
# Run if we modify this yaml file
- '.github/workflows/macos_python.yml'
# TODO: run if we touch any of the recipes involved in this
# GitHub Action Limits
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions
jobs:
install_gcc:
name: gcc with clang
if: github.repository == 'spack/spack'
runs-on: macos-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: 3.9
- name: spack install
run: |
. .github/workflows/install_spack.sh
# 9.2.0 is the latest version on which we apply homebrew patch
spack install -v --fail-fast gcc@11.2.0 %apple-clang
install_jupyter_clang:
name: jupyter
if: github.repository == 'spack/spack'
runs-on: macos-latest
timeout-minutes: 700
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: 3.9
- name: spack install
run: |
. .github/workflows/install_spack.sh
spack install -v --fail-fast py-jupyterlab %apple-clang
install_scipy_clang:
name: scipy, mpl, pd
if: github.repository == 'spack/spack'
runs-on: macos-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: 3.9
- name: spack install
run: |
. .github/workflows/install_spack.sh
spack install -v --fail-fast py-scipy %apple-clang
spack install -v --fail-fast py-matplotlib %apple-clang
spack install -v --fail-fast py-pandas %apple-clang

View File

@@ -1,115 +1,46 @@
name: linux tests
name: unit tests
on:
push:
branches:
- develop
- releases/**
pull_request:
branches:
- develop
- releases/**
jobs:
# Validate that the code can be run on all the Python versions
# supported by Spack
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: '3.10'
- name: Install Python Packages
run: |
pip install --upgrade pip
pip install --upgrade vermin
- name: vermin (Spack's Core)
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.5- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
- name: vermin (Repositories)
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.5- -vvv var/spack/repos
# Run style checks on the files that have been changed
style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: '3.10'
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools types-six
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/setup_git.sh
- name: Run style tests
run: |
share/spack/qa/run-style-tests
# Check which files have been updated by the PR
changes:
runs-on: ubuntu-latest
# Set job outputs to values from filter step
outputs:
core: ${{ steps.filter.outputs.core }}
packages: ${{ steps.filter.outputs.packages }}
with_coverage: ${{ steps.coverage.outputs.with_coverage }}
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
if: ${{ github.event_name == 'push' }}
with:
fetch-depth: 0
# For pull requests it's not necessary to checkout the code
- uses: dorny/paths-filter@b2feaf19c27470162a626bd6fa8438ae5b263721
id: filter
with:
# See https://github.com/dorny/paths-filter/issues/56 for the syntax used below
filters: |
core:
- './!(var/**)/**'
packages:
- 'var/**'
# Some links for easier reference:
#
# "github" context: https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context
# job outputs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs
# setting environment variables from earlier steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
#
- id: coverage
# Run the subsequent jobs with coverage if core has been modified,
# regardless of whether this is a pull request or a push to a branch
run: |
echo Core changes: ${{ steps.filter.outputs.core }}
echo Event name: ${{ github.event_name }}
if [ "${{ steps.filter.outputs.core }}" == "true" ]
then
echo "::set-output name=with_coverage::true"
else
echo "::set-output name=with_coverage::false"
fi
workflow_dispatch:
workflow_call:
concurrency:
group: unit_tests-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
# Run unit tests with different configurations on linux
unittests:
needs: [ validate, style, changes ]
ubuntu:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['2.7', '3.5', '3.6', '3.7', '3.8', '3.9', '3.10']
python-version: ['2.7', '3.6', '3.7', '3.8', '3.9', '3.10']
concretizer: ['clingo']
on_develop:
- ${{ github.ref == 'refs/heads/develop' }}
include:
- python-version: 2.7
concretizer: original
- python-version: 3.6
concretizer: original
- python-version: 3.9
on_develop: ${{ github.ref == 'refs/heads/develop' }}
- python-version: '3.10'
concretizer: original
on_develop: ${{ github.ref == 'refs/heads/develop' }}
exclude:
- python-version: '3.7'
concretizer: 'clingo'
on_develop: false
- python-version: '3.8'
concretizer: 'clingo'
on_develop: false
- python-version: '3.9'
concretizer: 'clingo'
on_develop: false
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install System packages
@@ -121,11 +52,11 @@ jobs:
patchelf cmake bison libbison-dev kcov
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools pytest codecov "coverage[toml]<=6.2"
pip install --upgrade pip six setuptools pytest codecov[toml] pytest-cov pytest-xdist
# ensure style checks are not skipped in unit tests for python >= 3.6
# note that true/false (i.e., 1/0) are opposite in conditions in python and bash
if python -c 'import sys; sys.exit(not sys.version_info >= (3, 6))'; then
pip install --upgrade flake8 isort>=4.3.5 mypy>=0.900 black
pip install --upgrade flake8 "isort>=4.3.5" "mypy>=0.900" "click==8.0.4" "black<=21.12b0"
fi
- name: Pin pathlib for Python 2.7
if: ${{ matrix.python-version == 2.7 }}
@@ -144,37 +75,28 @@ jobs:
. share/spack/setup-env.sh
spack bootstrap untrust spack-install
spack -v solve zlib
- name: Run unit tests (full suite with coverage)
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
- name: Run unit tests
env:
SPACK_PYTHON: python
SPACK_TEST_SOLVER: ${{ matrix.concretizer }}
SPACK_TEST_PARALLEL: 2
COVERAGE: true
SPACK_TEST_SOLVER: ${{ matrix.concretizer }}
UNIT_TEST_COVERAGE: ${{ (matrix.concretizer == 'original' && matrix.python-version == '2.7') || (matrix.python-version == '3.10') }}
run: |
share/spack/qa/run-unit-tests
coverage combine
coverage combine -a
coverage xml
- name: Run unit tests (reduced suite without coverage)
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
env:
SPACK_PYTHON: python
ONLY_PACKAGES: true
SPACK_TEST_SOLVER: ${{ matrix.concretizer }}
run: |
share/spack/qa/run-unit-tests
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
with:
flags: unittests,linux,${{ matrix.concretizer }}
# Test shell integration
shell:
needs: [ validate, style, changes ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: '3.10'
- name: Install System packages
@@ -184,33 +106,25 @@ jobs:
sudo apt-get install -y coreutils kcov csh zsh tcsh fish dash bash
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2 pytest-xdist
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/setup_git.sh
- name: Run shell tests (without coverage)
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
run: |
share/spack/qa/run-shell-tests
- name: Run shell tests (with coverage)
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
- name: Run shell tests
env:
COVERAGE: true
run: |
share/spack/qa/run-shell-tests
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
with:
flags: shelltests,linux
# Test RHEL8 UBI with platform Python. This job is run
# only on PRs modifying core Spack
rhel8-platform-python:
needs: [ validate, style, changes ]
runs-on: ubuntu-latest
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
container: registry.access.redhat.com/ubi8/ubi
steps:
- name: Install dependencies
@@ -218,7 +132,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@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
- name: Setup repo and non-root user
run: |
git --version
@@ -234,13 +148,12 @@ jobs:
spack unit-test -k 'not cvs and not svn and not hg' -x --verbose
# Test for the clingo based solver (using clingo-cffi)
clingo-cffi:
needs: [ validate, style, changes ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: '3.10'
- name: Install System packages
@@ -252,105 +165,60 @@ jobs:
patchelf kcov
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2 clingo
pip install --upgrade pip six setuptools pytest codecov coverage[toml] pytest-cov clingo pytest-xdist
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/setup_git.sh
- name: Run unit tests (full suite with coverage)
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
env:
COVERAGE: true
SPACK_TEST_SOLVER: clingo
run: |
share/spack/qa/run-unit-tests
coverage combine
coverage combine -a
coverage xml
- name: Run unit tests (reduced suite without coverage)
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
env:
ONLY_PACKAGES: true
SPACK_TEST_SOLVER: clingo
run: |
share/spack/qa/run-unit-tests
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # @v2.1.0
with:
flags: unittests,linux,clingo
# Run unit tests on MacOS
build:
needs: [ validate, style, changes ]
macos:
runs-on: macos-latest
strategy:
matrix:
python-version: [3.8]
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: ${{ matrix.python-version }}
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools
pip install --upgrade pytest codecov coverage[toml]==6.2
pip install --upgrade pytest codecov coverage[toml] pytest-xdist pytest-cov
- name: Setup Homebrew packages
run: |
brew install dash fish gcc gnupg2 kcov
- name: Run unit tests
env:
SPACK_TEST_SOLVER: clingo
SPACK_TEST_PARALLEL: 4
run: |
git --version
. .github/workflows/setup_git.sh
. share/spack/setup-env.sh
$(which spack) bootstrap untrust spack-install
$(which spack) solve zlib
if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ]
then
coverage run $(which spack) unit-test -x
coverage combine
coverage xml
# Delete the symlink going from ./lib/spack/docs/_spack_root back to
# the initial directory, since it causes ELOOP errors with codecov/actions@2
rm lib/spack/docs/_spack_root
else
echo "ONLY PACKAGE RECIPES CHANGED [skipping coverage]"
$(which spack) unit-test -x -m "not maybeslow" -k "package_sanity"
fi
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
common_args=(--dist loadfile --tx '4*popen//python=./bin/spack-tmpconfig python -u ./bin/spack python' -x)
$(which spack) unit-test --cov --cov-config=pyproject.toml "${common_args[@]}"
coverage combine -a
coverage xml
# Delete the symlink going from ./lib/spack/docs/_spack_root back to
# the initial directory, since it causes ELOOP errors with codecov/actions@2
rm lib/spack/docs/_spack_root
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
with:
files: ./coverage.xml
flags: unittests,macos
# Run audits on all the packages in the built-in repository
package-audits:
needs: [ validate, style, changes ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # @v2
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6 # @v2
with:
python-version: '3.10'
- name: Install Python packages
run: |
pip install --upgrade pip six setuptools pytest codecov coverage[toml]==6.2
- name: Package audits (with coverage)
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
run: |
. share/spack/setup-env.sh
coverage run $(which spack) audit packages
coverage combine
coverage xml
- name: Package audits (wwithout coverage)
if: ${{ needs.changes.outputs.with_coverage == 'false' }}
run: |
. share/spack/setup-env.sh
$(which spack) audit packages
- uses: codecov/codecov-action@81cd2dc8148241f03f5839d295e000b8f761e378 # @v2.1.0
if: ${{ needs.changes.outputs.with_coverage == 'true' }}
with:
flags: unittests,linux,audits

60
.github/workflows/valid-style.yml vendored Normal file
View File

@@ -0,0 +1,60 @@
name: style
on:
workflow_call:
inputs:
with_coverage:
required: true
type: string
concurrency:
group: style-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
jobs:
# Validate that the code can be run on all the Python versions
# supported by Spack
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: '3.10'
cache: 'pip'
- name: Install Python Packages
run: |
pip install --upgrade pip
pip install --upgrade vermin
- name: vermin (Spack's Core)
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.6- -vvv lib/spack/spack/ lib/spack/llnl/ bin/
- name: vermin (Repositories)
run: vermin --backport argparse --violations --backport typing -t=2.7- -t=3.6- -vvv var/spack/repos
# Run style checks on the files that have been changed
style:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # @v2
with:
fetch-depth: 0
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984 # @v2
with:
python-version: '3.10'
cache: 'pip'
- name: Install Python packages
run: |
python3 -m pip install --upgrade pip six setuptools types-six click==8.0.2 'black==21.12b0' mypy isort clingo flake8
- name: Setup git configuration
run: |
# Need this for the git tests to succeed.
git --version
. .github/workflows/setup_git.sh
- name: Run style tests
run: |
share/spack/qa/run-style-tests
audit:
uses: ./.github/workflows/audit.yaml
with:
with_coverage: ${{ inputs.with_coverage }}
python_version: '3.10'

View File

@@ -1,104 +1,77 @@
name: windows tests
name: windows
on:
push:
branches:
- develop
- releases/**
pull_request:
branches:
- develop
- releases/**
workflow_call:
concurrency:
group: windows-${{github.ref}}-${{github.event.pull_request.number || github.run_number}}
cancel-in-progress: true
defaults:
run:
shell:
powershell Invoke-Expression -Command ".\share\spack\qa\windows_test_setup.ps1"; {0}
jobs:
validate:
unit-tests:
runs-on: windows-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
with:
python-version: 3.9
- name: Install Python Packages
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade vermin
- name: vermin (Spack's Core)
run: vermin --backport argparse --backport typing -t='2.7-' -t='3.5-' -v spack/lib/spack/spack/ spack/lib/spack/llnl/ spack/bin/
- name: vermin (Repositories)
run: vermin --backport argparse --backport typing -t='2.7-' -t='3.5-' -v spack/var/spack/repos
# Run style checks on the files that have been changed
style:
runs-on: windows-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six setuptools flake8 isort>=4.3.5 mypy>=0.800 black pywin32 types-python-dateutil
- name: Create local develop
run: |
.\spack\.github\workflows\setup_git.ps1
- name: Run style tests
run: |
spack style
- name: Verify license headers
run: |
python spack\bin\spack license verify
unittest:
needs: [ validate, style ]
runs-on: windows-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage
python -m pip install --upgrade pip six pywin32 setuptools codecov pytest-cov
- name: Create local develop
run: |
.\spack\.github\workflows\setup_git.ps1
- name: Unit Test
run: |
echo F|xcopy .\spack\share\spack\qa\configuration\windows_config.yaml $env:USERPROFILE\.spack\windows\config.yaml
spack unit-test --verbose --ignore=lib/spack/spack/test/cmd
unittest-cmd:
needs: [ validate, style ]
cd spack
dir
(Get-Item '.\lib\spack\docs\_spack_root').Delete()
spack unit-test --verbose --cov --cov-config=pyproject.toml --ignore=lib/spack/spack/test/cmd
coverage combine -a
coverage xml
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
with:
flags: unittests,windows
unit-tests-cmd:
runs-on: windows-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage pytest-cov
- name: Create local develop
run: |
.\spack\.github\workflows\setup_git.ps1
- name: Command Unit Test
run: |
echo F|xcopy .\spack\share\spack\qa\configuration\windows_config.yaml $env:USERPROFILE\.spack\windows\config.yaml
spack unit-test lib/spack/spack/test/cmd --verbose
buildtest:
needs: [ validate, style ]
cd spack
(Get-Item '.\lib\spack\docs\_spack_root').Delete()
spack unit-test --verbose --cov --cov-config=pyproject.toml lib/spack/spack/test/cmd
coverage combine -a
coverage xml
- uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70
with:
flags: unittests,windows
build-abseil:
runs-on: windows-latest
steps:
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
with:
python-version: 3.9
- name: Install Python packages
@@ -111,8 +84,7 @@ jobs:
spack external find cmake
spack external find ninja
spack install abseil-cpp
generate-installer-test:
needs: [ validate, style ]
make-installer:
runs-on: windows-latest
steps:
- name: Disable Windows Symlinks
@@ -120,15 +92,15 @@ jobs:
git config --global core.symlinks false
shell:
powershell
- uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
- uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8
with:
fetch-depth: 0
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage
python -m pip install --upgrade pip six pywin32 setuptools
- name: Add Light and Candle to Path
run: |
$env:WIX >> $GITHUB_PATH
@@ -148,18 +120,18 @@ jobs:
name: Windows Spack Installer
path: ${{ env.installer_root}}\pkg\Spack.msi
execute-installer:
needs: generate-installer-test
needs: make-installer
runs-on: windows-latest
defaults:
run:
shell: pwsh
steps:
- uses: actions/setup-python@98f2ad02fd48d057ee3b4d4f66525b231c3e52b6
- uses: actions/setup-python@13ae5bb136fac2878aff31522b9efb785519f984
with:
python-version: 3.9
- name: Install Python packages
run: |
python -m pip install --upgrade pip six pywin32 setuptools codecov coverage
python -m pip install --upgrade pip six pywin32 setuptools
- name: Setup installer directory
run: |
mkdir -p spack_installer
@@ -185,4 +157,4 @@ jobs:
$proc = Start-Process ${{ env.spack_installer }}\spack.msi "/quiet" -Passthru
$handle = $proc.Handle # cache proc.Handle
$proc.WaitForExit();
$LASTEXITCODE
$LASTEXITCODE

View File

@@ -1,3 +1,232 @@
# v0.18.1 (2022-07-19)
### Spack Bugfixes
* Fix several bugs related to bootstrapping (#30834,#31042,#31180)
* Fix a regression that was causing spec hashes to differ between
Python 2 and Python 3 (#31092)
* Fixed compiler flags for oneAPI and DPC++ (#30856)
* Fixed several issues related to concretization (#31142,#31153,#31170,#31226)
* Improved support for Cray manifest file and `spack external find` (#31144,#31201,#31173,#31186)
* Assign a version to openSUSE Tumbleweed according to the GLIBC version
in the system (#19895)
* Improved Dockerfile generation for `spack containerize` (#29741,#31321)
* Fixed a few bugs related to concurrent execution of commands (#31509,#31493,#31477)
### Package updates
* WarpX: add v22.06, fixed libs property (#30866,#31102)
* openPMD: add v0.14.5, update recipe for @develop (#29484,#31023)
# v0.18.0 (2022-05-28)
`v0.18.0` is a major feature release.
## Major features in this release
1. **Concretizer now reuses by default**
`spack install --reuse` was introduced in `v0.17.0`, and `--reuse`
is now the default concretization mode. Spack will try hard to
resolve dependencies using installed packages or binaries (#30396).
To avoid reuse and to use the latest package configurations, (the
old default), you can use `spack install --fresh`, or add
configuration like this to your environment or `concretizer.yaml`:
```yaml
concretizer:
reuse: false
```
2. **Finer-grained hashes**
Spack hashes now include `link`, `run`, *and* `build` dependencies,
as well as a canonical hash of package recipes. Previously, hashes
only included `link` and `run` dependencies (though `build`
dependencies were stored by environments). We coarsened the hash to
reduce churn in user installations, but the new default concretizer
behavior mitigates this concern and gets us reuse *and* provenance.
You will be able to see the build dependencies of new installations
with `spack find`. Old installations will not change and their
hashes will not be affected. (#28156, #28504, #30717, #30861)
3. **Improved error messages**
Error handling with the new concretizer is now done with
optimization criteria rather than with unsatisfiable cores, and
Spack reports many more details about conflicting constraints.
(#30669)
4. **Unify environments when possible**
Environments have thus far supported `concretization: together` or
`concretization: separately`. These have been replaced by a new
preference in `concretizer.yaml`:
```yaml
concretizer:
unify: [true|false|when_possible]
```
`concretizer:unify:when_possible` will *try* to resolve a fully
unified environment, but if it cannot, it will create multiple
configurations of some packages where it has to. For large
environments that previously had to be concretized separately, this
can result in a huge speedup (40-50x). (#28941)
5. **Automatically find externals on Cray machines**
Spack can now automatically discover installed packages in the Cray
Programming Environment by running `spack external find` (or `spack
external read-cray-manifest` to *only* query the PE). Packages from
the PE (e.g., `cray-mpich` are added to the database with full
dependency information, and compilers from the PE are added to
`compilers.yaml`. Available with the June 2022 release of the Cray
Programming Environment. (#24894, #30428)
6. **New binary format and hardened signing**
Spack now has an updated binary format, with improvements for
security. The new format has a detached signature file, and Spack
verifies the signature before untarring or decompressing the binary
package. The previous format embedded the signature in a `tar`
file, which required the client to run `tar` *before* verifying
(#30750). Spack can still install from build caches using the old
format, but we encourage users to switch to the new format going
forward.
Production GitLab pipelines have been hardened to securely sign
binaries. There is now a separate signing stage so that signing
keys are never exposed to build system code, and signing keys are
ephemeral and only live as long as the signing pipeline stage.
(#30753)
7. **Bootstrap mirror generation**
The `spack bootstrap mirror` command can automatically create a
mirror for bootstrapping the concretizer and other needed
dependencies in an air-gapped environment. (#28556)
8. **Nascent Windows support**
Spack now has initial support for Windows. Spack core has been
refactored to run in the Windows environment, and a small number of
packages can now build for Windows. More details are
[in the documentation](https://spack.rtfd.io/en/latest/getting_started.html#spack-on-windows)
(#27021, #28385, many more)
9. **Makefile generation**
`spack env depfile` can be used to generate a `Makefile` from an
environment, which can be used to build packages the environment
in parallel on a single node. e.g.:
```console
spack -e myenv env depfile > Makefile
make
```
Spack propagates `gmake` jobserver information to builds so that
their jobs can share cores. (#30039, #30254, #30302, #30526)
10. **New variant features**
In addition to being conditional themselves, variants can now have
[conditional *values*](https://spack.readthedocs.io/en/latest/packaging_guide.html#conditional-possible-values)
that are only possible for certain configurations of a package. (#29530)
Variants can be
[declared "sticky"](https://spack.readthedocs.io/en/latest/packaging_guide.html#sticky-variants),
which prevents them from being enabled or disabled by the
concretizer. Sticky variants must be set explicitly by users
on the command line or in `packages.yaml`. (#28630)
* Allow conditional possible values in variants
* Add a "sticky" property to variants
## Other new features of note
* Environment views can optionally link only `run` dependencies
with `link:run` (#29336)
* `spack external find --all` finds library-only packages in
addition to build dependencies (#28005)
* Customizable `config:license_dir` option (#30135)
* `spack external find --path PATH` takes a custom search path (#30479)
* `spack spec` has a new `--format` argument like `spack find` (#27908)
* `spack concretize --quiet` skips printing concretized specs (#30272)
* `spack info` now has cleaner output and displays test info (#22097)
* Package-level submodule option for git commit versions (#30085, #30037)
* Using `/hash` syntax to refer to concrete specs in an environment
now works even if `/hash` is not installed. (#30276)
## Major internal refactors
* full hash (see above)
* new develop versioning scheme `0.19.0-dev0`
* Allow for multiple dependencies/dependents from the same package (#28673)
* Splice differing virtual packages (#27919)
## Performance Improvements
* Concretization of large environments with `unify: when_possible` is
much faster than concretizing separately (#28941, see above)
* Single-pass view generation algorithm is 2.6x faster (#29443)
## Archspec improvements
* `oneapi` and `dpcpp` flag support (#30783)
* better support for `M1` and `a64fx` (#30683)
## Removals and Deprecations
* Spack no longer supports Python `2.6` (#27256)
* Removed deprecated `--run-tests` option of `spack install`;
use `spack test` (#30461)
* Removed deprecated `spack flake8`; use `spack style` (#27290)
* Deprecate `spack:concretization` config option; use
`concretizer:unify` (#30038)
* Deprecate top-level module configuration; use module sets (#28659)
* `spack activate` and `spack deactivate` are deprecated in favor of
environments; will be removed in `0.19.0` (#29430; see also `link:run`
in #29336 above)
## Notable Bugfixes
* Fix bug that broke locks with many parallel builds (#27846)
* Many bugfixes and consistency improvements for the new concretizer
and `--reuse` (#30357, #30092, #29835, #29933, #28605, #29694, #28848)
## Packages
* `CMakePackage` uses `CMAKE_INSTALL_RPATH_USE_LINK_PATH` (#29703)
* Refactored `lua` support: `lua-lang` virtual supports both
`lua` and `luajit` via new `LuaPackage` build system(#28854)
* PythonPackage: now installs packages with `pip` (#27798)
* Python: improve site_packages_dir handling (#28346)
* Extends: support spec, not just package name (#27754)
* `find_libraries`: search for both .so and .dylib on macOS (#28924)
* Use stable URLs and `?full_index=1` for all github patches (#29239)
## Spack community stats
* 6,416 total packages, 458 new since `v0.17.0`
* 219 new Python packages
* 60 new R packages
* 377 people contributed to this release
* 337 committers to packages
* 85 committers to core
# v0.17.3 (2022-07-14)
### Spack bugfixes
* Fix missing chgrp on symlinks in package installations (#30743)
* Allow having non-existing upstreams (#30744, #30746)
* Fix `spack stage` with custom paths (#30448)
* Fix failing call for `spack buildcache save-specfile` (#30637)
* Fix globbing in compiler wrapper (#30699)
# v0.17.2 (2022-04-13)
### Spack bugfixes
@@ -11,7 +240,7 @@
* Fixed a few bugs affecting the spack ci command (#29518, #29419)
* Fix handling of Intel compiler environment (#29439)
* Fix a few edge cases when reindexing the DB (#28764)
* Remove "Known issues" from documentation (#29664)
* Remove "Known issues" from documentation (#29664)
* Other miscellaneous bugfixes (0b72e070583fc5bcd016f5adc8a84c99f2b7805f, #28403, #29261)
# v0.17.1 (2021-12-23)

View File

@@ -2,10 +2,10 @@
[![Unit Tests](https://github.com/spack/spack/workflows/linux%20tests/badge.svg)](https://github.com/spack/spack/actions)
[![Bootstrapping](https://github.com/spack/spack/actions/workflows/bootstrap.yml/badge.svg)](https://github.com/spack/spack/actions/workflows/bootstrap.yml)
[![macOS Builds (nightly)](https://github.com/spack/spack/workflows/macOS%20builds%20nightly/badge.svg?branch=develop)](https://github.com/spack/spack/actions?query=workflow%3A%22macOS+builds+nightly%22)
[![codecov](https://codecov.io/gh/spack/spack/branch/develop/graph/badge.svg)](https://codecov.io/gh/spack/spack)
[![Containers](https://github.com/spack/spack/actions/workflows/build-containers.yml/badge.svg)](https://github.com/spack/spack/actions/workflows/build-containers.yml)
[![Read the Docs](https://readthedocs.org/projects/spack/badge/?version=latest)](https://spack.readthedocs.io)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Slack](https://slack.spack.io/badge.svg)](https://slack.spack.io)
Spack is a multi-platform package manager that builds and installs
@@ -62,6 +62,7 @@ Resources:
* **Slack workspace**: [spackpm.slack.com](https://spackpm.slack.com).
To get an invitation, visit [slack.spack.io](https://slack.spack.io).
* [**Github Discussions**](https://github.com/spack/spack/discussions): not just for discussions, also Q&A.
* **Mailing list**: [groups.google.com/d/forum/spack](https://groups.google.com/d/forum/spack)
* **Twitter**: [@spackpm](https://twitter.com/spackpm). Be sure to
`@mention` us!

View File

@@ -8,13 +8,11 @@
def getpywin():
try:
import win32con # noqa
import win32con # noqa: F401
except ImportError:
subprocess.check_call(
[sys.executable, "-m", "pip", "-q", "install", "--upgrade", "pip"])
subprocess.check_call(
[sys.executable, "-m", "pip", "-q", "install", "pywin32"])
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "--upgrade", "pip"])
subprocess.check_call([sys.executable, "-m", "pip", "-q", "install", "pywin32"])
if __name__ == '__main__':
if __name__ == "__main__":
getpywin()

View File

@@ -77,21 +77,23 @@ if "ruamel" in sys.modules:
try:
import argparse
except ImportError:
argparse_pyc = os.path.join(spack_external_libs, 'argparse.pyc')
argparse_pyc = os.path.join(spack_external_libs, "argparse.pyc")
if not os.path.exists(argparse_pyc):
raise
try:
os.remove(argparse_pyc)
import argparse # noqa
import argparse # noqa: F401
except Exception:
msg = ('The file\n\n\t{0}\n\nis corrupted and cannot be deleted by Spack. '
'Either delete it manually or ask some administrator to '
'delete it for you.')
msg = (
"The file\n\n\t{0}\n\nis corrupted and cannot be deleted by Spack. "
"Either delete it manually or ask some administrator to "
"delete it for you."
)
print(msg.format(argparse_pyc))
sys.exit(1)
import spack.main # noqa
import spack.main # noqa: E402
# Once we've set up the system path, run the spack main method
if __name__ == "__main__":

95
bin/spack-tmpconfig Executable file
View File

@@ -0,0 +1,95 @@
#!/bin/bash
set -euo pipefail
[[ -n "${TMPCONFIG_DEBUG:=}" ]] && set -x
DIR="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
mkdir -p "${XDG_RUNTIME_DIR:=/tmp}/spack-tests"
export TMPDIR="${XDG_RUNTIME_DIR}"
export TMP_DIR="$(mktemp -d -t spack-test-XXXXX)"
clean_up() {
[[ -n "$TMPCONFIG_DEBUG" ]] && printf "cleaning up: $TMP_DIR\n"
rm -rf "$TMP_DIR"
}
trap clean_up EXIT
trap clean_up ERR
[[ -n "$TMPCONFIG_DEBUG" ]] && printf "Redirecting TMP_DIR and spack directories to $TMP_DIR\n"
export BOOTSTRAP="${SPACK_USER_CACHE_PATH:=$HOME/.spack}/bootstrap"
export SPACK_USER_CACHE_PATH="$TMP_DIR/user_cache"
mkdir -p "$SPACK_USER_CACHE_PATH"
private_bootstrap="$SPACK_USER_CACHE_PATH/bootstrap"
use_spack=''
use_bwrap=''
# argument handling
while (($# >= 1)) ; do
case "$1" in
-b) # privatize bootstrap too, useful for CI but not always cheap
shift
export BOOTSTRAP="$private_bootstrap"
;;
-B) # use specified bootstrap dir
export BOOTSTRAP="$2"
shift 2
;;
-s) # run spack directly with remaining args
shift
use_spack=1
;;
--contain=bwrap)
if bwrap --help 2>&1 > /dev/null ; then
use_bwrap=1
else
echo Bubblewrap containment requested, but no bwrap command found
exit 1
fi
shift
;;
--)
shift
break
;;
*)
break
;;
esac
done
typeset -a CMD
if [[ -n "$use_spack" ]] ; then
CMD=("$DIR/spack" "$@")
else
CMD=("$@")
fi
mkdir -p "$BOOTSTRAP"
export SPACK_SYSTEM_CONFIG_PATH="$TMP_DIR/sys_conf"
export SPACK_USER_CONFIG_PATH="$TMP_DIR/user_conf"
mkdir -p "$SPACK_USER_CONFIG_PATH"
cat >"$SPACK_USER_CONFIG_PATH/config.yaml" <<EOF
config:
install_tree:
root: $TMP_DIR/install
misc_cache: $$user_cache_path/cache
source_cache: $$user_cache_path/source
EOF
cat >"$SPACK_USER_CONFIG_PATH/bootstrap.yaml" <<EOF
bootstrap:
root: $BOOTSTRAP
EOF
if [[ -n "$use_bwrap" ]] ; then
CMD=(
bwrap
--dev-bind / /
--ro-bind "$DIR/.." "$DIR/.." # do not touch spack root
--ro-bind $HOME/.spack $HOME/.spack # do not touch user config/cache dir
--bind "$TMP_DIR" "$TMP_DIR"
--bind "$BOOTSTRAP" "$BOOTSTRAP"
--die-with-parent
"${CMD[@]}"
)
fi
(( ${TMPCONFIG_DEBUG:=0} > 1)) && echo "Running: ${CMD[@]}"
"${CMD[@]}"

View File

@@ -9,6 +9,8 @@ bootstrap:
# may not be able to bootstrap all the software that Spack needs,
# depending on its type.
sources:
- name: 'github-actions-v0.3'
metadata: $spack/share/spack/bootstrap/github-actions-v0.3
- name: 'github-actions-v0.2'
metadata: $spack/share/spack/bootstrap/github-actions-v0.2
- name: 'github-actions-v0.1'
@@ -18,5 +20,5 @@ bootstrap:
trusted:
# By default we trust bootstrapping from sources and from binaries
# produced on Github via the workflow
github-actions-v0.2: true
github-actions-v0.3: true
spack-install: true

View File

@@ -13,9 +13,4 @@
# Per-user settings (overrides default and site settings):
# ~/.spack/modules.yaml
# -------------------------------------------------------------------------
modules:
prefix_inspections:
lib:
- LD_LIBRARY_PATH
lib64:
- LD_LIBRARY_PATH
modules: {}

View File

@@ -15,7 +15,7 @@
# -------------------------------------------------------------------------
modules:
prefix_inspections:
lib:
./lib:
- DYLD_FALLBACK_LIBRARY_PATH
lib64:
./lib64:
- DYLD_FALLBACK_LIBRARY_PATH

View File

@@ -13,9 +13,4 @@
# Per-user settings (overrides default and site settings):
# ~/.spack/modules.yaml
# -------------------------------------------------------------------------
modules:
prefix_inspections:
lib:
- LD_LIBRARY_PATH
lib64:
- LD_LIBRARY_PATH
modules: {}

View File

@@ -14,23 +14,24 @@
# ~/.spack/modules.yaml
# -------------------------------------------------------------------------
modules:
# Paths to check when creating modules for all module sets
# This maps paths in the package install prefix to environment variables
# they should be added to. For example, <prefix>/bin should be in PATH.
prefix_inspections:
bin:
./bin:
- PATH
man:
./man:
- MANPATH
share/man:
./share/man:
- MANPATH
share/aclocal:
./share/aclocal:
- ACLOCAL_PATH
lib/pkgconfig:
./lib/pkgconfig:
- PKG_CONFIG_PATH
lib64/pkgconfig:
./lib64/pkgconfig:
- PKG_CONFIG_PATH
share/pkgconfig:
./share/pkgconfig:
- PKG_CONFIG_PATH
'':
./:
- CMAKE_PREFIX_PATH
# These are configurations for the module set named "default"

View File

@@ -25,16 +25,17 @@ packages:
fftw-api: [fftw, amdfftw]
flame: [libflame, amdlibflame]
fuse: [libfuse]
gl: [mesa+opengl, mesa18, opengl]
gl: [glx, osmesa]
glu: [mesa-glu, openglu]
glx: [mesa+glx, mesa18+glx, opengl]
golang: [gcc]
iconv: [libiconv]
ipp: [intel-ipp]
java: [openjdk, jdk, ibm-java]
jpeg: [libjpeg-turbo, libjpeg]
lapack: [openblas, amdlibflame]
libllvm: [llvm, llvm-amdgpu]
libglx: [mesa+glx, mesa18+glx]
libllvm: [llvm]
libosmesa: [mesa+osmesa, mesa18+osmesa]
lua-lang: [lua, lua-luajit-openresty, lua-luajit]
luajit: [lua-luajit-openresty, lua-luajit]
mariadb-client: [mariadb-c-client, mariadb]
@@ -44,7 +45,6 @@ packages:
mysql-client: [mysql, mariadb-c-client]
opencl: [pocl]
onedal: [intel-oneapi-dal]
osmesa: [mesa+osmesa, mesa18+osmesa]
pbs: [openpbs, torque]
pil: [py-pillow]
pkgconfig: [pkgconf, pkg-config]

View File

@@ -896,8 +896,8 @@ your path:
$ which mpicc
~/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4/bin/mpicc
These commands will add appropriate directories to your ``PATH``,
``MANPATH``, ``CPATH``, and ``LD_LIBRARY_PATH`` according to the
These commands will add appropriate directories to your ``PATH``
and ``MANPATH`` according to the
:ref:`prefix inspections <customize-env-modifications>` defined in your
modules configuration.
When you no longer want to use a package, you can type unload or
@@ -1093,6 +1093,8 @@ could depend on ``mpich@1.2:`` if it can only build with version
Below are more details about the specifiers that you can add to specs.
.. _version-specifier:
^^^^^^^^^^^^^^^^^
Version specifier
^^^^^^^^^^^^^^^^^
@@ -1108,6 +1110,37 @@ set of arbitrary versions, such as ``@1.0,1.5,1.7`` (``1.0``, ``1.5``,
or ``1.7``). When you supply such a specifier to ``spack install``,
it constrains the set of versions that Spack will install.
For packages with a ``git`` attribute, ``git`` references
may be specified instead of a numerical version i.e. branches, tags
and commits. Spack will stage and build based off the ``git``
reference provided. Acceptable syntaxes for this are:
.. code-block:: sh
# branches and tags
foo@git.develop # use the develop branch
foo@git.0.19 # use the 0.19 tag
# commit hashes
foo@abcdef1234abcdef1234abcdef1234abcdef1234 # 40 character hashes are automatically treated as git commits
foo@git.abcdef1234abcdef1234abcdef1234abcdef1234
Spack versions from git reference either have an associated version supplied by the user,
or infer a relationship to known versions from the structure of the git repository. If an
associated version is supplied by the user, Spack treats the git version as equivalent to that
version for all version comparisons in the package logic (e.g. ``depends_on('foo', when='@1.5')``).
The associated version can be assigned with ``[git ref]=[version]`` syntax, with the caveat that the specified version is known to Spack from either the package definition, or in the configuration preferences (i.e. ``packages.yaml``).
.. code-block:: sh
foo@git.my_ref=3.2 # use the my_ref tag or branch, but treat it as version 3.2 for version comparisons
foo@git.abcdef1234abcdef1234abcdef1234abcdef1234=develop # use the given commit, but treat it as develop for version comparisons
If an associated version is not supplied then the tags in the git repo are used to determine
the most recent previous version known to Spack. Details about how versions are compared
and how Spack determines if one version is less than another are discussed in the developer guide.
If the version spec is not provided, then Spack will choose one
according to policies set for the particular spack installation. If
the spec is ambiguous, i.e. it could match multiple versions, Spack

View File

@@ -50,6 +50,13 @@ build cache files for the "ninja" spec:
Note that the targeted spec must already be installed. Once you have a build cache,
you can add it as a mirror, discussed next.
.. warning::
Spack improved the format used for binary caches in v0.18. The entire v0.18 series
will be able to verify and install binary caches both in the new and in the old format.
Support for using the old format is expected to end in v0.19, so we advise users to
recreate relevant buildcaches using Spack v0.18 or higher.
---------------------------------------
Finding or installing build cache files
---------------------------------------

View File

@@ -49,9 +49,8 @@ packages rather than building its own packages. This may be desirable
if machines ship with system packages, such as a customized MPI
that should be used instead of Spack building its own MPI.
External packages are configured through the ``packages.yaml`` file found
in a Spack installation's ``etc/spack/`` or a user's ``~/.spack/``
directory. Here's an example of an external configuration:
External packages are configured through the ``packages.yaml`` file.
Here's an example of an external configuration:
.. code-block:: yaml
@@ -97,11 +96,14 @@ Each package version and compiler listed in an external should
have entries in Spack's packages and compiler configuration, even
though the package and compiler may not ever be built.
The packages configuration can tell Spack to use an external location
for certain package versions, but it does not restrict Spack to using
external packages. In the above example, since newer versions of OpenMPI
are available, Spack will choose to start building and linking with the
latest version rather than continue using the pre-installed OpenMPI versions.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Prevent packages from being built from sources
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Adding an external spec in ``packages.yaml`` allows Spack to use an external location,
but it does not prevent Spack from building packages from sources. In the above example,
Spack might choose for many valid reasons to start building and linking with the
latest version of OpenMPI rather than continue using the pre-installed OpenMPI versions.
To prevent this, the ``packages.yaml`` configuration also allows packages
to be flagged as non-buildable. The previous example could be modified to
@@ -121,9 +123,15 @@ be:
buildable: False
The addition of the ``buildable`` flag tells Spack that it should never build
its own version of OpenMPI, and it will instead always rely on a pre-built
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
a package name.
its own version of OpenMPI from sources, and it will instead always rely on a pre-built
OpenMPI.
.. note::
If ``concretizer:reuse`` is on (see :ref:`concretizer-options` for more information on that flag)
pre-built specs include specs already available from a local store, an upstream store, a registered
buildcache or specs marked as externals in ``packages.yaml``. If ``concretizer:reuse`` is off, only
external specs in ``packages.yaml`` are included in the list of pre-built specs.
If an external module is specified as not buildable, then Spack will load the
external module into the build environment which can be used for linking.
@@ -132,6 +140,10 @@ The ``buildable`` does not need to be paired with external packages.
It could also be used alone to forbid packages that may be
buggy or otherwise undesirable.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Non-buildable virtual packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Virtual packages in Spack can also be specified as not buildable, and
external implementations can be provided. In the example above,
OpenMPI is configured as not buildable, but Spack will often prefer
@@ -153,21 +165,37 @@ but more conveniently:
- spec: "openmpi@1.6.5%intel@10.1 arch=linux-debian7-x86_64"
prefix: /opt/openmpi-1.6.5-intel
Implementations can also be listed immediately under the virtual they provide:
Spack can then use any of the listed external implementations of MPI
to satisfy a dependency, and will choose depending on the compiler and
architecture.
In cases where the concretizer is configured to reuse specs, and other ``mpi`` providers
(available via stores or buildcaches) are not wanted, Spack can be configured to require
specs matching only the available externals:
.. code-block:: yaml
packages:
mpi:
buildable: False
openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64: /opt/openmpi-1.4.3
openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64+debug: /opt/openmpi-1.4.3-debug
openmpi@1.6.5%intel@10.1 arch=linux-debian7-x86_64: /opt/openmpi-1.6.5-intel
mpich@3.3 %clang@9.0.0 arch=linux-debian7-x86_64: /opt/mpich-3.3-intel
require:
- one_of: [
"openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64",
"openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64+debug",
"openmpi@1.6.5%intel@10.1 arch=linux-debian7-x86_64"
]
openmpi:
externals:
- spec: "openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64"
prefix: /opt/openmpi-1.4.3
- spec: "openmpi@1.4.3%gcc@4.4.7 arch=linux-debian7-x86_64+debug"
prefix: /opt/openmpi-1.4.3-debug
- spec: "openmpi@1.6.5%intel@10.1 arch=linux-debian7-x86_64"
prefix: /opt/openmpi-1.6.5-intel
Spack can then use any of the listed external implementations of MPI
to satisfy a dependency, and will choose depending on the compiler and
architecture.
This configuration prevents any spec using MPI and originating from stores or buildcaches to be reused,
unless it matches the requirements under ``packages:mpi:require``. For more information on requirements see
:ref:`package-requirements`.
.. _cmd-spack-external-find:
@@ -194,11 +222,6 @@ Specific limitations include:
* Packages are not discoverable by default: For a package to be
discoverable with ``spack external find``, it needs to add special
logic. See :ref:`here <make-package-findable>` for more details.
* The current implementation only collects and examines executable files,
so it is typically only useful for build/run dependencies (in some cases
if a library package also provides an executable, it may be possible to
extract a meaningful Spec by running the executable - for example the
compiler wrappers in MPI implementations).
* The logic does not search through module files, it can only detect
packages with executables defined in ``PATH``; you can help Spack locate
externals which use module files by loading any associated modules for
@@ -339,6 +362,126 @@ concretization rules. A provider lists a value that packages may
``depend_on`` (e.g, MPI) and a list of rules for fulfilling that
dependency.
.. _package-requirements:
--------------------
Package Requirements
--------------------
You can use the configuration to force the concretizer to choose
specific properties for packages when building them. Like preferences,
these are only applied when the package is required by some other
request (e.g. if the package is needed as a dependency of a
request to ``spack install``).
An example of where this is useful is if you have a package that
is normally built as a dependency but only under certain circumstances
(e.g. only when a variant on a dependent is active): you can make
sure that it always builds the way you want it to; this distinguishes
package configuration requirements from constraints that you add to
``spack install`` or to environments (in those cases, the associated
packages are always built).
The following is an example of how to enforce package properties in
``packages.yaml``:
.. code-block:: yaml
packages:
libfabric:
require: "@1.13.2"
openmpi:
require:
- any_of: ["~cuda", "%gcc"]
mpich:
require:
- one_of: ["+cuda", "+rocm"]
Requirements are expressed using Spec syntax (the same as what is provided
to ``spack install``). In the simplest case, you can specify attributes
that you always want the package to have by providing a single spec to
``require``; in the above example, ``libfabric`` will always build
with version 1.13.2.
You can provide a more-relaxed constraint and allow the concretizer to
choose between a set of options using ``any_of`` or ``one_of``:
* ``any_of`` is a list of specs. One of those specs must be satisfied
and it is also allowed for the concretized spec to match more than one.
In the above example, that means you could build ``openmpi+cuda%gcc``,
``openmpi~cuda%clang`` or ``openmpi~cuda%gcc`` (in the last case,
note that both specs in the ``any_of`` for ``openmpi`` are
satisfied).
* ``one_of`` is also a list of specs, and the final concretized spec
must match exactly one of them. In the above example, that means
you could build ``mpich+cuda`` or ``mpich+rocm`` but not
``mpich+cuda+rocm`` (note the current package definition for
``mpich`` already includes a conflict, so this is redundant but
still demonstrates the concept).
.. note::
For ``any_of`` and ``one_of``, the order of specs indicates a
preference: items that appear earlier in the list are preferred
(note that these preferences can be ignored in favor of others).
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Setting default requirements
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
You can also set default requirements for all packages under ``all``
like this:
.. code-block:: yaml
packages:
all:
require: '%clang'
which means every spec will be required to use ``clang`` as a compiler.
Note that in this case ``all`` represents a *default set of requirements* -
if there are specific package requirements, then the default requirements
under ``all`` are disregarded. For example, with a configuration like this:
.. code-block:: yaml
packages:
all:
require: '%clang'
cmake:
require: '%gcc'
Spack requires ``cmake`` to use ``gcc`` and all other nodes (including cmake dependencies)
to use ``clang``.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Setting requirements on virtual specs
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
A requirement on a virtual spec applies whenever that virtual is present in the DAG. This
can be useful for fixing which virtual provider you want to use:
.. code-block:: yaml
packages:
mpi:
require: 'mvapich2 %gcc'
With the configuration above the only allowed ``mpi`` provider is ``mvapich2 %gcc``.
Requirements on the virtual spec and on the specific provider are both applied, if present. For
instance with a configuration like:
.. code-block:: yaml
packages:
mpi:
require: 'mvapich2 %gcc'
mvapich2:
require: '~cuda'
you will use ``mvapich2~cuda %gcc`` as an ``mpi`` provider.
.. _package_permissions:

View File

@@ -62,11 +62,12 @@ on these ideas for each distinct build system that Spack supports:
build_systems/bundlepackage
build_systems/cudapackage
build_systems/custompackage
build_systems/inteloneapipackage
build_systems/intelpackage
build_systems/rocmpackage
build_systems/custompackage
build_systems/multiplepackage
build_systems/rocmpackage
build_systems/sourceforgepackage
For reference, the :py:mod:`Build System API docs <spack.build_systems>`
provide a list of build systems and methods/attributes that can be

View File

@@ -84,8 +84,8 @@ build ``hdf5`` with Intel oneAPI MPI do::
spack install hdf5 +mpi ^intel-oneapi-mpi
Using an Externally Installed oneAPI
====================================
Using Externally Installed oneAPI Tools
=======================================
Spack can also use oneAPI tools that are manually installed with
`Intel Installers`_. The procedures for configuring Spack to use
@@ -110,7 +110,7 @@ Another option is to manually add the configuration to
Libraries
---------
If you want Spack to use MKL that you have installed without Spack in
If you want Spack to use oneMKL that you have installed without Spack in
the default location, then add the following to
``~/.spack/packages.yaml``, adjusting the version as appropriate::
@@ -139,7 +139,7 @@ You can also use Spack-installed libraries. For example::
spack load intel-oneapi-mkl
Will update your environment CPATH, LIBRARY_PATH, and other
environment variables for building an application with MKL.
environment variables for building an application with oneMKL.
More information
================

View File

@@ -15,6 +15,9 @@ IntelPackage
Intel packages in Spack
^^^^^^^^^^^^^^^^^^^^^^^^
This is an earlier version of Intel software development tools and has
now been replaced by Intel oneAPI Toolkits.
Spack can install and use several software development products offered by Intel.
Some of these are available under no-cost terms, others require a paid license.
All share the same basic steps for configuration, installation, and, where

View File

@@ -48,8 +48,11 @@ important to understand.
**build backend**
Libraries used to define how to build a wheel. Examples
include `setuptools <https://setuptools.pypa.io/>`__,
`flit <https://flit.readthedocs.io/>`_, and
`poetry <https://python-poetry.org/>`_.
`flit <https://flit.pypa.io/>`_,
`poetry <https://python-poetry.org/>`_,
`hatchling <https://hatch.pypa.io/latest/>`_,
`meson <https://meson-python.readthedocs.io/>`_, and
`pdm <https://pdm.fming.dev/latest/>`_.
^^^^^^^^^^^
Downloading
@@ -173,9 +176,9 @@ package. The "Project description" tab may also contain a longer
description of the package. Either of these can be used to populate
the package docstring.
^^^^^^^^^^^^^
Build backend
^^^^^^^^^^^^^
^^^^^^^^^^^^
Dependencies
^^^^^^^^^^^^
Once you've determined the basic metadata for a package, the next
step is to determine the build backend. ``PythonPackage`` uses
@@ -213,12 +216,33 @@ Note that ``py-wheel`` is already listed as a build dependency in the
need to specify a specific version requirement or change the
dependency type.
See `PEP 517 <https://www.python.org/dev/peps/pep-0517/>`_ and
See `PEP 517 <https://www.python.org/dev/peps/pep-0517/>`__ and
`PEP 518 <https://www.python.org/dev/peps/pep-0518/>`_ for more
information on the design of ``pyproject.toml``.
Depending on which build backend a project uses, there are various
places that run-time dependencies can be listed.
places that run-time dependencies can be listed. Most modern build
backends support listing dependencies directly in ``pyproject.toml``.
Look for dependencies under the following keys:
* ``requires-python`` under ``[project]``
This specifies the version of Python that is required
* ``dependencies`` under ``[project]``
These packages are required for building and installation. You can
add them with ``type=('build', 'run')``.
* ``[project.optional-dependencies]``
This section includes keys with lists of optional dependencies
needed to enable those features. You should add a variant that
optionally adds these dependencies. This variant should be ``False``
by default.
Some build backends may have additional locations where dependencies
can be found.
"""""""""
distutils
@@ -244,9 +268,9 @@ If the ``pyproject.toml`` lists ``setuptools.build_meta`` as a
``build-backend``, or if the package has a ``setup.py`` that imports
``setuptools``, or if the package has a ``setup.cfg`` file, then it
uses setuptools to build. Setuptools is a replacement for the
distutils library, and has almost the exact same API. Dependencies
can be listed in the ``setup.py`` or ``setup.cfg`` file. Look for the
following arguments:
distutils library, and has almost the exact same API. In addition to
``pyproject.toml``, dependencies can be listed in the ``setup.py`` or
``setup.cfg`` file. Look for the following arguments:
* ``python_requires``
@@ -291,25 +315,22 @@ listed directly in the ``pyproject.toml`` file. Older versions of
flit used to store this info in a ``flit.ini`` file, so check for
this too.
Either of these files may contain keys like:
In addition to the default ``pyproject.toml`` keys listed above,
older versions of flit may use the following keys:
* ``requires-python``
This specifies the version of Python that is required
* ``dependencies`` or ``requires``
* ``requires`` under ``[tool.flit.metadata]``
These packages are required for building and installation. You can
add them with ``type=('build', 'run')``.
* ``project.optional-dependencies`` or ``requires-extra``
* ``[tool.flit.metadata.requires-extra]``
This section includes keys with lists of optional dependencies
needed to enable those features. You should add a variant that
optionally adds these dependencies. This variant should be False
by default.
See https://flit.readthedocs.io/en/latest/pyproject_toml.html for
See https://flit.pypa.io/en/latest/pyproject_toml.html for
more information.
""""""
@@ -326,6 +347,38 @@ for specifying the version requirements. Note that ``~=`` works
differently in poetry than in setuptools and flit for versions that
start with a zero.
"""""""""
hatchling
"""""""""
If the ``pyproject.toml`` lists ``hatchling.build`` as the
``build-backend``, it uses the hatchling build system. Hatchling
uses the default ``pyproject.toml`` keys to list dependencies.
See https://hatch.pypa.io/latest/config/dependency/ for more
information.
"""""
meson
"""""
If the ``pyproject.toml`` lists ``mesonpy`` as the ``build-backend``,
it uses the meson build system. Meson uses the default
``pyproject.toml`` keys to list dependencies.
See https://meson-python.readthedocs.io/en/latest/usage/start.html
for more information.
"""
pdm
"""
If the ``pyproject.toml`` lists ``pdm.pep517.api`` as the ``build-backend``,
it uses the PDM build system. PDM uses the default ``pyproject.toml``
keys to list dependencies.
See https://pdm.fming.dev/latest/ for more information.
""""""
wheels
""""""
@@ -370,6 +423,34 @@ packages. However, the installation instructions for a package may
suggest passing certain flags to the ``setup.py`` call. The
``PythonPackage`` class has two techniques for doing this.
"""""""""""""""
Config settings
"""""""""""""""
These settings are passed to
`PEP 517 <https://peps.python.org/pep-0517/>`__ build backends.
For example, ``py-scipy`` package allows you to specify the name of
the BLAS/LAPACK library you want pkg-config to search for:
.. code-block:: python
depends_on('py-pip@22.1:', type='build')
def config_settings(self, spec, prefix):
return {
'blas': spec['blas'].libs.names[0],
'lapack': spec['lapack'].libs.names[0],
}
.. note::
This flag only works for packages that define a ``build-backend``
in ``pyproject.toml``. Also, it is only supported by pip 22.1+,
which requires Python 3.7+. For packages that still support Python
3.6 and older, ``install_options`` should be used instead.
""""""""""""""
Global options
""""""""""""""
@@ -389,6 +470,16 @@ has an optional dependency on ``libyaml`` that can be enabled like so:
return options
.. note::
Direct invocation of ``setup.py`` is
`deprecated <https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html>`_.
This flag forces pip to use a deprecated installation procedure.
It should only be used in packages that don't define a
``build-backend`` in ``pyproject.toml`` or packages that still
support Python 3.6 and older.
"""""""""""""""
Install options
"""""""""""""""
@@ -409,6 +500,16 @@ allows you to specify the directories to search for ``libyaml``:
return options
.. note::
Direct invocation of ``setup.py`` is
`deprecated <https://blog.ganssle.io/articles/2021/10/setup-py-deprecated.html>`_.
This flag forces pip to use a deprecated installation procedure.
It should only be used in packages that don't define a
``build-backend`` in ``pyproject.toml`` or packages that still
support Python 3.6 and older.
^^^^^^^
Testing
^^^^^^^
@@ -481,6 +582,19 @@ libraries. Make sure not to add modules/packages containing the word
"test", as these likely won't end up in the installation directory,
or may require test dependencies like pytest to be installed.
Instead of defining the ``import_modules`` explicity, only the subset
of module names to be skipped can be defined by using ``skip_modules``.
If a defined module has submodules, they are skipped as well, e.g.,
in case the ``plotting`` modules should be excluded from the
automatically detected ``import_modules`` ``['nilearn', 'nilearn.surface',
'nilearn.plotting', 'nilearn.plotting.data']`` set:
.. code-block:: python
skip_modules = ['nilearn.plotting']
This will set ``import_modules`` to ``['nilearn', 'nilearn.surface']``
Import tests can be run during the installation using ``spack install
--test=root`` or at any time after the installation using
``spack test run``.
@@ -664,5 +778,8 @@ For more information on build and installation frontend tools, see:
For more information on build backend tools, see:
* setuptools: https://setuptools.pypa.io/
* flit: https://flit.readthedocs.io/
* flit: https://flit.pypa.io/
* poetry: https://python-poetry.org/
* hatchling: https://hatch.pypa.io/latest/
* meson: https://meson-python.readthedocs.io/
* pdm: https://pdm.fming.dev/latest/

View File

@@ -0,0 +1,55 @@
.. Copyright 2013-2022 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)
.. _sourceforgepackage:
------------------
SourceforgePackage
------------------
``SourceforgePackage`` is a
`mixin-class <https://en.wikipedia.org/wiki/Mixin>`_. It automatically
sets the URL based on a list of Sourceforge mirrors listed in
`sourceforge_mirror_path`, which defaults to a half dozen known mirrors.
Refer to the package source
(`<https://github.com/spack/spack/blob/develop/lib/spack/spack/build_systems/sourceforge.py>`__) for the current list of mirrors used by Spack.
^^^^^^^
Methods
^^^^^^^
This package provides a method for populating mirror URLs.
**urls**
This method returns a list of possible URLs for package source.
It is decorated with `property` so its results are treated as
a package attribute.
Refer to
`<https://spack.readthedocs.io/en/latest/packaging_guide.html#mirrors-of-the-main-url>`__
for information on how Spack uses the `urls` attribute during
fetching.
^^^^^
Usage
^^^^^
This helper package can be added to your package by adding it as a base
class of your package and defining the relative location of an archive
file for one version of your software.
.. code-block:: python
:emphasize-lines: 1,3
class MyPackage(AutotoolsPackage, SourceforgePackage):
...
sourceforge_mirror_path = "my-package/mypackage.1.0.0.tar.gz"
...
Over 40 packages are using ``SourceforcePackage`` this mix-in as of
July 2022 so there are multiple packages to choose from if you want
to see a real example.

View File

@@ -32,37 +32,39 @@
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath('_spack_root/lib/spack/external'))
sys.path.insert(0, os.path.abspath('_spack_root/lib/spack/external/pytest-fallback'))
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external"))
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external/pytest-fallback"))
if sys.version_info[0] < 3:
sys.path.insert(
0, os.path.abspath('_spack_root/lib/spack/external/yaml/lib'))
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external/yaml/lib"))
else:
sys.path.insert(
0, os.path.abspath('_spack_root/lib/spack/external/yaml/lib3'))
sys.path.insert(0, os.path.abspath("_spack_root/lib/spack/external/yaml/lib3"))
sys.path.append(os.path.abspath('_spack_root/lib/spack/'))
sys.path.append(os.path.abspath("_spack_root/lib/spack/"))
# Add the Spack bin directory to the path so that we can use its output in docs.
os.environ['SPACK_ROOT'] = os.path.abspath('_spack_root')
os.environ['PATH'] += "%s%s" % (os.pathsep, os.path.abspath('_spack_root/bin'))
os.environ["SPACK_ROOT"] = os.path.abspath("_spack_root")
os.environ["PATH"] += "%s%s" % (os.pathsep, os.path.abspath("_spack_root/bin"))
# Set an environment variable so that colify will print output like it would to
# a terminal.
os.environ['COLIFY_SIZE'] = '25x120'
os.environ['COLUMNS'] = '120'
os.environ["COLIFY_SIZE"] = "25x120"
os.environ["COLUMNS"] = "120"
# Generate full package list if needed
subprocess.call([
'spack', 'list', '--format=html', '--update=package_list.html'])
subprocess.call(["spack", "list", "--format=html", "--update=package_list.html"])
# Generate a command index if an update is needed
subprocess.call([
'spack', 'commands',
'--format=rst',
'--header=command_index.in',
'--update=command_index.rst'] + glob('*rst'))
subprocess.call(
[
"spack",
"commands",
"--format=rst",
"--header=command_index.in",
"--update=command_index.rst",
]
+ glob("*rst")
)
#
# Run sphinx-apidoc
@@ -72,12 +74,12 @@
# Without this, the API Docs will never actually update
#
apidoc_args = [
'--force', # Overwrite existing files
'--no-toc', # Don't create a table of contents file
'--output-dir=.', # Directory to place all output
"--force", # Overwrite existing files
"--no-toc", # Don't create a table of contents file
"--output-dir=.", # Directory to place all output
]
sphinx_apidoc(apidoc_args + ['_spack_root/lib/spack/spack'])
sphinx_apidoc(apidoc_args + ['_spack_root/lib/spack/llnl'])
sphinx_apidoc(apidoc_args + ["_spack_root/lib/spack/spack"])
sphinx_apidoc(apidoc_args + ["_spack_root/lib/spack/llnl"])
# Enable todo items
todo_include_todos = True
@@ -87,10 +89,12 @@
#
class PatchedPythonDomain(PythonDomain):
def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
if 'refspecific' in node:
del node['refspecific']
if "refspecific" in node:
del node["refspecific"]
return super(PatchedPythonDomain, self).resolve_xref(
env, fromdocname, builder, typ, target, node, contnode)
env, fromdocname, builder, typ, target, node, contnode
)
#
# Disable tabs to space expansion in code blocks
@@ -103,51 +107,58 @@ def parse(self, inputstring, document):
inputstring = StringList(lines, document.current_source)
super().parse(inputstring, document)
def setup(sphinx):
sphinx.add_domain(PatchedPythonDomain, override=True)
sphinx.add_source_parser(NoTabExpansionRSTParser, override=True)
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
needs_sphinx = '3.4'
needs_sphinx = "3.4"
# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.graphviz',
'sphinx.ext.intersphinx',
'sphinx.ext.napoleon',
'sphinx.ext.todo',
'sphinx.ext.viewcode',
'sphinxcontrib.programoutput',
"sphinx.ext.autodoc",
"sphinx.ext.graphviz",
"sphinx.ext.intersphinx",
"sphinx.ext.napoleon",
"sphinx.ext.todo",
"sphinx.ext.viewcode",
"sphinx_design",
"sphinxcontrib.programoutput",
]
# Set default graphviz options
graphviz_dot_args = [
'-Grankdir=LR', '-Gbgcolor=transparent',
'-Nshape=box', '-Nfontname=monaco', '-Nfontsize=10']
"-Grankdir=LR",
"-Gbgcolor=transparent",
"-Nshape=box",
"-Nfontname=monaco",
"-Nfontsize=10",
]
# Get nice vector graphics
graphviz_output_format = "svg"
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
templates_path = ["_templates"]
# The suffix of source filenames.
source_suffix = '.rst'
source_suffix = ".rst"
# The encoding of source files.
source_encoding = 'utf-8-sig'
source_encoding = "utf-8-sig"
# The master toctree document.
master_doc = 'index'
master_doc = "index"
# General information about the project.
project = u'Spack'
copyright = u'2013-2021, Lawrence Livermore National Laboratory.'
project = u"Spack"
copyright = u"2013-2021, Lawrence Livermore National Laboratory."
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -156,16 +167,16 @@ def setup(sphinx):
# The short X.Y version.
import spack
version = '.'.join(str(s) for s in spack.spack_version_info[:2])
version = ".".join(str(s) for s in spack.spack_version_info[:2])
# The full version, including alpha/beta/rc tags.
release = spack.spack_version
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#language = None
# language = None
# Places to look for .po/.mo files for doc translations
#locale_dirs = []
# locale_dirs = []
# Sphinx gettext settings
gettext_compact = True
@@ -173,41 +184,43 @@ def setup(sphinx):
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build', '_spack_root', '.spack-env']
exclude_patterns = ["_build", "_spack_root", ".spack-env"]
nitpicky = True
nitpick_ignore = [
# Python classes that intersphinx is unable to resolve
('py:class', 'argparse.HelpFormatter'),
('py:class', 'contextlib.contextmanager'),
('py:class', 'module'),
('py:class', '_io.BufferedReader'),
('py:class', 'unittest.case.TestCase'),
('py:class', '_frozen_importlib_external.SourceFileLoader'),
("py:class", "argparse.HelpFormatter"),
("py:class", "contextlib.contextmanager"),
("py:class", "module"),
("py:class", "_io.BufferedReader"),
("py:class", "unittest.case.TestCase"),
("py:class", "_frozen_importlib_external.SourceFileLoader"),
("py:class", "clingo.Control"),
("py:class", "six.moves.urllib.parse.ParseResult"),
# Spack classes that are private and we don't want to expose
('py:class', 'spack.provider_index._IndexBase'),
('py:class', 'spack.repo._PrependFileLoader'),
("py:class", "spack.provider_index._IndexBase"),
("py:class", "spack.repo._PrependFileLoader"),
]
# The reST default role (used for this markup: `text`) to use for all documents.
#default_role = None
# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
# We use our own extension of the default style with a few modifications
@@ -218,156 +231,151 @@ def setup(sphinx):
class SpackStyle(DefaultStyle):
styles = DefaultStyle.styles.copy()
background_color = "#f4f4f8"
background_color = "#f4f4f8"
styles[Generic.Output] = "#355"
styles[Generic.Prompt] = "bold #346ec9"
import pkg_resources
dist = pkg_resources.Distribution(__file__)
sys.path.append('.') # make 'conf' module findable
ep = pkg_resources.EntryPoint.parse('spack = conf:SpackStyle', dist=dist)
dist._ep_map = {'pygments.styles': {'plugin1': ep}}
sys.path.append(".") # make 'conf' module findable
ep = pkg_resources.EntryPoint.parse("spack = conf:SpackStyle", dist=dist)
dist._ep_map = {"pygments.styles": {"plugin1": ep}}
pkg_resources.working_set.add(dist)
pygments_style = 'spack'
pygments_style = "spack"
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# modindex_common_prefix = []
# -- Options for HTML output ---------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'sphinx_rtd_theme'
html_theme = "sphinx_rtd_theme"
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
html_theme_options = { 'logo_only' : True }
html_theme_options = {"logo_only": True}
# Add any paths that contain custom themes here, relative to this directory.
# html_theme_path = ["_themes"]
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
html_logo = '_spack_root/share/spack/logo/spack-logo-white-text.svg'
html_logo = "_spack_root/share/spack/logo/spack-logo-white-text.svg"
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
html_favicon = '_spack_root/share/spack/logo/favicon.ico'
html_favicon = "_spack_root/share/spack/logo/favicon.ico"
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
html_static_path = ["_static"]
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
html_last_updated_fmt = '%b %d, %Y'
html_last_updated_fmt = "%b %d, %Y"
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = False
# html_show_sphinx = False
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# html_file_suffix = None
# Output file base name for HTML help builder.
htmlhelp_basename = 'Spackdoc'
htmlhelp_basename = "Spackdoc"
# -- Options for LaTeX output --------------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'Spack.tex', u'Spack Documentation',
u'Todd Gamblin', 'manual'),
("index", "Spack.tex", u"Spack Documentation", u"Todd Gamblin", "manual"),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# latex_domain_indices = True
# -- Options for manual page output --------------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'spack', u'Spack Documentation',
[u'Todd Gamblin'], 1)
]
man_pages = [("index", "spack", u"Spack Documentation", [u"Todd Gamblin"], 1)]
# If true, show URL addresses after external links.
#man_show_urls = False
# man_show_urls = False
# -- Options for Texinfo output ------------------------------------------------
@@ -376,19 +384,25 @@ class SpackStyle(DefaultStyle):
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
('index', 'Spack', u'Spack Documentation',
u'Todd Gamblin', 'Spack', 'One line description of project.',
'Miscellaneous'),
(
"index",
"Spack",
u"Spack Documentation",
u"Todd Gamblin",
"Spack",
"One line description of project.",
"Miscellaneous",
),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# texinfo_show_urls = 'footnote'
# -- Extension configuration -------------------------------------------------

View File

@@ -19,9 +19,9 @@ see the default settings by looking at
These settings can be overridden in ``etc/spack/config.yaml`` or
``~/.spack/config.yaml``. See :ref:`configuration-scopes` for details.
--------------------
``install_tree``
--------------------
---------------------
``install_tree:root``
---------------------
The location where Spack will install packages and their dependencies.
Default is ``$spack/opt/spack``.

View File

@@ -59,7 +59,7 @@ other techniques to minimize the size of the final image:
&& echo " specs:" \
&& echo " - gromacs+mpi" \
&& echo " - mpich" \
&& echo " concretizer: together" \
&& echo " concretizer:" \
&& echo " unify: true" \
&& echo " config:" \
&& echo " install_tree: /opt/software" \
@@ -109,9 +109,10 @@ Spack Images on Docker Hub
--------------------------
Docker images with Spack preinstalled and ready to be used are
built on `Docker Hub <https://hub.docker.com/u/spack>`_
at every push to ``develop`` or to a release branch. The OS that
are currently supported are summarized in the table below:
built when a release is tagged, or nightly on ``develop``. The images
are then pushed both to `Docker Hub <https://hub.docker.com/u/spack>`_
and to `GitHub Container Registry <https://github.com/orgs/spack/packages?repo_name=spack>`_.
The OS that are currently supported are summarized in the table below:
.. _containers-supported-os:
@@ -121,22 +122,31 @@ are currently supported are summarized in the table below:
* - Operating System
- Base Image
- Spack Image
* - Ubuntu 16.04
- ``ubuntu:16.04``
- ``spack/ubuntu-xenial``
* - Ubuntu 18.04
- ``ubuntu:18.04``
- ``spack/ubuntu-bionic``
* - Ubuntu 20.04
- ``ubuntu:20.04``
- ``spack/ubuntu-focal``
* - Ubuntu 22.04
- ``ubuntu:22.04``
- ``spack/ubuntu-jammy``
* - CentOS 7
- ``centos:7``
- ``spack/centos7``
* - CentOS Stream
- ``quay.io/centos/centos:stream``
- ``spack/centos-stream``
* - openSUSE Leap
- ``opensuse/leap``
- ``spack/leap15``
* - Amazon Linux 2
- ``amazonlinux:2``
- ``spack/amazon-linux``
All the images are tagged with the corresponding release of Spack:
.. image:: dockerhub_spack.png
.. image:: images/ghcr_spack.png
with the exception of the ``latest`` tag that points to the HEAD
of the ``develop`` branch. These images are available for anyone

View File

@@ -71,7 +71,7 @@ locally to speed up the review process.
new release that is causing problems. If this is the case, please file an issue.
We currently test against Python 2.7 and 3.5-3.9 on both macOS and Linux and
We currently test against Python 2.7 and 3.6-3.10 on both macOS and Linux and
perform 3 types of tests:
.. _cmd-spack-unit-test:

View File

@@ -107,7 +107,6 @@ with a high level view of Spack's directory structure:
llnl/ <- some general-use libraries
spack/ <- spack module; contains Python code
analyzers/ <- modules to run analysis on installed packages
build_systems/ <- modules for different build systems
cmd/ <- each file in here is a spack subcommand
compilers/ <- compiler description files
@@ -151,7 +150,7 @@ Package-related modules
^^^^^^^^^^^^^^^^^^^^^^^
:mod:`spack.package`
Contains the :class:`~spack.package.Package` class, which
Contains the :class:`~spack.package_base.Package` class, which
is the superclass for all packages in Spack. Methods on ``Package``
implement all phases of the :ref:`package lifecycle
<package-lifecycle>` and manage the build process.
@@ -242,22 +241,6 @@ Unit tests
Implements Spack's test suite. Add a module and put its name in
the test suite in ``__init__.py`` to add more unit tests.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Research and Monitoring Modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:mod:`spack.monitor`
Contains :class:`~spack.monitor.SpackMonitorClient`. This is accessed from
the ``spack install`` and ``spack analyze`` commands to send build and
package metadata up to a `Spack Monitor
<https://github.com/spack/spack-monitor>`_ server.
:mod:`spack.analyzers`
A module folder with a :class:`~spack.analyzers.analyzer_base.AnalyzerBase`
that provides base functions to run, save, and (optionally) upload analysis
results to a `Spack Monitor <https://github.com/spack/spack-monitor>`_ server.
^^^^^^^^^^^^^
Other Modules
@@ -301,240 +284,6 @@ Most spack commands look something like this:
The information in Package files is used at all stages in this
process.
Conceptually, packages are overloaded. They contain:
-------------
Stage objects
-------------
.. _writing-analyzers:
-----------------
Writing analyzers
-----------------
To write an analyzer, you should add a new python file to the
analyzers module directory at ``lib/spack/spack/analyzers`` .
Your analyzer should be a subclass of the :class:`AnalyzerBase <spack.analyzers.analyzer_base.AnalyzerBase>`. For example, if you want
to add an analyzer class ``Myanalyzer`` you would write to
``spack/analyzers/myanalyzer.py`` and import and
use the base as follows:
.. code-block:: python
from .analyzer_base import AnalyzerBase
class Myanalyzer(AnalyzerBase):
Note that the class name is your module file name, all lowercase
except for the first capital letter. You can look at other analyzers in
that analyzer directory for examples. The guide here will tell you about the basic functions needed.
^^^^^^^^^^^^^^^^^^^^^^^^^
Analyzer Output Directory
^^^^^^^^^^^^^^^^^^^^^^^^^
By default, when you run ``spack analyze run`` an analyzer output directory will
be created in your spack user directory in your ``$HOME``. The reason we output here
is because the install directory might not always be writable.
.. code-block:: console
~/.spack/
analyzers
Result files will be written here, organized in subfolders in the same structure
as the package, with each analyzer owning it's own subfolder. for example:
.. code-block:: console
$ tree ~/.spack/analyzers/
/home/spackuser/.spack/analyzers/
└── linux-ubuntu20.04-skylake
└── gcc-9.3.0
└── zlib-1.2.11-sl7m27mzkbejtkrajigj3a3m37ygv4u2
├── environment_variables
│   └── spack-analyzer-environment-variables.json
├── install_files
│   └── spack-analyzer-install-files.json
└── libabigail
└── lib
└── spack-analyzer-libabigail-libz.so.1.2.11.xml
Notice that for the libabigail analyzer, since results are generated per object,
we honor the object's folder in case there are equivalently named files in
different folders. The result files are typically written as json so they can be easily read and uploaded in a future interaction with a monitor.
^^^^^^^^^^^^^^^^^
Analyzer Metadata
^^^^^^^^^^^^^^^^^
Your analyzer is required to have the class attributes ``name``, ``outfile``,
and ``description``. These are printed to the user with they use the subcommand
``spack analyze list-analyzers``. Here is an example.
As we mentioned above, note that this analyzer would live in a module named
``libabigail.py`` in the analyzers folder so that the class can be discovered.
.. code-block:: python
class Libabigail(AnalyzerBase):
name = "libabigail"
outfile = "spack-analyzer-libabigail.json"
description = "Application Binary Interface (ABI) features for objects"
This means that the name and output file should be unique for your analyzer.
Note that "all" cannot be the name of an analyzer, as this key is used to indicate
that the user wants to run all analyzers.
.. _analyzer_run_function:
^^^^^^^^^^^^^^^^^^^^^^^^
An analyzer run Function
^^^^^^^^^^^^^^^^^^^^^^^^
The core of an analyzer is its ``run()`` function, which should accept no
arguments. You can assume your analyzer has the package spec of interest at ``self.spec``
and it's up to the run function to generate whatever analysis data you need,
and then return the object with a key as the analyzer name. The result data
should be a list of objects, each with a name, ``analyzer_name``, ``install_file``,
and one of ``value`` or ``binary_value``. The install file should be for a relative
path, and not the absolute path. For example, let's say we extract a metric called
``metric`` for ``bin/wget`` using our analyzer ``thebest-analyzer``.
We might have data that looks like this:
.. code-block:: python
result = {"name": "metric", "analyzer_name": "thebest-analyzer", "value": "1", "install_file": "bin/wget"}
We'd then return it as follows - note that they key is the analyzer name at ``self.name``.
.. code-block:: python
return {self.name: result}
This will save the complete result to the analyzer metadata folder, as described
previously. If you want support for adding a different kind of metadata (e.g.,
not associated with an install file) then the monitor server would need to be updated
to support this first.
^^^^^^^^^^^^^^^^^^^^^^^^^
An analyzer init Function
^^^^^^^^^^^^^^^^^^^^^^^^^
If you don't need any extra dependencies or checks, you can skip defining an analyzer
init function, as the base class will handle it. Typically, it will accept
a spec, and an optional output directory (if the user does not want the default
metadata folder for analyzer results). The analyzer init function should call
it's parent init, and then do any extra checks or validation that are required to
work. For example:
.. code-block:: python
def __init__(self, spec, dirname=None):
super(Myanalyzer, self).__init__(spec, dirname)
# install extra dependencies, do extra preparation and checks here
At the end of the init, you will have available to you:
- **self.spec**: the spec object
- **self.dirname**: an optional directory name the user as provided at init to save
- **self.output_dir**: the analyzer metadata directory, where we save by default
- **self.meta_dir**: the path to the package metadata directory (.spack) if you need it
And can proceed to write your analyzer.
^^^^^^^^^^^^^^^^^^^^^^^
Saving Analyzer Results
^^^^^^^^^^^^^^^^^^^^^^^
The analyzer will have ``save_result`` called, with the result object generated
to save it to the filesystem, and if the user has added the ``--monitor`` flag
to upload it to a monitor server. If your result follows an accepted result
format and you don't need to parse it further, you don't need to add this
function to your class. However, if your result data is large or otherwise
needs additional parsing, you can define it. If you define the function, it
is useful to know about the ``output_dir`` property, which you can join
with your output file relative path of choice:
.. code-block:: python
outfile = os.path.join(self.output_dir, "my-output-file.txt")
The directory will be provided by the ``output_dir`` property but it won't exist,
so you should create it:
.. code::block:: python
# Create the output directory
if not os.path.exists(self._output_dir):
os.makedirs(self._output_dir)
If you are generating results that match to specific files in the package
install directory, you should try to maintain those paths in the case that
there are equivalently named files in different directories that would
overwrite one another. As an example of an analyzer with a custom save,
the Libabigail analyzer saves ``*.xml`` files to the analyzer metadata
folder in ``run()``, as they are either binaries, or as xml (text) would
usually be too big to pass in one request. For this reason, the files
are saved during ``run()`` and the filenames added to the result object,
and then when the result object is passed back into ``save_result()``,
we skip saving to the filesystem, and instead read the file and send
each one (separately) to the monitor:
.. code-block:: python
def save_result(self, result, monitor=None, overwrite=False):
"""ABI results are saved to individual files, so each one needs to be
read and uploaded. Result here should be the lookup generated in run(),
the key is the analyzer name, and each value is the result file.
We currently upload the entire xml as text because libabigail can't
easily read gzipped xml, but this will be updated when it can.
"""
if not monitor:
return
name = self.spec.package.name
for obj, filename in result.get(self.name, {}).items():
# Don't include the prefix
rel_path = obj.replace(self.spec.prefix + os.path.sep, "")
# We've already saved the results to file during run
content = spack.monitor.read_file(filename)
# A result needs an analyzer, value or binary_value, and name
data = {"value": content, "install_file": rel_path, "name": "abidw-xml"}
tty.info("Sending result for %s %s to monitor." % (name, rel_path))
monitor.send_analyze_metadata(self.spec.package, {"libabigail": [data]})
Notice that this function, if you define it, requires a result object (generated by
``run()``, a monitor (if you want to send), and a boolean ``overwrite`` to be used
to check if a result exists first, and not write to it if the result exists and
overwrite is False. Also notice that since we already saved these files to the analyzer metadata folder, we return early if a monitor isn't defined, because this function serves to send results to the monitor. If you haven't saved anything to the analyzer metadata folder
yet, you might want to do that here. You should also use ``tty.info`` to give
the user a message of "Writing result to $DIRNAME."
.. _writing-commands:
@@ -699,23 +448,6 @@ with a hook, and this is the purpose of this particular hook. Akin to
``on_phase_success`` we require the same variables - the package that failed,
the name of the phase, and the log file where we might find errors.
"""""""""""""""""""""""""""""""""
``on_analyzer_save(pkg, result)``
"""""""""""""""""""""""""""""""""
After an analyzer has saved some result for a package, this hook is called,
and it provides the package that we just ran the analysis for, along with
the loaded result. Typically, a result is structured to have the name
of the analyzer as key, and the result object that is defined in detail in
:ref:`analyzer_run_function`.
.. code-block:: python
def on_analyzer_save(pkg, result):
"""given a package and a result...
"""
print('Do something extra with a package analysis result here')
^^^^^^^^^^^^^^^^^^^^^^
Adding a New Hook Type
@@ -1233,8 +965,13 @@ completed, the steps to make the point release are:
$ git checkout releases/v0.15
#. If a pull request to the release branch named ``Backports vX.Y.Z`` is not already
in the project, create it. This pull request ought to be created as early as
possible when working on a release project, so that we can build the release
commits incrementally, and identify potential conflicts at an early stage.
#. Cherry-pick each pull request in the ``Done`` column of the release
project board onto the release branch.
project board onto the ``Backports vX.Y.Z`` pull request.
This is **usually** fairly simple since we squash the commits from the
vast majority of pull requests. That means there is only one commit
@@ -1259,7 +996,7 @@ completed, the steps to make the point release are:
It is important to cherry-pick commits in the order they happened,
otherwise you can get conflicts while cherry-picking. When
cherry-picking onto a point release, look at the merge date,
cherry-picking look at the merge date,
**not** the number of the pull request or the date it was opened.
Sometimes you may **still** get merge conflicts even if you have
@@ -1280,15 +1017,19 @@ completed, the steps to make the point release are:
branch if neither of the above options makes sense, but this can
require a lot of work. It's seldom the right choice.
#. Bump the version in ``lib/spack/spack/__init__.py``.
#. When all the commits from the project board are cherry-picked into
the ``Backports vX.Y.Z`` pull request, you can push a commit to:
#. Update ``CHANGELOG.md`` with a list of the changes.
1. Bump the version in ``lib/spack/spack/__init__.py``.
2. Update ``CHANGELOG.md`` with a list of the changes.
This is typically a summary of the commits you cherry-picked onto the
release branch. See `the changelog from 0.14.1
<https://github.com/spack/spack/commit/ff0abb9838121522321df2a054d18e54b566b44a>`_.
#. Push the release branch to GitHub.
#. Merge the ``Backports vX.Y.Z`` PR with the **Rebase and merge** strategy. This
is needed to keep track in the release branch of all the commits that were
cherry-picked.
#. Make sure CI passes on the release branch, including:
@@ -1307,6 +1048,8 @@ completed, the steps to make the point release are:
#. Follow the steps in :ref:`announcing-releases`.
#. Submit a PR to update the CHANGELOG in the `develop` branch
with the addition of this point release.
.. _publishing-releases:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -376,6 +376,30 @@ from being added again. At the same time, a spec that already exists in the
environment, but only as a dependency, will be added to the environment as a
root spec without the ``--no-add`` option.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Developing Packages in a Spack Environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The ``spack develop`` command allows one to develop Spack packages in
an environment. It requires a spec containing a concrete version, and
will configure Spack to install the package from local source. By
default, it will also clone the package to a subdirectory in the
environment. This package will have a special variant ``dev_path``
set, and Spack will ensure the package and its dependents are rebuilt
any time the environment is installed if the package's local source
code has been modified. Spack ensures that all instances of a
developed package in the environment are concretized to match the
version (and other constraints) passed as the spec argument to the
``spack develop`` command.
For packages with ``git`` attributes, git branches, tags, and commits can
also be used as valid concrete versions (see :ref:`version-specifier`).
This means that for a package ``foo``, ``spack develop foo@git.main`` will clone
the ``main`` branch of the package, and ``spack install`` will install from
that git clone if ``foo`` is in the environment.
Further development on ``foo`` can be tested by reinstalling the environment,
and eventually committed and pushed to the upstream git repo.
^^^^^^^
Loading
^^^^^^^
@@ -454,14 +478,21 @@ them to the Environment.
spack:
include:
- relative/path/to/config.yaml
- https://github.com/path/to/raw/config/compilers.yaml
- /absolute/path/to/packages.yaml
Environments can include files with either relative or absolute
paths. Inline configurations take precedence over included
configurations, so you don't have to change shared configuration files
to make small changes to an individual Environment. Included configs
listed earlier will have higher precedence, as the included configs are
applied in reverse order.
Environments can include files or URLs. File paths can be relative or
absolute. URLs include the path to the text for individual files or
can be the path to a directory containing configuration files.
^^^^^^^^^^^^^^^^^^^^^^^^
Configuration precedence
^^^^^^^^^^^^^^^^^^^^^^^^
Inline configurations take precedence over included configurations, so
you don't have to change shared configuration files to make small changes
to an individual environment. Included configurations listed earlier will
have higher precedence, as the included configs are applied in reverse order.
-------------------------------
Manually Editing the Specs List
@@ -545,8 +576,8 @@ environment and have a single view of it in the filesystem.
The ``concretizer:unify`` config option was introduced in Spack 0.18 to
replace the ``concretization`` property. For reference,
``concretization: separately`` is replaced by ``concretizer:unify:true``,
and ``concretization: together`` is replaced by ``concretizer:unify:false``.
``concretization: together`` is replaced by ``concretizer:unify:true``,
and ``concretization: separately`` is replaced by ``concretizer:unify:false``.
.. admonition:: Re-concretization of user specs
@@ -592,31 +623,6 @@ The following two Environment manifests are identical:
Spec matrices can be used to install swaths of software across various
toolchains.
The concretization logic for spec matrices differs slightly from the
rest of Spack. If a variant or dependency constraint from a matrix is
invalid, Spack will reject the constraint and try again without
it. For example, the following two Environment manifests will produce
the same specs:
.. code-block:: yaml
spack:
specs:
- matrix:
- [zlib, libelf, hdf5+mpi]
- [^mvapich2@2.2, ^openmpi@3.1.0]
spack:
specs:
- zlib
- libelf
- hdf5+mpi ^mvapich2@2.2
- hdf5+mpi ^openmpi@3.1.0
This allows one to create toolchains out of combinations of
constraints and apply them somewhat indiscriminately to packages,
without regard for the applicability of the constraint.
^^^^^^^^^^^^^^^^^^^^
Spec List References
^^^^^^^^^^^^^^^^^^^^
@@ -799,7 +805,7 @@ directories.
select: [^mpi]
exclude: ['%pgi@18.5']
projections:
all: {name}/{version}-{compiler.name}
all: '{name}/{version}-{compiler.name}'
link: all
link_type: symlink
@@ -948,9 +954,6 @@ Variable Paths
PATH bin
MANPATH man, share/man
ACLOCAL_PATH share/aclocal
LD_LIBRARY_PATH lib, lib64
LIBRARY_PATH lib, lib64
CPATH include
PKG_CONFIG_PATH lib/pkgconfig, lib64/pkgconfig, share/pkgconfig
CMAKE_PREFIX_PATH .
=================== =========
@@ -983,7 +986,7 @@ A typical workflow is as follows:
spack env create -d .
spack -e . add perl
spack -e . concretize
spack -e . env depfile > Makefile
spack -e . env depfile -o Makefile
make -j64
This generates a ``Makefile`` from a concretized environment in the
@@ -996,7 +999,6 @@ load, even when packages are built in parallel.
By default the following phony convenience targets are available:
- ``make all``: installs the environment (default target);
- ``make fetch-all``: only fetch sources of all packages;
- ``make clean``: cleans files used by make, but does not uninstall packages.
.. tip::
@@ -1006,14 +1008,23 @@ By default the following phony convenience targets are available:
printed orderly per package install. To get synchronized output with colors,
use ``make -j<N> SPACK_COLOR=always --output-sync=recurse``.
The following advanced example shows how generated targets can be used in a
``Makefile``:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Specifying dependencies on generated ``make`` targets
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
An interesting question is how to include generated ``Makefile``\s in your own
``Makefile``\s. This comes up when you want to install an environment that provides
executables required in a command for a make target of your own.
The example below shows how to accomplish this: the ``env`` target specifies
the generated ``spack/env`` target as a prerequisite, meaning that the environment
gets installed and is available for use in the ``env`` target.
.. code:: Makefile
SPACK ?= spack
.PHONY: all clean fetch env
.PHONY: all clean env
all: env
@@ -1022,9 +1033,6 @@ The following advanced example shows how generated targets can be used in a
env.mk: spack.lock
$(SPACK) -e . env depfile -o $@ --make-target-prefix spack
fetch: spack/fetch
$(info Environment fetched!)
env: spack/env
$(info Environment installed!)
@@ -1036,11 +1044,10 @@ The following advanced example shows how generated targets can be used in a
include env.mk
endif
When ``make`` is invoked, it first "remakes" the missing include ``env.mk``
from its rule, which triggers concretization. When done, the generated targets
``spack/fetch`` and ``spack/env`` are available. In the above
example, the ``env`` target uses the latter as a prerequisite, meaning
that it can make use of the installed packages in its commands.
This works as follows: when ``make`` is invoked, it first "remakes" the missing
include ``env.mk`` as there is a target for it. This triggers concretization of
the environment and makes spack output ``env.mk``. At that point the
generated target ``spack/env`` becomes available through ``include env.mk``.
As it is typically undesirable to remake ``env.mk`` as part of ``make clean``,
the include is conditional.
@@ -1048,7 +1055,27 @@ the include is conditional.
.. note::
When including generated ``Makefile``\s, it is important to use
the ``--make-target-prefix`` flag and use the non-phony targets
``<target-prefix>/env`` and ``<target-prefix>/fetch`` as
prerequisites, instead of the phony targets ``<target-prefix>/all``
and ``<target-prefix>/fetch-all`` respectively.
the ``--make-target-prefix`` flag and use the non-phony target
``<target-prefix>/env`` as prerequisite, instead of the phony target
``<target-prefix>/all``.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Building a subset of the environment
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The generated ``Makefile``\s contain install targets for each spec. Given the hash
of a particular spec, you can use the ``.install/<hash>`` target to install the
spec with its dependencies. There is also ``.install-deps/<hash>`` to *only* install
its dependencies. This can be useful when certain flags should only apply to
dependencies. Below we show a use case where a spec is installed with verbose
output (``spack install --verbose``) while its dependencies are installed silently:
.. code:: console
$ spack env depfile -o Makefile --make-target-prefix my_env
# Install dependencies in parallel, only show a log on error.
$ make -j16 my_env/.install-deps/<hash> SPACK_INSTALL_FLAGS=--show-log-on-error
# Install the root spec with verbose output.
$ make -j16 my_env/.install/<hash> SPACK_INSTALL_FLAGS=--verbose

View File

@@ -23,8 +23,36 @@ be present on the machine where Spack is run:
These requirements can be easily installed on most modern Linux systems;
on macOS, XCode is required. Spack is designed to run on HPC
platforms like Cray. Not all packages should be expected
to work on all platforms. A build matrix showing which packages are
working on which systems is planned but not yet available.
to work on all platforms.
A build matrix showing which packages are working on which systems is shown below.
.. tab-set::
.. tab-item:: Debian/Ubuntu
.. code-block:: console
apt update
apt install build-essential ca-certificates coreutils curl environment-modules gfortran git gpg lsb-release python3 python3-distutils python3-venv unzip zip
.. tab-item:: RHEL
.. code-block:: console
yum update -y
yum install -y epel-release
yum update -y
yum --enablerepo epel groupinstall -y "Development Tools"
yum --enablerepo epel install -y curl findutils gcc-c++ gcc gcc-gfortran git gnupg2 hostname iproute make patch python3 python3-pip python3-setuptools unzip
python3 -m pip install boto3
.. tab-item:: macOS Brew
.. code-block:: console
brew update
brew install curl gcc git gnupg zip
------------
Installation

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

View File

@@ -56,6 +56,7 @@ or refer to the full manual below.
basic_usage
Tutorial: Spack 101 <https://spack-tutorial.readthedocs.io>
replace_conda_homebrew
known_issues
.. toctree::
:maxdepth: 2

View File

@@ -0,0 +1,40 @@
.. Copyright 2013-2022 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)
============
Known Issues
============
This is a list of known issues in Spack. It provides ways of getting around these
problems if you encounter them.
------------------------------------------------
Spack does not seem to respect ``packages.yaml``
------------------------------------------------
.. note::
This issue is **resolved** as of v0.19.0.dev0 commit
`8281a0c5feabfc4fe180846d6fe95cfe53420bc5`, through the introduction of package
requirements. See :ref:`package-requirements`.
A common problem in Spack v0.18.0 up to v0.19.0.dev0 is that package, compiler and target
preferences specified in ``packages.yaml`` do not seem to be respected. Spack picks the
"wrong" compilers and their versions, package versions and variants, and
micro-architectures.
This is however not a bug. In order to reduce the number of builds of the same
packages, the concretizer values reuse of installed packages higher than preferences
set in ``packages.yaml``. Note that ``packages.yaml`` specifies only preferences, not
hard constraints.
There are multiple workarounds:
1. Disable reuse during concretization: ``spack install --fresh <spec>`` when installing
from the command line, or ``spack concretize --fresh --force`` when using
environments.
2. Turn preferences into constrains, by moving them to the input spec. For example,
use ``spack spec zlib%gcc@12`` when you want to force GCC 12 even if ``zlib`` was
already installed with GCC 10.

View File

@@ -77,7 +77,7 @@ installation of a package.
Spack only generates modulefiles when a package is installed. If
you attempt to install a package and it is already installed, Spack
will not regenerate modulefiles for the package. This may to
will not regenerate modulefiles for the package. This may lead to
inconsistent modulefiles if the Spack module configuration has
changed since the package was installed, either by editing a file
or changing scopes or environments.
@@ -113,6 +113,8 @@ from language interpreters into their extensions. The latter two instead permit
fine tune the filesystem layout, content and creation of module files to meet
site specific conventions.
.. _overide-api-calls-in-package-py:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Override API calls in ``package.py``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -134,7 +136,7 @@ The second method:
pass
can instead inject run-time environment modifications in the module files of packages
that depend on it. In both cases you need to fill ``run_env`` with the desired
that depend on it. In both cases you need to fill ``env`` with the desired
list of environment modifications.
.. admonition:: The ``r`` package and callback APIs
@@ -308,7 +310,7 @@ the variable ``FOOBAR`` will be unset.
spec constraints are instead evaluated top to bottom.
""""""""""""""""""""""""""""""""""""""""""""
Blacklist or whitelist specific module files
Exclude or include specific module files
""""""""""""""""""""""""""""""""""""""""""""
You can use anonymous specs also to prevent module files from being written or
@@ -322,8 +324,8 @@ your system. If you write a configuration file like:
modules:
default:
tcl:
whitelist: ['gcc', 'llvm'] # Whitelist will have precedence over blacklist
blacklist: ['%gcc@4.4.7'] # Assuming gcc@4.4.7 is the system compiler
include: ['gcc', 'llvm'] # include will have precedence over exclude
exclude: ['%gcc@4.4.7'] # Assuming gcc@4.4.7 is the system compiler
you will prevent the generation of module files for any package that
is compiled with ``gcc@4.4.7``, with the only exception of any ``gcc``
@@ -490,7 +492,7 @@ satisfies a default, Spack will generate the module file in the
appropriate path, and will generate a default symlink to the module
file as well.
.. warning::
.. warning::
If Spack is configured to generate multiple default packages in the
same directory, the last modulefile to be generated will be the
default module.
@@ -518,18 +520,33 @@ inspections and customize them per-module-set.
prefix_inspections:
bin:
- PATH
lib:
- LIBRARY_PATH
man:
- MANPATH
'':
- CMAKE_PREFIX_PATH
Prefix inspections are only applied if the relative path inside the
installation prefix exists. In this case, for a Spack package ``foo``
installed to ``/spack/prefix/foo``, if ``foo`` installs executables to
``bin`` but no libraries in ``lib``, the generated module file for
``bin`` but no manpages in ``man``, the generated module file for
``foo`` would update ``PATH`` to contain ``/spack/prefix/foo/bin`` and
``CMAKE_PREFIX_PATH`` to contain ``/spack/prefix/foo``, but would not
update ``LIBRARY_PATH``.
update ``MANPATH``.
The default list of environment variables in this config section
inludes ``PATH``, ``MANPATH``, ``ACLOCAL_PATH``, ``PKG_CONFIG_PATH``
and ``CMAKE_PREFIX_PATH``, as well as ``DYLD_FALLBACK_LIBRARY_PATH``
on macOS. On Linux however, the corresponding ``LD_LIBRARY_PATH``
variable is *not* set, because it affects the behavior of
system executables too.
.. note::
In general, the ``LD_LIBRARY_PATH`` variable is not required
when using packages built with Spack, thanks to the use of RPATH.
Some packages may still need the variable, which is best handled
on a per-package basis instead of globally, as explained in
:ref:`overide-api-calls-in-package-py`.
There is a special case for prefix inspections relative to environment
views. If all of the following conditions hold for a module set
@@ -589,7 +606,7 @@ Filter out environment modifications
Modifications to certain environment variables in module files are there by
default, for instance because they are generated by prefix inspections.
If you want to prevent modifications to some environment variables, you can
do so by using the environment blacklist:
do so by using the ``exclude_env_vars``:
.. code-block:: yaml
@@ -599,7 +616,7 @@ do so by using the environment blacklist:
all:
filter:
# Exclude changes to any of these variables
environment_blacklist: ['CPATH', 'LIBRARY_PATH']
exclude_env_vars: ['CPATH', 'LIBRARY_PATH']
The configuration above will generate module files that will not contain
modifications to either ``CPATH`` or ``LIBRARY_PATH``.

View File

@@ -126,7 +126,7 @@ generates a boilerplate template for your package, and opens up the new
# If you submit this package back to Spack as a pull request,
# please first remove this boilerplate and all FIXME comments.
#
from spack import *
from spack.package import *
class Gmp(AutotoolsPackage):
@@ -699,7 +699,7 @@ Spack versions may also be arbitrary non-numeric strings, for example
``@develop``, ``@master``, ``@local``.
The order on versions is defined as follows. A version string is split
into a list of components based on delimiters such as ``.``, ``-`` etc.
into a list of components based on delimiters such as ``.``, ``-`` etc.
Lists are then ordered lexicographically, where components are ordered
as follows:
@@ -1070,13 +1070,32 @@ Commits
Submodules
You can supply ``submodules=True`` to cause Spack to fetch submodules
recursively along with the repository at fetch time. For more information
about git submodules see the manpage of git: ``man git-submodule``.
recursively along with the repository at fetch time.
.. code-block:: python
version('1.0.1', tag='v1.0.1', submodules=True)
If a package has needs more fine-grained control over submodules, define
``submodules`` to be a callable function that takes the package instance as
its only argument. The function should return a list of submodules to be fetched.
.. code-block:: python
def submodules(package):
submodules = []
if "+variant-1" in package.spec:
submodules.append("submodule_for_variant_1")
if "+variant-2" in package.spec:
submodules.append("submodule_for_variant_2")
return submodules
class MyPackage(Package):
version("0.1.0", submodules=submodules)
For more information about git submodules see the manpage of git: ``man
git-submodule``.
.. _github-fetch:
@@ -2264,9 +2283,17 @@ The following dependency types are available:
One of the advantages of the ``build`` dependency type is that although the
dependency needs to be installed in order for the package to be built, it
can be uninstalled without concern afterwards. ``link`` and ``run`` disallow
this because uninstalling the dependency would break the package. Another
consequence of this is that ``build``-only dependencies do not affect the
hash of the package. The same is true for ``test`` dependencies.
this because uninstalling the dependency would break the package.
``build``, ``link``, and ``run`` dependencies all affect the hash of Spack
packages (along with ``sha256`` sums of patches and archives used to build the
package, and a [canonical hash](https://github.com/spack/spack/pull/28156) of
the ``package.py`` recipes). ``test`` dependencies do not affect the package
hash, as they are only used to construct a test environment *after* building and
installing a given package installation. Older versions of Spack did not include
build dependencies in the hash, but this has been
[fixed](https://github.com/spack/spack/pull/28504) as of [Spack
``v0.18``](https://github.com/spack/spack/releases/tag/v0.18.0)
If the dependency type is not specified, Spack uses a default of
``('build', 'link')``. This is the common case for compiler languages.
@@ -2393,9 +2420,9 @@ Influence how dependents are built or run
Spack provides a mechanism for dependencies to influence the
environment of their dependents by overriding the
:meth:`setup_dependent_run_environment <spack.package.PackageBase.setup_dependent_run_environment>`
:meth:`setup_dependent_run_environment <spack.package_base.PackageBase.setup_dependent_run_environment>`
or the
:meth:`setup_dependent_build_environment <spack.package.PackageBase.setup_dependent_build_environment>`
:meth:`setup_dependent_build_environment <spack.package_base.PackageBase.setup_dependent_build_environment>`
methods.
The Qt package, for instance, uses this call:
@@ -2417,7 +2444,7 @@ will have the ``PYTHONPATH``, ``PYTHONHOME`` and ``PATH`` environment
variables set appropriately before starting the installation. To make things
even simpler the ``python setup.py`` command is also inserted into the module
scope of dependents by overriding a third method called
:meth:`setup_dependent_package <spack.package.PackageBase.setup_dependent_package>`
:meth:`setup_dependent_package <spack.package_base.PackageBase.setup_dependent_package>`
:
.. literalinclude:: _spack_root/var/spack/repos/builtin/packages/python/package.py
@@ -2775,6 +2802,256 @@ Suppose a user invokes ``spack install`` like this:
Spack will fail with a constraint violation, because the version of
MPICH requested is too low for the ``mpi`` requirement in ``foo``.
.. _custom-attributes:
------------------
Custom attributes
------------------
Often a package will need to provide attributes for dependents to query
various details about what it provides. While any number of custom defined
attributes can be implemented by a package, the four specific attributes
described below are always available on every package with default
implementations and the ability to customize with alternate implementations
in the case of virtual packages provided:
=========== =========================================== =====================
Attribute Purpose Default
=========== =========================================== =====================
``home`` The installation path for the package ``spec.prefix``
``command`` An executable command for the package | ``spec.name`` found
in
| ``.home.bin``
``headers`` A list of headers provided by the package | All headers
searched
| recursively in
``.home.include``
``libs`` A list of libraries provided by the package | ``lib{spec.name}``
searched
| recursively in
``.home`` starting
| with ``lib``,
``lib64``, then the
| rest of ``.home``
=========== =========================================== =====================
Each of these can be customized by implementing the relevant attribute
as a ``@property`` in the package's class:
.. code-block:: python
:linenos:
class Foo(Package):
...
@property
def libs(self):
# The library provided by Foo is libMyFoo.so
return find_libraries('libMyFoo', root=self.home, recursive=True)
A package may also provide a custom implementation of each attribute
for the virtual packages it provides by implementing the
``virtualpackagename_attributename`` property in the package's class.
The implementation used is the first one found from:
#. Specialized virtual: ``Package.virtualpackagename_attributename``
#. Generic package: ``Package.attributename``
#. Default
The use of customized attributes is demonstrated in the next example.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Example: Customized attributes for virtual packages
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Consider a package ``foo`` that can optionally provide two virtual
packages ``bar`` and ``baz``. When both are enabled the installation tree
appears as follows:
.. code-block:: console
include/foo.h
include/bar/bar.h
lib64/libFoo.so
lib64/libFooBar.so
baz/include/baz/baz.h
baz/lib/libFooBaz.so
The install tree shows that ``foo`` is providing the header ``include/foo.h``
and library ``lib64/libFoo.so`` in it's install prefix. The virtual
package ``bar`` is providing ``include/bar/bar.h`` and library
``lib64/libFooBar.so``, also in ``foo``'s install prefix. The ``baz``
package, however, is provided in the ``baz`` subdirectory of ``foo``'s
prefix with the ``include/baz/baz.h`` header and ``lib/libFooBaz.so``
library. Such a package could implement the optional attributes as
follows:
.. code-block:: python
:linenos:
class Foo(Package):
...
variant('bar', default=False, description='Enable the Foo implementation of bar')
variant('baz', default=False, description='Enable the Foo implementation of baz')
...
provides('bar', when='+bar')
provides('baz', when='+baz')
....
# Just the foo headers
@property
def headers(self):
return find_headers('foo', root=self.home.include, recursive=False)
# Just the foo libraries
@property
def libs(self):
return find_libraries('libFoo', root=self.home, recursive=True)
# The header provided by the bar virutal package
@property
def bar_headers(self):
return find_headers('bar/bar.h', root=self.home.include, recursive=False)
# The libary provided by the bar virtual package
@property
def bar_libs(self):
return find_libraries('libFooBar', root=sef.home, recursive=True)
# The baz virtual package home
@property
def baz_home(self):
return self.prefix.baz
# The header provided by the baz virtual package
@property
def baz_headers(self):
return find_headers('baz/baz', root=self.baz_home.include, recursive=False)
# The library provided by the baz virtual package
@property
def baz_libs(self):
return find_libraries('libFooBaz', root=self.baz_home, recursive=True)
Now consider another package, ``foo-app``, depending on all three:
.. code-block:: python
:linenos:
class FooApp(CMakePackage):
...
depends_on('foo')
depends_on('bar')
depends_on('baz')
The resulting spec objects for it's dependencies shows the result of
the above attribute implementations:
.. code-block:: python
# The core headers and libraries of the foo package
>>> spec['foo']
foo@1.0%gcc@11.3.1+bar+baz arch=linux-fedora35-haswell
>>> spec['foo'].prefix
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6'
# home defaults to the package install prefix without an explicit implementation
>>> spec['foo'].home
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6'
# foo headers from the foo prefix
>>> spec['foo'].headers
HeaderList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/include/foo.h',
])
# foo include directories from the foo prefix
>>> spec['foo'].headers.directories
['/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/include']
# foo libraries from the foo prefix
>>> spec['foo'].libs
LibraryList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/lib64/libFoo.so',
])
# foo library directories from the foo prefix
>>> spec['foo'].libs.directories
['/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/lib64']
.. code-block:: python
# The virtual bar package in the same prefix as foo
# bar resolves to the foo package
>>> spec['bar']
foo@1.0%gcc@11.3.1+bar+baz arch=linux-fedora35-haswell
>>> spec['bar'].prefix
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6'
# home defaults to the foo prefix without either a Foo.bar_home
# or Foo.home implementation
>>> spec['bar'].home
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6'
# bar header in the foo prefix
>>> spec['bar'].headers
HeaderList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/include/bar/bar.h'
])
# bar include dirs from the foo prefix
>>> spec['bar'].headers.directories
['/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/include']
# bar library from the foo prefix
>>> spec['bar'].libs
LibraryList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/lib64/libFooBar.so'
])
# bar library directories from the foo prefix
>>> spec['bar'].libs.directories
['/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/lib64']
.. code-block:: python
# The virtual baz package in a subdirectory of foo's prefix
# baz resolves to the foo package
>>> spec['baz']
foo@1.0%gcc@11.3.1+bar+baz arch=linux-fedora35-haswell
>>> spec['baz'].prefix
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6'
# baz_home implementation provides the subdirectory inside the foo prefix
>>> spec['baz'].home
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/baz'
# baz headers in the baz subdirectory of the foo prefix
>>> spec['baz'].headers
HeaderList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/baz/include/baz/baz.h'
])
# baz include directories in the baz subdirectory of the foo prefix
>>> spec['baz'].headers.directories
[
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/baz/include'
]
# baz libraries in the baz subdirectory of the foo prefix
>>> spec['baz'].libs
LibraryList([
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/baz/lib/libFooBaz.so'
])
# baz library directories in the baz subdirectory of the foo porefix
>>> spec['baz'].libs.directories
[
'/opt/spack/linux-fedora35-haswell/gcc-11.3.1/foo-1.0-ca3rczp5omy7dfzoqw4p7oc2yh3u7lt6/baz/lib'
]
.. _abstract-and-concrete:
-------------------------
@@ -3022,7 +3299,7 @@ The classes that are currently provided by Spack are:
+----------------------------------------------------------+----------------------------------+
| **Base Class** | **Purpose** |
+==========================================================+==================================+
| :class:`~spack.package.Package` | General base class not |
| :class:`~spack.package_base.Package` | General base class not |
| | specialized for any build system |
+----------------------------------------------------------+----------------------------------+
| :class:`~spack.build_systems.makefile.MakefilePackage` | Specialized class for packages |
@@ -3153,7 +3430,7 @@ for the install phase is:
For those not used to Python instance methods, this is the
package itself. In this case it's an instance of ``Foo``, which
extends ``Package``. For API docs on Package objects, see
:py:class:`Package <spack.package.Package>`.
:py:class:`Package <spack.package_base.Package>`.
``spec``
This is the concrete spec object created by Spack from an
@@ -4284,6 +4561,9 @@ other checks.
* - :ref:`AutotoolsPackage <autotoolspackage>`
- ``check`` (``make test``, ``make check``)
- ``installcheck`` (``make installcheck``)
* - :ref:`CachedCMakePackage <cachedcmakepackage>`
- ``check`` (``make check``, ``make test``)
- Not applicable
* - :ref:`CMakePackage <cmakepackage>`
- ``check`` (``make check``, ``make test``)
- Not applicable
@@ -4308,6 +4588,9 @@ other checks.
* - :ref:`SIPPackage <sippackage>`
- Not applicable
- ``test`` (module imports)
* - :ref:`WafPackage <wafpackage>`
- ``build_test`` (must be overridden)
- ``install_test`` (must be overridden)
For example, the ``Libelf`` package inherits from ``AutotoolsPackage``
and its ``Makefile`` has a standard ``check`` target. So Spack will
@@ -5476,6 +5759,24 @@ Version Lists
Spack packages should list supported versions with the newest first.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Using ``home`` vs ``prefix``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``home`` and ``prefix`` are both attributes that can be queried on a
package's dependencies, often when passing configure arguments pointing to the
location of a dependency. The difference is that while ``prefix`` is the
location on disk where a concrete package resides, ``home`` is the `logical`
location that a package resides, which may be different than ``prefix`` in
the case of virtual packages or other special circumstances. For most use
cases inside a package, it's dependency locations can be accessed via either
``self.spec['foo'].home`` or ``self.spec['foo'].prefix``. Specific packages
that should be consumed by dependents via ``.home`` instead of ``.prefix``
should be noted in their respective documentation.
See :ref:`custom-attributes` for more details and an example implementing
a custom ``home`` attribute.
---------------------------
Packaging workflow commands
---------------------------

View File

@@ -5,9 +5,9 @@
.. _pipelines:
=========
Pipelines
=========
============
CI Pipelines
============
Spack provides commands that support generating and running automated build
pipelines designed for Gitlab CI. At the highest level it works like this:
@@ -168,7 +168,7 @@ which specs are up to date and which need to be rebuilt (it's a good idea for ot
reasons as well, but those are out of scope for this discussion). In this case we
have disabled it (using ``rebuild-index: False``) because the index would only be
generated in the artifacts mirror anyway, and consequently would not be available
during subesequent pipeline runs.
during subsequent pipeline runs.
.. note::
With the addition of reproducible builds (#22887) a previously working
@@ -267,24 +267,64 @@ generated by jobs in the pipeline.
``spack ci rebuild``
^^^^^^^^^^^^^^^^^^^^^
The purpose of the ``spack ci rebuild`` is straightforward: take its assigned
spec job, check whether the target mirror already has a binary for that spec,
and if not, build the spec from source and push the binary to the mirror. To
accomplish this in a reproducible way, the sub-command prepares a ``spack install``
command line to build a single spec in the DAG, saves that command in a
shell script, ``install.sh``, in the current working directory, and then runs
it to install the spec. The shell script is also exported as an artifact to
aid in reproducing the build outside of the CI environment.
The purpose of ``spack ci rebuild`` is straightforward: take its assigned
spec and ensure a binary of a successful build exists on the target mirror.
If the binary does not already exist, it is built from source and pushed
to the mirror. The associated stand-alone tests are optionally run against
the new build. Additionally, files for reproducing the build outside of the
CI environment are created to facilitate debugging.
If it was necessary to install the spec from source, ``spack ci rebuild`` will
also subsequently create a binary package for the spec and try to push it to the
mirror.
If a binary for the spec does not exist on the target mirror, an install
shell script, ``install.sh``, is created and saved in the current working
directory. The script is run in a job to install the spec from source. The
resulting binary package is pushed to the mirror. If ``cdash`` is configured
for the environment, then the build results will be uploaded to the site.
The ``spack ci rebuild`` sub-command mainly expects its "input" to come either
from environment variables or from the ``gitlab-ci`` section of the ``spack.yaml``
environment file. There are two main sources of the environment variables, some
are written into ``.gitlab-ci.yml`` by ``spack ci generate``, and some are
provided by the GitLab CI runtime.
Environment variables and values in the ``gitlab-ci`` section of the
``spack.yaml`` environment file provide inputs to this process. The
two main sources of environment variables are variables written into
``.gitlab-ci.yml`` by ``spack ci generate`` and the GitLab CI runtime.
Several key CI pipeline variables are described in
:ref:`ci_environment_variables`.
If the ``--tests`` option is provided, stand-alone tests are performed but
only if the build was successful *and* the package does not appear in the
list of ``broken-tests-packages``. A shell script, ``test.sh``, is created
and run to perform the tests. On completion, test logs are exported as job
artifacts for review and to facilitate debugging. If `cdash` is configured,
test results are also uploaded to the site.
A snippet from an example ``spack.yaml`` file illustrating use of this
option *and* specification of a package with broken tests is given below.
The inclusion of a spec for building ``gptune`` is not shown here. Note
that ``--tests`` is passed to ``spack ci rebuild`` as part of the
``gitlab-ci`` script.
.. code-block:: yaml
gitlab-ci:
script:
- . "./share/spack/setup-env.sh"
- spack --version
- cd ${SPACK_CONCRETE_ENV_DIR}
- spack env activate --without-view .
- spack config add "config:install_tree:projections:${SPACK_JOB_SPEC_PKG_NAME}:'morepadding/{architecture}/{compiler.name}-{compiler.version}/{name}-{version}-{hash}'"
- mkdir -p ${SPACK_ARTIFACTS_ROOT}/user_data
- if [[ -r /mnt/key/intermediate_ci_signing_key.gpg ]]; then spack gpg trust /mnt/key/intermediate_ci_signing_key.gpg; fi
- if [[ -r /mnt/key/spack_public_key.gpg ]]; then spack gpg trust /mnt/key/spack_public_key.gpg; fi
- spack -d ci rebuild --tests > >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_out.txt) 2> >(tee ${SPACK_ARTIFACTS_ROOT}/user_data/pipeline_err.txt >&2)
broken-tests-packages:
- gptune
In this case, even if ``gptune`` is successfully built from source, the
pipeline will *not* run its stand-alone tests since the package is listed
under ``broken-tests-packages``.
Spack's cloud pipelines provide actual, up-to-date examples of the CI/CD
configuration and environment files used by Spack. You can find them
under Spack's `stacks
<https://github.com/spack/spack/tree/develop/share/spack/gitlab/cloud_pipelines/stacks>`_ repository directory.
.. _cmd-spack-ci-rebuild-index:
@@ -447,7 +487,7 @@ Note about "no-op" jobs
^^^^^^^^^^^^^^^^^^^^^^^
If no specs in an environment need to be rebuilt during a given pipeline run
(meaning all are already up to date on the mirror), a single succesful job
(meaning all are already up to date on the mirror), a single successful job
(a NO-OP) is still generated to avoid an empty pipeline (which GitLab
considers to be an error). An optional ``service-job-attributes`` section
can be added to your ``spack.yaml`` where you can provide ``tags`` and
@@ -725,7 +765,7 @@ above with ``git checkout ${SPACK_CHECKOUT_VERSION}``.
On the other hand, if you're pointing to a spack repository and branch under your
control, there may be no benefit in using the captured ``SPACK_CHECKOUT_VERSION``,
and you can instead just clone using the variables you define (``SPACK_REPO``
and ``SPACK_REF`` in the example aboves).
and ``SPACK_REF`` in the example above).
.. _custom_workflow:

View File

@@ -1,10 +1,12 @@
# These dependencies should be installed using pip in order
# to build the documentation.
sphinx>=3.4,!=4.1.2
sphinx>=3.4,!=4.1.2,!=5.1.0
sphinxcontrib-programoutput
sphinx-design
sphinx-rtd-theme
python-levenshtein
# Restrict to docutils <0.17 to workaround a list rendering issue in sphinx.
# https://stackoverflow.com/questions/67542699
docutils <0.17
pygments <2.13

View File

@@ -18,7 +18,10 @@ spack:
- "py-sphinx@3.4:4.1.1,4.1.3:"
- py-sphinxcontrib-programoutput
- py-docutils@:0.16
- py-sphinx-design
- py-sphinx-rtd-theme
- py-pygments@:2.12
# VCS
- git
- mercurial

View File

@@ -1,5 +1,5 @@
Name, Supported Versions, Notes, Requirement Reason
Python, 2.7/3.5-3.10, , Interpreter for Spack
Python, 2.7/3.6-3.10, , Interpreter for Spack
C/C++ Compilers, , , Building software
make, , , Build software
patch, , , Build software
@@ -7,7 +7,7 @@ bash, , , Compiler wrappers
tar, , , Extract/create archives
gzip, , , Compress/Decompress archives
unzip, , , Compress/Decompress archives
bzip, , , Compress/Decompress archives
bzip2, , , Compress/Decompress archives
xz, , , Compress/Decompress archives
zstd, , Optional, Compress/Decompress archives
file, , , Create/Use Buildcaches
@@ -15,4 +15,4 @@ gnupg2, , , Sign/Verify Buildcaches
git, , , Manage Software Repositories
svn, , Optional, Manage Software Repositories
hg, , Optional, Manage Software Repositories
Python header files, , Optional (e.g. ``python3-dev`` on Debian), Bootstrapping from sources
Python header files, , Optional (e.g. ``python3-dev`` on Debian), Bootstrapping from sources
1 Name Supported Versions Notes Requirement Reason
2 Python 2.7/3.5-3.10 2.7/3.6-3.10 Interpreter for Spack
3 C/C++ Compilers Building software
4 make Build software
5 patch Build software
7 tar Extract/create archives
8 gzip Compress/Decompress archives
9 unzip Compress/Decompress archives
10 bzip bzip2 Compress/Decompress archives
11 xz Compress/Decompress archives
12 zstd Optional Compress/Decompress archives
13 file Create/Use Buildcaches
15 git Manage Software Repositories
16 svn Optional Manage Software Repositories
17 hg Optional Manage Software Repositories
18 Python header files Optional (e.g. ``python3-dev`` on Debian) Bootstrapping from sources

26
lib/spack/env/cc vendored
View File

@@ -401,8 +401,7 @@ input_command="$*"
# command line and recombine them with Spack arguments later. We
# parse these out so that we can make sure that system paths come
# last, that package arguments come first, and that Spack arguments
# are injected properly. Based on configuration, we also strip -Werror
# arguments.
# are injected properly.
#
# All other arguments, including -l arguments, are treated as
# 'other_args' and left in their original order. This ensures that
@@ -441,29 +440,6 @@ while [ $# -ne 0 ]; do
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 other_args_list "$1"
shift
continue
;;
esac
"
fi
if [ -n "${SPACK_COMPILER_FLAGS_REMOVE}" ] ; then
eval "\
case '$1' in
$SPACK_COMPILER_FLAGS_REMOVE)
shift
continue
;;
esac
"
fi
case "$1" in
-isystem*)
arg="${1#-isystem}"

View File

@@ -18,7 +18,7 @@
* Homepage: https://pypi.python.org/pypi/archspec
* Usage: Labeling, comparison and detection of microarchitectures
* Version: 0.1.4 (commit 53fc4ac91e9b4c5e4079f15772503a80bece72ad)
* Version: 0.1.4 (commit e2cfdc266174488dee78b8c9058e36d60dc1b548)
argparse
--------

View File

@@ -106,7 +106,7 @@ def __eq__(self, other):
self.name == other.name
and self.vendor == other.vendor
and self.features == other.features
and self.ancestors == other.ancestors
and self.parents == other.parents # avoid ancestors here
and self.compilers == other.compilers
and self.generation == other.generation
)

View File

@@ -85,21 +85,21 @@
"intel": [
{
"versions": ":",
"name": "pentium4",
"name": "x86-64",
"flags": "-march={name} -mtune=generic"
}
],
"oneapi": [
{
"versions": ":",
"name": "pentium4",
"name": "x86-64",
"flags": "-march={name} -mtune=generic"
}
],
"dpcpp": [
{
"versions": ":",
"name": "pentium4",
"name": "x86-64",
"flags": "-march={name} -mtune=generic"
}
]
@@ -143,6 +143,20 @@
"name": "x86-64",
"flags": "-march={name} -mtune=generic -mcx16 -msahf -mpopcnt -msse3 -msse4.1 -msse4.2 -mssse3"
}
],
"oneapi": [
{
"versions": "2021.2.0:",
"name": "x86-64-v2",
"flags": "-march={name} -mtune=generic"
}
],
"dpcpp": [
{
"versions": "2021.2.0:",
"name": "x86-64-v2",
"flags": "-march={name} -mtune=generic"
}
]
}
},
@@ -200,6 +214,20 @@
"name": "x86-64",
"flags": "-march={name} -mtune=generic -mcx16 -msahf -mpopcnt -msse3 -msse4.1 -msse4.2 -mssse3 -mavx -mavx2 -mbmi -mbmi2 -mf16c -mfma -mlzcnt -mmovbe -mxsave"
}
],
"oneapi": [
{
"versions": "2021.2.0:",
"name": "x86-64-v3",
"flags": "-march={name} -mtune=generic"
}
],
"dpcpp": [
{
"versions": "2021.2.0:",
"name": "x86-64-v3",
"flags": "-march={name} -mtune=generic"
}
]
}
},
@@ -262,6 +290,20 @@
"name": "x86-64",
"flags": "-march={name} -mtune=generic -mcx16 -msahf -mpopcnt -msse3 -msse4.1 -msse4.2 -mssse3 -mavx -mavx2 -mbmi -mbmi2 -mf16c -mfma -mlzcnt -mmovbe -mxsave -mavx512f -mavx512bw -mavx512cd -mavx512dq -mavx512vl"
}
],
"oneapi": [
{
"versions": "2021.2.0:",
"name": "x86-64-v4",
"flags": "-march={name} -mtune=generic"
}
],
"dpcpp": [
{
"versions": "2021.2.0:",
"name": "x86-64-v4",
"flags": "-march={name} -mtune=generic"
}
]
}
},
@@ -302,22 +344,19 @@
"intel": [
{
"versions": "16.0:",
"name": "pentium4",
"flags": "-march={name} -mtune=generic"
"flags": "-march={name} -mtune={name}"
}
],
"oneapi": [
{
"versions": ":",
"name": "pentium4",
"flags": "-march={name} -mtune=generic"
"flags": "-march={name} -mtune={name}"
}
],
"dpcpp": [
{
"versions": ":",
"name": "pentium4",
"flags": "-march={name} -mtune=generic"
"flags": "-march={name} -mtune={name}"
}
]
}
@@ -1060,8 +1099,7 @@
"avx512cd",
"avx512vbmi",
"avx512ifma",
"sha",
"umip"
"sha"
],
"compilers": {
"gcc": [
@@ -1224,7 +1262,6 @@
"avx512vbmi",
"avx512ifma",
"sha_ni",
"umip",
"clwb",
"rdpid",
"gfni",
@@ -2210,7 +2247,7 @@
}
},
"graviton2": {
"from": ["aarch64"],
"from": ["graviton"],
"vendor": "ARM",
"features": [
"fp",
@@ -2280,6 +2317,107 @@
]
}
},
"graviton3": {
"from": ["graviton2"],
"vendor": "ARM",
"features": [
"fp",
"asimd",
"evtstrm",
"aes",
"pmull",
"sha1",
"sha2",
"crc32",
"atomics",
"fphp",
"asimdhp",
"cpuid",
"asimdrdm",
"jscvt",
"fcma",
"lrcpc",
"dcpop",
"sha3",
"sm3",
"sm4",
"asimddp",
"sha512",
"sve",
"asimdfhm",
"dit",
"uscat",
"ilrcpc",
"flagm",
"ssbs",
"paca",
"pacg",
"dcpodp",
"svei8mm",
"svebf16",
"i8mm",
"bf16",
"dgh",
"rng"
],
"compilers" : {
"gcc": [
{
"versions": "4.8:4.8.9",
"flags": "-march=armv8-a"
},
{
"versions": "4.9:5.9",
"flags": "-march=armv8-a+crc+crypto"
},
{
"versions": "6:6.9",
"flags" : "-march=armv8.1-a"
},
{
"versions": "7:7.9",
"flags" : "-march=armv8.2-a+crypto+fp16 -mtune=cortex-a72"
},
{
"versions": "8.0:8.9",
"flags" : "-march=armv8.2-a+fp16+dotprod+crypto -mtune=cortex-a72"
},
{
"versions": "9.0:9.9",
"flags" : "-march=armv8.4-a+crypto+rcpc+sha3+sm4+sve+rng+nodotprod -mtune=neoverse-v1"
},
{
"versions": "10.0:",
"flags" : "-march=armv8.4-a+crypto+rcpc+sha3+sm4+sve+rng+ssbs+i8mm+bf16+nodotprod -mtune=neoverse-v1"
}
],
"clang" : [
{
"versions": "3.9:4.9",
"flags" : "-march=armv8.2-a+fp16+crc+crypto"
},
{
"versions": "5:10",
"flags" : "-march=armv8.2-a+fp16+rcpc+dotprod+crypto"
},
{
"versions": "11:",
"flags" : "-march=armv8.4-a+sve+ssbs+fp16+bf16+crypto+i8mm+rng"
}
],
"arm" : [
{
"versions": "20:21.9",
"flags" : "-march=armv8.2-a+sve+fp16+rcpc+dotprod+crypto"
},
{
"versions": "22:",
"flags" : "-march=armv8.4-a+sve+ssbs+fp16+bf16+crypto+i8mm+rng"
}
]
}
},
"m1": {
"from": ["aarch64"],
"vendor": "Apple",

View File

@@ -71,6 +71,8 @@
import re
import math
import multiprocessing
import sys
import threading
import time
from contextlib import contextmanager
@@ -409,7 +411,12 @@ def parse(self, stream, context=6, jobs=None):
pool = multiprocessing.Pool(jobs)
try:
# this is a workaround for a Python bug in Pool with ctrl-C
results = pool.map_async(_parse_unpack, args, 1).get(9999999)
if sys.version_info >= (3, 2):
max_timeout = threading.TIMEOUT_MAX
else:
max_timeout = 9999999
results = pool.map_async(_parse_unpack, args, 1).get(max_timeout)
errors, warnings, timings = zip(*results)
finally:
pool.terminate()

View File

@@ -29,8 +29,8 @@ class Command(object):
- optionals: list of optional arguments (list)
- subcommands: list of subcommand parsers (list)
"""
def __init__(self, prog, description, usage,
positionals, optionals, subcommands):
def __init__(self, prog, description, usage, positionals, optionals, subcommands):
self.prog = prog
self.description = description
self.usage = usage
@@ -71,15 +71,15 @@ def parse(self, parser, prog):
"""
self.parser = parser
split_prog = parser.prog.split(' ')
split_prog = parser.prog.split(" ")
split_prog[-1] = prog
prog = ' '.join(split_prog)
prog = " ".join(split_prog)
description = parser.description
fmt = parser._get_formatter()
actions = parser._actions
groups = parser._mutually_exclusive_groups
usage = fmt._format_usage(None, actions, groups, '').strip()
usage = fmt._format_usage(None, actions, groups, "").strip()
# Go through actions and split them into optionals, positionals,
# and subcommands
@@ -90,8 +90,8 @@ def parse(self, parser, prog):
if action.option_strings:
flags = action.option_strings
dest_flags = fmt._format_action_invocation(action)
help = self._expand_help(action) if action.help else ''
help = help.replace('\n', ' ')
help = self._expand_help(action) if action.help else ""
help = help.replace("\n", " ")
optionals.append((flags, dest_flags, help))
elif isinstance(action, argparse._SubParsersAction):
for subaction in action._choices_actions:
@@ -100,20 +100,19 @@ def parse(self, parser, prog):
# Look for aliases of the form 'name (alias, ...)'
if self.aliases:
match = re.match(r'(.*) \((.*)\)', subaction.metavar)
match = re.match(r"(.*) \((.*)\)", subaction.metavar)
if match:
aliases = match.group(2).split(', ')
aliases = match.group(2).split(", ")
for alias in aliases:
subparser = action._name_parser_map[alias]
subcommands.append((subparser, alias))
else:
args = fmt._format_action_invocation(action)
help = self._expand_help(action) if action.help else ''
help = help.replace('\n', ' ')
help = self._expand_help(action) if action.help else ""
help = help.replace("\n", " ")
positionals.append((args, help))
return Command(
prog, description, usage, positionals, optionals, subcommands)
return Command(prog, description, usage, positionals, optionals, subcommands)
def format(self, cmd):
"""Returns the string representation of a single node in the
@@ -161,14 +160,13 @@ def write(self, parser):
raise
_rst_levels = ['=', '-', '^', '~', ':', '`']
_rst_levels = ["=", "-", "^", "~", ":", "`"]
class ArgparseRstWriter(ArgparseWriter):
"""Write argparse output as rst sections."""
def __init__(self, prog, out=None, aliases=False,
rst_levels=_rst_levels):
def __init__(self, prog, out=None, aliases=False, rst_levels=_rst_levels):
"""Create a new ArgparseRstWriter.
Parameters:
@@ -217,11 +215,12 @@ def begin_command(self, prog):
{1}
{2}
""".format(prog.replace(' ', '-'), prog,
self.rst_levels[self.level] * len(prog))
""".format(
prog.replace(" ", "-"), prog, self.rst_levels[self.level] * len(prog)
)
def description(self, description):
return description + '\n\n'
return description + "\n\n"
def usage(self, usage):
return """\
@@ -229,33 +228,39 @@ def usage(self, usage):
{0}
""".format(usage)
""".format(
usage
)
def begin_positionals(self):
return '\n**Positional arguments**\n\n'
return "\n**Positional arguments**\n\n"
def positional(self, name, help):
return """\
{0}
{1}
""".format(name, help)
""".format(
name, help
)
def end_positionals(self):
return ''
return ""
def begin_optionals(self):
return '\n**Optional arguments**\n\n'
return "\n**Optional arguments**\n\n"
def optional(self, opts, help):
return """\
``{0}``
{1}
""".format(opts, help)
""".format(
opts, help
)
def end_optionals(self):
return ''
return ""
def begin_subcommands(self, subcommands):
string = """
@@ -267,11 +272,10 @@ def begin_subcommands(self, subcommands):
"""
for cmd, _ in subcommands:
prog = re.sub(r'^[^ ]* ', '', cmd.prog)
string += ' * :ref:`{0} <{1}>`\n'.format(
prog, cmd.prog.replace(' ', '-'))
prog = re.sub(r"^[^ ]* ", "", cmd.prog)
string += " * :ref:`{0} <{1}>`\n".format(prog, cmd.prog.replace(" ", "-"))
return string + '\n'
return string + "\n"
class ArgparseCompletionWriter(ArgparseWriter):
@@ -306,9 +310,11 @@ def format(self, cmd):
# Flatten lists of lists
optionals = [x for xx in optionals for x in xx]
return (self.start_function(cmd.prog) +
self.body(positionals, optionals, subcommands) +
self.end_function(cmd.prog))
return (
self.start_function(cmd.prog)
+ self.body(positionals, optionals, subcommands)
+ self.end_function(cmd.prog)
)
def start_function(self, prog):
"""Returns the syntax needed to begin a function definition.
@@ -319,8 +325,8 @@ def start_function(self, prog):
Returns:
str: the function definition beginning
"""
name = prog.replace('-', '_').replace(' ', '_')
return '\n_{0}() {{'.format(name)
name = prog.replace("-", "_").replace(" ", "_")
return "\n_{0}() {{".format(name)
def end_function(self, prog=None):
"""Returns the syntax needed to end a function definition.
@@ -331,7 +337,7 @@ def end_function(self, prog=None):
Returns:
str: the function definition ending
"""
return '}\n'
return "}\n"
def body(self, positionals, optionals, subcommands):
"""Returns the body of the function.
@@ -344,7 +350,7 @@ def body(self, positionals, optionals, subcommands):
Returns:
str: the function body
"""
return ''
return ""
def positionals(self, positionals):
"""Returns the syntax for reporting positional arguments.
@@ -355,7 +361,7 @@ def positionals(self, positionals):
Returns:
str: the syntax for positional arguments
"""
return ''
return ""
def optionals(self, optionals):
"""Returns the syntax for reporting optional flags.
@@ -366,7 +372,7 @@ def optionals(self, optionals):
Returns:
str: the syntax for optional flags
"""
return ''
return ""
def subcommands(self, subcommands):
"""Returns the syntax for reporting subcommands.
@@ -377,4 +383,4 @@ def subcommands(self, subcommands):
Returns:
str: the syntax for subcommand parsers
"""
return ''
return ""

View File

@@ -18,22 +18,22 @@
map = map
zip = zip
from itertools import zip_longest as zip_longest # novm # noqa: F401
from urllib.parse import urlencode as urlencode # novm # noqa: F401
from urllib.request import urlopen as urlopen # novm # noqa: F401
from urllib.parse import urlencode as urlencode # novm # noqa: F401
from urllib.request import urlopen as urlopen # novm # noqa: F401
if sys.version_info >= (3, 3):
from collections.abc import Hashable as Hashable # novm
from collections.abc import Iterable as Iterable # novm
from collections.abc import Mapping as Mapping # novm
from collections.abc import MutableMapping as MutableMapping # novm
from collections.abc import Hashable as Hashable # novm
from collections.abc import Iterable as Iterable # novm
from collections.abc import Mapping as Mapping # novm
from collections.abc import MutableMapping as MutableMapping # novm
from collections.abc import MutableSequence as MutableSequence # novm
from collections.abc import MutableSet as MutableSet # novm
from collections.abc import Sequence as Sequence # novm
from collections.abc import MutableSet as MutableSet # novm
from collections.abc import Sequence as Sequence # novm
else:
from collections import Hashable as Hashable # noqa: F401
from collections import Iterable as Iterable # noqa: F401
from collections import Mapping as Mapping # noqa: F401
from collections import MutableMapping as MutableMapping # noqa: F401
from collections import Hashable as Hashable # noqa: F401
from collections import Iterable as Iterable # noqa: F401
from collections import Mapping as Mapping # noqa: F401
from collections import MutableMapping as MutableMapping # noqa: F401
from collections import MutableSequence as MutableSequence # noqa: F401
from collections import MutableSet as MutableSet # noqa: F401
from collections import Sequence as Sequence # noqa: F401
from collections import MutableSet as MutableSet # noqa: F401
from collections import Sequence as Sequence # noqa: F401

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@
import sys
import traceback
from datetime import datetime, timedelta
from typing import List, Tuple
from typing import Any, Callable, Iterable, List, Tuple
import six
from six import string_types
@@ -21,7 +21,7 @@
from llnl.util.compat import MutableMapping, MutableSequence, zip_longest
# Ignore emacs backups when listing modules
ignore_modules = [r'^\.#', '~$']
ignore_modules = [r"^\.#", "~$"]
def index_by(objects, *funcs):
@@ -91,9 +91,9 @@ def index_by(objects, *funcs):
def caller_locals():
"""This will return the locals of the *parent* of the caller.
This allows a function to insert variables into its caller's
scope. Yes, this is some black magic, and yes it's useful
for implementing things like depends_on and provides.
This allows a function to insert variables into its caller's
scope. Yes, this is some black magic, and yes it's useful
for implementing things like depends_on and provides.
"""
# Passing zero here skips line context for speed.
stack = inspect.stack(0)
@@ -105,7 +105,7 @@ def caller_locals():
def get_calling_module_name():
"""Make sure that the caller is a class definition, and return the
enclosing module's name.
enclosing module's name.
"""
# Passing zero here skips line context for speed.
stack = inspect.stack(0)
@@ -115,12 +115,13 @@ def get_calling_module_name():
finally:
del stack
if '__module__' not in caller_locals:
raise RuntimeError("Must invoke get_calling_module_name() "
"from inside a class definition!")
if "__module__" not in caller_locals:
raise RuntimeError(
"Must invoke get_calling_module_name() " "from inside a class definition!"
)
module_name = caller_locals['__module__']
base_name = module_name.split('.')[-1]
module_name = caller_locals["__module__"]
base_name = module_name.split(".")[-1]
return base_name
@@ -128,8 +129,8 @@ def attr_required(obj, attr_name):
"""Ensure that a class has a required attribute."""
if not hasattr(obj, attr_name):
raise RequiredAttributeError(
"No required attribute '%s' in class '%s'"
% (attr_name, obj.__class__.__name__))
"No required attribute '%s' in class '%s'" % (attr_name, obj.__class__.__name__)
)
def attr_setdefault(obj, name, value):
@@ -201,33 +202,35 @@ def _memoized_function(*args, **kwargs):
# TypeError is raised when indexing into a dict if the key is unhashable.
raise six.raise_from(
UnhashableArguments(
"args + kwargs '{}' was not hashable for function '{}'"
.format(key, func.__name__),
"args + kwargs '{}' was not hashable for function '{}'".format(
key, func.__name__
),
),
e)
e,
)
return _memoized_function
def list_modules(directory, **kwargs):
"""Lists all of the modules, excluding ``__init__.py``, in a
particular directory. Listed packages have no particular
order."""
list_directories = kwargs.setdefault('directories', True)
particular directory. Listed packages have no particular
order."""
list_directories = kwargs.setdefault("directories", True)
for name in os.listdir(directory):
if name == '__init__.py':
if name == "__init__.py":
continue
path = os.path.join(directory, name)
if list_directories and os.path.isdir(path):
init_py = os.path.join(path, '__init__.py')
init_py = os.path.join(path, "__init__.py")
if os.path.isfile(init_py):
yield name
elif name.endswith('.py'):
elif name.endswith(".py"):
if not any(re.search(pattern, name) for pattern in ignore_modules):
yield re.sub('.py$', '', name)
yield re.sub(".py$", "", name)
def decorator_with_or_without_args(decorator):
@@ -257,41 +260,34 @@ def new_dec(*args, **kwargs):
def key_ordering(cls):
"""Decorates a class with extra methods that implement rich comparison
operations and ``__hash__``. The decorator assumes that the class
implements a function called ``_cmp_key()``. The rich comparison
operations will compare objects using this key, and the ``__hash__``
function will return the hash of this key.
operations and ``__hash__``. The decorator assumes that the class
implements a function called ``_cmp_key()``. The rich comparison
operations will compare objects using this key, and the ``__hash__``
function will return the hash of this key.
If a class already has ``__eq__``, ``__ne__``, ``__lt__``, ``__le__``,
``__gt__``, or ``__ge__`` defined, this decorator will overwrite them.
If a class already has ``__eq__``, ``__ne__``, ``__lt__``, ``__le__``,
``__gt__``, or ``__ge__`` defined, this decorator will overwrite them.
Raises:
TypeError: If the class does not have a ``_cmp_key`` method
Raises:
TypeError: If the class does not have a ``_cmp_key`` method
"""
def setter(name, value):
value.__name__ = name
setattr(cls, name, value)
if not has_method(cls, '_cmp_key'):
if not has_method(cls, "_cmp_key"):
raise TypeError("'%s' doesn't define _cmp_key()." % cls.__name__)
setter('__eq__',
lambda s, o:
(s is o) or (o is not None and s._cmp_key() == o._cmp_key()))
setter('__lt__',
lambda s, o: o is not None and s._cmp_key() < o._cmp_key())
setter('__le__',
lambda s, o: o is not None and s._cmp_key() <= o._cmp_key())
setter("__eq__", lambda s, o: (s is o) or (o is not None and s._cmp_key() == o._cmp_key()))
setter("__lt__", lambda s, o: o is not None and s._cmp_key() < o._cmp_key())
setter("__le__", lambda s, o: o is not None and s._cmp_key() <= o._cmp_key())
setter('__ne__',
lambda s, o:
(s is not o) and (o is None or s._cmp_key() != o._cmp_key()))
setter('__gt__',
lambda s, o: o is None or s._cmp_key() > o._cmp_key())
setter('__ge__',
lambda s, o: o is None or s._cmp_key() >= o._cmp_key())
setter("__ne__", lambda s, o: (s is not o) and (o is None or s._cmp_key() != o._cmp_key()))
setter("__gt__", lambda s, o: o is None or s._cmp_key() > o._cmp_key())
setter("__ge__", lambda s, o: o is None or s._cmp_key() >= o._cmp_key())
setter('__hash__', lambda self: hash(self._cmp_key()))
setter("__hash__", lambda self: hash(self._cmp_key()))
return cls
@@ -458,8 +454,7 @@ def gt(self, other):
def le(self, other):
if self is other:
return True
return (other is not None) and not lazy_lt(other._cmp_iter,
self._cmp_iter)
return (other is not None) and not lazy_lt(other._cmp_iter, self._cmp_iter)
def ge(self, other):
if self is other:
@@ -489,7 +484,9 @@ def add_func_to_class(name, func):
@lazy_lexicographic_ordering
class HashableMap(MutableMapping):
"""This is a hashable, comparable dictionary. Hash is performed on
a tuple of the values in the dictionary."""
a tuple of the values in the dictionary."""
__slots__ = ("dict",)
def __init__(self):
self.dict = {}
@@ -527,7 +524,7 @@ def copy(self):
def in_function(function_name):
"""True if the caller was called from some function with
the supplied Name, False otherwise."""
the supplied Name, False otherwise."""
stack = inspect.stack()
try:
for elt in stack[2:]:
@@ -540,24 +537,25 @@ def in_function(function_name):
def check_kwargs(kwargs, fun):
"""Helper for making functions with kwargs. Checks whether the kwargs
are empty after all of them have been popped off. If they're
not, raises an error describing which kwargs are invalid.
are empty after all of them have been popped off. If they're
not, raises an error describing which kwargs are invalid.
Example::
Example::
def foo(self, **kwargs):
x = kwargs.pop('x', None)
y = kwargs.pop('y', None)
z = kwargs.pop('z', None)
check_kwargs(kwargs, self.foo)
def foo(self, **kwargs):
x = kwargs.pop('x', None)
y = kwargs.pop('y', None)
z = kwargs.pop('z', None)
check_kwargs(kwargs, self.foo)
# This raises a TypeError:
foo(w='bad kwarg')
# This raises a TypeError:
foo(w='bad kwarg')
"""
if kwargs:
raise TypeError(
"'%s' is an invalid keyword argument for function %s()."
% (next(iter(kwargs)), fun.__name__))
% (next(iter(kwargs)), fun.__name__)
)
def match_predicate(*args):
@@ -573,6 +571,7 @@ def match_predicate(*args):
* any regex in a list or tuple of regexes matches.
* any predicate in args matches.
"""
def match(string):
for arg in args:
if isinstance(arg, string_types):
@@ -585,9 +584,11 @@ def match(string):
if arg(string):
return True
else:
raise ValueError("args to match_predicate must be regex, "
"list of regexes, or callable.")
raise ValueError(
"args to match_predicate must be regex, " "list of regexes, or callable."
)
return False
return match
@@ -647,7 +648,7 @@ def pretty_date(time, now=None):
day_diff = diff.days
if day_diff < 0:
return ''
return ""
if day_diff == 0:
if second_diff < 10:
@@ -705,43 +706,40 @@ def pretty_string_to_date(date_str, now=None):
now = now or datetime.now()
# datetime formats
pattern[re.compile(r'^\d{4}$')] = lambda x: datetime.strptime(x, '%Y')
pattern[re.compile(r'^\d{4}-\d{2}$')] = lambda x: datetime.strptime(
x, '%Y-%m'
pattern[re.compile(r"^\d{4}$")] = lambda x: datetime.strptime(x, "%Y")
pattern[re.compile(r"^\d{4}-\d{2}$")] = lambda x: datetime.strptime(x, "%Y-%m")
pattern[re.compile(r"^\d{4}-\d{2}-\d{2}$")] = lambda x: datetime.strptime(x, "%Y-%m-%d")
pattern[re.compile(r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$")] = lambda x: datetime.strptime(
x, "%Y-%m-%d %H:%M"
)
pattern[re.compile(r'^\d{4}-\d{2}-\d{2}$')] = lambda x: datetime.strptime(
x, '%Y-%m-%d'
pattern[re.compile(r"^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$")] = lambda x: datetime.strptime(
x, "%Y-%m-%d %H:%M:%S"
)
pattern[re.compile(r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$')] = \
lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M')
pattern[re.compile(r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$')] = \
lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
pretty_regex = re.compile(
r'(a|\d+)\s*(year|month|week|day|hour|minute|second)s?\s*ago')
pretty_regex = re.compile(r"(a|\d+)\s*(year|month|week|day|hour|minute|second)s?\s*ago")
def _n_xxx_ago(x):
how_many, time_period = pretty_regex.search(x).groups()
how_many = 1 if how_many == 'a' else int(how_many)
how_many = 1 if how_many == "a" else int(how_many)
# timedelta natively supports time periods up to 'weeks'.
# To apply month or year we convert to 30 and 365 days
if time_period == 'month':
if time_period == "month":
how_many *= 30
time_period = 'day'
elif time_period == 'year':
time_period = "day"
elif time_period == "year":
how_many *= 365
time_period = 'day'
time_period = "day"
kwargs = {(time_period + 's'): how_many}
kwargs = {(time_period + "s"): how_many}
return now - timedelta(**kwargs)
pattern[pretty_regex] = _n_xxx_ago
# yesterday
callback = lambda x: now - timedelta(days=1)
pattern[re.compile('^yesterday$')] = callback
pattern[re.compile("^yesterday$")] = callback
for regexp, parser in pattern.items():
if bool(regexp.match(date_str)):
@@ -752,7 +750,6 @@ def _n_xxx_ago(x):
class RequiredAttributeError(ValueError):
def __init__(self, message):
super(RequiredAttributeError, self).__init__(message)
@@ -764,6 +761,7 @@ class ObjectWrapper(object):
This class is modeled after the stackoverflow answer:
* http://stackoverflow.com/a/1445289/771663
"""
def __init__(self, wrapped_object):
wrapped_cls = type(wrapped_object)
wrapped_name = wrapped_cls.__name__
@@ -807,7 +805,7 @@ def __getattr__(self, name):
# requested but not yet set. The final 'getattr' line here requires
# 'instance'/'_instance' to be defined or it will enter an infinite
# loop, so protect against that here.
if name in ['_instance', 'instance']:
if name in ["_instance", "instance"]:
raise AttributeError()
return getattr(self.instance, name)
@@ -837,7 +835,7 @@ def __init__(self, ref_function):
self.ref_function = ref_function
def __getattr__(self, name):
if name == 'ref_function':
if name == "ref_function":
raise AttributeError()
return getattr(self.ref_function(), name)
@@ -875,8 +873,8 @@ def load_module_from_file(module_name, module_path):
# This recipe is adapted from https://stackoverflow.com/a/67692/771663
if sys.version_info[0] == 3 and sys.version_info[1] >= 5:
import importlib.util
spec = importlib.util.spec_from_file_location( # novm
module_name, module_path)
spec = importlib.util.spec_from_file_location(module_name, module_path) # novm
module = importlib.util.module_from_spec(spec) # novm
# The module object needs to exist in sys.modules before the
# loader executes the module code.
@@ -893,6 +891,7 @@ def load_module_from_file(module_name, module_path):
raise
elif sys.version_info[0] == 2:
import imp
module = imp.load_source(module_name, module_path)
return module
@@ -924,8 +923,10 @@ def uniq(sequence):
def star(func):
"""Unpacks arguments for use with Multiprocessing mapping functions"""
def _wrapper(args):
return func(*args)
return _wrapper
@@ -934,22 +935,23 @@ class Devnull(object):
See https://stackoverflow.com/a/2929954.
"""
def write(self, *_):
pass
def elide_list(line_list, max_num=10):
"""Takes a long list and limits it to a smaller number of elements,
replacing intervening elements with '...'. For example::
replacing intervening elements with '...'. For example::
elide_list([1,2,3,4,5,6], 4)
elide_list([1,2,3,4,5,6], 4)
gives::
gives::
[1, 2, 3, '...', 6]
[1, 2, 3, '...', 6]
"""
if len(line_list) > max_num:
return line_list[:max_num - 1] + ['...'] + line_list[-1:]
return line_list[: max_num - 1] + ["..."] + line_list[-1:]
else:
return line_list
@@ -972,7 +974,32 @@ def enum(**kwargs):
Args:
**kwargs: explicit dictionary of enums
"""
return type('Enum', (object,), kwargs)
return type("Enum", (object,), kwargs)
def stable_partition(
input_iterable, # type: Iterable
predicate_fn, # type: Callable[[Any], bool]
):
# type: (...) -> Tuple[List[Any], List[Any]]
"""Partition the input iterable according to a custom predicate.
Args:
input_iterable: input iterable to be partitioned.
predicate_fn: predicate function accepting an iterable item
as argument.
Return:
Tuple of the list of elements evaluating to True, and
list of elements evaluating to False.
"""
true_items, false_items = [], []
for item in input_iterable:
if predicate_fn(item):
true_items.append(item)
continue
false_items.append(item)
return true_items, false_items
class TypedMutableSequence(MutableSequence):
@@ -988,6 +1015,7 @@ class Foo(TypedMutableSequence):
if isinstance(l, Foo):
# do something
"""
def __init__(self, iterable):
self.data = list(iterable)
@@ -1017,7 +1045,7 @@ class GroupedExceptionHandler(object):
"""A generic mechanism to coalesce multiple exceptions and preserve tracebacks."""
def __init__(self):
self.exceptions = [] # type: List[Tuple[str, Exception, List[str]]]
self.exceptions = [] # type: List[Tuple[str, Exception, List[str]]]
def __bool__(self):
"""Whether any exceptions were handled."""
@@ -1036,17 +1064,15 @@ def grouped_message(self, with_tracebacks=True):
# type: (bool) -> str
"""Print out an error message coalescing all the forwarded errors."""
each_exception_message = [
'{0} raised {1}: {2}{3}'.format(
"{0} raised {1}: {2}{3}".format(
context,
exc.__class__.__name__,
exc,
'\n{0}'.format(''.join(tb)) if with_tracebacks else '',
"\n{0}".format("".join(tb)) if with_tracebacks else "",
)
for context, exc, tb in self.exceptions
]
return 'due to the following failures:\n{0}'.format(
'\n'.join(each_exception_message)
)
return "due to the following failures:\n{0}".format("\n".join(each_exception_message))
class GroupedExceptionForwarder(object):
@@ -1072,3 +1098,16 @@ def __exit__(self, exc_type, exc_value, tb):
# Suppress any exception from being re-raised:
# https://docs.python.org/3/reference/datamodel.html#object.__exit__.
return True
class classproperty(object):
"""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)
"""
def __init__(self, callback):
self.callback = callback
def __get__(self, instance, owner):
return self.callback(owner)

View File

@@ -13,12 +13,12 @@
from collections import OrderedDict
import llnl.util.tty as tty
from llnl.util.filesystem import mkdirp, touch, traverse_tree
from llnl.util.filesystem import BaseDirectoryVisitor, mkdirp, touch, traverse_tree
from llnl.util.symlink import islink, symlink
__all__ = ['LinkTree']
__all__ = ["LinkTree"]
empty_file_name = '.spack-empty'
empty_file_name = ".spack-empty"
def remove_link(src, dest):
@@ -38,26 +38,28 @@ class MergeConflict:
project(src_a) == project(src_b) == dst
"""
def __init__(self, dst, src_a=None, src_b=None):
self.dst = dst
self.src_a = src_a
self.src_b = src_b
class SourceMergeVisitor(object):
class SourceMergeVisitor(BaseDirectoryVisitor):
"""
Visitor that produces actions:
- An ordered list of directories to create in dst
- A list of files to link in dst
- A list of merge conflicts in dst/
"""
def __init__(self, ignore=None):
self.ignore = ignore if ignore is not None else lambda f: False
# When mapping <src root> to <dst root>/<projection>, we need
# to prepend the <projection> bit to the relative path in the
# destination dir.
self.projection = ''
self.projection = ""
# When a file blocks another file, the conflict can sometimes
# be resolved / ignored (e.g. <prefix>/LICENSE or
@@ -88,10 +90,13 @@ def before_visit_dir(self, root, rel_path, depth):
elif proj_rel_path in self.files:
# Can't create a dir where a file is.
src_a_root, src_a_relpath = self.files[proj_rel_path]
self.fatal_conflicts.append(MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path)))
self.fatal_conflicts.append(
MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path),
)
)
return False
elif proj_rel_path in self.directories:
# No new directory, carry on.
@@ -101,9 +106,6 @@ def before_visit_dir(self, root, rel_path, depth):
self.directories[proj_rel_path] = (root, rel_path)
return True
def after_visit_dir(self, root, rel_path, depth):
pass
def before_visit_symlinked_dir(self, root, rel_path, depth):
"""
Replace symlinked dirs with actual directories when possible in low depths,
@@ -136,9 +138,6 @@ def before_visit_symlinked_dir(self, root, rel_path, depth):
self.visit_file(root, rel_path, depth)
return False
def after_visit_symlinked_dir(self, root, rel_path, depth):
pass
def visit_file(self, root, rel_path, depth):
proj_rel_path = os.path.join(self.projection, rel_path)
@@ -147,46 +146,59 @@ def visit_file(self, root, rel_path, depth):
elif proj_rel_path in self.directories:
# Can't create a file where a dir is; fatal error
src_a_root, src_a_relpath = self.directories[proj_rel_path]
self.fatal_conflicts.append(MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path)))
self.fatal_conflicts.append(
MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path),
)
)
elif proj_rel_path in self.files:
# In some cases we can resolve file-file conflicts
src_a_root, src_a_relpath = self.files[proj_rel_path]
self.file_conflicts.append(MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path)))
self.file_conflicts.append(
MergeConflict(
dst=proj_rel_path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join(root, rel_path),
)
)
else:
# Otherwise register this file to be linked.
self.files[proj_rel_path] = (root, rel_path)
def visit_symlinked_file(self, root, rel_path, depth):
# Treat symlinked files as ordinary files (without "dereferencing")
self.visit_file(root, rel_path, depth)
def set_projection(self, projection):
self.projection = os.path.normpath(projection)
# Todo, is this how to check in general for empty projection?
if self.projection == '.':
self.projection = ''
if self.projection == ".":
self.projection = ""
return
# If there is a projection, we'll also create the directories
# it consists of, and check whether that's causing conflicts.
path = ''
path = ""
for part in self.projection.split(os.sep):
path = os.path.join(path, part)
if path not in self.files:
self.directories[path] = ('<projection>', path)
self.directories[path] = ("<projection>", path)
else:
# Can't create a dir where a file is.
src_a_root, src_a_relpath = self.files[path]
self.fatal_conflicts.append(MergeConflict(
dst=path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join('<projection>', path)))
self.fatal_conflicts.append(
MergeConflict(
dst=path,
src_a=os.path.join(src_a_root, src_a_relpath),
src_b=os.path.join("<projection>", path),
)
)
class DestinationMergeVisitor(object):
class DestinationMergeVisitor(BaseDirectoryVisitor):
"""DestinatinoMergeVisitor takes a SourceMergeVisitor
and:
@@ -200,6 +212,7 @@ class DestinationMergeVisitor(object):
in the target prefix will never be merged with
directories in the sources directories.
"""
def __init__(self, source_merge_visitor):
self.src = source_merge_visitor
@@ -208,10 +221,11 @@ def before_visit_dir(self, root, rel_path, depth):
# and don't traverse deeper
if rel_path in self.src.files:
src_a_root, src_a_relpath = self.src.files[rel_path]
self.src.fatal_conflicts.append(MergeConflict(
rel_path,
os.path.join(src_a_root, src_a_relpath),
os.path.join(root, rel_path)))
self.src.fatal_conflicts.append(
MergeConflict(
rel_path, os.path.join(src_a_root, src_a_relpath), os.path.join(root, rel_path)
)
)
return False
# If destination dir was also a src dir, remove the mkdir
@@ -224,9 +238,6 @@ def before_visit_dir(self, root, rel_path, depth):
# don't descend into it.
return False
def after_visit_dir(self, root, rel_path, depth):
pass
def before_visit_symlinked_dir(self, root, rel_path, depth):
"""
Symlinked directories in the destination prefix should
@@ -236,39 +247,44 @@ def before_visit_symlinked_dir(self, root, rel_path, depth):
# Always conflict
if rel_path in self.src.directories:
src_a_root, src_a_relpath = self.src.directories[rel_path]
self.src.fatal_conflicts.append(MergeConflict(
rel_path,
os.path.join(src_a_root, src_a_relpath),
os.path.join(root, rel_path)))
self.src.fatal_conflicts.append(
MergeConflict(
rel_path, os.path.join(src_a_root, src_a_relpath), os.path.join(root, rel_path)
)
)
if rel_path in self.src.files:
src_a_root, src_a_relpath = self.src.files[rel_path]
self.src.fatal_conflicts.append(MergeConflict(
rel_path,
os.path.join(src_a_root, src_a_relpath),
os.path.join(root, rel_path)))
self.src.fatal_conflicts.append(
MergeConflict(
rel_path, os.path.join(src_a_root, src_a_relpath), os.path.join(root, rel_path)
)
)
# Never descend into symlinked target dirs.
return False
def after_visit_symlinked_dir(self, root, rel_path, depth):
pass
def visit_file(self, root, rel_path, depth):
# Can't merge a file if target already exists
if rel_path in self.src.directories:
src_a_root, src_a_relpath = self.src.directories[rel_path]
self.src.fatal_conflicts.append(MergeConflict(
rel_path,
os.path.join(src_a_root, src_a_relpath),
os.path.join(root, rel_path)))
self.src.fatal_conflicts.append(
MergeConflict(
rel_path, os.path.join(src_a_root, src_a_relpath), os.path.join(root, rel_path)
)
)
elif rel_path in self.src.files:
src_a_root, src_a_relpath = self.src.files[rel_path]
self.src.fatal_conflicts.append(MergeConflict(
rel_path,
os.path.join(src_a_root, src_a_relpath),
os.path.join(root, rel_path)))
self.src.fatal_conflicts.append(
MergeConflict(
rel_path, os.path.join(src_a_root, src_a_relpath), os.path.join(root, rel_path)
)
)
def visit_symlinked_file(self, root, rel_path, depth):
# Treat symlinked files as ordinary files (without "dereferencing")
self.visit_file(root, rel_path, depth)
class LinkTree(object):
@@ -281,30 +297,31 @@ class LinkTree(object):
symlinked to, to prevent the source directory from ever being
modified.
"""
def __init__(self, source_root):
if not os.path.exists(source_root):
raise IOError("No such file or directory: '%s'", source_root)
self._root = source_root
def find_conflict(self, dest_root, ignore=None,
ignore_file_conflicts=False):
def find_conflict(self, dest_root, ignore=None, ignore_file_conflicts=False):
"""Returns the first file in dest that conflicts with src"""
ignore = ignore or (lambda x: False)
conflicts = self.find_dir_conflicts(dest_root, ignore)
if not ignore_file_conflicts:
conflicts.extend(
dst for src, dst
in self.get_file_map(dest_root, ignore).items()
if os.path.exists(dst))
dst
for src, dst in self.get_file_map(dest_root, ignore).items()
if os.path.exists(dst)
)
if conflicts:
return conflicts[0]
def find_dir_conflicts(self, dest_root, ignore):
conflicts = []
kwargs = {'follow_nonexisting': False, 'ignore': ignore}
kwargs = {"follow_nonexisting": False, "ignore": ignore}
for src, dest in traverse_tree(self._root, dest_root, **kwargs):
if os.path.isdir(src):
if os.path.exists(dest) and not os.path.isdir(dest):
@@ -315,7 +332,7 @@ def find_dir_conflicts(self, dest_root, ignore):
def get_file_map(self, dest_root, ignore):
merge_map = {}
kwargs = {'follow_nonexisting': True, 'ignore': ignore}
kwargs = {"follow_nonexisting": True, "ignore": ignore}
for src, dest in traverse_tree(self._root, dest_root, **kwargs):
if not os.path.isdir(src):
merge_map[src] = dest
@@ -337,8 +354,7 @@ def merge_directories(self, dest_root, ignore):
touch(marker)
def unmerge_directories(self, dest_root, ignore):
for src, dest in traverse_tree(
self._root, dest_root, ignore=ignore, order='post'):
for src, dest in traverse_tree(self._root, dest_root, ignore=ignore, order="post"):
if os.path.isdir(src):
if not os.path.exists(dest):
continue
@@ -354,8 +370,7 @@ def unmerge_directories(self, dest_root, ignore):
if os.path.exists(marker):
os.remove(marker)
def merge(self, dest_root, ignore_conflicts=False, ignore=None,
link=symlink, relative=False):
def merge(self, dest_root, ignore_conflicts=False, ignore=None, link=symlink, relative=False):
"""Link all files in src into dest, creating directories
if necessary.
@@ -377,7 +392,8 @@ def merge(self, dest_root, ignore_conflicts=False, ignore=None,
ignore = lambda x: False
conflict = self.find_conflict(
dest_root, ignore=ignore, ignore_file_conflicts=ignore_conflicts)
dest_root, ignore=ignore, ignore_file_conflicts=ignore_conflicts
)
if conflict:
raise SingleMergeConflictError(conflict)
@@ -416,8 +432,7 @@ class MergeConflictError(Exception):
class SingleMergeConflictError(MergeConflictError):
def __init__(self, path):
super(MergeConflictError, self).__init__(
"Package merge blocked by file: %s" % path)
super(MergeConflictError, self).__init__("Package merge blocked by file: %s" % path)
class MergeConflictSummary(MergeConflictError):
@@ -430,5 +445,6 @@ def __init__(self, conflicts):
# show the first 3 merge conflicts.
for conflict in conflicts[:3]:
msg += "\n `{0}` and `{1}` both project to `{2}`".format(
conflict.src_a, conflict.src_b, conflict.dst)
conflict.src_a, conflict.src_b, conflict.dst
)
super(MergeConflictSummary, self).__init__(msg)

View File

@@ -15,22 +15,22 @@
import spack.util.string
if sys.platform != 'win32':
if sys.platform != "win32":
import fcntl
__all__ = [
'Lock',
'LockDowngradeError',
'LockUpgradeError',
'LockTransaction',
'WriteTransaction',
'ReadTransaction',
'LockError',
'LockTimeoutError',
'LockPermissionError',
'LockROFileError',
'CantCreateLockError'
"Lock",
"LockDowngradeError",
"LockUpgradeError",
"LockTransaction",
"WriteTransaction",
"ReadTransaction",
"LockError",
"LockTimeoutError",
"LockPermissionError",
"LockROFileError",
"CantCreateLockError",
]
@@ -47,6 +47,7 @@ class OpenFile(object):
the file descriptor from the file handle if needed -- or we could make this track
file descriptors as well in the future.
"""
def __init__(self, fh):
self.fh = fh
self.refs = 0
@@ -92,11 +93,11 @@ def get_fh(self, path):
path (str): path to lock file we want a filehandle for
"""
# Open writable files as 'r+' so we can upgrade to write later
os_mode, fh_mode = (os.O_RDWR | os.O_CREAT), 'r+'
os_mode, fh_mode = (os.O_RDWR | os.O_CREAT), "r+"
pid = os.getpid()
open_file = None # OpenFile object, if there is one
stat = None # stat result for the lockfile, if it exists
stat = None # stat result for the lockfile, if it exists
try:
# see whether we've seen this inode/pid before
@@ -109,7 +110,7 @@ def get_fh(self, path):
raise
# path does not exist -- fail if we won't be able to create it
parent = os.path.dirname(path) or '.'
parent = os.path.dirname(path) or "."
if not os.access(parent, os.W_OK):
raise CantCreateLockError(path)
@@ -119,7 +120,7 @@ def get_fh(self, path):
# we know path exists but not if it's writable. If it's read-only,
# only open the file for reading (and fail if we're trying to get
# an exclusive (write) lock on it)
os_mode, fh_mode = os.O_RDONLY, 'r'
os_mode, fh_mode = os.O_RDONLY, "r"
fd = os.open(path, os_mode)
fh = os.fdopen(fd, fh_mode)
@@ -162,10 +163,10 @@ def release_fh(self, path):
def _attempts_str(wait_time, nattempts):
# Don't print anything if we succeeded on the first try
if nattempts <= 1:
return ''
return ""
attempts = spack.util.string.plural(nattempts, 'attempt')
return ' after {0:0.2f}s and {1}'.format(wait_time, attempts)
attempts = spack.util.string.plural(nattempts, "attempt")
return " after {0:0.2f}s and {1}".format(wait_time, attempts)
class LockType(object):
@@ -188,8 +189,7 @@ def to_module(tid):
@staticmethod
def is_valid(op):
return op == LockType.READ \
or op == LockType.WRITE
return op == LockType.READ or op == LockType.WRITE
class Lock(object):
@@ -207,8 +207,7 @@ class Lock(object):
overlapping byte ranges in the same file).
"""
def __init__(self, path, start=0, length=0, default_timeout=None,
debug=False, desc=''):
def __init__(self, path, start=0, length=0, default_timeout=None, debug=False, desc=""):
"""Construct a new lock on the file at ``path``.
By default, the lock applies to the whole file. Optionally,
@@ -243,7 +242,7 @@ def __init__(self, path, start=0, length=0, default_timeout=None,
self.debug = debug
# optional debug description
self.desc = ' ({0})'.format(desc) if desc else ''
self.desc = " ({0})".format(desc) if desc else ""
# If the user doesn't set a default timeout, or if they choose
# None, 0, etc. then lock attempts will not time out (unless the
@@ -280,17 +279,17 @@ def _poll_interval_generator(_wait_times=None):
def __repr__(self):
"""Formal representation of the lock."""
rep = '{0}('.format(self.__class__.__name__)
rep = "{0}(".format(self.__class__.__name__)
for attr, value in self.__dict__.items():
rep += '{0}={1}, '.format(attr, value.__repr__())
return '{0})'.format(rep.strip(', '))
rep += "{0}={1}, ".format(attr, value.__repr__())
return "{0})".format(rep.strip(", "))
def __str__(self):
"""Readable string (with key fields) of the lock."""
location = '{0}[{1}:{2}]'.format(self.path, self._start, self._length)
timeout = 'timeout={0}'.format(self.default_timeout)
activity = '#reads={0}, #writes={1}'.format(self._reads, self._writes)
return '({0}, {1}, {2})'.format(location, timeout, activity)
location = "{0}[{1}:{2}]".format(self.path, self._start, self._length)
timeout = "timeout={0}".format(self.default_timeout)
activity = "#reads={0}, #writes={1}".format(self._reads, self._writes)
return "({0}, {1}, {2})".format(location, timeout, activity)
def _lock(self, op, timeout=None):
"""This takes a lock using POSIX locks (``fcntl.lockf``).
@@ -305,7 +304,7 @@ def _lock(self, op, timeout=None):
assert LockType.is_valid(op)
op_str = LockType.to_str(op)
self._log_acquiring('{0} LOCK'.format(op_str))
self._log_acquiring("{0} LOCK".format(op_str))
timeout = timeout or self.default_timeout
# Create file and parent directories if they don't exist.
@@ -313,14 +312,16 @@ def _lock(self, op, timeout=None):
self._ensure_parent_directory()
self._file = file_tracker.get_fh(self.path)
if LockType.to_module(op) == fcntl.LOCK_EX and self._file.mode == 'r':
if LockType.to_module(op) == fcntl.LOCK_EX and self._file.mode == "r":
# Attempt to upgrade to write lock w/a read-only file.
# If the file were writable, we'd have opened it 'r+'
raise LockROFileError(self.path)
self._log_debug("{0} locking [{1}:{2}]: timeout {3} sec"
.format(op_str.lower(), self._start, self._length,
timeout))
self._log_debug(
"{0} locking [{1}:{2}]: timeout {3} sec".format(
op_str.lower(), self._start, self._length, timeout
)
)
poll_intervals = iter(Lock._poll_interval_generator())
start_time = time.time()
@@ -339,8 +340,7 @@ def _lock(self, op, timeout=None):
total_wait_time = time.time() - start_time
return total_wait_time, num_attempts
raise LockTimeoutError("Timed out waiting for a {0} lock."
.format(op_str.lower()))
raise LockTimeoutError("Timed out waiting for a {0} lock.".format(op_str.lower()))
def _poll_lock(self, op):
"""Attempt to acquire the lock in a non-blocking manner. Return whether
@@ -349,16 +349,19 @@ def _poll_lock(self, op):
module_op = LockType.to_module(op)
try:
# Try to get the lock (will raise if not available.)
fcntl.lockf(self._file, module_op | fcntl.LOCK_NB,
self._length, self._start, os.SEEK_SET)
fcntl.lockf(
self._file, module_op | fcntl.LOCK_NB, self._length, self._start, os.SEEK_SET
)
# help for debugging distributed locking
if self.debug:
# All locks read the owner PID and host
self._read_log_debug_data()
self._log_debug('{0} locked {1} [{2}:{3}] (owner={4})'
.format(LockType.to_str(op), self.path,
self._start, self._length, self.pid))
self._log_debug(
"{0} locked {1} [{2}:{3}] (owner={4})".format(
LockType.to_str(op), self.path, self._start, self._length, self.pid
)
)
# Exclusive locks write their PID/host
if module_op == fcntl.LOCK_EX:
@@ -378,14 +381,17 @@ def _ensure_parent_directory(self):
# relative paths to lockfiles in the current directory have no parent
if not parent:
return '.'
return "."
try:
os.makedirs(parent)
except OSError as e:
# makedirs can fail when diretory already exists.
if not (e.errno == errno.EEXIST and os.path.isdir(parent) or
e.errno == errno.EISDIR):
# os.makedirs can fail in a number of ways when the directory already exists.
# With EISDIR, we know it exists, and others like EEXIST, EACCES, and EROFS
# are fine if we ensure that the directory exists.
# Python 3 allows an exist_ok parameter and ignores any OSError as long as
# the directory exists.
if not (e.errno == errno.EISDIR or os.path.isdir(parent)):
raise
return parent
@@ -396,9 +402,9 @@ def _read_log_debug_data(self):
line = self._file.read()
if line:
pid, host = line.strip().split(',')
_, _, self.pid = pid.rpartition('=')
_, _, self.host = host.rpartition('=')
pid, host = line.strip().split(",")
_, _, self.pid = pid.rpartition("=")
_, _, self.host = host.rpartition("=")
self.pid = int(self.pid)
def _write_log_debug_data(self):
@@ -423,8 +429,7 @@ def _unlock(self):
be masquerading as write locks, but this removes either.
"""
fcntl.lockf(self._file, fcntl.LOCK_UN,
self._length, self._start, os.SEEK_SET)
fcntl.lockf(self._file, fcntl.LOCK_UN, self._length, self._start, os.SEEK_SET)
file_tracker.release_fh(self.path)
self._file = None
@@ -449,7 +454,7 @@ def acquire_read(self, timeout=None):
wait_time, nattempts = self._lock(LockType.READ, timeout=timeout)
self._reads += 1
# Log if acquired, which includes counts when verbose
self._log_acquired('READ LOCK', wait_time, nattempts)
self._log_acquired("READ LOCK", wait_time, nattempts)
return True
else:
# Increment the read count for nested lock tracking
@@ -474,7 +479,7 @@ def acquire_write(self, timeout=None):
wait_time, nattempts = self._lock(LockType.WRITE, timeout=timeout)
self._writes += 1
# Log if acquired, which includes counts when verbose
self._log_acquired('WRITE LOCK', wait_time, nattempts)
self._log_acquired("WRITE LOCK", wait_time, nattempts)
# return True only if we weren't nested in a read lock.
# TODO: we may need to return two values: whether we got
@@ -561,7 +566,7 @@ def release_read(self, release_fn=None):
"""
assert self._reads > 0
locktype = 'READ LOCK'
locktype = "READ LOCK"
if self._reads == 1 and self._writes == 0:
self._log_releasing(locktype)
@@ -569,7 +574,7 @@ def release_read(self, release_fn=None):
release_fn = release_fn or true_fn
result = release_fn()
self._unlock() # can raise LockError.
self._unlock() # can raise LockError.
self._reads = 0
self._log_released(locktype)
return result
@@ -597,14 +602,14 @@ def release_write(self, release_fn=None):
assert self._writes > 0
release_fn = release_fn or true_fn
locktype = 'WRITE LOCK'
locktype = "WRITE LOCK"
if self._writes == 1 and self._reads == 0:
self._log_releasing(locktype)
# we need to call release_fn before releasing the lock
result = release_fn()
self._unlock() # can raise LockError.
self._unlock() # can raise LockError.
self._writes = 0
self._log_released(locktype)
return result
@@ -625,56 +630,55 @@ def cleanup(self):
raise LockError("Attempting to cleanup active lock.")
def _get_counts_desc(self):
return '(reads {0}, writes {1})'.format(self._reads, self._writes) \
if tty.is_verbose() else ''
return (
"(reads {0}, writes {1})".format(self._reads, self._writes) if tty.is_verbose() else ""
)
def _log_acquired(self, locktype, wait_time, nattempts):
attempts_part = _attempts_str(wait_time, nattempts)
now = datetime.now()
desc = 'Acquired at %s' % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg(locktype, '{0}{1}'
.format(desc, attempts_part)))
desc = "Acquired at %s" % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg(locktype, "{0}{1}".format(desc, attempts_part)))
def _log_acquiring(self, locktype):
self._log_debug(self._status_msg(locktype, 'Acquiring'), level=3)
self._log_debug(self._status_msg(locktype, "Acquiring"), level=3)
def _log_debug(self, *args, **kwargs):
"""Output lock debug messages."""
kwargs['level'] = kwargs.get('level', 2)
kwargs["level"] = kwargs.get("level", 2)
tty.debug(*args, **kwargs)
def _log_downgraded(self, wait_time, nattempts):
attempts_part = _attempts_str(wait_time, nattempts)
now = datetime.now()
desc = 'Downgraded at %s' % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg('READ LOCK', '{0}{1}'
.format(desc, attempts_part)))
desc = "Downgraded at %s" % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg("READ LOCK", "{0}{1}".format(desc, attempts_part)))
def _log_downgrading(self):
self._log_debug(self._status_msg('WRITE LOCK', 'Downgrading'), level=3)
self._log_debug(self._status_msg("WRITE LOCK", "Downgrading"), level=3)
def _log_released(self, locktype):
now = datetime.now()
desc = 'Released at %s' % now.strftime("%H:%M:%S.%f")
desc = "Released at %s" % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg(locktype, desc))
def _log_releasing(self, locktype):
self._log_debug(self._status_msg(locktype, 'Releasing'), level=3)
self._log_debug(self._status_msg(locktype, "Releasing"), level=3)
def _log_upgraded(self, wait_time, nattempts):
attempts_part = _attempts_str(wait_time, nattempts)
now = datetime.now()
desc = 'Upgraded at %s' % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg('WRITE LOCK', '{0}{1}'.
format(desc, attempts_part)))
desc = "Upgraded at %s" % now.strftime("%H:%M:%S.%f")
self._log_debug(self._status_msg("WRITE LOCK", "{0}{1}".format(desc, attempts_part)))
def _log_upgrading(self):
self._log_debug(self._status_msg('READ LOCK', 'Upgrading'), level=3)
self._log_debug(self._status_msg("READ LOCK", "Upgrading"), level=3)
def _status_msg(self, locktype, status):
status_desc = '[{0}] {1}'.format(status, self._get_counts_desc())
return '{0}{1.desc}: {1.path}[{1._start}:{1._length}] {2}'.format(
locktype, self, status_desc)
status_desc = "[{0}] {1}".format(status, self._get_counts_desc())
return "{0}{1.desc}: {1.path}[{1._start}:{1._length}] {2}".format(
locktype, self, status_desc
)
class LockTransaction(object):
@@ -715,7 +719,7 @@ def __init__(self, lock, acquire=None, release=None, timeout=None):
def __enter__(self):
if self._enter() and self._acquire_fn:
self._as = self._acquire_fn()
if hasattr(self._as, '__enter__'):
if hasattr(self._as, "__enter__"):
return self._as.__enter__()
else:
return self._as
@@ -727,7 +731,7 @@ def release_fn():
if self._release_fn is not None:
return self._release_fn(type, value, traceback)
if self._as and hasattr(self._as, '__exit__'):
if self._as and hasattr(self._as, "__exit__"):
if self._as.__exit__(type, value, traceback):
suppress = True
@@ -739,6 +743,7 @@ def release_fn():
class ReadTransaction(LockTransaction):
"""LockTransaction context manager that does a read and releases it."""
def _enter(self):
return self._lock.acquire_read(self._timeout)
@@ -748,6 +753,7 @@ def _exit(self, release_fn):
class WriteTransaction(LockTransaction):
"""LockTransaction context manager that does a write and releases it."""
def _enter(self):
return self._lock.acquire_write(self._timeout)
@@ -761,6 +767,7 @@ class LockError(Exception):
class LockDowngradeError(LockError):
"""Raised when unable to downgrade from a write to a read lock."""
def __init__(self, path):
msg = "Cannot downgrade lock from write to read on file: %s" % path
super(LockDowngradeError, self).__init__(msg)
@@ -776,6 +783,7 @@ class LockTimeoutError(LockError):
class LockUpgradeError(LockError):
"""Raised when unable to upgrade from a read to a write lock."""
def __init__(self, path):
msg = "Cannot upgrade lock from read to write on file: %s" % path
super(LockUpgradeError, self).__init__(msg)
@@ -787,6 +795,7 @@ class LockPermissionError(LockError):
class LockROFileError(LockPermissionError):
"""Tried to take an exclusive lock on a read-only file."""
def __init__(self, path):
msg = "Can't take write lock on read-only file: %s" % path
super(LockROFileError, self).__init__(msg)
@@ -794,6 +803,7 @@ def __init__(self, path):
class CantCreateLockError(LockPermissionError):
"""Attempt to create a lock in an unwritable location."""
def __init__(self, path):
msg = "cannot create lock '%s': " % path
msg += "file does not exist and location is not writable"

View File

@@ -10,7 +10,7 @@
"""
from multiprocessing import Semaphore, Value
__all__ = ['Barrier']
__all__ = ["Barrier"]
class Barrier:
@@ -24,7 +24,7 @@ class Barrier:
def __init__(self, n, timeout=None):
self.n = n
self.to = timeout
self.count = Value('i', 0)
self.count = Value("i", 0)
self.mutex = Semaphore(1)
self.turnstile1 = Semaphore(0)
self.turnstile2 = Semaphore(1)

View File

@@ -11,7 +11,7 @@
from llnl.util import lang
is_windows = _platform == 'win32'
is_windows = _platform == "win32"
if is_windows:
from win32file import CreateHardLink
@@ -47,7 +47,7 @@ def _win32_junction(path, link):
# os.symlink will fail if link exists, emulate the behavior here
if exists(link):
raise OSError(errno.EEXIST, 'File exists: %s -> %s' % (link, path))
raise OSError(errno.EEXIST, "File exists: %s -> %s" % (link, path))
if not os.path.isabs(path):
parent = os.path.join(link, os.pardir)
@@ -61,13 +61,14 @@ def _win32_junction(path, link):
def _win32_can_symlink():
tempdir = tempfile.mkdtemp()
dpath = join(tempdir, 'dpath')
fpath = join(tempdir, 'fpath.txt')
dpath = join(tempdir, "dpath")
fpath = join(tempdir, "fpath.txt")
dlink = join(tempdir, 'dlink')
flink = join(tempdir, 'flink.txt')
dlink = join(tempdir, "dlink")
flink = join(tempdir, "flink.txt")
import llnl.util.filesystem as fs
fs.touchp(fpath)
try:
@@ -106,7 +107,6 @@ def _win32_is_junction(path):
FILE_ATTRIBUTE_REPARSE_POINT = 0x400
res = GetFileAttributes(path)
return res != INVALID_FILE_ATTRIBUTES and \
bool(res & FILE_ATTRIBUTE_REPARSE_POINT)
return res != INVALID_FILE_ATTRIBUTES and bool(res & FILE_ATTRIBUTE_REPARSE_POINT)
return False

View File

@@ -54,7 +54,7 @@ def is_stacktrace():
def set_debug(level=0):
global _debug
assert level >= 0, 'Debug level must be a positive value'
assert level >= 0, "Debug level must be a positive value"
_debug = level
@@ -110,10 +110,7 @@ def output_filter(filter_fn):
class SuppressOutput:
"""Class for disabling output in a scope using 'with' keyword"""
def __init__(self,
msg_enabled=True,
warn_enabled=True,
error_enabled=True):
def __init__(self, msg_enabled=True, warn_enabled=True, error_enabled=True):
self._msg_enabled_initial = _msg_enabled
self._warn_enabled_initial = _warn_enabled
@@ -164,11 +161,10 @@ def get_timestamp(force=False):
"""Get a string timestamp"""
if _debug or _timestamp or force:
# Note inclusion of the PID is useful for parallel builds.
pid = ', {0}'.format(os.getpid()) if show_pid() else ''
return '[{0}{1}] '.format(
datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f"), pid)
pid = ", {0}".format(os.getpid()) if show_pid() else ""
return "[{0}{1}] ".format(datetime.now().strftime("%Y-%m-%d-%H:%M:%S.%f"), pid)
else:
return ''
return ""
def msg(message, *args, **kwargs):
@@ -178,26 +174,14 @@ def msg(message, *args, **kwargs):
if isinstance(message, Exception):
message = "%s: %s" % (message.__class__.__name__, str(message))
newline = kwargs.get('newline', True)
newline = kwargs.get("newline", True)
st_text = ""
if _stacktrace:
st_text = process_stacktrace(2)
if newline:
cprint(
"@*b{%s==>} %s%s" % (
st_text,
get_timestamp(),
cescape(_output_filter(message))
)
)
cprint("@*b{%s==>} %s%s" % (st_text, get_timestamp(), cescape(_output_filter(message))))
else:
cwrite(
"@*b{%s==>} %s%s" % (
st_text,
get_timestamp(),
cescape(_output_filter(message))
)
)
cwrite("@*b{%s==>} %s%s" % (st_text, get_timestamp(), cescape(_output_filter(message))))
for arg in args:
print(indent + _output_filter(six.text_type(arg)))
@@ -206,23 +190,19 @@ def info(message, *args, **kwargs):
if isinstance(message, Exception):
message = "%s: %s" % (message.__class__.__name__, str(message))
format = kwargs.get('format', '*b')
stream = kwargs.get('stream', sys.stdout)
wrap = kwargs.get('wrap', False)
break_long_words = kwargs.get('break_long_words', False)
st_countback = kwargs.get('countback', 3)
format = kwargs.get("format", "*b")
stream = kwargs.get("stream", sys.stdout)
wrap = kwargs.get("wrap", False)
break_long_words = kwargs.get("break_long_words", False)
st_countback = kwargs.get("countback", 3)
st_text = ""
if _stacktrace:
st_text = process_stacktrace(st_countback)
cprint(
"@%s{%s==>} %s%s" % (
format,
st_text,
get_timestamp(),
cescape(_output_filter(six.text_type(message)))
),
stream=stream
"@%s{%s==>} %s%s"
% (format, st_text, get_timestamp(), cescape(_output_filter(six.text_type(message)))),
stream=stream,
)
for arg in args:
if wrap:
@@ -230,27 +210,25 @@ def info(message, *args, **kwargs):
_output_filter(six.text_type(arg)),
initial_indent=indent,
subsequent_indent=indent,
break_long_words=break_long_words
break_long_words=break_long_words,
)
for line in lines:
stream.write(line + '\n')
stream.write(line + "\n")
else:
stream.write(
indent + _output_filter(six.text_type(arg)) + '\n'
)
stream.write(indent + _output_filter(six.text_type(arg)) + "\n")
def verbose(message, *args, **kwargs):
if _verbose:
kwargs.setdefault('format', 'c')
kwargs.setdefault("format", "c")
info(message, *args, **kwargs)
def debug(message, *args, **kwargs):
level = kwargs.get('level', 1)
level = kwargs.get("level", 1)
if is_debug(level):
kwargs.setdefault('format', 'g')
kwargs.setdefault('stream', sys.stderr)
kwargs.setdefault("format", "g")
kwargs.setdefault("stream", sys.stderr)
info(message, *args, **kwargs)
@@ -258,8 +236,8 @@ def error(message, *args, **kwargs):
if not error_enabled():
return
kwargs.setdefault('format', '*r')
kwargs.setdefault('stream', sys.stderr)
kwargs.setdefault("format", "*r")
kwargs.setdefault("stream", sys.stderr)
info("Error: " + six.text_type(message), *args, **kwargs)
@@ -267,27 +245,27 @@ def warn(message, *args, **kwargs):
if not warn_enabled():
return
kwargs.setdefault('format', '*Y')
kwargs.setdefault('stream', sys.stderr)
kwargs.setdefault("format", "*Y")
kwargs.setdefault("stream", sys.stderr)
info("Warning: " + six.text_type(message), *args, **kwargs)
def die(message, *args, **kwargs):
kwargs.setdefault('countback', 4)
kwargs.setdefault("countback", 4)
error(message, *args, **kwargs)
sys.exit(1)
def get_number(prompt, **kwargs):
default = kwargs.get('default', None)
abort = kwargs.get('abort', None)
default = kwargs.get("default", None)
abort = kwargs.get("abort", None)
if default is not None and abort is not None:
prompt += ' (default is %s, %s to abort) ' % (default, abort)
prompt += " (default is %s, %s to abort) " % (default, abort)
elif default is not None:
prompt += ' (default is %s) ' % default
prompt += " (default is %s) " % default
elif abort is not None:
prompt += ' (%s to abort) ' % abort
prompt += " (%s to abort) " % abort
number = None
while number is None:
@@ -310,17 +288,16 @@ def get_number(prompt, **kwargs):
def get_yes_or_no(prompt, **kwargs):
default_value = kwargs.get('default', None)
default_value = kwargs.get("default", None)
if default_value is None:
prompt += ' [y/n] '
prompt += " [y/n] "
elif default_value is True:
prompt += ' [Y/n] '
prompt += " [Y/n] "
elif default_value is False:
prompt += ' [y/N] '
prompt += " [y/N] "
else:
raise ValueError(
"default for get_yes_no() must be True, False, or None.")
raise ValueError("default for get_yes_no() must be True, False, or None.")
result = None
while result is None:
@@ -331,9 +308,9 @@ def get_yes_or_no(prompt, **kwargs):
if result is None:
print("Please enter yes or no.")
else:
if ans == 'y' or ans == 'yes':
if ans == "y" or ans == "yes":
result = True
elif ans == 'n' or ans == 'no':
elif ans == "n" or ans == "no":
result = False
return result
@@ -345,12 +322,12 @@ def hline(label=None, **kwargs):
char (str): Char to draw the line with. Default '-'
max_width (int): Maximum width of the line. Default is 64 chars.
"""
char = kwargs.pop('char', '-')
max_width = kwargs.pop('max_width', 64)
char = kwargs.pop("char", "-")
max_width = kwargs.pop("max_width", 64)
if kwargs:
raise TypeError(
"'%s' is an invalid keyword argument for this function."
% next(kwargs.iterkeys()))
"'%s' is an invalid keyword argument for this function." % next(kwargs.iterkeys())
)
rows, cols = terminal_size()
if not cols:
@@ -374,13 +351,14 @@ def hline(label=None, **kwargs):
def terminal_size():
"""Gets the dimensions of the console: (rows, cols)."""
if _platform != "win32":
def ioctl_gwinsz(fd):
try:
rc = struct.unpack('hh', fcntl.ioctl(
fd, termios.TIOCGWINSZ, '1234'))
rc = struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234"))
except BaseException:
return
return rc
rc = ioctl_gwinsz(0) or ioctl_gwinsz(1) or ioctl_gwinsz(2)
if not rc:
try:
@@ -390,12 +368,14 @@ def ioctl_gwinsz(fd):
except BaseException:
pass
if not rc:
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
rc = (os.environ.get("LINES", 25), os.environ.get("COLUMNS", 80))
return int(rc[0]), int(rc[1])
else:
if sys.version_info[0] < 3:
raise RuntimeError("Terminal size not obtainable on Windows with a\
Python version older than 3")
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
raise RuntimeError(
"Terminal size not obtainable on Windows with a\
Python version older than 3"
)
rc = (os.environ.get("LINES", 25), os.environ.get("COLUMNS", 80))
return int(rc[0]), int(rc[1])

View File

@@ -18,29 +18,27 @@
class ColumnConfig:
def __init__(self, cols):
self.cols = cols
self.line_length = 0
self.valid = True
self.widths = [0] * cols # does not include ansi colors
self.widths = [0] * cols # does not include ansi colors
def __repr__(self):
attrs = [(a, getattr(self, a))
for a in dir(self) if not a.startswith("__")]
attrs = [(a, getattr(self, a)) for a in dir(self) if not a.startswith("__")]
return "<Config: %s>" % ", ".join("%s: %r" % a for a in attrs)
def config_variable_cols(elts, console_width, padding, cols=0):
"""Variable-width column fitting algorithm.
This function determines the most columns that can fit in the
screen width. Unlike uniform fitting, where all columns take
the width of the longest element in the list, each column takes
the width of its own longest element. This packs elements more
efficiently on screen.
This function determines the most columns that can fit in the
screen width. Unlike uniform fitting, where all columns take
the width of the longest element in the list, each column takes
the width of its own longest element. This packs elements more
efficiently on screen.
If cols is nonzero, force
If cols is nonzero, force
"""
if cols < 0:
raise ValueError("cols must be non-negative.")
@@ -64,8 +62,8 @@ def config_variable_cols(elts, console_width, padding, cols=0):
if conf.widths[col] < (length + p):
conf.line_length += length + p - conf.widths[col]
conf.widths[col] = length + p
conf.valid = (conf.line_length < console_width)
conf.widths[col] = length + p
conf.valid = conf.line_length < console_width
try:
config = next(conf for conf in reversed(configs) if conf.valid)
@@ -81,9 +79,9 @@ def config_variable_cols(elts, console_width, padding, cols=0):
def config_uniform_cols(elts, console_width, padding, cols=0):
"""Uniform-width column fitting algorithm.
Determines the longest element in the list, and determines how
many columns of that width will fit on screen. Returns a
corresponding column config.
Determines the longest element in the list, and determines how
many columns of that width will fit on screen. Returns a
corresponding column config.
"""
if cols < 0:
raise ValueError("cols must be non-negative.")
@@ -122,18 +120,18 @@ def colify(elts, **options):
and fit less data on the screen
"""
# Get keyword arguments or set defaults
cols = options.pop("cols", 0)
output = options.pop("output", sys.stdout)
indent = options.pop("indent", 0)
padding = options.pop("padding", 2)
tty = options.pop('tty', None)
method = options.pop("method", "variable")
cols = options.pop("cols", 0)
output = options.pop("output", sys.stdout)
indent = options.pop("indent", 0)
padding = options.pop("padding", 2)
tty = options.pop("tty", None)
method = options.pop("method", "variable")
console_cols = options.pop("width", None)
if options:
raise TypeError(
"'%s' is an invalid keyword argument for this function."
% next(options.iterkeys()))
"'%s' is an invalid keyword argument for this function." % next(options.iterkeys())
)
# elts needs to be an array of strings so we can count the elements
elts = [text_type(elt) for elt in elts]
@@ -141,10 +139,10 @@ def colify(elts, **options):
return (0, ())
# environment size is of the form "<rows>x<cols>"
env_size = os.environ.get('COLIFY_SIZE')
env_size = os.environ.get("COLIFY_SIZE")
if env_size:
try:
r, c = env_size.split('x')
r, c = env_size.split("x")
console_rows, console_cols = int(r), int(c)
tty = True
except BaseException:
@@ -180,7 +178,7 @@ def colify(elts, **options):
elt = col * rows + row
width = config.widths[col] + cextra(elts[elt])
if col < cols - 1:
fmt = '%%-%ds' % width
fmt = "%%-%ds" % width
output.write(fmt % elts[elt])
else:
# Don't pad the rightmost column (sapces can wrap on
@@ -198,15 +196,15 @@ def colify(elts, **options):
def colify_table(table, **options):
"""Version of ``colify()`` for data expressed in rows, (list of lists).
Same as regular colify but:
Same as regular colify but:
1. This takes a list of lists, where each sub-list must be the
same length, and each is interpreted as a row in a table.
Regular colify displays a sequential list of values in columns.
1. This takes a list of lists, where each sub-list must be the
same length, and each is interpreted as a row in a table.
Regular colify displays a sequential list of values in columns.
2. Regular colify will always print with 1 column when the output
is not a tty. This will always print with same dimensions of
the table argument.
2. Regular colify will always print with 1 column when the output
is not a tty. This will always print with same dimensions of
the table argument.
"""
if table is None:
@@ -221,20 +219,20 @@ def transpose():
for row in table:
yield row[i]
if 'cols' in options:
if "cols" in options:
raise ValueError("Cannot override columsn in colify_table.")
options['cols'] = columns
options["cols"] = columns
# don't reduce to 1 column for non-tty
options['tty'] = True
options["tty"] = True
colify(transpose(), **options)
def colified(elts, **options):
"""Invokes the ``colify()`` function but returns the result as a string
instead of writing it to an output string."""
instead of writing it to an output string."""
sio = StringIO()
options['output'] = sio
options["output"] = sio
colify(elts, **options)
return sio.getvalue()

View File

@@ -76,29 +76,33 @@ def __init__(self, message):
# Text styles for ansi codes
styles = {'*': '1', # bold
'_': '4', # underline
None: '0'} # plain
styles = {"*": "1", "_": "4", None: "0"} # bold # underline # plain
# Dim and bright ansi colors
colors = {'k': 30, 'K': 90, # black
'r': 31, 'R': 91, # red
'g': 32, 'G': 92, # green
'y': 33, 'Y': 93, # yellow
'b': 34, 'B': 94, # blue
'm': 35, 'M': 95, # magenta
'c': 36, 'C': 96, # cyan
'w': 37, 'W': 97} # white
colors = {
"k": 30,
"K": 90, # black
"r": 31,
"R": 91, # red
"g": 32,
"G": 92, # green
"y": 33,
"Y": 93, # yellow
"b": 34,
"B": 94, # blue
"m": 35,
"M": 95, # magenta
"c": 36,
"C": 96, # cyan
"w": 37,
"W": 97,
} # white
# Regex to be used for color formatting
color_re = r'@(?:@|\.|([*_])?([a-zA-Z])?(?:{((?:[^}]|}})*)})?)'
color_re = r"@(?:@|\.|([*_])?([a-zA-Z])?(?:{((?:[^}]|}})*)})?)"
# Mapping from color arguments to values for tty.set_color
color_when_values = {
'always': True,
'auto': None,
'never': False
}
color_when_values = {"always": True, "auto": None, "never": False}
# Force color; None: Only color if stdout is a tty
# True: Always colorize output, False: Never colorize output
@@ -114,7 +118,7 @@ def _color_when_value(when):
if when in color_when_values:
return color_when_values[when]
elif when not in color_when_values.values():
raise ValueError('Invalid color setting: %s' % when)
raise ValueError("Invalid color setting: %s" % when)
return when
@@ -146,16 +150,19 @@ def color_when(value):
class match_to_ansi(object):
def __init__(self, color=True):
def __init__(self, color=True, enclose=False):
self.color = _color_when_value(color)
self.enclose = enclose
def escape(self, s):
"""Returns a TTY escape sequence for a color"""
if self.color:
return "\033[%sm" % s
if self.enclose:
return r"\[\033[%sm\]" % s
else:
return "\033[%sm" % s
else:
return ''
return ""
def __call__(self, match):
"""Convert a match object generated by ``color_re`` into an ansi
@@ -164,22 +171,22 @@ def __call__(self, match):
style, color, text = match.groups()
m = match.group(0)
if m == '@@':
return '@'
elif m == '@.':
if m == "@@":
return "@"
elif m == "@.":
return self.escape(0)
elif m == '@':
raise ColorParseError("Incomplete color format: '%s' in %s"
% (m, match.string))
elif m == "@":
raise ColorParseError("Incomplete color format: '%s' in %s" % (m, match.string))
string = styles[style]
if color:
if color not in colors:
raise ColorParseError("Invalid color specifier: '%s' in '%s'"
% (color, match.string))
string += ';' + str(colors[color])
raise ColorParseError(
"Invalid color specifier: '%s' in '%s'" % (color, match.string)
)
string += ";" + str(colors[color])
colored_text = ''
colored_text = ""
if text:
colored_text = text + self.escape(0)
@@ -198,29 +205,31 @@ def colorize(string, **kwargs):
Keyword Arguments:
color (bool): If False, output will be plain text without control
codes, for output to non-console devices.
enclose (bool): If True, enclose ansi color sequences with
square brackets to prevent misestimation of terminal width.
"""
color = _color_when_value(kwargs.get('color', get_color_when()))
string = re.sub(color_re, match_to_ansi(color), string)
string = string.replace('}}', '}')
color = _color_when_value(kwargs.get("color", get_color_when()))
string = re.sub(color_re, match_to_ansi(color, kwargs.get("enclose")), string)
string = string.replace("}}", "}")
return string
def clen(string):
"""Return the length of a string, excluding ansi color sequences."""
return len(re.sub(r'\033[^m]*m', '', string))
return len(re.sub(r"\033[^m]*m", "", string))
def cextra(string):
"""Length of extra color characters in a string"""
return len(''.join(re.findall(r'\033[^m]*m', string)))
return len("".join(re.findall(r"\033[^m]*m", string)))
def cwrite(string, stream=None, color=None):
"""Replace all color expressions in string with ANSI control
codes and write the result to the stream. If color is
False, this will write plain text with no color. If True,
then it will always write colored output. If not supplied,
then it will be set based on stream.isatty().
codes and write the result to the stream. If color is
False, this will write plain text with no color. If True,
then it will always write colored output. If not supplied,
then it will be set based on stream.isatty().
"""
stream = sys.stdout if stream is None else stream
if color is None:
@@ -251,20 +260,19 @@ def cescape(string):
(str): the string with color codes escaped
"""
string = six.text_type(string)
string = string.replace('@', '@@')
string = string.replace('}', '}}')
string = string.replace("@", "@@")
string = string.replace("}", "}}")
return string
class ColorStream(object):
def __init__(self, stream, color=None):
self._stream = stream
self._color = color
def write(self, string, **kwargs):
raw = kwargs.get('raw', False)
raw_write = getattr(self._stream, 'write')
raw = kwargs.get("raw", False)
raw_write = getattr(self._stream, "write")
color = self._color
if self._color is None:
@@ -275,6 +283,6 @@ def write(self, string, **kwargs):
raw_write(colorize(string, color=color))
def writelines(self, sequence, **kwargs):
raw = kwargs.get('raw', False)
raw = kwargs.get("raw", False)
for string in sequence:
self.write(string, self.color, raw=raw)

View File

@@ -31,21 +31,22 @@
termios = None # type: Optional[ModuleType]
try:
import termios as term_mod
termios = term_mod
except ImportError:
pass
# Use this to strip escape sequences
_escape = re.compile(r'\x1b[^m]*m|\x1b\[?1034h|\x1b\][0-9]+;[^\x07]*\x07')
_escape = re.compile(r"\x1b[^m]*m|\x1b\[?1034h|\x1b\][0-9]+;[^\x07]*\x07")
# control characters for enabling/disabling echo
#
# We use control characters to ensure that echo enable/disable are inline
# with the other output. We always follow these with a newline to ensure
# one per line the following newline is ignored in output.
xon, xoff = '\x11\n', '\x13\n'
control = re.compile('(\x11\n|\x13\n)')
xon, xoff = "\x11\n", "\x13\n"
control = re.compile("(\x11\n|\x13\n)")
@contextmanager
@@ -59,17 +60,13 @@ def ignore_signal(signum):
def _is_background_tty(stream):
"""True if the stream is a tty and calling process is in the background.
"""
return (
stream.isatty() and
os.getpgrp() != os.tcgetpgrp(stream.fileno())
)
"""True if the stream is a tty and calling process is in the background."""
return stream.isatty() and os.getpgrp() != os.tcgetpgrp(stream.fileno())
def _strip(line):
"""Strip color and control characters from a line."""
return _escape.sub('', line)
return _escape.sub("", line)
class keyboard_input(object):
@@ -147,6 +144,7 @@ class keyboard_input(object):
a TTY, ``keyboard_input`` has no effect.
"""
def __init__(self, stream):
"""Create a context manager that will enable keyboard input on stream.
@@ -204,7 +202,7 @@ def check_fg_bg(self):
bg = self._is_background()
# restore sanity if flags are amiss -- see diagram in class docs
if not bg and any(flags): # fg, but input not enabled
if not bg and any(flags): # fg, but input not enabled
self._enable_keyboard_input()
elif bg and not all(flags): # bg, but input enabled
self._restore_default_terminal_settings()
@@ -228,8 +226,7 @@ def __enter__(self):
# Install a signal handler to disable/enable keyboard input
# when the process moves between foreground and background.
self.old_handlers[signal.SIGTSTP] = signal.signal(
signal.SIGTSTP, self._tstp_handler)
self.old_handlers[signal.SIGTSTP] = signal.signal(signal.SIGTSTP, self._tstp_handler)
# add an atexit handler to ensure the terminal is restored
atexit.register(self._restore_default_terminal_settings)
@@ -258,6 +255,7 @@ class Unbuffered(object):
This is implemented by forcing a flush after each write.
"""
def __init__(self, stream):
self.stream = stream
@@ -302,6 +300,7 @@ class FileWrapper(object):
yet), or neither. When unwrapped, it returns an open file (or file-like)
object.
"""
def __init__(self, file_like):
# This records whether the file-like object returned by "unwrap" is
# purely in-memory. In that case a subprocess will need to explicitly
@@ -325,9 +324,9 @@ def unwrap(self):
if self.open:
if self.file_like:
if sys.version_info < (3,):
self.file = open(self.file_like, 'w')
self.file = open(self.file_like, "w")
else:
self.file = open(self.file_like, 'w', encoding='utf-8') # novm
self.file = open(self.file_like, "w", encoding="utf-8") # novm
else:
self.file = StringIO()
return self.file
@@ -343,8 +342,9 @@ def close(self):
class MultiProcessFd(object):
"""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."""
argument to a function run with ``multiprocessing.Process``, such that
the file descriptor is available in the subprocess."""
def __init__(self, fd):
self._connection = None
self._fd = None
@@ -434,7 +434,7 @@ def log_output(*args, **kwargs):
This method is actually a factory serving a per platform
(unix vs windows) log_output class
"""
if sys.platform == 'win32':
if sys.platform == "win32":
return winlog(*args, **kwargs)
else:
return nixlog(*args, **kwargs)
@@ -454,8 +454,9 @@ class nixlog(object):
work within test frameworks like nose and pytest.
"""
def __init__(self, file_like=None, echo=False, debug=0, buffer=False,
env=None, filter_fn=None):
def __init__(
self, file_like=None, echo=False, debug=0, buffer=False, env=None, filter_fn=None
):
"""Create a new output log context manager.
Args:
@@ -524,8 +525,7 @@ def __enter__(self):
raise RuntimeError("Can't re-enter the same log_output!")
if self.file_like is None:
raise RuntimeError(
"file argument must be set by either __init__ or __call__")
raise RuntimeError("file argument must be set by either __init__ or __call__")
# set up a stream for the daemon to write to
self.log_file = FileWrapper(self.file_like)
@@ -555,9 +555,7 @@ def __enter__(self):
input_multiprocess_fd = None
try:
if sys.stdin.isatty():
input_multiprocess_fd = MultiProcessFd(
os.dup(sys.stdin.fileno())
)
input_multiprocess_fd = MultiProcessFd(os.dup(sys.stdin.fileno()))
except BaseException:
# just don't forward input if this fails
pass
@@ -566,9 +564,14 @@ def __enter__(self):
self.process = multiprocessing.Process(
target=_writer_daemon,
args=(
input_multiprocess_fd, read_multiprocess_fd, write_fd,
self.echo, self.log_file, child_pipe, self.filter_fn
)
input_multiprocess_fd,
read_multiprocess_fd,
write_fd,
self.echo,
self.log_file,
child_pipe,
self.filter_fn,
),
)
self.process.daemon = True # must set before start()
self.process.start()
@@ -609,7 +612,7 @@ def __enter__(self):
self._saved_stderr = sys.stderr
# create a file object for the pipe; redirect to it.
pipe_fd_out = os.fdopen(write_fd, 'w')
pipe_fd_out = os.fdopen(write_fd, "w")
sys.stdout = pipe_fd_out
sys.stderr = pipe_fd_out
@@ -674,8 +677,7 @@ def __exit__(self, exc_type, exc_val, exc_tb):
def force_echo(self):
"""Context manager to force local echo, even if echo is off."""
if not self._active:
raise RuntimeError(
"Can't call force_echo() outside log_output region!")
raise RuntimeError("Can't call force_echo() outside log_output region!")
# This uses the xon/xoff to highlight regions to be echoed in the
# output. We us these control characters rather than, say, a
@@ -691,25 +693,26 @@ def force_echo(self):
class StreamWrapper:
""" Wrapper class to handle redirection of io streams """
"""Wrapper class to handle redirection of io streams"""
def __init__(self, sys_attr):
self.sys_attr = sys_attr
self.saved_stream = None
if sys.platform.startswith('win32'):
if sys.platform.startswith("win32"):
if sys.version_info < (3, 5):
libc = ctypes.CDLL(ctypes.util.find_library('c'))
libc = ctypes.CDLL(ctypes.util.find_library("c"))
else:
if hasattr(sys, 'gettotalrefcount'): # debug build
libc = ctypes.CDLL('ucrtbased')
if hasattr(sys, "gettotalrefcount"): # debug build
libc = ctypes.CDLL("ucrtbased")
else:
libc = ctypes.CDLL('api-ms-win-crt-stdio-l1-1-0')
libc = ctypes.CDLL("api-ms-win-crt-stdio-l1-1-0")
kernel32 = ctypes.WinDLL('kernel32')
kernel32 = ctypes.WinDLL("kernel32")
# https://docs.microsoft.com/en-us/windows/console/getstdhandle
if self.sys_attr == 'stdout':
if self.sys_attr == "stdout":
STD_HANDLE = -11
elif self.sys_attr == 'stderr':
elif self.sys_attr == "stderr":
STD_HANDLE = -12
else:
raise KeyError(self.sys_attr)
@@ -728,7 +731,7 @@ def __init__(self, sys_attr):
def redirect_stream(self, to_fd):
"""Redirect stdout to the given file descriptor."""
# Flush the C-level buffer stream
if sys.platform.startswith('win32'):
if sys.platform.startswith("win32"):
self.libc.fflush(None)
else:
self.libc.fflush(self.c_stream)
@@ -739,13 +742,13 @@ def redirect_stream(self, to_fd):
# Make orig_stream_fd point to the same file as to_fd
os.dup2(to_fd, self.orig_stream_fd)
# Set sys_stream to a new stream that points to the redirected fd
new_buffer = open(self.orig_stream_fd, 'wb')
new_buffer = open(self.orig_stream_fd, "wb")
new_stream = io.TextIOWrapper(new_buffer)
setattr(sys, self.sys_attr, new_stream)
self.sys_stream = getattr(sys, self.sys_attr)
def flush(self):
if sys.platform.startswith('win32'):
if sys.platform.startswith("win32"):
self.libc.fflush(None)
else:
self.libc.fflush(self.c_stream)
@@ -768,14 +771,16 @@ class winlog(object):
Does not support the use of 'v' toggling as nixlog does.
"""
def __init__(self, file_like=None, echo=False, debug=0, buffer=False,
env=None, filter_fn=None):
def __init__(
self, file_like=None, echo=False, debug=0, buffer=False, env=None, filter_fn=None
):
self.env = env
self.debug = debug
self.echo = echo
self.logfile = file_like
self.stdout = StreamWrapper('stdout')
self.stderr = StreamWrapper('stderr')
self.stdout = StreamWrapper("stdout")
self.stderr = StreamWrapper("stderr")
self._active = False
self._ioflag = False
self.old_stdout = sys.stdout
@@ -786,8 +791,7 @@ def __enter__(self):
raise RuntimeError("Can't re-enter the same log_output!")
if self.logfile is None:
raise RuntimeError(
"file argument must be set by __init__ ")
raise RuntimeError("file argument must be set by __init__ ")
# Open both write and reading on logfile
if type(self.logfile) == StringIO:
@@ -796,8 +800,8 @@ def __enter__(self):
sys.stdout = self.logfile
sys.stderr = self.logfile
else:
self.writer = open(self.logfile, mode='wb+')
self.reader = open(self.logfile, mode='rb+')
self.writer = open(self.logfile, mode="wb+")
self.reader = open(self.logfile, mode="rb+")
# Dup stdout so we can still write to it after redirection
self.echo_writer = open(os.dup(sys.stdout.fileno()), "w")
@@ -811,7 +815,7 @@ def background_reader(reader, echo_writer, _kill):
# if echo: write line to user
try:
while True:
is_killed = _kill.wait(.1)
is_killed = _kill.wait(0.1)
# Flush buffered build output to file
# stdout/err fds refer to log file
self.stderr.flush()
@@ -819,7 +823,7 @@ def background_reader(reader, echo_writer, _kill):
line = reader.readline()
if self.echo and line:
echo_writer.write('{0}'.format(line.decode()))
echo_writer.write("{0}".format(line.decode()))
echo_writer.flush()
if is_killed:
@@ -829,8 +833,9 @@ def background_reader(reader, echo_writer, _kill):
self._active = True
with replace_environment(self.env):
self._thread = Thread(target=background_reader,
args=(self.reader, self.echo_writer, self._kill))
self._thread = Thread(
target=background_reader, args=(self.reader, self.echo_writer, self._kill)
)
self._thread.start()
return self
@@ -854,13 +859,19 @@ def __exit__(self, exc_type, exc_val, exc_tb):
def force_echo(self):
"""Context manager to force local echo, even if echo is off."""
if not self._active:
raise RuntimeError(
"Can't call force_echo() outside log_output region!")
raise RuntimeError("Can't call force_echo() outside log_output region!")
yield
def _writer_daemon(stdin_multiprocess_fd, read_multiprocess_fd, write_fd, echo,
log_file_wrapper, control_pipe, filter_fn):
def _writer_daemon(
stdin_multiprocess_fd,
read_multiprocess_fd,
write_fd,
echo,
log_file_wrapper,
control_pipe,
filter_fn,
):
"""Daemon used by ``log_output`` to write to a log file and to ``stdout``.
The daemon receives output from the parent process and writes it both
@@ -913,16 +924,16 @@ def _writer_daemon(stdin_multiprocess_fd, read_multiprocess_fd, write_fd, echo,
# write_fd to terminate the reading loop, so we close the file descriptor
# here. Forking is the process spawning method everywhere except Mac OS
# for Python >= 3.8 and on Windows
if sys.version_info < (3, 8) or sys.platform != 'darwin':
if sys.version_info < (3, 8) or sys.platform != "darwin":
os.close(write_fd)
# Use line buffering (3rd param = 1) since Python 3 has a bug
# that prevents unbuffered text I/O.
if sys.version_info < (3,):
in_pipe = os.fdopen(read_multiprocess_fd.fd, 'r', 1)
in_pipe = os.fdopen(read_multiprocess_fd.fd, "r", 1)
else:
# Python 3.x before 3.7 does not open with UTF-8 encoding by default
in_pipe = os.fdopen(read_multiprocess_fd.fd, 'r', 1, encoding='utf-8')
in_pipe = os.fdopen(read_multiprocess_fd.fd, "r", 1, encoding="utf-8")
if stdin_multiprocess_fd:
stdin = os.fdopen(stdin_multiprocess_fd.fd)
@@ -931,7 +942,7 @@ def _writer_daemon(stdin_multiprocess_fd, read_multiprocess_fd, write_fd, echo,
# list of streams to select from
istreams = [in_pipe, stdin] if stdin else [in_pipe]
force_echo = False # parent can force echo for certain output
force_echo = False # parent can force echo for certain output
log_file = log_file_wrapper.unwrap()
@@ -954,7 +965,7 @@ def _writer_daemon(stdin_multiprocess_fd, read_multiprocess_fd, write_fd, echo,
# check and the read, so we ignore SIGTTIN here.
with ignore_signal(signal.SIGTTIN):
try:
if stdin.read(1) == 'v':
if stdin.read(1) == "v":
echo = not echo
except IOError as e:
# If SIGTTIN is ignored, the system gives EIO
@@ -972,14 +983,14 @@ def _writer_daemon(stdin_multiprocess_fd, read_multiprocess_fd, write_fd, echo,
line = _retry(in_pipe.readline)()
except UnicodeDecodeError:
# installs like --test=root gpgme produce non-UTF8 logs
line = '<line lost: output was not encoded as UTF-8>\n'
line = "<line lost: output was not encoded as UTF-8>\n"
if not line:
return
line_count += 1
# find control characters and strip them.
clean_line, num_controls = control.subn('', line)
clean_line, num_controls = control.subn("", line)
# Echo to stdout if requested or forced.
if echo or force_echo:
@@ -1043,6 +1054,7 @@ def _retry(function):
relevant for this file.
"""
def wrapped(*args, **kwargs):
while True:
try:
@@ -1055,6 +1067,7 @@ def wrapped(*args, **kwargs):
if e.args[0] == errno.EINTR:
continue
raise
return wrapped

View File

@@ -30,6 +30,7 @@
termios = None
try:
import termios as term_mod
termios = term_mod
except ImportError:
pass
@@ -42,8 +43,8 @@ class ProcessController(object):
minion) similar to the way a shell would, by sending signals and I/O.
"""
def __init__(self, pid, controller_fd,
timeout=1, sleep_time=1e-1, debug=False):
def __init__(self, pid, controller_fd, timeout=1, sleep_time=1e-1, debug=False):
"""Create a controller to manipulate the process with id ``pid``
Args:
@@ -84,18 +85,19 @@ def get_canon_echo_attrs(self):
def horizontal_line(self, name):
"""Labled horizontal line for debugging."""
if self.debug:
sys.stderr.write(
"------------------------------------------- %s\n" % name
)
sys.stderr.write("------------------------------------------- %s\n" % name)
def status(self):
"""Print debug message with status info for the minion."""
if self.debug:
canon, echo = self.get_canon_echo_attrs()
sys.stderr.write("canon: %s, echo: %s\n" % (
"on" if canon else "off",
"on" if echo else "off",
))
sys.stderr.write(
"canon: %s, echo: %s\n"
% (
"on" if canon else "off",
"on" if echo else "off",
)
)
sys.stderr.write("input: %s\n" % self.input_on())
sys.stderr.write("bg: %s\n" % self.background())
sys.stderr.write("\n")
@@ -137,7 +139,7 @@ def write(self, byte_string):
def wait(self, condition):
start = time.time()
while (((time.time() - start) < self.timeout) and not condition()):
while ((time.time() - start) < self.timeout) and not condition():
time.sleep(1e-2)
assert condition()
@@ -219,14 +221,15 @@ def minion_function(**kwargs)
|_________________________________________________________|
"""
def __init__(self, controller_function, minion_function):
self.proc = None
self.controller_function = controller_function
self.minion_function = minion_function
# these can be optionally set to change defaults
self.controller_timeout = 1
self.sleep_time = 0
self.controller_timeout = 3
self.sleep_time = 0.1
def start(self, **kwargs):
"""Start the controller and minion processes.
@@ -242,8 +245,12 @@ def start(self, **kwargs):
"""
self.proc = multiprocessing.Process(
target=PseudoShell._set_up_and_run_controller_function,
args=(self.controller_function, self.minion_function,
self.controller_timeout, self.sleep_time),
args=(
self.controller_function,
self.minion_function,
self.controller_timeout,
self.sleep_time,
),
kwargs=kwargs,
)
self.proc.start()
@@ -255,7 +262,8 @@ def join(self):
@staticmethod
def _set_up_and_run_minion_function(
tty_name, stdout_fd, stderr_fd, ready, minion_function, **kwargs):
tty_name, stdout_fd, stderr_fd, ready, minion_function, **kwargs
):
"""Minion process wrapper for PseudoShell.
Handles the mechanics of setting up a PTY, then calls
@@ -273,8 +281,7 @@ def _set_up_and_run_minion_function(
os.close(stdin_fd)
if kwargs.get("debug"):
sys.stderr.write(
"minion: stdin.isatty(): %s\n" % sys.stdin.isatty())
sys.stderr.write("minion: stdin.isatty(): %s\n" % sys.stdin.isatty())
# tell the parent that we're really running
if kwargs.get("debug"):
@@ -288,15 +295,15 @@ def _set_up_and_run_minion_function(
@staticmethod
def _set_up_and_run_controller_function(
controller_function, minion_function, controller_timeout,
sleep_time, **kwargs):
controller_function, minion_function, controller_timeout, sleep_time, **kwargs
):
"""Set up a pty, spawn a minion process, execute controller_function.
Handles the mechanics of setting up a PTY, then calls
``controller_function``.
"""
os.setsid() # new session; this process is the controller
os.setsid() # new session; this process is the controller
controller_fd, minion_fd = os.openpty()
pty_name = os.ttyname(minion_fd)
@@ -305,11 +312,10 @@ def _set_up_and_run_controller_function(
pty_fd = os.open(pty_name, os.O_RDWR)
os.close(pty_fd)
ready = multiprocessing.Value('i', False)
ready = multiprocessing.Value("i", False)
minion_process = multiprocessing.Process(
target=PseudoShell._set_up_and_run_minion_function,
args=(pty_name, sys.stdout.fileno(), sys.stderr.fileno(),
ready, minion_function),
args=(pty_name, sys.stdout.fileno(), sys.stderr.fileno(), ready, minion_function),
kwargs=kwargs,
)
minion_process.start()
@@ -329,8 +335,7 @@ def _set_up_and_run_controller_function(
minion_pgid = os.getpgid(minion_process.pid)
sys.stderr.write("minion pid: %d\n" % minion_process.pid)
sys.stderr.write("minion pgid: %d\n" % minion_pgid)
sys.stderr.write(
"minion sid: %d\n" % os.getsid(minion_process.pid))
sys.stderr.write("minion sid: %d\n" % os.getsid(minion_process.pid))
sys.stderr.write("\n")
sys.stderr.flush()
# set up controller to ignore SIGTSTP, like a shell
@@ -339,7 +344,8 @@ def _set_up_and_run_controller_function(
# call the controller function once the minion is ready
try:
controller = ProcessController(
minion_process.pid, controller_fd, debug=kwargs.get("debug"))
minion_process.pid, controller_fd, debug=kwargs.get("debug")
)
controller.timeout = controller_timeout
controller.sleep_time = sleep_time
error = controller_function(minion_process, controller, **kwargs)

View File

@@ -4,10 +4,10 @@
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
#: (major, minor, micro, dev release) tuple
spack_version_info = (0, 18, 0, 'dev0')
spack_version_info = (0, 19, 0, "dev0")
#: PEP440 canonical <major>.<minor>.<micro>.<devN> string
spack_version = '.'.join(str(s) for s in spack_version_info)
spack_version = ".".join(str(s) for s in spack_version_info)
__all__ = ['spack_version_info', 'spack_version']
__all__ = ["spack_version_info", "spack_version"]
__version__ = spack_version

View File

@@ -15,21 +15,25 @@
class ABI(object):
"""This class provides methods to test ABI compatibility between specs.
The current implementation is rather rough and could be improved."""
The current implementation is rather rough and could be improved."""
def architecture_compatible(self, target, constraint):
"""Return true if architecture of target spec is ABI compatible
to the architecture of constraint spec. If either the target
or constraint specs have no architecture, target is also defined
as architecture ABI compatible to constraint."""
return not target.architecture or not constraint.architecture or \
target.architecture.satisfies(constraint.architecture)
to the architecture of constraint spec. If either the target
or constraint specs have no architecture, target is also defined
as architecture ABI compatible to constraint."""
return (
not target.architecture
or not constraint.architecture
or target.architecture.satisfies(constraint.architecture)
)
@memoized
def _gcc_get_libstdcxx_version(self, version):
"""Returns gcc ABI compatibility info by getting the library version of
a compiler's libstdc++ or libgcc_s"""
a compiler's libstdc++ or libgcc_s"""
from spack.build_environment import dso_suffix
spec = CompilerSpec("gcc", version)
compilers = spack.compilers.compilers_for_spec(spec)
if not compilers:
@@ -50,7 +54,7 @@ def _gcc_get_libstdcxx_version(self, version):
# Some gcc's are actually clang and don't respond properly to
# --print-file-name (they just print the filename, not the
# full path). Ignore these and expect them to be handled as clang.
if Clang.default_version(rungcc.exe[0]) != 'unknown':
if Clang.default_version(rungcc.exe[0]) != "unknown":
return None
output = rungcc("--print-file-name=%s" % libname, output=str)
@@ -66,7 +70,7 @@ def _gcc_get_libstdcxx_version(self, version):
@memoized
def _gcc_compiler_compare(self, pversion, cversion):
"""Returns true iff the gcc version pversion and cversion
are ABI compatible."""
are ABI compatible."""
plib = self._gcc_get_libstdcxx_version(pversion)
clib = self._gcc_get_libstdcxx_version(cversion)
if not plib or not clib:
@@ -75,10 +79,10 @@ def _gcc_compiler_compare(self, pversion, cversion):
def _intel_compiler_compare(self, pversion, cversion):
"""Returns true iff the intel version pversion and cversion
are ABI compatible"""
are ABI compatible"""
# Test major and minor versions. Ignore build version.
if (len(pversion.version) < 2 or len(cversion.version) < 2):
if len(pversion.version) < 2 or len(cversion.version) < 2:
return False
return pversion.version[:2] == cversion.version[:2]
@@ -91,7 +95,7 @@ def compiler_compatible(self, parent, child, **kwargs):
# Different compiler families are assumed ABI incompatible
return False
if kwargs.get('loose', False):
if kwargs.get("loose", False):
return True
# TODO: Can we move the specialized ABI matching stuff
@@ -102,16 +106,19 @@ def compiler_compatible(self, parent, child, **kwargs):
# Otherwise match on version match.
if pversion.satisfies(cversion):
return True
elif (parent.compiler.name == "gcc" and
self._gcc_compiler_compare(pversion, cversion)):
elif parent.compiler.name == "gcc" and self._gcc_compiler_compare(
pversion, cversion
):
return True
elif (parent.compiler.name == "intel" and
self._intel_compiler_compare(pversion, cversion)):
elif parent.compiler.name == "intel" and self._intel_compiler_compare(
pversion, cversion
):
return True
return False
def compatible(self, target, constraint, **kwargs):
"""Returns true if target spec is ABI compatible to constraint spec"""
loosematch = kwargs.get('loose', False)
return self.architecture_compatible(target, constraint) and \
self.compiler_compatible(target, constraint, loose=loosematch)
loosematch = kwargs.get("loose", False)
return self.architecture_compatible(target, constraint) and self.compiler_compatible(
target, constraint, loose=loosematch
)

View File

@@ -1,42 +0,0 @@
# Copyright 2013-2022 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)
"""This package contains code for creating analyzers to extract Application
Binary Interface (ABI) information, along with simple analyses that just load
existing metadata.
"""
from __future__ import absolute_import
import llnl.util.tty as tty
import spack.paths
import spack.util.classes
mod_path = spack.paths.analyzers_path
analyzers = spack.util.classes.list_classes("spack.analyzers", mod_path)
# The base analyzer does not have a name, and cannot do dict comprehension
analyzer_types = {}
for a in analyzers:
if not hasattr(a, "name"):
continue
analyzer_types[a.name] = a
def list_all():
"""A helper function to list all analyzers and their descriptions
"""
for name, analyzer in analyzer_types.items():
print("%-25s: %-35s" % (name, analyzer.description))
def get_analyzer(name):
"""Courtesy function to retrieve an analyzer, and exit on error if it
does not exist.
"""
if name in analyzer_types:
return analyzer_types[name]
tty.die("Analyzer %s does not exist" % name)

View File

@@ -1,116 +0,0 @@
# Copyright 2013-2022 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)
"""An analyzer base provides basic functions to run the analysis, save results,
and (optionally) interact with a Spack Monitor
"""
import os
import llnl.util.tty as tty
import spack.config
import spack.hooks
import spack.monitor
import spack.util.path
def get_analyzer_dir(spec, analyzer_dir=None):
"""
Given a spec, return the directory to save analyzer results.
We create the directory if it does not exist. We also check that the
spec has an associated package. An analyzer cannot be run if the spec isn't
associated with a package. If the user provides a custom analyzer_dir,
we use it over checking the config and the default at ~/.spack/analyzers
"""
# An analyzer cannot be run if the spec isn't associated with a package
if not hasattr(spec, "package") or not spec.package:
tty.die("A spec can only be analyzed with an associated package.")
# The top level directory is in the user home, or a custom location
if not analyzer_dir:
analyzer_dir = spack.util.path.canonicalize_path(
spack.config.get('config:analyzers_dir', '~/.spack/analyzers'))
# We follow the same convention as the spec install (this could be better)
package_prefix = os.sep.join(spec.package.prefix.split('/')[-3:])
meta_dir = os.path.join(analyzer_dir, package_prefix)
return meta_dir
class AnalyzerBase(object):
def __init__(self, spec, dirname=None):
"""
Verify that the analyzer has correct metadata.
An Analyzer is intended to run on one spec install, so the spec
with its associated package is required on init. The child analyzer
class should define an init function that super's the init here, and
also check that the analyzer has all dependencies that it
needs. If an analyzer subclass does not have dependencies, it does not
need to define an init. An Analyzer should not be allowed to proceed
if one or more dependencies are missing. The dirname, if defined,
is an optional directory name to save to (instead of the default meta
spack directory).
"""
self.spec = spec
self.dirname = dirname
self.meta_dir = os.path.dirname(spec.package.install_log_path)
for required in ["name", "outfile", "description"]:
if not hasattr(self, required):
tty.die("Please add a %s attribute on the analyzer." % required)
def run(self):
"""
Given a spec with an installed package, run the analyzer on it.
"""
raise NotImplementedError
@property
def output_dir(self):
"""
The full path to the output directory.
This includes the nested analyzer directory structure. This function
does not create anything.
"""
if not hasattr(self, "_output_dir"):
output_dir = get_analyzer_dir(self.spec, self.dirname)
self._output_dir = os.path.join(output_dir, self.name)
return self._output_dir
def save_result(self, result, overwrite=False):
"""
Save a result to the associated spack monitor, if defined.
This function is on the level of the analyzer because it might be
the case that the result is large (appropriate for a single request)
or that the data is organized differently (e.g., more than one
request per result). If an analyzer subclass needs to over-write
this function with a custom save, that is appropriate to do (see abi).
"""
# We maintain the structure in json with the analyzer as key so
# that in the future, we could upload to a monitor server
if result[self.name]:
outfile = os.path.join(self.output_dir, self.outfile)
# Only try to create the results directory if we have a result
if not os.path.exists(self._output_dir):
os.makedirs(self._output_dir)
# Don't overwrite an existing result if overwrite is False
if os.path.exists(outfile) and not overwrite:
tty.info("%s exists and overwrite is False, skipping." % outfile)
else:
tty.info("Writing result to %s" % outfile)
spack.monitor.write_json(result[self.name], outfile)
# This hook runs after a save result
spack.hooks.on_analyzer_save(self.spec.package, result)

View File

@@ -1,33 +0,0 @@
# Copyright 2013-2022 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)
"""A configargs analyzer is a class of analyzer that typically just uploads
already existing metadata about config args from a package spec install
directory."""
import os
import spack.monitor
from .analyzer_base import AnalyzerBase
class ConfigArgs(AnalyzerBase):
name = "config_args"
outfile = "spack-analyzer-config-args.json"
description = "config args loaded from spack-configure-args.txt"
def run(self):
"""
Load the configure-args.txt and save in json.
The run function will find the spack-config-args.txt file in the
package install directory, and read it into a json structure that has
the name of the analyzer as the key.
"""
config_file = os.path.join(self.meta_dir, "spack-configure-args.txt")
return {self.name: spack.monitor.read_file(config_file)}

View File

@@ -1,54 +0,0 @@
# Copyright 2013-2022 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)
"""An environment analyzer will read and parse the environment variables
file in the installed package directory, generating a json file that has
an index of key, value pairs for environment variables."""
import os
import llnl.util.tty as tty
from spack.util.environment import EnvironmentModifications
from .analyzer_base import AnalyzerBase
class EnvironmentVariables(AnalyzerBase):
name = "environment_variables"
outfile = "spack-analyzer-environment-variables.json"
description = "environment variables parsed from spack-build-env.txt"
def run(self):
"""
Load, parse, and save spack-build-env.txt to analyzers.
Read in the spack-build-env.txt file from the package install
directory and parse the environment variables into key value pairs.
The result should have the key for the analyzer, the name.
"""
env_file = os.path.join(self.meta_dir, "spack-build-env.txt")
return {self.name: self._read_environment_file(env_file)}
def _read_environment_file(self, filename):
"""
Read and parse the environment file.
Given an environment file, we want to read it, split by semicolons
and new lines, and then parse down to the subset of SPACK_* variables.
We assume that all spack prefix variables are not secrets, and unlike
the install_manifest.json, we don't (at least to start) parse the values
to remove path prefixes specific to user systems.
"""
if not os.path.exists(filename):
tty.warn("No environment file available")
return
mods = EnvironmentModifications.from_sourcing_file(filename)
env = {}
mods.apply_modifications(env)
return env

View File

@@ -1,31 +0,0 @@
# Copyright 2013-2022 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)
"""The install files json file (install_manifest.json) already exists in
the package install folder, so this analyzer simply moves it to the user
analyzer folder for further processing."""
import os
import spack.monitor
from .analyzer_base import AnalyzerBase
class InstallFiles(AnalyzerBase):
name = "install_files"
outfile = "spack-analyzer-install-files.json"
description = "install file listing read from install_manifest.json"
def run(self):
"""
Load in the install_manifest.json and save to analyzers.
We write it out to the analyzers folder, with key as the analyzer name.
"""
manifest_file = os.path.join(self.meta_dir, "install_manifest.json")
return {self.name: spack.monitor.read_json(manifest_file)}

View File

@@ -1,114 +0,0 @@
# Copyright 2013-2022 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)
import os
import llnl.util.tty as tty
import spack
import spack.binary_distribution
import spack.bootstrap
import spack.error
import spack.hooks
import spack.monitor
import spack.package
import spack.repo
import spack.util.executable
from .analyzer_base import AnalyzerBase
class Libabigail(AnalyzerBase):
name = "libabigail"
outfile = "spack-analyzer-libabigail.json"
description = "Application Binary Interface (ABI) features for objects"
def __init__(self, spec, dirname=None):
"""
init for an analyzer ensures we have all needed dependencies.
For the libabigail analyzer, this means Libabigail.
Since the output for libabigail is one file per object, we communicate
with the monitor multiple times.
"""
super(Libabigail, self).__init__(spec, dirname)
# This doesn't seem to work to import on the module level
tty.debug("Preparing to use Libabigail, will install if missing.")
with spack.bootstrap.ensure_bootstrap_configuration():
# libabigail won't install lib/bin/share without docs
spec = spack.spec.Spec("libabigail+docs")
spack.bootstrap.ensure_executables_in_path_or_raise(
["abidw"], abstract_spec=spec
)
self.abidw = spack.util.executable.which('abidw')
def run(self):
"""
Run libabigail, and save results to filename.
This run function differs in that we write as we generate and then
return a dict with the analyzer name as the key, and the value of a
dict of results, where the key is the object name, and the value is
the output file written to.
"""
manifest = spack.binary_distribution.get_buildfile_manifest(self.spec)
# This result will store a path to each file
result = {}
# Generate an output file for each binary or object
for obj in manifest.get("binary_to_relocate_fullpath", []):
# We want to preserve the path in the install directory in case
# a library has an equivalenly named lib or executable, for example
outdir = os.path.dirname(obj.replace(self.spec.package.prefix,
'').strip(os.path.sep))
outfile = "spack-analyzer-libabigail-%s.xml" % os.path.basename(obj)
outfile = os.path.join(self.output_dir, outdir, outfile)
outdir = os.path.dirname(outfile)
# Create the output directory
if not os.path.exists(outdir):
os.makedirs(outdir)
# Sometimes libabigail segfaults and dumps
try:
self.abidw(obj, "--out-file", outfile)
result[obj] = outfile
tty.info("Writing result to %s" % outfile)
except spack.error.SpackError:
tty.warn("Issue running abidw for %s" % obj)
return {self.name: result}
def save_result(self, result, overwrite=False):
"""
Read saved ABI results and upload to monitor server.
ABI results are saved to individual files, so each one needs to be
read and uploaded. Result here should be the lookup generated in run(),
the key is the analyzer name, and each value is the result file.
We currently upload the entire xml as text because libabigail can't
easily read gzipped xml, but this will be updated when it can.
"""
if not spack.monitor.cli:
return
name = self.spec.package.name
for obj, filename in result.get(self.name, {}).items():
# Don't include the prefix
rel_path = obj.replace(self.spec.prefix + os.path.sep, "")
# We've already saved the results to file during run
content = spack.monitor.read_file(filename)
# A result needs an analyzer, value or binary_value, and name
data = {"value": content, "install_file": rel_path, "name": "abidw-xml"}
tty.info("Sending result for %s %s to monitor." % (name, rel_path))
spack.hooks.on_analyzer_save(self.spec.package, {"libabigail": [data]})

View File

@@ -35,8 +35,11 @@ def _search_duplicate_compilers(error_cls):
the decorator object, that will forward the keyword arguments passed
as input.
"""
import ast
import collections
import inspect
import itertools
import pickle
import re
from six.moves.urllib.request import urlopen
@@ -48,6 +51,7 @@ def _search_duplicate_compilers(error_cls):
import spack.patch
import spack.repo
import spack.spec
import spack.util.crypto
import spack.variant
#: Map an audit tag to a list of callables implementing checks
@@ -59,14 +63,13 @@ def _search_duplicate_compilers(error_cls):
class Error(object):
"""Information on an error reported in a test."""
def __init__(self, summary, details):
self.summary = summary
self.details = tuple(details)
def __str__(self):
return self.summary + '\n' + '\n'.join([
' ' + detail for detail in self.details
])
return self.summary + "\n" + "\n".join([" " + detail for detail in self.details])
def __eq__(self, other):
if self.summary != other.summary or self.details != other.details:
@@ -118,11 +121,11 @@ def __len__(self):
def run(self, **kwargs):
msg = 'please pass "{0}" as keyword arguments'
msg = msg.format(', '.join(self.kwargs))
msg = msg.format(", ".join(self.kwargs))
assert set(self.kwargs) == set(kwargs), msg
errors = []
kwargs['error_cls'] = Error
kwargs["error_cls"] = Error
for fn in self.callbacks:
errors.extend(fn(**kwargs))
@@ -164,19 +167,16 @@ def run_check(tag, **kwargs):
# TODO: https://github.com/spack/spack/pull/23053/files#r630265011
#: Generic checks relying on global state
generic = AuditClass(
group='generic',
tag='GENERIC',
description='Generic checks relying on global variables',
kwargs=()
group="generic",
tag="GENERIC",
description="Generic checks relying on global variables",
kwargs=(),
)
#: Sanity checks on compilers.yaml
config_compiler = AuditClass(
group='configs',
tag='CFG-COMPILER',
description='Sanity checks on compilers.yaml',
kwargs=()
group="configs", tag="CFG-COMPILER", description="Sanity checks on compilers.yaml", kwargs=()
)
@@ -185,34 +185,25 @@ def _search_duplicate_compilers(error_cls):
"""Report compilers with the same spec and two different definitions"""
errors = []
compilers = list(sorted(
spack.config.get('compilers'), key=lambda x: x['compiler']['spec']
))
for spec, group in itertools.groupby(
compilers, key=lambda x: x['compiler']['spec']
):
compilers = list(sorted(spack.config.get("compilers"), key=lambda x: x["compiler"]["spec"]))
for spec, group in itertools.groupby(compilers, key=lambda x: x["compiler"]["spec"]):
group = list(group)
if len(group) == 1:
continue
error_msg = 'Compiler defined multiple times: {0}'
error_msg = "Compiler defined multiple times: {0}"
try:
details = [str(x._start_mark).strip() for x in group]
except Exception:
details = []
errors.append(error_cls(
summary=error_msg.format(spec), details=details
))
errors.append(error_cls(summary=error_msg.format(spec), details=details))
return errors
#: Sanity checks on packages.yaml
config_packages = AuditClass(
group='configs',
tag='CFG-PACKAGES',
description='Sanity checks on packages.yaml',
kwargs=()
group="configs", tag="CFG-PACKAGES", description="Sanity checks on packages.yaml", kwargs=()
)
@@ -220,19 +211,19 @@ def _search_duplicate_compilers(error_cls):
def _search_duplicate_specs_in_externals(error_cls):
"""Search for duplicate specs declared as externals"""
errors, externals = [], collections.defaultdict(list)
packages_yaml = spack.config.get('packages')
packages_yaml = spack.config.get("packages")
for name, pkg_config in packages_yaml.items():
# No externals can be declared under all
if name == 'all' or 'externals' not in pkg_config:
if name == "all" or "externals" not in pkg_config:
continue
current_externals = pkg_config['externals']
current_externals = pkg_config["externals"]
for entry in current_externals:
# Ask for the string representation of the spec to normalize
# aspects of the spec that may be represented in multiple ways
# e.g. +foo or foo=true
key = str(spack.spec.Spec(entry['spec']))
key = str(spack.spec.Spec(entry["spec"]))
externals[key].append(entry)
for spec, entries in sorted(externals.items()):
@@ -241,14 +232,14 @@ def _search_duplicate_specs_in_externals(error_cls):
continue
# Otherwise wwe need to report an error
error_msg = 'Multiple externals share the same spec: {0}'.format(spec)
error_msg = "Multiple externals share the same spec: {0}".format(spec)
try:
lines = [str(x._start_mark).strip() for x in entries]
details = [
'Please remove all but one of the following entries:'
] + lines + [
'as they might result in non-deterministic hashes'
]
details = (
["Please remove all but one of the following entries:"]
+ lines
+ ["as they might result in non-deterministic hashes"]
)
except TypeError:
details = []
@@ -259,20 +250,35 @@ def _search_duplicate_specs_in_externals(error_cls):
#: Sanity checks on package directives
package_directives = AuditClass(
group='packages',
tag='PKG-DIRECTIVES',
description='Sanity checks on specs used in directives',
kwargs=('pkgs',)
group="packages",
tag="PKG-DIRECTIVES",
description="Sanity checks on specs used in directives",
kwargs=("pkgs",),
)
package_attributes = AuditClass(
group="packages",
tag="PKG-ATTRIBUTES",
description="Sanity checks on reserved attributes of packages",
kwargs=("pkgs",),
)
package_properties = AuditClass(
group="packages",
tag="PKG-PROPERTIES",
description="Sanity checks on properties a package should maintain",
kwargs=("pkgs",),
)
#: Sanity checks on linting
# This can take some time, so it's run separately from packages
package_https_directives = AuditClass(
group='packages-https',
tag='PKG-HTTPS-DIRECTIVES',
description='Sanity checks on https checks of package urls, etc.',
kwargs=('pkgs',)
group="packages-https",
tag="PKG-HTTPS-DIRECTIVES",
description="Sanity checks on https checks of package urls, etc.",
kwargs=("pkgs",),
)
@@ -281,15 +287,13 @@ def _check_build_test_callbacks(pkgs, error_cls):
"""Ensure stand-alone test method is not included in build-time callbacks"""
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
test_callbacks = pkg.build_time_test_callbacks
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
test_callbacks = pkg_cls.build_time_test_callbacks
if test_callbacks and 'test' in test_callbacks:
msg = ('{0} package contains "test" method in '
'build_time_test_callbacks')
instr = ('Remove "test" from: [{0}]'
.format(', '.join(test_callbacks)))
errors.append(error_cls(msg.format(pkg.name), [instr]))
if test_callbacks and "test" in test_callbacks:
msg = '{0} package contains "test" method in ' "build_time_test_callbacks"
instr = 'Remove "test" from: [{0}]'.format(", ".join(test_callbacks))
errors.append(error_cls(msg.format(pkg_name), [instr]))
return errors
@@ -298,13 +302,14 @@ def _check_build_test_callbacks(pkgs, error_cls):
def _check_patch_urls(pkgs, error_cls):
"""Ensure that patches fetched from GitHub have stable sha256 hashes."""
github_patch_url_re = (
r"^https?://github\.com/.+/.+/(?:commit|pull)/[a-fA-F0-9]*.(?:patch|diff)"
r"^https?://(?:patch-diff\.)?github(?:usercontent)?\.com/"
".+/.+/(?:commit|pull)/[a-fA-F0-9]*.(?:patch|diff)"
)
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
for condition, patches in pkg.patches.items():
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
for condition, patches in pkg_cls.patches.items():
for patch in patches:
if not isinstance(patch, spack.patch.UrlPatch):
continue
@@ -314,37 +319,210 @@ def _check_patch_urls(pkgs, error_cls):
full_index_arg = "?full_index=1"
if not patch.url.endswith(full_index_arg):
errors.append(error_cls(
"patch URL in package {0} must end with {1}".format(
pkg.name, full_index_arg,
),
[patch.url],
))
errors.append(
error_cls(
"patch URL in package {0} must end with {1}".format(
pkg_cls.name,
full_index_arg,
),
[patch.url],
)
)
return errors
@package_attributes
def _search_for_reserved_attributes_names_in_packages(pkgs, error_cls):
"""Ensure that packages don't override reserved names"""
RESERVED_NAMES = ("name",)
errors = []
for pkg_name in pkgs:
name_definitions = collections.defaultdict(list)
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
for cls_item in inspect.getmro(pkg_cls):
for name in RESERVED_NAMES:
current_value = cls_item.__dict__.get(name)
if current_value is None:
continue
name_definitions[name].append((cls_item, current_value))
for name in RESERVED_NAMES:
if len(name_definitions[name]) == 1:
continue
error_msg = (
"Package '{}' overrides the '{}' attribute or method, "
"which is reserved for Spack internal use"
)
definitions = [
"defined in '{}'".format(x[0].__module__) for x in name_definitions[name]
]
errors.append(error_cls(error_msg.format(pkg_name, name), definitions))
return errors
@package_properties
def _ensure_all_package_names_are_lowercase(pkgs, error_cls):
"""Ensure package names are lowercase and consistent"""
badname_regex, errors = re.compile(r"[_A-Z]"), []
for pkg_name in pkgs:
if badname_regex.search(pkg_name):
error_msg = "Package name '{}' is either lowercase or conatine '_'".format(pkg_name)
errors.append(error_cls(error_msg, []))
return errors
@package_properties
def _ensure_packages_are_pickeleable(pkgs, error_cls):
"""Ensure that package objects are pickleable"""
errors = []
for pkg_name in pkgs:
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
pkg = pkg_cls(spack.spec.Spec(pkg_name))
try:
pickle.dumps(pkg)
except Exception as e:
error_msg = "Package '{}' failed to pickle".format(pkg_name)
details = ["{}".format(str(e))]
errors.append(error_cls(error_msg, details))
return errors
@package_properties
def _ensure_packages_are_unparseable(pkgs, error_cls):
"""Ensure that all packages can unparse and that unparsed code is valid Python"""
import spack.util.package_hash as ph
errors = []
for pkg_name in pkgs:
try:
source = ph.canonical_source(pkg_name, filter_multimethods=False)
except Exception as e:
error_msg = "Package '{}' failed to unparse".format(pkg_name)
details = ["{}".format(str(e))]
errors.append(error_cls(error_msg, details))
continue
try:
compile(source, "internal", "exec", ast.PyCF_ONLY_AST)
except Exception as e:
error_msg = "The unparsed package '{}' failed to compile".format(pkg_name)
details = ["{}".format(str(e))]
errors.append(error_cls(error_msg, details))
return errors
@package_properties
def _ensure_all_versions_can_produce_a_fetcher(pkgs, error_cls):
"""Ensure all versions in a package can produce a fetcher"""
errors = []
for pkg_name in pkgs:
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
pkg = pkg_cls(spack.spec.Spec(pkg_name))
try:
spack.fetch_strategy.check_pkg_attributes(pkg)
for version in pkg.versions:
assert spack.fetch_strategy.for_package_version(pkg, version)
except Exception as e:
error_msg = "The package '{}' cannot produce a fetcher for some of its versions"
details = ["{}".format(str(e))]
errors.append(error_cls(error_msg.format(pkg_name), details))
return errors
@package_properties
def _ensure_docstring_and_no_fixme(pkgs, error_cls):
"""Ensure the package has a docstring and no fixmes"""
errors = []
fixme_regexes = [
re.compile(r"remove this boilerplate"),
re.compile(r"FIXME: Put"),
re.compile(r"FIXME: Add"),
re.compile(r"example.com"),
]
for pkg_name in pkgs:
details = []
filename = spack.repo.path.filename_for_package_name(pkg_name)
with open(filename, "r") as package_file:
for i, line in enumerate(package_file):
pattern = next((r for r in fixme_regexes if r.search(line)), None)
if pattern:
details.append(
"%s:%d: boilerplate needs to be removed: %s" % (filename, i, line.strip())
)
if details:
error_msg = "Package '{}' contains boilerplate that need to be removed"
errors.append(error_cls(error_msg.format(pkg_name), details))
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
if not pkg_cls.__doc__:
error_msg = "Package '{}' miss a docstring"
errors.append(error_cls(error_msg.format(pkg_name), []))
return errors
@package_properties
def _ensure_all_packages_use_sha256_checksums(pkgs, error_cls):
"""Ensure no packages use md5 checksums"""
errors = []
for pkg_name in pkgs:
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
if pkg_cls.manual_download:
continue
pkg = pkg_cls(spack.spec.Spec(pkg_name))
def invalid_sha256_digest(fetcher):
if getattr(fetcher, "digest", None):
h = spack.util.crypto.hash_algo_for_digest(fetcher.digest)
if h != "sha256":
return h, True
return None, False
error_msg = "Package '{}' does not use sha256 checksum".format(pkg_name)
details = []
for v, args in pkg.versions.items():
fetcher = spack.fetch_strategy.for_package_version(pkg, v)
digest, is_bad = invalid_sha256_digest(fetcher)
if is_bad:
details.append("{}@{} uses {}".format(pkg_name, v, digest))
for _, resources in pkg.resources.items():
for resource in resources:
digest, is_bad = invalid_sha256_digest(resource.fetcher)
if is_bad:
details.append("Resource in '{}' uses {}".format(pkg_name, digest))
if details:
errors.append(error_cls(error_msg, details))
return errors
@package_https_directives
def _linting_package_file(pkgs, error_cls):
"""Check for correctness of links
"""
"""Check for correctness of links"""
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
# Does the homepage have http, and if so, does https work?
if pkg.homepage.startswith('http://'):
https = re.sub("http", "https", pkg.homepage, 1)
if pkg_cls.homepage.startswith("http://"):
https = re.sub("http", "https", pkg_cls.homepage, 1)
try:
response = urlopen(https)
except Exception as e:
msg = 'Error with attempting https for "{0}": '
errors.append(error_cls(msg.format(pkg.name), [str(e)]))
errors.append(error_cls(msg.format(pkg_cls.name), [str(e)]))
continue
if response.getcode() == 200:
msg = 'Package "{0}" uses http but has a valid https endpoint.'
errors.append(msg.format(pkg.name))
errors.append(msg.format(pkg_cls.name))
return llnl.util.lang.dedupe(errors)
@@ -354,10 +532,10 @@ def _unknown_variants_in_directives(pkgs, error_cls):
"""Report unknown or wrong variants in directives for this package"""
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
# Check "conflicts" directive
for conflict, triggers in pkg.conflicts.items():
for conflict, triggers in pkg_cls.conflicts.items():
for trigger, _ in triggers:
vrn = spack.spec.Spec(conflict)
try:
@@ -369,36 +547,48 @@ def _unknown_variants_in_directives(pkgs, error_cls):
# conflict and trigger separately in that case.
# When os and target constraints can be created independently of
# the platform, TODO change this back to add an error.
errors.extend(_analyze_variants_in_directive(
pkg, spack.spec.Spec(trigger),
directive='conflicts', error_cls=error_cls
))
errors.extend(_analyze_variants_in_directive(
pkg, vrn, directive='conflicts', error_cls=error_cls
))
errors.extend(
_analyze_variants_in_directive(
pkg_cls,
spack.spec.Spec(trigger),
directive="conflicts",
error_cls=error_cls,
)
)
errors.extend(
_analyze_variants_in_directive(
pkg_cls, vrn, directive="conflicts", error_cls=error_cls
)
)
# Check "depends_on" directive
for _, triggers in pkg.dependencies.items():
for _, triggers in pkg_cls.dependencies.items():
triggers = list(triggers)
for trigger in list(triggers):
vrn = spack.spec.Spec(trigger)
errors.extend(_analyze_variants_in_directive(
pkg, vrn, directive='depends_on', error_cls=error_cls
))
errors.extend(
_analyze_variants_in_directive(
pkg_cls, vrn, directive="depends_on", error_cls=error_cls
)
)
# Check "patch" directive
for _, triggers in pkg.provided.items():
for _, triggers in pkg_cls.provided.items():
triggers = [spack.spec.Spec(x) for x in triggers]
for vrn in triggers:
errors.extend(_analyze_variants_in_directive(
pkg, vrn, directive='patch', error_cls=error_cls
))
errors.extend(
_analyze_variants_in_directive(
pkg_cls, vrn, directive="patch", error_cls=error_cls
)
)
# Check "resource" directive
for vrn in pkg.resources:
errors.extend(_analyze_variants_in_directive(
pkg, vrn, directive='resource', error_cls=error_cls
))
for vrn in pkg_cls.resources:
errors.extend(
_analyze_variants_in_directive(
pkg_cls, vrn, directive="resource", error_cls=error_cls
)
)
return llnl.util.lang.dedupe(errors)
@@ -408,23 +598,22 @@ def _unknown_variants_in_dependencies(pkgs, error_cls):
"""Report unknown dependencies and wrong variants for dependencies"""
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
filename = spack.repo.path.filename_for_package_name(pkg_name)
for dependency_name, dependency_data in pkg.dependencies.items():
for dependency_name, dependency_data in pkg_cls.dependencies.items():
# No need to analyze virtual packages
if spack.repo.path.is_virtual(dependency_name):
continue
try:
dependency_pkg = spack.repo.get(dependency_name)
dependency_pkg_cls = spack.repo.path.get_pkg_class(dependency_name)
except spack.repo.UnknownPackageError:
# This dependency is completely missing, so report
# and continue the analysis
summary = (pkg_name + ": unknown package '{0}' in "
"'depends_on' directive".format(dependency_name))
details = [
" in " + filename
]
summary = pkg_name + ": unknown package '{0}' in " "'depends_on' directive".format(
dependency_name
)
details = [" in " + filename]
errors.append(error_cls(summary=summary, details=details))
continue
@@ -432,20 +621,51 @@ def _unknown_variants_in_dependencies(pkgs, error_cls):
dependency_variants = dependency_edge.spec.variants
for name, value in dependency_variants.items():
try:
v, _ = dependency_pkg.variants[name]
v.validate_or_raise(value, pkg=dependency_pkg)
v, _ = dependency_pkg_cls.variants[name]
v.validate_or_raise(value, pkg_cls=dependency_pkg_cls)
except Exception as e:
summary = (pkg_name + ": wrong variant used for a "
"dependency in a 'depends_on' directive")
summary = (
pkg_name + ": wrong variant used for a "
"dependency in a 'depends_on' directive"
)
error_msg = str(e).strip()
if isinstance(e, KeyError):
error_msg = ('the variant {0} does not '
'exist'.format(error_msg))
error_msg = "the variant {0} does not " "exist".format(error_msg)
error_msg += " in package '" + dependency_name + "'"
errors.append(error_cls(
summary=summary, details=[error_msg, 'in ' + filename]
))
errors.append(
error_cls(summary=summary, details=[error_msg, "in " + filename])
)
return errors
@package_directives
def _ensure_variant_defaults_are_parsable(pkgs, error_cls):
"""Ensures that variant defaults are present and parsable from cli"""
errors = []
for pkg_name in pkgs:
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
for variant_name, entry in pkg_cls.variants.items():
variant, _ = entry
default_is_parsable = (
# Permitting a default that is an instance on 'int' permits
# to have foo=false or foo=0. Other falsish values are
# not allowed, since they can't be parsed from cli ('foo=')
isinstance(variant.default, int)
or variant.default
)
if not default_is_parsable:
error_msg = "Variant '{}' of package '{}' has a bad default value"
errors.append(error_cls(error_msg.format(variant_name, pkg_name), []))
continue
vspec = variant.make_default()
try:
variant.validate_or_raise(vspec, pkg_cls=pkg_cls)
except spack.variant.InvalidVariantValueError:
error_msg = "The variant '{}' default value in package '{}' cannot be validated"
errors.append(error_cls(error_msg.format(variant_name, pkg_name), []))
return errors
@@ -455,34 +675,33 @@ def _version_constraints_are_satisfiable_by_some_version_in_repo(pkgs, error_cls
"""Report if version constraints used in directives are not satisfiable"""
errors = []
for pkg_name in pkgs:
pkg = spack.repo.get(pkg_name)
pkg_cls = spack.repo.path.get_pkg_class(pkg_name)
filename = spack.repo.path.filename_for_package_name(pkg_name)
dependencies_to_check = []
for dependency_name, dependency_data in pkg.dependencies.items():
for dependency_name, dependency_data in pkg_cls.dependencies.items():
# Skip virtual dependencies for the time being, check on
# their versions can be added later
if spack.repo.path.is_virtual(dependency_name):
continue
dependencies_to_check.extend(
[edge.spec for edge in dependency_data.values()]
)
dependencies_to_check.extend([edge.spec for edge in dependency_data.values()])
for s in dependencies_to_check:
dependency_pkg = None
dependency_pkg_cls = None
try:
dependency_pkg = spack.repo.get(s.name)
assert any(
v.satisfies(s.versions) for v in list(dependency_pkg.versions)
)
dependency_pkg_cls = spack.repo.path.get_pkg_class(s.name)
assert any(v.satisfies(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}").format(pkg_name, s)
details = ['happening in ' + filename]
if dependency_pkg is not None:
details.append('known versions of {0.name} are {1}'.format(
s, ', '.join([str(x) for x in dependency_pkg.versions])
))
summary = (
"{0}: dependency on {1} cannot be satisfied " "by known versions of {1.name}"
).format(pkg_name, s)
details = ["happening in " + filename]
if dependency_pkg_cls is not None:
details.append(
"known versions of {0.name} are {1}".format(
s, ", ".join([str(x) for x in dependency_pkg_cls.versions])
)
)
errors.append(error_cls(summary=summary, details=details))
return errors
@@ -493,13 +712,13 @@ def _analyze_variants_in_directive(pkg, constraint, directive, error_cls):
spack.variant.InconsistentValidationError,
spack.variant.MultipleValuesInExclusiveVariantError,
spack.variant.InvalidVariantValueError,
KeyError
KeyError,
)
errors = []
for name, v in constraint.variants.items():
try:
variant, _ = pkg.variants[name]
variant.validate_or_raise(v, pkg=pkg)
variant.validate_or_raise(v, pkg_cls=pkg)
except variant_exceptions as e:
summary = pkg.name + ': wrong variant in "{0}" directive'
summary = summary.format(directive)
@@ -507,11 +726,9 @@ def _analyze_variants_in_directive(pkg, constraint, directive, error_cls):
error_msg = str(e).strip()
if isinstance(e, KeyError):
error_msg = 'the variant {0} does not exist'.format(error_msg)
error_msg = "the variant {0} does not exist".format(error_msg)
err = error_cls(summary=summary, details=[
error_msg, 'in ' + filename
])
err = error_cls(summary=summary, details=[error_msg, "in " + filename])
errors.append(err)

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,7 @@
import re
import sys
import sysconfig
import uuid
import six
@@ -40,9 +41,12 @@
import spack.util.path
import spack.util.spack_yaml
import spack.util.url
import spack.version
#: Name of the file containing metadata about the bootstrapping source
METADATA_YAML_FILENAME = 'metadata.yaml'
METADATA_YAML_FILENAME = "metadata.yaml"
is_windows = sys.platform == "win32"
#: Map a bootstrapper type to the corresponding class
_bootstrap_methods = {}
@@ -55,9 +59,11 @@ def _bootstrapper(type):
Args:
type (str): string identifying the class
"""
def _register(cls):
_bootstrap_methods[type] = cls
return cls
return _register
@@ -74,38 +80,49 @@ def _try_import_from_store(module, query_spec, query_info=None):
# If it is a string assume it's one of the root specs by this module
if isinstance(query_spec, six.string_types):
# We have to run as part of this python interpreter
query_spec += ' ^' + spec_for_current_python()
query_spec += " ^" + spec_for_current_python()
installed_specs = spack.store.db.query(query_spec, installed=True)
for candidate_spec in installed_specs:
pkg = candidate_spec['python'].package
module_paths = {
pkg = candidate_spec["python"].package
module_paths = [
os.path.join(candidate_spec.prefix, pkg.purelib),
os.path.join(candidate_spec.prefix, pkg.platlib),
}
sys.path.extend(module_paths)
try:
_fix_ext_suffix(candidate_spec)
if _python_import(module):
msg = ('[BOOTSTRAP MODULE {0}] The installed spec "{1}/{2}" '
'provides the "{0}" Python module').format(
module, query_spec, candidate_spec.dag_hash()
] # type: list[str]
path_before = list(sys.path)
# NOTE: try module_paths first and last, last allows an existing version in path
# to be picked up and used, possibly depending on something in the store, first
# allows the bootstrap version to work when an incompatible version is in
# sys.path
orders = [
module_paths + sys.path,
sys.path + module_paths,
]
for path in orders:
sys.path = path
try:
_fix_ext_suffix(candidate_spec)
if _python_import(module):
msg = (
'[BOOTSTRAP MODULE {0}] The installed spec "{1}/{2}" '
'provides the "{0}" Python module'
).format(module, query_spec, candidate_spec.dag_hash())
tty.debug(msg)
if query_info is not None:
query_info["spec"] = candidate_spec
return True
except Exception as e:
msg = (
"unexpected error while trying to import module "
'"{0}" from spec "{1}" [error="{2}"]'
)
tty.debug(msg)
if query_info is not None:
query_info['spec'] = candidate_spec
return True
except Exception as e:
msg = ('unexpected error while trying to import module '
'"{0}" from spec "{1}" [error="{2}"]')
tty.warn(msg.format(module, candidate_spec, str(e)))
else:
msg = "Spec {0} did not provide module {1}"
tty.warn(msg.format(candidate_spec, module))
tty.warn(msg.format(module, candidate_spec, str(e)))
else:
msg = "Spec {0} did not provide module {1}"
tty.warn(msg.format(candidate_spec, module))
sys.path = sys.path[:-3]
sys.path = path_before
return False
@@ -125,10 +142,10 @@ def _fix_ext_suffix(candidate_spec):
# [RHEL + ppc64le]: https://github.com/spack/spack/issues/25734
#
_suffix_to_be_checked = {
'ppc64le': {
'glob': '*.cpython-*-powerpc64le-linux-gnu.so',
're': r'.cpython-[\w]*-powerpc64le-linux-gnu.so',
'fmt': r'{module}.cpython-{major}{minor}m-powerpc64le-linux-gnu.so'
"ppc64le": {
"glob": "*.cpython-*-powerpc64le-linux-gnu.so",
"re": r".cpython-[\w]*-powerpc64le-linux-gnu.so",
"fmt": r"{module}.cpython-{major}{minor}m-powerpc64le-linux-gnu.so",
}
}
@@ -139,12 +156,12 @@ def _fix_ext_suffix(candidate_spec):
# If there's no EXT_SUFFIX (Python < 3.5) or the suffix matches
# the expectations, return since the package is surely good
ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')
ext_suffix = sysconfig.get_config_var("EXT_SUFFIX")
if ext_suffix is None:
return
expected = _suffix_to_be_checked[str(generic_target)]
if fnmatch.fnmatch(ext_suffix, expected['glob']):
if fnmatch.fnmatch(ext_suffix, expected["glob"]):
return
# If we are here it means the current interpreter expects different names
@@ -154,8 +171,8 @@ def _fix_ext_suffix(candidate_spec):
# Check if standard names are installed and if we have to create
# link for this interpreter
standard_extensions = fs.find(candidate_spec.prefix, expected['glob'])
link_names = [re.sub(expected['re'], ext_suffix, s) for s in standard_extensions]
standard_extensions = fs.find(candidate_spec.prefix, expected["glob"])
link_names = [re.sub(expected["re"], ext_suffix, s) for s in standard_extensions]
for file_name, link_name in zip(standard_extensions, link_names):
if os.path.exists(link_name):
continue
@@ -163,12 +180,15 @@ def _fix_ext_suffix(candidate_spec):
# Check if this interpreter installed something and we have to create
# links for a standard CPython interpreter
non_standard_extensions = fs.find(candidate_spec.prefix, '*' + ext_suffix)
non_standard_extensions = fs.find(candidate_spec.prefix, "*" + ext_suffix)
for abs_path in non_standard_extensions:
directory, filename = os.path.split(abs_path)
module = filename.split('.')[0]
link_name = os.path.join(directory, expected['fmt'].format(
module=module, major=sys.version_info[0], minor=sys.version_info[1])
module = filename.split(".")[0]
link_name = os.path.join(
directory,
expected["fmt"].format(
module=module, major=sys.version_info[0], minor=sys.version_info[1]
),
)
if os.path.exists(link_name):
continue
@@ -189,7 +209,7 @@ def _executables_in_store(executables, query_spec, query_info=None):
query_info (dict or None): if a dict is passed it is populated with the
command found and the concrete spec providing it
"""
executables_str = ', '.join(executables)
executables_str = ", ".join(executables)
msg = "[BOOTSTRAP EXECUTABLES {0}] Try installed specs with query '{1}'"
tty.debug(msg.format(executables_str, query_spec))
installed_specs = spack.store.db.query(query_spec, installed=True)
@@ -198,25 +218,27 @@ def _executables_in_store(executables, query_spec, query_info=None):
bin_dir = concrete_spec.prefix.bin
# IF we have a "bin" directory and it contains
# the executables we are looking for
if (os.path.exists(bin_dir) and os.path.isdir(bin_dir) and
spack.util.executable.which_string(*executables, path=bin_dir)):
spack.util.environment.path_put_first('PATH', [bin_dir])
if (
os.path.exists(bin_dir)
and os.path.isdir(bin_dir)
and spack.util.executable.which_string(*executables, path=bin_dir)
):
spack.util.environment.path_put_first("PATH", [bin_dir])
if query_info is not None:
query_info['command'] = spack.util.executable.which(
*executables, path=bin_dir
)
query_info['spec'] = concrete_spec
query_info["command"] = spack.util.executable.which(*executables, path=bin_dir)
query_info["spec"] = concrete_spec
return True
return False
class _BootstrapperBase(object):
"""Base class to derive types that can bootstrap software for Spack"""
config_scope_name = ''
config_scope_name = ""
def __init__(self, conf):
self.name = conf['name']
self.url = conf['info']['url']
self.name = conf["name"]
self.url = conf["info"]["url"]
@property
def mirror_url(self):
@@ -225,7 +247,7 @@ def mirror_url(self):
return spack.util.url.format(self.url)
# Check for :// and assume it's an url if we find it
if '://' in self.url:
if "://" in self.url:
return self.url
# Otherwise, it's a relative path
@@ -234,20 +256,19 @@ def mirror_url(self):
@property
def mirror_scope(self):
return spack.config.InternalConfigScope(
self.config_scope_name, {'mirrors:': {self.name: self.mirror_url}}
self.config_scope_name, {"mirrors:": {self.name: self.mirror_url}}
)
@_bootstrapper(type='buildcache')
@_bootstrapper(type="buildcache")
class _BuildcacheBootstrapper(_BootstrapperBase):
"""Install the software needed during bootstrapping from a buildcache."""
config_scope_name = 'bootstrap_buildcache'
def __init__(self, conf):
super(_BuildcacheBootstrapper, self).__init__(conf)
self.metadata_dir = spack.util.path.canonicalize_path(conf['metadata'])
self.metadata_dir = spack.util.path.canonicalize_path(conf["metadata"])
self.last_search = None
self.config_scope_name = "bootstrap_buildcache-{}".format(uuid.uuid4())
@staticmethod
def _spec_and_platform(abstract_spec_str):
@@ -268,7 +289,7 @@ def _spec_and_platform(abstract_spec_str):
def _read_metadata(self, package_name):
"""Return metadata about the given package."""
json_filename = '{0}.json'.format(package_name)
json_filename = "{0}.json".format(package_name)
json_dir = self.metadata_dir
json_path = os.path.join(json_dir, json_filename)
with open(json_path) as f:
@@ -285,32 +306,22 @@ def _install_by_hash(self, pkg_hash, pkg_sha256, index, bincache_platform):
"cc": "/dev/null",
"cxx": "/dev/null",
"f77": "/dev/null",
"fc": "/dev/null"
"fc": "/dev/null",
},
"spec": str(index_spec.compiler),
"target": str(index_spec.target.family)
"target": str(index_spec.target.family),
}
with spack.platforms.use_platform(bincache_platform):
with spack.config.override(
'compilers', [{'compiler': compiler_entry}]
):
spec_str = '/' + pkg_hash
query = spack.binary_distribution.BinaryCacheQuery(
all_architectures=True
)
with spack.config.override("compilers", [{"compiler": compiler_entry}]):
spec_str = "/" + pkg_hash
query = spack.binary_distribution.BinaryCacheQuery(all_architectures=True)
matches = spack.store.find([spec_str], multiple=False, query_fn=query)
for match in matches:
spack.binary_distribution.install_root_node(
match,
allow_root=True,
unsigned=True,
force=True,
sha256=pkg_sha256
match, allow_root=True, unsigned=True, force=True, sha256=pkg_sha256
)
def _install_and_test(
self, abstract_spec, bincache_platform, bincache_data, test_fn
):
def _install_and_test(self, abstract_spec, bincache_platform, bincache_data, test_fn):
# Ensure we see only the buildcache being used to bootstrap
with spack.config.override(self.mirror_scope):
# This index is currently needed to get the compiler used to build some
@@ -321,10 +332,10 @@ def _install_and_test(
if not index:
raise RuntimeError("The binary index is empty")
for item in bincache_data['verified']:
candidate_spec = item['spec']
for item in bincache_data["verified"]:
candidate_spec = item["spec"]
# This will be None for things that don't depend on python
python_spec = item.get('python', None)
python_spec = item.get("python", None)
# Skip specs which are not compatible
if not abstract_spec.satisfies(candidate_spec):
continue
@@ -332,11 +343,9 @@ def _install_and_test(
if python_spec is not None and python_spec not in abstract_spec:
continue
for pkg_name, pkg_hash, pkg_sha256 in item['binaries']:
for pkg_name, pkg_hash, pkg_sha256 in item["binaries"]:
# TODO: undo installations that didn't complete?
self._install_by_hash(
pkg_hash, pkg_sha256, index, bincache_platform
)
self._install_by_hash(pkg_hash, pkg_sha256, index, bincache_platform)
info = {}
if test_fn(query_spec=abstract_spec, query_info=info):
@@ -351,12 +360,10 @@ def try_import(self, module, abstract_spec_str):
tty.info("Bootstrapping {0} from pre-built binaries".format(module))
abstract_spec, bincache_platform = self._spec_and_platform(
abstract_spec_str + ' ^' + spec_for_current_python()
abstract_spec_str + " ^" + spec_for_current_python()
)
data = self._read_metadata(module)
return self._install_and_test(
abstract_spec, bincache_platform, data, test_fn
)
return self._install_and_test(abstract_spec, bincache_platform, data, test_fn)
def try_search_path(self, executables, abstract_spec_str):
test_fn, info = functools.partial(_executables_in_store, executables), {}
@@ -367,21 +374,19 @@ def try_search_path(self, executables, abstract_spec_str):
abstract_spec, bincache_platform = self._spec_and_platform(abstract_spec_str)
tty.info("Bootstrapping {0} from pre-built binaries".format(abstract_spec.name))
data = self._read_metadata(abstract_spec.name)
return self._install_and_test(
abstract_spec, bincache_platform, data, test_fn
)
return self._install_and_test(abstract_spec, bincache_platform, data, test_fn)
@_bootstrapper(type='install')
@_bootstrapper(type="install")
class _SourceBootstrapper(_BootstrapperBase):
"""Install the software needed during bootstrapping from sources."""
config_scope_name = 'bootstrap_source'
def __init__(self, conf):
super(_SourceBootstrapper, self).__init__(conf)
self.metadata_dir = spack.util.path.canonicalize_path(conf['metadata'])
self.metadata_dir = spack.util.path.canonicalize_path(conf["metadata"])
self.conf = conf
self.last_search = None
self.config_scope_name = "bootstrap_source-{}".format(uuid.uuid4())
def try_import(self, module, abstract_spec_str):
info = {}
@@ -398,11 +403,9 @@ def try_import(self, module, abstract_spec_str):
# Try to build and install from sources
with spack_python_interpreter():
# Add hint to use frontend operating system on Cray
concrete_spec = spack.spec.Spec(
abstract_spec_str + ' ^' + spec_for_current_python()
)
concrete_spec = spack.spec.Spec(abstract_spec_str + " ^" + spec_for_current_python())
if module == 'clingo':
if module == "clingo":
# TODO: remove when the old concretizer is deprecated
concrete_spec._old_concretize(deprecation_warning=False)
else:
@@ -433,7 +436,7 @@ def try_search_path(self, executables, abstract_spec_str):
_add_externals_if_missing()
concrete_spec = spack.spec.Spec(abstract_spec_str)
if concrete_spec.name == 'patchelf':
if concrete_spec.name == "patchelf":
concrete_spec._old_concretize(deprecation_warning=False)
else:
concrete_spec.concretize()
@@ -452,14 +455,15 @@ def _make_bootstrapper(conf):
"""Return a bootstrap object built according to the
configuration argument
"""
btype = conf['type']
btype = conf["type"]
return _bootstrap_methods[btype](conf)
def _validate_source_is_trusted(conf):
trusted, name = spack.config.get('bootstrap:trusted'), conf['name']
if name not in trusted:
raise ValueError('source is not trusted')
def source_is_enabled_or_raise(conf):
"""Raise ValueError if the source is not enabled for bootstrapping"""
trusted, name = spack.config.get("bootstrap:trusted"), conf["name"]
if not trusted.get(name, False):
raise ValueError("source is not trusted")
def spec_for_current_python():
@@ -471,13 +475,13 @@ def spec_for_current_python():
https://www.python.org/dev/peps/pep-0513/
https://stackoverflow.com/a/35801395/771663
"""
version_str = '.'.join(str(x) for x in sys.version_info[:2])
variant_str = ''
version_str = ".".join(str(x) for x in sys.version_info[:2])
variant_str = ""
if sys.version_info[0] == 2 and sys.version_info[1] == 7:
unicode_size = sysconfig.get_config_var('Py_UNICODE_SIZE')
variant_str = '+ucs4' if unicode_size == 4 else '~ucs4'
unicode_size = sysconfig.get_config_var("Py_UNICODE_SIZE")
variant_str = "+ucs4" if unicode_size == 4 else "~ucs4"
spec_fmt = 'python@{0} {1}'
spec_fmt = "python@{0} {1}"
return spec_fmt.format(version_str, variant_str)
@@ -491,13 +495,11 @@ def spack_python_interpreter():
external_python = spec_for_current_python()
entry = {
'buildable': False,
'externals': [
{'prefix': python_prefix, 'spec': str(external_python)}
]
"buildable": False,
"externals": [{"prefix": python_prefix, "spec": str(external_python)}],
}
with spack.config.override('packages:python::', entry):
with spack.config.override("packages:python::", entry):
yield
@@ -528,14 +530,17 @@ def ensure_module_importable_or_raise(module, abstract_spec=None):
h = GroupedExceptionHandler()
for current_config in bootstrapping_sources():
with h.forward(current_config['name']):
_validate_source_is_trusted(current_config)
with h.forward(current_config["name"]):
source_is_enabled_or_raise(current_config)
b = _make_bootstrapper(current_config)
if b.try_import(module, abstract_spec):
return
assert h, 'expected at least one exception to have been raised at this point: while bootstrapping {0}'.format(module) # noqa: E501
assert h, (
"expected at least one exception to have been raised at this point: "
"while bootstrapping {0}".format(module)
)
msg = 'cannot bootstrap the "{0}" Python module '.format(module)
if abstract_spec:
msg += 'from spec "{0}" '.format(abstract_spec)
@@ -543,43 +548,50 @@ def ensure_module_importable_or_raise(module, abstract_spec=None):
msg += h.grouped_message(with_tracebacks=True)
else:
msg += h.grouped_message(with_tracebacks=False)
msg += '\nRun `spack --debug ...` for more detailed errors'
msg += "\nRun `spack --debug ...` for more detailed errors"
raise ImportError(msg)
def ensure_executables_in_path_or_raise(executables, abstract_spec):
def ensure_executables_in_path_or_raise(executables, abstract_spec, cmd_check=None):
"""Ensure that some executables are in path or raise.
Args:
executables (list): list of executables to be searched in the PATH,
in order. The function exits on the first one found.
abstract_spec (str): abstract spec that provides the executables
cmd_check (object): callable predicate that takes a
``spack.util.executable.Executable`` command and validate it. Should return
``True`` if the executable is acceptable, ``False`` otherwise.
Can be used to, e.g., ensure a suitable version of the command before
accepting for bootstrapping.
Raises:
RuntimeError: if the executables cannot be ensured to be in PATH
Return:
Executable object
"""
cmd = spack.util.executable.which(*executables)
if cmd:
return cmd
if not cmd_check or cmd_check(cmd):
return cmd
executables_str = ', '.join(executables)
executables_str = ", ".join(executables)
h = GroupedExceptionHandler()
for current_config in bootstrapping_sources():
with h.forward(current_config['name']):
_validate_source_is_trusted(current_config)
with h.forward(current_config["name"]):
source_is_enabled_or_raise(current_config)
b = _make_bootstrapper(current_config)
if b.try_search_path(executables, abstract_spec):
# Additional environment variables needed
concrete_spec, cmd = b.last_search['spec'], b.last_search['command']
concrete_spec, cmd = b.last_search["spec"], b.last_search["command"]
env_mods = spack.util.environment.EnvironmentModifications()
for dep in concrete_spec.traverse(
root=True, order='post', deptype=('link', 'run')
root=True, order="post", deptype=("link", "run")
):
env_mods.extend(
spack.user_environment.environment_modifications_for_spec(
@@ -589,15 +601,18 @@ def ensure_executables_in_path_or_raise(executables, abstract_spec):
cmd.add_default_envmod(env_mods)
return cmd
assert h, 'expected at least one exception to have been raised at this point: while bootstrapping {0}'.format(executables_str) # noqa: E501
msg = 'cannot bootstrap any of the {0} executables '.format(executables_str)
assert h, (
"expected at least one exception to have been raised at this point: "
"while bootstrapping {0}".format(executables_str)
)
msg = "cannot bootstrap any of the {0} executables ".format(executables_str)
if abstract_spec:
msg += 'from spec "{0}" '.format(abstract_spec)
if tty.is_debug():
msg += h.grouped_message(with_tracebacks=True)
else:
msg += h.grouped_message(with_tracebacks=False)
msg += '\nRun `spack --debug ...` for more detailed errors'
msg += "\nRun `spack --debug ...` for more detailed errors"
raise RuntimeError(msg)
@@ -610,22 +625,17 @@ def _python_import(module):
def _bootstrap_config_scopes():
tty.debug('[BOOTSTRAP CONFIG SCOPE] name=_builtin')
config_scopes = [
spack.config.InternalConfigScope('_builtin', spack.config.config_defaults)
]
configuration_paths = (
spack.config.configuration_defaults_path,
('bootstrap', _config_path())
)
tty.debug("[BOOTSTRAP CONFIG SCOPE] name=_builtin")
config_scopes = [spack.config.InternalConfigScope("_builtin", spack.config.config_defaults)]
configuration_paths = (spack.config.configuration_defaults_path, ("bootstrap", _config_path()))
for name, path in configuration_paths:
platform = spack.platforms.host().name
platform_scope = spack.config.ConfigScope(
'/'.join([name, platform]), os.path.join(path, platform)
"/".join([name, platform]), os.path.join(path, platform)
)
generic_scope = spack.config.ConfigScope(name, path)
config_scopes.extend([generic_scope, platform_scope])
msg = '[BOOTSTRAP CONFIG SCOPE] name={0}, path={1}'
msg = "[BOOTSTRAP CONFIG SCOPE] name={0}, path={1}"
tty.debug(msg.format(generic_scope.name, generic_scope.path))
tty.debug(msg.format(platform_scope.name, platform_scope.path))
return config_scopes
@@ -642,13 +652,15 @@ def _add_compilers_if_missing():
def _add_externals_if_missing():
search_list = [
# clingo
spack.repo.path.get('cmake'),
spack.repo.path.get('bison'),
spack.repo.path.get_pkg_class("cmake"),
spack.repo.path.get_pkg_class("bison"),
# GnuPG
spack.repo.path.get('gawk')
spack.repo.path.get_pkg_class("gawk"),
]
if is_windows:
search_list.append(spack.repo.path.get_pkg_class("winbison"))
detected_packages = spack.detection.by_executable(search_list)
spack.detection.update_configuration(detected_packages, scope='bootstrap')
spack.detection.update_configuration(detected_packages, scope="bootstrap")
#: Reference counter for the bootstrapping configuration context manager
@@ -689,12 +701,8 @@ def _ensure_bootstrap_configuration():
# We may need to compile code from sources, so ensure we
# have compilers for the current platform
_add_compilers_if_missing()
spack.config.set(
'bootstrap', user_configuration['bootstrap']
)
spack.config.set(
'config', user_configuration['config']
)
spack.config.set("bootstrap", user_configuration["bootstrap"])
spack.config.set("config", user_configuration["config"])
with spack.modules.disable_modules():
with spack_python_interpreter():
yield
@@ -707,21 +715,17 @@ def _read_and_sanitize_configuration():
# Read the "config" section but pop the install tree (the entry will not be
# considered due to the use_store context manager, so it will be confusing
# to have it in the configuration).
config_yaml = spack.config.get('config')
config_yaml.pop('install_tree', None)
user_configuration = {
'bootstrap': spack.config.get('bootstrap'),
'config': config_yaml
}
config_yaml = spack.config.get("config")
config_yaml.pop("install_tree", None)
user_configuration = {"bootstrap": spack.config.get("bootstrap"), "config": config_yaml}
return user_configuration
def store_path():
"""Path to the store used for bootstrapped software"""
enabled = spack.config.get('bootstrap:enable', True)
enabled = spack.config.get("bootstrap:enable", True)
if not enabled:
msg = ('bootstrapping is currently disabled. '
'Use "spack bootstrap enable" to enable it')
msg = "bootstrapping is currently disabled. " 'Use "spack bootstrap enable" to enable it'
raise RuntimeError(msg)
return _store_path()
@@ -729,23 +733,17 @@ def store_path():
def _root_path():
"""Root of all the bootstrap related folders"""
return spack.config.get(
'bootstrap:root', spack.paths.default_user_bootstrap_path
)
return spack.config.get("bootstrap:root", spack.paths.default_user_bootstrap_path)
def _store_path():
bootstrap_root_path = _root_path()
return spack.util.path.canonicalize_path(
os.path.join(bootstrap_root_path, 'store')
)
return spack.util.path.canonicalize_path(os.path.join(bootstrap_root_path, "store"))
def _config_path():
bootstrap_root_path = _root_path()
return spack.util.path.canonicalize_path(
os.path.join(bootstrap_root_path, 'config')
)
return spack.util.path.canonicalize_path(os.path.join(bootstrap_root_path, "config"))
def _root_spec(spec_str):
@@ -756,57 +754,84 @@ def _root_spec(spec_str):
"""
# Add a proper compiler hint to the root spec. We use GCC for
# everything but MacOS and Windows.
if str(spack.platforms.host()) == 'darwin':
spec_str += ' %apple-clang'
elif str(spack.platforms.host()) == 'windows':
spec_str += ' %msvc'
if str(spack.platforms.host()) == "darwin":
spec_str += " %apple-clang"
elif str(spack.platforms.host()) == "windows":
spec_str += " %msvc"
else:
spec_str += ' %gcc'
spec_str += " %gcc"
target = archspec.cpu.host().family
spec_str += ' target={0}'.format(target)
spec_str += " target={0}".format(target)
tty.debug('[BOOTSTRAP ROOT SPEC] {0}'.format(spec_str))
tty.debug("[BOOTSTRAP ROOT SPEC] {0}".format(spec_str))
return spec_str
def clingo_root_spec():
"""Return the root spec used to bootstrap clingo"""
return _root_spec('clingo-bootstrap@spack+python')
return _root_spec("clingo-bootstrap@spack+python")
def ensure_clingo_importable_or_raise():
"""Ensure that the clingo module is available for import."""
ensure_module_importable_or_raise(
module='clingo', abstract_spec=clingo_root_spec()
)
ensure_module_importable_or_raise(module="clingo", abstract_spec=clingo_root_spec())
def gnupg_root_spec():
"""Return the root spec used to bootstrap GnuPG"""
return _root_spec('gnupg@2.3:')
return _root_spec("gnupg@2.3:")
def ensure_gpg_in_path_or_raise():
"""Ensure gpg or gpg2 are in the PATH or raise."""
return ensure_executables_in_path_or_raise(
executables=['gpg2', 'gpg'], abstract_spec=gnupg_root_spec()
executables=["gpg2", "gpg"], abstract_spec=gnupg_root_spec()
)
def patchelf_root_spec():
"""Return the root spec used to bootstrap patchelf"""
# TODO: patchelf is restricted to v0.13 since earlier versions have
# TODO: bugs that we don't to deal with, while v0.14 requires a C++17
# TODO: which may not be available on all platforms.
return _root_spec('patchelf@0.13.1:0.13.99')
# 0.13.1 is the last version not to require C++17.
return _root_spec("patchelf@0.13.1:")
def verify_patchelf(patchelf):
"""Older patchelf versions can produce broken binaries, so we
verify the version here.
Arguments:
patchelf (spack.util.executable.Executable): patchelf executable
"""
out = patchelf("--version", output=str, error=os.devnull, fail_on_error=False).strip()
if patchelf.returncode != 0:
return False
parts = out.split(" ")
if len(parts) < 2:
return False
try:
version = spack.version.Version(parts[1])
except ValueError:
return False
return version >= spack.version.Version("0.13.1")
def ensure_patchelf_in_path_or_raise():
"""Ensure patchelf is in the PATH or raise."""
return ensure_executables_in_path_or_raise(
executables=['patchelf'], abstract_spec=patchelf_root_spec()
)
# The old concretizer is not smart and we're doing its job: if the latest patchelf
# does not concretize because the compiler doesn't support C++17, we try to
# concretize again with an upperbound @:13.
try:
return ensure_executables_in_path_or_raise(
executables=["patchelf"], abstract_spec=patchelf_root_spec(), cmd_check=verify_patchelf
)
except RuntimeError:
return ensure_executables_in_path_or_raise(
executables=["patchelf"],
abstract_spec=_root_spec("patchelf@0.13.1:0.13"),
cmd_check=verify_patchelf,
)
###
@@ -815,42 +840,60 @@ def ensure_patchelf_in_path_or_raise():
def isort_root_spec():
return _root_spec('py-isort@4.3.5:')
return _root_spec("py-isort@4.3.5:")
def ensure_isort_in_path_or_raise():
"""Ensure that isort is in the PATH or raise."""
executable, root_spec = 'isort', isort_root_spec()
executable, root_spec = "isort", isort_root_spec()
return ensure_executables_in_path_or_raise([executable], abstract_spec=root_spec)
def mypy_root_spec():
return _root_spec('py-mypy@0.900:')
return _root_spec("py-mypy@0.900:")
def ensure_mypy_in_path_or_raise():
"""Ensure that mypy is in the PATH or raise."""
executable, root_spec = 'mypy', mypy_root_spec()
executable, root_spec = "mypy", mypy_root_spec()
return ensure_executables_in_path_or_raise([executable], abstract_spec=root_spec)
def black_root_spec():
return _root_spec('py-black')
# black v21 is the last version to support Python 2.7.
# Upgrade when we no longer support Python 2.7
return _root_spec("py-black@:21")
def ensure_black_in_path_or_raise():
"""Ensure that isort is in the PATH or raise."""
executable, root_spec = 'black', black_root_spec()
return ensure_executables_in_path_or_raise([executable], abstract_spec=root_spec)
"""Ensure that black is in the PATH or raise."""
root_spec = black_root_spec()
def check_black(black_cmd):
"""Ensure sutable black version."""
try:
output = black_cmd("--version", output=str)
except Exception as e:
tty.debug("Error getting version of %s: %s" % (black_cmd, e))
return False
match = re.match("black, ([^ ]+)", output)
if not match:
return False
black_version = spack.version.Version(match.group(1))
return black_version.satisfies(spack.spec.Spec(root_spec).versions)
return ensure_executables_in_path_or_raise(["black"], root_spec, check_black)
def flake8_root_spec():
return _root_spec('py-flake8')
return _root_spec("py-flake8")
def ensure_flake8_in_path_or_raise():
"""Ensure that flake8 is in the PATH or raise."""
executable, root_spec = 'flake8', flake8_root_spec()
executable, root_spec = "flake8", flake8_root_spec()
return ensure_executables_in_path_or_raise([executable], abstract_spec=root_spec)
@@ -862,8 +905,7 @@ def all_root_specs(development=False):
"""
specs = [clingo_root_spec(), gnupg_root_spec(), patchelf_root_spec()]
if development:
specs += [isort_root_spec(), mypy_root_spec(),
black_root_spec(), flake8_root_spec()]
specs += [isort_root_spec(), mypy_root_spec(), black_root_spec(), flake8_root_spec()]
return specs
@@ -871,8 +913,8 @@ def _missing(name, purpose, system_only=True):
"""Message to be printed if an executable is not found"""
msg = '[{2}] MISSING "{0}": {1}'
if not system_only:
return msg.format(name, purpose, '@*y{{B}}')
return msg.format(name, purpose, '@*y{{-}}')
return msg.format(name, purpose, "@*y{{B}}")
return msg.format(name, purpose, "@*y{{-}}")
def _required_system_executable(exes, msg):
@@ -897,82 +939,84 @@ def _required_executable(exes, query_spec, msg):
"""Search for an executable in the system path or in the bootstrap store."""
if isinstance(exes, six.string_types):
exes = (exes,)
if (spack.util.executable.which_string(*exes) or
_executables_in_store(exes, query_spec)):
if spack.util.executable.which_string(*exes) or _executables_in_store(exes, query_spec):
return True, None
return False, msg
def _core_requirements():
_core_system_exes = {
'make': _missing('make', 'required to build software from sources'),
'patch': _missing('patch', 'required to patch source code before building'),
'bash': _missing('bash', 'required for Spack compiler wrapper'),
'tar': _missing('tar', 'required to manage code archives'),
'gzip': _missing('gzip', 'required to compress/decompress code archives'),
'unzip': _missing('unzip', 'required to compress/decompress code archives'),
'bzip2': _missing('bzip2', 'required to compress/decompress code archives'),
'git': _missing('git', 'required to fetch/manage git repositories')
"make": _missing("make", "required to build software from sources"),
"patch": _missing("patch", "required to patch source code before building"),
"bash": _missing("bash", "required for Spack compiler wrapper"),
"tar": _missing("tar", "required to manage code archives"),
"gzip": _missing("gzip", "required to compress/decompress code archives"),
"unzip": _missing("unzip", "required to compress/decompress code archives"),
"bzip2": _missing("bzip2", "required to compress/decompress code archives"),
"git": _missing("git", "required to fetch/manage git repositories"),
}
if platform.system().lower() == 'linux':
_core_system_exes['xz'] = _missing(
'xz', 'required to compress/decompress code archives'
)
if platform.system().lower() == "linux":
_core_system_exes["xz"] = _missing("xz", "required to compress/decompress code archives")
# Executables that are not bootstrapped yet
result = [_required_system_executable(exe, msg)
for exe, msg in _core_system_exes.items()]
result = [_required_system_executable(exe, msg) for exe, msg in _core_system_exes.items()]
# Python modules
result.append(_required_python_module(
'clingo', clingo_root_spec(),
_missing('clingo', 'required to concretize specs', False)
))
result.append(
_required_python_module(
"clingo", clingo_root_spec(), _missing("clingo", "required to concretize specs", False)
)
)
return result
def _buildcache_requirements():
_buildcache_exes = {
'file': _missing('file', 'required to analyze files for buildcaches'),
('gpg2', 'gpg'): _missing('gpg2', 'required to sign/verify buildcaches', False)
"file": _missing("file", "required to analyze files for buildcaches"),
("gpg2", "gpg"): _missing("gpg2", "required to sign/verify buildcaches", False),
}
if platform.system().lower() == 'darwin':
_buildcache_exes['otool'] = _missing('otool', 'required to relocate binaries')
if platform.system().lower() == "darwin":
_buildcache_exes["otool"] = _missing("otool", "required to relocate binaries")
# Executables that are not bootstrapped yet
result = [_required_system_executable(exe, msg)
for exe, msg in _buildcache_exes.items()]
result = [_required_system_executable(exe, msg) for exe, msg in _buildcache_exes.items()]
if platform.system().lower() == 'linux':
result.append(_required_executable(
'patchelf', patchelf_root_spec(),
_missing('patchelf', 'required to relocate binaries', False)
))
if platform.system().lower() == "linux":
result.append(
_required_executable(
"patchelf",
patchelf_root_spec(),
_missing("patchelf", "required to relocate binaries", False),
)
)
return result
def _optional_requirements():
_optional_exes = {
'zstd': _missing('zstd', 'required to compress/decompress code archives'),
'svn': _missing('svn', 'required to manage subversion repositories'),
'hg': _missing('hg', 'required to manage mercurial repositories')
"zstd": _missing("zstd", "required to compress/decompress code archives"),
"svn": _missing("svn", "required to manage subversion repositories"),
"hg": _missing("hg", "required to manage mercurial repositories"),
}
# Executables that are not bootstrapped yet
result = [_required_system_executable(exe, msg)
for exe, msg in _optional_exes.items()]
result = [_required_system_executable(exe, msg) for exe, msg in _optional_exes.items()]
return result
def _development_requirements():
return [
_required_executable('isort', isort_root_spec(),
_missing('isort', 'required for style checks', False)),
_required_executable('mypy', mypy_root_spec(),
_missing('mypy', 'required for style checks', False)),
_required_executable('flake8', flake8_root_spec(),
_missing('flake8', 'required for style checks', False)),
_required_executable('black', black_root_spec(),
_missing('black', 'required for code formatting', False))
_required_executable(
"isort", isort_root_spec(), _missing("isort", "required for style checks", False)
),
_required_executable(
"mypy", mypy_root_spec(), _missing("mypy", "required for style checks", False)
),
_required_executable(
"flake8", flake8_root_spec(), _missing("flake8", "required for style checks", False)
),
_required_executable(
"black", black_root_spec(), _missing("black", "required for code formatting", False)
),
]
@@ -984,14 +1028,14 @@ def status_message(section):
Args:
section (str): either 'core' or 'buildcache' or 'optional' or 'develop'
"""
pass_token, fail_token = '@*g{[PASS]}', '@*r{[FAIL]}'
pass_token, fail_token = "@*g{[PASS]}", "@*r{[FAIL]}"
# Contain the header of the section and a list of requirements
spack_sections = {
'core': ("{0} @*{{Core Functionalities}}", _core_requirements),
'buildcache': ("{0} @*{{Binary packages}}", _buildcache_requirements),
'optional': ("{0} @*{{Optional Features}}", _optional_requirements),
'develop': ("{0} @*{{Development Dependencies}}", _development_requirements)
"core": ("{0} @*{{Core Functionalities}}", _core_requirements),
"buildcache": ("{0} @*{{Binary packages}}", _buildcache_requirements),
"optional": ("{0} @*{{Optional Features}}", _optional_requirements),
"develop": ("{0} @*{{Development Dependencies}}", _development_requirements),
}
msg, required_software = spack_sections[section]
@@ -1001,7 +1045,7 @@ def status_message(section):
if not found:
missing_software = True
msg += "\n " + err_msg
msg += '\n'
msg += "\n"
msg = msg.format(pass_token if not missing_software else fail_token)
return msg, missing_software
@@ -1013,12 +1057,12 @@ def bootstrapping_sources(scope=None):
scope (str or None): if a valid configuration scope is given, return the
list only from that scope
"""
source_configs = spack.config.get('bootstrap:sources', default=None, scope=scope)
source_configs = spack.config.get("bootstrap:sources", default=None, scope=scope)
source_configs = source_configs or []
list_of_sources = []
for entry in source_configs:
current = copy.copy(entry)
metadata_dir = spack.util.path.canonicalize_path(entry['metadata'])
metadata_dir = spack.util.path.canonicalize_path(entry["metadata"])
metadata_yaml = os.path.join(metadata_dir, METADATA_YAML_FILENAME)
with open(metadata_yaml) as f:
current.update(spack.util.spack_yaml.load(f))

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,7 @@
from spack.build_systems.autotools import AutotoolsPackage
from spack.directives import extends
from spack.package import ExtensionError
from spack.package_base import ExtensionError
from spack.util.executable import which
@@ -23,29 +23,32 @@
class AspellDictPackage(AutotoolsPackage):
"""Specialized class for building aspell dictionairies."""
extends('aspell')
extends("aspell")
def view_destination(self, view):
aspell_spec = self.spec['aspell']
aspell_spec = self.spec["aspell"]
if view.get_projection_for_spec(aspell_spec) != aspell_spec.prefix:
raise ExtensionError(
'aspell does not support non-global extensions')
raise ExtensionError("aspell does not support non-global extensions")
aspell = aspell_spec.command
return aspell('dump', 'config', 'dict-dir', output=str).strip()
return aspell("dump", "config", "dict-dir", output=str).strip()
def view_source(self):
return self.prefix.lib
def patch(self):
filter_file(r'^dictdir=.*$', 'dictdir=/lib', 'configure')
filter_file(r'^datadir=.*$', 'datadir=/lib', 'configure')
filter_file(r"^dictdir=.*$", "dictdir=/lib", "configure")
filter_file(r"^datadir=.*$", "datadir=/lib", "configure")
def configure(self, spec, prefix):
aspell = spec['aspell'].prefix.bin.aspell
prezip = spec['aspell'].prefix.bin.prezip
aspell = spec["aspell"].prefix.bin.aspell
prezip = spec["aspell"].prefix.bin.prezip
destdir = prefix
sh = which('sh')
sh('./configure', '--vars', "ASPELL={0}".format(aspell),
"PREZIP={0}".format(prezip),
"DESTDIR={0}".format(destdir))
sh = which("sh")
sh(
"./configure",
"--vars",
"ASPELL={0}".format(aspell),
"PREZIP={0}".format(prezip),
"DESTDIR={0}".format(destdir),
)

View File

@@ -16,7 +16,7 @@
from spack.build_environment import InstallError
from spack.directives import conflicts, depends_on
from spack.operating_systems.mac_os import macos_version
from spack.package import PackageBase, run_after, run_before
from spack.package_base import PackageBase, run_after, run_before
from spack.util.executable import Executable
from spack.version import Version
@@ -52,11 +52,12 @@ class AutotoolsPackage(PackageBase):
+-----------------------------------------------+--------------------+
"""
#: Phases of a GNU Autotools package
phases = ['autoreconf', 'configure', 'build', 'install']
phases = ["autoreconf", "configure", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'AutotoolsPackage'
build_system_class = "AutotoolsPackage"
@property
def patch_config_files(self):
@@ -71,9 +72,11 @@ def patch_config_files(self):
the directory containing the system ``config.guess`` and ``config.sub``
files.
"""
return (self.spec.satisfies('target=ppc64le:')
or self.spec.satisfies('target=aarch64:')
or self.spec.satisfies('target=riscv64:'))
return (
self.spec.satisfies("target=ppc64le:")
or self.spec.satisfies("target=aarch64:")
or self.spec.satisfies("target=riscv64:")
)
#: Whether or not to update ``libtool``
#: (currently only for Arm/Clang/Fujitsu/NVHPC compilers)
@@ -84,13 +87,13 @@ def patch_config_files(self):
build_targets = [] # type: List[str]
#: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.install`
#: phase
install_targets = ['install']
install_targets = ["install"]
#: Callback names for build-time test
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
#: Callback names for install-time test
install_time_test_callbacks = ['installcheck']
install_time_test_callbacks = ["installcheck"]
#: Set to true to force the autoreconf step even if configure is present
force_autoreconf = False
@@ -101,10 +104,10 @@ def patch_config_files(self):
#: after the installation. If True instead it installs them.
install_libtool_archives = False
depends_on('gnuconfig', type='build', when='target=ppc64le:')
depends_on('gnuconfig', type='build', when='target=aarch64:')
depends_on('gnuconfig', type='build', when='target=riscv64:')
conflicts('platform=windows')
depends_on("gnuconfig", type="build", when="target=ppc64le:")
depends_on("gnuconfig", type="build", when="target=aarch64:")
depends_on("gnuconfig", type="build", when="target=riscv64:")
conflicts("platform=windows")
@property
def _removed_la_files_log(self):
@@ -112,17 +115,17 @@ def _removed_la_files_log(self):
build_dir = self.build_directory
if not os.path.isabs(self.build_directory):
build_dir = os.path.join(self.stage.path, build_dir)
return os.path.join(build_dir, 'removed_la_files.txt')
return os.path.join(build_dir, "removed_la_files.txt")
@property
def archive_files(self):
"""Files to archive for packages based on autotools"""
files = [os.path.join(self.build_directory, 'config.log')]
files = [os.path.join(self.build_directory, "config.log")]
if not self.install_libtool_archives:
files.append(self._removed_la_files_log)
return files
@run_after('autoreconf')
@run_after("autoreconf")
def _do_patch_config_files(self):
"""Some packages ship with older config.guess/config.sub files and
need to have these updated when installed on a newer architecture.
@@ -136,20 +139,18 @@ def _do_patch_config_files(self):
# TODO: Expand this to select the 'config.sub'-compatible architecture
# for each platform (e.g. 'config.sub' doesn't accept 'power9le', but
# does accept 'ppc64le').
if self.spec.satisfies('target=ppc64le:'):
config_arch = 'ppc64le'
elif self.spec.satisfies('target=aarch64:'):
config_arch = 'aarch64'
elif self.spec.satisfies('target=riscv64:'):
config_arch = 'riscv64'
if self.spec.satisfies("target=ppc64le:"):
config_arch = "ppc64le"
elif self.spec.satisfies("target=aarch64:"):
config_arch = "aarch64"
elif self.spec.satisfies("target=riscv64:"):
config_arch = "riscv64"
else:
config_arch = 'local'
config_arch = "local"
def runs_ok(script_abs_path):
# Construct the list of arguments for the call
additional_args = {
'config.sub': [config_arch]
}
additional_args = {"config.sub": [config_arch]}
script_name = os.path.basename(script_abs_path)
args = [script_abs_path] + additional_args.get(script_name, [])
@@ -162,7 +163,7 @@ def runs_ok(script_abs_path):
return True
# Get the list of files that needs to be patched
to_be_patched = fs.find(self.stage.path, files=['config.sub', 'config.guess'])
to_be_patched = fs.find(self.stage.path, files=["config.sub", "config.guess"])
to_be_patched = [f for f in to_be_patched if not runs_ok(f)]
# If there are no files to be patched, return early
@@ -171,33 +172,37 @@ def runs_ok(script_abs_path):
# Otherwise, require `gnuconfig` to be a build dependency
self._require_build_deps(
pkgs=['gnuconfig'],
spec=self.spec,
err="Cannot patch config files")
pkgs=["gnuconfig"], spec=self.spec, err="Cannot patch config files"
)
# Get the config files we need to patch (config.sub / config.guess).
to_be_found = list(set(os.path.basename(f) for f in to_be_patched))
gnuconfig = self.spec['gnuconfig']
gnuconfig = self.spec["gnuconfig"]
gnuconfig_dir = gnuconfig.prefix
# An external gnuconfig may not not have a prefix.
if gnuconfig_dir is None:
raise InstallError("Spack could not find substitutes for GNU config "
"files because no prefix is available for the "
"`gnuconfig` package. Make sure you set a prefix "
"path instead of modules for external `gnuconfig`.")
raise InstallError(
"Spack could not find substitutes for GNU config "
"files because no prefix is available for the "
"`gnuconfig` package. Make sure you set a prefix "
"path instead of modules for external `gnuconfig`."
)
candidates = fs.find(gnuconfig_dir, files=to_be_found, recursive=False)
# For external packages the user may have specified an incorrect prefix.
# otherwise the installation is just corrupt.
if not candidates:
msg = ("Spack could not find `config.guess` and `config.sub` "
"files in the `gnuconfig` prefix `{0}`. This means the "
"`gnuconfig` package is broken").format(gnuconfig_dir)
msg = (
"Spack could not find `config.guess` and `config.sub` "
"files in the `gnuconfig` prefix `{0}`. This means the "
"`gnuconfig` package is broken"
).format(gnuconfig_dir)
if gnuconfig.external:
msg += (" or the `gnuconfig` package prefix is misconfigured as"
" an external package")
msg += (
" or the `gnuconfig` package prefix is misconfigured as" " an external package"
)
raise InstallError(msg)
# Filter working substitutes
@@ -223,7 +228,7 @@ def runs_ok(script_abs_path):
and set the prefix to the directory containing the `config.guess` and
`config.sub` files.
"""
raise InstallError(msg.format(', '.join(to_be_found), self.name))
raise InstallError(msg.format(", ".join(to_be_found), self.name))
# Copy the good files over the bad ones
for abs_path in to_be_patched:
@@ -233,7 +238,19 @@ def runs_ok(script_abs_path):
fs.copy(substitutes[name], abs_path)
os.chmod(abs_path, mode)
@run_before('configure')
@run_before("configure")
def _patch_usr_bin_file(self):
"""On NixOS file is not available in /usr/bin/file. Patch configure
scripts to use file from path."""
if self.spec.os.startswith("nixos"):
x = fs.FileFilter(
*filter(fs.is_exe, fs.find(self.build_directory, "configure", recursive=True))
)
with fs.keep_modification_time(*x.filenames):
x.filter(regex="/usr/bin/file", repl="file", string=True)
@run_before("configure")
def _set_autotools_environment_variables(self):
"""Many autotools builds use a version of mknod.m4 that fails when
running as root unless FORCE_UNSAFE_CONFIGURE is set to 1.
@@ -248,39 +265,184 @@ def _set_autotools_environment_variables(self):
"""
os.environ["FORCE_UNSAFE_CONFIGURE"] = "1"
@run_after('configure')
def _do_patch_libtool(self):
"""If configure generates a "libtool" script that does not correctly
detect the compiler (and patch_libtool is set), patch in the correct
flags for the Arm, Clang/Flang, Fujitsu and NVHPC compilers."""
@run_before("configure")
def _do_patch_libtool_configure(self):
"""Patch bugs that propagate from libtool macros into "configure" and
further into "libtool". Note that patches that can be fixed by patching
"libtool" directly should be implemented in the _do_patch_libtool method
below."""
# Exit early if we are required not to patch libtool
# Exit early if we are required not to patch libtool-related problems:
if not self.patch_libtool:
return
for libtool_path in fs.find(
self.build_directory, 'libtool', recursive=True):
self._patch_libtool(libtool_path)
x = fs.FileFilter(
*filter(fs.is_exe, fs.find(self.build_directory, "configure", recursive=True))
)
def _patch_libtool(self, libtool_path):
if (
self.spec.satisfies('%arm') or
self.spec.satisfies('%clang') or
self.spec.satisfies('%fj') or
self.spec.satisfies('%nvhpc')
):
fs.filter_file('wl=""\n', 'wl="-Wl,"\n', libtool_path)
fs.filter_file('pic_flag=""\n',
'pic_flag="{0}"\n'
.format(self.compiler.cc_pic_flag),
libtool_path)
if self.spec.satisfies('%fj'):
fs.filter_file('-nostdlib', '', libtool_path)
rehead = r'/\S*/'
objfile = ['fjhpctag.o', 'fjcrt0.o', 'fjlang08.o', 'fjomp.o',
'crti.o', 'crtbeginS.o', 'crtendS.o']
for o in objfile:
fs.filter_file(rehead + o, '', libtool_path)
# There are distributed automatically generated files that depend on the configure script
# and require additional tools for rebuilding.
# See https://github.com/spack/spack/pull/30768#issuecomment-1219329860
with fs.keep_modification_time(*x.filenames):
# Fix parsing of compiler output when collecting predeps and postdeps
# https://lists.gnu.org/archive/html/bug-libtool/2016-03/msg00003.html
x.filter(regex=r'^(\s*if test x-L = )("\$p" \|\|\s*)$', repl=r"\1x\2")
x.filter(
regex=r'^(\s*test x-R = )("\$p")(; then\s*)$', repl=r'\1x\2 || test x-l = x"$p"\3'
)
# Support Libtool 2.4.2 and older:
x.filter(regex=r'^(\s*test \$p = "-R")(; then\s*)$', repl=r'\1 || test x-l = x"$p"\2')
@run_after("configure")
def _do_patch_libtool(self):
"""If configure generates a "libtool" script that does not correctly
detect the compiler (and patch_libtool is set), patch in the correct
values for libtool variables.
The generated libtool script supports mixed compilers through tags:
``libtool --tag=CC/CXX/FC/...```. For each tag there is a block with variables,
which defines what flags to pass to the compiler. The default variables (which
are used by the default tag CC) are set in a block enclosed by
``# ### {BEGIN,END} LIBTOOL CONFIG``. For non-default tags, there are
corresponding blocks ``# ### {BEGIN,END} LIBTOOL TAG CONFIG: {CXX,FC,F77}`` at
the end of the file (after the exit command). libtool evals these blocks.
Whenever we need to update variables that the configure script got wrong
(for example cause it did not recognize the compiler), we should properly scope
those changes to these tags/blocks so they only apply to the compiler we care
about. Below, ``start_at`` and ``stop_at`` are used for that."""
# Exit early if we are required not to patch libtool:
if not self.patch_libtool:
return
x = fs.FileFilter(
*filter(fs.is_exe, fs.find(self.build_directory, "libtool", recursive=True))
)
# Exit early if there is nothing to patch:
if not x.filenames:
return
markers = {"cc": "LIBTOOL CONFIG"}
for tag in ["cxx", "fc", "f77"]:
markers[tag] = "LIBTOOL TAG CONFIG: {0}".format(tag.upper())
# Replace empty linker flag prefixes:
if self.compiler.name == "nag":
# Nag is mixed with gcc and g++, which are recognized correctly.
# Therefore, we change only Fortran values:
for tag in ["fc", "f77"]:
marker = markers[tag]
x.filter(
regex='^wl=""$',
repl='wl="{0}"'.format(self.compiler.linker_arg),
start_at="# ### BEGIN {0}".format(marker),
stop_at="# ### END {0}".format(marker),
)
else:
x.filter(regex='^wl=""$', repl='wl="{0}"'.format(self.compiler.linker_arg))
# Replace empty PIC flag values:
for cc, marker in markers.items():
x.filter(
regex='^pic_flag=""$',
repl='pic_flag="{0}"'.format(getattr(self.compiler, "{0}_pic_flag".format(cc))),
start_at="# ### BEGIN {0}".format(marker),
stop_at="# ### END {0}".format(marker),
)
# Other compiler-specific patches:
if self.compiler.name == "fj":
x.filter(regex="-nostdlib", repl="", string=True)
rehead = r"/\S*/"
for o in [
"fjhpctag.o",
"fjcrt0.o",
"fjlang08.o",
"fjomp.o",
"crti.o",
"crtbeginS.o",
"crtendS.o",
]:
x.filter(regex=(rehead + o), repl="", string=True)
elif self.compiler.name == "dpcpp":
# Hack to filter out spurious predep_objects when building with Intel dpcpp
# (see https://github.com/spack/spack/issues/32863):
x.filter(regex=r"^(predep_objects=.*)/tmp/conftest-[0-9A-Fa-f]+\.o", repl=r"\1")
x.filter(regex=r"^(predep_objects=.*)/tmp/a-[0-9A-Fa-f]+\.o", repl=r"\1")
elif self.compiler.name == "nag":
for tag in ["fc", "f77"]:
marker = markers[tag]
start_at = "# ### BEGIN {0}".format(marker)
stop_at = "# ### END {0}".format(marker)
# Libtool 2.4.2 does not know the shared flag:
x.filter(
regex=r"\$CC -shared",
repl=r"\$CC -Wl,-shared",
string=True,
start_at=start_at,
stop_at=stop_at,
)
# Libtool does not know how to inject whole archives
# (e.g. https://github.com/pmodels/mpich/issues/4358):
x.filter(
regex=r'^whole_archive_flag_spec="\\\$({?wl}?)--whole-archive'
r'\\\$convenience \\\$\1--no-whole-archive"$',
repl=r'whole_archive_flag_spec="\$\1--whole-archive'
r"\`for conv in \$convenience\\\\\"\\\\\"; do test -n \\\\\"\$conv\\\\\" && "
r"new_convenience=\\\\\"\$new_convenience,\$conv\\\\\"; done; "
r'func_echo_all \\\\\"\$new_convenience\\\\\"\` \$\1--no-whole-archive"',
start_at=start_at,
stop_at=stop_at,
)
# The compiler requires special treatment in certain cases:
x.filter(
regex=r"^(with_gcc=.*)$",
repl="\\1\n\n# Is the compiler the NAG compiler?\nwith_nag=yes",
start_at=start_at,
stop_at=stop_at,
)
# Disable the special treatment for gcc and g++:
for tag in ["cc", "cxx"]:
marker = markers[tag]
x.filter(
regex=r"^(with_gcc=.*)$",
repl="\\1\n\n# Is the compiler the NAG compiler?\nwith_nag=no",
start_at="# ### BEGIN {0}".format(marker),
stop_at="# ### END {0}".format(marker),
)
# The compiler does not support -pthread flag, which might come
# from the inherited linker flags. We prepend the flag with -Wl,
# before using it:
x.filter(
regex=r"^(\s*)(for tmp_inherited_linker_flag in \$tmp_inherited_linker_flags; "
r"do\s*)$",
repl='\\1if test "x$with_nag" = xyes; then\n'
"\\1 revert_nag_pthread=$tmp_inherited_linker_flags\n"
"\\1 tmp_inherited_linker_flags="
"`$ECHO \"$tmp_inherited_linker_flags\" | $SED 's% -pthread% -Wl,-pthread%g'`\n"
'\\1 test x"$revert_nag_pthread" = x"$tmp_inherited_linker_flags" && '
"revert_nag_pthread=no || revert_nag_pthread=yes\n"
"\\1fi\n\\1\\2",
start_at='if test -n "$inherited_linker_flags"; then',
stop_at='case " $new_inherited_linker_flags " in',
)
# And revert the modification to produce '*.la' files that can be
# used with gcc (normally, we do not install the files but they can
# still be used during the building):
start_at = '# Time to change all our "foo.ltframework" stuff back to "-framework foo"'
stop_at = "# installed libraries to the beginning of the library search list"
x.filter(
regex=r"(\s*)(# move library search paths that coincide with paths to not "
r"yet\s*)$",
repl='\\1test x"$with_nag$revert_nag_pthread" = xyesyes &&\n'
'\\1 new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | '
"$SED 's% -Wl,-pthread% -pthread%g'`\n\\1\\2",
start_at=start_at,
stop_at=stop_at,
)
@property
def configure_directory(self):
@@ -293,9 +455,7 @@ def configure_directory(self):
@property
def configure_abs_path(self):
# Absolute path to configure
configure_abs_path = os.path.join(
os.path.abspath(self.configure_directory), 'configure'
)
configure_abs_path = os.path.join(os.path.abspath(self.configure_directory), "configure")
return configure_abs_path
@property
@@ -303,7 +463,7 @@ def build_directory(self):
"""Override to provide another place to build the package"""
return self.configure_directory
@run_before('autoreconf')
@run_before("autoreconf")
def delete_configure_to_force_update(self):
if self.force_autoreconf:
force_remove(self.configure_abs_path)
@@ -312,20 +472,20 @@ def _require_build_deps(self, pkgs, spec, err):
"""Require `pkgs` to be direct build dependencies of `spec`. Raises a
RuntimeError with a helpful error messages when any dep is missing."""
build_deps = [d.name for d in spec.dependencies(deptype='build')]
build_deps = [d.name for d in spec.dependencies(deptype="build")]
missing_deps = [x for x in pkgs if x not in build_deps]
if not missing_deps:
return
# Raise an exception on missing deps.
msg = ("{0}: missing dependencies: {1}.\n\nPlease add "
"the following lines to the package:\n\n"
.format(err, ", ".join(missing_deps)))
msg = (
"{0}: missing dependencies: {1}.\n\nPlease add "
"the following lines to the package:\n\n".format(err, ", ".join(missing_deps))
)
for dep in missing_deps:
msg += (" depends_on('{0}', type='build', when='@{1}')\n"
.format(dep, spec.version))
msg += " depends_on('{0}', type='build', when='@{1}')\n".format(dep, spec.version)
msg += "\nUpdate the version (when='@{0}') as needed.".format(spec.version)
raise RuntimeError(msg)
@@ -339,34 +499,32 @@ def autoreconf(self, spec, prefix):
# Else try to regenerate it, which reuquires a few build dependencies
self._require_build_deps(
pkgs=['autoconf', 'automake', 'libtool'],
spec=spec,
err="Cannot generate configure")
pkgs=["autoconf", "automake", "libtool"], spec=spec, err="Cannot generate configure"
)
tty.msg('Configure script not found: trying to generate it')
tty.warn('*********************************************************')
tty.warn('* If the default procedure fails, consider implementing *')
tty.warn('* a custom AUTORECONF phase in the package *')
tty.warn('*********************************************************')
tty.msg("Configure script not found: trying to generate it")
tty.warn("*********************************************************")
tty.warn("* If the default procedure fails, consider implementing *")
tty.warn("* a custom AUTORECONF phase in the package *")
tty.warn("*********************************************************")
with working_dir(self.configure_directory):
m = inspect.getmodule(self)
# This line is what is needed most of the time
# --install, --verbose, --force
autoreconf_args = ['-ivf']
autoreconf_args = ["-ivf"]
autoreconf_args += self.autoreconf_search_path_args
autoreconf_args += self.autoreconf_extra_args
m.autoreconf(*autoreconf_args)
@property
def autoreconf_search_path_args(self):
"""Arguments to autoreconf to modify the search paths"""
search_path_args = []
for dep in self.spec.dependencies(deptype='build'):
if os.path.exists(dep.prefix.share.aclocal):
search_path_args.extend(['-I', dep.prefix.share.aclocal])
return search_path_args
"""Search path includes for autoreconf. Add an -I flag for all `aclocal` dirs
of build deps, skips the default path of automake, move external include
flags to the back, since they might pull in unrelated m4 files shadowing
spack dependencies."""
return _autoreconf_search_path_args(self.spec)
@run_after('autoreconf')
@run_after("autoreconf")
def set_configure_or_die(self):
"""Checks the presence of a ``configure`` file after the
autoreconf phase. If it is found sets a module attribute
@@ -377,13 +535,11 @@ def set_configure_or_die(self):
"""
# Check if a configure script is there. If not raise a RuntimeError.
if not os.path.exists(self.configure_abs_path):
msg = 'configure script not found in {0}'
msg = "configure script not found in {0}"
raise RuntimeError(msg.format(self.configure_directory))
# Monkey-patch the configure script in the corresponding module
inspect.getmodule(self).configure = Executable(
self.configure_abs_path
)
inspect.getmodule(self).configure = Executable(self.configure_abs_path)
def configure_args(self):
"""Produces a list containing all the arguments that must be passed to
@@ -397,16 +553,16 @@ def flags_to_build_system_args(self, flags):
"""Produces a list of all command line arguments to pass specified
compiler flags to configure."""
# Has to be dynamic attribute due to caching.
setattr(self, 'configure_flag_args', [])
setattr(self, "configure_flag_args", [])
for flag, values in flags.items():
if values:
values_str = '{0}={1}'.format(flag.upper(), ' '.join(values))
values_str = "{0}={1}".format(flag.upper(), " ".join(values))
self.configure_flag_args.append(values_str)
# Spack's fflags are meant for both F77 and FC, therefore we
# additionaly set FCFLAGS if required.
values = flags.get('fflags', None)
values = flags.get("fflags", None)
if values:
values_str = 'FCFLAGS={0}'.format(' '.join(values))
values_str = "FCFLAGS={0}".format(" ".join(values))
self.configure_flag_args.append(values_str)
def configure(self, spec, prefix):
@@ -414,26 +570,25 @@ def configure(self, spec, prefix):
:meth:`~spack.build_systems.autotools.AutotoolsPackage.configure_args`
and an appropriately set prefix.
"""
options = getattr(self, 'configure_flag_args', [])
options += ['--prefix={0}'.format(prefix)]
options = getattr(self, "configure_flag_args", [])
options += ["--prefix={0}".format(prefix)]
options += self.configure_args()
with working_dir(self.build_directory, create=True):
inspect.getmodule(self).configure(*options)
def setup_build_environment(self, env):
if (self.spec.platform == 'darwin'
and macos_version() >= Version('11')):
if self.spec.platform == "darwin" and macos_version() >= Version("11"):
# Many configure files rely on matching '10.*' for macOS version
# detection and fail to add flags if it shows as version 11.
env.set('MACOSX_DEPLOYMENT_TARGET', '10.16')
env.set("MACOSX_DEPLOYMENT_TARGET", "10.16")
def build(self, spec, prefix):
"""Makes the build targets specified by
:py:attr:``~.AutotoolsPackage.build_targets``
"""
# See https://autotools.io/automake/silent.html
params = ['V=1']
params = ["V=1"]
params += self.build_targets
with working_dir(self.build_directory):
inspect.getmodule(self).make(*params)
@@ -445,23 +600,18 @@ def install(self, spec, prefix):
with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.install_targets)
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
def check(self):
"""Searches the Makefile for targets ``test`` and ``check``
and runs them if found.
"""
with working_dir(self.build_directory):
self._if_make_target_execute('test')
self._if_make_target_execute('check')
self._if_make_target_execute("test")
self._if_make_target_execute("check")
def _activate_or_not(
self,
name,
activation_word,
deactivation_word,
activation_value=None,
variant=None
self, name, activation_word, deactivation_word, activation_value=None, variant=None
):
"""This function contains the current implementation details of
:meth:`~spack.build_systems.autotools.AutotoolsPackage.with_or_without` and
@@ -524,7 +674,7 @@ def _activate_or_not(
spec = self.spec
args = []
if activation_value == 'prefix':
if activation_value == "prefix":
activation_value = lambda x: spec[x].prefix
variant = variant or name
@@ -545,45 +695,41 @@ def _activate_or_not(
# BoolValuedVariant carry information about a single option.
# Nonetheless, for uniformity of treatment we'll package them
# in an iterable of one element.
condition = '+{name}'.format(name=variant)
condition = "+{name}".format(name=variant)
options = [(name, condition in spec)]
else:
condition = '{variant}={value}'
condition = "{variant}={value}"
# "feature_values" is used to track values which correspond to
# features which can be enabled or disabled as understood by the
# package's build system. It excludes values which have special
# meanings and do not correspond to features (e.g. "none")
feature_values = getattr(
variant_desc.values, 'feature_values', None
) or variant_desc.values
feature_values = (
getattr(variant_desc.values, "feature_values", None) or variant_desc.values
)
options = [
(value,
condition.format(variant=variant,
value=value) in spec)
(value, condition.format(variant=variant, value=value) in spec)
for value in feature_values
]
# For each allowed value in the list of values
for option_value, activated in options:
# Search for an override in the package for this value
override_name = '{0}_or_{1}_{2}'.format(
override_name = "{0}_or_{1}_{2}".format(
activation_word, deactivation_word, option_value
)
line_generator = getattr(self, override_name, None)
# If not available use a sensible default
if line_generator is None:
def _default_generator(is_activated):
if is_activated:
line = '--{0}-{1}'.format(
activation_word, option_value
)
if activation_value is not None and activation_value(option_value): # NOQA=ignore=E501
line += '={0}'.format(
activation_value(option_value)
)
line = "--{0}-{1}".format(activation_word, option_value)
if activation_value is not None and activation_value(option_value):
line += "={0}".format(activation_value(option_value))
return line
return '--{0}-{1}'.format(deactivation_word, option_value)
return "--{0}-{1}".format(deactivation_word, option_value)
line_generator = _default_generator
args.append(line_generator(activated))
return args
@@ -614,8 +760,7 @@ def with_or_without(self, name, activation_value=None, variant=None):
Returns:
list of arguments to configure
"""
return self._activate_or_not(name, 'with', 'without', activation_value,
variant)
return self._activate_or_not(name, "with", "without", activation_value, variant)
def enable_or_disable(self, name, activation_value=None, variant=None):
"""Same as
@@ -634,23 +779,21 @@ def enable_or_disable(self, name, activation_value=None, variant=None):
Returns:
list of arguments to configure
"""
return self._activate_or_not(
name, 'enable', 'disable', activation_value, variant
)
return self._activate_or_not(name, "enable", "disable", activation_value, variant)
run_after('install')(PackageBase._run_default_install_time_test_callbacks)
run_after("install")(PackageBase._run_default_install_time_test_callbacks)
def installcheck(self):
"""Searches the Makefile for an ``installcheck`` target
and runs it if found.
"""
with working_dir(self.build_directory):
self._if_make_target_execute('installcheck')
self._if_make_target_execute("installcheck")
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)
@run_after('install')
@run_after("install")
def remove_libtool_archives(self):
"""Remove all .la files in prefix sub-folders if the package sets
``install_libtool_archives`` to be False.
@@ -660,11 +803,40 @@ def remove_libtool_archives(self):
return
# Remove the files and create a log of what was removed
libtool_files = fs.find(str(self.prefix), '*.la', recursive=True)
libtool_files = fs.find(str(self.prefix), "*.la", recursive=True)
with fs.safe_remove(*libtool_files):
fs.mkdirp(os.path.dirname(self._removed_la_files_log))
with open(self._removed_la_files_log, mode='w') as f:
f.write('\n'.join(libtool_files))
with open(self._removed_la_files_log, mode="w") as f:
f.write("\n".join(libtool_files))
# On macOS, force rpaths for shared library IDs and remove duplicate rpaths
run_after('install')(PackageBase.apply_macos_rpath_fixups)
run_after("install")(PackageBase.apply_macos_rpath_fixups)
def _autoreconf_search_path_args(spec):
dirs_seen = set()
flags_spack, flags_external = [], []
# We don't want to add an include flag for automake's default search path.
for automake in spec.dependencies(name="automake", deptype="build"):
try:
s = os.stat(automake.prefix.share.aclocal)
if stat.S_ISDIR(s.st_mode):
dirs_seen.add((s.st_ino, s.st_dev))
except OSError:
pass
for dep in spec.dependencies(deptype="build"):
path = dep.prefix.share.aclocal
# Skip non-existing aclocal paths
try:
s = os.stat(path)
except OSError:
continue
# Skip things seen before, as well as non-dirs.
if (s.st_ino, s.st_dev) in dirs_seen or not stat.S_ISDIR(s.st_mode):
continue
dirs_seen.add((s.st_ino, s.st_dev))
flags = flags_external if dep.external else flags_spack
flags.extend(["-I", path])
return flags_spack + flags_external

View File

@@ -8,7 +8,7 @@
from llnl.util.filesystem import install, mkdirp
from spack.build_systems.cmake import CMakePackage
from spack.package import run_after
from spack.package_base import run_after
def cmake_cache_path(name, value, comment=""):
@@ -36,7 +36,7 @@ class CachedCMakePackage(CMakePackage):
sidestep certain parsing bugs in extremely long ``cmake`` commands, and to
avoid system limits on the length of the command line."""
phases = ['initconfig', 'cmake', 'build', 'install']
phases = ["initconfig", "cmake", "build", "install"]
@property
def cache_name(self):
@@ -52,7 +52,7 @@ def cache_path(self):
return os.path.join(self.stage.source_path, self.cache_name)
def flag_handler(self, name, flags):
if name in ('cflags', 'cxxflags', 'cppflags', 'fflags'):
if name in ("cflags", "cxxflags", "cppflags", "fflags"):
return (None, None, None) # handled in the cmake cache
return (flags, None, None)
@@ -64,10 +64,8 @@ def initconfig_compiler_entries(self):
# Fortran compiler is optional
if "FC" in os.environ:
spack_fc_entry = cmake_cache_path(
"CMAKE_Fortran_COMPILER", os.environ['FC'])
system_fc_entry = cmake_cache_path(
"CMAKE_Fortran_COMPILER", self.compiler.fc)
spack_fc_entry = cmake_cache_path("CMAKE_Fortran_COMPILER", os.environ["FC"])
system_fc_entry = cmake_cache_path("CMAKE_Fortran_COMPILER", self.compiler.fc)
else:
spack_fc_entry = "# No Fortran compiler defined in spec"
system_fc_entry = "# No Fortran compiler defined in spec"
@@ -78,42 +76,59 @@ def initconfig_compiler_entries(self):
"#------------------{0}".format("-" * 60),
"# Compiler Spec: {0}".format(spec.compiler),
"#------------------{0}".format("-" * 60),
'if(DEFINED ENV{SPACK_CC})\n',
' ' + cmake_cache_path(
"CMAKE_C_COMPILER", os.environ['CC']),
' ' + cmake_cache_path(
"CMAKE_CXX_COMPILER", os.environ['CXX']),
' ' + spack_fc_entry,
'else()\n',
' ' + cmake_cache_path(
"CMAKE_C_COMPILER", self.compiler.cc),
' ' + cmake_cache_path(
"CMAKE_CXX_COMPILER", self.compiler.cxx),
' ' + system_fc_entry,
'endif()\n'
"if(DEFINED ENV{SPACK_CC})\n",
" " + cmake_cache_path("CMAKE_C_COMPILER", os.environ["CC"]),
" " + cmake_cache_path("CMAKE_CXX_COMPILER", os.environ["CXX"]),
" " + spack_fc_entry,
"else()\n",
" " + cmake_cache_path("CMAKE_C_COMPILER", self.compiler.cc),
" " + cmake_cache_path("CMAKE_CXX_COMPILER", self.compiler.cxx),
" " + system_fc_entry,
"endif()\n",
]
flags = spec.compiler_flags
# use global spack compiler flags
cppflags = ' '.join(spec.compiler_flags['cppflags'])
cppflags = " ".join(flags["cppflags"])
if cppflags:
# avoid always ending up with ' ' with no flags defined
cppflags += ' '
cflags = cppflags + ' '.join(spec.compiler_flags['cflags'])
# avoid always ending up with " " with no flags defined
cppflags += " "
cflags = cppflags + " ".join(flags["cflags"])
if cflags:
entries.append(cmake_cache_string("CMAKE_C_FLAGS", cflags))
cxxflags = cppflags + ' '.join(spec.compiler_flags['cxxflags'])
cxxflags = cppflags + " ".join(flags["cxxflags"])
if cxxflags:
entries.append(cmake_cache_string("CMAKE_CXX_FLAGS", cxxflags))
fflags = ' '.join(spec.compiler_flags['fflags'])
fflags = " ".join(flags["fflags"])
if fflags:
entries.append(cmake_cache_string("CMAKE_Fortran_FLAGS", fflags))
# Cmake has different linker arguments for different build types.
# We specify for each of them.
if flags["ldflags"]:
ld_flags = " ".join(flags["ldflags"])
ld_format_string = "CMAKE_{0}_LINKER_FLAGS"
# CMake has separate linker arguments for types of builds.
for ld_type in ["EXE", "MODULE", "SHARED", "STATIC"]:
ld_string = ld_format_string.format(ld_type)
entries.append(cmake_cache_string(ld_string, ld_flags))
# CMake has libs options separated by language. Apply ours to each.
if flags["ldlibs"]:
libs_flags = " ".join(flags["ldlibs"])
libs_format_string = "CMAKE_{0}_STANDARD_LIBRARIES"
langs = ["C", "CXX", "Fortran"]
for lang in langs:
libs_string = libs_format_string.format(lang)
entries.append(cmake_cache_string(libs_string, libs_flags))
return entries
def initconfig_mpi_entries(self):
spec = self.spec
if not spec.satisfies('^mpi'):
if not spec.satisfies("^mpi"):
return []
entries = [
@@ -122,32 +137,27 @@ def initconfig_mpi_entries(self):
"#------------------{0}\n".format("-" * 60),
]
entries.append(cmake_cache_path("MPI_C_COMPILER",
spec['mpi'].mpicc))
entries.append(cmake_cache_path("MPI_CXX_COMPILER",
spec['mpi'].mpicxx))
entries.append(cmake_cache_path("MPI_Fortran_COMPILER",
spec['mpi'].mpifc))
entries.append(cmake_cache_path("MPI_C_COMPILER", spec["mpi"].mpicc))
entries.append(cmake_cache_path("MPI_CXX_COMPILER", spec["mpi"].mpicxx))
entries.append(cmake_cache_path("MPI_Fortran_COMPILER", spec["mpi"].mpifc))
# Check for slurm
using_slurm = False
slurm_checks = ['+slurm',
'schedulers=slurm',
'process_managers=slurm']
if any(spec['mpi'].satisfies(variant) for variant in slurm_checks):
slurm_checks = ["+slurm", "schedulers=slurm", "process_managers=slurm"]
if any(spec["mpi"].satisfies(variant) for variant in slurm_checks):
using_slurm = True
# Determine MPIEXEC
if using_slurm:
if spec['mpi'].external:
if spec["mpi"].external:
# Heuristic until we have dependents on externals
mpiexec = '/usr/bin/srun'
mpiexec = "/usr/bin/srun"
else:
mpiexec = os.path.join(spec['slurm'].prefix.bin, 'srun')
mpiexec = os.path.join(spec["slurm"].prefix.bin, "srun")
else:
mpiexec = os.path.join(spec['mpi'].prefix.bin, 'mpirun')
mpiexec = os.path.join(spec["mpi"].prefix.bin, "mpirun")
if not os.path.exists(mpiexec):
mpiexec = os.path.join(spec['mpi'].prefix.bin, 'mpiexec')
mpiexec = os.path.join(spec["mpi"].prefix.bin, "mpiexec")
if not os.path.exists(mpiexec):
msg = "Unable to determine MPIEXEC, %s tests may fail" % self.name
@@ -156,9 +166,8 @@ def initconfig_mpi_entries(self):
else:
# starting with cmake 3.10, FindMPI expects MPIEXEC_EXECUTABLE
# vs the older versions which expect MPIEXEC
if self.spec["cmake"].satisfies('@3.10:'):
entries.append(cmake_cache_path("MPIEXEC_EXECUTABLE",
mpiexec))
if self.spec["cmake"].satisfies("@3.10:"):
entries.append(cmake_cache_path("MPIEXEC_EXECUTABLE", mpiexec))
else:
entries.append(cmake_cache_path("MPIEXEC", mpiexec))
@@ -179,24 +188,22 @@ def initconfig_hardware_entries(self):
"#------------------{0}\n".format("-" * 60),
]
if spec.satisfies('^cuda'):
if spec.satisfies("^cuda"):
entries.append("#------------------{0}".format("-" * 30))
entries.append("# Cuda")
entries.append("#------------------{0}\n".format("-" * 30))
cudatoolkitdir = spec['cuda'].prefix
entries.append(cmake_cache_path("CUDA_TOOLKIT_ROOT_DIR",
cudatoolkitdir))
cudatoolkitdir = spec["cuda"].prefix
entries.append(cmake_cache_path("CUDA_TOOLKIT_ROOT_DIR", cudatoolkitdir))
cudacompiler = "${CUDA_TOOLKIT_ROOT_DIR}/bin/nvcc"
entries.append(cmake_cache_path("CMAKE_CUDA_COMPILER",
cudacompiler))
entries.append(cmake_cache_path("CMAKE_CUDA_COMPILER", cudacompiler))
if spec.satisfies('^mpi'):
entries.append(cmake_cache_path("CMAKE_CUDA_HOST_COMPILER",
"${MPI_CXX_COMPILER}"))
if spec.satisfies("^mpi"):
entries.append(cmake_cache_path("CMAKE_CUDA_HOST_COMPILER", "${MPI_CXX_COMPILER}"))
else:
entries.append(cmake_cache_path("CMAKE_CUDA_HOST_COMPILER",
"${CMAKE_CXX_COMPILER}"))
entries.append(
cmake_cache_path("CMAKE_CUDA_HOST_COMPILER", "${CMAKE_CXX_COMPILER}")
)
return entries
@@ -205,8 +212,7 @@ def std_initconfig_entries(self):
"#------------------{0}".format("-" * 60),
"# !!!! This is a generated file, edit at own risk !!!!",
"#------------------{0}".format("-" * 60),
"# CMake executable path: {0}".format(
self.spec['cmake'].command.path),
"# CMake executable path: {0}".format(self.spec["cmake"].command.path),
"#------------------{0}\n".format("-" * 60),
]
@@ -215,24 +221,26 @@ def initconfig_package_entries(self):
return []
def initconfig(self, spec, prefix):
cache_entries = (self.std_initconfig_entries() +
self.initconfig_compiler_entries() +
self.initconfig_mpi_entries() +
self.initconfig_hardware_entries() +
self.initconfig_package_entries())
cache_entries = (
self.std_initconfig_entries()
+ self.initconfig_compiler_entries()
+ self.initconfig_mpi_entries()
+ self.initconfig_hardware_entries()
+ self.initconfig_package_entries()
)
with open(self.cache_name, 'w') as f:
with open(self.cache_name, "w") as f:
for entry in cache_entries:
f.write('%s\n' % entry)
f.write('\n')
f.write("%s\n" % entry)
f.write("\n")
@property
def std_cmake_args(self):
args = super(CachedCMakePackage, self).std_cmake_args
args.extend(['-C', self.cache_path])
args.extend(["-C", self.cache_path])
return args
@run_after('install')
@run_after("install")
def install_cmake_cache(self):
mkdirp(self.spec.prefix.share.cmake)
install(self.cache_path, self.spec.prefix.share.cmake)

View File

@@ -18,12 +18,11 @@
import spack.build_environment
from spack.directives import conflicts, depends_on, variant
from spack.package import InstallError, PackageBase, run_after
from spack.util.path import convert_to_posix_path
from spack.package_base import InstallError, PackageBase, run_after
# Regex to extract the primary generator from the CMake generator
# string.
_primary_generator_extractor = re.compile(r'(?:.* - )?(.*)')
_primary_generator_extractor = re.compile(r"(?:.* - )?(.*)")
def _extract_primary_generator(generator):
@@ -74,16 +73,17 @@ class CMakePackage(PackageBase):
if the generator string does not follow the prescribed format, or if
the primary generator is not supported.
"""
#: Phases of a CMake package
phases = ['cmake', 'build', 'install']
phases = ["cmake", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'CMakePackage'
build_system_class = "CMakePackage"
build_targets = [] # type: List[str]
install_targets = ['install']
install_targets = ["install"]
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
#: The build system generator to use.
#:
@@ -96,28 +96,29 @@ class CMakePackage(PackageBase):
generator = "Unix Makefiles"
if sys.platform == 'win32':
if sys.platform == "win32":
generator = "Ninja"
depends_on('ninja')
depends_on("ninja")
# https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
variant('build_type', default='RelWithDebInfo',
description='CMake build type',
values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
variant(
"build_type",
default="RelWithDebInfo",
description="CMake build type",
values=("Debug", "Release", "RelWithDebInfo", "MinSizeRel"),
)
# https://cmake.org/cmake/help/latest/variable/CMAKE_INTERPROCEDURAL_OPTIMIZATION.html
variant('ipo', default=False,
description='CMake interprocedural optimization')
variant("ipo", default=False, description="CMake interprocedural optimization")
# CMAKE_INTERPROCEDURAL_OPTIMIZATION only exists for CMake >= 3.9
conflicts('+ipo', when='^cmake@:3.8',
msg='+ipo is not supported by CMake < 3.9')
conflicts("+ipo", when="^cmake@:3.8", msg="+ipo is not supported by CMake < 3.9")
depends_on('cmake', type='build')
depends_on("cmake", type="build")
@property
def archive_files(self):
"""Files to archive for packages based on CMake"""
return [os.path.join(self.build_directory, 'CMakeCache.txt')]
return [os.path.join(self.build_directory, "CMakeCache.txt")]
@property
def root_cmakelists_dir(self):
@@ -139,7 +140,7 @@ def std_cmake_args(self):
"""
# standard CMake arguments
std_cmake_args = CMakePackage._std_args(self)
std_cmake_args += getattr(self, 'cmake_flag_args', [])
std_cmake_args += getattr(self, "cmake_flag_args", [])
return std_cmake_args
@staticmethod
@@ -152,54 +153,56 @@ def _std_args(pkg):
generator = CMakePackage.generator
# Make sure a valid generator was chosen
valid_primary_generators = ['Unix Makefiles', 'Ninja']
valid_primary_generators = ["Unix Makefiles", "Ninja"]
primary_generator = _extract_primary_generator(generator)
if primary_generator not in valid_primary_generators:
msg = "Invalid CMake generator: '{0}'\n".format(generator)
msg = "Invalid CMake generator: '{0}'\n".format(generator)
msg += "CMakePackage currently supports the following "
msg += "primary generators: '{0}'".\
format("', '".join(valid_primary_generators))
msg += "primary generators: '{0}'".format("', '".join(valid_primary_generators))
raise InstallError(msg)
try:
build_type = pkg.spec.variants['build_type'].value
build_type = pkg.spec.variants["build_type"].value
except KeyError:
build_type = 'RelWithDebInfo'
build_type = "RelWithDebInfo"
try:
ipo = pkg.spec.variants['ipo'].value
ipo = pkg.spec.variants["ipo"].value
except KeyError:
ipo = False
define = CMakePackage.define
args = [
'-G', generator,
define('CMAKE_INSTALL_PREFIX', convert_to_posix_path(pkg.prefix)),
define('CMAKE_BUILD_TYPE', build_type),
define('BUILD_TESTING', pkg.run_tests),
"-G",
generator,
define("CMAKE_INSTALL_PREFIX", pkg.prefix),
define("CMAKE_BUILD_TYPE", build_type),
define("BUILD_TESTING", pkg.run_tests),
]
# CMAKE_INTERPROCEDURAL_OPTIMIZATION only exists for CMake >= 3.9
if pkg.spec.satisfies('^cmake@3.9:'):
args.append(define('CMAKE_INTERPROCEDURAL_OPTIMIZATION', ipo))
if pkg.spec.satisfies("^cmake@3.9:"):
args.append(define("CMAKE_INTERPROCEDURAL_OPTIMIZATION", ipo))
if primary_generator == 'Unix Makefiles':
args.append(define('CMAKE_VERBOSE_MAKEFILE', True))
if primary_generator == "Unix Makefiles":
args.append(define("CMAKE_VERBOSE_MAKEFILE", True))
if platform.mac_ver()[0]:
args.extend([
define('CMAKE_FIND_FRAMEWORK', "LAST"),
define('CMAKE_FIND_APPBUNDLE', "LAST"),
])
args.extend(
[
define("CMAKE_FIND_FRAMEWORK", "LAST"),
define("CMAKE_FIND_APPBUNDLE", "LAST"),
]
)
# Set up CMake rpath
args.extend([
define('CMAKE_INSTALL_RPATH_USE_LINK_PATH', True),
define('CMAKE_INSTALL_RPATH',
spack.build_environment.get_rpaths(pkg)),
define('CMAKE_PREFIX_PATH',
spack.build_environment.get_cmake_prefix_path(pkg))
])
args.extend(
[
define("CMAKE_INSTALL_RPATH_USE_LINK_PATH", True),
define("CMAKE_INSTALL_RPATH", spack.build_environment.get_rpaths(pkg)),
define("CMAKE_PREFIX_PATH", spack.build_environment.get_cmake_prefix_path(pkg)),
]
)
return args
@staticmethod
@@ -230,10 +233,10 @@ def define(cmake_var, value):
# Create a list of pairs. Each pair includes a configuration
# option and whether or not that option is activated
if isinstance(value, bool):
kind = 'BOOL'
kind = "BOOL"
value = "ON" if value else "OFF"
else:
kind = 'STRING'
kind = "STRING"
if isinstance(value, Sequence) and not isinstance(value, six.string_types):
value = ";".join(str(v) for v in value)
else:
@@ -289,11 +292,10 @@ def define_from_variant(self, cmake_var, variant=None):
variant = cmake_var.lower()
if variant not in self.variants:
raise KeyError(
'"{0}" is not a variant of "{1}"'.format(variant, self.name))
raise KeyError('"{0}" is not a variant of "{1}"'.format(variant, self.name))
if variant not in self.spec.variants:
return ''
return ""
value = self.spec.variants[variant].value
if isinstance(value, (tuple, list)):
@@ -308,37 +310,34 @@ def flags_to_build_system_args(self, flags):
so cppflags will be added to cflags, cxxflags, and fflags to mimic the
behavior in other tools."""
# Has to be dynamic attribute due to caching
setattr(self, 'cmake_flag_args', [])
setattr(self, "cmake_flag_args", [])
flag_string = '-DCMAKE_{0}_FLAGS={1}'
langs = {'C': 'c', 'CXX': 'cxx', 'Fortran': 'f'}
flag_string = "-DCMAKE_{0}_FLAGS={1}"
langs = {"C": "c", "CXX": "cxx", "Fortran": "f"}
# Handle language compiler flags
for lang, pre in langs.items():
flag = pre + 'flags'
flag = pre + "flags"
# cmake has no explicit cppflags support -> add it to all langs
lang_flags = ' '.join(flags.get(flag, []) + flags.get('cppflags',
[]))
lang_flags = " ".join(flags.get(flag, []) + flags.get("cppflags", []))
if lang_flags:
self.cmake_flag_args.append(flag_string.format(lang,
lang_flags))
self.cmake_flag_args.append(flag_string.format(lang, lang_flags))
# Cmake has different linker arguments for different build types.
# We specify for each of them.
if flags['ldflags']:
ldflags = ' '.join(flags['ldflags'])
ld_string = '-DCMAKE_{0}_LINKER_FLAGS={1}'
if flags["ldflags"]:
ldflags = " ".join(flags["ldflags"])
ld_string = "-DCMAKE_{0}_LINKER_FLAGS={1}"
# cmake has separate linker arguments for types of builds.
for type in ['EXE', 'MODULE', 'SHARED', 'STATIC']:
for type in ["EXE", "MODULE", "SHARED", "STATIC"]:
self.cmake_flag_args.append(ld_string.format(type, ldflags))
# CMake has libs options separated by language. Apply ours to each.
if flags['ldlibs']:
libs_flags = ' '.join(flags['ldlibs'])
libs_string = '-DCMAKE_{0}_STANDARD_LIBRARIES={1}'
if flags["ldlibs"]:
libs_flags = " ".join(flags["ldlibs"])
libs_string = "-DCMAKE_{0}_STANDARD_LIBRARIES={1}"
for lang in langs:
self.cmake_flag_args.append(libs_string.format(lang,
libs_flags))
self.cmake_flag_args.append(libs_string.format(lang, libs_flags))
@property
def build_dirname(self):
@@ -346,7 +345,7 @@ def build_dirname(self):
:return: name of the subdirectory for building the package
"""
return 'spack-build-%s' % self.spec.dag_hash(7)
return "spack-build-%s" % self.spec.dag_hash(7)
@property
def build_directory(self):
@@ -381,35 +380,33 @@ def cmake(self, spec, prefix):
def build(self, spec, prefix):
"""Make the build targets"""
with working_dir(self.build_directory):
if self.generator == 'Unix Makefiles':
if self.generator == "Unix Makefiles":
inspect.getmodule(self).make(*self.build_targets)
elif self.generator == 'Ninja':
elif self.generator == "Ninja":
self.build_targets.append("-v")
inspect.getmodule(self).ninja(*self.build_targets)
def install(self, spec, prefix):
"""Make the install targets"""
with working_dir(self.build_directory):
if self.generator == 'Unix Makefiles':
if self.generator == "Unix Makefiles":
inspect.getmodule(self).make(*self.install_targets)
elif self.generator == 'Ninja':
elif self.generator == "Ninja":
inspect.getmodule(self).ninja(*self.install_targets)
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
def check(self):
"""Searches the CMake-generated Makefile for the target ``test``
and runs it if found.
"""
with working_dir(self.build_directory):
if self.generator == 'Unix Makefiles':
self._if_make_target_execute('test',
jobs_env='CTEST_PARALLEL_LEVEL')
self._if_make_target_execute('check')
elif self.generator == 'Ninja':
self._if_ninja_target_execute('test',
jobs_env='CTEST_PARALLEL_LEVEL')
self._if_ninja_target_execute('check')
if self.generator == "Unix Makefiles":
self._if_make_target_execute("test", jobs_env="CTEST_PARALLEL_LEVEL")
self._if_make_target_execute("check")
elif self.generator == "Ninja":
self._if_ninja_target_execute("test", jobs_env="CTEST_PARALLEL_LEVEL")
self._if_ninja_target_execute("check")
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -6,7 +6,7 @@
import spack.variant
from spack.directives import conflicts, depends_on, variant
from spack.multimethod import when
from spack.package import PackageBase
from spack.package_base import PackageBase
class CudaPackage(PackageBase):
@@ -20,65 +20,93 @@ class CudaPackage(PackageBase):
# https://developer.nvidia.com/cuda-gpus
# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
cuda_arch_values = (
'10', '11', '12', '13',
'20', '21',
'30', '32', '35', '37',
'50', '52', '53',
'60', '61', '62',
'70', '72', '75',
'80', '86'
"10",
"11",
"12",
"13",
"20",
"21",
"30",
"32",
"35",
"37",
"50",
"52",
"53",
"60",
"61",
"62",
"70",
"72",
"75",
"80",
"86",
"87",
"89",
"90",
)
# FIXME: keep cuda and cuda_arch separate to make usage easier until
# Spack has depends_on(cuda, when='cuda_arch!=None') or alike
variant('cuda', default=False,
description='Build with CUDA')
variant("cuda", default=False, description="Build with CUDA")
variant('cuda_arch',
description='CUDA architecture',
values=spack.variant.any_combination_of(*cuda_arch_values),
when='+cuda')
variant(
"cuda_arch",
description="CUDA architecture",
values=spack.variant.any_combination_of(*cuda_arch_values),
sticky=True,
when="+cuda",
)
# https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-examples
# https://llvm.org/docs/CompileCudaWithLLVM.html#compiling-cuda-code
@staticmethod
def cuda_flags(arch_list):
return [('--generate-code arch=compute_{0},code=sm_{0} '
'--generate-code arch=compute_{0},code=compute_{0}').format(s)
for s in arch_list]
return [
(
"--generate-code arch=compute_{0},code=sm_{0} "
"--generate-code arch=compute_{0},code=compute_{0}"
).format(s)
for s in arch_list
]
depends_on('cuda', when='+cuda')
depends_on("cuda", when="+cuda")
# CUDA version vs Architecture
# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
# https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#deprecated-features
depends_on('cuda@:6.0', when='cuda_arch=10')
depends_on('cuda@:6.5', when='cuda_arch=11')
depends_on('cuda@2.1:6.5', when='cuda_arch=12')
depends_on('cuda@2.1:6.5', when='cuda_arch=13')
depends_on("cuda@:6.0", when="cuda_arch=10")
depends_on("cuda@:6.5", when="cuda_arch=11")
depends_on("cuda@2.1:6.5", when="cuda_arch=12")
depends_on("cuda@2.1:6.5", when="cuda_arch=13")
depends_on('cuda@3.0:8.0', when='cuda_arch=20')
depends_on('cuda@3.2:8.0', when='cuda_arch=21')
depends_on("cuda@3.0:8.0", when="cuda_arch=20")
depends_on("cuda@3.2:8.0", when="cuda_arch=21")
depends_on('cuda@5.0:10.2', when='cuda_arch=30')
depends_on('cuda@5.0:10.2', when='cuda_arch=32')
depends_on('cuda@5.0:', when='cuda_arch=35')
depends_on('cuda@6.5:', when='cuda_arch=37')
depends_on("cuda@5.0:10.2", when="cuda_arch=30")
depends_on("cuda@5.0:10.2", when="cuda_arch=32")
depends_on("cuda@5.0:", when="cuda_arch=35")
depends_on("cuda@6.5:", when="cuda_arch=37")
depends_on('cuda@6.0:', when='cuda_arch=50')
depends_on('cuda@6.5:', when='cuda_arch=52')
depends_on('cuda@6.5:', when='cuda_arch=53')
depends_on("cuda@6.0:", when="cuda_arch=50")
depends_on("cuda@6.5:", when="cuda_arch=52")
depends_on("cuda@6.5:", when="cuda_arch=53")
depends_on('cuda@8.0:', when='cuda_arch=60')
depends_on('cuda@8.0:', when='cuda_arch=61')
depends_on('cuda@8.0:', when='cuda_arch=62')
depends_on("cuda@8.0:", when="cuda_arch=60")
depends_on("cuda@8.0:", when="cuda_arch=61")
depends_on("cuda@8.0:", when="cuda_arch=62")
depends_on('cuda@9.0:', when='cuda_arch=70')
depends_on('cuda@9.0:', when='cuda_arch=72')
depends_on('cuda@10.0:', when='cuda_arch=75')
depends_on("cuda@9.0:", when="cuda_arch=70")
depends_on("cuda@9.0:", when="cuda_arch=72")
depends_on("cuda@10.0:", when="cuda_arch=75")
depends_on('cuda@11.0:', when='cuda_arch=80')
depends_on('cuda@11.1:', when='cuda_arch=86')
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")
# From the NVIDIA install guide we know of conflicts for particular
# platforms (linux, darwin), architectures (x86, powerpc) and compilers
@@ -89,15 +117,15 @@ def cuda_flags(arch_list):
# Linux x86_64 compiler conflicts from here:
# https://gist.github.com/ax3l/9489132
with when('^cuda~allow-unsupported-compilers'):
with when("^cuda~allow-unsupported-compilers"):
# GCC
# According to
# https://github.com/spack/spack/pull/25054#issuecomment-886531664
# these conflicts are valid independently from the architecture
# minimum supported versions
conflicts('%gcc@:4', when='+cuda ^cuda@11.0:')
conflicts('%gcc@:5', when='+cuda ^cuda@11.4:')
conflicts("%gcc@:4", when="+cuda ^cuda@11.0:")
conflicts("%gcc@:5", when="+cuda ^cuda@11.4:")
# maximum supported version
# NOTE:
@@ -105,39 +133,40 @@ def cuda_flags(arch_list):
# it has been decided to use an upper bound for the latest version.
# This implies that the last one in the list has to be updated at
# each release of a new cuda minor version.
conflicts('%gcc@10:', when='+cuda ^cuda@:11.0')
conflicts('%gcc@11:', when='+cuda ^cuda@:11.4.0')
conflicts('%gcc@12:', when='+cuda ^cuda@:11.7')
conflicts('%clang@12:', when='+cuda ^cuda@:11.4.0')
conflicts('%clang@13:', when='+cuda ^cuda@:11.5')
conflicts('%clang@14:', when='+cuda ^cuda@:11.7')
conflicts("%gcc@10:", when="+cuda ^cuda@:11.0")
conflicts("%gcc@11:", when="+cuda ^cuda@:11.4.0")
conflicts("%gcc@11.2:", when="+cuda ^cuda@:11.5")
conflicts("%gcc@12:", when="+cuda ^cuda@:11.8")
conflicts("%clang@12:", when="+cuda ^cuda@:11.4.0")
conflicts("%clang@13:", when="+cuda ^cuda@:11.5")
conflicts("%clang@14:", when="+cuda ^cuda@:11.7")
conflicts("%clang@15:", when="+cuda ^cuda@:11.8")
# https://gist.github.com/ax3l/9489132#gistcomment-3860114
conflicts('%gcc@10', when='+cuda ^cuda@:11.4.0')
conflicts('%gcc@5:', when='+cuda ^cuda@:7.5 target=x86_64:')
conflicts('%gcc@6:', when='+cuda ^cuda@:8 target=x86_64:')
conflicts('%gcc@7:', when='+cuda ^cuda@:9.1 target=x86_64:')
conflicts('%gcc@8:', when='+cuda ^cuda@:10.0.130 target=x86_64:')
conflicts('%gcc@9:', when='+cuda ^cuda@:10.2.89 target=x86_64:')
conflicts('%pgi@:14.8', when='+cuda ^cuda@:7.0.27 target=x86_64:')
conflicts('%pgi@:15.3,15.5:', when='+cuda ^cuda@7.5 target=x86_64:')
conflicts('%pgi@:16.2,16.0:16.3', when='+cuda ^cuda@8 target=x86_64:')
conflicts('%pgi@:15,18:', when='+cuda ^cuda@9.0:9.1 target=x86_64:')
conflicts('%pgi@:16,19:', when='+cuda ^cuda@9.2.88:10 target=x86_64:')
conflicts('%pgi@:17,20:', when='+cuda ^cuda@10.1.105:10.2.89 target=x86_64:')
conflicts('%pgi@:17,21:', when='+cuda ^cuda@11.0.2:11.1.0 target=x86_64:')
conflicts('%clang@:3.4', when='+cuda ^cuda@:7.5 target=x86_64:')
conflicts('%clang@:3.7,4:', when='+cuda ^cuda@8.0:9.0 target=x86_64:')
conflicts('%clang@:3.7,4.1:', when='+cuda ^cuda@9.1 target=x86_64:')
conflicts('%clang@:3.7,5.1:', when='+cuda ^cuda@9.2 target=x86_64:')
conflicts('%clang@:3.7,6.1:', when='+cuda ^cuda@10.0.130 target=x86_64:')
conflicts('%clang@:3.7,7.1:', when='+cuda ^cuda@10.1.105 target=x86_64:')
conflicts('%clang@:3.7,8.1:',
when='+cuda ^cuda@10.1.105:10.1.243 target=x86_64:')
conflicts('%clang@:3.2,9:', when='+cuda ^cuda@10.2.89 target=x86_64:')
conflicts('%clang@:5', when='+cuda ^cuda@11.0.2: target=x86_64:')
conflicts('%clang@10:', when='+cuda ^cuda@:11.0.3 target=x86_64:')
conflicts('%clang@11:', when='+cuda ^cuda@:11.1.0 target=x86_64:')
conflicts("%gcc@10", when="+cuda ^cuda@:11.4.0")
conflicts("%gcc@5:", when="+cuda ^cuda@:7.5 target=x86_64:")
conflicts("%gcc@6:", when="+cuda ^cuda@:8 target=x86_64:")
conflicts("%gcc@7:", when="+cuda ^cuda@:9.1 target=x86_64:")
conflicts("%gcc@8:", when="+cuda ^cuda@:10.0.130 target=x86_64:")
conflicts("%gcc@9:", when="+cuda ^cuda@:10.2.89 target=x86_64:")
conflicts("%pgi@:14.8", when="+cuda ^cuda@:7.0.27 target=x86_64:")
conflicts("%pgi@:15.3,15.5:", when="+cuda ^cuda@7.5 target=x86_64:")
conflicts("%pgi@:16.2,16.0:16.3", when="+cuda ^cuda@8 target=x86_64:")
conflicts("%pgi@:15,18:", when="+cuda ^cuda@9.0:9.1 target=x86_64:")
conflicts("%pgi@:16,19:", when="+cuda ^cuda@9.2.88:10 target=x86_64:")
conflicts("%pgi@:17,20:", when="+cuda ^cuda@10.1.105:10.2.89 target=x86_64:")
conflicts("%pgi@:17,21:", when="+cuda ^cuda@11.0.2:11.1.0 target=x86_64:")
conflicts("%clang@:3.4", when="+cuda ^cuda@:7.5 target=x86_64:")
conflicts("%clang@:3.7,4:", when="+cuda ^cuda@8.0:9.0 target=x86_64:")
conflicts("%clang@:3.7,4.1:", when="+cuda ^cuda@9.1 target=x86_64:")
conflicts("%clang@:3.7,5.1:", when="+cuda ^cuda@9.2 target=x86_64:")
conflicts("%clang@:3.7,6.1:", when="+cuda ^cuda@10.0.130 target=x86_64:")
conflicts("%clang@:3.7,7.1:", when="+cuda ^cuda@10.1.105 target=x86_64:")
conflicts("%clang@:3.7,8.1:", when="+cuda ^cuda@10.1.105:10.1.243 target=x86_64:")
conflicts("%clang@:3.2,9:", when="+cuda ^cuda@10.2.89 target=x86_64:")
conflicts("%clang@:5", when="+cuda ^cuda@11.0.2: target=x86_64:")
conflicts("%clang@10:", when="+cuda ^cuda@:11.0.3 target=x86_64:")
conflicts("%clang@11:", when="+cuda ^cuda@:11.1.0 target=x86_64:")
# x86_64 vs. ppc64le differ according to NVidia docs
# Linux ppc64le compiler conflicts from Table from the docs below:
@@ -148,43 +177,43 @@ def cuda_flags(arch_list):
# https://docs.nvidia.com/cuda/archive/8.0/cuda-installation-guide-linux/index.html
# information prior to CUDA 9 difficult to find
conflicts('%gcc@6:', when='+cuda ^cuda@:9 target=ppc64le:')
conflicts('%gcc@8:', when='+cuda ^cuda@:10.0.130 target=ppc64le:')
conflicts('%gcc@9:', when='+cuda ^cuda@:10.1.243 target=ppc64le:')
conflicts("%gcc@6:", when="+cuda ^cuda@:9 target=ppc64le:")
conflicts("%gcc@8:", when="+cuda ^cuda@:10.0.130 target=ppc64le:")
conflicts("%gcc@9:", when="+cuda ^cuda@:10.1.243 target=ppc64le:")
# officially, CUDA 11.0.2 only supports the system GCC 8.3 on ppc64le
conflicts('%pgi', when='+cuda ^cuda@:8 target=ppc64le:')
conflicts('%pgi@:16', when='+cuda ^cuda@:9.1.185 target=ppc64le:')
conflicts('%pgi@:17', when='+cuda ^cuda@:10 target=ppc64le:')
conflicts('%clang@4:', when='+cuda ^cuda@:9.0.176 target=ppc64le:')
conflicts('%clang@5:', when='+cuda ^cuda@:9.1 target=ppc64le:')
conflicts('%clang@6:', when='+cuda ^cuda@:9.2 target=ppc64le:')
conflicts('%clang@7:', when='+cuda ^cuda@10.0.130 target=ppc64le:')
conflicts('%clang@7.1:', when='+cuda ^cuda@:10.1.105 target=ppc64le:')
conflicts('%clang@8.1:', when='+cuda ^cuda@:10.2.89 target=ppc64le:')
conflicts('%clang@:5', when='+cuda ^cuda@11.0.2: target=ppc64le:')
conflicts('%clang@10:', when='+cuda ^cuda@:11.0.2 target=ppc64le:')
conflicts('%clang@11:', when='+cuda ^cuda@:11.1.0 target=ppc64le:')
conflicts("%pgi", when="+cuda ^cuda@:8 target=ppc64le:")
conflicts("%pgi@:16", when="+cuda ^cuda@:9.1.185 target=ppc64le:")
conflicts("%pgi@:17", when="+cuda ^cuda@:10 target=ppc64le:")
conflicts("%clang@4:", when="+cuda ^cuda@:9.0.176 target=ppc64le:")
conflicts("%clang@5:", when="+cuda ^cuda@:9.1 target=ppc64le:")
conflicts("%clang@6:", when="+cuda ^cuda@:9.2 target=ppc64le:")
conflicts("%clang@7:", when="+cuda ^cuda@10.0.130 target=ppc64le:")
conflicts("%clang@7.1:", when="+cuda ^cuda@:10.1.105 target=ppc64le:")
conflicts("%clang@8.1:", when="+cuda ^cuda@:10.2.89 target=ppc64le:")
conflicts("%clang@:5", when="+cuda ^cuda@11.0.2: target=ppc64le:")
conflicts("%clang@10:", when="+cuda ^cuda@:11.0.2 target=ppc64le:")
conflicts("%clang@11:", when="+cuda ^cuda@:11.1.0 target=ppc64le:")
# Intel is mostly relevant for x86_64 Linux, even though it also
# exists for Mac OS X. No information prior to CUDA 3.2 or Intel 11.1
conflicts('%intel@:11.0', when='+cuda ^cuda@:3.1')
conflicts('%intel@:12.0', when='+cuda ^cuda@5.5:')
conflicts('%intel@:13.0', when='+cuda ^cuda@6.0:')
conflicts('%intel@:13.2', when='+cuda ^cuda@6.5:')
conflicts('%intel@:14.9', when='+cuda ^cuda@7:')
conflicts("%intel@:11.0", when="+cuda ^cuda@:3.1")
conflicts("%intel@:12.0", when="+cuda ^cuda@5.5:")
conflicts("%intel@:13.0", when="+cuda ^cuda@6.0:")
conflicts("%intel@:13.2", when="+cuda ^cuda@6.5:")
conflicts("%intel@:14.9", when="+cuda ^cuda@7:")
# Intel 15.x is compatible with CUDA 7 thru current CUDA
conflicts('%intel@16.0:', when='+cuda ^cuda@:8.0.43')
conflicts('%intel@17.0:', when='+cuda ^cuda@:8.0.60')
conflicts('%intel@18.0:', when='+cuda ^cuda@:9.9')
conflicts('%intel@19.0:', when='+cuda ^cuda@:10.0')
conflicts('%intel@19.1:', when='+cuda ^cuda@:10.1')
conflicts('%intel@19.2:', when='+cuda ^cuda@:11.1.0')
conflicts("%intel@16.0:", when="+cuda ^cuda@:8.0.43")
conflicts("%intel@17.0:", when="+cuda ^cuda@:8.0.60")
conflicts("%intel@18.0:", when="+cuda ^cuda@:9.9")
conflicts("%intel@19.0:", when="+cuda ^cuda@:10.0")
conflicts("%intel@19.1:", when="+cuda ^cuda@:10.1")
conflicts("%intel@19.2:", when="+cuda ^cuda@:11.1.0")
# XL is mostly relevant for ppc64le Linux
conflicts('%xl@:12,14:', when='+cuda ^cuda@:9.1')
conflicts('%xl@:12,14:15,17:', when='+cuda ^cuda@9.2')
conflicts('%xl@:12,17:', when='+cuda ^cuda@:11.1.0')
conflicts("%xl@:12,14:", when="+cuda ^cuda@:9.1")
conflicts("%xl@:12,14:15,17:", when="+cuda ^cuda@9.2")
conflicts("%xl@:12,17:", when="+cuda ^cuda@:11.1.0")
# Darwin.
# TODO: add missing conflicts for %apple-clang cuda@:10
conflicts('platform=darwin', when='+cuda ^cuda@11.0.2: ')
conflicts("platform=darwin", when="+cuda ^cuda@11.0.2: ")

View File

@@ -3,22 +3,25 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import spack.package
from typing import Optional
import spack.package_base
import spack.util.url
class GNUMirrorPackage(spack.package.PackageBase):
class GNUMirrorPackage(spack.package_base.PackageBase):
"""Mixin that takes care of setting url and mirrors for GNU packages."""
#: Path of the package in a GNU mirror
gnu_mirror_path = None
gnu_mirror_path = None # type: Optional[str]
#: List of GNU mirrors used by Spack
base_mirrors = [
'https://ftpmirror.gnu.org/',
'https://ftp.gnu.org/gnu/',
"https://ftpmirror.gnu.org/",
"https://ftp.gnu.org/gnu/",
# Fall back to http if https didn't work (for instance because
# Spack is bootstrapping curl)
'http://ftpmirror.gnu.org/'
"http://ftpmirror.gnu.org/",
]
@property
@@ -32,6 +35,5 @@ def urls(self):
def _ensure_gnu_mirror_path_is_set_or_raise(self):
if self.gnu_mirror_path is None:
cls_name = type(self).__name__
msg = ('{0} must define a `gnu_mirror_path` attribute'
' [none defined]')
msg = "{0} must define a `gnu_mirror_path` attribute" " [none defined]"
raise AttributeError(msg.format(cls_name))

File diff suppressed because it is too large Load Diff

View File

@@ -10,34 +10,34 @@
from spack.directives import depends_on, extends
from spack.multimethod import when
from spack.package import PackageBase
from spack.package_base import PackageBase
from spack.util.executable import Executable
class LuaPackage(PackageBase):
"""Specialized class for lua packages"""
phases = ['unpack', 'generate_luarocks_config', 'preprocess', 'install']
phases = ["unpack", "generate_luarocks_config", "preprocess", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'LuaPackage'
build_system_class = "LuaPackage"
list_depth = 1 # LuaRocks requires at least one level of spidering to find versions
depends_on('lua-lang')
extends('lua', when='^lua')
with when('^lua-luajit'):
extends('lua-luajit')
depends_on('luajit')
depends_on('lua-luajit+lualinks')
with when('^lua-luajit-openresty'):
extends('lua-luajit-openresty')
depends_on('luajit')
depends_on('lua-luajit-openresty+lualinks')
depends_on("lua-lang")
extends("lua", when="^lua")
with when("^lua-luajit"):
extends("lua-luajit")
depends_on("luajit")
depends_on("lua-luajit+lualinks")
with when("^lua-luajit-openresty"):
extends("lua-luajit-openresty")
depends_on("luajit")
depends_on("lua-luajit-openresty+lualinks")
def unpack(self, spec, prefix):
if os.path.splitext(self.stage.archive_file)[1] == '.rock':
directory = self.luarocks('unpack', self.stage.archive_file, output=str)
dirlines = directory.split('\n')
if os.path.splitext(self.stage.archive_file)[1] == ".rock":
directory = self.luarocks("unpack", self.stage.archive_file, output=str)
dirlines = directory.split("\n")
# TODO: figure out how to scope this better
os.chdir(dirlines[2])
@@ -48,19 +48,17 @@ def _generate_tree_line(self, name, prefix):
)
def _luarocks_config_path(self):
return os.path.join(self.stage.source_path, 'spack_luarocks.lua')
return os.path.join(self.stage.source_path, "spack_luarocks.lua")
def generate_luarocks_config(self, spec, prefix):
spec = self.spec
table_entries = []
for d in spec.traverse(
deptypes=("build", "run"), deptype_query="run"
):
for d in spec.traverse(deptypes=("build", "run"), deptype_query="run"):
if d.package.extends(self.extendee_spec):
table_entries.append(self._generate_tree_line(d.name, d.prefix))
path = self._luarocks_config_path()
with open(path, 'w') as config:
with open(path, "w") as config:
config.write(
"""
deps_mode="all"
@@ -74,7 +72,7 @@ def generate_luarocks_config(self, spec, prefix):
return path
def setup_build_environment(self, env):
env.set('LUAROCKS_CONFIG', self._luarocks_config_path())
env.set("LUAROCKS_CONFIG", self._luarocks_config_path())
def preprocess(self, spec, prefix):
"""Override this to preprocess source before building with luarocks"""
@@ -82,21 +80,21 @@ def preprocess(self, spec, prefix):
@property
def lua(self):
return Executable(self.spec['lua-lang'].prefix.bin.lua)
return Executable(self.spec["lua-lang"].prefix.bin.lua)
@property
def luarocks(self):
lr = Executable(self.spec['lua-lang'].prefix.bin.luarocks)
lr = Executable(self.spec["lua-lang"].prefix.bin.luarocks)
return lr
def luarocks_args(self):
return []
def install(self, spec, prefix):
rock = '.'
specs = find('.', '*.rockspec', recursive=False)
rock = "."
specs = find(".", "*.rockspec", recursive=False)
if specs:
rock = specs[0]
rocks_args = self.luarocks_args()
rocks_args.append(rock)
self.luarocks('--tree=' + prefix, 'make', *rocks_args)
self.luarocks("--tree=" + prefix, "make", *rocks_args)

View File

@@ -11,7 +11,7 @@
from llnl.util.filesystem import working_dir
from spack.directives import conflicts
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class MakefilePackage(PackageBase):
@@ -43,25 +43,26 @@ class MakefilePackage(PackageBase):
| | Makefile is located|
+-----------------------------------------------+--------------------+
"""
#: Phases of a package that is built with an hand-written Makefile
phases = ['edit', 'build', 'install']
phases = ["edit", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'MakefilePackage'
build_system_class = "MakefilePackage"
#: Targets for ``make`` during the :py:meth:`~.MakefilePackage.build`
#: phase
build_targets = [] # type: List[str]
#: Targets for ``make`` during the :py:meth:`~.MakefilePackage.install`
#: phase
install_targets = ['install']
install_targets = ["install"]
conflicts('platform=windows')
conflicts("platform=windows")
#: Callback names for build-time test
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
#: Callback names for install-time test
install_time_test_callbacks = ['installcheck']
install_time_test_callbacks = ["installcheck"]
@property
def build_directory(self):
@@ -75,7 +76,7 @@ def edit(self, spec, prefix):
"""Edits the Makefile before calling make. This phase cannot
be defaulted.
"""
tty.msg('Using default implementation: skipping edit phase.')
tty.msg("Using default implementation: skipping edit phase.")
def build(self, spec, prefix):
"""Calls make, passing :py:attr:`~.MakefilePackage.build_targets`
@@ -91,27 +92,27 @@ def install(self, spec, prefix):
with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.install_targets)
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
def check(self):
"""Searches the Makefile for targets ``test`` and ``check``
and runs them if found.
"""
with working_dir(self.build_directory):
self._if_make_target_execute('test')
self._if_make_target_execute('check')
self._if_make_target_execute("test")
self._if_make_target_execute("check")
run_after('install')(PackageBase._run_default_install_time_test_callbacks)
run_after("install")(PackageBase._run_default_install_time_test_callbacks)
def installcheck(self):
"""Searches the Makefile for an ``installcheck`` target
and runs it if found.
"""
with working_dir(self.build_directory):
self._if_make_target_execute('installcheck')
self._if_make_target_execute("installcheck")
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)
# On macOS, force rpaths for shared library IDs and remove duplicate rpaths
run_after('install')(PackageBase.apply_macos_rpath_fixups)
run_after("install")(PackageBase.apply_macos_rpath_fixups)

View File

@@ -7,7 +7,7 @@
from llnl.util.filesystem import install_tree, working_dir
from spack.directives import depends_on
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
from spack.util.executable import which
@@ -21,15 +21,16 @@ class MavenPackage(PackageBase):
* build
* install
"""
# Default phases
phases = ['build', 'install']
phases = ["build", "install"]
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'MavenPackage'
build_system_class = "MavenPackage"
depends_on('java', type=('build', 'run'))
depends_on('maven', type='build')
depends_on("java", type=("build", "run"))
depends_on("maven", type="build")
@property
def build_directory(self):
@@ -44,17 +45,17 @@ def build(self, spec, prefix):
"""Compile code and package into a JAR file."""
with working_dir(self.build_directory):
mvn = which('mvn')
mvn = which("mvn")
if self.run_tests:
mvn('verify', *self.build_args())
mvn("verify", *self.build_args())
else:
mvn('package', '-DskipTests', *self.build_args())
mvn("package", "-DskipTests", *self.build_args())
def install(self, spec, prefix):
"""Copy to installation prefix."""
with working_dir(self.build_directory):
install_tree('.', prefix)
install_tree(".", prefix)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -11,7 +11,7 @@
from llnl.util.filesystem import working_dir
from spack.directives import depends_on, variant
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class MesonPackage(PackageBase):
@@ -42,31 +42,40 @@ class MesonPackage(PackageBase):
"""
#: Phases of a Meson package
phases = ['meson', 'build', 'install']
phases = ["meson", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'MesonPackage'
build_system_class = "MesonPackage"
build_targets = [] # type: List[str]
install_targets = ['install']
install_targets = ["install"]
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
variant('buildtype', default='debugoptimized',
description='Meson build type',
values=('plain', 'debug', 'debugoptimized', 'release', 'minsize'))
variant('default_library', default='shared', values=('shared', 'static'),
multi=True, description='Build shared libs, static libs or both')
variant('strip', default=False, description='Strip targets on install')
variant(
"buildtype",
default="debugoptimized",
description="Meson build type",
values=("plain", "debug", "debugoptimized", "release", "minsize"),
)
variant(
"default_library",
default="shared",
values=("shared", "static"),
multi=True,
description="Build shared libs, static libs or both",
)
variant("strip", default=False, description="Strip targets on install")
depends_on('meson', type='build')
depends_on('ninja', type='build')
depends_on("meson", type="build")
depends_on("ninja", type="build")
@property
def archive_files(self):
"""Files to archive for packages based on Meson"""
return [os.path.join(self.build_directory, 'meson-logs/meson-log.txt')]
return [os.path.join(self.build_directory, "meson-logs", "meson-log.txt")]
@property
def root_mesonlists_dir(self):
@@ -88,7 +97,7 @@ def std_meson_args(self):
"""
# standard Meson arguments
std_meson_args = MesonPackage._std_args(self)
std_meson_args += getattr(self, 'meson_flag_args', [])
std_meson_args += getattr(self, "meson_flag_args", [])
return std_meson_args
@staticmethod
@@ -96,29 +105,29 @@ def _std_args(pkg):
"""Computes the standard meson arguments for a generic package"""
try:
build_type = pkg.spec.variants['buildtype'].value
build_type = pkg.spec.variants["buildtype"].value
except KeyError:
build_type = 'release'
build_type = "release"
strip = 'true' if '+strip' in pkg.spec else 'false'
strip = "true" if "+strip" in pkg.spec else "false"
if 'default_library=static,shared' in pkg.spec:
default_library = 'both'
elif 'default_library=static' in pkg.spec:
default_library = 'static'
if "default_library=static,shared" in pkg.spec:
default_library = "both"
elif "default_library=static" in pkg.spec:
default_library = "static"
else:
default_library = 'shared'
default_library = "shared"
args = [
'--prefix={0}'.format(pkg.prefix),
"--prefix={0}".format(pkg.prefix),
# If we do not specify libdir explicitly, Meson chooses something
# like lib/x86_64-linux-gnu, which causes problems when trying to
# find libraries and pkg-config files.
# See https://github.com/mesonbuild/meson/issues/2197
'--libdir={0}'.format(pkg.prefix.lib),
'-Dbuildtype={0}'.format(build_type),
'-Dstrip={0}'.format(strip),
'-Ddefault_library={0}'.format(default_library)
"--libdir={0}".format(pkg.prefix.lib),
"-Dbuildtype={0}".format(build_type),
"-Dstrip={0}".format(strip),
"-Ddefault_library={0}".format(default_library),
]
return args
@@ -127,7 +136,15 @@ def flags_to_build_system_args(self, flags):
"""Produces a list of all command line arguments to pass the specified
compiler flags to meson."""
# Has to be dynamic attribute due to caching
setattr(self, 'meson_flag_args', [])
setattr(self, "meson_flag_args", [])
@property
def build_dirname(self):
"""Returns the directory name to use when building the package
:return: name of the subdirectory for building the package
"""
return "spack-build-%s" % self.spec.dag_hash(7)
@property
def build_directory(self):
@@ -135,7 +152,7 @@ def build_directory(self):
:return: directory where to build the package
"""
return os.path.join(self.stage.source_path, 'spack-build')
return os.path.join(self.stage.path, self.build_dirname)
def meson_args(self):
"""Produces a list containing all the arguments that must be passed to
@@ -163,7 +180,7 @@ def meson(self, spec, prefix):
def build(self, spec, prefix):
"""Make the build targets"""
options = ['-v']
options = ["-v"]
options += self.build_targets
with working_dir(self.build_directory):
inspect.getmodule(self).ninja(*options)
@@ -173,15 +190,15 @@ def install(self, spec, prefix):
with working_dir(self.build_directory):
inspect.getmodule(self).ninja(*self.install_targets)
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
def check(self):
"""Searches the Meson-generated file for the target ``test``
and runs it if found.
"""
with working_dir(self.build_directory):
self._if_ninja_target_execute('test')
self._if_ninja_target_execute('check')
self._if_ninja_target_execute("test")
self._if_ninja_target_execute("check")
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -6,7 +6,7 @@
import inspect
from spack.directives import extends
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class OctavePackage(PackageBase):
@@ -19,32 +19,34 @@ class OctavePackage(PackageBase):
1. :py:meth:`~.OctavePackage.install`
"""
# Default phases
phases = ['install']
phases = ["install"]
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'OctavePackage'
build_system_class = "OctavePackage"
extends('octave')
extends("octave")
def setup_build_environment(self, env):
# octave does not like those environment variables to be set:
env.unset('CC')
env.unset('CXX')
env.unset('FC')
env.unset("CC")
env.unset("CXX")
env.unset("FC")
def install(self, spec, prefix):
"""Install the package from the archive file"""
inspect.getmodule(self).octave(
'--quiet',
'--norc',
'--built-in-docstrings-file=/dev/null',
'--texi-macros-file=/dev/null',
'--eval', 'pkg prefix %s; pkg install %s' %
(prefix, self.stage.archive_file))
"--quiet",
"--norc",
"--built-in-docstrings-file=/dev/null",
"--texi-macros-file=/dev/null",
"--eval",
"pkg prefix %s; pkg install %s" % (prefix, self.stage.archive_file),
)
# Testing
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -14,7 +14,7 @@
from llnl.util.filesystem import find_headers, find_libraries, join_path
from spack.package import Package
from spack.package_base import Package
from spack.util.environment import EnvironmentModifications
from spack.util.executable import Executable
@@ -22,9 +22,9 @@
class IntelOneApiPackage(Package):
"""Base class for Intel oneAPI packages."""
homepage = 'https://software.intel.com/oneapi'
homepage = "https://software.intel.com/oneapi"
phases = ['install']
phases = ["install"]
# oneAPI license does not allow mirroring outside of the
# organization (e.g. University/Company).
@@ -45,19 +45,17 @@ def component_dir(self):
raise NotImplementedError
@property
def component_path(self):
def component_prefix(self):
"""Path to component <prefix>/<component>/<version>."""
return join_path(self.prefix, self.component_dir, str(self.spec.version))
return self.prefix.join(join_path(self.component_dir, self.spec.version))
def install(self, spec, prefix, installer_path=None):
def install(self, spec, prefix):
self.install_component(basename(self.url_for_version(spec.version)))
def install_component(self, installer_path):
"""Shared install method for all oneapi packages."""
# intel-oneapi-compilers overrides the installer_path when
# installing fortran, which comes from a spack resource
if installer_path is None:
installer_path = basename(self.url_for_version(spec.version))
if platform.system() == 'Linux':
if platform.system() == "Linux":
# Intel installer assumes and enforces that all components
# are installed into a single prefix. Spack wants to
# install each component in a separate prefix. The
@@ -71,28 +69,35 @@ def install(self, spec, prefix, installer_path=None):
# with other install depends on the userid. For root, we
# delete the installercache before and after install. For
# non root we redefine the HOME environment variable.
if getpass.getuser() == 'root':
shutil.rmtree('/var/intel/installercache', ignore_errors=True)
if getpass.getuser() == "root":
shutil.rmtree("/var/intel/installercache", ignore_errors=True)
bash = Executable('bash')
bash = Executable("bash")
# Installer writes files in ~/intel set HOME so it goes to prefix
bash.add_default_env('HOME', prefix)
bash.add_default_env("HOME", self.prefix)
# Installer checks $XDG_RUNTIME_DIR/.bootstrapper_lock_file as well
bash.add_default_env('XDG_RUNTIME_DIR',
join_path(self.stage.path, 'runtime'))
bash.add_default_env("XDG_RUNTIME_DIR", join_path(self.stage.path, "runtime"))
bash(installer_path,
'-s', '-a', '-s', '--action', 'install',
'--eula', 'accept',
'--install-dir', prefix)
bash(
installer_path,
"-s",
"-a",
"-s",
"--action",
"install",
"--eula",
"accept",
"--install-dir",
self.prefix,
)
if getpass.getuser() == 'root':
shutil.rmtree('/var/intel/installercache', ignore_errors=True)
if getpass.getuser() == "root":
shutil.rmtree("/var/intel/installercache", ignore_errors=True)
# Some installers have a bug and do not return an error code when failing
if not isdir(join_path(prefix, self.component_dir)):
raise RuntimeError('install failed')
if not isdir(join_path(self.prefix, self.component_dir)):
raise RuntimeError("install failed")
def setup_run_environment(self, env):
"""Adds environment variables to the generated module file.
@@ -103,8 +108,11 @@ def setup_run_environment(self, env):
$ source {prefix}/{component}/{version}/env/vars.sh
"""
env.extend(EnvironmentModifications.from_sourcing_file(
join_path(self.component_path, 'env', 'vars.sh')))
env.extend(
EnvironmentModifications.from_sourcing_file(
join_path(self.component_prefix, "env", "vars.sh")
)
)
class IntelOneApiLibraryPackage(IntelOneApiPackage):
@@ -118,14 +126,14 @@ class IntelOneApiLibraryPackage(IntelOneApiPackage):
@property
def headers(self):
include_path = join_path(self.component_path, 'include')
return find_headers('*', include_path, recursive=True)
include_path = join_path(self.component_prefix, "include")
return find_headers("*", include_path, recursive=True)
@property
def libs(self):
lib_path = join_path(self.component_path, 'lib', 'intel64')
lib_path = join_path(self.component_prefix, "lib", "intel64")
lib_path = lib_path if isdir(lib_path) else dirname(lib_path)
return find_libraries('*', root=lib_path, shared=True, recursive=True)
return find_libraries("*", root=lib_path, shared=True, recursive=True)
class IntelOneApiStaticLibraryList(object):
@@ -153,9 +161,10 @@ def search_flags(self):
@property
def link_flags(self):
return '-Wl,--start-group {0} -Wl,--end-group {1}'.format(
' '.join(self.static_libs.libraries), self.dynamic_libs.link_flags)
return "-Wl,--start-group {0} -Wl,--end-group {1}".format(
" ".join(self.static_libs.libraries), self.dynamic_libs.link_flags
)
@property
def ld_flags(self):
return '{0} {1}'.format(self.search_flags, self.link_flags)
return "{0} {1}".format(self.search_flags, self.link_flags)

View File

@@ -10,7 +10,7 @@
from llnl.util.filesystem import filter_file
from spack.directives import extends
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
from spack.util.executable import Executable
@@ -34,17 +34,18 @@ class PerlPackage(PackageBase):
:py:meth:`~.PerlPackage.configure`.
Arguments should not include the installation base directory.
"""
#: Phases of a Perl package
phases = ['configure', 'build', 'install']
phases = ["configure", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'PerlPackage'
build_system_class = "PerlPackage"
#: Callback names for build-time test
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
extends('perl')
extends("perl")
def configure_args(self):
"""Produces a list containing the arguments that must be passed to
@@ -62,20 +63,19 @@ def configure(self, spec, prefix):
:raise RuntimeError: if neither Makefile.PL or Build.PL exist
"""
if os.path.isfile('Makefile.PL'):
self.build_method = 'Makefile.PL'
if os.path.isfile("Makefile.PL"):
self.build_method = "Makefile.PL"
self.build_executable = inspect.getmodule(self).make
elif os.path.isfile('Build.PL'):
self.build_method = 'Build.PL'
self.build_executable = Executable(
os.path.join(self.stage.source_path, 'Build'))
elif os.path.isfile("Build.PL"):
self.build_method = "Build.PL"
self.build_executable = Executable(os.path.join(self.stage.source_path, "Build"))
else:
raise RuntimeError('Unknown build_method for perl package')
raise RuntimeError("Unknown build_method for perl package")
if self.build_method == 'Makefile.PL':
options = ['Makefile.PL', 'INSTALL_BASE={0}'.format(prefix)]
elif self.build_method == 'Build.PL':
options = ['Build.PL', '--install_base', prefix]
if self.build_method == "Makefile.PL":
options = ["Makefile.PL", "INSTALL_BASE={0}".format(prefix)]
elif self.build_method == "Build.PL":
options = ["Build.PL", "--install_base", prefix]
options += self.configure_args()
inspect.getmodule(self).perl(*options)
@@ -84,27 +84,27 @@ def configure(self, spec, prefix):
# Build.PL may be too long causing the build to fail. Patching the shebang
# does not happen until after install so set '/usr/bin/env perl' here in
# the Build script.
@run_after('configure')
@run_after("configure")
def fix_shebang(self):
if self.build_method == 'Build.PL':
pattern = '#!{0}'.format(self.spec['perl'].command.path)
repl = '#!/usr/bin/env perl'
filter_file(pattern, repl, 'Build', backup=False)
if self.build_method == "Build.PL":
pattern = "#!{0}".format(self.spec["perl"].command.path)
repl = "#!/usr/bin/env perl"
filter_file(pattern, repl, "Build", backup=False)
def build(self, spec, prefix):
"""Builds a Perl package."""
self.build_executable()
# Ensure that tests run after build (if requested):
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
def check(self):
"""Runs built-in tests of a Perl package."""
self.build_executable('test')
self.build_executable("test")
def install(self, spec, prefix):
"""Installs a Perl package."""
self.build_executable('install')
self.build_executable("install")
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -6,92 +6,95 @@
import os
import re
import shutil
from typing import Optional
import llnl.util.tty as tty
from llnl.util.filesystem import (
filter_file,
find,
find_all_headers,
find_libraries,
is_nonsymlink_exe_with_shebang,
path_contains_subdirectory,
same_path,
working_dir,
)
from llnl.util.lang import match_predicate
from llnl.util.lang import classproperty, match_predicate
from spack.directives import depends_on, extends
from spack.package import PackageBase, run_after
from spack.error import NoHeadersError, NoLibrariesError, SpecError
from spack.package_base import PackageBase, run_after
from spack.version import Version
class PythonPackage(PackageBase):
"""Specialized class for packages that are built using pip."""
#: Package name, version, and extension on PyPI
pypi = None
maintainers = ['adamjstewart']
#: Package name, version, and extension on PyPI
pypi = None # type: Optional[str]
maintainers = ["adamjstewart", "pradyunsg"]
# Default phases
phases = ['install']
phases = ["install"]
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'PythonPackage'
build_system_class = "PythonPackage"
#: Callback names for install-time test
install_time_test_callbacks = ['test']
install_time_test_callbacks = ["test"]
extends('python')
depends_on('py-pip', type='build')
extends("python")
depends_on("py-pip", type="build")
# FIXME: technically wheel is only needed when building from source, not when
# installing a downloaded wheel, but I don't want to add wheel as a dep to every
# package manually
depends_on('py-wheel', type='build')
depends_on("py-wheel", type="build")
py_namespace = None
py_namespace = None # type: Optional[str]
@staticmethod
def _std_args(cls):
return [
# Verbose
'-vvv',
"-vvv",
# Disable prompting for input
'--no-input',
"--no-input",
# Disable the cache
'--no-cache-dir',
"--no-cache-dir",
# Don't check to see if pip is up-to-date
'--disable-pip-version-check',
"--disable-pip-version-check",
# Install packages
'install',
"install",
# Don't install package dependencies
'--no-deps',
"--no-deps",
# Overwrite existing packages
'--ignore-installed',
"--ignore-installed",
# Use env vars like PYTHONPATH
'--no-build-isolation',
"--no-build-isolation",
# Don't warn that prefix.bin is not in PATH
'--no-warn-script-location',
"--no-warn-script-location",
# Ignore the PyPI package index
'--no-index',
"--no-index",
]
@property
def homepage(self):
if self.pypi:
name = self.pypi.split('/')[0]
return 'https://pypi.org/project/' + name + '/'
@classproperty
def homepage(cls):
if cls.pypi:
name = cls.pypi.split("/")[0]
return "https://pypi.org/project/" + name + "/"
@property
def url(self):
if self.pypi:
return (
'https://files.pythonhosted.org/packages/source/'
+ self.pypi[0] + '/' + self.pypi
)
@classproperty
def url(cls):
if cls.pypi:
return "https://files.pythonhosted.org/packages/source/" + cls.pypi[0] + "/" + cls.pypi
@property
def list_url(self):
if self.pypi:
name = self.pypi.split('/')[0]
return 'https://pypi.org/simple/' + name + '/'
@classproperty
def list_url(cls):
if cls.pypi:
name = cls.pypi.split("/")[0]
return "https://pypi.org/simple/" + name + "/"
@property
def import_modules(self):
@@ -112,7 +115,7 @@ def import_modules(self):
list: list of strings of module names
"""
modules = []
pkg = self.spec['python'].package
pkg = self.spec["python"].package
# Packages may be installed in platform-specific or platform-independent
# site-packages directories
@@ -121,22 +124,42 @@ def import_modules(self):
# Some Python libraries are packages: collections of modules
# distributed in directories containing __init__.py files
for path in find(root, '__init__.py', recursive=True):
modules.append(path.replace(root + os.sep, '', 1).replace(
os.sep + '__init__.py', '').replace('/', '.'))
for path in find(root, "__init__.py", recursive=True):
modules.append(
path.replace(root + os.sep, "", 1)
.replace(os.sep + "__init__.py", "")
.replace("/", ".")
)
# Some Python libraries are modules: individual *.py files
# found in the site-packages directory
for path in find(root, '*.py', recursive=False):
modules.append(path.replace(root + os.sep, '', 1).replace(
'.py', '').replace('/', '.'))
for path in find(root, "*.py", recursive=False):
modules.append(
path.replace(root + os.sep, "", 1).replace(".py", "").replace("/", ".")
)
modules = [mod for mod in modules if re.match('[a-zA-Z0-9._]+$', mod)]
modules = [
mod
for mod in modules
if re.match("[a-zA-Z0-9._]+$", mod) and not any(map(mod.startswith, self.skip_modules))
]
tty.debug('Detected the following modules: {0}'.format(modules))
tty.debug("Detected the following modules: {0}".format(modules))
return modules
@property
def skip_modules(self):
"""Names of modules that should be skipped when running tests.
These are a subset of import_modules. If a module has submodules,
they are skipped as well (meaning a.b is skipped if a is contained).
Returns:
list: list of strings of module names
"""
return []
@property
def build_directory(self):
"""The root directory of the Python package.
@@ -149,34 +172,103 @@ def build_directory(self):
"""
return self.stage.source_path
def config_settings(self, spec, prefix):
"""Configuration settings to be passed to the PEP 517 build backend.
Requires pip 22.1+, which requires Python 3.7+.
Args:
spec (spack.spec.Spec): build spec
prefix (spack.util.prefix.Prefix): installation prefix
Returns:
dict: dictionary of KEY, VALUE settings
"""
return {}
def install_options(self, spec, prefix):
"""Extra arguments to be supplied to the setup.py install command."""
"""Extra arguments to be supplied to the setup.py install command.
Args:
spec (spack.spec.Spec): build spec
prefix (spack.util.prefix.Prefix): installation prefix
Returns:
list: list of options
"""
return []
def global_options(self, spec, prefix):
"""Extra global options to be supplied to the setup.py call before the install
or bdist_wheel command."""
or bdist_wheel command.
Args:
spec (spack.spec.Spec): build spec
prefix (spack.util.prefix.Prefix): installation prefix
Returns:
list: list of options
"""
return []
def install(self, spec, prefix):
"""Install everything from build directory."""
args = PythonPackage._std_args(self) + ['--prefix=' + prefix]
args = PythonPackage._std_args(self) + ["--prefix=" + prefix]
for key, value in self.config_settings(spec, prefix).items():
if spec["py-pip"].version < Version("22.1"):
raise SpecError(
"'{}' package uses 'config_settings' which is only supported by "
"pip 22.1+. Add the following line to the package to fix this:\n\n"
' depends_on("py-pip@22.1:", type="build")'.format(spec.name)
)
args.append("--config-settings={}={}".format(key, value))
for option in self.install_options(spec, prefix):
args.append('--install-option=' + option)
args.append("--install-option=" + option)
for option in self.global_options(spec, prefix):
args.append('--global-option=' + option)
args.append("--global-option=" + option)
if self.stage.archive_file and self.stage.archive_file.endswith('.whl'):
if self.stage.archive_file and self.stage.archive_file.endswith(".whl"):
args.append(self.stage.archive_file)
else:
args.append('.')
args.append(".")
pip = inspect.getmodule(self).pip
with working_dir(self.build_directory):
pip(*args)
@property
def headers(self):
"""Discover header files in platlib."""
# Headers may be in either location
include = self.prefix.join(self.spec["python"].package.include)
platlib = self.prefix.join(self.spec["python"].package.platlib)
headers = find_all_headers(include) + find_all_headers(platlib)
if headers:
return headers
msg = "Unable to locate {} headers in {} or {}"
raise NoHeadersError(msg.format(self.spec.name, include, platlib))
@property
def libs(self):
"""Discover libraries in platlib."""
# Remove py- prefix in package name
library = "lib" + self.spec.name[3:].replace("-", "?")
root = self.prefix.join(self.spec["python"].package.platlib)
for shared in [True, False]:
libs = find_libraries(library, root, shared=shared, recursive=True)
if libs:
return libs
msg = "Unable to recursively locate {} libraries in {}"
raise NoLibrariesError(msg.format(self.spec.name, root))
# Testing
def test(self):
@@ -185,34 +277,32 @@ def test(self):
# Make sure we are importing the installed modules,
# not the ones in the source directory
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),
work_dir='spack-test')
self.run_test(
inspect.getmodule(self).python.path,
["-c", "import {0}".format(module)],
purpose="checking import of {0}".format(module),
work_dir="spack-test",
)
run_after('install')(PackageBase._run_default_install_time_test_callbacks)
run_after("install")(PackageBase._run_default_install_time_test_callbacks)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)
def view_file_conflicts(self, view, merge_map):
"""Report all file conflicts, excepting special cases for python.
Specifically, this does not report errors for duplicate
__init__.py files for packages in the same namespace.
Specifically, this does not report errors for duplicate
__init__.py files for packages in the same namespace.
"""
conflicts = list(dst for src, dst in merge_map.items()
if os.path.exists(dst))
conflicts = list(dst for src, dst in merge_map.items() if os.path.exists(dst))
if conflicts and self.py_namespace:
ext_map = view.extensions_layout.extension_map(self.extendee_spec)
namespaces = set(
x.package.py_namespace for x in ext_map.values())
namespace_re = (
r'site-packages/{0}/__init__.py'.format(self.py_namespace))
namespaces = set(x.package.py_namespace for x in ext_map.values())
namespace_re = r"site-packages/{0}/__init__.py".format(self.py_namespace)
find_namespace = match_predicate(namespace_re)
if self.py_namespace in namespaces:
conflicts = list(
x for x in conflicts if not find_namespace(x))
conflicts = list(x for x in conflicts if not find_namespace(x))
return conflicts
@@ -220,9 +310,7 @@ def add_files_to_view(self, view, merge_map, skip_if_exists=True):
bin_dir = self.spec.prefix.bin
python_prefix = self.extendee_spec.prefix
python_is_external = self.extendee_spec.external
global_view = same_path(python_prefix, view.get_projection_for_spec(
self.spec
))
global_view = same_path(python_prefix, view.get_projection_for_spec(self.spec))
for src, dst in merge_map.items():
if os.path.exists(dst):
continue
@@ -233,8 +321,9 @@ def add_files_to_view(self, view, merge_map, skip_if_exists=True):
is_script = is_nonsymlink_exe_with_shebang(src)
if is_script and not python_is_external:
filter_file(
python_prefix, os.path.abspath(
view.get_projection_for_spec(self.spec)), dst
python_prefix,
os.path.abspath(view.get_projection_for_spec(self.spec)),
dst,
)
else:
orig_link_target = os.path.realpath(src)
@@ -246,19 +335,16 @@ def remove_files_from_view(self, view, merge_map):
if self.py_namespace:
ext_map = view.extensions_layout.extension_map(self.extendee_spec)
remaining_namespaces = set(
spec.package.py_namespace for name, spec in ext_map.items()
if name != self.name)
spec.package.py_namespace for name, spec in ext_map.items() if name != self.name
)
if self.py_namespace in remaining_namespaces:
namespace_init = match_predicate(
r'site-packages/{0}/__init__.py'.format(self.py_namespace))
r"site-packages/{0}/__init__.py".format(self.py_namespace)
)
ignore_namespace = True
bin_dir = self.spec.prefix.bin
global_view = (
self.extendee_spec.prefix == view.get_projection_for_spec(
self.spec
)
)
global_view = self.extendee_spec.prefix == view.get_projection_for_spec(self.spec)
to_remove = []
for src, dst in merge_map.items():

View File

@@ -9,7 +9,7 @@
from llnl.util.filesystem import working_dir
from spack.directives import depends_on
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class QMakePackage(PackageBase):
@@ -27,17 +27,18 @@ class QMakePackage(PackageBase):
They all have sensible defaults and for many packages the only thing
necessary will be to override :py:meth:`~.QMakePackage.qmake_args`.
"""
#: Phases of a qmake package
phases = ['qmake', 'build', 'install']
phases = ["qmake", "build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'QMakePackage'
build_system_class = "QMakePackage"
#: Callback names for build-time test
build_time_test_callbacks = ['check']
build_time_test_callbacks = ["check"]
depends_on('qt', type='build')
depends_on("qt", type="build")
@property
def build_directory(self):
@@ -66,18 +67,17 @@ def install(self, spec, prefix):
"""Make the install targets"""
with working_dir(self.build_directory):
inspect.getmodule(self).make('install')
inspect.getmodule(self).make("install")
# Tests
def check(self):
"""Searches the Makefile for a ``check:`` target and runs it if found.
"""
"""Searches the Makefile for a ``check:`` target and runs it if found."""
with working_dir(self.build_directory):
self._if_make_target_execute('check')
self._if_make_target_execute("check")
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -2,12 +2,13 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import inspect
from typing import Optional
import llnl.util.lang as lang
from spack.directives import extends
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class RPackage(PackageBase):
@@ -23,51 +24,52 @@ class RPackage(PackageBase):
It has sensible defaults, and for many packages the only thing
necessary will be to add dependencies
"""
phases = ['install']
phases = ["install"]
# package attributes that can be expanded to set the homepage, url,
# list_url, and git values
# For CRAN packages
cran = None
cran = None # type: Optional[str]
# For Bioconductor packages
bioc = None
bioc = None # type: Optional[str]
maintainers = ['glennpj']
maintainers = ["glennpj"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'RPackage'
build_system_class = "RPackage"
extends('r')
extends("r")
@property
def homepage(self):
if self.cran:
return 'https://cloud.r-project.org/package=' + self.cran
elif self.bioc:
return 'https://bioconductor.org/packages/' + self.bioc
@lang.classproperty
def homepage(cls):
if cls.cran:
return "https://cloud.r-project.org/package=" + cls.cran
elif cls.bioc:
return "https://bioconductor.org/packages/" + cls.bioc
@property
def url(self):
if self.cran:
@lang.classproperty
def url(cls):
if cls.cran:
return (
'https://cloud.r-project.org/src/contrib/'
+ self.cran + '_' + str(list(self.versions)[0]) + '.tar.gz'
"https://cloud.r-project.org/src/contrib/"
+ cls.cran
+ "_"
+ str(list(cls.versions)[0])
+ ".tar.gz"
)
@property
def list_url(self):
if self.cran:
return (
'https://cloud.r-project.org/src/contrib/Archive/'
+ self.cran + '/'
)
@lang.classproperty
def list_url(cls):
if cls.cran:
return "https://cloud.r-project.org/src/contrib/Archive/" + cls.cran + "/"
@property
def git(self):
if self.bioc:
return 'https://git.bioconductor.org/packages/' + self.bioc
return "https://git.bioconductor.org/packages/" + self.bioc
def configure_args(self):
"""Arguments to pass to install via ``--configure-args``."""
@@ -83,24 +85,17 @@ def install(self, spec, prefix):
config_args = self.configure_args()
config_vars = self.configure_vars()
args = [
'--vanilla',
'CMD',
'INSTALL'
]
args = ["--vanilla", "CMD", "INSTALL"]
if config_args:
args.append('--configure-args={0}'.format(' '.join(config_args)))
args.append("--configure-args={0}".format(" ".join(config_args)))
if config_vars:
args.append('--configure-vars={0}'.format(' '.join(config_vars)))
args.append("--configure-vars={0}".format(" ".join(config_vars)))
args.extend([
'--library={0}'.format(self.module.r_lib_dir),
self.stage.source_path
])
args.extend(["--library={0}".format(self.module.r_lib_dir), self.stage.source_path])
inspect.getmodule(self).R(*args)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -3,13 +3,15 @@
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from typing import Optional
import llnl.util.lang as lang
import llnl.util.tty as tty
from llnl.util.filesystem import working_dir
from spack.build_environment import SPACK_NO_PARALLEL_MAKE, determine_number_of_jobs
from spack.directives import extends
from spack.package import PackageBase
from spack.package_base import PackageBase
from spack.util.environment import env_flag
from spack.util.executable import Executable, ProcessError
@@ -23,27 +25,28 @@ class RacketPackage(PackageBase):
* install
* setup
"""
#: Package name, version, and extension on PyPI
maintainers = ['elfprince13']
maintainers = ["elfprince13"]
# Default phases
phases = ['install']
phases = ["install"]
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'RacketPackage'
build_system_class = "RacketPackage"
extends('racket')
extends("racket")
pkgs = False
subdirectory = None
name = None
subdirectory = None # type: Optional[str]
racket_name = None # type: Optional[str]
parallel = True
@property
def homepage(self):
if self.pkgs:
return 'https://pkgs.racket-lang.org/package/{0}'.format(self.name)
@lang.classproperty
def homepage(cls):
if cls.pkgs:
return "https://pkgs.racket-lang.org/package/{0}".format(cls.racket_name)
@property
def build_directory(self):
@@ -57,14 +60,31 @@ def install(self, spec, prefix):
raco = Executable("raco")
with working_dir(self.build_directory):
allow_parallel = self.parallel and (not env_flag(SPACK_NO_PARALLEL_MAKE))
args = ['pkg', 'install', '-t', 'dir', '-n', self.name, '--deps', 'fail',
'--ignore-implies', '--copy', '-i', '-j',
str(determine_number_of_jobs(allow_parallel)),
'--', os.getcwd()]
args = [
"pkg",
"install",
"-t",
"dir",
"-n",
self.racket_name,
"--deps",
"fail",
"--ignore-implies",
"--copy",
"-i",
"-j",
str(determine_number_of_jobs(allow_parallel)),
"--",
os.getcwd(),
]
try:
raco(*args)
except ProcessError:
args.insert(-2, "--skip-installed")
raco(*args)
tty.warn(("Racket package {0} was already installed, uninstalling via "
"Spack may make someone unhappy!").format(self.name))
tty.warn(
(
"Racket package {0} was already installed, uninstalling via "
"Spack may make someone unhappy!"
).format(self.racket_name)
)

View File

@@ -77,7 +77,7 @@
import spack.variant
from spack.directives import conflicts, depends_on, variant
from spack.package import PackageBase
from spack.package_base import PackageBase
class ROCmPackage(PackageBase):
@@ -90,27 +90,44 @@ class ROCmPackage(PackageBase):
# https://llvm.org/docs/AMDGPUUsage.html
# Possible architectures
amdgpu_targets = (
'gfx701', 'gfx801', 'gfx802', 'gfx803',
'gfx900', 'gfx906', 'gfx908', 'gfx90a', 'gfx1010',
'gfx1011', 'gfx1012'
"gfx701",
"gfx801",
"gfx802",
"gfx803",
"gfx900",
"gfx900:xnack-",
"gfx906",
"gfx908",
"gfx90a",
"gfx906:xnack-",
"gfx908:xnack-",
"gfx90a:xnack-",
"gfx90a:xnack+",
"gfx1010",
"gfx1011",
"gfx1012",
"gfx1030",
"gfx1031",
)
variant('rocm', default=False, description='Enable ROCm support')
variant("rocm", default=False, description="Enable ROCm support")
# possible amd gpu targets for rocm builds
variant('amdgpu_target',
description='AMD GPU architecture',
values=spack.variant.any_combination_of(*amdgpu_targets),
when='+rocm')
variant(
"amdgpu_target",
description="AMD GPU architecture",
values=spack.variant.any_combination_of(*amdgpu_targets),
when="+rocm",
)
depends_on('llvm-amdgpu', when='+rocm')
depends_on('hsa-rocr-dev', when='+rocm')
depends_on('hip', when='+rocm')
depends_on("llvm-amdgpu", when="+rocm")
depends_on("hsa-rocr-dev", when="+rocm")
depends_on("hip", when="+rocm")
conflicts('^blt@:0.3.6', when='+rocm')
conflicts("^blt@:0.3.6", when="+rocm")
# need amd gpu type for rocm builds
conflicts('amdgpu_target=none', when='+rocm')
conflicts("amdgpu_target=none", when="+rocm")
# https://github.com/ROCm-Developer-Tools/HIP/blob/master/bin/hipcc
# It seems that hip-clang does not (yet?) accept this flag, in which case
@@ -119,7 +136,7 @@ class ROCmPackage(PackageBase):
@staticmethod
def hip_flags(amdgpu_target):
archs = ",".join(amdgpu_target)
return '--amdgpu-target={0}'.format(archs)
return "--amdgpu-target={0}".format(archs)
# HIP version vs Architecture

View File

@@ -7,7 +7,7 @@
import inspect
from spack.directives import extends
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class RubyPackage(PackageBase):
@@ -19,29 +19,29 @@ class RubyPackage(PackageBase):
#. :py:meth:`~.RubyPackage.install`
"""
maintainers = ['Kerilk']
maintainers = ["Kerilk"]
#: Phases of a Ruby package
phases = ['build', 'install']
phases = ["build", "install"]
#: This attribute is used in UI queries that need to know the build
#: system base class
build_system_class = 'RubyPackage'
build_system_class = "RubyPackage"
extends('ruby')
extends("ruby")
def build(self, spec, prefix):
"""Build a Ruby gem."""
# ruby-rake provides both rake.gemspec and Rakefile, but only
# rake.gemspec can be built without an existing rake installation
gemspecs = glob.glob('*.gemspec')
rakefiles = glob.glob('Rakefile')
gemspecs = glob.glob("*.gemspec")
rakefiles = glob.glob("Rakefile")
if gemspecs:
inspect.getmodule(self).gem('build', '--norc', gemspecs[0])
inspect.getmodule(self).gem("build", "--norc", gemspecs[0])
elif rakefiles:
jobs = inspect.getmodule(self).make_jobs
inspect.getmodule(self).rake('package', '-j{0}'.format(jobs))
inspect.getmodule(self).rake("package", "-j{0}".format(jobs))
else:
# Some Ruby packages only ship `*.gem` files, so nothing to build
pass
@@ -51,14 +51,14 @@ def install(self, spec, prefix):
The ruby package sets ``GEM_HOME`` to tell gem where to install to."""
gems = glob.glob('*.gem')
gems = glob.glob("*.gem")
if gems:
# if --install-dir is not used, GEM_PATH is deleted from the
# environement, and Gems required to build native extensions will
# not be found. Those extensions are built during `gem install`.
inspect.getmodule(self).gem(
'install', '--norc', '--ignore-dependencies',
'--install-dir', prefix, gems[0])
"install", "--norc", "--ignore-dependencies", "--install-dir", prefix, gems[0]
)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -7,7 +7,7 @@
import inspect
from spack.directives import depends_on
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class SConsPackage(PackageBase):
@@ -25,17 +25,18 @@ class SConsPackage(PackageBase):
variables that control the build. You will likely need to override
:py:meth:`~.SConsPackage.build_args` to pass the appropriate variables.
"""
#: Phases of a SCons package
phases = ['build', 'install']
phases = ["build", "install"]
#: To be used in UI queries that require to know which
#: build-system class we are using
build_system_class = 'SConsPackage'
build_system_class = "SConsPackage"
#: Callback names for build-time test
build_time_test_callbacks = ['build_test']
build_time_test_callbacks = ["build_test"]
depends_on('scons', type='build')
depends_on("scons", type="build")
def build_args(self, spec, prefix):
"""Arguments to pass to build."""
@@ -55,7 +56,7 @@ def install(self, spec, prefix):
"""Install the package."""
args = self.install_args(spec, prefix)
inspect.getmodule(self).scons('install', *args)
inspect.getmodule(self).scons("install", *args)
# Testing
@@ -67,7 +68,7 @@ def build_test(self):
"""
pass
run_after('build')(PackageBase._run_default_build_time_test_callbacks)
run_after("build")(PackageBase._run_default_build_time_test_callbacks)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)

View File

@@ -11,7 +11,7 @@
from llnl.util.filesystem import find, join_path, working_dir
from spack.directives import depends_on, extends
from spack.package import PackageBase, run_after
from spack.package_base import PackageBase, run_after
class SIPPackage(PackageBase):
@@ -28,23 +28,24 @@ class SIPPackage(PackageBase):
The configure phase already adds a set of default flags. To see more
options, run ``python configure.py --help``.
"""
# Default phases
phases = ['configure', 'build', 'install']
phases = ["configure", "build", "install"]
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'SIPPackage'
build_system_class = "SIPPackage"
#: Name of private sip module to install alongside package
sip_module = 'sip'
sip_module = "sip"
#: Callback names for install-time test
install_time_test_callbacks = ['test']
install_time_test_callbacks = ["test"]
extends('python')
extends("python")
depends_on('qt')
depends_on('py-sip')
depends_on("qt")
depends_on("py-sip")
@property
def import_modules(self):
@@ -67,24 +68,26 @@ def import_modules(self):
modules = []
root = os.path.join(
self.prefix,
self.spec['python'].package.platlib,
self.spec["python"].package.platlib,
)
# Some Python libraries are packages: collections of modules
# distributed in directories containing __init__.py files
for path in find(root, '__init__.py', recursive=True):
modules.append(path.replace(root + os.sep, '', 1).replace(
os.sep + '__init__.py', '').replace('/', '.'))
for path in find(root, "__init__.py", recursive=True):
modules.append(
path.replace(root + os.sep, "", 1)
.replace(os.sep + "__init__.py", "")
.replace("/", ".")
)
# Some Python libraries are modules: individual *.py files
# found in the site-packages directory
for path in find(root, '*.py', recursive=False):
modules.append(path.replace(root + os.sep, '', 1).replace(
'.py', '').replace('/', '.'))
for path in find(root, "*.py", recursive=False):
modules.append(path.replace(root + os.sep, "", 1).replace(".py", "").replace("/", "."))
modules = [mod for mod in modules if re.match('[a-zA-Z0-9._]+$', mod)]
modules = [mod for mod in modules if re.match("[a-zA-Z0-9._]+$", mod)]
tty.debug('Detected the following modules: {0}'.format(modules))
tty.debug("Detected the following modules: {0}".format(modules))
return modules
@@ -94,7 +97,7 @@ def python(self, *args, **kwargs):
def configure_file(self):
"""Returns the name of the configure file to use."""
return 'configure.py'
return "configure.py"
def configure(self, spec, prefix):
"""Configure the package."""
@@ -102,16 +105,22 @@ def configure(self, spec, prefix):
args = self.configure_args()
args.extend([
'--verbose',
'--confirm-license',
'--qmake', spec['qt'].prefix.bin.qmake,
'--sip', spec['py-sip'].prefix.bin.sip,
'--sip-incdir', join_path(spec['py-sip'].prefix,
spec['python'].package.include),
'--bindir', prefix.bin,
'--destdir', inspect.getmodule(self).python_platlib,
])
args.extend(
[
"--verbose",
"--confirm-license",
"--qmake",
spec["qt"].prefix.bin.qmake,
"--sip",
spec["py-sip"].prefix.bin.sip,
"--sip-incdir",
join_path(spec["py-sip"].prefix, spec["python"].package.include),
"--bindir",
prefix.bin,
"--destdir",
inspect.getmodule(self).python_platlib,
]
)
self.python(configure, *args)
@@ -133,7 +142,7 @@ def install(self, spec, prefix):
"""Install the package."""
args = self.install_args()
inspect.getmodule(self).make('install', parallel=False, *args)
inspect.getmodule(self).make("install", parallel=False, *args)
def install_args(self):
"""Arguments to pass to install."""
@@ -147,23 +156,25 @@ def test(self):
# Make sure we are importing the installed modules,
# not the ones in the source directory
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),
work_dir='spack-test')
self.run_test(
inspect.getmodule(self).python.path,
["-c", "import {0}".format(module)],
purpose="checking import of {0}".format(module),
work_dir="spack-test",
)
run_after('install')(PackageBase._run_default_install_time_test_callbacks)
run_after("install")(PackageBase._run_default_install_time_test_callbacks)
# Check that self.prefix is there after installation
run_after('install')(PackageBase.sanity_check_prefix)
run_after("install")(PackageBase.sanity_check_prefix)
@run_after('install')
@run_after("install")
def extend_path_setup(self):
# See github issue #14121 and PR #15297
module = self.spec['py-sip'].variants['module'].value
if module != 'sip':
module = module.split('.')[0]
module = self.spec["py-sip"].variants["module"].value
if module != "sip":
module = module.split(".")[0]
with working_dir(inspect.getmodule(self).python_platlib):
with open(os.path.join(module, '__init__.py'), 'a') as f:
f.write('from pkgutil import extend_path\n')
f.write('__path__ = extend_path(__path__, __name__)\n')
with open(os.path.join(module, "__init__.py"), "a") as f:
f.write("from pkgutil import extend_path\n")
f.write("__path__ = extend_path(__path__, __name__)\n")

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